|
@@ -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))
|
|
|
+ }
|
|
|
+}
|