sqlServerDialect_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2022-2023 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. "github.com/stretchr/testify/require"
  19. )
  20. func TestQueryGenerator_SqlQueryStatement(t *testing.T) {
  21. type fields struct {
  22. indexSlice []interface{}
  23. InternalSqlQueryCfg *InternalSqlQueryCfg
  24. }
  25. tests := []struct {
  26. name string
  27. fields fields
  28. want string
  29. wantErr bool
  30. }{
  31. {
  32. name: "int index",
  33. fields: fields{
  34. indexSlice: nil,
  35. InternalSqlQueryCfg: &InternalSqlQueryCfg{
  36. Table: "table",
  37. Limit: 2,
  38. IndexField: "responseTime",
  39. IndexValue: 10,
  40. IndexFieldType: "",
  41. DateTimeFormat: "",
  42. },
  43. },
  44. want: "select top 2 * from table where responseTime > '10' order by responseTime ASC",
  45. wantErr: false,
  46. },
  47. {
  48. name: "time string index",
  49. fields: fields{
  50. indexSlice: nil,
  51. InternalSqlQueryCfg: &InternalSqlQueryCfg{
  52. Table: "table",
  53. Limit: 2,
  54. IndexField: "responseTime",
  55. IndexValue: "2022-04-13 06:22:32.233",
  56. IndexFieldType: "DATETIME",
  57. DateTimeFormat: "YYYY-MM-dd HH:mm:ssSSS",
  58. },
  59. },
  60. want: "select top 2 * from table where responseTime > '2022-04-13 06:22:32.233' order by responseTime ASC",
  61. wantErr: false,
  62. },
  63. }
  64. for _, tt := range tests {
  65. t.Run(tt.name, func(t *testing.T) {
  66. q := &SqlServerQueryGenerator{
  67. InternalSqlQueryCfg: tt.fields.InternalSqlQueryCfg,
  68. }
  69. got, err := q.SqlQueryStatement()
  70. if (err != nil) != tt.wantErr {
  71. t.Errorf("SqlQueryStatement() error = %v, wantErr %v", err, tt.wantErr)
  72. return
  73. }
  74. if got != tt.want {
  75. t.Errorf("SqlQueryStatement() got = %v, want %v", got, tt.want)
  76. }
  77. })
  78. }
  79. }
  80. func TestOracleQuery(t *testing.T) {
  81. s := NewOracleQueryGenerate(&InternalSqlQueryCfg{
  82. Table: "t",
  83. Limit: 1,
  84. })
  85. query, err := s.SqlQueryStatement()
  86. require.NoError(t, err)
  87. require.Equal(t, query, "select * from (select * from t ) where rownum <= 1")
  88. }
  89. func TestInternalQuery(t *testing.T) {
  90. s := NewSqlServerQuery(&InternalSqlQueryCfg{
  91. Table: "table",
  92. Limit: 10,
  93. IndexField: "responseTime",
  94. IndexValue: 10,
  95. })
  96. s.UpdateMaxIndexValue(map[string]interface{}{
  97. "responseTime": 20,
  98. })
  99. s.UpdateMaxIndexValue(map[string]interface{}{
  100. "responseTime": 30,
  101. })
  102. s.UpdateMaxIndexValue(map[string]interface{}{
  103. "responseTime": 40,
  104. })
  105. s.UpdateMaxIndexValue(map[string]interface{}{
  106. "responseTime": 50,
  107. })
  108. nextSqlStr, _ := s.SqlQueryStatement()
  109. want := "select top 10 * from table where responseTime > '50' order by responseTime ASC"
  110. if !reflect.DeepEqual(nextSqlStr, want) {
  111. t.Errorf("SqlQueryStatement() = %v, want %v", nextSqlStr, want)
  112. }
  113. }