homework-jianmu/tests/army/query/function/test_function.py

562 lines
16 KiB
Python

###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import sys
import time
import random
import taos
import frame
import frame.etool
from frame.log import *
from frame.cases import *
from frame.sql import *
from frame.caseBase import *
from frame import *
class TDTestCase(TBase):
updatecfgDict = {
"keepColumnName": "1",
"ttlChangeOnWrite": "1",
"querySmaOptimize": "1",
"slowLogScope": "none",
"queryBufferSize": 10240
}
def insertData(self):
tdLog.info(f"insert data.")
# taosBenchmark run
datafile = etool.curFile(__file__, "data/d1001.data")
tdSql.execute("create database ts_4893;")
tdSql.execute(f"use ts_4893;")
tdSql.execute("select database();")
tdSql.execute("CREATE STABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT, "
"`id` INT, `name` VARCHAR(64), `nch1` NCHAR(50), `nch2` NCHAR(50), `var1` VARCHAR(50), "
"`var2` VARCHAR(50)) TAGS (`groupid` TINYINT, `location` VARCHAR(16));")
tdSql.execute("CREATE table d0 using meters tags(1, 'beijing')")
tdSql.execute("insert into d0 file '%s'" % datafile)
def test_normal_query(self, testCase):
# read sql from .sql file and execute
tdLog.info(f"test normal query.")
sqlFile = etool.curFile(__file__, f"in/{testCase}.in")
ansFile = etool.curFile(__file__, f"ans/{testCase}.csv")
with open(sqlFile, 'r') as sql_file:
sql_statement = ''
tdSql.csvLine = 0
for line in sql_file:
if not line.strip() or line.strip().startswith('--'):
continue
sql_statement += line.strip()
if sql_statement.endswith(';'):
# 去掉末尾的分号
sql_statement = sql_statement.rstrip(';')
tdSql.checkDataCsvByLine(sql_statement, ansFile)
# 清空 sql_statement 以便处理下一条语句
sql_statement = ''
err_file_path = etool.curFile(__file__, f"in/{testCase}.err")
if not os.path.isfile(err_file_path):
return None
with open(err_file_path, 'r') as err_file:
err_statement = ''
for line in err_file:
if not line.strip() or line.strip().startswith('--'):
continue
err_statement += line.strip()
if err_statement.endswith(';'):
tdSql.error(err_statement)
err_statement = ''
def test_pi(self):
self.test_normal_query("pi")
def test_round(self):
self.test_normal_query("round")
tdSql.query("select round(10, null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select round(null, 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_exp(self):
self.test_normal_query("exp")
tdSql.query("select exp(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_trunc(self):
self.test_normal_query("trunc")
tdSql.query("select truncate(99.99, null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select truncate(null, 3);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_ln(self):
self.test_normal_query("ln")
tdSql.query("select ln(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_mod(self):
self.test_normal_query("mod")
tdSql.query("select mod(null, 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select mod(10, null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select mod(10, 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_sign(self):
self.test_normal_query("sign")
tdSql.query("select sign(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_degrees(self):
self.test_normal_query("degrees")
tdSql.query("select degrees(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_radians(self):
self.test_normal_query("radians")
tdSql.query("select radians(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_char_length(self):
self.test_normal_query("char_length")
tdSql.query("select char_length(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_char(self):
self.test_normal_query("char")
tdSql.query("select char(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
tdSql.query("select char('ustc');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, chr(0))
result1 = [[chr(0)], [chr(1)], [chr(2)], [chr(3)], [chr(4)], [chr(5)], [chr(6)], [chr(7)], [chr(8)], [chr(9)]]
tdSql.checkDataMem("select char(id) from ts_4893.d0 limit 10;", result1)
tdSql.checkDataMem("select char(id) from ts_4893.meters limit 10;", result1)
result2 = [[chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)], [chr(0)]]
tdSql.checkDataMem("select char(nch1) from ts_4893.d0 limit 10;", result2)
tdSql.checkDataMem("select char(nch1) from ts_4893.meters limit 10;", result2)
tdSql.checkDataMem("select char(var1) from ts_4893.d0 limit 10;", result2)
tdSql.checkDataMem("select char(var1) from ts_4893.meters limit 10;", result2)
def test_ascii(self):
self.test_normal_query("ascii")
tdSql.query("select ascii(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_position(self):
self.test_normal_query("position")
tdSql.query("select position('t' in null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select position(null in 'taos');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_replace(self):
self.test_normal_query("replace")
tdSql.query("select replace(null, 'aa', 'ee');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select replace('aabbccdd', null, 'ee');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_repeat(self):
self.test_normal_query("repeat")
tdSql.query("select repeat('taos', null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select repeat(null, 3);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select repeat('taos', 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
def test_substr(self):
self.test_normal_query("substr")
tdSql.query("select substring('tdengine', null, 3);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring(null, 1, 3);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring('tdengine', 1, null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring('tdengine', 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
tdSql.query("select substring('tdengine', 10);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
tdSql.query("select substring('tdengine', 1, 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
tdSql.query("select substring('tdengine', 1, -1);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
def test_substr_idx(self):
self.test_normal_query("substr_idx")
tdSql.query("select substring_index(null, '.', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring_index('www.taosdata.com', null, 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring_index('www.taosdata.com', '.', null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select substring_index('www.taosdata.com', '.', 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, '')
def test_trim(self):
self.test_normal_query("trim")
tdSql.query("select trim(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_timediff(self):
self.test_normal_query("timediff")
tdSql.query("select timediff(null, '2022-01-01 08:00:01',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('2022-01-01 08:00:00', null,1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('2022/01/31', '2022/01/01',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('20220131', '20220101',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('22/01/31', '22/01/01',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('01/31/22', '01/01/22',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('31-JAN-22', '01-JAN-22',1s);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('22/01/31', '22/01/01');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select timediff('www', 'ttt');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_week(self):
self.test_normal_query("week")
tdSql.query("select week(null, 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('abc');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('1721020591', 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('1721020666229', 0);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('01/01/2020', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('20200101', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('20/01/01', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('11/01/31', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select week('01-JAN-20', 2);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_weekday(self):
self.test_normal_query("weekday")
tdSql.query("select weekday(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('1721020591');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('1721020666229');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('abc');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('01/01/2020');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('20200101');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('20/01/01');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('11/01/32');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekday('01-JAN-20');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_weekofyear(self):
self.test_normal_query("weekofyear")
tdSql.query("select weekofyear(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('1721020591');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('1721020666229');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('abc');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('01/01/2020');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('20200101');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('20/01/01');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('11/01/31');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select weekofyear('01-JAN-20');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_dayofweek(self):
self.test_normal_query("dayofweek")
tdSql.query("select dayofweek(null);")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('1721020591');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('1721020666229');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('abc');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('01/01/2020');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('20200101');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('20/01/01');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('11/01/31');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select dayofweek('01-JAN-20');")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_stddev(self):
self.test_normal_query("stddev")
tdSql.query("select stddev_pop(null) from ts_4893.d0;")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select stddev_pop(null) from ts_4893.meters;")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_varpop(self):
self.test_normal_query("varpop")
tdSql.query("select var_pop(null) from ts_4893.d0;")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
tdSql.query("select var_pop(null) from ts_4893.meters;")
tdSql.checkRows(1)
tdSql.checkData(0, 0, None)
def test_error(self):
tdSql.error(
"select * from (select to_iso8601(ts, timezone()), timezone() from meters order by ts desc) limit 1000;",
expectErrInfo="Not supported timzone format") # TS-5340
# run
def run(self):
tdLog.debug(f"start to excute {__file__}")
# insert data
self.insertData()
# math function
self.test_pi()
self.test_round()
self.test_exp()
self.test_trunc()
self.test_ln()
self.test_mod()
self.test_sign()
self.test_degrees()
self.test_radians()
# char function
self.test_char_length()
self.test_char()
self.test_ascii()
self.test_position()
self.test_replace()
self.test_repeat()
self.test_substr()
self.test_substr_idx()
self.test_trim()
# time function
self.test_timediff()
self.test_week()
self.test_weekday()
self.test_weekofyear()
self.test_dayofweek()
# agg function
self.test_stddev()
self.test_varpop()
# error function
self.test_error()
tdLog.success(f"{__file__} successfully executed")
tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())