Browse Source

完成sqlresult测试

yjp 9 months ago
parent
commit
e6ca3863d5

+ 7 - 2
framework/core/tag/sql/sql_result/usage.go

@@ -106,7 +106,7 @@ func defaultCallback(result map[string]any, columnName string) OnParsedFieldTagF
 			return fmt.Errorf("字段: %s 列: %s 不支持的类型: %s",
 				fieldName, tag.Name, entityFieldElemValue.Type().String())
 		case reflect.Slice:
-			if reflectutils.IsSliceValueOf(entityFieldElemValue, reflect.String) {
+			if !reflectutils.IsSliceValueOf(entityFieldElemValue, reflect.String) {
 				return errors.New(fieldName + " Error: slice仅支持[]string")
 			}
 
@@ -155,7 +155,12 @@ func parseTimeStringResult(timeStr string) (time.Time, error) {
 		}
 	}
 
-	return time.ParseInLocation(layout, timeStr, time.Local)
+	parsedTime, err := time.ParseInLocation(layout, timeStr, time.Local)
+	if err != nil {
+		return time.Time{}, errors.New(err.Error())
+	}
+
+	return parsedTime, nil
 }
 
 func dealStringResultValue(value string, tag *Tag) (string, error) {

+ 20 - 20
test/assign_tag_test.go

@@ -407,120 +407,120 @@ func TestAssignTagDefaultUsage(t *testing.T) {
 
 	err := assign.DefaultUsage(from, to)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(from, toPointer)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(fromPointer, to)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(fromPointer, toPointer)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(from, &to)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	to.checkFields(t, from)
 
 	err = assign.DefaultUsage(from, &toPointer)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	toPointer.checkFields(t, from)
 
 	err = assign.DefaultUsage(fromPointer, &to)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	to.checkFields(t, from)
 
 	err = assign.DefaultUsage(fromPointer, &toPointer)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	toPointer.checkFields(t, from)
 
 	err = assign.DefaultUsage(&from, to)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(&from, toPointer)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(&fromPointer, to)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(&fromPointer, toPointer)
 	if err == nil || err.Error() != "返回类型不是结构指针" {
-		t.Fatalf("%+v", errors.Errorf("to参数必须是指针类型"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出to参数必须是指针类型"))
 	}
 
 	err = assign.DefaultUsage(&from, &to)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	to.checkFields(t, from)
 
 	err = assign.DefaultUsage(&from, &toPointer)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	toPointer.checkFields(t, from)
 
 	err = assign.DefaultUsage(&fromPointer, &to)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	to.checkFields(t, from)
 
 	err = assign.DefaultUsage(&fromPointer, &toPointer)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	toPointer.checkFields(t, from)
 
 	err = assign.DefaultUsage(fromPointerNil, &to)
 	if err == nil || err.Error() != "无法设置值,请检查是否传递的是非指针结构变量且字段为nil" {
-		t.Fatalf("%+v", errors.Errorf("from如果有nil字段,必须使用指针结构变量"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出from如果有nil字段,必须使用指针结构变量"))
 	}
 
 	err = assign.DefaultUsage(fromPointerNil, &toPointer)
 	if err == nil || err.Error() != "无法设置值,请检查是否传递的是非指针结构变量且字段为nil" {
-		t.Fatalf("%+v", errors.Errorf("from如果有nil字段,必须使用指针结构变量"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出from如果有nil字段,必须使用指针结构变量"))
 	}
 
 	err = assign.DefaultUsage(&fromPointerNil, &to)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	to.checkFields(t, from)
 
 	err = assign.DefaultUsage(&fromPointerNil, &toPointer)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	toPointer.checkFields(t, from)

+ 6 - 6
test/check_tag_test.go

@@ -37,37 +37,37 @@ func TestCustomCheckTag(t *testing.T) {
 	err := check.Struct(customCheckTagStruct, fieldMap).
 		CheckFields("Time")
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	err = check.Struct(customCheckTagPointerStruct, fieldMap).
 		CheckFields("Time")
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	err = check.Struct(&customCheckTagStruct, fieldMap).
 		CheckFields("Time")
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	err = check.Struct(&customCheckTagPointerStruct, fieldMap).
 		CheckFields("Time")
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	err = check.Struct(customCheckTagStructZero, fieldMap).
 		CheckFields("Time")
 	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", errors.New("没有检测出使用了时间零值"))
 	}
 
 	err = check.Struct(customCheckTagPointerStructZero, fieldMap).
 		CheckFields("Time")
 	if err == nil || !strings.Contains(err.Error(), "使用了时间零值") {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", errors.New("没有检测出使用了时间零值"))
 	}
 
 	err = check.Struct(&customCheckTagStructZero, fieldMap).

+ 20 - 15
test/sql_mapping_tag_test.go

@@ -6,6 +6,7 @@ import (
 	"git.sxidc.com/go-tools/utils/strutils"
 	"github.com/pkg/errors"
 	"math/rand"
+	"reflect"
 	"strings"
 	"testing"
 )
@@ -29,6 +30,10 @@ type SqlMappingTagStruct struct {
 }
 
 func (s SqlMappingTagStruct) checkFields(t *testing.T, fields []sql_mapping.Field) {
+	if len(fields) != reflect.TypeOf(s).NumField()-1 {
+		t.Fatalf("%+v", errors.Errorf("有字段没有被解析"))
+	}
+
 	for _, field := range fields {
 		if field.FieldName == "Ignore" || field.ColumnName == "ignore" {
 			t.Fatalf("%+v", errors.Errorf("忽略字段没有被忽略"))
@@ -37,7 +42,7 @@ func (s SqlMappingTagStruct) checkFields(t *testing.T, fields []sql_mapping.Fiel
 		switch field.FieldName {
 		case "Column":
 			if s.Column != field.Value {
-				t.Fatalf("%+v", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
+				t.Fatalf("%+v", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
 					field.FieldName, s.Column, field.Value))
 			}
 
@@ -198,7 +203,7 @@ func (s SqlMappingTagStruct) checkFields(t *testing.T, fields []sql_mapping.Fiel
 	}
 }
 
-type SqlMappingTagStructPointerFields struct {
+type SqlMappingTagPointerFieldsStruct struct {
 	Ignore          *string   `sqlmapping:"-"`
 	Column          *string   `sqlmapping:"column:test_column"`
 	Key             *string   `sqlmapping:"key"`
@@ -216,7 +221,7 @@ type SqlMappingTagStructPointerFields struct {
 	WrongTrimSuffix *int      `sqlmapping:"trimSuffix:}}"`
 }
 
-func (s SqlMappingTagStructPointerFields) checkFields(t *testing.T, fields []sql_mapping.Field) {
+func (s SqlMappingTagPointerFieldsStruct) checkFields(t *testing.T, fields []sql_mapping.Field) {
 	for _, field := range fields {
 		if field.FieldName == "Ignore" || field.ColumnName == "ignore" {
 			t.Fatalf("%+v", errors.Errorf("忽略字段没有被忽略"))
@@ -386,7 +391,7 @@ func (s SqlMappingTagStructPointerFields) checkFields(t *testing.T, fields []sql
 	}
 }
 
-func TestSqlMappingTagDefaultTag(t *testing.T) {
+func TestSqlMappingTagDefaultUsage(t *testing.T) {
 	ignore := strutils.SimpleUUID()
 	column := strutils.SimpleUUID()
 	key := strutils.SimpleUUID()
@@ -394,9 +399,9 @@ func TestSqlMappingTagDefaultTag(t *testing.T) {
 	updateClear := strutils.SimpleUUID()
 	aes := strutils.SimpleUUID()
 	joinWith := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
-	trim := strutils.SimpleUUID()
-	trimPrefix := strutils.SimpleUUID()
-	trimSuffix := strutils.SimpleUUID()
+	trim := "||" + strutils.SimpleUUID() + "||"
+	trimPrefix := "{{" + strutils.SimpleUUID()
+	trimSuffix := strutils.SimpleUUID() + "}}"
 	wrongAes := rand.Int()
 	wrongJoinWith := strutils.SimpleUUID()
 	wrongTrim := rand.Int()
@@ -421,7 +426,7 @@ func TestSqlMappingTagDefaultTag(t *testing.T) {
 		WrongTrimSuffix: wrongTrimSuffix,
 	}
 
-	sPointerFields := SqlMappingTagStructPointerFields{
+	sPointerFields := SqlMappingTagPointerFieldsStruct{
 		Ignore:          &ignore,
 		Column:          &column,
 		Key:             &key,
@@ -439,44 +444,44 @@ func TestSqlMappingTagDefaultTag(t *testing.T) {
 		WrongTrimSuffix: &wrongTrimSuffix,
 	}
 
-	sPointerFieldsNil := SqlMappingTagStructPointerFields{}
+	sPointerFieldsNil := SqlMappingTagPointerFieldsStruct{}
 
 	fields, err := sql_mapping.DefaultUsage(s)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	s.checkFields(t, fields)
 
 	fields, err = sql_mapping.DefaultUsage(&s)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	s.checkFields(t, fields)
 
 	fields, err = sql_mapping.DefaultUsage(sPointerFields)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	sPointerFields.checkFields(t, fields)
 
 	fields, err = sql_mapping.DefaultUsage(&sPointerFields)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	sPointerFields.checkFields(t, fields)
 
 	fields, err = sql_mapping.DefaultUsage(sPointerFieldsNil)
 	if err == nil || err.Error() != "无法设置值,请检查是否传递的是非指针结构变量且字段为nil" {
-		t.Fatalf("%+v", errors.Errorf("from如果有nil字段,必须使用指针结构变量"))
+		t.Fatalf("%+v", errors.Errorf("没有检测出from如果有nil字段,必须使用指针结构变量"))
 	}
 
 	fields, err = sql_mapping.DefaultUsage(&sPointerFieldsNil)
 	if err != nil {
-		t.Fatalf("%+v", errors.Errorf(err.Error()))
+		t.Fatalf("%+v", err)
 	}
 
 	sPointerFieldsNil.checkFields(t, fields)

+ 319 - 0
test/sql_result_tag_test.go

@@ -0,0 +1,319 @@
+package test
+
+import (
+	"git.sxidc.com/go-framework/baize/framework/core/tag/sql/sql_result"
+	"git.sxidc.com/go-tools/utils/encoding"
+	"git.sxidc.com/go-tools/utils/strutils"
+	"github.com/pkg/errors"
+	"math/rand"
+	"reflect"
+	"strings"
+	"testing"
+	"time"
+)
+
+type SqlResultTagStruct struct {
+	Ignore          string    `sqlresult:"-"`
+	Column          string    `sqlresult:"column:test_column"`
+	TimeLayout      time.Time `sqlresult:"timeLayout:2006-01-02"`
+	Aes             string    `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
+	SplitWith       []string  `sqlresult:"splitWith:##"`
+	Trim            string    `sqlresult:"trim:||"`
+	TrimPrefix      string    `sqlresult:"trimPrefix:{{"`
+	TrimSuffix      string    `sqlresult:"trimSuffix:}}"`
+	WrongTimeLayout int       `sqlresult:"timeLayout:2006-01-02"`
+	WrongAes        int       `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
+	WrongSplitWith  int       `sqlresult:"splitWith:##"`
+	WrongTrim       int       `sqlresult:"trim:||"`
+	WrongTrimPrefix int       `sqlresult:"trimPrefix:{{"`
+	WrongTrimSuffix int       `sqlresult:"trimSuffix:}}"`
+}
+
+func (s SqlResultTagStruct) checkFields(t *testing.T, result map[string]any) {
+	if len(result) != reflect.TypeOf(s).NumField()-1 {
+		t.Fatalf("%+v", errors.Errorf("有字段没有被解析"))
+	}
+
+	for columnName, value := range result {
+		if columnName == "ignore" {
+			t.Fatalf("%+v", errors.Errorf("忽略字段没有被忽略"))
+		}
+
+		switch columnName {
+		case "test_column":
+			if s.Column != value {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.Column, value))
+			}
+		case "time_layout":
+			resultValue := value.(string)
+
+			if s.TimeLayout.Format(time.DateOnly)+"T00:00:00" != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.TimeLayout.Format(time.DateOnly), resultValue))
+			}
+		case "aes":
+			resultValue := value.(string)
+
+			decrypted, err := encoding.AESDecrypt(resultValue, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
+			if err != nil {
+				t.Fatalf("%+v", errors.Errorf(err.Error()))
+			}
+
+			if s.Aes != decrypted {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.Aes, decrypted))
+			}
+		case "split_with":
+			resultValue := value.(string)
+
+			if strings.Join(s.SplitWith, "##") != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, strings.Join(s.SplitWith, "##"), resultValue))
+			}
+		case "trim":
+			resultValue := value.(string)
+
+			if s.Trim != strings.Trim(resultValue, "||") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.Trim, strings.Trim(resultValue, "||")))
+			}
+		case "trim_prefix":
+			resultValue := value.(string)
+
+			if s.TrimPrefix != strings.TrimPrefix(resultValue, "{{") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.TrimPrefix, strings.TrimPrefix(resultValue, "{{")))
+			}
+		case "trim_suffix":
+			resultValue := value.(string)
+
+			if s.TrimSuffix != strings.TrimSuffix(resultValue, "}}") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.TrimSuffix, strings.TrimSuffix(resultValue, "}}")))
+			}
+		case "wrong_time_layout":
+			resultValue := value.(int)
+
+			if s.WrongTimeLayout != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTimeLayout, resultValue))
+			}
+		case "wrong_aes":
+			resultValue := value.(int)
+
+			if s.WrongAes != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongAes, resultValue))
+			}
+		case "wrong_split_with":
+			resultValue := value.(int)
+
+			if s.WrongSplitWith != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongSplitWith, resultValue))
+			}
+		case "wrong_trim":
+			resultValue := value.(int)
+
+			if s.WrongTrim != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrim, resultValue))
+			}
+		case "wrong_trim_prefix":
+			resultValue := value.(int)
+
+			if s.WrongTrimPrefix != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrimPrefix, resultValue))
+			}
+		case "wrong_trim_suffix":
+			resultValue := value.(int)
+
+			if s.WrongTrimSuffix != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrimSuffix, resultValue))
+			}
+		default:
+			t.Fatalf("%+v", errors.Errorf("未知的列: tag columnName: %v", columnName))
+		}
+	}
+}
+
+type SqlResultTagPointFieldsStruct struct {
+	Ignore          *string    `sqlresult:"-"`
+	Column          *string    `sqlresult:"column:test_column"`
+	TimeLayout      *time.Time `sqlresult:"timeLayout:2006-01-02"`
+	Aes             *string    `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
+	SplitWith       *[]string  `sqlresult:"splitWith:##"`
+	Trim            *string    `sqlresult:"trim:||"`
+	TrimPrefix      *string    `sqlresult:"trimPrefix:{{"`
+	TrimSuffix      *string    `sqlresult:"trimSuffix:}}"`
+	WrongTimeLayout *int       `sqlresult:"timeLayout:2006-01-02"`
+	WrongAes        *int       `sqlresult:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
+	WrongSplitWith  *int       `sqlresult:"splitWith:##"`
+	WrongTrim       *int       `sqlresult:"trim:||"`
+	WrongTrimPrefix *int       `sqlresult:"trimPrefix:{{"`
+	WrongTrimSuffix *int       `sqlresult:"trimSuffix:}}"`
+}
+
+func (s SqlResultTagPointFieldsStruct) checkFields(t *testing.T, result map[string]any) {
+	if len(result) != reflect.TypeOf(s).NumField()-1 {
+		t.Fatalf("%+v", errors.Errorf("有字段没有被解析"))
+	}
+
+	for columnName, value := range result {
+		if columnName == "ignore" {
+			t.Fatalf("%+v", errors.Errorf("忽略字段没有被忽略"))
+		}
+
+		switch columnName {
+		case "test_column":
+			if *s.Column != value {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, *s.Column, value))
+			}
+		case "time_layout":
+			resultValue := value.(string)
+
+			if (*s.TimeLayout).Format(time.DateOnly)+"T00:00:00" != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, (*s.TimeLayout).Format(time.DateOnly), resultValue))
+			}
+		case "aes":
+			resultValue := value.(string)
+
+			decrypted, err := encoding.AESDecrypt(resultValue, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
+			if err != nil {
+				t.Fatalf("%+v", errors.Errorf(err.Error()))
+			}
+
+			if *s.Aes != decrypted {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, *s.Aes, decrypted))
+			}
+		case "split_with":
+			resultValue := value.(string)
+
+			if strings.Join(*s.SplitWith, "##") != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, strings.Join(*s.SplitWith, "##"), resultValue))
+			}
+		case "trim":
+			resultValue := value.(string)
+
+			if *s.Trim != strings.Trim(resultValue, "||") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.Trim, strings.Trim(resultValue, "||")))
+			}
+		case "trim_prefix":
+			resultValue := value.(string)
+
+			if *s.TrimPrefix != strings.TrimPrefix(resultValue, "{{") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.TrimPrefix, strings.TrimPrefix(resultValue, "{{")))
+			}
+		case "trim_suffix":
+			resultValue := value.(string)
+
+			if *s.TrimSuffix != strings.TrimSuffix(resultValue, "}}") {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.TrimSuffix, strings.TrimSuffix(resultValue, "}}")))
+			}
+		case "wrong_time_layout":
+			resultValue := value.(int)
+
+			if *s.WrongTimeLayout != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTimeLayout, resultValue))
+			}
+		case "wrong_aes":
+			resultValue := value.(int)
+
+			if *s.WrongAes != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongAes, resultValue))
+			}
+		case "wrong_split_with":
+			resultValue := value.(int)
+
+			if *s.WrongSplitWith != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongSplitWith, resultValue))
+			}
+		case "wrong_trim":
+			resultValue := value.(int)
+
+			if *s.WrongTrim != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrim, resultValue))
+			}
+		case "wrong_trim_prefix":
+			resultValue := value.(int)
+
+			if *s.WrongTrimPrefix != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrimPrefix, resultValue))
+			}
+		case "wrong_trim_suffix":
+			resultValue := value.(int)
+
+			if *s.WrongTrimSuffix != resultValue {
+				t.Fatalf("%+v", errors.Errorf("值不正确: columnName: %v, fieldValue %v, resultValue %v",
+					columnName, s.WrongTrimSuffix, resultValue))
+			}
+		default:
+			t.Fatalf("%+v", errors.Errorf("未知的列: tag columnName: %v", columnName))
+		}
+	}
+}
+
+func TestSqlResultTagDefaultUsage(t *testing.T) {
+	aesEncrypted, err := encoding.AESEncrypt(strutils.SimpleUUID(), "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
+	if err != nil {
+		t.Fatalf("%+v", errors.Errorf(err.Error()))
+	}
+
+	result := map[string]any{
+		"test_column":       strutils.SimpleUUID(),
+		"time_layout":       "2024-07-03T00:00:00",
+		"aes":               aesEncrypted,
+		"split_with":        strings.Join([]string{strutils.SimpleUUID(), strutils.SimpleUUID()}, "##"),
+		"trim":              "||" + strutils.SimpleUUID() + "||",
+		"trim_prefix":       "{{" + strutils.SimpleUUID(),
+		"trim_suffix":       strutils.SimpleUUID() + "}}",
+		"wrong_time_layout": rand.Int(),
+		"wrong_aes":         rand.Int(),
+		"wrong_split_with":  rand.Int(),
+		"wrong_trim":        rand.Int(),
+		"wrong_trim_prefix": rand.Int(),
+		"wrong_trim_suffix": rand.Int(),
+	}
+
+	s := SqlResultTagStruct{}
+	sPointerField := SqlResultTagPointFieldsStruct{}
+
+	err = sql_result.DefaultUsage(result, s, "")
+	if err == nil || err.Error() != "参数不是结构指针" {
+		t.Fatalf("%+v", errors.Errorf("没有检测出参数必须是指针类型"))
+	}
+
+	err = sql_result.DefaultUsage(result, sPointerField, "")
+	if err == nil || err.Error() != "参数不是结构指针" {
+		t.Fatalf("%+v", errors.Errorf("没有检测出参数必须是指针类型"))
+	}
+
+	err = sql_result.DefaultUsage(result, &s, "")
+	if err != nil {
+		t.Fatalf("%+v", err)
+	}
+
+	s.checkFields(t, result)
+
+	err = sql_result.DefaultUsage(result, &sPointerField, "")
+	if err != nil {
+		t.Fatalf("%+v", err)
+	}
+
+	sPointerField.checkFields(t, result)
+}