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  }