To_iso8601.py 6.4 KB
Newer Older
J
update  
jiacy-jcy 已提交
1
from time import sleep
J
update  
jiacy-jcy 已提交
2

J
update  
jiacy-jcy 已提交
3 4 5
from util.log import *
from util.sql import *
from util.cases import *
J
jiacy-jcy 已提交
6
import os
J
update  
jiacy-jcy 已提交
7

J
update  
jiacy-jcy 已提交
8 9 10 11 12 13 14


class TDTestCase:

    def init(self, conn, logSql):
        tdLog.debug(f"start to excute {__file__}")
        tdSql.init(conn.cursor())
J
jiacy-jcy 已提交
15 16 17
        self.rowNum = 10
        self.ts = 1640966400000  # 2022-1-1 00:00:00.000
    def check_customize_param_ms(self):
J
update  
jiacy-jcy 已提交
18
        
J
jiacy-jcy 已提交
19
        time_zone = os.popen('date "+%z"').read().strip()
J
jiacy-jcy 已提交
20 21
        tdSql.execute('create database db1 precision "ms"')
        tdSql.execute('use db1')
J
jiacy-jcy 已提交
22
        tdSql.execute('create table if not exists ntb(ts timestamp, c1 int, c2 timestamp)')
J
jiacy-jcy 已提交
23 24 25 26 27 28 29 30 31 32 33 34
        for i in range(self.rowNum):
            tdSql.execute("insert into ntb values(%d, %d, %d)" 
                        % (self.ts + i, i + 1, self.ts + i))
        tdSql.query('select to_iso8601(ts) from ntb')
        for i in range(self.rowNum):
            tdSql.checkEqual(tdSql.queryResult[i][0],f'2022-01-01T00:00:00.00{i}{time_zone}')
            
        timezone_list = ['+0000','+0100','+0200','+0300','+0330','+0400','+0500','+0530','+0600','+0700','+0800','+0900','+1000','+1100','+1200',\
                        '+00','+01','+02','+03','+04','+05','+06','+07','+08','+09','+10','+11','+12',\
                            '+00:00','+01:00','+02:00','+03:00','+03:30','+04:00','+05:00','+05:30','+06:00','+07:00','+08:00','+09:00','+10:00','+11:00','+12:00',\
                            '-0000','-0100','-0200','-0300','-0400','-0500','-0600','-0700','-0800','-0900','-1000','-1100','-1200',\
                        '-00','-01','-02','-03','-04','-05','-06','-07','-08','-09','-10','-11','-12',\
J
update  
jiacy-jcy 已提交
35
                            '-00:00','-01:00','-02:00','-03:00','-04:00','-05:00','-06:00','-07:00','-08:00','-09:00','-10:00','-11:00','-12:00',\
J
jiacy-jcy 已提交
36
                                'z','Z']
J
jiacy-jcy 已提交
37 38 39
        for j in timezone_list:
            tdSql.query(f'select to_iso8601(ts,"{j}") from ntb')
            for i in range(self.rowNum):
J
jiacy-jcy 已提交
40 41 42
                tdSql.checkEqual(tdSql.queryResult[i][0],f'2022-01-01T00:00:00.00{i}{j}')
        
        error_param_list = [0,100.5,'a','!']
J
jiacy-jcy 已提交
43
        for i in error_param_list:
J
jiacy-jcy 已提交
44
            tdSql.error(f'select to_iso8601(ts,"{i}") from ntb')
J
jiacy-jcy 已提交
45
        #! bug TD-16372:对于错误的时区,缺少校验
J
update  
jiacy-jcy 已提交
46
        error_timezone_param = ['+13','-13','+1300','-1300','+0001','-0001','-0330','-0530']
J
jiacy-jcy 已提交
47 48
        for i in error_timezone_param:
            tdSql.error(f'select to_iso8601(ts,"{i}") from ntb')
J
jiacy-jcy 已提交
49 50 51 52 53 54 55
        
    def check_base_function(self):
        tdSql.prepare()
        tdLog.printNoPrefix("==========step1:create tables==========")
        tdSql.execute('create table if not exists ntb(ts timestamp, c1 int, c2 float,c3 double,c4 timestamp)')
        tdSql.execute('create table if not exists stb(ts timestamp, c1 int, c2 float,c3 double,c4 timestamp) tags(t0 int)')
        tdSql.execute('create table if not exists stb_1 using stb tags(100)')
J
update  
jiacy-jcy 已提交
56 57 58 59 60 61 62

        tdLog.printNoPrefix("==========step2:insert data==========")
        tdSql.execute('insert into ntb values(now,1,1.55,100.555555,today())("2020-1-1 00:00:00",10,11.11,99.999999,now())(today(),3,3.333,333.333333,now())')
        tdSql.execute('insert into stb_1 values(now,1,1.55,100.555555,today())("2020-1-1 00:00:00",10,11.11,99.999999,now())(today(),3,3.333,333.333333,now())')

        tdSql.query("select to_iso8601(ts) from ntb")
        tdSql.checkRows(3)
J
update  
jiacy-jcy 已提交
63
        tdSql.query("select c1 from ntb where ts = to_iso8601(1577808000000)")
J
update  
jiacy-jcy 已提交
64 65
        tdSql.checkRows(1)
        tdSql.checkData(0,0,10)
J
update  
jiacy-jcy 已提交
66
        tdSql.query("select * from ntb where ts = to_iso8601(1577808000000)")
J
update  
jiacy-jcy 已提交
67 68 69
        tdSql.checkRows(1)
        tdSql.query("select to_iso8601(ts) from ntb where ts=today()")
        tdSql.checkRows(1)
J
jiacy-jcy 已提交
70
        for i in range(0,3):
J
update  
jiacy-jcy 已提交
71
            tdSql.query("select to_iso8601(1) from ntb")
J
jiacy-jcy 已提交
72
            tdSql.checkData(i,0,"1970-01-01T08:00:01+0800")
J
update  
jiacy-jcy 已提交
73
            tdSql.checkRows(3)
J
update  
jiacy-jcy 已提交
74 75
        tdSql.query("select to_iso8601(ts) from ntb")
        tdSql.checkRows(3)
J
update  
jiacy-jcy 已提交
76
        tdSql.query("select to_iso8601(ts) from db.ntb")
J
update  
jiacy-jcy 已提交
77 78 79 80 81 82 83 84 85
        
        tdSql.query("select to_iso8601(today()) from ntb")
        tdSql.checkRows(3)
        tdSql.query("select to_iso8601(now()) from ntb")
        tdSql.checkRows(3)
        
        tdSql.error("select to_iso8601(timezone()) from ntb")
        tdSql.error("select to_iso8601('abc') from ntb")

J
jiacy-jcy 已提交
86 87 88 89 90 91 92
        for i in ['+','-','*','/']:
            tdSql.query(f"select to_iso8601(today()) {i}null from ntb")
            tdSql.checkRows(3)
            tdSql.checkData(0,0,None)
            tdSql.query(f"select to_iso8601(today()) {i}null from db.ntb")
            tdSql.checkRows(3)
            tdSql.checkData(0,0,None)
J
jiacy-jcy 已提交
93 94
        tdSql.query("select to_iso8601(9223372036854775807) from ntb")
        tdSql.checkRows(3)
J
jiacy-jcy 已提交
95
        # bug TD-15207
J
jiacy-jcy 已提交
96 97 98 99 100 101
        # tdSql.query("select to_iso8601(10000000000) from ntb")
        # tdSql.checkData(0,0,None)
        # tdSql.query("select to_iso8601(-1) from ntb")
        # tdSql.checkRows(3)
        # tdSql.query("select to_iso8601(-10000000000) from ntb")
        # tdSql.checkData(0,0,None)
J
jiacy-jcy 已提交
102 103 104 105
        err_param = [1.5,'a','c2']
        for i in err_param:
            tdSql.error(f"select to_iso8601({i}) from ntb")
            tdSql.error(f"select to_iso8601({i}) from db.ntb")
J
jiacy-jcy 已提交
106
            
J
update  
jiacy-jcy 已提交
107
        tdSql.query("select to_iso8601(now) from stb")
J
jiacy-jcy 已提交
108
        tdSql.checkRows(3)
J
update  
jiacy-jcy 已提交
109 110
        tdSql.query("select to_iso8601(now()) from stb")
        tdSql.checkRows(3)
J
jiacy-jcy 已提交
111
        tdSql.query("select to_iso8601(1) from stb")
J
jiacy-jcy 已提交
112
        for i in range(0,3):
J
jiacy-jcy 已提交
113
            tdSql.checkData(i,0,"1970-01-01T08:00:01+0800")
J
update  
jiacy-jcy 已提交
114 115 116 117 118 119 120
            tdSql.checkRows(3)
        tdSql.query("select to_iso8601(ts) from stb")
        tdSql.checkRows(3)
        tdSql.query("select to_iso8601(ts)+1 from stb")
        tdSql.checkRows(3)
        tdSql.query("select to_iso8601(ts)+'a' from stb ")
        tdSql.checkRows(3)
J
jiacy-jcy 已提交
121
        for i in ['+','-','*','/']:
J
jiacy-jcy 已提交
122
            tdSql.query(f"select to_iso8601(today()) {i}null from stb")
J
jiacy-jcy 已提交
123 124
            tdSql.checkRows(3)
            tdSql.checkData(0,0,None)
J
jiacy-jcy 已提交
125
            tdSql.query(f"select to_iso8601(today()) {i}null from db.stb")
J
jiacy-jcy 已提交
126 127 128 129 130 131
            tdSql.checkRows(3)
            tdSql.checkData(0,0,None)
        
    def run(self):  # sourcery skip: extract-duplicate-method
        self.check_base_function()
        self.check_customize_param_ms()
J
jiacy-jcy 已提交
132

J
update  
jiacy-jcy 已提交
133 134 135 136 137 138
    def stop(self):
        tdSql.close()
        tdLog.success(f"{__file__} successfully executed")

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