function_stateduration.py 21.2 KB
Newer Older
W
wenzhouwww@live.cn 已提交
1 2 3 4
from util.log import *
from util.sql import *
from util.cases import *

C
cpwu 已提交
5
DBNAME = "db"
W
wenzhouwww@live.cn 已提交
6 7
class TDTestCase:

8
    def init(self, conn, logSql, replicaVar=1):
9
        self.replicaVar = int(replicaVar)
W
wenzhouwww@live.cn 已提交
10 11
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
12

C
cpwu 已提交
13
    def prepare_datas(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
14
        tdSql.execute(
C
cpwu 已提交
15
            f'''create table {dbname}.stb1
W
wenzhouwww@live.cn 已提交
16 17 18 19
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            tags (t1 int)
            '''
        )
G
Ganlin Zhao 已提交
20

W
wenzhouwww@live.cn 已提交
21
        tdSql.execute(
C
cpwu 已提交
22 23
            f'''
            create table {dbname}.t1
W
wenzhouwww@live.cn 已提交
24 25 26 27
            (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
            '''
        )
        for i in range(4):
C
cpwu 已提交
28
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
W
wenzhouwww@live.cn 已提交
29 30 31

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
32
                f"insert into {dbname}.ct1 values ( now()-{i*10}s, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
W
wenzhouwww@live.cn 已提交
33 34
            )
            tdSql.execute(
C
cpwu 已提交
35
                f"insert into {dbname}.ct4 values ( now()-{i*90}d, {1*i}, {11111*i}, {111*i}, {11*i}, {1.11*i}, {11.11*i}, {i%2}, 'binary{i}', 'nchar{i}', now()+{1*i}a )"
W
wenzhouwww@live.cn 已提交
36
            )
C
cpwu 已提交
37 38 39 40
        tdSql.execute(f"insert into {dbname}.ct1 values (now()-45s, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar0', now()+8a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+10s, 9, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+15s, 9, -99999, -999, -99, -9.99, NULL, 1, 'binary9', 'nchar9', now()+9a )")
        tdSql.execute(f"insert into {dbname}.ct1 values (now()+20s, 9, -99999, -999, NULL, -9.99, -99.99, 1, 'binary9', 'nchar9', now()+9a )")
W
wenzhouwww@live.cn 已提交
41

C
cpwu 已提交
42 43 44
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-810d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()-400d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) ")
        tdSql.execute(f"insert into {dbname}.ct4 values (now()+90d, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL  ) ")
W
wenzhouwww@live.cn 已提交
45 46

        tdSql.execute(
C
cpwu 已提交
47
            f'''insert into {dbname}.t1 values
W
wenzhouwww@live.cn 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60 61
            ( '2020-04-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2020-10-21 01:01:01.000', 1, 11111, 111, 11, 1.11, 11.11, 1, "binary1", "nchar1", now()+1a )
            ( '2020-12-31 01:01:01.000', 2, 22222, 222, 22, 2.22, 22.22, 0, "binary2", "nchar2", now()+2a )
            ( '2021-01-01 01:01:06.000', 3, 33333, 333, 33, 3.33, 33.33, 0, "binary3", "nchar3", now()+3a )
            ( '2021-05-07 01:01:10.000', 4, 44444, 444, 44, 4.44, 44.44, 1, "binary4", "nchar4", now()+4a )
            ( '2021-07-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            ( '2021-09-30 01:01:16.000', 5, 55555, 555, 55, 5.55, 55.55, 0, "binary5", "nchar5", now()+5a )
            ( '2022-02-01 01:01:20.000', 6, 66666, 666, 66, 6.66, 66.66, 1, "binary6", "nchar6", now()+6a )
            ( '2022-10-28 01:01:26.000', 7, 00000, 000, 00, 0.00, 00.00, 1, "binary7", "nchar7", "1970-01-01 08:00:00.000" )
            ( '2022-12-01 01:01:30.000', 8, -88888, -888, -88, -8.88, -88.88, 0, "binary8", "nchar8", "1969-01-01 01:00:00.000" )
            ( '2022-12-31 01:01:36.000', 9, -99999999999999999, -999, -99, -9.99, -999999999999999999999.99, 1, "binary9", "nchar9", "1900-01-01 00:00:00.000" )
            ( '2023-02-21 01:01:01.000', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
            '''
        )
G
Ganlin Zhao 已提交
62

C
cpwu 已提交
63
    def test_errors(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
64
        error_sql_lists = [
C
cpwu 已提交
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
            # f"select stateduration(c1,'GT',5,1s) from {dbname}.t1"
            f"select stateduration from {dbname}.t1",
            f"select stateduration(123--123)==1 from {dbname}.t1",
            f"select stateduration(123,123) from {dbname}.t1",
            f"select stateduration(c1,ts) from {dbname}.t1",
            f"select stateduration(c1,c1,ts) from {dbname}.t1",
            f"select stateduration(c1 ,c2 ) from {dbname}.t1",
            f"select stateduration(c1 ,NULL) from {dbname}.t1",
            #f"select stateduration(c1 ,'NULL',1.0,1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT','1',1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT','tbname',1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT','*',1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',ts,1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',max(c1),1s) from {dbname}.t1",
            # f"select stateduration(abs(c1) ,'GT',1,1s) from {dbname}.t1",
            # f"select stateduration(c1+2 ,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1u) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,now) from {dbname}.t1",
            f"select stateduration(c1 ,'GT','1',1s) from {dbname}.t1",
            f"select stateduration(c1 ,'GT','1',True) from {dbname}.t1",
            f"select stateduration(stateduration(c1) ab from {dbname}.t1)",
            f"select stateduration(c1 ,'GT',1,,)int from {dbname}.t1",
            f"select stateduration('c1','GT',1) from {dbname}.t1",
            f"select stateduration('c1','GT', 1 , NULL) from {dbname}.t1",
            f"select stateduration('c1','GT', 1 , '') from {dbname}.t1",
            f"select stateduration('c1','GT', 1 ,c%) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,t1) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,True) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1s) , count(c1) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1s) , avg(c1) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1s) , min(c1) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1s) , spread(c1) from {dbname}.t1",
            f"select stateduration(c1 ,'GT',1,1s) , diff(c1) from {dbname}.t1",
W
wenzhouwww@live.cn 已提交
98 99 100 101
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
            pass
G
Ganlin Zhao 已提交
102

C
cpwu 已提交
103
    def support_types(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
104
        other_no_value_types = [
C
cpwu 已提交
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
            f"select stateduration(ts,'GT',1,1s) from {dbname}.t1" ,
            f"select stateduration(c7,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c8,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c9,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(ts,'GT',1,1s) from {dbname}.ct1" ,
            f"select stateduration(c7,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c8,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c9,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(ts,'GT',1,1s) from {dbname}.ct3" ,
            f"select stateduration(c7,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c8,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c9,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(ts,'GT',1,1s) from {dbname}.ct4" ,
            f"select stateduration(c7,'GT',1,1s) from {dbname}.ct4",
            f"select stateduration(c8,'GT',1,1s) from {dbname}.ct4",
            f"select stateduration(c9,'GT',1,1s) from {dbname}.ct4",
            f"select stateduration(ts,'GT',1,1s) from {dbname}.stb1 partition by tbname" ,
            f"select stateduration(c7,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c8,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c9,'GT',1,1s) from {dbname}.stb1 partition by tbname"
W
wenzhouwww@live.cn 已提交
125
        ]
G
Ganlin Zhao 已提交
126

W
wenzhouwww@live.cn 已提交
127 128 129
        for type_sql in other_no_value_types:
            tdSql.error(type_sql)
            tdLog.info("support type ok ,  sql is : %s"%type_sql)
G
Ganlin Zhao 已提交
130

W
wenzhouwww@live.cn 已提交
131
        type_sql_lists = [
C
cpwu 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
            f"select stateduration(c1,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c2,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c3,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c4,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c5,'GT',1,1s) from {dbname}.t1",
            f"select stateduration(c6,'GT',1,1s) from {dbname}.t1",

            f"select stateduration(c1,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c2,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c3,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c4,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c5,'GT',1,1s) from {dbname}.ct1",
            f"select stateduration(c6,'GT',1,1s) from {dbname}.ct1",

            f"select stateduration(c1,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c2,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c3,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c4,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c5,'GT',1,1s) from {dbname}.ct3",
            f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3",

            f"select stateduration(c1,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c2,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c3,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c4,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c5,'GT',1,1s) from {dbname}.stb1 partition by tbname",
            f"select stateduration(c6,'GT',1,1s) from {dbname}.stb1 partition by tbname",

            f"select stateduration(c6,'GT',1,1s) as alisb from {dbname}.stb1 partition by tbname",
            f"select stateduration(c6,'GT',1,1s) alisb from {dbname}.stb1 partition by tbname",
W
wenzhouwww@live.cn 已提交
162 163 164 165 166
        ]

        for type_sql in type_sql_lists:
            tdSql.query(type_sql)

C
cpwu 已提交
167
    def support_opers(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
168
        oper_lists =  ['LT','lt','Lt','lT','GT','gt','Gt','gT','LE','le','Le','lE','GE','ge','Ge','gE','NE','ne','Ne','nE','EQ','eq','Eq','eQ']
G
Ganlin Zhao 已提交
169

W
wenzhouwww@live.cn 已提交
170 171 172
        oper_errors = [",","*","NULL","tbname","ts","sum","_c0"]

        for oper in oper_lists:
C
cpwu 已提交
173
            tdSql.query(f"select stateduration(c1 ,'{oper}',1,1s) as col   from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
174 175 176
            tdSql.checkRows(12)

        for oper in oper_errors:
C
cpwu 已提交
177
            tdSql.error(f"select stateduration(c1 ,'{oper}',1,1s) as col   from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
178 179


C
cpwu 已提交
180
    def basic_stateduration_function(self, dbname=DBNAME):
W
wenzhouwww@live.cn 已提交
181

G
Ganlin Zhao 已提交
182
        # basic query
C
cpwu 已提交
183
        tdSql.query(f"select c1 from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
184
        tdSql.checkRows(0)
C
cpwu 已提交
185
        tdSql.query(f"select c1 from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
186
        tdSql.checkRows(12)
C
cpwu 已提交
187
        tdSql.query(f"select c1 from {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
188 189 190
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
191
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
192
        tdSql.checkRows(0)
C
cpwu 已提交
193
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
194
        tdSql.checkRows(0)
C
cpwu 已提交
195
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
196
        tdSql.checkRows(0)
C
cpwu 已提交
197
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
198
        tdSql.checkRows(0)
C
cpwu 已提交
199
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
200
        tdSql.checkRows(0)
C
cpwu 已提交
201
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
202

G
Ganlin Zhao 已提交
203
        # will support _rowts mix with
C
cpwu 已提交
204
        # tdSql.query(f"select (c6,'GT',1,1s),_rowts from {dbname}.ct3")
G
Ganlin Zhao 已提交
205

W
wenzhouwww@live.cn 已提交
206 207
        # auto check for t1 table
        # used for regular table
C
cpwu 已提交
208
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
209 210 211

        # unique with super tags

C
cpwu 已提交
212
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
213 214
        tdSql.checkRows(13)

C
cpwu 已提交
215
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
216 217
        tdSql.checkRows(12)

C
cpwu 已提交
218
        tdSql.query(f"select stateduration(c6,'GT',1,1s),tbname from {dbname}.ct1")
G
Ganlin Zhao 已提交
219
        tdSql.checkRows(13)
C
cpwu 已提交
220
        tdSql.query(f"select stateduration(c6,'GT',1,1s),t1 from {dbname}.ct1")
G
Ganlin Zhao 已提交
221
        tdSql.checkRows(13)
W
wenzhouwww@live.cn 已提交
222

G
Ganlin Zhao 已提交
223
        # unique with common col
C
cpwu 已提交
224
        tdSql.query(f"select stateduration(c6,'GT',1,1s) ,ts  from {dbname}.ct1")
G
Ganlin Zhao 已提交
225
        tdSql.checkRows(13)
C
cpwu 已提交
226
        tdSql.query(f"select stateduration(c6,'GT',1,1s) ,c1  from {dbname}.ct1")
G
Ganlin Zhao 已提交
227
        tdSql.checkRows(13)
W
wenzhouwww@live.cn 已提交
228

G
Ganlin Zhao 已提交
229
        # unique with scalar function
C
cpwu 已提交
230
        tdSql.query(f"select stateduration(c6,'GT',1,1s) , abs(c1)  from {dbname}.ct1")
G
Ganlin Zhao 已提交
231
        tdSql.checkRows(13)
C
cpwu 已提交
232
        tdSql.query(f"select stateduration(c6,'GT',1,1s) , abs(c2)+2 from {dbname}.ct1")
G
Ganlin Zhao 已提交
233
        tdSql.checkRows(13)
W
wenzhouwww@live.cn 已提交
234

C
cpwu 已提交
235
        tdSql.error(f"select stateduration(c6,'GT',1,1s) , unique(c2) from {dbname}.ct1")
G
Ganlin Zhao 已提交
236 237

        # unique with aggregate function
C
cpwu 已提交
238 239 240 241
        tdSql.error(f"select stateduration(c6,'GT',1,1s) ,sum(c1)  from {dbname}.ct1")
        tdSql.error(f"select stateduration(c6,'GT',1,1s) ,max(c1)  from {dbname}.ct1")
        tdSql.error(f"select stateduration(c6,'GT',1,1s) ,csum(c1)  from {dbname}.ct1")
        tdSql.error(f"select stateduration(c6,'GT',1,1s) ,count(c1)  from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
242 243

        # unique with filter where
C
cpwu 已提交
244
        tdSql.query(f"select stateduration(c6,'GT',1,1s) from {dbname}.ct4 where c1 is null")
W
wenzhouwww@live.cn 已提交
245 246 247 248
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1, 0, None)
        tdSql.checkData(2, 0, None)

C
cpwu 已提交
249
        tdSql.query(f"select stateduration(c1,'GT',1,1s) from {dbname}.t1 where c1 >2 ")
W
wenzhouwww@live.cn 已提交
250 251 252 253 254 255
        tdSql.checkData(0, 0, 0)
        tdSql.checkData(1, 0, 10886404)
        tdSql.checkData(2, 0, 23500810)
        tdSql.checkData(4, 0, 57456020)
        tdSql.checkData(5, 0, 60393624)

C
cpwu 已提交
256
        tdSql.query(f"select stateduration(c2,'GT',1,1s) from {dbname}.t1  where c2 between 0  and   99999")
W
wenzhouwww@live.cn 已提交
257 258 259 260
        tdSql.checkData(0, 0, 0)
        tdSql.checkData(1, 0, 6134400)
        tdSql.checkData(6, 0, -1)

G
Ganlin Zhao 已提交
261 262

        # unique with union all
C
cpwu 已提交
263
        tdSql.query(f"select stateduration(c1,'GT',1,1s) from {dbname}.ct4 union all select stateduration(c1,'GT',1,1s) from {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
264
        tdSql.checkRows(25)
C
cpwu 已提交
265
        tdSql.query(f"select stateduration(c1,'GT',1,1s) from {dbname}.ct4 union all select distinct(c1) from {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
266 267
        tdSql.checkRows(22)

G
Ganlin Zhao 已提交
268 269
        # unique with join
        # prepare join datas with same ts
W
wenzhouwww@live.cn 已提交
270

C
cpwu 已提交
271 272 273
        tdSql.execute(f"create stable {dbname}.st1 (ts timestamp , num int) tags(ind int)")
        tdSql.execute(f"create table {dbname}.tb1 using {dbname}.st1 tags(1)")
        tdSql.execute(f"create table {dbname}.tb2 using {dbname}.st1 tags(2)")
W
wenzhouwww@live.cn 已提交
274

C
cpwu 已提交
275 276 277
        tdSql.execute(f"create stable {dbname}.st2 (ts timestamp , num int) tags(ind int)")
        tdSql.execute(f"create table {dbname}.ttb1 using {dbname}.st2 tags(1)")
        tdSql.execute(f"create table {dbname}.ttb2 using {dbname}.st2 tags(2)")
W
wenzhouwww@live.cn 已提交
278 279 280 281 282

        start_ts = 1622369635000 # 2021-05-30 18:13:55

        for i in range(10):
            ts_value = start_ts+i*1000
C
cpwu 已提交
283 284
            tdSql.execute(f"insert into {dbname}.tb1 values({ts_value} , {i})")
            tdSql.execute(f"insert into {dbname}.tb2 values({ts_value} , {i})")
W
wenzhouwww@live.cn 已提交
285

C
cpwu 已提交
286 287
            tdSql.execute(f"insert into {dbname}.ttb1 values({ts_value} , {i})")
            tdSql.execute(f"insert into {dbname}.ttb2 values({ts_value} , {i})")
W
wenzhouwww@live.cn 已提交
288

C
cpwu 已提交
289
        tdSql.query(f"select stateduration(tb1.num,'GT',1,1s)  from {dbname}.tb1 tb1, {dbname}.tb2 tb2 where tb1.ts=tb2.ts ")
W
wenzhouwww@live.cn 已提交
290 291 292 293 294 295
        tdSql.checkRows(10)
        tdSql.checkData(0,0,-1)
        tdSql.checkData(1,0,-1)
        tdSql.checkData(2,0,0)
        tdSql.checkData(9,0,7)

C
cpwu 已提交
296
        tdSql.query(f"select stateduration(tb1.num,'GT',1,1s)  from {dbname}.tb1 tb1, {dbname}.tb2 tb2 where tb1.ts=tb2.ts union all select stateduration(tb2.num,'GT',1,1s)  from {dbname}.tb1 tb1, {dbname}.tb2 tb2 where tb1.ts=tb2.ts ")
W
wenzhouwww@live.cn 已提交
297 298 299
        tdSql.checkRows(20)

        # nest query
C
cpwu 已提交
300 301
        # tdSql.query(f"select unique(c1) from (select c1 from {dbname}.ct1)")
        tdSql.query(f"select c1 from (select stateduration(c1,'GT',1,1s) c1 from {dbname}.t1)")
W
wenzhouwww@live.cn 已提交
302 303 304 305 306 307
        tdSql.checkRows(12)
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1, 0, -1)
        tdSql.checkData(2, 0, 0)
        tdSql.checkData(10, 0, 63072035)

C
cpwu 已提交
308
        tdSql.query(f"select sum(c1) from (select stateduration(c1,'GT',1,1d) c1 from {dbname}.t1)")
W
wenzhouwww@live.cn 已提交
309 310 311
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 2893)

C
cpwu 已提交
312
        tdSql.query(f"select sum(c1) from (select distinct(c1) c1 from {dbname}.ct1) union all select sum(c1) from (select stateduration(c1,'GT',1,1s) c1 from {dbname}.ct1)")
W
wenzhouwww@live.cn 已提交
313 314
        tdSql.checkRows(2)

C
cpwu 已提交
315
        tdSql.query(f"select 1-abs(c1) from (select stateduration(c1,'GT',1,1s) c1 from {dbname}.t1)")
W
wenzhouwww@live.cn 已提交
316 317 318 319
        tdSql.checkRows(12)
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1, 0, 0.000000000)
        tdSql.checkData(3, 0, -86404.000000000)
320

C
cpwu 已提交
321
        tdSql.query(f"select stateduration(abs(c1) ,'GT',1,1s) from {dbname}.t1")
322
        tdSql.checkRows(12)
C
cpwu 已提交
323
        tdSql.query(f"select stateduration(c1+2 ,'GT',1,1s) from {dbname}.t1")
324
        tdSql.checkRows(12)
G
Ganlin Zhao 已提交
325

W
wenzhouwww@live.cn 已提交
326 327 328

        # bug for stable
        #partition by tbname
C
cpwu 已提交
329
        # tdSql.query(f"select unique(c1) from {dbname}.stb1 partition by tbname ")
W
wenzhouwww@live.cn 已提交
330 331
        # tdSql.checkRows(21)

C
cpwu 已提交
332
        # tdSql.query(f"select unique(c1) from {dbname}.stb1 partition by tbname ")
W
wenzhouwww@live.cn 已提交
333
        # tdSql.checkRows(21)
G
Ganlin Zhao 已提交
334 335

        # group by
C
cpwu 已提交
336 337
        tdSql.error(f"select stateduration(c1,'GT',1,1s) from {dbname}.ct1 group by c1")
        tdSql.error(f"select stateduration(c1,'GT',1,1s) from {dbname}.ct1 group by tbname")
W
wenzhouwww@live.cn 已提交
338 339

        # super table
G
Ganlin Zhao 已提交
340

C
cpwu 已提交
341 342 343 344 345
    def check_unit_time(self, dbname=DBNAME):
        tdSql.error(f"select stateduration(c1,'GT',1,1b) from {dbname}.ct1")
        tdSql.error(f"select stateduration(c1,'GT',1,1u) from {dbname}.ct1")
        tdSql.error(f"select stateduration(c1,'GT',1,1000s) from {dbname}.t1")
        tdSql.query(f"select stateduration(c1,'GT',1,1s) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
346
        tdSql.checkData(10,0,63072035)
C
cpwu 已提交
347
        tdSql.query(f"select stateduration(c1,'GT',1,1m) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
348
        tdSql.checkData(10,0,int(63072035/60))
C
cpwu 已提交
349
        tdSql.query(f"select stateduration(c1,'GT',1,1h) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
350
        tdSql.checkData(10,0,int(63072035/60/60))
C
cpwu 已提交
351
        tdSql.query(f"select stateduration(c1,'GT',1,1d) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
352
        tdSql.checkData(10,0,int(63072035/60/24/60))
C
cpwu 已提交
353
        tdSql.query(f"select stateduration(c1,'GT',1,1w) from {dbname}.t1")
W
wenzhouwww@live.cn 已提交
354
        tdSql.checkData(10,0,int(63072035/60/7/24/60))
G
Ganlin Zhao 已提交
355 356


C
cpwu 已提交
357
    def check_boundary_values(self, dbname="bound_test"):
W
wenzhouwww@live.cn 已提交
358

C
cpwu 已提交
359 360 361
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
        tdSql.execute(f"use {dbname}")
W
wenzhouwww@live.cn 已提交
362
        tdSql.execute(
C
cpwu 已提交
363
            f"create table {dbname}.stb_bound (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(32),c9 nchar(32), c10 timestamp) tags (t1 int);"
W
wenzhouwww@live.cn 已提交
364
        )
C
cpwu 已提交
365
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
366
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
367
                f"insert into {dbname}.sub1_bound values ( now()-10s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
368 369
            )
        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
370
                f"insert into {dbname}.sub1_bound values ( now()-5s, 2147483646, 9223372036854775806, 32766, 126, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
371 372 373
            )

        tdSql.execute(
C
cpwu 已提交
374
                f"insert into {dbname}.sub1_bound values ( now(), -2147483646, -9223372036854775806, -32766, -126, -3.40E+38, -1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
375 376 377
            )

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
378
                f"insert into {dbname}.sub1_bound values ( now()+5s, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
379 380 381
            )

        tdSql.execute(
W
update  
wenzhouwww@live.cn 已提交
382
                f"insert into {dbname}.sub1_bound values ( now()+10s, -2147483643, -9223372036854775803, -32763, -123, -3.39E+38, -1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
383
            )
G
Ganlin Zhao 已提交
384

W
wenzhouwww@live.cn 已提交
385
        tdSql.error(
W
update  
wenzhouwww@live.cn 已提交
386
                f"insert into {dbname}.sub1_bound values ( now()+15s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
387
            )
G
Ganlin Zhao 已提交
388

C
cpwu 已提交
389
        tdSql.query(f"select stateduration(c1,'GT',1,1s) from {dbname}.sub1_bound")
W
wenzhouwww@live.cn 已提交
390 391 392 393 394 395
        tdSql.checkRows(5)

    def run(self):  # sourcery skip: extract-duplicate-method, remove-redundant-fstring
        tdSql.prepare()

        tdLog.printNoPrefix("==========step1:create table ==============")
G
Ganlin Zhao 已提交
396

W
wenzhouwww@live.cn 已提交
397 398
        self.prepare_datas()

G
Ganlin Zhao 已提交
399
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
400 401

        self.test_errors()
G
Ganlin Zhao 已提交
402 403

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
404 405 406

        self.support_types()

G
Ganlin Zhao 已提交
407
        tdLog.printNoPrefix("==========step4:support opers ============")
W
wenzhouwww@live.cn 已提交
408 409
        self.support_opers()

G
Ganlin Zhao 已提交
410
        tdLog.printNoPrefix("==========step5: stateduration basic query ============")
W
wenzhouwww@live.cn 已提交
411 412 413

        self.basic_stateduration_function()

G
Ganlin Zhao 已提交
414
        tdLog.printNoPrefix("==========step6: stateduration boundary query ============")
W
wenzhouwww@live.cn 已提交
415 416 417

        self.check_boundary_values()

G
Ganlin Zhao 已提交
418
        tdLog.printNoPrefix("==========step6: stateduration unit time test ============")
W
wenzhouwww@live.cn 已提交
419 420 421 422 423 424 425 426 427 428

        self.check_unit_time()


    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())