From 665caf144685587caeed1a1c463993faf31cd28f Mon Sep 17 00:00:00 2001 From: tomchon Date: Thu, 7 Jul 2022 18:16:21 +0800 Subject: [PATCH] test:add teatcase of tsbs quering --- .../1-insert/test_stmt_insert_query_ex.py | 262 ------------------ tests/system-test/2-query/tsbsQuery.py | 74 +++++ 2 files changed, 74 insertions(+), 262 deletions(-) delete mode 100644 tests/system-test/1-insert/test_stmt_insert_query_ex.py create mode 100644 tests/system-test/2-query/tsbsQuery.py diff --git a/tests/system-test/1-insert/test_stmt_insert_query_ex.py b/tests/system-test/1-insert/test_stmt_insert_query_ex.py deleted file mode 100644 index 2a64c09ff4..0000000000 --- a/tests/system-test/1-insert/test_stmt_insert_query_ex.py +++ /dev/null @@ -1,262 +0,0 @@ -################################################################### -# 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 os -import threading as thd -import multiprocessing as mp -from numpy.lib.function_base import insert -import taos -from taos import * -from util.log import * -from util.cases import * -from util.sql import * -import numpy as np -import datetime as dt -from datetime import datetime -from ctypes import * -import time -# constant define -WAITS = 5 # wait seconds - -class TDTestCase: - # - # --------------- main frame ------------------- - def caseDescription(self): - ''' - limit and offset keyword function test cases; - case1: limit offset base function test - case2: offset return valid - ''' - return - - def getBuildPath(self): - selfPath = os.path.dirname(os.path.realpath(__file__)) - - if ("community" in selfPath): - projPath = selfPath[:selfPath.find("community")] - else: - projPath = selfPath[:selfPath.find("tests")] - - for root, dirs, files in os.walk(projPath): - if ("taosd" in files or "taosd.exe" in files): - rootRealPath = os.path.dirname(os.path.realpath(root)) - if ("packaging" not in rootRealPath): - buildPath = root[:len(root)-len("/build/bin")] - break - return buildPath - - # init - def init(self, conn, logSql): - tdLog.debug("start to execute %s" % __file__) - tdSql.init(conn.cursor()) - # tdSql.prepare() - # self.create_tables(); - self.ts = 1500000000000 - - # stop - def stop(self): - tdSql.close() - tdLog.success("%s successfully executed" % __file__) - - - # --------------- case ------------------- - - - def newcon(self,host,cfg): - user = "root" - password = "taosdata" - port =6030 - con=taos.connect(host=host, user=user, password=password, config=cfg ,port=port) - print(con) - return con - - def test_stmt_set_tbname_tag(self,conn): - dbname = "stmt_tag" - - try: - conn.execute("drop database if exists %s" % dbname) - conn.execute("create database if not exists %s PRECISION 'us' " % dbname) - conn.select_db(dbname) - conn.execute("create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,\ - bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned, \ - ff float, dd double, bb binary(100), nn nchar(100), tt timestamp , vc varchar(100)) tags (t1 timestamp, t2 bool,\ - t3 tinyint, t4 tinyint, t5 smallint, t6 int, t7 bigint, t8 tinyint unsigned, t9 smallint unsigned, \ - t10 int unsigned, t11 bigint unsigned, t12 float, t13 double, t14 binary(100), t15 nchar(100), t16 timestamp)") - - stmt = conn.statement("insert into ? using log tags (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) \ - values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)") - tags = new_bind_params(16) - tags[0].timestamp(1626861392589123, PrecisionEnum.Microseconds) - tags[1].bool(True) - tags[2].bool(False) - tags[3].tinyint(2) - tags[4].smallint(3) - tags[5].int(4) - tags[6].bigint(5) - tags[7].tinyint_unsigned(6) - tags[8].smallint_unsigned(7) - tags[9].int_unsigned(8) - tags[10].bigint_unsigned(9) - tags[11].float(10.1) - tags[12].double(10.11) - tags[13].binary("hello") - tags[14].nchar("stmt") - tags[15].timestamp(1626861392589, PrecisionEnum.Milliseconds) - stmt.set_tbname_tags("tb1", tags) - params = new_multi_binds(17) - params[0].timestamp((1626861392589111, 1626861392590111, 1626861392591111)) - params[1].bool((True, None, False)) - params[2].tinyint([-128, -128, None]) # -128 is tinyint null - params[3].tinyint([0, 127, None]) - params[4].smallint([3, None, 2]) - params[5].int([3, 4, None]) - params[6].bigint([3, 4, None]) - params[7].tinyint_unsigned([3, 4, None]) - params[8].smallint_unsigned([3, 4, None]) - params[9].int_unsigned([3, 4, None]) - params[10].bigint_unsigned([3, 4, 5]) - params[11].float([3, None, 1]) - params[12].double([3, None, 1.2]) - params[13].binary(["abc", "dddafadfadfadfadfa", None]) - params[14].nchar(["涛思数据", None, "a long string with 中文字符"]) - params[15].timestamp([None, None, 1626861392591]) - params[16].binary(["涛思数据16", None, "a long string with 中文-字符"]) - - stmt.bind_param_batch(params) - stmt.execute() - - assert stmt.affected_rows == 3 - - #query all - querystmt1=conn.statement("select * from log where bu < ?") - queryparam1=new_bind_params(1) - print(type(queryparam1)) - queryparam1[0].int(10) - querystmt1.bind_param(queryparam1) - querystmt1.execute() - result1=querystmt1.use_result() - rows1=result1.fetch_all() - print(rows1[0]) - print(rows1[1]) - print(rows1[2]) - assert str(rows1[0][0]) == "2021-07-21 17:56:32.589111" - assert rows1[0][10] == 3 - assert rows1[1][10] == 4 - - #query: Numeric Functions - querystmt2=conn.statement("select abs(?) from log where bu < ?") - queryparam2=new_bind_params(2) - print(type(queryparam2)) - queryparam2[0].int(5) - queryparam2[1].int(5) - querystmt2.bind_param(queryparam2) - querystmt2.execute() - result2=querystmt2.use_result() - rows2=result2.fetch_all() - print("2",rows2) - assert rows2[0][0] == 5 - assert rows2[1][0] == 5 - - - #query: Numeric Functions and escapes - - querystmt3=conn.statement("select abs(?) from log where nn= 'a? long string with 中文字符' ") - queryparam3=new_bind_params(1) - print(type(queryparam3)) - queryparam3[0].int(5) - querystmt3.bind_param(queryparam3) - querystmt3.execute() - result3=querystmt3.use_result() - rows3=result3.fetch_all() - print("3",rows3) - assert rows3 == [] - - #query: string Functions - - querystmt9=conn.statement("select CHAR_LENGTH(?) from log ") - queryparam9=new_bind_params(1) - print(type(queryparam9)) - queryparam9[0].binary('中文字符') - querystmt9.bind_param(queryparam9) - querystmt9.execute() - result9=querystmt9.use_result() - rows9=result9.fetch_all() - print("9",rows9) - assert rows9[0][0] == 12, 'fourth case is failed' - assert rows9[1][0] == 12, 'fourth case is failed' - - #query: conversion Functions - - querystmt4=conn.statement("select cast( ? as bigint) from log ") - queryparam4=new_bind_params(1) - print(type(queryparam4)) - queryparam4[0].binary('1232a') - querystmt4.bind_param(queryparam4) - querystmt4.execute() - result4=querystmt4.use_result() - rows4=result4.fetch_all() - print("5",rows4) - assert rows4[0][0] == 1232 - assert rows4[1][0] == 1232 - - querystmt4=conn.statement("select cast( ? as binary(10)) from log ") - queryparam4=new_bind_params(1) - print(type(queryparam4)) - queryparam4[0].int(123) - querystmt4.bind_param(queryparam4) - querystmt4.execute() - result4=querystmt4.use_result() - rows4=result4.fetch_all() - print("6",rows4) - assert rows4[0][0] == '123' - assert rows4[1][0] == '123' - - # #query: datatime Functions - - # querystmt4=conn.statement(" select timediff('2021-07-21 17:56:32.590111',?,1s) from log ") - # queryparam4=new_bind_params(1) - # print(type(queryparam4)) - # queryparam4[0].timestamp(1626861392591111) - # querystmt4.bind_param(queryparam4) - # querystmt4.execute() - # result4=querystmt4.use_result() - # rows4=result4.fetch_all() - # print("7",rows4) - # assert rows4[0][0] == 1, 'seventh case is failed' - # assert rows4[1][0] == 1, 'seventh case is failed' - - - - # conn.execute("drop database if exists %s" % dbname) - conn.close() - - except Exception as err: - # conn.execute("drop database if exists %s" % dbname) - conn.close() - raise err - - def run(self): - buildPath = self.getBuildPath() - config = buildPath+ "../sim/dnode1/cfg/" - host="localhost" - connectstmt=self.newcon(host,config) - self.test_stmt_set_tbname_tag(connectstmt) - - return - - -# add case with filename -# -tdCases.addWindows(__file__, TDTestCase()) -tdCases.addLinux(__file__, TDTestCase()) diff --git a/tests/system-test/2-query/tsbsQuery.py b/tests/system-test/2-query/tsbsQuery.py new file mode 100644 index 0000000000..d24e5ea283 --- /dev/null +++ b/tests/system-test/2-query/tsbsQuery.py @@ -0,0 +1,74 @@ +import taos +import sys +import datetime +import inspect + +from util.log import * +from util.sql import * +from util.cases import * + +class TDTestCase: + + def init(self, conn, logSql): + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor(), True) + + def prepareData(self): + database="db_tsbs" + ts=1451606400000 + tdSql.execute(f"create database {database};") + tdSql.execute(f"use {database} ") + tdSql.execute(''' + create table readings (ts timestamp,latitude double,longitude double,elevation double,velocity double,heading double,grade double,fuel_consumption double,load_capacity double,fuel_capacity double,nominal_fuel_consumption double) tags (name binary(30),fleet binary(30),driver binary(30),model binary(30),device_version binary(30)); + ''') + tdSql.execute(''' + create table diagnostics (ts timestamp,fuel_state double,current_load double,status bigint,load_capacity double,fuel_capacity double,nominal_fuel_consumption double) tags (name binary(30),fleet binary(30),driver binary(30),model binary(30),device_version binary(30)) ; + ''') + + for i in range(10): + tdSql.execute(f"create table rct{i} using readings (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')") + tdSql.execute(f"create table dct{i} using diagnostics (name,fleet,driver,model,device_version) tags ('truck_{i}','South{i}','Trish{i}','H-{i}','v2.3')") + for j in range(10): + for i in range(10): + tdSql.execute( + f"insert into rct{j} values ( {ts+i*10000}, {80+i}, {90+i}, {85+i}, {30+i*10}, {1.2*i}, {221+i*2}, {20+i*0.2}, {1500+i*20}, {150+i*2},{5+i} )" + ) + tdSql.execute( + f"insert into dct{j} values ( {ts+i*10000}, {1+i*0.1},{1400+i*15}, {1+i},{1500+i*20}, {150+i*2},{5+i} )" + ) + + # def check_avg(self ,origin_query , check_query): + # avg_result = tdSql.getResult(origin_query) + # origin_result = tdSql.getResult(check_query) + + # check_status = True + # for row_index , row in enumerate(avg_result): + # for col_index , elem in enumerate(row): + # if avg_result[row_index][col_index] != origin_result[row_index][col_index]: + # check_status = False + # if not check_status: + # tdLog.notice("avg function value has not as expected , sql is \"%s\" "%origin_query ) + # sys.exit(1) + # else: + # tdLog.info("avg value check pass , it work as expected ,sql is \"%s\" "%check_query ) + + + def tsbsIotQuery(self): + tdSql.execute("use db_tsbs") + tdSql.query(" SELECT avg(velocity) as mean_velocity ,name,driver,fleet FROM readings WHERE ts > 1451606400000 AND ts <= 1451606460000 partition BY name,driver,fleet interval(10m); ") + tdSql.checkRows(1) + + + + def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring + tdLog.printNoPrefix("==========step1:create database and table,insert data ==============") + self.tsbsIotQuery() + self.tsbsIotQuery() + + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) -- GitLab