|
@@ -32,6 +32,7 @@ type Class struct {
|
|
|
Name string `sqlmapping:"updateClear;aes:@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L;" sqlresult:"aes:@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L;"`
|
|
|
StudentNum int `sqlmapping:"column:student_num;notUpdate;" sqlresult:"column:student_num_alias"`
|
|
|
GraduatedTime *time.Time
|
|
|
+ StudentIDs []string `sqlmapping:"column:student_ids;joinWith:'\n'" sqlresult:"column:student_ids;splitWith:'\n'"`
|
|
|
TimeFields
|
|
|
Ignored string `sqlmapping:"-" sqlresult:"-"`
|
|
|
*GraduatedTimeTestField
|
|
@@ -75,6 +76,7 @@ func TestBasic(t *testing.T) {
|
|
|
classID := strutils.SimpleUUID()
|
|
|
className := strutils.SimpleUUID()
|
|
|
studentNum := rand.Int31n(100)
|
|
|
+ studentIDs := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
|
|
|
now := time.Now()
|
|
|
|
|
|
insertExecuteParams, err := sql_tpl.InsertExecuteParams{
|
|
@@ -82,6 +84,7 @@ func TestBasic(t *testing.T) {
|
|
|
TableRows: sql_tpl.NewTableRows().Add("id", classID).
|
|
|
Add("name", className, sql_tpl.WithAESKey("@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L")).
|
|
|
Add("student_num", studentNum).
|
|
|
+ Add("student_ids", strings.Join(studentIDs, "\n")).
|
|
|
Add("graduated_time", now).
|
|
|
Add("created_time", now).
|
|
|
Add("last_updated_time", now),
|
|
@@ -168,8 +171,10 @@ func TestRawSqlTemplate(t *testing.T) {
|
|
|
classID := strutils.SimpleUUID()
|
|
|
className := strutils.SimpleUUID()
|
|
|
studentNum := rand.Int31n(100)
|
|
|
+ studentIDs := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
|
|
|
newClassName := strutils.SimpleUUID()
|
|
|
newStudentNum := rand.Int31n(100)
|
|
|
+ newStudentIDs := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
|
|
|
|
|
|
now := time.Now()
|
|
|
|
|
@@ -178,6 +183,7 @@ func TestRawSqlTemplate(t *testing.T) {
|
|
|
TableRows: sql_tpl.NewTableRows().Add("id", classID).
|
|
|
Add("name", className, sql_tpl.WithAESKey("@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L")).
|
|
|
Add("student_num", studentNum).
|
|
|
+ Add("student_ids", strings.Join(studentIDs, "\n")).
|
|
|
Add("graduated_time", now).
|
|
|
Add("created_time", now).
|
|
|
Add("last_updated_time", now),
|
|
@@ -198,7 +204,8 @@ func TestRawSqlTemplate(t *testing.T) {
|
|
|
TableName: tableName,
|
|
|
TableRows: sql_tpl.NewTableRows().
|
|
|
Add("name", newClassName, sql_tpl.WithAESKey("@MKU^AHYCN$:j76J<TAHCVD#$XZSWQ@L")).
|
|
|
- Add("student_num", newStudentNum),
|
|
|
+ Add("student_num", newStudentNum).
|
|
|
+ Add("student_ids", strings.Join(newStudentIDs, "\n")),
|
|
|
Conditions: sql_tpl.NewConditions().Equal("id", classID),
|
|
|
}.Map()
|
|
|
if err != nil {
|
|
@@ -299,6 +306,7 @@ func TestRawSqlTemplate(t *testing.T) {
|
|
|
if classes[0].ID != classID ||
|
|
|
classes[0].Name != className ||
|
|
|
classes[0].StudentNum != int(studentNum) ||
|
|
|
+ strings.Join(classes[0].StudentIDs, "\n") != strings.Join(studentIDs, "\n") ||
|
|
|
classes[0].GraduatedTime.Format(graduatedTimeLayout) != now.Format(graduatedTimeLayout) ||
|
|
|
classes[0].CreatedTime.Format(createdTimeLayout) != now.Format(createdTimeLayout) ||
|
|
|
classes[0].LastUpdatedTime.Format(lastUpdatedTimeLayout) != now.Format(lastUpdatedTimeLayout) {
|
|
@@ -337,6 +345,7 @@ func TestRawSqlTemplate(t *testing.T) {
|
|
|
if classes[0].ID != classID ||
|
|
|
classes[0].Name != newClassName ||
|
|
|
classes[0].StudentNum != int(newStudentNum) ||
|
|
|
+ strings.Join(classes[0].StudentIDs, "\n") != strings.Join(newStudentIDs, "\n") ||
|
|
|
classes[0].GraduatedTime.Format(graduatedTimeLayout) != now.Format(graduatedTimeLayout) ||
|
|
|
classes[0].CreatedTime.Format(createdTimeLayout) != now.Format(createdTimeLayout) ||
|
|
|
classes[0].LastUpdatedTime.Format(lastUpdatedTimeLayout) != now.Format(lastUpdatedTimeLayout) {
|
|
@@ -365,18 +374,20 @@ func checkSqlMapping(t *testing.T, e any) {
|
|
|
checkSqlMapping(t, element.FieldValueElem.Addr().Interface())
|
|
|
case *sql.MappingColumn:
|
|
|
if fieldName != "ID" && fieldName != "Name" &&
|
|
|
- fieldName != "StudentNum" && fieldName != "GraduatedTime" &&
|
|
|
- fieldName != "CreatedTime" && fieldName != "LastUpdatedTime" {
|
|
|
+ fieldName != "StudentNum" && fieldName != "StudentIDs" &&
|
|
|
+ fieldName != "GraduatedTime" && fieldName != "CreatedTime" &&
|
|
|
+ fieldName != "LastUpdatedTime" {
|
|
|
t.Fatal("字段名不正确")
|
|
|
}
|
|
|
|
|
|
if element.Name != "id" && element.Name != "name" &&
|
|
|
- element.Name != "student_num" && element.Name != "graduated_time" &&
|
|
|
- element.Name != "created_time" && element.Name != "last_updated_time" {
|
|
|
+ element.Name != "student_num" && element.Name != "student_ids" &&
|
|
|
+ element.Name != "graduated_time" && element.Name != "created_time" &&
|
|
|
+ element.Name != "last_updated_time" {
|
|
|
t.Fatal("列名不正确")
|
|
|
}
|
|
|
|
|
|
- if element.Name != strcase.ToSnake(fieldName) {
|
|
|
+ if element.Name != "student_ids" && element.Name != strcase.ToSnake(fieldName) {
|
|
|
t.Fatal("列名不正确")
|
|
|
}
|
|
|
|
|
@@ -400,6 +411,12 @@ func checkSqlMapping(t *testing.T, e any) {
|
|
|
t.Fatal("student_num字段Tag不正确")
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if element.Name == "student_ids" {
|
|
|
+ if element.JoinWith != "\n" {
|
|
|
+ t.Fatal("student_ids字段Tag不正确")
|
|
|
+ }
|
|
|
+ }
|
|
|
default:
|
|
|
t.Fatal("不支持的元素类型")
|
|
|
}
|
|
@@ -422,21 +439,22 @@ func checkSqlResult(t *testing.T, e any) {
|
|
|
checkSqlResult(t, element.FieldValueElem.Addr().Interface())
|
|
|
case *sql.ResultColumn:
|
|
|
if fieldName != "ID" && fieldName != "Name" &&
|
|
|
- fieldName != "StudentNum" && fieldName != "GraduatedTime" &&
|
|
|
- fieldName != "CreatedTime" && fieldName != "LastUpdatedTime" &&
|
|
|
- fieldName != "GraduatedTimeTest" {
|
|
|
+ fieldName != "StudentNum" && fieldName != "StudentIDs" &&
|
|
|
+ fieldName != "GraduatedTime" && fieldName != "CreatedTime" &&
|
|
|
+ fieldName != "LastUpdatedTime" && fieldName != "GraduatedTimeTest" {
|
|
|
t.Fatal("字段名不正确")
|
|
|
}
|
|
|
|
|
|
if element.Name != "id" && element.Name != "name" &&
|
|
|
- element.Name != "student_num_alias" && element.Name != "graduated_time" &&
|
|
|
- element.Name != "created_time" && element.Name != "last_updated_time" &&
|
|
|
- element.Name != "graduated_time_test" {
|
|
|
+ element.Name != "student_num_alias" && element.Name != "student_ids" &&
|
|
|
+ element.Name != "graduated_time" && element.Name != "created_time" &&
|
|
|
+ element.Name != "last_updated_time" && element.Name != "graduated_time_test" {
|
|
|
t.Fatal("列名不正确")
|
|
|
}
|
|
|
|
|
|
if element.Name != "student_num_alias" &&
|
|
|
element.Name != "graduated_time" &&
|
|
|
+ element.Name != "student_ids" &&
|
|
|
element.Name != strcase.ToSnake(fieldName) {
|
|
|
t.Fatal("列名不正确")
|
|
|
}
|
|
@@ -463,6 +481,12 @@ func checkSqlResult(t *testing.T, e any) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if element.Name == "student_ids" {
|
|
|
+ if element.SplitWith != "\n" {
|
|
|
+ t.Fatal("student_ids字段Tag不正确")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if element.Name == "graduate_time" {
|
|
|
if strutils.IsStringEmpty(element.ParseTime) ||
|
|
|
strutils.IsStringNotEmpty(element.AESKey) {
|
|
@@ -477,8 +501,10 @@ func TestSql(t *testing.T) {
|
|
|
classID := strutils.SimpleUUID()
|
|
|
className := strutils.SimpleUUID()
|
|
|
studentNum := rand.Int31n(100)
|
|
|
+ studentIDs := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
|
|
|
newClassName := strutils.SimpleUUID()
|
|
|
newStudentNum := rand.Int31n(100)
|
|
|
+ newStudentIDs := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
|
|
|
now := time.Now()
|
|
|
newNow := time.Now()
|
|
|
|
|
@@ -504,6 +530,7 @@ func TestSql(t *testing.T) {
|
|
|
IDField: IDField{ID: classID},
|
|
|
Name: className,
|
|
|
StudentNum: int(studentNum),
|
|
|
+ StudentIDs: studentIDs,
|
|
|
GraduatedTime: &newNow,
|
|
|
Ignored: "",
|
|
|
}
|
|
@@ -512,6 +539,7 @@ func TestSql(t *testing.T) {
|
|
|
IDField: IDField{ID: classID},
|
|
|
Name: newClassName,
|
|
|
StudentNum: int(newStudentNum),
|
|
|
+ StudentIDs: newStudentIDs,
|
|
|
GraduatedTime: &newNow,
|
|
|
Ignored: "",
|
|
|
}
|
|
@@ -699,6 +727,7 @@ func TestSql(t *testing.T) {
|
|
|
if queryClasses[0].ID != classID ||
|
|
|
queryClasses[0].Name != className ||
|
|
|
queryClasses[0].StudentNum != 0 ||
|
|
|
+ strings.Join(queryClasses[0].StudentIDs, "\n") != strings.Join(studentIDs, "\n") ||
|
|
|
!queryClasses[0].GraduatedTime.IsZero() ||
|
|
|
(queryClasses[0].CreatedTime != nil && !queryClasses[0].CreatedTime.IsZero()) ||
|
|
|
!queryClasses[0].LastUpdatedTime.IsZero() {
|
|
@@ -725,6 +754,7 @@ func TestSql(t *testing.T) {
|
|
|
if queryClass.ID != classID ||
|
|
|
queryClass.Name != className ||
|
|
|
queryClass.StudentNum != 0 ||
|
|
|
+ strings.Join(queryClasses[0].StudentIDs, "\n") != strings.Join(studentIDs, "\n") ||
|
|
|
!queryClass.GraduatedTime.IsZero() ||
|
|
|
(queryClass.CreatedTime != nil && !queryClass.CreatedTime.IsZero()) ||
|
|
|
!queryClass.LastUpdatedTime.IsZero() {
|