Bläddra i källkod

修改tag结构

yjp 1 år sedan
förälder
incheckning
89eb8f0f8b
3 ändrade filer med 50 tillägg och 34 borttagningar
  1. 6 6
      sdk/crud.go
  2. 26 18
      sdk/tag/sql_mapping.go
  3. 18 10
      sdk/tag/sql_result.go

+ 6 - 6
sdk/crud.go

@@ -47,11 +47,11 @@ func Insert[T any](executor RawSqlExecutor, tableName string, e T, callback Inse
 	now := time.Now()
 
 	for fieldName, sqlMappingColumn := range sqlMapping.ColumnMap {
-		fieldType := sqlMappingColumn.FieldType
+		fieldType := sqlMappingColumn.ValueFieldType
 
 		value := reflect.Zero(fieldType).Interface()
-		if !sqlMappingColumn.FieldValue.IsZero() {
-			value = sqlMappingColumn.FieldValue.Interface()
+		if !sqlMappingColumn.ValueFieldValue.IsZero() {
+			value = sqlMappingColumn.ValueFieldValue.Interface()
 		}
 
 		if sqlMappingColumn.InsertCallback {
@@ -128,11 +128,11 @@ func Delete[T any](executor RawSqlExecutor, tableName string, e T) error {
 			continue
 		}
 
-		fieldType := sqlMappingColumn.FieldType
+		fieldType := sqlMappingColumn.ValueFieldType
 
 		value := reflect.Zero(fieldType).Interface()
-		if !sqlMappingColumn.FieldValue.IsZero() {
-			value = sqlMappingColumn.FieldValue.Interface()
+		if !sqlMappingColumn.ValueFieldValue.IsZero() {
+			value = sqlMappingColumn.ValueFieldValue.Interface()
 		}
 
 		tableRowValue, err := parseValue(value)

+ 26 - 18
sdk/tag/sql_mapping.go

@@ -81,34 +81,42 @@ type SqlMappingColumn struct {
 	UpdateCallback bool
 	QueryCallback  bool
 
+	// 原字段的反射结构
+	OriginFieldType  reflect.Type
+	OriginFieldValue reflect.Value
+
 	// 值类型的反射结构
-	FieldType  reflect.Type
-	FieldValue reflect.Value
+	ValueFieldType  reflect.Type
+	ValueFieldValue reflect.Value
 }
 
 func parseSqlMappingColumn(field reflect.StructField, fieldValue reflect.Value) (*SqlMappingColumn, error) {
-	fieldType := field.Type
-	if fieldType.Kind() == reflect.Ptr {
-		fieldType = fieldType.Elem()
+	valueFieldType := field.Type
+	valueFieldValue := fieldValue
+
+	if valueFieldType.Kind() == reflect.Ptr {
+		valueFieldType = valueFieldType.Elem()
 
-		if fieldValue.IsZero() {
-			fieldValue = reflect.Zero(fieldType)
+		if valueFieldValue.IsZero() {
+			valueFieldValue = reflect.Zero(valueFieldType)
 		} else {
-			fieldValue = fieldValue.Elem()
+			valueFieldValue = fieldValue.Elem()
 		}
 	}
 
 	sqlColumn := &SqlMappingColumn{
-		Name:           strcase.ToSnake(field.Name),
-		IsKey:          false,
-		CanUpdate:      true,
-		CanUpdateClear: false,
-		CanQuery:       true,
-		InsertCallback: false,
-		UpdateCallback: false,
-		QueryCallback:  false,
-		FieldType:      fieldType,
-		FieldValue:     fieldValue,
+		Name:             strcase.ToSnake(field.Name),
+		IsKey:            false,
+		CanUpdate:        true,
+		CanUpdateClear:   false,
+		CanQuery:         true,
+		InsertCallback:   false,
+		UpdateCallback:   false,
+		QueryCallback:    false,
+		OriginFieldType:  field.Type,
+		OriginFieldValue: fieldValue,
+		ValueFieldType:   valueFieldType,
+		ValueFieldValue:  valueFieldValue,
 	}
 
 	sqlMappingTag, ok := field.Tag.Lookup(sqlMappingTagKey)

+ 18 - 10
sdk/tag/sql_result.go

@@ -70,20 +70,26 @@ type SqlResultColumn struct {
 	ResultColumnName string
 	Callback         bool
 
+	// 原字段的反射结构
+	OriginFieldType  reflect.Type
+	OriginFieldValue reflect.Value
+
 	// 值类型的反射结构
-	FieldType  reflect.Type
-	FieldValue reflect.Value
+	ValueFieldType  reflect.Type
+	ValueFieldValue reflect.Value
 }
 
 func parseSqlResultColumn(field reflect.StructField, fieldValue reflect.Value) (*SqlResultColumn, error) {
-	fieldType := field.Type
-	if fieldType.Kind() == reflect.Ptr {
-		fieldType = fieldType.Elem()
+	valueFieldType := field.Type
+	valueFieldValue := fieldValue
+
+	if valueFieldType.Kind() == reflect.Ptr {
+		valueFieldType = valueFieldType.Elem()
 
-		if fieldValue.IsZero() {
-			fieldValue = reflect.Zero(fieldType)
+		if valueFieldValue.IsZero() {
+			valueFieldValue = reflect.Zero(valueFieldType)
 		} else {
-			fieldValue = fieldValue.Elem()
+			valueFieldValue = fieldValue.Elem()
 		}
 	}
 
@@ -91,8 +97,10 @@ func parseSqlResultColumn(field reflect.StructField, fieldValue reflect.Value) (
 		Name:             strcase.ToSnake(field.Name),
 		ResultColumnName: strcase.ToSnake(field.Name),
 		Callback:         false,
-		FieldType:        fieldType,
-		FieldValue:       fieldValue,
+		OriginFieldType:  field.Type,
+		OriginFieldValue: fieldValue,
+		ValueFieldType:   valueFieldType,
+		ValueFieldValue:  valueFieldValue,
 	}
 
 	sqlResultTag, ok := field.Tag.Lookup(sqlResultTagKey)