timetruncate.py 11.1 KB
Newer Older
J
jiacy-jcy 已提交
1 2 3 4 5
import taos
from util.log import *
from util.cases import *
from util.sql import *
import numpy as np
J
update  
jiacy-jcy 已提交
6 7
import time
from datetime import datetime
J
jiacy-jcy 已提交
8
from util.gettime import *
J
jiacy-jcy 已提交
9
class TDTestCase:
10
    def init(self, conn, logSql, replicaVar=1):
11
        self.replicaVar = int(replicaVar)
J
jiacy-jcy 已提交
12 13
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor())
“happyguoxy” 已提交
14 15 16
        print(conn)
        self.rest_tag = str(conn).lower().split('.')[0].replace("<taos","")
        print(self.rest_tag)
J
jiacy-jcy 已提交
17
        self.get_time = GetTime()
J
update  
jiacy-jcy 已提交
18 19 20 21 22 23 24 25
        self.ts_str = [
            '2020-1-1',
            '2020-2-1 00:00:01',
            '2020-3-1 00:00:00.001',
            '2020-4-1 00:00:00.001002',
            '2020-5-1 00:00:00.001002001'
        ]
        self.db_param_precision = ['ms','us','ns']
J
jiacy-jcy 已提交
26
        self.time_unit = ['1w','1d','1h','1m','1s','1a','1u','1b']
J
jiacy-jcy 已提交
27
        self.error_unit = ['2w','2d','2h','2m','2s','2a','2u','1c','#1']
J
jiacy-jcy 已提交
28 29 30 31
        self.dbname = 'db'
        self.ntbname = f'{self.dbname}.ntb'
        self.stbname = f'{self.dbname}.stb'
        self.ctbname = f'{self.dbname}.ctb'
C
cpwu 已提交
32

G
Ganlin Zhao 已提交
33
    def check_ms_timestamp(self,unit,date_time, ignore_tz):
J
jiacy-jcy 已提交
34 35
        if unit.lower() == '1a':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
36
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
37 38 39
                tdSql.checkEqual(ts_result,int(date_time[i]))
        elif unit.lower() == '1s':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
40
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
41 42 43
                tdSql.checkEqual(ts_result,int(date_time[i]/1000)*1000)
        elif unit.lower() == '1m':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
44
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
45 46 47
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/60)*60*1000)
        elif unit.lower() == '1h':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
48
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
49 50 51
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/60/60)*60*60*1000  )
        elif unit.lower() == '1d':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
52
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
G
Ganlin Zhao 已提交
53 54 55 56 57
                if ignore_tz == 0:
                    tdSql.checkEqual(ts_result,int(date_time[i]/1000/60/60/24)*24*60*60*1000)
                else:
                    # assuming the client timezone is UTC+0800
                    tdSql.checkEqual(ts_result,int(date_time[i] - (date_time[i] + 8 * 3600 * 1000) % (86400 * 1000)))
J
jiacy-jcy 已提交
58 59
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
60
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
61
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/60/60/24/7)*7*24*60*60*1000)
C
cpwu 已提交
62

G
Ganlin Zhao 已提交
63
    def check_us_timestamp(self,unit,date_time, ignore_tz):
J
jiacy-jcy 已提交
64 65
        if unit.lower() == '1u':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
66
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
67 68 69
                tdSql.checkEqual(ts_result,int(date_time[i]))
        elif unit.lower() == '1a':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
70
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
71 72 73
                tdSql.checkEqual(ts_result,int(date_time[i]/1000)*1000)
        elif unit.lower() == '1s':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
74
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
75 76 77
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000)*1000*1000)
        elif unit.lower() == '1m':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
78
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
79 80 81
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60)*60*1000*1000)
        elif unit.lower() == '1h':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
82
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
83 84 85
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60/60)*60*60*1000*1000  )
        elif unit.lower() == '1d':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
86
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
G
Ganlin Zhao 已提交
87 88 89 90 91
                if ignore_tz == 0:
                    tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60/60/24)*24*60*60*1000*1000 )
                else:
                    # assuming the client timezone is UTC+0800
                    tdSql.checkEqual(ts_result,int(date_time[i] - (date_time[i] + 8 * 3600 * 1000000) % (86400 * 1000000)))
J
jiacy-jcy 已提交
92 93
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
94
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
95
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60/60/24/7)*7*24*60*60*1000*1000)
C
cpwu 已提交
96

G
Ganlin Zhao 已提交
97
    def check_ns_timestamp(self,unit,date_time, ignore_tz):
J
jiacy-jcy 已提交
98 99
        if unit.lower() == '1b':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
100 101
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]))
J
jiacy-jcy 已提交
102
        elif unit.lower() == '1u':
J
jiacy-jcy 已提交
103
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
104 105
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000)*1000)
J
jiacy-jcy 已提交
106 107
        elif unit.lower() == '1a':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
108 109
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000)*1000*1000)
J
jiacy-jcy 已提交
110 111
        elif unit.lower() == '1s':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
112 113
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000)*1000*1000*1000)
J
jiacy-jcy 已提交
114 115
        elif unit.lower() == '1m':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
116 117
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60)*60*1000*1000*1000)
J
jiacy-jcy 已提交
118 119
        elif unit.lower() == '1h':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
120 121
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60/60)*60*60*1000*1000*1000  )
J
jiacy-jcy 已提交
122 123
        elif unit.lower() == '1d':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
124
                if self.rest_tag != 'rest':
G
Ganlin Zhao 已提交
125 126 127 128 129
                    if ignore_tz == 0:
                        tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60/60/24)*24*60*60*1000*1000*1000 )
                    else:
                        # assuming the client timezone is UTC+0800
                        tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i] - (date_time[i] + 8 * 3600 * 1000000) % (86400 * 1000000)))
J
jiacy-jcy 已提交
130 131
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
“happyguoxy” 已提交
132 133
                if self.rest_tag != 'rest':
                    tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60/60/24/7)*7*24*60*60*1000*1000*1000)
C
cpwu 已提交
134

G
Ganlin Zhao 已提交
135
    def check_tb_type(self,unit,tb_type,ignore_tz):
C
cpwu 已提交
136
        if tb_type.lower() == 'ntb':
G
Ganlin Zhao 已提交
137
            tdSql.query(f'select timetruncate(ts,{unit},{ignore_tz}) from {self.ntbname}')
J
jiacy-jcy 已提交
138
        elif tb_type.lower() == 'ctb':
G
Ganlin Zhao 已提交
139
            tdSql.query(f'select timetruncate(ts,{unit},{ignore_tz}) from {self.ctbname}')
J
jiacy-jcy 已提交
140
        elif tb_type.lower() == 'stb':
G
Ganlin Zhao 已提交
141
            tdSql.query(f'select timetruncate(ts,{unit},{ignore_tz}) from {self.stbname}')
C
cpwu 已提交
142

J
jiacy-jcy 已提交
143
    def data_check(self,date_time,precision,tb_type):
G
Ganlin Zhao 已提交
144
        tz_options = [0, 1]
J
jiacy-jcy 已提交
145
        for unit in self.time_unit:
J
jiacy-jcy 已提交
146
            if (unit.lower() == '1u' and precision.lower() == 'ms') or (unit.lower() == '1b' and precision.lower() == 'us') or (unit.lower() == '1b' and precision.lower() == 'ms'):
C
cpwu 已提交
147
                if tb_type.lower() == 'ntb':
J
jiacy-jcy 已提交
148 149 150 151 152 153
                    tdSql.error(f'select timetruncate(ts,{unit}) from {self.ntbname}')
                elif tb_type.lower() == 'ctb':
                    tdSql.error(f'select timetruncate(ts,{unit}) from {self.ctbname}')
                elif tb_type.lower() == 'stb':
                    tdSql.error(f'select timetruncate(ts,{unit}) from {self.stbname}')
            elif precision.lower() == 'ms':
G
Ganlin Zhao 已提交
154 155 156 157
                for ignore_tz in tz_options:
                    self.check_tb_type(unit,tb_type,ignore_tz)
                    tdSql.checkRows(len(self.ts_str))
                    self.check_ms_timestamp(unit,date_time,ignore_tz)
J
jiacy-jcy 已提交
158
            elif precision.lower() == 'us':
G
Ganlin Zhao 已提交
159 160 161 162
                for ignore_tz in tz_options:
                    self.check_tb_type(unit,tb_type,ignore_tz)
                    tdSql.checkRows(len(self.ts_str))
                    self.check_us_timestamp(unit,date_time,ignore_tz)
J
jiacy-jcy 已提交
163
            elif precision.lower() == 'ns':
G
Ganlin Zhao 已提交
164 165 166 167
                for ignore_tz in tz_options:
                    self.check_tb_type(unit,tb_type, ignore_tz)
                    tdSql.checkRows(len(self.ts_str))
                    self.check_ns_timestamp(unit,date_time,ignore_tz)
J
jiacy-jcy 已提交
168 169 170 171 172 173 174
        for unit in self.error_unit:
            if tb_type.lower() == 'ntb':
                tdSql.error(f'select timetruncate(ts,{unit}) from {self.ntbname}')
            elif tb_type.lower() == 'ctb':
                tdSql.error(f'select timetruncate(ts,{unit}) from {self.ctbname}')
            elif tb_type.lower() == 'stb':
                tdSql.error(f'select timetruncate(ts,{unit}) from {self.stbname}')
C
cpwu 已提交
175

J
update  
jiacy-jcy 已提交
176 177
    def function_check_ntb(self):
        for precision in self.db_param_precision:
J
jiacy-jcy 已提交
178 179
            tdSql.execute(f'drop database if exists {self.dbname}')
            tdSql.execute(f'create database {self.dbname} precision "{precision}"')
C
cpwu 已提交
180
            tdLog.info(f"=====now is in a {precision} database=====")
J
jiacy-jcy 已提交
181
            tdSql.execute(f'use {self.dbname}')
J
jiacy-jcy 已提交
182
            tdSql.execute(f'create table {self.ntbname} (ts timestamp,c0 int)')
J
update  
jiacy-jcy 已提交
183
            for ts in self.ts_str:
J
jiacy-jcy 已提交
184
                tdSql.execute(f'insert into {self.ntbname} values("{ts}",1)')
J
jiacy-jcy 已提交
185
            date_time = self.get_time.time_transform(self.ts_str,precision)
J
jiacy-jcy 已提交
186
            self.data_check(date_time,precision,'ntb')
C
cpwu 已提交
187

J
jiacy-jcy 已提交
188 189
    def function_check_stb(self):
        for precision in self.db_param_precision:
J
jiacy-jcy 已提交
190 191 192
            tdSql.execute(f'drop database if exists {self.dbname}')
            tdSql.execute(f'create database {self.dbname} precision "{precision}"')
            tdSql.execute(f'use {self.dbname}')
J
jiacy-jcy 已提交
193 194 195 196
            tdSql.execute(f'create table {self.stbname} (ts timestamp,c0 int) tags(t0 int)')
            tdSql.execute(f'create table {self.ctbname} using {self.stbname} tags(1)')
            for ts in self.ts_str:
                tdSql.execute(f'insert into {self.ctbname} values("{ts}",1)')
J
jiacy-jcy 已提交
197
            date_time = self.get_time.time_transform(self.ts_str,precision)
J
jiacy-jcy 已提交
198 199
            self.data_check(date_time,precision,'ctb')
            self.data_check(date_time,precision,'stb')
G
Ganlin Zhao 已提交
200 201


J
jiacy-jcy 已提交
202
    def run(self):
J
update  
jiacy-jcy 已提交
203
        self.function_check_ntb()
J
jiacy-jcy 已提交
204
        self.function_check_stb()
C
cpwu 已提交
205

J
jiacy-jcy 已提交
206 207 208 209 210
    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)

tdCases.addWindows(__file__, TDTestCase())
G
Ganlin Zhao 已提交
211
tdCases.addLinux(__file__, TDTestCase())