github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/gormgen/internal/generate/clause_test.go (about) 1 package generate 2 3 import ( 4 "testing" 5 6 "github.com/unionj-cloud/go-doudou/v2/toolkit/gormgen/internal/parser" 7 ) 8 9 func checkBuildExpr(t *testing.T, SQL string, splitResult, generateResult []string, i *InterfaceMethod) { 10 i.SQLString = SQL 11 err := i.sqlStateCheckAndSplit() 12 if err != nil { 13 t.Errorf("err:%s\n", err) 14 } 15 16 if len(i.Section.members) != len(splitResult) { 17 t.Errorf("SQL length exp:%v got:%v", len(generateResult), len(i.Section.members)) 18 } 19 for index := range splitResult { 20 if splitResult[index] != i.Section.members[index].Value { 21 t.Errorf("SQL expects \nexp:%v \ngot:%v", splitResult[index], i.Section.members[index].Value) 22 } 23 } 24 _, err = i.Section.BuildSQL() 25 if err != nil { 26 t.Errorf("err:%s", err) 27 } 28 29 if len(i.Section.Tmpls) != len(generateResult) { 30 t.Errorf("SQL length exp:%v got:%v", len(i.Section.Tmpls), len(generateResult)) 31 } 32 for index := range generateResult { 33 if generateResult[index] != i.Section.Tmpls[index] { 34 t.Errorf("SQL expects \nexp:%v \ngot:%v", generateResult[index], i.Section.Tmpls[index]) 35 } 36 } 37 38 } 39 func TestClause(t *testing.T) { 40 41 testcases := []struct { 42 SQL string 43 SplitResult []string 44 GenerateResult []string 45 }{ 46 { 47 SQL: "select * from @@table", 48 SplitResult: []string{ 49 "\"select * from \"", 50 "\"users\"", 51 }, 52 GenerateResult: []string{ 53 "generateSQL.WriteString(\"select * from users \")", 54 }, 55 }, 56 { 57 SQL: "select * from @@table {{where}} id>@id{{end}}", 58 SplitResult: []string{ 59 "\"select * from \"", 60 "\"users\"", 61 "where", 62 "\" id>\"", 63 "id", 64 "end", 65 }, 66 GenerateResult: []string{ 67 "generateSQL.WriteString(\"select * from users \")", 68 "var whereSQL0 strings.Builder", 69 "params = append(params,id)", 70 "whereSQL0.WriteString(\"id>? \")", 71 "helper.JoinWhereBuilder(&generateSQL,whereSQL0)", 72 }, 73 }, 74 { 75 SQL: "select * from @@table {{where}}{{if id > 0}} id>@id{{end}}{{end}}", 76 SplitResult: []string{ 77 "\"select * from \"", 78 "\"users\"", 79 "where", 80 "if id > 0", 81 "\" id>\"", 82 "id", 83 "end", 84 "end", 85 }, 86 GenerateResult: []string{ 87 "generateSQL.WriteString(\"select * from users \")", 88 "var whereSQL0 strings.Builder", 89 "if id > 0 {", 90 "params = append(params,id)", 91 "whereSQL0.WriteString(\"id>? \")", 92 "}", 93 "helper.JoinWhereBuilder(&generateSQL,whereSQL0)", 94 }, 95 }, 96 { 97 SQL: "update @@table {{set}}{{if name != \"\"}}name=@name{{end}},{{if id>0}}id=@id{{end}}{{end}} where id=@id", 98 SplitResult: []string{ 99 "\"update \"", 100 "\"users\"", 101 "set", 102 "if name != \"\"", 103 "\"name=\"", 104 "name", 105 "end", 106 "\",\"", 107 "if id>0", 108 "\"id=\"", 109 "id", 110 "end", 111 "end", 112 "\" where id=\"", 113 "id", 114 }, 115 GenerateResult: []string{ 116 "generateSQL.WriteString(\"update users \")", 117 "var setSQL0 strings.Builder", 118 "if name != \"\" {", 119 "params = append(params,name)", 120 "setSQL0.WriteString(\"name=? \")", 121 "}", 122 "setSQL0.WriteString(\", \")", 123 "if id>0 {", 124 "params = append(params,id)", 125 "setSQL0.WriteString(\"id=? \")", 126 "}", 127 "helper.JoinSetBuilder(&generateSQL,setSQL0)", 128 "params = append(params,id)", 129 "generateSQL.WriteString(\"where id=? \")", 130 }, 131 }, 132 { 133 SQL: "select * from @@table {{where}} {{for _, name := range names}}name=@name{{end}}{{end}}", 134 SplitResult: []string{ 135 "\"select * from \"", 136 "\"users\"", 137 "where", 138 "for _, name := range names", 139 "\"name=\"", 140 "name", 141 "end", 142 "end", 143 }, 144 GenerateResult: []string{ 145 "generateSQL.WriteString(\"select * from users \")", 146 "var whereSQL0 strings.Builder", 147 "for _, name := range names{", 148 "params = append(params,name)", 149 "whereSQL0.WriteString(\"name=? \")", 150 "}", 151 "helper.JoinWhereBuilder(&generateSQL,whereSQL0)", 152 }, 153 }, 154 } 155 inface := m() 156 for _, testcase := range testcases { 157 checkBuildExpr(t, testcase.SQL, testcase.SplitResult, testcase.GenerateResult, inface) 158 } 159 } 160 161 var m = func() *InterfaceMethod { 162 var m = new(InterfaceMethod) 163 m.Table = "users" 164 m.Params = []parser.Param{ 165 { 166 Type: "int", 167 Name: "id", 168 }, 169 { 170 Type: "string", 171 Name: "name", 172 }, 173 { 174 Type: "string", 175 Name: "names", 176 IsArray: true, 177 }, 178 } 179 180 return m 181 182 }