Revert "Test/3.0/td 27403"

This commit is contained in:
Alex Duan 2023-12-11 14:13:25 +08:00 committed by GitHub
parent 037d2ff5d5
commit 1b1d8200d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 124 deletions

View File

@ -1,4 +1,3 @@
import datetime
import sys
from util.log import *
from util.cases import *
@ -12,138 +11,57 @@ class TDTestCase:
tdLog.debug("start to execute %s" % __file__)
tdSql.init(conn.cursor(), True)
#def prepare_data(self):
def run(self):
"""
timestamp输入插入规则
对于插入的字段类型为timestamp类型的字段只允许这么几种情况
timestamp
timestamp +/- interval
interval + timestamp
timestamp可以是字符串譬如"2023-12-05 00:00:00.000", 也可以是int型 譬如1701619200000
interval支持b, u, a, s, m, h, d, w 不支持n, y,譬如1h, 2d
仅支持2元表达式譬如timestamp + 2h 不支持2元以上表达譬如timestamp + 2h + 1d
"""
tdSql.execute("create database test_insert_timestamp PRECISION 'ns';")
tdSql.execute("create database test_insert_timestamp;")
tdSql.execute("use test_insert_timestamp;")
tdSql.execute("create stable st(ts timestamp, c1 int) tags(id int);")
tdSql.execute("create table test_t using st tags(1);")
expectErrInfo = "syntax error"
# 异常场景timestamp + timestamp
tdSql.error("insert into test_t values(now + today(), 1 );", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(now - today(), 1 );", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(today() + now(), 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(today() - now(), 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values('2023-11-28 00:00:00.000' + '2023-11-28 00:00:00.000', 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values('2023-11-28 00:00:00.000' + 1701111600000, 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(1701111500000 + 1701111600000, 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(now + today(), 1 ); ")
tdSql.error("insert into test_t values(now - today(), 1 ); ")
tdSql.error("insert into test_t values(today() + now(), 1 ); ")
tdSql.error("insert into test_t values(today() - now(), 1 ); ")
tdSql.error("insert into test_t values(2h - now(), 1 ); ")
tdSql.error("insert into test_t values(2h - today(), 1 ); ")
tdSql.error("insert into test_t values(2h - 1h, 1 ); ")
tdSql.error("insert into test_t values(2h + 1h, 1 ); ")
tdSql.error("insert into test_t values('2023-11-28 00:00:00.000' + '2023-11-28 00:00:00.000', 1 ); ")
tdSql.error("insert into test_t values('2023-11-28 00:00:00.000' + 1701111600000, 1 ); ")
tdSql.error("insert into test_t values(1701111500000 + 1701111600000, 1 ); ")
tdSql.error("insert into test_insert_timestamp.test_t values(1701111600000 + 1h + 1s, 4); ")
# 异常场景timestamp + interval + interval
tdSql.error("insert into test_t values(today() + 1d + 1s, 1);", expectErrInfo=expectErrInfo)
tdSql.execute("insert into test_insert_timestamp.test_t values(1701111600000 + 1h, 4); ")
tdSql.execute("insert into test_insert_timestamp.test_t values(2h + 1701111600000, 5); ")
tdSql.execute("insert into test_insert_timestamp.test_t values('2023-11-28 00:00:00.000' + 1h, 1); ")
tdSql.execute("insert into test_insert_timestamp.test_t values(3h + '2023-11-28 00:00:00.000', 3); ")
tdSql.execute("insert into test_insert_timestamp.test_t values(1701111600000 - 1h, 2); ")
tdSql.execute("insert into test_insert_timestamp.test_t values(1701122400000, 6); ")
tdSql.execute("insert into test_insert_timestamp.test_t values('2023-11-28 07:00:00.000', 7); ")
# 异常场景interval - timestamp
tdSql.error("insert into test_t values(2h - now(), 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(2h - today(), 1 ); ", expectErrInfo=expectErrInfo)
# 异常场景interval + interval
tdSql.error("insert into test_t values(2h - 1h, 1 ); ", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(2h + 1h, 1 ); ", expectErrInfo=expectErrInfo)
# 异常场景非法interval类型n
tdSql.error("insert into test_t values(today() + 2n, 7); ", expectErrInfo=expectErrInfo)
# 异常场景非法interval类型y
tdSql.error("insert into test_t values(today() - 2y, 8);", expectErrInfo=expectErrInfo)
# 异常场景:数据类型不对
tdSql.error("insert into test_t values('a1701619200000', 8);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values('ss2023-12-05 00:00:00.000' + '1701619200000', 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(123456, 1);", expectErrInfo="Timestamp data out of range")
tdSql.error("insert into test_t values(123.456, 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(True, 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(None, 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(null, 1);", expectErrInfo=expectErrInfo)
# 异常场景:格式不对
tdSql.error("insert into test_t values('2023-122-05 00:00:00.000' + '1701619200000', 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values('2023-12--05 00:00:00.000' + '1701619200000', 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values('12/12/2023' + 10a, 1);", expectErrInfo=expectErrInfo)
tdSql.error("insert into test_t values(1701619200000111, 1);", expectErrInfo="Timestamp data out of range")
# 正常场景timestamp + interval
tdSql.execute("insert into test_t values(today() + 2b, 1);")
tdSql.execute("insert into test_t values(1701619200000000000 + 2u, 2);")
tdSql.execute("insert into test_t values(today + 2a, 3);")
tdSql.execute("insert into test_t values('2023-12-05 23:59:59.999' + 2a, 4);")
tdSql.execute("insert into test_t values(1701921599000000000 + 3a, 5);")
# 正常场景timestamp - interval
tdSql.execute("insert into test_t values(today() - 2s, 6);")
tdSql.execute("insert into test_t values(now() - 2m, 7);")
tdSql.execute("insert into test_t values(today - 2h, 8);")
tdSql.execute("insert into test_t values('2023-12-05 00:00:00.000000000' - 2a, 9);")
tdSql.execute("insert into test_t values(1701669000000000000 - 2a, 10);")
# 正常场景interval + timestamp
tdSql.execute("insert into test_t values(2d + now, 11);")
tdSql.execute("insert into test_t values(2w + today, 12);")
# 正常场景timestamp
tdSql.execute("insert into test_t values('2023-12-05 00:00:00.000', 13);")
tdSql.execute("insert into test_t values(1701629100000000000, 14);")
tdSql.execute("insert into test_t values(now() + 2s, 15);")
tdSql.execute("insert into test_t values('2023-12-05 00:00:59.999999999+07:00' + 10a, 16);")
tdSql.execute("insert into test_t values('2023-12-05T00:00:59.110+07:00' + 10a, 17);")
tdSql.execute("insert into test_t values('2023-12-05' + 10a, 18);")
tdSql.execute("insert into test_t values('2023-11-15', -15);")
tdSql.execute("insert into test_t values(1701619200000000000 - 2a, -10);")
tdSql.execute("insert into test_t values(1701619200000000000, -5);")
tdSql.execute("insert into test_t values('2023-12-05 12:12:12' + 10a, 19);")
# 验证数据
tdSql.query(f'select ts,c1 from test_t order by c1;')
tdSql.checkRows(22)
tdSql.checkEqual(tdSql.queryResult[0][0], 1699977600000000000) # c1=-15
tdSql.checkEqual(tdSql.queryResult[1][0], 1701619199998000000) # c1=-10
tdSql.checkEqual(tdSql.queryResult[2][0], 1701619200000000000) # c1=-5
tdSql.checkEqual(tdSql.queryResult[3][0], self.__get_today_ts() + 2) # c1=1
tdSql.checkEqual(tdSql.queryResult[4][0], 1701619200000002000) # c1=2
tdSql.checkEqual(tdSql.queryResult[5][0], self.__get_today_ts() + 2000000) # c1=3
tdSql.checkEqual(tdSql.queryResult[6][0], 1701792000001000000) # c1=4
tdSql.checkEqual(tdSql.queryResult[7][0], 1701921599003000000) # c1=5
tdSql.checkEqual(tdSql.queryResult[8][0], self.__get_today_ts() - 2000000000) # c1=6
tdSql.checkEqual(self.__convert_ts_to_date(tdSql.queryResult[9][0]), str(datetime.date.today())) # c1=7
tdSql.checkEqual(tdSql.queryResult[10][0], self.__get_today_ts() - 7200000000000) # c1=8
tdSql.checkEqual(tdSql.queryResult[11][0], 1701705599998000000) # c1=9
tdSql.checkEqual(tdSql.queryResult[12][0], 1701668999998000000) # c1=10
tdSql.checkEqual(self.__convert_ts_to_date(tdSql.queryResult[13][0]), str(datetime.date.today() + datetime.timedelta(days=2))) # c1=11
tdSql.checkEqual(self.__convert_ts_to_date(tdSql.queryResult[14][0]), str(datetime.date.today() + datetime.timedelta(days=14))) # c1=12
tdSql.checkEqual(tdSql.queryResult[15][0], 1701705600000000000) # c1=13
tdSql.checkEqual(tdSql.queryResult[16][0], 1701629100000000000) # c1=14
tdSql.checkEqual(self.__convert_ts_to_date(tdSql.queryResult[17][0]), str(datetime.date.today())) # c1=15
tdSql.checkEqual(tdSql.queryResult[18][0], 1701709260009999999) # c1=16
tdSql.checkEqual(tdSql.queryResult[19][0], 1701709259120000000) # c1=17
tdSql.checkEqual(tdSql.queryResult[20][0], 1701705600010000000) # c1=18
tdSql.checkEqual(tdSql.queryResult[21][0], 1701749532010000000) # c1=19
tdSql.query(f'select ts, c1 from test_t order by ts;')
tdSql.checkRows(7)
tdSql.checkEqual(tdSql.queryResult[0][0], datetime.datetime(2023, 11, 28, 1, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[0][1], 1)
tdSql.checkEqual(tdSql.queryResult[1][0], datetime.datetime(2023, 11, 28, 2, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[1][1], 2)
tdSql.checkEqual(tdSql.queryResult[2][0], datetime.datetime(2023, 11, 28, 3, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[2][1], 3)
tdSql.checkEqual(tdSql.queryResult[3][0], datetime.datetime(2023, 11, 28, 4, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[3][1], 4)
tdSql.checkEqual(tdSql.queryResult[4][0], datetime.datetime(2023, 11, 28, 5, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[4][1], 5)
tdSql.checkEqual(tdSql.queryResult[5][0], datetime.datetime(2023, 11, 28, 6, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[5][1], 6)
tdSql.checkEqual(tdSql.queryResult[6][0], datetime.datetime(2023, 11, 28, 7, 0, 0) )
tdSql.checkEqual(tdSql.queryResult[6][1], 7)
tdSql.execute("drop table if exists test_t ;")
tdSql.execute("drop stable if exists st;")
tdSql.execute("drop database if exists test_insert_timestamp;")
def __convert_ts_to_date(self, ts: int) -> str:
# 创建datetime对象并进行转换
dt_object = datetime.datetime.fromtimestamp(ts / 1e9)
# 格式化日期字符串
formatted_date = dt_object.strftime('%Y-%m-%d')
# print("转换后的日期为:", formatted_date)
return formatted_date
def __get_today_ts(self) -> int:
return int(time.mktime(time.strptime(str(datetime.date.today()), "%Y-%m-%d"))) * 1000000000
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)