timetruncate.py 9.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 10 11 12
class TDTestCase:
    def init(self, conn, logSql):
        tdLog.debug("start to execute %s" % __file__)
        tdSql.init(conn.cursor())
J
jiacy-jcy 已提交
13
        self.get_time = GetTime()
J
update  
jiacy-jcy 已提交
14 15 16 17 18 19 20 21 22
        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']
        self.time_unit = ['1w','1d','1h','1m','1s','1a','1u']
J
jiacy-jcy 已提交
23
        self.error_unit = ['2w','2d','2h','2m','2s','2a','2u','1c','#1']
G
Ganlin Zhao 已提交
24
        self.error_unit = ['2w','2d','2h','2m','2s','2a','2u','1c','#1']
J
jiacy-jcy 已提交
25 26 27 28 29 30
        self.ntbname = 'ntb'
        self.stbname = 'stb'
        self.ctbname = 'ctb'
    def check_ms_timestamp(self,unit,date_time):
        if unit.lower() == '1a':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
31
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
32 33 34
                tdSql.checkEqual(ts_result,int(date_time[i]))
        elif unit.lower() == '1s':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
35
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
36 37 38
                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 已提交
39
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
40 41 42
                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 已提交
43
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
44 45 46
                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 已提交
47
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
48 49 50
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/60/60/24)*24*60*60*1000)  
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
51
                ts_result = self.get_time.get_ms_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
52 53 54 55
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/60/60/24/7)*7*24*60*60*1000)
    def check_us_timestamp(self,unit,date_time):
        if unit.lower() == '1u':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
56
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
57 58 59
                tdSql.checkEqual(ts_result,int(date_time[i]))
        elif unit.lower() == '1a':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
60
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
61 62 63
                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 已提交
64
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
65 66 67
                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 已提交
68
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
69 70 71
                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 已提交
72
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
73 74 75
                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 已提交
76
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
77 78 79
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60/60/24)*24*60*60*1000*1000 ) 
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
80
                ts_result = self.get_time.get_us_timestamp(str(tdSql.queryResult[i][0]))
J
jiacy-jcy 已提交
81 82 83 84
                tdSql.checkEqual(ts_result,int(date_time[i]/1000/1000/60/60/24/7)*7*24*60*60*1000*1000)
    def check_ns_timestamp(self,unit,date_time):
        if unit.lower() == '1u':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
85
                tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000)*1000)
J
jiacy-jcy 已提交
86 87
        elif unit.lower() == '1a':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
88
                tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000)*1000*1000)
J
jiacy-jcy 已提交
89 90
        elif unit.lower() == '1s':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
91
                tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000)*1000*1000*1000)
J
jiacy-jcy 已提交
92 93
        elif unit.lower() == '1m':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
94
                tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60)*60*1000*1000*1000)
J
jiacy-jcy 已提交
95 96
        elif unit.lower() == '1h':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
97
                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 已提交
98 99
        elif unit.lower() == '1d':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
100
                tdSql.checkEqual(tdSql.queryResult[i][0],int(date_time[i]*1000/1000/1000/1000/1000/60/60/24)*24*60*60*1000*1000*1000 ) 
J
jiacy-jcy 已提交
101 102
        elif unit.lower() == '1w':
            for i in range(len(self.ts_str)):
J
jiacy-jcy 已提交
103 104 105 106 107 108 109 110
                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)
    def check_tb_type(self,unit,tb_type):
        if tb_type.lower() == 'ntb': 
            tdSql.query(f'select timetruncate(ts,{unit}) from {self.ntbname}')
        elif tb_type.lower() == 'ctb':
            tdSql.query(f'select timetruncate(ts,{unit}) from {self.ctbname}')
        elif tb_type.lower() == 'stb':
            tdSql.query(f'select timetruncate(ts,{unit}) from {self.stbname}')
J
jiacy-jcy 已提交
111 112
    def data_check(self,date_time,precision,tb_type):
        for unit in self.time_unit:
J
jiacy-jcy 已提交
113
            if (unit.lower() == '1u' and precision.lower() == 'ms') or (unit.lower() == '1b' and precision.lower() == 'us'):
J
jiacy-jcy 已提交
114 115 116 117 118 119 120
                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}')
            elif precision.lower() == 'ms':
J
jiacy-jcy 已提交
121
                self.check_tb_type(unit,tb_type)
J
jiacy-jcy 已提交
122 123 124
                tdSql.checkRows(len(self.ts_str))
                self.check_ms_timestamp(unit,date_time)
            elif precision.lower() == 'us':
J
jiacy-jcy 已提交
125
                self.check_tb_type(unit,tb_type)
J
jiacy-jcy 已提交
126 127 128
                tdSql.checkRows(len(self.ts_str))
                self.check_us_timestamp(unit,date_time)
            elif precision.lower() == 'ns':
J
jiacy-jcy 已提交
129
                self.check_tb_type(unit,tb_type)
J
jiacy-jcy 已提交
130 131 132 133 134 135 136 137 138
                tdSql.checkRows(len(self.ts_str))
                self.check_ns_timestamp(unit,date_time)
        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}')
J
update  
jiacy-jcy 已提交
139 140 141 142 143
    def function_check_ntb(self):
        for precision in self.db_param_precision:
            tdSql.execute('drop database if exists db')
            tdSql.execute(f'create database db precision "{precision}"')
            tdSql.execute('use db')
J
jiacy-jcy 已提交
144
            tdSql.execute(f'create table {self.ntbname} (ts timestamp,c0 int)')
J
update  
jiacy-jcy 已提交
145
            for ts in self.ts_str:
J
jiacy-jcy 已提交
146
                tdSql.execute(f'insert into {self.ntbname} values("{ts}",1)')
J
jiacy-jcy 已提交
147
            date_time = self.get_time.time_transform(self.ts_str,precision)
J
jiacy-jcy 已提交
148 149 150 151 152 153 154 155 156 157
            self.data_check(date_time,precision,'ntb')
    def function_check_stb(self):
        for precision in self.db_param_precision:
            tdSql.execute('drop database if exists db')
            tdSql.execute(f'create database db precision "{precision}"')
            tdSql.execute('use db')
            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 已提交
158
            date_time = self.get_time.time_transform(self.ts_str,precision)
J
jiacy-jcy 已提交
159 160
            self.data_check(date_time,precision,'ctb')
            self.data_check(date_time,precision,'stb')
J
jiacy-jcy 已提交
161
    def run(self):
J
update  
jiacy-jcy 已提交
162
        self.function_check_ntb()
J
jiacy-jcy 已提交
163
        self.function_check_stb()
J
jiacy-jcy 已提交
164 165 166 167 168
    def stop(self):
        tdSql.close()
        tdLog.success("%s successfully executed" % __file__)

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