error desc in doc

This commit is contained in:
factosea 2025-01-02 15:31:02 +08:00
parent 772c37b4d6
commit cb1ed29872
4 changed files with 527 additions and 163 deletions

View File

@ -458,6 +458,10 @@ This document details the server error codes that may be encountered when using
| 0x80002665 | The _TAGS pseudocolumn can only be used for subtable and supertable queries | Illegal tag column query | Check and correct the SQL statement |
| 0x80002666 | Subquery does not output primary timestamp column | Check and correct the SQL statement | |
| 0x80002667 | Invalid usage of expr: %s | Illegal expression | Check and correct the SQL statement |
| 0x80002687 | Invalid using cols function | Illegal using cols function | Check and correct the SQL statement |
| 0x80002688 | Cols function's first param must be a select function | The first parameter of the cols function should be a selection function | Check and correct the SQL statement |
| 0x80002689 | Invalid using cols function with multiple output columns | Illegal using the cols function for multiple column output | Check and correct the SQL statement |
| 0x80002690 | Invalid using alias for cols function | Illegal cols function alias | Check and correct the SQL statement |
| 0x800026FF | Parser internal error | Internal error in parser | Preserve the scene and logs, report issue on GitHub |
| 0x80002700 | Planner internal error | Internal error in planner | Preserve the scene and logs, report issue on GitHub |
| 0x80002701 | Expect ts equal | JOIN condition validation failed | Preserve the scene and logs, report issue on GitHub |

View File

@ -473,8 +473,12 @@ description: TDengine 服务端的错误码列表和详细说明
| 0x80002663 | Not unique table/alias | 表名(别名)冲突 | 检查并修正SQL语句 |
| 0x80002664 | Join requires valid time series input | 不支持子查询不含主键时间戳列输出的JOIN查询 | 检查并修正SQL语句 |
| 0x80002665 | The _TAGS pseudo column can only be used for subtable and supertable queries | 非法TAG列查询 | 检查并修正SQL语句 |
| 0x80002666 | 子查询不含主键时间戳列输出 | 检查并修正SQL语句 |
| 0x80002666 | 子查询不含主键时间戳列输出 | 检查并修正SQL语句 |
| 0x80002667 | Invalid usage of expr: %s | 非法表达式 | 检查并修正SQL语句 |
| 0x80002687 | Invalid using cols function | cols函数使用错误 | 检查并修正SQL语句 |
| 0x80002688 | Cols function's first param must be a select function | cols函数第一个参数应该为选择函数 | 检查并修正SQL语句 |
| 0x80002689 | Invalid using cols function with multiple output columns | 多列输出的 cols 函数使用错误 | 检查并修正SQL语句 |
| 0x80002690 | Invalid using alias for cols function | cols 函数输出列重命名错误 | 检查并修正SQL语句 |
| 0x800026FF | Parser internal error | 解析器内部错误 | 保留现场和日志github上报issue |
| 0x80002700 | Planner internal error | 计划期内部错误 | 保留现场和日志github上报issue |
| 0x80002701 | Expect ts equal | JOIN条件校验失败 | 保留现场和日志github上报issue |

View File

@ -908,8 +908,8 @@ int32_t taosGetErrSize();
#define TSDB_CODE_PAR_INVALID_VGID_LIST TAOS_DEF_ERROR_CODE(0, 0x2686)
#define TSDB_CODE_PAR_INVALID_COLS_FUNCTION TAOS_DEF_ERROR_CODE(0, 0x2687)
#define TSDB_CODE_PAR_INVALID_COLS_SELECTFUNC TAOS_DEF_ERROR_CODE(0, 0x2688)
#define TSDB_CODE_INVALID_MULITI_COLS_FUNC TAOS_DEF_ERROR_CODE(0, 0x2688)
#define TSDB_CODE_INVALID_COLS_ALIAS TAOS_DEF_ERROR_CODE(0, 0x2689)
#define TSDB_CODE_INVALID_MULITI_COLS_FUNC TAOS_DEF_ERROR_CODE(0, 0x2689)
#define TSDB_CODE_INVALID_COLS_ALIAS TAOS_DEF_ERROR_CODE(0, 0x2690)
#define TSDB_CODE_PAR_INTERNAL_ERROR TAOS_DEF_ERROR_CODE(0, 0x26FF)
//planner

View File

@ -14,6 +14,10 @@ class TDTestCase:
tdSql.init(conn.cursor())
self.dbname = 'test'
def condition_check(self, condition, row, col, expected_value):
if condition:
tdSql.checkData(row, col, expected_value)
def create_test_data(self):
tdSql.execute(f'create database if not exists {self.dbname};')
@ -27,12 +31,13 @@ class TDTestCase:
tdSql.execute(f'create table {self.dbname}.meters (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool) tags (t1 nchar(30))')
tdSql.execute(f'create table {self.dbname}.d0 using {self.dbname}.meters tags("st1")')
tdSql.execute(f'create table {self.dbname}.d1 using {self.dbname}.meters tags("st2")')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929000, 1, 1, "a1", true)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929000, 1, 1, "c2", true)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929001, 2, 2, "bbbbbbbbb1", false)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929002, 3, 3, "a2", true)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929003, 4, 4, "bbbbbbbbb2", false)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929002, 2, 2, "bbbbbbbbb1", false)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929003, 3, 3, "a2", true)')
tdSql.execute(f'insert into {self.dbname}.d0 values(1734574929004, 4, 4, "bbbbbbbbb2", false)')
tdSql.execute(f'insert into {self.dbname}.d1 values(1734574929000, 1, 1, "a1", true)')
tdSql.execute(f'insert into {self.dbname}.d1 values(1734574929000, 1, 1, "c2", true)')
tdSql.execute(f'use {self.dbname}')
tdSql.execute(f'Create table {self.dbname}.normal_table (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool)')
@ -51,142 +56,161 @@ class TDTestCase:
tdSql.query(f'select cols(last(ts+1), ts+2 as t1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts+1), c0+10) from {self.dbname}.meters')
def one_cols_multi_output_with_group_test(self, from_table = 'test.meters', isTmpTable = False):
select_t1 = ["", ", t1", ", t1 as tag1"]
for t1 in select_t1:
tags_count = 0 if t1 == "" else 1
tdLog.info("one_cols_1output_test_with_group")
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname')
tdSql.checkRows(2)
tdSql.checkCols(1 + tags_count)
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname order by tbname')
tdSql.checkCols(1 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(1, 0, 1734574929000)
tdSql.query(f'select cols(last(c1), ts) {t1} from {from_table} group by tbname order by ts')
tdSql.checkCols(1 + tags_count)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(1, 0, 1734574929004)
tdSql.query(f'select cols(last(c1), ts), tbname {t1} from {from_table} group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {from_table} group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(0, 2, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.checkData(1, 2, 'st2')
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {from_table} group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(0, 2, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.checkData(1, 2, 'st2')
tdSql.query(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by t1 order by t1')
tdSql.checkRows(2)
tdSql.checkCols(3 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
self.condition_check(t1!="", 0, 3, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
self.condition_check(t1!="", 1, 3, 'st2')
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0) {t1} from {from_table} group by t1 order by t1')
tdSql.checkRows(2)
tdSql.checkCols(3 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 12)
self.condition_check(t1!="", 0, 3, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
self.condition_check(t1!="", 1, 3, 'st2')
def one_cols_multi_output_test(self):
tdLog.info("one_cols_1output_test")
tdSql.query(f'select cols(last(ts), ts, c0) from {self.dbname}.meters')
tdSql.error(f'select cols(last(ts), ts, c0), count(1), t1 from {from_table} group by t1 order by tbname')
if t1 != "" and isTmpTable:
# Not a GROUP BY expression
tdSql.error(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by tbname order by tbname')
tdSql.error(f'select cols(last(ts), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
tdSql.error(f'select cols(max(c0), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
tdSql.error(f'select cols(last(c1), ts), count(1) {t1} from {from_table} group by tbname')
continue
tdSql.query(f'select cols(last(ts), ts, c0), count(1) {t1} from {from_table} group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(3 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.query(f'select cols(last(ts), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(4 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
tdSql.checkData(0, 3, 'd0')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'd1')
tdSql.query(f'select cols(max(c0), ts, c0), count(1), tbname {t1} from {from_table} group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(4 + tags_count)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
tdSql.checkData(0, 3, 'd0')
self.condition_check(t1!="", 0, 4, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'd1')
self.condition_check(t1!="", 1, 4, 'st2')
tdSql.query(f'select cols(last(c1), ts), count(1) {t1} from {from_table} group by tbname')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
def one_cols_multi_output_test(self, from_table = 'test.meters'):
tdLog.info(f"one_cols_1output_test {from_table}")
tdSql.query(f'select cols(last(ts), ts, c0) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.query(f'select cols(last(ts), ts as time, c0 cc) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), ts as time, c0 cc) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 4)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 'bbbbbbbbb2')
tdSql.checkData(0, 3, False)
tdSql.query(f'select cols(last(ts), c0, t1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), c0, t1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkData(0, 0, 4)
tdSql.checkData(0, 1, 'st1')
tdSql.query(f'select cols(last(c1), ts) from {self.dbname}.meters group by tbname')
tdSql.checkRows(2)
tdSql.query(f'select cols(max(c0), ts) from {from_table}')
tdSql.checkCols(1)
tdSql.query(f'select cols(last(c1), ts) from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkCols(1)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(1, 0, 1734574929000)
tdSql.query(f'select cols(last(c1), ts) from {self.dbname}.meters group by tbname order by ts')
tdSql.checkCols(1)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(1, 0, 1734574929003)
tdSql.query(f'select cols(last(c1), ts), tbname from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(0, 2, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.checkData(1, 2, 'st2')
tdSql.query(f'select cols(last(c1), ts), tbname, t1 from {self.dbname}.meters group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 'd0')
tdSql.checkData(0, 2, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 'd1')
tdSql.checkData(1, 2, 'st2')
tdSql.query(f'select cols(max(c0), ts) from {self.dbname}.meters')
tdSql.checkCols(1)
tdSql.checkData(0, 0, 1734574929003)
tdSql.query(f'select cols(min(c1), ts, c0) from {self.dbname}.meters')
tdSql.checkData(0, 0, 1734574929004)
tdSql.query(f'select cols(min(c1), ts, c0) from {from_table}')
tdSql.checkCols(2)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.query(f'select cols(last(ts), ts, c0), count(1), tbname from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 'd0')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'd1')
tdSql.query(f'select cols(last(ts), ts, c0), count(1), tbname, t1 from {self.dbname}.meters group by tbname order by tbname')
tdSql.checkRows(2)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 'd0')
tdSql.checkData(0, 4, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'd1')
tdSql.checkData(1, 4, 'st2')
tdSql.query(f'select cols(last(ts), ts, c0), count(1), t1 from {self.dbname}.meters group by t1 order by t1')
tdSql.checkRows(2)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'st2')
tdSql.error(f'select cols(last(ts), ts, c0), count(1), t1 from {self.dbname}.meters group by t1 order by tbname')
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0), t1 from {self.dbname}.meters group by t1 order by t1')
tdSql.checkRows(2)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 10)
tdSql.checkData(0, 3, 'st1')
tdSql.checkData(1, 0, 1734574929000)
tdSql.checkData(1, 1, 1)
tdSql.checkData(1, 2, 1)
tdSql.checkData(1, 3, 'st2')
tdSql.query(f'select cols(max(c0), ts, c0), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(max(c0), ts, c0), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.d0')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 2, 5)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.d1')
tdSql.checkRows(1)
tdSql.checkCols(3)
@ -196,51 +220,205 @@ class TDTestCase:
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.normal_table')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 4)
tdSql.query(f'select cols(last(ts), ts, c0), avg(c0) from {self.dbname}.meters')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 2.2)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.meters')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 5)
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0) from {self.dbname}.meters')
tdSql.query(f'select cols(first(ts), ts, c0), count(1) from {self.dbname}.normal_table')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 5)
tdSql.query(f'select cols(min(c0), ts, c0), count(1) from {self.dbname}.normal_table')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 5)
tdSql.query(f'select cols(last(ts), ts, c0), avg(c0) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 11)
tdSql.query(f'select count(1), cols(last(ts), ts, c0), min(c0) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), ts as time, c0 cc), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(c1), ts), count(1) from {self.dbname}.meters group by tbname')
tdSql.checkData(0, 2, 2.1666666666666665)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(last(ts), ts, c0), sum(c0) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 13)
tdSql.query(f'select count(1), cols(last(ts), ts, c0), min(c0) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 6)
tdSql.checkData(0, 1, 1734574929004)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 1)
# there's some error on last_row func when using sub query.
tdSql.query(f'select count(1), cols(last_row(ts), ts, c0), min(c0) from test.meters')
tdSql.checkRows(1)
tdSql.checkCols(4)
tdSql.checkData(0, 0, 6)
tdSql.checkData(0, 1, 1734574929004)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 1)
# there's some error on last_row func when using sub query.
tdSql.query(f'select count(1), cols(last_row(ts), ts, c0), last_row(c1), last_row(c3) from test.meters')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 6)
tdSql.checkData(0, 1, 1734574929004)
tdSql.checkData(0, 2, 4)
tdSql.checkData(0, 3, 4)
tdSql.checkData(0, 4, False)
tdSql.query(f'select cols(last(ts), ts, c0), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(max(c0), ts, c0), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(max(c0), ts), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(min(c1), ts, c0), count(1) from {self.dbname}.meters')
tdSql.query(f'select count(1), cols(max(c0), ts) from {self.dbname}.meters')
tdSql.query(f'select max(c0), cols(max(c0), ts) from {self.dbname}.meters')
tdSql.query(f'select max(c1), cols(max(c0), ts) from {self.dbname}.meters')
tdSql.query(f'select cols(last(ts), ts as time, c0 cc), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(max(c1), ts as time, c0 cc), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(3)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 6)
tdSql.query(f'select cols(last(ts), c0, c1, c2, c3), count(1) from {from_table}')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 4)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 'bbbbbbbbb2')
tdSql.checkData(0, 3, False)
tdSql.checkData(0, 4, 6)
def multi_cols_output_test(self):
tdSql.query(f'select cols(max(c0), ts), count(1) from {from_table}')
tdSql.query(f'select cols(min(c1), ts, c0), count(1) from {from_table}')
tdSql.query(f'select count(1), cols(max(c0), ts) from {from_table}')
tdSql.query(f'select max(c0), cols(max(c0), ts) from {from_table}')
tdSql.query(f'select max(c1), cols(max(c0), ts) from {from_table}')
def multi_cols_output_test(self, from_table = 'test.meters', isTmpTable = False):
tdLog.info("multi_cols_output_test")
tdSql.query(f'select cols(last(c0), ts, c1), cols(first(c0), ts, c1), count(1) from {self.dbname}.meters')
tdSql.query(f'select cols(last(c0), ts as t1, c1 as c11), cols(first(c0), ts as c2, c1 c21), count(1) from {self.dbname}.meters')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 6)
tdSql.query(f'select cols(last(c0),ts lts, c1 lc1), cols(first(c0), ts fts, c1 as fc1), count(1) from test.meters')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 6)
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from {self.dbname}.meters')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, 4)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 6)
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from {self.dbname}.meters where c0 < 4')
tdSql.checkRows(1)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 1, 3)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 5)
tdSql.query(f'select cols(max(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 1)
tdSql.checkData(1, 0, 1734574929003)
tdSql.checkData(1, 1, 3)
tdSql.checkData(1, 2, 1734574929000)
tdSql.checkData(1, 3, 1)
tdSql.checkData(1, 4, 4)
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 1)
tdSql.checkData(1, 0, 1734574929003)
tdSql.checkData(1, 1, 3)
tdSql.checkData(1, 2, 1734574929000)
tdSql.checkData(1, 3, 1)
tdSql.checkData(1, 4, 4)
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(min(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 1)
tdSql.checkData(1, 0, 1734574929003)
tdSql.checkData(1, 1, 3)
tdSql.checkData(1, 2, 1734574929000)
tdSql.checkData(1, 3, 1)
tdSql.checkData(1, 4, 4)
tdSql.query(f'select cols(last_row(c0), ts as t1, c1 as c11), cols(mode(c0), ts as t2, c1 c21), count(1) from test.meters where c0 < 4 group by tbname order by t1')
tdSql.checkRows(2)
tdSql.checkCols(5)
tdSql.checkData(0, 0, 1734574929000)
tdSql.checkData(0, 1, 1)
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 1)
tdSql.checkData(0, 4, 1)
tdSql.checkData(1, 0, 1734574929003)
tdSql.checkData(1, 1, 3)
#tdSql.checkData(1, 2, 1734574929000) # mode(c0) is return a random ts of same c0
tdSql.checkData(1, 3, 2)
tdSql.checkData(1, 4, 4)
#select cols(last_row(c0), ts as t1, c1 as c11), cols(first(c0), ts as t2, c1 c21), first(c0) from test.meters where c0 < 4;
def funcSupperTableTest(self):
tdSql.execute('create database if not exists db;')
@ -250,20 +428,20 @@ class TDTestCase:
tdSql.execute('create table db.st (ts timestamp, c0 int, c1 float, c2 nchar(30), c3 bool) tags (t1 nchar(30))')
tdSql.execute('create table db.st_1 using db.st tags("st1")')
tdSql.execute('create table db.st_2 using db.st tags("st1")')
tdSql.execute('insert into db.st_1 values(1734574929000, 1, 1, "a1", true)')
tdSql.execute('insert into db.st_1 values(1734574929000, 1, 1, "c2", true)')
tdSql.execute('insert into db.st_1 values(1734574929001, 2, 2, "bbbbbbbbb1", false)')
tdSql.execute('insert into db.st_1 values(1734574929002, 3, 3, "a2", true)')
tdSql.execute('insert into db.st_1 values(1734574929003, 4, 4, "bbbbbbbbb2", false)')
tdSql.execute('insert into db.st_1 values(1734574929004, 4, 4, "bbbbbbbbb2", false)')
tdSql.query(f'select cols(last(c0), ts, c1, c2, c3), cols(first(c0), ts, c1, c2, c3) from db.st')
tdSql.checkRows(1)
tdSql.checkData(0, 0, 1734574929003)
tdSql.checkData(0, 0, 1734574929004)
tdSql.checkData(0, 1, '4.0')
tdSql.checkData(0, 2, 'bbbbbbbbb2')
tdSql.checkData(0, 3, False)
tdSql.checkData(0, 4, 1734574929000)
tdSql.checkData(0, 5, '1.0')
tdSql.checkData(0, 6, 'a1')
tdSql.checkData(0, 6, 'c2')
tdSql.checkData(0, 7, True)
#tdSql.execute(f'drop table if exists db.st')
@ -278,6 +456,8 @@ class TDTestCase:
tdSql.execute('insert into db.d1 values(1734574929000, 1, 1.1, "a", true)')
tdSql.execute('insert into db.d1 values(1734574930000, 2, 2.2, "bbbbbbbbb", false)')
groupby = ["", "group by tbname order ts", "group by tbname order t1", "group by tbname order ts"]
tdSql.query(f'select cols(last(c0), ts, c2), cols(first(c0), ts, c2) from db.d1')
tdSql.checkRows(1)
tdSql.checkCols(4)
@ -365,15 +545,167 @@ class TDTestCase:
tdSql.checkData(0, 1, 'a')
tdSql.checkData(0, 2, 1734574929000)
tdSql.checkData(0, 3, 6)
def subquery_test(self):
tdSql.query(f'select count(1), cols(last(c0),c0) from (select * from test.d0)')
tdSql.query(f'select count(1), cols(last(c0),c0) from (select *, tbname from test.meters) group by tbname')
def window_test(self):
tdSql.query(f'select tbname, _wstart,_wend, max(c0), max(c1), cols( max(c0), c1) from test.meters partition \
by tbname count_window(2) order by tbname')
def orderby_test(self, from_table = 'test.meters', isTmpTable = False):
select_t1 = ["", ", t1", ", t1 as tag1"]
for t1 in select_t1:
if t1 != "" and isTmpTable:
# Not a GROUP BY expression
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.error(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.error(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.error(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
continue
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.checkRows(2)
tags_count = 0 if t1 == "" else 1
tdLog.debug(f'tags_count: {tags_count}')
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 5)
tdSql.checkData(0, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 0, 2, 'st1')
tdSql.checkData(1, 0, 1)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st2')
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by 1')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by 2')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 5)
tdSql.checkData(0, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 0, 2, 'st1')
tdSql.checkData(1, 0, 1)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st2')
tdSql.query(f'select count(1), cols(last(c0),c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 5)
tdSql.checkData(0, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 0, 2, 'st1')
tdSql.checkData(1, 0, 1)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st2')
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), last(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'bbbbbbbbb2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 5)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st1')
tdSql.checkData(1, 0, 1)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st2')
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c2) desc')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st1')
tdSql.query(f'select count(1), max(c2) {t1} from {from_table} group by tbname order by cols(last(c0), c0), cols(last(c0), c1)')
tdSql.checkRows(2)
tdSql.checkCols(2 + tags_count)
tdSql.checkData(0, 0, 1)
tdSql.checkData(0, 1, 'c2')
self.condition_check(t1 != "", 0, 2, 'st2')
tdSql.checkData(1, 0, 5)
tdSql.checkData(1, 1, 'c2')
self.condition_check(t1 != "", 1, 2, 'st1')
def parse_test(self):
tdLog.info("parse test")
@ -383,7 +715,6 @@ class TDTestCase:
tdSql.error(f'select last(cols(ts)) from {self.dbname}.meters')
tdSql.error(f'select last(cols(ts, ts)) from {self.dbname}.meters')
tdSql.error(f'select last(cols(ts, ts), ts) from {self.dbname}.meters')
tdSql.error(f'd{self.dbname}.meters')
tdSql.error(f'select cols(last(ts), ts as t1) as t1 from {self.dbname}.meters')
tdSql.error(f'select cols(last(ts), ts, c0) t1 from {self.dbname}.meters')
tdSql.error(f'select cols(last(ts), ts t1) tt from {self.dbname}.meters')
@ -406,7 +737,33 @@ class TDTestCase:
tdSql.error(f'select cols(cols(last(ts), c0), c0) as cc from {self.dbname}.meters')
tdSql.error(f'select cols(last(ts), cols(last(ts), c0), c0) as cc from {self.dbname}.meters')
# Aggregate functions do not support nesting
tdSql.error(f'select count(1), cols(last_row(ts), ts, first(c0)), last_row(c1) from {self.dbname}.meters')
# Not a GROUP BY expression
tdSql.error(f'select count(1), cols(last(c0),c0) from test.meters group by tbname order by c3 desc')
def subquery_test(self):
tdSql.query(f'select count(1), cols(last(c0),c0) from (select * from test.d0)')
tdSql.query(f'select count(1), cols(last(c0),c0) from (select *, tbname from test.meters) group by tbname')
tdLog.info("subquery_test: orderby_test from meters")
self.orderby_test("test.meters", False)
tdLog.info("subquery_test: orderby_test from (select *, tbname from meters)")
self.orderby_test("(select *, tbname from test.meters)", True)
tdLog.info("subquery_test: one_cols_multi_output_with_group_test from meters")
self.one_cols_multi_output_with_group_test("test.meters", False)
tdLog.info("subquery_test: one_cols_multi_output_with_group_test from (select *, tbname from meters)")
self.one_cols_multi_output_with_group_test("(select *, tbname from test.meters)", True)
self.one_cols_multi_output_test("test.meters")
self.one_cols_multi_output_test("(select *, tbname from test.meters)")
def window_test(self):
tdSql.query(f'select tbname, _wstart,_wend, max(c0), max(c1), cols( max(c0), c1) from test.meters partition \
by tbname count_window(2) order by tbname')
def run(self):
self.funcNestTest()
@ -414,10 +771,9 @@ class TDTestCase:
self.create_test_data()
self.parse_test()
self.one_cols_1output_test()
self.one_cols_multi_output_test()
self.multi_cols_output_test()
self.subquery_test()
self.window_test()
def stop(self):
tdSql.close()