unique.py 23.0 KB
Newer Older
W
wenzhouwww@live.cn 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
from math import floor
from random import randint, random
from numpy import equal
import taos
import sys
import datetime
import inspect

from util.log import *
from util.sql import *
from util.cases import *

class TDTestCase:

    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
G
Ganlin Zhao 已提交
18

C
cpwu 已提交
19
    def prepare_datas(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
20
        tdSql.execute(
C
cpwu 已提交
21
            f'''create table {dbname}.stb1
W
wenzhouwww@live.cn 已提交
22 23 24 25
            (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 已提交
26

W
wenzhouwww@live.cn 已提交
27
        tdSql.execute(
C
cpwu 已提交
28 29
            f'''
            create table {dbname}.t1
W
wenzhouwww@live.cn 已提交
30 31 32 33
            (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 已提交
34
            tdSql.execute(f'create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( {i+1} )')
W
wenzhouwww@live.cn 已提交
35 36 37

        for i in range(9):
            tdSql.execute(
C
cpwu 已提交
38
                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 已提交
39 40
            )
            tdSql.execute(
C
cpwu 已提交
41
                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 已提交
42
            )
C
cpwu 已提交
43 44 45 46
        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 已提交
47

C
cpwu 已提交
48 49 50
        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 已提交
51 52

        tdSql.execute(
C
cpwu 已提交
53
            f'''insert into {dbname}.t1 values
W
wenzhouwww@live.cn 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67
            ( '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 已提交
68

C
cpwu 已提交
69
    def test_errors(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
70
        error_sql_lists = [
C
cpwu 已提交
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
            f"select unique from  {dbname}.t1",
            f"select unique(123--123)==1 from  {dbname}.t1",
            f"select unique(123,123) from  {dbname}.t1",
            f"select unique(c1,ts) from  {dbname}.t1",
            f"select unique(c1,c1,ts) from  {dbname}.t1",
            f"select unique(c1) as 'd1' from  {dbname}.t1",
            f"select unique(c1 ,c2 ) from  {dbname}.t1",
            f"select unique(c1 ,NULL) from  {dbname}.t1",
            f"select unique(,) from  {dbname}.t1;",
            f"select unique(floor(c1) ab from  {dbname}.t1)",
            f"select unique(c1) as int from  {dbname}.t1",
            f"select unique('c1') from  {dbname}.t1",
            f"select unique(NULL) from  {dbname}.t1",
            f"select unique('') from  {dbname}.t1",
            f"select unique(c%) from  {dbname}.t1",
            f"select unique(t1) from  {dbname}.t1",
            f"select unique(True) from  {dbname}.t1",
            f"select unique(c1) , count(c1) from  {dbname}.t1",
            f"select unique(c1) , avg(c1) from  {dbname}.t1",
            f"select unique(c1) , min(c1) from  {dbname}.t1",
            f"select unique(c1) , spread(c1) from  {dbname}.t1",
            f"select unique(c1) , diff(c1) from  {dbname}.t1",
            #f"select unique(c1) , abs(c1) from  {dbname}.t1",  # support
            #f"select unique(c1) , c1 from  {dbname}.t1",
            f"select unique from  {dbname}.stb1 partition by tbname",
            f"select unique(123--123)==1 from  {dbname}.stb1 partition by tbname",
            f"select unique(123) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1,ts) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1,c1,ts) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) as 'd1' from  {dbname}.stb1 partition by tbname",
            f"select unique(c1 ,c2 ) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1 ,NULL) from  {dbname}.stb1 partition by tbname",
            f"select unique(,) from  {dbname}.stb1 partition by tbname;",
            #f"select unique(floor(c1) ab from  {dbname}.stb1 partition by tbname)",  # support
            #f"select unique(c1) as int from  {dbname}.stb1 partition by tbname",
            f"select unique('c1') from  {dbname}.stb1 partition by tbname",
            f"select unique(NULL) from  {dbname}.stb1 partition by tbname",
            f"select unique('') from  {dbname}.stb1 partition by tbname",
            f"select unique(c%) from  {dbname}.stb1 partition by tbname",
            #f"select unique(t1) from  {dbname}.stb1 partition by tbname",  # support
            f"select unique(True) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) , count(c1) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) , avg(c1) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) , min(c1) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) , spread(c1) from  {dbname}.stb1 partition by tbname",
            f"select unique(c1) , diff(c1) from  {dbname}.stb1 partition by tbname",
            #f"select unique(c1) , abs(c1) from  {dbname}.stb1 partition by tbname", # support
            #f"select unique(c1) , c1 from  {dbname}.stb1 partition by tbname" # support
G
Ganlin Zhao 已提交
119

W
wenzhouwww@live.cn 已提交
120 121 122 123
        ]
        for error_sql in error_sql_lists:
            tdSql.error(error_sql)
            pass
G
Ganlin Zhao 已提交
124

C
cpwu 已提交
125
    def support_types(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
126
        other_no_value_types = [
C
cpwu 已提交
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
            f"select unique(ts) from  {dbname}.t1" ,
            f"select unique(c7) from  {dbname}.t1",
            f"select unique(c8) from  {dbname}.t1",
            f"select unique(c9) from  {dbname}.t1",
            f"select unique(ts) from  {dbname}.ct1" ,
            f"select unique(c7) from  {dbname}.ct1",
            f"select unique(c8) from  {dbname}.ct1",
            f"select unique(c9) from  {dbname}.ct1",
            f"select unique(ts) from  {dbname}.ct3" ,
            f"select unique(c7) from  {dbname}.ct3",
            f"select unique(c8) from  {dbname}.ct3",
            f"select unique(c9) from  {dbname}.ct3",
            f"select unique(ts) from  {dbname}.ct4" ,
            f"select unique(c7) from  {dbname}.ct4",
            f"select unique(c8) from  {dbname}.ct4",
            f"select unique(c9) from  {dbname}.ct4",
            f"select unique(ts) from  {dbname}.stb1 partition by tbname" ,
            f"select unique(c7) from  {dbname}.stb1 partition by tbname",
            f"select unique(c8) from  {dbname}.stb1 partition by tbname",
            f"select unique(c9) from  {dbname}.stb1 partition by tbname"
W
wenzhouwww@live.cn 已提交
147
        ]
G
Ganlin Zhao 已提交
148

W
wenzhouwww@live.cn 已提交
149 150 151
        for type_sql in other_no_value_types:
            tdSql.query(type_sql)
            tdLog.info("support type ok ,  sql is : %s"%type_sql)
G
Ganlin Zhao 已提交
152

W
wenzhouwww@live.cn 已提交
153
        type_sql_lists = [
C
cpwu 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
            f"select unique(c1) from  {dbname}.t1",
            f"select unique(c2) from  {dbname}.t1",
            f"select unique(c3) from  {dbname}.t1",
            f"select unique(c4) from  {dbname}.t1",
            f"select unique(c5) from  {dbname}.t1",
            f"select unique(c6) from  {dbname}.t1",

            f"select unique(c1) from  {dbname}.ct1",
            f"select unique(c2) from  {dbname}.ct1",
            f"select unique(c3) from  {dbname}.ct1",
            f"select unique(c4) from  {dbname}.ct1",
            f"select unique(c5) from  {dbname}.ct1",
            f"select unique(c6) from  {dbname}.ct1",

            f"select unique(c1) from  {dbname}.ct3",
            f"select unique(c2) from  {dbname}.ct3",
            f"select unique(c3) from  {dbname}.ct3",
            f"select unique(c4) from  {dbname}.ct3",
            f"select unique(c5) from  {dbname}.ct3",
            f"select unique(c6) from  {dbname}.ct3",

            f"select unique(c1) from  {dbname}.stb1 partition by tbname",
            f"select unique(c2) from  {dbname}.stb1 partition by tbname",
            f"select unique(c3) from  {dbname}.stb1 partition by tbname",
            f"select unique(c4) from  {dbname}.stb1 partition by tbname",
            f"select unique(c5) from  {dbname}.stb1 partition by tbname",
            f"select unique(c6) from  {dbname}.stb1 partition by tbname",

            f"select unique(c6) as alisb from  {dbname}.stb1 partition by tbname",
            f"select unique(c6) alisb from  {dbname}.stb1 partition by tbname",
W
wenzhouwww@live.cn 已提交
184 185 186 187 188 189
        ]

        for type_sql in type_sql_lists:
            tdSql.query(type_sql)

    def check_unique_table(self , unique_sql):
C
cpwu 已提交
190
        # unique_sql =  f"select unique(c1) from  {dbname}.ct1"
W
wenzhouwww@live.cn 已提交
191 192 193
        origin_sql = unique_sql.replace("unique(","").replace(")","")
        tdSql.query(unique_sql)
        unique_result = tdSql.queryResult
G
Ganlin Zhao 已提交
194

W
wenzhouwww@live.cn 已提交
195 196 197
        unique_datas = []
        for elem in unique_result:
            unique_datas.append(elem[0])
198
        unique_datas.sort(key=lambda x: (x is None, x))
G
Ganlin Zhao 已提交
199

W
wenzhouwww@live.cn 已提交
200 201 202 203 204
        tdSql.query(origin_sql)
        origin_result = tdSql.queryResult
        origin_datas = []
        for elem in origin_result:
            origin_datas.append(elem[0])
G
Ganlin Zhao 已提交
205

W
wenzhouwww@live.cn 已提交
206 207 208 209 210 211
        pre_unique = []
        for elem in origin_datas:
            if elem in pre_unique:
                continue
            else:
                pre_unique.append(elem)
212
        pre_unique.sort(key=lambda x: (x is None, x))
W
wenzhouwww@live.cn 已提交
213 214 215 216 217 218

        if pre_unique == unique_datas:
            tdLog.info(" unique query check pass , unique sql is: %s" %unique_sql)
        else:
            tdLog.exit(" unique query check fail , unique sql is: %s " %unique_sql)

C
cpwu 已提交
219
    def basic_unique_function(self, dbname="db"):
W
wenzhouwww@live.cn 已提交
220

G
Ganlin Zhao 已提交
221
        # basic query
C
cpwu 已提交
222
        tdSql.query(f"select c1 from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
223
        tdSql.checkRows(0)
C
cpwu 已提交
224
        tdSql.query(f"select c1 from  {dbname}.t1")
W
wenzhouwww@live.cn 已提交
225
        tdSql.checkRows(12)
C
cpwu 已提交
226
        tdSql.query(f"select c1 from  {dbname}.stb1")
W
wenzhouwww@live.cn 已提交
227 228 229
        tdSql.checkRows(25)

        # used for empty table  , ct3 is empty
C
cpwu 已提交
230
        tdSql.query(f"select unique(c1) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
231
        tdSql.checkRows(0)
C
cpwu 已提交
232
        tdSql.query(f"select unique(c2) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
233
        tdSql.checkRows(0)
C
cpwu 已提交
234
        tdSql.query(f"select unique(c3) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
235
        tdSql.checkRows(0)
C
cpwu 已提交
236
        tdSql.query(f"select unique(c4) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
237
        tdSql.checkRows(0)
C
cpwu 已提交
238
        tdSql.query(f"select unique(c5) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
239
        tdSql.checkRows(0)
C
cpwu 已提交
240
        tdSql.query(f"select unique(c6) from  {dbname}.ct3")
W
wenzhouwww@live.cn 已提交
241

G
Ganlin Zhao 已提交
242
        # will support _rowts mix with
C
cpwu 已提交
243
        # tdSql.query(f"select unique(c6),_rowts from  {dbname}.ct3")
G
Ganlin Zhao 已提交
244

W
wenzhouwww@live.cn 已提交
245 246
        # auto check for t1 table
        # used for regular table
C
cpwu 已提交
247
        tdSql.query(f"select unique(c1) from  {dbname}.t1")
G
Ganlin Zhao 已提交
248

C
cpwu 已提交
249
        tdSql.query(f"desc {dbname}.t1")
W
wenzhouwww@live.cn 已提交
250 251 252 253
        col_lists_rows = tdSql.queryResult
        col_lists = []
        for col_name in col_lists_rows:
            col_lists.append(col_name[0])
G
Ganlin Zhao 已提交
254

W
wenzhouwww@live.cn 已提交
255
        for col in col_lists:
C
cpwu 已提交
256
            self.check_unique_table(f"select unique({col}) from  {dbname}.t1")
W
wenzhouwww@live.cn 已提交
257 258 259

        # unique with super tags

C
cpwu 已提交
260
        tdSql.query(f"select unique(c1) from  {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
261 262
        tdSql.checkRows(10)

C
cpwu 已提交
263
        tdSql.query(f"select unique(c1) from  {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
264 265
        tdSql.checkRows(10)

C
cpwu 已提交
266 267
        #tdSql.error(f"select unique(c1),tbname from  {dbname}.ct1") #support
        #tdSql.error(f"select unique(c1),t1 from  {dbname}.ct1")    #support
W
wenzhouwww@live.cn 已提交
268

G
Ganlin Zhao 已提交
269
        # unique with common col
C
cpwu 已提交
270 271
        #tdSql.error(f"select unique(c1) ,ts  from  {dbname}.ct1")
        #tdSql.error(f"select unique(c1) ,c1  from  {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
272

G
Ganlin Zhao 已提交
273
        # unique with scalar function
C
cpwu 已提交
274 275 276
        #tdSql.error(f"select unique(c1) ,abs(c1)  from  {dbname}.ct1")
        tdSql.error(f"select unique(c1) , unique(c2) from  {dbname}.ct1")
        #tdSql.error(f"select unique(c1) , abs(c2)+2 from  {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
277

G
Ganlin Zhao 已提交
278 279

        # unique with aggregate function
C
cpwu 已提交
280 281 282 283
        tdSql.error(f"select unique(c1) ,sum(c1)  from  {dbname}.ct1")
        tdSql.error(f"select unique(c1) ,max(c1)  from  {dbname}.ct1")
        tdSql.error(f"select unique(c1) ,csum(c1)  from  {dbname}.ct1")
        tdSql.error(f"select unique(c1) ,count(c1)  from  {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
284 285

        # unique with filter where
C
cpwu 已提交
286
        tdSql.query(f"select unique(c1) from  {dbname}.ct4 where c1 is null")
W
wenzhouwww@live.cn 已提交
287 288
        tdSql.checkData(0, 0, None)

C
cpwu 已提交
289
        tdSql.query(f"select unique(c1) from  {dbname}.ct4 where c1 >2 order by 1")
290 291 292 293
        tdSql.checkData(0, 0, 3)
        tdSql.checkData(1, 0, 4)
        tdSql.checkData(2, 0, 5)
        tdSql.checkData(5, 0, 8)
W
wenzhouwww@live.cn 已提交
294

C
cpwu 已提交
295
        tdSql.query(f"select unique(c1) from  {dbname}.ct4  where c2 between 0  and   99999 order by 1 desc")
W
wenzhouwww@live.cn 已提交
296 297 298 299 300 301 302 303 304 305
        tdSql.checkData(0, 0, 8)
        tdSql.checkData(1, 0, 7)
        tdSql.checkData(2, 0, 6)
        tdSql.checkData(3, 0, 5)
        tdSql.checkData(4, 0, 4)
        tdSql.checkData(5, 0, 3)
        tdSql.checkData(6, 0, 2)
        tdSql.checkData(7, 0, 1)
        tdSql.checkData(8, 0, 0)

G
Ganlin Zhao 已提交
306
        # unique with union all
C
cpwu 已提交
307
        tdSql.query(f"select unique(c1) from  {dbname}.ct4 union all select c1 from  {dbname}.ct1")
W
wenzhouwww@live.cn 已提交
308
        tdSql.checkRows(23)
C
cpwu 已提交
309
        tdSql.query(f"select unique(c1) from  {dbname}.ct4 union all select distinct(c1) from  {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
310
        tdSql.checkRows(20)
C
cpwu 已提交
311
        tdSql.query(f"select unique(c2) from  {dbname}.ct4 union all select abs(c2)/2 from  {dbname}.ct4")
W
wenzhouwww@live.cn 已提交
312 313
        tdSql.checkRows(22)

G
Ganlin Zhao 已提交
314 315
        # unique with join
        # prepare join datas with same ts
W
wenzhouwww@live.cn 已提交
316 317

        tdSql.execute(" use db ")
C
cpwu 已提交
318 319 320
        tdSql.execute(" create stable db.st1 (ts timestamp , num int) tags(ind int)")
        tdSql.execute(" create table db.tb1 using db.st1 tags(1)")
        tdSql.execute(" create table db.tb2 using db.st1 tags(2)")
W
wenzhouwww@live.cn 已提交
321

C
cpwu 已提交
322 323 324
        tdSql.execute(" create stable db.st2 (ts timestamp , num int) tags(ind int)")
        tdSql.execute(" create table db.ttb1 using db.st2 tags(1)")
        tdSql.execute(" create table db.ttb2 using db.st2 tags(2)")
W
wenzhouwww@live.cn 已提交
325 326 327 328 329

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

        for i in range(10):
            ts_value = start_ts+i*1000
C
cpwu 已提交
330 331
            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 已提交
332

C
cpwu 已提交
333 334
            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 已提交
335

C
cpwu 已提交
336
        tdSql.query(f"select unique(tb2.num)  from db.tb1 tb1, db.tb2 tb2 where tb1.ts=tb2.ts order by 1")
W
wenzhouwww@live.cn 已提交
337 338 339 340 341 342
        tdSql.checkRows(10)
        tdSql.checkData(0,0,0)
        tdSql.checkData(1,0,1)
        tdSql.checkData(2,0,2)
        tdSql.checkData(9,0,9)

C
cpwu 已提交
343
        tdSql.query(f"select unique(tb2.num)  from db.tb1 tb1, db.tb2 tb2 where tb1.ts=tb2.ts union all select unique(tb1.num)  from  db.tb1 tb1, db.tb2 tb2 where tb1.ts=tb2.ts order by 1")
W
wenzhouwww@live.cn 已提交
344 345
        tdSql.checkRows(20)
        tdSql.checkData(0,0,0)
346 347 348
        tdSql.checkData(2,0,1)
        tdSql.checkData(4,0,2)
        tdSql.checkData(18,0,9)
W
wenzhouwww@live.cn 已提交
349 350

        # nest query
C
cpwu 已提交
351 352
        # tdSql.query(f"select unique(c1) from (select c1 from  {dbname}.ct1)")
        tdSql.query(f"select c1 from (select unique(c1) c1 from  {dbname}.ct4) order by 1 desc nulls first")
W
wenzhouwww@live.cn 已提交
353 354 355 356 357
        tdSql.checkRows(10)
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1, 0, 8)
        tdSql.checkData(9, 0, 0)

C
cpwu 已提交
358
        tdSql.query(f"select sum(c1) from (select unique(c1) c1 from  {dbname}.ct1)")
W
wenzhouwww@live.cn 已提交
359 360 361
        tdSql.checkRows(1)
        tdSql.checkData(0, 0, 45)

C
cpwu 已提交
362
        tdSql.query(f"select sum(c1) from (select distinct(c1) c1 from  {dbname}.ct1) union all select sum(c1) from (select unique(c1) c1 from  {dbname}.ct1)")
W
wenzhouwww@live.cn 已提交
363 364 365 366
        tdSql.checkRows(2)
        tdSql.checkData(0, 0, 45)
        tdSql.checkData(1, 0, 45)

C
cpwu 已提交
367
        tdSql.query(f"select 1-abs(c1) from (select unique(c1) c1 from  {dbname}.ct4) order by 1 nulls first")
W
wenzhouwww@live.cn 已提交
368 369 370
        tdSql.checkRows(10)
        tdSql.checkData(0, 0, None)
        tdSql.checkData(1, 0, -7.000000000)
G
Ganlin Zhao 已提交
371

W
wenzhouwww@live.cn 已提交
372 373 374

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

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

        # group by
C
cpwu 已提交
382 383
        tdSql.error(f"select unique(c1) from  {dbname}.ct1 group by c1")
        tdSql.error(f"select unique(c1) from  {dbname}.ct1 group by tbname")
W
wenzhouwww@live.cn 已提交
384 385

        # super table
386 387

        # super table
C
cpwu 已提交
388 389
        tdSql.error(f"select tbname , tail(c1,2) from  {dbname}.stb1 group by tbname")
        tdSql.query(f"select tail(c1,2) from  {dbname}.stb1 partition by tbname")
390
        tdSql.checkRows(4)
W
wenzhouwww@live.cn 已提交
391 392


G
Ganlin Zhao 已提交
393
        # bug need fix
C
cpwu 已提交
394
        # tdSql.query(f"select tbname , tail(c1,2) from  {dbname}.stb1 partition by tbname")
395 396
        # tdSql.checkRows(4)

C
cpwu 已提交
397
        # tdSql.query(f"select tbname , tail(c1,2) from  {dbname}.stb1 partition by tbname order by tbname")
398 399
        # tdSql.checkRows(4)

C
cpwu 已提交
400
        # tdSql.query(f"select tbname , count(c1) from  {dbname}.stb1 partition by tbname order by tbname ")
401
        # tdSql.checkRows(2)
C
cpwu 已提交
402
        # tdSql.query(f"select tbname , max(c1) ,c1 from  {dbname}.stb1 partition by tbname order by tbname ")
403
        # tdSql.checkRows(2)
C
cpwu 已提交
404
        # tdSql.query(f"select tbname ,first(c1) from  {dbname}.stb1 partition by tbname order by tbname ")
405 406
        # tdSql.checkRows(2)

C
cpwu 已提交
407
        tdSql.query(f"select tail(c1,2) from  {dbname}.stb1 partition by tbname")
408 409 410
        tdSql.checkRows(4)


G
Ganlin Zhao 已提交
411
        # # bug need fix
C
cpwu 已提交
412
        # tdSql.query(f"select tbname , unique(c1) from  {dbname}.stb1  where t1 = 0 partition by tbname ")
413
        # tdSql.checkRows(2)
C
cpwu 已提交
414
        # tdSql.query(f"select tbname , unique(c1) from  {dbname}.stb1  where t1 = 0 partition by tbname order by tbname ")
415
        # tdSql.checkRows(2)
C
cpwu 已提交
416
        # tdSql.query(f"select tbname , unique(c1) from  {dbname}.stb1  where c1 = 0 partition by tbname order by tbname ")
417
        # tdSql.checkRows(3)
C
cpwu 已提交
418
        # tdSql.query(f"select tbname , unique(c1) from  {dbname}.stb1  where c1 = 0 partition by tbname ")
419 420
        # tdSql.checkRows(3)

C
cpwu 已提交
421
        tdSql.query(f"select unique(t1) from  {dbname}.stb1  ")
422
        tdSql.checkRows(2)
C
cpwu 已提交
423
        tdSql.query(f"select unique(t1+c1) from  {dbname}.stb1 ")
424
        tdSql.checkRows(13)
C
cpwu 已提交
425
        tdSql.query(f"select unique(t1+c1) from  {dbname}.stb1 partition by tbname ")
H
Haojun Liao 已提交
426
        tdSql.checkRows(20)
C
cpwu 已提交
427
        tdSql.query(f"select unique(t1) from  {dbname}.stb1 partition by tbname ")
428 429
        tdSql.checkRows(2)

G
Ganlin Zhao 已提交
430
        # nest query
C
cpwu 已提交
431
        tdSql.query(f"select  unique(c1) from (select _rowts , t1 ,c1 , tbname from  {dbname}.stb1 ) ")
432 433 434
        tdSql.checkRows(11)
        tdSql.checkData(0,0,6)
        tdSql.checkData(10,0,3)
C
cpwu 已提交
435
        tdSql.query(f"select  unique(t1) from (select _rowts , t1 , tbname from  {dbname}.stb1 )")
436 437 438
        tdSql.checkRows(2)
        tdSql.checkData(0,0,4)
        tdSql.checkData(1,0,1)
G
Ganlin Zhao 已提交
439

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

C
cpwu 已提交
442 443
        tdSql.execute(f"drop database if exists {dbname}")
        tdSql.execute(f"create database if not exists {dbname}")
W
wenzhouwww@live.cn 已提交
444
        tdSql.execute(
C
cpwu 已提交
445
            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 已提交
446
        )
C
cpwu 已提交
447
        tdSql.execute(f'create table {dbname}.sub1_bound using {dbname}.stb_bound tags ( 1 )')
W
wenzhouwww@live.cn 已提交
448
        tdSql.execute(
C
cpwu 已提交
449
                f"insert into {dbname}.sub1_bound values ( now()-1s, 2147483647, 9223372036854775807, 32767, 127, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
450 451
            )
        tdSql.execute(
C
cpwu 已提交
452
                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 已提交
453 454 455
            )

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

        tdSql.execute(
C
cpwu 已提交
460
                f"insert into {dbname}.sub1_bound values ( now()+2s, 2147483643, 9223372036854775803, 32763, 123, 3.39E+38, 1.69e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
461 462 463
            )

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

W
wenzhouwww@live.cn 已提交
467
        tdSql.error(
C
cpwu 已提交
468
                f"insert into {dbname}.sub1_bound values ( now()+1s, 2147483648, 9223372036854775808, 32768, 128, 3.40E+38, 1.7e+308, True, 'binary_tb1', 'nchar_tb1', now() )"
W
wenzhouwww@live.cn 已提交
469
            )
G
Ganlin Zhao 已提交
470

C
cpwu 已提交
471
        tdSql.query(f"select unique(c2) from  {dbname}.sub1_bound order by 1 desc")
W
wenzhouwww@live.cn 已提交
472 473 474 475 476 477 478
        tdSql.checkRows(5)
        tdSql.checkData(0,0,9223372036854775807)

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

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

W
wenzhouwww@live.cn 已提交
480 481
        self.prepare_datas()

G
Ganlin Zhao 已提交
482
        tdLog.printNoPrefix("==========step2:test errors ==============")
W
wenzhouwww@live.cn 已提交
483 484

        self.test_errors()
G
Ganlin Zhao 已提交
485 486

        tdLog.printNoPrefix("==========step3:support types ============")
W
wenzhouwww@live.cn 已提交
487 488 489

        self.support_types()

G
Ganlin Zhao 已提交
490
        tdLog.printNoPrefix("==========step4: floor basic query ============")
W
wenzhouwww@live.cn 已提交
491 492 493

        self.basic_unique_function()

G
Ganlin Zhao 已提交
494
        tdLog.printNoPrefix("==========step5: floor boundary query ============")
W
wenzhouwww@live.cn 已提交
495 496 497 498 499 500 501 502 503 504

        self.check_boundary_values()


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

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