Przeglądaj źródła

完成sql模板测试

yjp 9 miesięcy temu
rodzic
commit
e68301198e

+ 17 - 9
framework/core/infrastructure/database/sql/sql_template.go

@@ -88,7 +88,7 @@ const DeleteTpl = `
 DELETE FROM
     {{ .table_name }}
 WHERE
-    {{ range .queries }} {{ . }} AND {{ end }} 1 = 1
+    {{ range .queries }}{{ . }} AND {{ end }}1 = 1
 `
 
 // DeleteExecuteParams 删除参数
@@ -118,7 +118,7 @@ UPDATE
 SET
     {{ .set_list | join ", " }}
 WHERE
-    {{ range .queries }} {{ . }} AND {{ end }} 1 = 1
+    {{ range .queries }}{{ . }} AND {{ end }}1 = 1
 `
 
 // UpdateExecuteParams 更新参数
@@ -155,10 +155,16 @@ SELECT
 FROM
     {{ .table_name }}
 WHERE
-    {{ range .queries }} {{ . }} AND {{ end }} 1 = 1
-{{ if .order_by }}ORDER BY {{ .order_by }}{{ end }}
-{{ if .limit }}LIMIT {{ .limit }}{{ end }}
-{{ if .offset }}OFFSET {{ .offset }}{{ end }}
+    {{ range .queries -}}{{ . }} AND {{ end -}}1 = 1
+{{- if .order_by }}
+ORDER BY {{ .order_by }}
+{{- end }}
+{{- if not (eq .limit -1) }}
+LIMIT {{ .limit }}
+{{- end }}
+{{- if not (eq .offset -1) }}
+OFFSET {{ .offset }}
+{{- end }}
 `
 
 // QueryExecuteParams 查询参数
@@ -172,8 +178,8 @@ type QueryExecuteParams struct {
 }
 
 func (params QueryExecuteParams) Map() (map[string]any, error) {
-	var limit int
-	var offset int
+	limit := -1
+	offset := -1
 
 	if params.PageNo != 0 && params.PageSize != 0 {
 		limit = params.PageSize
@@ -202,6 +208,8 @@ func (params QueryOneExecuteParams) Map() (map[string]any, error) {
 		"table_name":     params.TableName,
 		"select_columns": params.SelectClauses,
 		"queries":        params.Conditions.queries,
+		"limit":          -1,
+		"offset":         -1,
 	}, nil
 }
 
@@ -211,7 +219,7 @@ SELECT
 FROM
     {{ .table_name }}
 WHERE
-    {{ range .queries }} {{ . }} AND {{ end }} 1 = 1
+    {{ range .queries }}{{ . }} AND {{ end }}1 = 1
 `
 
 // CountExecuteParams 计数参数

+ 202 - 0
test/database_sql_test.go

@@ -3,6 +3,7 @@ package test
 import (
 	"git.sxidc.com/go-framework/baize/framework/core/infrastructure/database/sql"
 	"git.sxidc.com/go-tools/utils/strutils"
+	"git.sxidc.com/go-tools/utils/template"
 	"github.com/pkg/errors"
 	"math/rand"
 	"testing"
@@ -227,3 +228,204 @@ func TestDatabaseSqlResult(t *testing.T) {
 			float64Result, result.ColumnValueFloat64("float64")))
 	}
 }
+
+func TestDatabaseSqlTemplate(t *testing.T) {
+	tableName := "test.students"
+
+	insertMap, err := sql.InsertExecuteParams{
+		TableName: tableName,
+		TableRow: sql.NewTableRow().
+			Add("id", "").
+			Add("name", "").
+			Add("age", "").
+			Add("enter_time", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.InsertTpl, insertMap, `
+INSERT INTO
+    test.students ("id","name","age","enter_time")
+VALUES
+    (?, ?, ?, ?)
+`)
+
+	insertBatchMap, err := sql.InsertBatchExecuteParams{
+		TableName: tableName,
+		TableRowBatch: []sql.TableRow{
+			*sql.NewTableRow().
+				Add("id", "").
+				Add("name", "").
+				Add("age", "").
+				Add("enter_time", ""),
+			*sql.NewTableRow().
+				Add("id", "").
+				Add("name", "").
+				Add("age", "").
+				Add("enter_time", ""),
+		},
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.InsertTpl, insertBatchMap, `
+INSERT INTO
+    test.students ("id","name","age","enter_time")
+VALUES
+    (?, ?, ?, ?),(?, ?, ?, ?)
+`)
+
+	deleteMap, err := sql.DeleteExecuteParams{
+		TableName: tableName,
+		Conditions: sql.NewConditions().
+			Equal("id", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.DeleteTpl, deleteMap, `
+DELETE FROM
+    test.students
+WHERE
+    "id" = ? AND 1 = 1
+`)
+
+	updateMap, err := sql.UpdateExecuteParams{
+		TableName: tableName,
+		TableRow: sql.NewTableRow().
+			Add("name", "").
+			Add("age", "").
+			Add("enter_time", ""),
+		Conditions: sql.NewConditions().
+			Equal("id", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.UpdateTpl, updateMap, `
+UPDATE
+    test.students
+SET
+    "name" = ?, "age" = ?, "enter_time" = ?
+WHERE
+    "id" = ? AND 1 = 1
+`)
+
+	queryMap, err := sql.QueryExecuteParams{
+		TableName:     tableName,
+		SelectClauses: []string{"name", "age"},
+		Conditions: sql.NewConditions().
+			Equal("name", "").
+			Equal("age", ""),
+		OrderBy:  "name DESC",
+		PageNo:   1,
+		PageSize: 10,
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.QueryTpl, queryMap, `
+SELECT
+    name, age 
+FROM
+    test.students
+WHERE
+    "name" = ? AND "age" = ? AND 1 = 1
+ORDER BY name DESC
+LIMIT 10
+OFFSET 0
+`)
+
+	queryOneMap, err := sql.QueryOneExecuteParams{
+		TableName:     tableName,
+		SelectClauses: []string{"name", "age"},
+		Conditions: sql.NewConditions().
+			Equal("id", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.QueryTpl, queryOneMap, `
+SELECT
+    name, age 
+FROM
+    test.students
+WHERE
+    "id" = ? AND 1 = 1
+`)
+
+	countMap, err := sql.CountExecuteParams{
+		TableName: tableName,
+		Conditions: sql.NewConditions().
+			Equal("name", "").
+			Equal("age", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.CountTpl, countMap, `
+SELECT
+    COUNT(*)
+FROM
+    test.students
+WHERE
+    "name" = ? AND "age" = ? AND 1 = 1
+`)
+
+	checkExistMap, err := sql.CheckExistExecuteParams{
+		TableName: tableName,
+		Conditions: sql.NewConditions().
+			Equal("name", "").
+			Equal("age", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.CountTpl, checkExistMap, `
+SELECT
+    COUNT(*)
+FROM
+    test.students
+WHERE
+    "name" = ? AND "age" = ? AND 1 = 1
+`)
+
+	checkHasOnlyOneMap, err := sql.CheckHasOnlyOneExecuteParams{
+		TableName: tableName,
+		Conditions: sql.NewConditions().
+			Equal("name", "").
+			Equal("age", ""),
+	}.Map()
+	if err != nil {
+		t.Fatalf("%+v\n", err)
+	}
+
+	checkDatabaseSqlClause(t, sql.CountTpl, checkHasOnlyOneMap, `
+SELECT
+    COUNT(*)
+FROM
+    test.students
+WHERE
+    "name" = ? AND "age" = ? AND 1 = 1
+`)
+}
+
+func checkDatabaseSqlClause(t *testing.T, sqlStr string, templateMap map[string]any, clause string) {
+	parsedSql, err := template.ParseTemplateStringToString(sqlStr, templateMap)
+	if err != nil {
+		t.Fatalf("%+v\n", errors.New(err.Error()))
+	}
+
+	if parsedSql != clause {
+		t.Fatalf("%+v\n", errors.Errorf("Clause Error:\nexcept: %v\nactural: %v\n",
+			clause, parsedSql))
+	}
+}