templateSqlDialect_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright 2022 EMQ Technologies Co., Ltd.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package sqlgen
  15. import (
  16. "reflect"
  17. "testing"
  18. "time"
  19. )
  20. func Test_templateSqlQueryCfg_getSqlQueryStatement(t1 *testing.T) {
  21. type fields struct {
  22. TemplateSql string
  23. FieldName string
  24. FieldValue interface{}
  25. }
  26. tests := []struct {
  27. name string
  28. fields fields
  29. want error
  30. want1 string
  31. }{
  32. {
  33. name: "select * from table",
  34. fields: fields{
  35. TemplateSql: "select * from table",
  36. FieldName: "",
  37. FieldValue: nil,
  38. },
  39. want: nil,
  40. want1: "select * from table",
  41. },
  42. {
  43. name: "select * from table where id > {{.id}} ",
  44. fields: fields{
  45. TemplateSql: "select * from table where id > {{.id}}",
  46. FieldName: "id",
  47. FieldValue: 100,
  48. },
  49. want: nil,
  50. want1: "select * from table where id > 100",
  51. },
  52. {
  53. name: "select * from table where responseTime > `{{.responseTime}}` ",
  54. fields: fields{
  55. TemplateSql: "select * from table where responseTime > `{{.responseTime}}`",
  56. FieldName: "responseTime",
  57. FieldValue: "2008-10-29 14:56:59",
  58. },
  59. want: nil,
  60. want1: "select * from table where responseTime > `2008-10-29 14:56:59`",
  61. },
  62. }
  63. for _, tt := range tests {
  64. t1.Run(tt.name, func(t1 *testing.T) {
  65. cfg := &TemplateSqlQueryCfg{
  66. TemplateSql: tt.fields.TemplateSql,
  67. IndexField: tt.fields.FieldName,
  68. IndexValue: tt.fields.FieldValue,
  69. }
  70. query, _ := NewTemplateSqlQuery(cfg)
  71. got1, got := query.SqlQueryStatement()
  72. if !reflect.DeepEqual(got, tt.want) {
  73. t1.Errorf("SqlQueryStatement() got = %v, want %v", got, tt.want)
  74. }
  75. if got1 != tt.want1 {
  76. t1.Errorf("SqlQueryStatement() got1 = %v, want %v", got1, tt.want1)
  77. }
  78. })
  79. }
  80. }
  81. func getDatetimeFromstring(dateStr string) time.Time {
  82. myDate, _ := time.Parse("2006-01-02 15:04:05", dateStr)
  83. return myDate
  84. }
  85. func TestTemplateQuery(t *testing.T) {
  86. cfg := &TemplateSqlQueryCfg{
  87. TemplateSql: "select * from table where responseTime > `{{.responseTime}}`",
  88. IndexField: "responseTime",
  89. IndexValue: getDatetimeFromstring("2008-10-25 14:56:59"),
  90. IndexFieldType: DATETIME_TYPE,
  91. DateTimeFormat: "YYYY-MM-dd HH:mm:ssSSS",
  92. }
  93. s, _ := NewTemplateSqlQuery(cfg)
  94. s.UpdateMaxIndexValue(map[string]interface{}{
  95. "responseTime": getDatetimeFromstring("2008-10-29 14:56:59"),
  96. })
  97. s.UpdateMaxIndexValue(map[string]interface{}{
  98. "responseTime": getDatetimeFromstring("2008-11-11 11:12:01"),
  99. })
  100. s.UpdateMaxIndexValue(map[string]interface{}{
  101. "responseTime": getDatetimeFromstring("2008-11-09 15:45:21"),
  102. })
  103. s.UpdateMaxIndexValue(map[string]interface{}{
  104. "responseTime": getDatetimeFromstring("2008-11-11 13:23:44"),
  105. })
  106. nextSqlStr, _ := s.SqlQueryStatement()
  107. want := "select * from table where responseTime > `2008-11-11 13:23:44.000`"
  108. if !reflect.DeepEqual(nextSqlStr, want) {
  109. t.Errorf("SqlQueryStatement() = %v, want %v", nextSqlStr, want)
  110. }
  111. }
  112. func TestTemplateQuery_DateTime(t *testing.T) {
  113. tempCfg := map[string]interface{}{
  114. "templateSql": "select * from table where responseTime > `{{.responseTime}}`",
  115. "indexField": "responseTime",
  116. "indexValue": "2008-10-25 14:56:59.123",
  117. "indexFieldType": DATETIME_TYPE,
  118. "dateTimeFormat": "YYYY-MM-dd HH:mm:ssSSS",
  119. }
  120. props := map[string]interface{}{
  121. "templateSqlQueryCfg": tempCfg,
  122. }
  123. sqlcfg := &sqlConfig{}
  124. _ = sqlcfg.Init(props)
  125. s, _ := NewTemplateSqlQuery(sqlcfg.TemplateSqlQueryCfg)
  126. //query
  127. firstSqlStr, _ := s.SqlQueryStatement()
  128. want := "select * from table where responseTime > `2008-10-25 14:56:59.123`"
  129. if !reflect.DeepEqual(firstSqlStr, want) {
  130. t.Errorf("SqlQueryStatement() = %v, want %v", firstSqlStr, want)
  131. }
  132. //query result
  133. s.UpdateMaxIndexValue(map[string]interface{}{
  134. "responseTime": getDatetimeFromstring("2008-10-29 14:56:59"),
  135. })
  136. s.UpdateMaxIndexValue(map[string]interface{}{
  137. "responseTime": getDatetimeFromstring("2008-11-11 11:12:01"),
  138. })
  139. s.UpdateMaxIndexValue(map[string]interface{}{
  140. "responseTime": getDatetimeFromstring("2008-11-09 15:45:21"),
  141. })
  142. s.UpdateMaxIndexValue(map[string]interface{}{
  143. "responseTime": getDatetimeFromstring("2008-11-11 13:23:44"),
  144. })
  145. nextSqlStr, _ := s.SqlQueryStatement()
  146. want = "select * from table where responseTime > `2008-11-11 13:23:44.000`"
  147. if !reflect.DeepEqual(nextSqlStr, want) {
  148. t.Errorf("SqlQueryStatement() = %v, want %v", nextSqlStr, want)
  149. }
  150. }