From 911a573d5b6181cad381248de7aa39a01e071442 Mon Sep 17 00:00:00 2001 From: wu-champion Date: Tue, 16 Mar 2021 14:13:56 +0800 Subject: [PATCH 01/31] [TD-3274]: add test case for after 1970 years --- tests/pytest/query/query1970YearsAf.py | 230 +++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 tests/pytest/query/query1970YearsAf.py diff --git a/tests/pytest/query/query1970YearsAf.py b/tests/pytest/query/query1970YearsAf.py new file mode 100644 index 0000000000..9794973325 --- /dev/null +++ b/tests/pytest/query/query1970YearsAf.py @@ -0,0 +1,230 @@ +################################################################### +# 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 taos +import sys +import os +import json +import subprocess +import datetime + + +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()) + + def getCfgDir(self, path): + binPath = os.path.dirname(os.path.realpath(__file__)) + binPath = binPath + "/../../../debug/" + tdLog.debug("binPath %s" % (binPath)) + binPath = os.path.realpath(binPath) + tdLog.debug("binPath real path %s" % (binPath)) + if path == "": + self.path = os.path.abspath(binPath + "../../") + else: + self.path = os.path.realpath(path) + + self.cfgDir = "%s/sim/psim/cfg" % (self.path) + return self.cfgDir + + def creatcfg(self): + dbinfo = { + "name": "db", + "drop": "yes", + "replica": 1, + "days": 10, + "cache": 16, + "blocks": 8, + "precision": "ms", + "keep": 36500, + "minRows": 100, + "maxRows": 4096, + "comp": 2, + "walLevel": 1, + "cachelast": 0, + "quorum": 1, + "fsync": 3000, + "update": 0 + } + + # 设置创建的超级表格式 + stable1 = { + "name": "stb2", + "child_table_exists": "no", + "childtable_count": 10, + "childtable_prefix": "t", + "auto_create_table": "no", + "data_source": "rand", + "insert_mode": "taosc", + "insert_rows": 5000, + "multi_thread_write_one_tbl": "no", + "number_of_tbl_in_one_sql": 0, + "rows_per_tbl": 1000, + "max_sql_len": 65480, + "disorder_ratio": 0, + "disorder_range": 1000, + "timestamp_step": 19000000, + "start_timestamp": "1969-01-01 00:00:00.000", + "sample_format": "csv", + "sample_file": "./sample.csv", + "tags_file": "", + "columns": [ + {"type": "INT"}, + {"type": "DOUBLE", "count": 10}, + {"type": "BINARY", "len": 16, "count": 3}, + {"type": "BINARY", "len": 32, "count": 6} + ], + "tags": [ + {"type": "TINYINT", "count": 2}, + {"type": "BINARY", "len": 16, "count": 5} + ] + } + + # 需要创建多个超级表时,只需创建不同的超级表格式并添加至super_tables + super_tables = [stable1] + database = { + "dbinfo": dbinfo, + "super_tables": super_tables + } + + cfgdir = self.getCfgDir("") + create_table = { + "filetype": "insert", + "cfgdir": cfgdir, + "host": "127.0.0.1", + "port": 6030, + "user": "root", + "password": "taosdata", + "thread_count": 4, + "thread_count_create_tbl": 4, + "result_file": "/tmp/insert_res.txt", + "confirm_parameter_prompt": "no", + "insert_interval": 0, + "num_of_records_per_req": 100, + "databases": [database] + } + return create_table + + def inserttable(self): + create_table = self.creatcfg() + date = datetime.datetime.now().strftime("%Y%m%d%H%M") + file_create_table = f"/tmp/insert_{date}.json" + + with open(file_create_table, 'w') as f: + json.dump(create_table, f) + + create_table_cmd = f"taosdemo -f {file_create_table}" + _ = subprocess.check_output(create_table_cmd, shell=True).decode("utf-8") + + + def run(self): + s = 'reset query cache' + tdSql.execute(s) + s = 'create database if not exists db' + tdSql.execute(s) + s = 'use db' + tdSql.execute(s) + + tdLog.info("==========step1:create table stable and child table,then insert data automatically") + self.inserttable() + # tdSql.execute( + # '''create table if not exists supt + # (ts timestamp, c1 int, c2 float, c3 bigint, c4 double, c5 smallint, c6 tinyint) + # tags(location binary(64), type int, isused bool , family nchar(64))''' + # ) + # tdSql.execute("create table t1 using supt tags('beijing', 1, 1, '自行车')") + # tdSql.execute("create table t2 using supt tags('shanghai', 2, 0, '拖拉机')") + # tdSql.execute( + # f"insert into t1 values (-31564800000, 6, 5, 4, 3, 2, 1)" + # ) + + + + tdLog.info("==========step2:query join") + + # stable query + tdSql.query( + "select * from stb2 where stb2.ts < '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(16600) + + tdSql.query( + "select * from stb2 where stb2.ts >= '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(33400) + + tdSql.query( + "select * from stb2 where stb2.ts > '1969-12-01 00:00:00.000' and stb2.ts <'1970-01-31 00:00:00.000' " + ) + tdSql.checkRows(2780) + + # child-table query + tdSql.query( + "select * from t0 where t0.ts < '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(1660) + + tdSql.query( + "select * from t1 where t1.ts >= '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(3340) + + tdSql.query( + "select * from t9 where t9.ts > '1969-12-01 00:00:00.000' and t9.ts <'1970-01-31 00:00:00.000' " + ) + tdSql.checkRows(278) + + tdSql.query( + "select * from t0,t1 where t0.ts=t1.ts and t1.ts >= '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(3340) + + tdSql.query( + "select diff(col1) from t0 where t0.ts >= '1970-01-01 00:00:00.000' " + ) + tdSql.checkRows(3339) + + tdSql.query( + "select t0,col1 from stb2 where stb2.ts < '1970-01-01 00:00:00.000' order by ts" + ) + tdSql.checkRows(16600) + + # query with timestamp in 'where ...' + tdSql.query( + "select * from stb2 where stb2.ts > -28800000 " + ) + tdSql.checkRows(33400) + + tdSql.query( + "select * from stb2 where stb2.ts > -28800000 and stb2.ts < '1970-01-01 08:00:00.000' " + ) + tdSql.checkRows(20) + + tdSql.query( + "select * from stb2 where stb2.ts < -28800000 and stb2.ts > '1969-12-31 16:00:00.000' " + ) + + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) \ No newline at end of file From d73ae7d7f0c14626a6f322884431029cf23651bb Mon Sep 17 00:00:00 2001 From: wu champion Date: Mon, 22 Mar 2021 17:17:31 +0800 Subject: [PATCH 02/31] add case for TD-3375 --- tests/pytest/query/bug3375.py | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/pytest/query/bug3375.py diff --git a/tests/pytest/query/bug3375.py b/tests/pytest/query/bug3375.py new file mode 100644 index 0000000000..25c3467c05 --- /dev/null +++ b/tests/pytest/query/bug3375.py @@ -0,0 +1,61 @@ +################################################################### +# 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 +from util.log import * +from util.cases import * +from util.sql import * +from util.dnodes import * + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), logSql) + + def run(self): + tdSql.prepare() + tdSql.execute("drop database if exists db") + tdSql.execute("create database if not exists db keep 36500") + tdSql.execute("use db") + + tdLog.printNoPrefix("==========step1:create table && insert data") + tdSql.execute( + "create table stb1 (ts timestamp, c11 int) TAGS(t11 int, t12 int )" + ) + tdSql.execute( + "create table stb2 (ts timestamp, c21 int) TAGS(t21 int, t22 int )" + ) + tdSql.execute("create table t10 using stb1 tags(1, 10)") + tdSql.execute("create table t20 using stb2 tags(1, 12)") + tdSql.execute("insert into t10 values (1600000000000, 1)") + tdSql.execute("insert into t10 values (1610000000000, 2)") + tdSql.execute("insert into t20 values (1600000000000, 3)") + tdSql.execute("insert into t20 values (1610000000000, 4)") + + tdLog.printNoPrefix("==========step2:query crash test") + tdSql.query("select stb1.c11, stb1.t11, stb1.t12 from stb2,stb1 where stb2.t21 = stb1.t11 and stb1.ts = stb2.ts") + tdSql.checkRows(2) + tdSql.query("select stb2.c21, stb2.t21, stb2.t21 from stb1, stb2 where stb2.t21 = stb1.t11 and stb1.ts = stb2.ts") + tdSql.checkRows(2) + tdSql.query("select top(stb2.c21,2) from stb1, stb2 where stb2.t21 = stb1.t11 and stb1.ts = stb2.ts") + tdSql.checkRows(2) + tdSql.query("select last(stb2.c21) from stb1, stb2 where stb2.t21 = stb1.t11 and stb1.ts = stb2.ts") + tdSql.checkRows(1) + + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) \ No newline at end of file From a162b6161ea53d64753fff22e3ace3c3584e1d73 Mon Sep 17 00:00:00 2001 From: wu champion Date: Mon, 22 Mar 2021 18:46:54 +0800 Subject: [PATCH 03/31] fix fulltest.sh:add query/bug3375.py --- tests/pytest/fulltest.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/pytest/fulltest.sh b/tests/pytest/fulltest.sh index 1dbc26eaa7..4f6dbe90d7 100755 --- a/tests/pytest/fulltest.sh +++ b/tests/pytest/fulltest.sh @@ -198,6 +198,7 @@ python3 ./test.py -f query/queryWithTaosdKilled.py python3 ./test.py -f query/floatCompare.py python3 ./test.py -f query/query1970YearsAf.py python3 ./test.py -f query/bug3351.py +python3 ./test.py -f query/bug3375.py From 5d2fa94960004b718173c1db4b35c5a96343abab Mon Sep 17 00:00:00 2001 From: wu champion <72908628+wu-champion@users.noreply.github.com> Date: Mon, 22 Mar 2021 18:51:49 +0800 Subject: [PATCH 04/31] Update fulltest.sh --- tests/pytest/fulltest.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/pytest/fulltest.sh b/tests/pytest/fulltest.sh index 4f6dbe90d7..c4b5443811 100755 --- a/tests/pytest/fulltest.sh +++ b/tests/pytest/fulltest.sh @@ -196,8 +196,6 @@ python3 ./test.py -f query/bug2119.py python3 ./test.py -f query/isNullTest.py python3 ./test.py -f query/queryWithTaosdKilled.py python3 ./test.py -f query/floatCompare.py -python3 ./test.py -f query/query1970YearsAf.py -python3 ./test.py -f query/bug3351.py python3 ./test.py -f query/bug3375.py From 88ab7666b9571da6d25db903d660931e4e8436c3 Mon Sep 17 00:00:00 2001 From: wu champion <72908628+wu-champion@users.noreply.github.com> Date: Mon, 22 Mar 2021 18:52:02 +0800 Subject: [PATCH 05/31] Delete bug3351.py --- tests/pytest/query/bug3351.py | 74 ----------------------------------- 1 file changed, 74 deletions(-) delete mode 100644 tests/pytest/query/bug3351.py diff --git a/tests/pytest/query/bug3351.py b/tests/pytest/query/bug3351.py deleted file mode 100644 index 288d071a69..0000000000 --- a/tests/pytest/query/bug3351.py +++ /dev/null @@ -1,74 +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 -from util.log import * -from util.cases import * -from util.sql import * -from util.dnodes import * - - -class TDTestCase: - def init(self, conn, logSql): - tdLog.debug("start to execute %s" % __file__) - tdSql.init(conn.cursor(), logSql) - - def run(self): - tdSql.prepare() - tdSql.execute("drop database if exists db") - tdSql.execute("create database if not exists db keep 36500") - tdSql.execute("use db") - tdLog.printNoPrefix("==========step1:create table && insert data") - - tdSql.execute( - "create table stb1 (ts timestamp, c1 int) TAGS(t1 int)" - ) - tdSql.execute("create table t0 using stb1 tags(1)") - tdSql.execute("insert into t0 values (-865000000, 1)") - tdSql.execute("insert into t0 values (-864000000, 2)") - tdSql.execute("insert into t0 values (-863000000, 3)") - tdSql.execute("insert into t0 values (-15230000, 4)") - tdSql.execute("insert into t0 values (-15220000, 5)") - tdSql.execute("insert into t0 values (-15210000, 6)") - - tdLog.printNoPrefix("==========step2:query") - # bug1:when ts > -864000000, return 0 rows; - # bug2:when ts = -15220000, return 0 rows. - tdSql.query('select * from t0 where ts < -864000000') - tdSql.checkRows(1) - tdSql.query('select * from t0 where ts <= -864000000') - tdSql.checkRows(2) - tdSql.query('select * from t0 where ts = -864000000') - tdSql.checkRows(1) - tdSql.query('select * from t0 where ts > -864000000') - tdSql.checkRows(4) - tdSql.query('select * from t0 where ts >= -864000000') - tdSql.checkRows(5) - tdSql.query('select * from t0 where ts < -15220000') - tdSql.checkRows(4) - tdSql.query('select * from t0 where ts <= -15220000') - tdSql.checkRows(5) - tdSql.query('select * from t0 where ts = -15220000') - tdSql.checkRows(1) - tdSql.query('select * from t0 where ts > -15220000') - tdSql.checkRows(1) - tdSql.query('select * from t0 where ts >= -15220000') - tdSql.checkRows(2) - - def stop(self): - tdSql.close() - tdLog.success("%s successfully executed" % __file__) - - -tdCases.addWindows(__file__, TDTestCase()) -tdCases.addLinux(__file__, TDTestCase()) \ No newline at end of file From bd37922bacd0446b143e1c18a55b7bc39e498ed3 Mon Sep 17 00:00:00 2001 From: wu champion <72908628+wu-champion@users.noreply.github.com> Date: Mon, 22 Mar 2021 18:52:17 +0800 Subject: [PATCH 06/31] Delete query1970YearsAf.py --- tests/pytest/query/query1970YearsAf.py | 253 ------------------------- 1 file changed, 253 deletions(-) delete mode 100644 tests/pytest/query/query1970YearsAf.py diff --git a/tests/pytest/query/query1970YearsAf.py b/tests/pytest/query/query1970YearsAf.py deleted file mode 100644 index d2eead241f..0000000000 --- a/tests/pytest/query/query1970YearsAf.py +++ /dev/null @@ -1,253 +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 taos -import sys -import os -import json -import subprocess -import datetime - - -from util.log import * -from util.sql import * -from util.cases import * -from util.dnodes import * -from util.dnodes import TDDnode - -class TDTestCase: - - def __init__(self): - self.path = "" - - def init(self, conn, logSql): - tdLog.debug(f"start to excute {__file__}") - tdSql.init(conn.cursor()) - - def getcfgPath(self, path): - binPath = os.path.dirname(os.path.realpath(__file__)) - binPath = binPath + "/../../../debug/" - tdLog.debug(f"binPath {binPath}") - binPath = os.path.realpath(binPath) - tdLog.debug(f"binPath real path {binPath}") - if path == "": - self.path = os.path.abspath(binPath + "../../") - else: - self.path = os.path.realpath(path) - return self.path - - def getCfgDir(self): - self.getcfgPath(self.path) - self.cfgDir = f"{self.path}/sim/psim/cfg" - return self.cfgDir - - def creatcfg(self): - dbinfo = { - "name": "db", - "drop": "yes", - "replica": 1, - "days": 10, - "cache": 16, - "blocks": 8, - "precision": "ms", - "keep": 36500, - "minRows": 100, - "maxRows": 4096, - "comp": 2, - "walLevel": 1, - "cachelast": 0, - "quorum": 1, - "fsync": 3000, - "update": 0 - } - - # 设置创建的超级表格式 - stable1 = { - "name": "stb2", - "child_table_exists": "no", - "childtable_count": 10, - "childtable_prefix": "t", - "auto_create_table": "no", - "data_source": "rand", - "insert_mode": "taosc", - "insert_rows": 5000, - "multi_thread_write_one_tbl": "no", - "number_of_tbl_in_one_sql": 0, - "rows_per_tbl": 1000, - "max_sql_len": 65480, - "disorder_ratio": 0, - "disorder_range": 1000, - "timestamp_step": 20000, - "start_timestamp": "1969-12-30 23:59:40.000", - "sample_format": "csv", - "sample_file": "./sample.csv", - "tags_file": "", - "columns": [ - {"type": "INT", "count": 2}, - {"type": "DOUBLE", "count": 2}, - {"type": "BIGINT", "count": 2}, - {"type": "FLOAT", "count": 2}, - {"type": "SMALLINT", "count": 2}, - {"type": "TINYINT", "count": 2}, - {"type": "BOOL", "count": 2}, - {"type": "NCHAR", "len": 3, "count": 1}, - {"type": "BINARY", "len": 8, "count": 1} - - ], - "tags": [ - {"type": "INT", "count": 2}, - {"type": "DOUBLE", "count": 2}, - {"type": "BIGINT", "count": 2}, - {"type": "FLOAT", "count": 2}, - {"type": "SMALLINT", "count": 2}, - {"type": "TINYINT", "count": 2}, - {"type": "BOOL", "count": 2}, - {"type": "NCHAR", "len": 3, "count": 1}, - {"type": "BINARY", "len": 8, "count": 1} - ] - } - - # 创建不同的超级表格式并添加至super_tables - super_tables = [] - super_tables.append(stable1) - database = { - "dbinfo": dbinfo, - "super_tables": super_tables - } - - cfgdir = self.getCfgDir() - create_table = { - "filetype": "insert", - "cfgdir": cfgdir, - "host": "127.0.0.1", - "port": 6030, - "user": "root", - "password": "taosdata", - "thread_count": 4, - "thread_count_create_tbl": 4, - "result_file": "/tmp/insert_res.txt", - "confirm_parameter_prompt": "no", - "insert_interval": 0, - "num_of_records_per_req": 100, - "databases": [database] - } - return create_table - - def createinsertfile(self): - create_table = self.creatcfg() - date = datetime.datetime.now().strftime("%Y%m%d%H%M") - file_create_table = f"/tmp/insert_{date}.json" - - with open(file_create_table, 'w') as f: - json.dump(create_table, f) - return file_create_table - - def inserttable(self, filepath): - create_table_cmd = f"taosdemo -f {filepath} > /dev/null 2>&1" - _ = subprocess.check_output(create_table_cmd, shell=True).decode("utf-8") - - def sqlsquery(self): - # stable query - tdSql.query( - "select * from stb2 where stb2.ts < '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(43200) - - tdSql.query( - "select * from stb2 where stb2.ts >= '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(6800) - - tdSql.query( - "select * from stb2 where stb2.ts > '1969-12-31 23:00:00.000' and stb2.ts <'1970-01-01 01:00:00.000' " - ) - tdSql.checkRows(3590) - - # child-table query - tdSql.query( - "select * from t0 where t0.ts < '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(4320) - - tdSql.query( - "select * from t1 where t1.ts >= '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(680) - - tdSql.query( - "select * from t9 where t9.ts > '1969-12-31 22:00:00.000' and t9.ts <'1970-01-01 02:00:00.000' " - ) - tdSql.checkRows(719) - - tdSql.query( - "select * from t0,t1 where t0.ts=t1.ts and t1.ts >= '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(680) - - tdSql.query( - "select diff(col1) from t0 where t0.ts >= '1970-01-01 00:00:00.000' " - ) - tdSql.checkRows(679) - - tdSql.query( - "select t0,col1 from stb2 where stb2.ts < '1970-01-01 00:00:00.000' order by ts" - ) - tdSql.checkRows(43200) - - # query with timestamp in 'where ...' - tdSql.query( - "select * from stb2 where stb2.ts > -28800000 " - ) - tdSql.checkRows(6790) - - tdSql.query( - "select * from stb2 where stb2.ts > -28800000 and stb2.ts < '1970-01-01 08:00:00.000' " - ) - tdSql.checkRows(6790) - - tdSql.query( - "select * from stb2 where stb2.ts < -28800000 and stb2.ts > '1969-12-31 22:00:00.000' " - ) - tdSql.checkRows(3590) - - def run(self): - s = 'reset query cache' - tdSql.execute(s) - s = 'create database if not exists db' - tdSql.execute(s) - s = 'use db' - tdSql.execute(s) - - tdLog.info("==========step1:create table stable and child table,then insert data automatically") - insertfile = self.createinsertfile() - self.inserttable(insertfile) - - tdLog.info("==========step2:query join") - self.sqlsquery() - - # 进行数据落盘后检查 - tdSql.query("show dnodes") - index = tdSql.getData(0, 0) - tdDnodes.stop(index) - tdDnodes.start(index) - - tdLog.info("==========step3: query join again") - self.sqlsquery() - - def stop(self): - tdSql.close() - tdLog.success(f"{__file__} successfully executed") - - -tdCases.addLinux(__file__, TDTestCase()) -tdCases.addWindows(__file__, TDTestCase()) \ No newline at end of file From 3f726464eab393597e658a47567d7486a9962ec5 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 22 Mar 2021 11:21:53 +0000 Subject: [PATCH 07/31] TD-3246 --- CMakeLists.txt | 2 +- cmake/define.inc | 4 ++++ cmake/input.inc | 8 ++++++++ src/dnode/CMakeLists.txt | 4 ++++ src/dnode/src/dnodeMain.c | 8 ++++++++ src/inc/module.h | 30 ++++++++++++++++++++++++++++++ 6 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/inc/module.h diff --git a/CMakeLists.txt b/CMakeLists.txt index be97e679d1..0e3745db3b 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ SET(TD_GRANT FALSE) SET(TD_MQTT FALSE) SET(TD_TSDB_PLUGINS FALSE) SET(TD_STORAGE FALSE) -SET(TD_TOPIC FALSE) +SET(TD_MODULE FALSE) SET(TD_COVER FALSE) SET(TD_MEM_CHECK FALSE) diff --git a/cmake/define.inc b/cmake/define.inc index ff4583d02b..6f49630d5c 100755 --- a/cmake/define.inc +++ b/cmake/define.inc @@ -29,6 +29,10 @@ IF (TD_TOPIC) ADD_DEFINITIONS(-D_TOPIC) ENDIF () +IF (TD_MODULE) + ADD_DEFINITIONS(-D_MODULE) +ENDIF () + IF (TD_GODLL) ADD_DEFINITIONS(-D_TD_GO_DLL_) ENDIF () diff --git a/cmake/input.inc b/cmake/input.inc index b1a993c996..00e0e1bc0f 100755 --- a/cmake/input.inc +++ b/cmake/input.inc @@ -17,6 +17,14 @@ ELSEIF (${TOPIC} MATCHES "false") MESSAGE(STATUS "Build without topic plugins") ENDIF () +IF (${TD_MODULE} MATCHES "true") + SET(TD_MODULE TRUE) + MESSAGE(STATUS "Build with module plugins") +ELSEIF (${TOPIC} MATCHES "false") + SET(TD_MODULE FALSE) + MESSAGE(STATUS "Build without module plugins") +ENDIF () + IF (${COVER} MATCHES "true") SET(TD_COVER TRUE) MESSAGE(STATUS "Build with test coverage") diff --git a/src/dnode/CMakeLists.txt b/src/dnode/CMakeLists.txt index 516e5b4d1f..dd18f00920 100644 --- a/src/dnode/CMakeLists.txt +++ b/src/dnode/CMakeLists.txt @@ -35,6 +35,10 @@ IF (TD_TOPIC) TARGET_LINK_LIBRARIES(taosd topic) ENDIF () +IF (TD_MODULE AND TD_LINUX) + TARGET_LINK_LIBRARIES(taosd module dl) +ENDIF () + SET(PREPARE_ENV_CMD "prepare_env_cmd") SET(PREPARE_ENV_TARGET "prepare_env_target") ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD} diff --git a/src/dnode/src/dnodeMain.c b/src/dnode/src/dnodeMain.c index c24eac84cf..8ac712386e 100644 --- a/src/dnode/src/dnodeMain.c +++ b/src/dnode/src/dnodeMain.c @@ -39,6 +39,12 @@ #include "dnodeMPeer.h" #include "dnodeShell.h" #include "dnodeTelemetry.h" +#include "module.h" + +#ifndef _MODULE +int32_t moduleStart() { return 0; } +void moduleStop(); +#endif void *tsDnodeTmr = NULL; static SRunStatus tsRunStatus = TSDB_RUN_STATUS_STOPPED; @@ -146,6 +152,7 @@ int32_t dnodeInitSystem() { } dnodeSetRunStatus(TSDB_RUN_STATUS_RUNING); + moduleStart(); dnodeReportStep("TDengine", "initialized successfully", 1); dInfo("TDengine is initialized successfully"); @@ -155,6 +162,7 @@ int32_t dnodeInitSystem() { void dnodeCleanUpSystem() { if (dnodeGetRunStatus() != TSDB_RUN_STATUS_STOPPED) { + moduleStop(); dnodeSetRunStatus(TSDB_RUN_STATUS_STOPPED); dnodeCleanupTmr(); dnodeCleanupComponents(); diff --git a/src/inc/module.h b/src/inc/module.h new file mode 100644 index 0000000000..b9b64c493e --- /dev/null +++ b/src/inc/module.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef TDENGINE_MODULE +#define TDENGINE_MODULE + +#ifdef __cplusplus +extern "C" { +#endif + +int32_t moduleStart(); +void moduleStop(); + +#ifdef __cplusplus +} +#endif + +#endif From a9bd35cba6deb952c58bf7b6686f46f92d0716b5 Mon Sep 17 00:00:00 2001 From: slguan Date: Mon, 22 Mar 2021 19:43:54 +0800 Subject: [PATCH 08/31] fix compile errors --- src/dnode/src/dnodeMain.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dnode/src/dnodeMain.c b/src/dnode/src/dnodeMain.c index 8ac712386e..fb46709440 100644 --- a/src/dnode/src/dnodeMain.c +++ b/src/dnode/src/dnodeMain.c @@ -41,11 +41,12 @@ #include "dnodeTelemetry.h" #include "module.h" -#ifndef _MODULE +#if !defined(_MODULE) || !defined(_TD_LINUX) int32_t moduleStart() { return 0; } -void moduleStop(); +void moduleStop() {} #endif + void *tsDnodeTmr = NULL; static SRunStatus tsRunStatus = TSDB_RUN_STATUS_STOPPED; From 9ae0fa2d93b44f33f41fe50a821b7175032429e9 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Mon, 22 Mar 2021 11:51:01 +0000 Subject: [PATCH 09/31] fix compile errors --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e3745db3b..e0d6e82923 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ SET(TD_GRANT FALSE) SET(TD_MQTT FALSE) SET(TD_TSDB_PLUGINS FALSE) SET(TD_STORAGE FALSE) +SET(TD_TOPIC FALSE) SET(TD_MODULE FALSE) SET(TD_COVER FALSE) From b6e3d4e3514fd3010bc2ed5f7e30cd14d10995b6 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 10:21:44 +0800 Subject: [PATCH 10/31] test abort last job --- Jenkinsfile | 73 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 68fe4879c1..31219d4c1b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,37 +6,56 @@ node { } def skipstage=0 -def abortPreviousBuilds() { - def currentJobName = env.JOB_NAME - def currentBuildNumber = env.BUILD_NUMBER.toInteger() - def jobs = Jenkins.instance.getItemByFullName(currentJobName) - def builds = jobs.getBuilds() +def cancelPreviousBuilds() { + def jobName = env.JOB_NAME + def buildNumber = env.BUILD_NUMBER.toInteger() + /* Get job name */ + def currentJob = Jenkins.instance.getItemByFullName(jobName) - for (build in builds) { - if (!build.isBuilding()) { - continue; + /* Iterating over the builds for specific job */ + for (def build : currentJob.builds) { + def exec = build.getExecutor() + /* If there is a build that is currently running and it's not current build */ + if (build.isBuilding() && build.number.toInteger() != buildNumber && exec != null) { + /* Then stop it */ + exec.interrupt( + Result.ABORTED, + new CauseOfInterruption.UserInterruption("Aborted by #${currentBuild.number}") + ) + println("Aborted previously running build #${build.number}") + } } - - if (currentBuildNumber == build.getNumber().toInteger()) { - continue; - } - - build.doKill() //doTerm(),doKill(),doTerm() - } -} -//abort previous build -abortPreviousBuilds() -def abort_previous(){ - def buildNumber = env.BUILD_NUMBER as int - if (buildNumber > 1) milestone(buildNumber - 1) - milestone(buildNumber) } +// def abortPreviousBuilds() { +// def currentJobName = env.JOB_NAME +// def currentBuildNumber = env.BUILD_NUMBER.toInteger() +// def jobs = Jenkins.instance.getItemByFullName(currentJobName) +// def builds = jobs.getBuilds() + +// for (build in builds) { +// if (!build.isBuilding()) { +// continue; +// } + +// if (currentBuildNumber == build.getNumber().toInteger()) { +// continue; +// } + +// build.doKill() //doTerm(),doKill(),doTerm() +// } +// } +// //abort previous build +// abortPreviousBuilds() +// def abort_previous(){ +// def buildNumber = env.BUILD_NUMBER as int +// if (buildNumber > 1) milestone(buildNumber - 1) +// milestone(buildNumber) +// } def pre_test(){ - catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { - sh ''' - sudo rmtaos - ''' - } + + sh ''' + sudo rmtaos || echo "taosd has not installed" + ''' sh ''' cd ${WKC} From 6c850c0894f7e81b6d2847151d54f4547dd14ff3 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 10:31:10 +0800 Subject: [PATCH 11/31] test --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 31219d4c1b..ff9327f603 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -44,7 +44,7 @@ def cancelPreviousBuilds() { // build.doKill() //doTerm(),doKill(),doTerm() // } // } -// //abort previous build + //abort previous build // abortPreviousBuilds() // def abort_previous(){ // def buildNumber = env.BUILD_NUMBER as int From ec4e27e46dbf9377099ff066bf8dcf64d977c289 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 10:49:55 +0800 Subject: [PATCH 12/31] fix --- tests/test-all.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test-all.sh b/tests/test-all.sh index bda03191d1..ba4b0e6fbf 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -93,6 +93,7 @@ function runSimCaseOneByOnefq { else cp -r ../../sim ~/sim_`date "+%Y_%m_%d_%H:%M:%S" ` fi + dohavecore 1 exit 8 fi end_time=`date +%s` @@ -151,6 +152,7 @@ function runPyCaseOneByOnefq { out_log=`tail -1 pytest-out.log ` if [[ $out_log =~ 'failed' ]];then cp -r ../../sim ~/sim_`date "+%Y_%m_%d_%H:%M:%S" ` + dohavecore 1 exit 8 fi echo execution time of $case was `expr $end_time - $start_time`s. | tee -a pytest-out.log From da78c3af789c49918d14a3c14c13cbf6aac46408 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 12:27:54 +0800 Subject: [PATCH 13/31] recover --- Jenkinsfile | 84 ++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index ff9327f603..71214d1495 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,51 +6,51 @@ node { } def skipstage=0 -def cancelPreviousBuilds() { - def jobName = env.JOB_NAME - def buildNumber = env.BUILD_NUMBER.toInteger() - /* Get job name */ - def currentJob = Jenkins.instance.getItemByFullName(jobName) +// def cancelPreviousBuilds() { +// def jobName = env.JOB_NAME +// def buildNumber = env.BUILD_NUMBER.toInteger() +// /* Get job name */ +// def currentJob = Jenkins.instance.getItemByFullName(jobName) - /* Iterating over the builds for specific job */ - for (def build : currentJob.builds) { - def exec = build.getExecutor() - /* If there is a build that is currently running and it's not current build */ - if (build.isBuilding() && build.number.toInteger() != buildNumber && exec != null) { - /* Then stop it */ - exec.interrupt( - Result.ABORTED, - new CauseOfInterruption.UserInterruption("Aborted by #${currentBuild.number}") - ) - println("Aborted previously running build #${build.number}") - } +// /* Iterating over the builds for specific job */ +// for (def build : currentJob.builds) { +// def exec = build.getExecutor() +// /* If there is a build that is currently running and it's not current build */ +// if (build.isBuilding() && build.number.toInteger() != buildNumber && exec != null) { +// /* Then stop it */ +// exec.interrupt( +// Result.ABORTED, +// new CauseOfInterruption.UserInterruption("Aborted by #${currentBuild.number}") +// ) +// println("Aborted previously running build #${build.number}") +// } +// } +// } +def abortPreviousBuilds() { + def currentJobName = env.JOB_NAME + def currentBuildNumber = env.BUILD_NUMBER.toInteger() + def jobs = Jenkins.instance.getItemByFullName(currentJobName) + def builds = jobs.getBuilds() + + for (build in builds) { + if (!build.isBuilding()) { + continue; } + + if (currentBuildNumber == build.getNumber().toInteger()) { + continue; + } + + build.doKill() //doTerm(),doKill(),doTerm() + } +} +// abort previous build +abortPreviousBuilds() +def abort_previous(){ + def buildNumber = env.BUILD_NUMBER as int + if (buildNumber > 1) milestone(buildNumber - 1) + milestone(buildNumber) } -// def abortPreviousBuilds() { -// def currentJobName = env.JOB_NAME -// def currentBuildNumber = env.BUILD_NUMBER.toInteger() -// def jobs = Jenkins.instance.getItemByFullName(currentJobName) -// def builds = jobs.getBuilds() - -// for (build in builds) { -// if (!build.isBuilding()) { -// continue; -// } - -// if (currentBuildNumber == build.getNumber().toInteger()) { -// continue; -// } - -// build.doKill() //doTerm(),doKill(),doTerm() -// } -// } - //abort previous build -// abortPreviousBuilds() -// def abort_previous(){ -// def buildNumber = env.BUILD_NUMBER as int -// if (buildNumber > 1) milestone(buildNumber - 1) -// milestone(buildNumber) -// } def pre_test(){ sh ''' From 6555dcf4776f41bf30bc7e8a30d19f5aa8d62677 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 12:55:34 +0800 Subject: [PATCH 14/31] [TD-3432]fix jenkins --- Jenkinsfile | 22 ++-------------------- tests/test-all.sh | 2 +- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 71214d1495..c8fd2083f6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -6,26 +6,7 @@ node { } def skipstage=0 -// def cancelPreviousBuilds() { -// def jobName = env.JOB_NAME -// def buildNumber = env.BUILD_NUMBER.toInteger() -// /* Get job name */ -// def currentJob = Jenkins.instance.getItemByFullName(jobName) -// /* Iterating over the builds for specific job */ -// for (def build : currentJob.builds) { -// def exec = build.getExecutor() -// /* If there is a build that is currently running and it's not current build */ -// if (build.isBuilding() && build.number.toInteger() != buildNumber && exec != null) { -// /* Then stop it */ -// exec.interrupt( -// Result.ABORTED, -// new CauseOfInterruption.UserInterruption("Aborted by #${currentBuild.number}") -// ) -// println("Aborted previously running build #${build.number}") -// } -// } -// } def abortPreviousBuilds() { def currentJobName = env.JOB_NAME def currentBuildNumber = env.BUILD_NUMBER.toInteger() @@ -52,7 +33,8 @@ def abort_previous(){ milestone(buildNumber) } def pre_test(){ - + abort_previous() + abortPreviousBuilds() sh ''' sudo rmtaos || echo "taosd has not installed" ''' diff --git a/tests/test-all.sh b/tests/test-all.sh index 8e03c75f9a..c44737a8e8 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -100,7 +100,7 @@ function runSimCaseOneByOnefq { cp -r ../../sim ~/sim_`date "+%Y_%m_%d_%H:%M:%S" ` rm -rf ../../sim/case.log fi - dohavecore 1 + dohavecore $2 exit 8 fi end_time=`date +%s` From 48c1dcb4ca540327a4079c02c6554e670c76de59 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 12:59:41 +0800 Subject: [PATCH 15/31] change --- Jenkinsfile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c8fd2083f6..bac48115d3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,8 +33,11 @@ def abort_previous(){ milestone(buildNumber) } def pre_test(){ - abort_previous() - abortPreviousBuilds() + script{ + abort_previous() + abortPreviousBuilds() + } + sh ''' sudo rmtaos || echo "taosd has not installed" ''' @@ -81,6 +84,10 @@ pipeline { changeRequest() } steps { + script{ + abort_previous() + abortPreviousBuilds() + } sh''' cp -r ${WORKSPACE} ${WORKSPACE}.tes cd ${WORKSPACE}.tes From 5e8ab6b948fcfe17a6ba27338e1e3ea955b3e986 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 13:04:42 +0800 Subject: [PATCH 16/31] fix --- tests/test-all.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/test-all.sh b/tests/test-all.sh index c44737a8e8..2268037d58 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -101,7 +101,9 @@ function runSimCaseOneByOnefq { rm -rf ../../sim/case.log fi dohavecore $2 - exit 8 + if [[ $2 == 1 ]];then + exit 8 + fi fi end_time=`date +%s` echo execution time of $case was `expr $end_time - $start_time`s. | tee -a out.log @@ -174,7 +176,9 @@ function runPyCaseOneByOnefq() { cat ../../sim/case.log rm -rf ../../sim/case.log dohavecore $2 - exit 8 + if [[ $2 == 1 ]];then + exit 8 + fi fi echo execution time of $case was `expr $end_time - $start_time`s. | tee -a pytest-out.log else From bfe554a0d6f55640d7bdfccb6be7e5cfd31f2dfb Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 23 Mar 2021 14:54:41 +0800 Subject: [PATCH 17/31] [td-3391]: fix invalid error msg. --- src/client/inc/tsclient.h | 2 +- src/client/src/tscAsync.c | 52 +++++++++++++++++++++++++++++++++++--- src/client/src/tscServer.c | 2 +- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h index 1740266518..2d7c394701 100644 --- a/src/client/inc/tsclient.h +++ b/src/client/inc/tsclient.h @@ -367,7 +367,7 @@ typedef struct SSqlObj { int64_t svgroupRid; int64_t squeryLock; - + int32_t retryReason; // previous error code struct SSqlObj *prev, *next; int64_t self; } SSqlObj; diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 87f6058cec..432f4d94fd 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -310,10 +310,51 @@ void tscAsyncResultOnError(SSqlObj* pSql) { taosScheduleTask(tscQhandle, &schedMsg); } - - int tscSendMsgToServer(SSqlObj *pSql); +static int32_t updateMetaBeforeRetryQuery(SSqlObj* pSql, STableMetaInfo* pTableMetaInfo, SQueryInfo* pQueryInfo) { + // handle the invalid table error code for super table. + // update the pExpr info, colList info, number of table columns + // TODO Re-parse this sql and issue the corresponding subquery as an alternative for this case. + if (pSql->retryReason == TSDB_CODE_TDB_INVALID_TABLE_ID) { + int32_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo); + int32_t numOfCols = tscGetNumOfColumns(pTableMetaInfo->pTableMeta); + int32_t numOfTags = tscGetNumOfTags(pTableMetaInfo->pTableMeta); + + SSchema *pSchema = tscGetTableSchema(pTableMetaInfo->pTableMeta); + for (int32_t i = 0; i < numOfExprs; ++i) { + SSqlExpr *pExpr = tscSqlExprGet(pQueryInfo, i); + pExpr->uid = pTableMetaInfo->pTableMeta->id.uid; + + if (pExpr->colInfo.colIndex >= 0) { + int32_t index = pExpr->colInfo.colIndex; + + if ((TSDB_COL_IS_NORMAL_COL(pExpr->colInfo.flag) && index >= numOfCols) || + (TSDB_COL_IS_TAG(pExpr->colInfo.flag) && (index < numOfCols || index >= (numOfCols + numOfTags)))) { + return pSql->retryReason; + } + + if ((pSchema[pExpr->colInfo.colIndex].colId != pExpr->colInfo.colId) && + strcasecmp(pExpr->colInfo.name, pSchema[pExpr->colInfo.colIndex].name) != 0) { + return pSql->retryReason; + } + } + } + + // validate the table columns information + for (int32_t i = 0; i < taosArrayGetSize(pQueryInfo->colList); ++i) { + SColumn *pCol = taosArrayGetP(pQueryInfo->colList, i); + if (pCol->colIndex.columnIndex >= numOfCols) { + return pSql->retryReason; + } + } + } else { + // do nothing + } + + return TSDB_CODE_SUCCESS; +} + void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { SSqlObj* pSql = (SSqlObj*)taosAcquireRef(tscObjRef, (int64_t)param); if (pSql == NULL) return; @@ -339,7 +380,8 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { if (TSDB_QUERY_HAS_TYPE(pQueryInfo->type, (TSDB_QUERY_TYPE_STABLE_SUBQUERY|TSDB_QUERY_TYPE_SUBQUERY|TSDB_QUERY_TYPE_TAG_FILTER_QUERY))) { tscDebug("%p update local table meta, continue to process sql and send the corresponding query", pSql); - STableMetaInfo* pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); + STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0); + code = tscGetTableMeta(pSql, pTableMetaInfo); assert(code == TSDB_CODE_TSC_ACTION_IN_PROGRESS || code == TSDB_CODE_SUCCESS); @@ -349,6 +391,10 @@ void tscTableMetaCallBack(void *param, TAOS_RES *res, int code) { } assert((tscGetNumOfTags(pTableMetaInfo->pTableMeta) != 0)); + code = updateMetaBeforeRetryQuery(pSql, pTableMetaInfo, pQueryInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } // tscProcessSql can add error into async res tscProcessSql(pSql); diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 45ca470ce6..31655a4b70 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -350,8 +350,8 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) { taosMsleep(duration); } + pSql->retryReason = rpcMsg->code; rpcMsg->code = tscRenewTableMeta(pSql, 0); - // if there is an error occurring, proceed to the following error handling procedure. if (rpcMsg->code == TSDB_CODE_TSC_ACTION_IN_PROGRESS) { taosReleaseRef(tscObjRef, handle); From 3b97bd716df4efa805367be8e020999c8c9e4657 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Tue, 23 Mar 2021 15:14:50 +0800 Subject: [PATCH 18/31] Feature/sangshuduo/td 3317 taosdemo interlace (#5537) * [TD-3316] : add testcase for taosdemo limit and offset. check offset 0. * [TD-3316] : add testcase for taosdemo limit and offset. fix sample file import bug. * [TD-3316] : add test case for limit and offset. fix sample data issue. * [TD-3327] : fix taosdemo segfault when import data from sample data file. * [TD-3317] : make taosdemo support interlace mode. json parameter rows_per_tbl support. * [TD-3317] : support interlace mode. refactor * [TD-3317] : support interlace mode. refactor * [TD-3317] : support interlace mode insertion. refactor. * [TD-3317] : support interlace mode insertion. change json file. * [TD-3317] : support interlace mode insertion. fix multithread create table regression. * [TD-3317] : support interlace mode insertion. working but not perfect. * [TD-3317] : support interlace mode insertion. rename lowaTest with taosdemoTestWithJson * [TD-3317] : support interlace mode insertion. perfect * [TD-3317] : support interlace mode insertion. cleanup. * [TD-3317] : support interlace mode insertion. adjust algorithm of loop times. * [TD-3317] : support interlace mode insertion. fix delay time bug. * [TD-3317] : support interlace mode insertion. fix progressive timestamp bug. * [TD-3317] : support interlace mode insertion. add an option for performance print. * [TD-3317] : support interlace mode insertion. change json test case with less table for acceleration. * [TD-3317] : support interlace mode insertion. change progressive mode timestamp step and testcase. * [TD-3197] : fix taosdemo coverity scan issues. * [TD-3197] : fix taosdemo coverity scan issue. fix subscribeTest pids uninitialized. * [TD-3317] : support interlace mode insertion. add time shift for no sleep time. * [TD-3317] : support interlace insert. rework timestamp. * [TD-3317] : support interlace mode insertion. change rows_per_tbl to interlace_rows. Co-authored-by: Shuduo Sang --- src/kit/taosdemo/insert-interlace.json | 2 +- src/kit/taosdemo/insert.json | 2 +- src/kit/taosdemo/taosdemo.c | 21 ++++++++++--------- .../taosdemo/src/main/resources/insert.json | 2 +- .../cluster/clusterEnvSetup/insert.json | 2 +- tests/pytest/tools/insert-interlace.json | 4 ++-- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/kit/taosdemo/insert-interlace.json b/src/kit/taosdemo/insert-interlace.json index 0f54f008fb..344db4fd00 100644 --- a/src/kit/taosdemo/insert-interlace.json +++ b/src/kit/taosdemo/insert-interlace.json @@ -41,7 +41,7 @@ "insert_mode": "taosc", "insert_rows": 1000, "multi_thread_write_one_tbl": "no", - "rows_per_tbl": 20, + "interlace_rows": 20, "max_sql_len": 1024000, "disorder_ratio": 0, "disorder_range": 1000, diff --git a/src/kit/taosdemo/insert.json b/src/kit/taosdemo/insert.json index e6b1895043..f0e3ab1d50 100644 --- a/src/kit/taosdemo/insert.json +++ b/src/kit/taosdemo/insert.json @@ -41,7 +41,7 @@ "insert_mode": "taosc", "insert_rows": 100000, "multi_thread_write_one_tbl": "no", - "rows_per_tbl": 0, + "interlace_rows": 0, "max_sql_len": 1024000, "disorder_ratio": 0, "disorder_range": 1000, diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 6534196603..581405efcb 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -199,7 +199,7 @@ typedef struct SArguments_S { int num_of_CPR; int num_of_threads; int insert_interval; - int rows_per_tbl; + int interlace_rows; int num_of_RPR; int max_sql_len; int num_of_tables; @@ -547,7 +547,7 @@ SArguments g_args = { 10, // num_of_CPR 10, // num_of_connections/thread 0, // insert_interval - 0, // rows_per_tbl; + 0, // interlace_rows; 100, // num_of_RPR TSDB_PAYLOAD_SIZE, // max_sql_len 10000, // num_of_tables @@ -682,7 +682,7 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) { } else if (strcmp(argv[i], "-i") == 0) { arguments->insert_interval = atoi(argv[++i]); } else if (strcmp(argv[i], "-B") == 0) { - arguments->rows_per_tbl = atoi(argv[++i]); + arguments->interlace_rows = atoi(argv[++i]); } else if (strcmp(argv[i], "-r") == 0) { arguments->num_of_RPR = atoi(argv[++i]); } else if (strcmp(argv[i], "-t") == 0) { @@ -3008,13 +3008,13 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { goto PARSE_OVER; } - cJSON* rowsPerTbl = cJSON_GetObjectItem(root, "rows_per_tbl"); + cJSON* rowsPerTbl = cJSON_GetObjectItem(root, "interlace_rows"); if (rowsPerTbl && rowsPerTbl->type == cJSON_Number) { - g_args.rows_per_tbl = rowsPerTbl->valueint; + g_args.interlace_rows = rowsPerTbl->valueint; } else if (!rowsPerTbl) { - g_args.rows_per_tbl = 0; // 0 means progressive mode, > 0 mean interlace mode. max value is less or equ num_of_records_per_req + g_args.interlace_rows = 0; // 0 means progressive mode, > 0 mean interlace mode. max value is less or equ num_of_records_per_req } else { - errorPrint("%s() LN%d, failed to read json, rows_per_tbl input mistake\n", __func__, __LINE__); + errorPrint("%s() LN%d, failed to read json, interlace_rows input mistake\n", __func__, __LINE__); goto PARSE_OVER; } @@ -3498,7 +3498,7 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { goto PARSE_OVER; } - cJSON* rowsPerTbl = cJSON_GetObjectItem(stbInfo, "rows_per_tbl"); + cJSON* rowsPerTbl = cJSON_GetObjectItem(stbInfo, "interlace_rows"); if (rowsPerTbl && rowsPerTbl->type == cJSON_Number) { g_Dbs.db[i].superTbls[j].rowsPerTbl = rowsPerTbl->valueint; } else if (!rowsPerTbl) { @@ -4425,7 +4425,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { int insertMode; char tableName[TSDB_TABLE_NAME_LEN]; - int rowsPerTbl = superTblInfo?superTblInfo->rowsPerTbl:g_args.rows_per_tbl; + int rowsPerTbl = superTblInfo?superTblInfo->rowsPerTbl:g_args.interlace_rows; if (rowsPerTbl > 0) { insertMode = INTERLACE_INSERT_MODE; @@ -4518,6 +4518,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { pstr += dataLen; recOfBatch += batchPerTbl; + startTime += batchPerTbl * superTblInfo->timeStampStep; pThreadInfo->totalInsertRows += batchPerTbl; verbosePrint("[%d] %s() LN%d batchPerTbl=%d recOfBatch=%d\n", @@ -4746,7 +4747,7 @@ static void* syncWrite(void *sarg) { threadInfo *winfo = (threadInfo *)sarg; SSuperTable* superTblInfo = winfo->superTblInfo; - int rowsPerTbl = superTblInfo?superTblInfo->rowsPerTbl:g_args.rows_per_tbl; + int rowsPerTbl = superTblInfo?superTblInfo->rowsPerTbl:g_args.interlace_rows; if (rowsPerTbl > 0) { // interlace mode diff --git a/tests/examples/JDBC/taosdemo/src/main/resources/insert.json b/tests/examples/JDBC/taosdemo/src/main/resources/insert.json index a7bd87e6d3..35c7773175 100644 --- a/tests/examples/JDBC/taosdemo/src/main/resources/insert.json +++ b/tests/examples/JDBC/taosdemo/src/main/resources/insert.json @@ -38,7 +38,7 @@ "insert_rows": 100, "multi_thread_write_one_tbl": "no", "number_of_tbl_in_one_sql": 0, - "rows_per_tbl": 3, + "interlace_rows": 3, "max_sql_len": 1024, "disorder_ratio": 0, "disorder_range": 1000, diff --git a/tests/pytest/cluster/clusterEnvSetup/insert.json b/tests/pytest/cluster/clusterEnvSetup/insert.json index 56a64b7b85..4548ef74e6 100644 --- a/tests/pytest/cluster/clusterEnvSetup/insert.json +++ b/tests/pytest/cluster/clusterEnvSetup/insert.json @@ -39,7 +39,7 @@ "insert_rows": 100000, "multi_thread_write_one_tbl": "no", "number_of_tbl_in_one_sql": 1, - "rows_per_tbl": 100, + "interlace_rows": 100, "max_sql_len": 1024000, "disorder_ratio": 0, "disorder_range": 1000, diff --git a/tests/pytest/tools/insert-interlace.json b/tests/pytest/tools/insert-interlace.json index a2ff2c001c..d4767ad064 100644 --- a/tests/pytest/tools/insert-interlace.json +++ b/tests/pytest/tools/insert-interlace.json @@ -10,7 +10,7 @@ "result_file": "./insert_res.txt", "confirm_parameter_prompt": "no", "insert_interval": 5000, - "rows_per_tbl": 50, + "interlace_rows": 50, "num_of_records_per_req": 100, "max_sql_len": 1024000, "databases": [{ @@ -42,7 +42,7 @@ "insert_mode": "taosc", "insert_rows": 250, "multi_thread_write_one_tbl": "no", - "rows_per_tbl": 80, + "interlace_rows": 80, "max_sql_len": 1024000, "disorder_ratio": 0, "disorder_range": 1000, From 03b282e92febceb9cc324576f36406f01094334a Mon Sep 17 00:00:00 2001 From: Elias Soong Date: Tue, 23 Mar 2021 15:22:34 +0800 Subject: [PATCH 19/31] [TD-2639] : update memory size estimation. --- documentation20/cn/11.administrator/docs.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/documentation20/cn/11.administrator/docs.md b/documentation20/cn/11.administrator/docs.md index 027828d903..c2c2927387 100644 --- a/documentation20/cn/11.administrator/docs.md +++ b/documentation20/cn/11.administrator/docs.md @@ -6,19 +6,27 @@ ### 内存需求 -每个 DB 可以创建固定数目的 vgroup,默认与 CPU 核数相同,可通过 maxVgroupsPerDb 配置;vgroup 中的每个副本会是一个 vnode;每个 vnode 会占用固定大小的内存(大小与数据库的配置参数 blocks 和 cache 有关);每个 Table 会占用与标签总长度有关的内存;此外,系统会有一些固定的内存开销。因此,每个 DB 需要的系统内存可通过如下公式计算: +每个 Database 可以创建固定数目的 vgroup,默认与 CPU 核数相同,可通过 maxVgroupsPerDb 配置;vgroup 中的每个副本会是一个 vnode;每个 vnode 会占用固定大小的内存(大小与数据库的配置参数 blocks 和 cache 有关);每个 Table 会占用与标签总长度有关的内存;此外,系统会有一些固定的内存开销。因此,每个 DB 需要的系统内存可通过如下公式计算: ``` -Memory Size = maxVgroupsPerDb * (blocks * cache + 10MB) + numOfTables * (tagSizePerTable + 0.5KB) +Database Memory Size = maxVgroupsPerDb * (blocks * cache + 10MB) + numOfTables * (tagSizePerTable + 0.5KB) ``` -示例:假设是 4 核机器,cache 是缺省大小 16M, blocks 是缺省值 6,假设有 10 万张表,标签总长度是 256 字节,则总的内存需求为:4 \* (16 \* 6 + 10) + 100000 \* (0.25 + 0.5) / 1000 = 499M。 +示例:假设是 4 核机器,cache 是缺省大小 16M, blocks 是缺省值 6,并且一个 DB 中有 10 万张表,标签总长度是 256 字节,则这个 DB 总的内存需求为:4 \* (16 \* 6 + 10) + 100000 \* (0.25 + 0.5) / 1000 = 499M。 -注意:从这个公式计算得到的内存容量,应理解为系统的“必要需求”,而不是“内存总数”。在实际运行的生产系统中,由于操作系统缓存、资源管理调度等方面的需要,内存规划应当在计算结果的基础上保留一定冗余,以维持系统状态和系统性能的稳定性。 +在实际的系统运维中,我们通常会更关心 TDengine 服务进程(taosd)会占用的内存量。 +``` +taosd 内存总量 = vnode 内存 + mnode 内存 + 查询内存 +``` -实际运行的系统往往会根据数据特点的不同,将数据存放在不同的 DB 里。因此做规划时,也需要考虑。 +其中: +1. “vnode 内存”指的是集群中所有的 Database 存储分摊到当前 taosd 节点上所占用的内存资源。可以按上文“Database Memory Size”计算公式估算每个 DB 的内存占用量进行加总,再按集群中总共的 TDengine 节点数做平均(如果设置为多副本,则还需要乘以对应的副本倍数)。 +2. “mnode 内存”指的是集群中管理节点所占用的资源。如果一个 taosd 节点上分布有 mnode 管理节点,则内存消耗还需要增加“0.2KB * 集群中数据表总数”。 +3. “查询内存”指的是服务端处理查询请求时所需要占用的内存。单条查询语句至少会占用“0.2KB * 查询涉及的数据表总数”的内存量。 -如果内存充裕,可以加大 Blocks 的配置,这样更多数据将保存在内存里,提高查询速度。 +注意:以上内存估算方法,主要讲解了系统的“必须内存需求”,而不是“内存总数上限”。在实际运行的生产环境中,由于操作系统缓存、资源管理调度等方面的原因,内存规划应当在估算结果的基础上保留一定冗余,以维持系统状态和系统性能的稳定性。并且,生产环境通常会配置系统资源的监控工具,以便及时发现硬件资源的紧缺情况。 + +最后,如果内存充裕,可以考虑加大 Blocks 的配置,这样更多数据将保存在内存里,提高查询速度。 ### CPU 需求 From 94bb5fe80d58d4f063616d800ff015a1960bc322 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Tue, 23 Mar 2021 15:28:25 +0800 Subject: [PATCH 20/31] [TD-3407] : print more info to result file. (#5538) Co-authored-by: Shuduo Sang --- src/kit/taosdemo/taosdemo.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 581405efcb..5a65e3dc5e 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -1064,6 +1064,7 @@ static int printfInsertMeta() { printf("max sql length: \033[33m%d\033[0m\n", g_args.max_sql_len); printf("database count: \033[33m%d\033[0m\n", g_Dbs.dbCount); + for (int i = 0; i < g_Dbs.dbCount; i++) { printf("database[\033[33m%d\033[0m]:\n", i); printf(" database[%d] name: \033[33m%s\033[0m\n", i, g_Dbs.db[i].dbName); @@ -1220,16 +1221,19 @@ static int printfInsertMeta() { } static void printfInsertMetaToFile(FILE* fp) { - SHOW_PARSE_RESULT_START_TO_FILE(fp); + + SHOW_PARSE_RESULT_START_TO_FILE(fp); fprintf(fp, "host: %s:%u\n", g_Dbs.host, g_Dbs.port); fprintf(fp, "user: %s\n", g_Dbs.user); - fprintf(fp, "password: %s\n", g_Dbs.password); fprintf(fp, "resultFile: %s\n", g_Dbs.resultFile); fprintf(fp, "thread num of insert data: %d\n", g_Dbs.threadCount); fprintf(fp, "thread num of create table: %d\n", g_Dbs.threadCountByCreateTbl); - + fprintf(fp, "insert interval: %d\n", g_args.insert_interval); + fprintf(fp, "number of records per req: %d\n", g_args.num_of_RPR); + fprintf(fp, "max sql length: %d\n", g_args.max_sql_len); fprintf(fp, "database count: %d\n", g_Dbs.dbCount); + for (int i = 0; i < g_Dbs.dbCount; i++) { fprintf(fp, "database[%d]:\n", i); fprintf(fp, " database[%d] name: %s\n", i, g_Dbs.db[i].dbName); @@ -1364,11 +1368,14 @@ static void printfInsertMetaToFile(FILE* fp) { } fprintf(fp, "\n"); } + SHOW_PARSE_RESULT_END_TO_FILE(fp); } static void printfQueryMeta() { + SHOW_PARSE_RESULT_START(); + printf("host: \033[33m%s:%u\033[0m\n", g_queryInfo.host, g_queryInfo.port); printf("user: \033[33m%s\033[0m\n", g_queryInfo.user); @@ -1411,11 +1418,11 @@ static void printfQueryMeta() { } printf("\n"); - SHOW_PARSE_RESULT_END(); + SHOW_PARSE_RESULT_END(); } -static char* xFormatTimestamp(char* buf, int64_t val, int precision) { +static char* formatTimestamp(char* buf, int64_t val, int precision) { time_t tt; if (precision == TSDB_TIME_PRECISION_MICRO) { tt = (time_t)(val / 1000000); @@ -1447,7 +1454,9 @@ static char* xFormatTimestamp(char* buf, int64_t val, int precision) { return buf; } -static void xDumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_t length, int precision) { +static void xDumpFieldToFile(FILE* fp, const char* val, + TAOS_FIELD* field, int32_t length, int precision) { + if (val == NULL) { fprintf(fp, "%s", TSDB_DATA_NULL_STR); return; @@ -1483,7 +1492,7 @@ static void xDumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32 fprintf(fp, "\'%s\'", buf); break; case TSDB_DATA_TYPE_TIMESTAMP: - xFormatTimestamp(buf, *(int64_t*)val, precision); + formatTimestamp(buf, *(int64_t*)val, precision); fprintf(fp, "'%s'", buf); break; default: @@ -1562,7 +1571,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) { tstrncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes); - xFormatTimestamp(dbInfos[count]->create_time, + formatTimestamp(dbInfos[count]->create_time, *(int64_t*)row[TSDB_SHOW_DB_CREATED_TIME_INDEX], TSDB_TIME_PRECISION_MILLI); dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]); From 64b8620bb393233e5d862064e9ad6a8f8d3d198b Mon Sep 17 00:00:00 2001 From: Xiaxin Li Date: Tue, 23 Mar 2021 15:28:33 +0800 Subject: [PATCH 21/31] Update README.md Add User List --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 79c140c741..b4c37f2624 100644 --- a/README.md +++ b/README.md @@ -250,3 +250,6 @@ Please follow the [contribution guidelines](CONTRIBUTING.md) to contribute to th Add WeChat “tdengine” to join the group,you can communicate with other users. +# [User List](https://github.com/taosdata/TDengine/issues/2432) + +If you are using TDengine and think that it helps you or want do some contributions to it, please add your company to to the [user list](https://github.com/taosdata/TDengine/issues/2432) to let us know your needs. From 89016ef4a49bf3abed9527859eb2fd867abec288 Mon Sep 17 00:00:00 2001 From: Xiaxin Li Date: Tue, 23 Mar 2021 15:34:39 +0800 Subject: [PATCH 22/31] Update README-CN.md Add User List --- README-CN.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README-CN.md b/README-CN.md index 9601cde3af..112ba0e4ea 100644 --- a/README-CN.md +++ b/README-CN.md @@ -263,5 +263,8 @@ TDengine 的测试框架和所有测试例全部开源。 # 成为社区贡献者 点击[这里](https://www.taosdata.com/cn/contributor/),了解如何成为 TDengine 的贡献者。 -#加入技术交流群 +# 加入技术交流群 TDengine官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小T为好友,即可入群。 + +# [谁在使用TDengine](https://github.com/taosdata/TDengine/issues/2432) +欢迎所有TDengine用户及贡献者在[这里](https://github.com/taosdata/TDengine/issues/2432)下分享您在当前工作中开发/使用TDengine的故事。 From ff5dcfddbef96f54662292c67a98cad95932b7c9 Mon Sep 17 00:00:00 2001 From: Elias Soong Date: Tue, 23 Mar 2021 15:57:26 +0800 Subject: [PATCH 23/31] [TD-2639] : fix minor typo. --- README-CN.md | 11 +++++++---- README.md | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README-CN.md b/README-CN.md index 112ba0e4ea..d4c10e71d6 100644 --- a/README-CN.md +++ b/README-CN.md @@ -258,13 +258,16 @@ TDengine 社区生态中也有一些非常友好的第三方连接器,可以 TDengine 的测试框架和所有测试例全部开源。 -点击[这里](tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md),了解如何运行测试例和添加新的测试例。 +点击 [这里](tests/How-To-Run-Test-And-How-To-Add-New-Test-Case.md),了解如何运行测试例和添加新的测试例。 # 成为社区贡献者 -点击[这里](https://www.taosdata.com/cn/contributor/),了解如何成为 TDengine 的贡献者。 + +点击 [这里](https://www.taosdata.com/cn/contributor/),了解如何成为 TDengine 的贡献者。 # 加入技术交流群 -TDengine官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小T为好友,即可入群。 + +TDengine 官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小T为好友,即可入群。 # [谁在使用TDengine](https://github.com/taosdata/TDengine/issues/2432) -欢迎所有TDengine用户及贡献者在[这里](https://github.com/taosdata/TDengine/issues/2432)下分享您在当前工作中开发/使用TDengine的故事。 + +欢迎所有 TDengine 用户及贡献者在 [这里](https://github.com/taosdata/TDengine/issues/2432) 分享您在当前工作中开发/使用 TDengine 的故事。 diff --git a/README.md b/README.md index b4c37f2624..45a955f458 100644 --- a/README.md +++ b/README.md @@ -252,4 +252,4 @@ Add WeChat “tdengine” to join the group,you can communicate with other use # [User List](https://github.com/taosdata/TDengine/issues/2432) -If you are using TDengine and think that it helps you or want do some contributions to it, please add your company to to the [user list](https://github.com/taosdata/TDengine/issues/2432) to let us know your needs. +If you are using TDengine and feel it helps or you'd like to do some contributions, please add your company to [user list](https://github.com/taosdata/TDengine/issues/2432) and let us know your needs. From a9eecfa5c1db9b857612366f965361428bf2ca00 Mon Sep 17 00:00:00 2001 From: liuyq-617 Date: Tue, 23 Mar 2021 15:59:41 +0800 Subject: [PATCH 24/31] fix --- Jenkinsfile | 5 +---- tests/test-all.sh | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index bac48115d3..e1bb27bf67 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -33,10 +33,7 @@ def abort_previous(){ milestone(buildNumber) } def pre_test(){ - script{ - abort_previous() - abortPreviousBuilds() - } + sh ''' sudo rmtaos || echo "taosd has not installed" diff --git a/tests/test-all.sh b/tests/test-all.sh index 2268037d58..b8f06d8ede 100755 --- a/tests/test-all.sh +++ b/tests/test-all.sh @@ -172,7 +172,7 @@ function runPyCaseOneByOnefq() { out_log=`tail -1 pytest-out.log ` if [[ $out_log =~ 'failed' ]];then cp -r ../../sim ~/sim_`date "+%Y_%m_%d_%H:%M:%S" ` - echo '=====================log=====================' + echo '=====================log===================== ' cat ../../sim/case.log rm -rf ../../sim/case.log dohavecore $2 From 74148ee3de731c2e132b67b62bda1fa24943102b Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 23 Mar 2021 16:44:20 +0800 Subject: [PATCH 25/31] [td-3036]: support the db sync operator. --- src/client/src/tscSQLParser.c | 11 + src/client/src/tscServer.c | 18 + src/common/inc/tcmdtype.h | 11 +- src/dnode/src/dnodeShell.c | 1 + src/inc/taosmsg.h | 3 +- src/inc/ttokendef.h | 101 +- src/mnode/src/mnodeDb.c | 6 + src/query/inc/sql.y | 3 + src/query/src/qSqlParser.c | 1 + src/query/src/qTokenizer.c | 1 + src/query/src/sql.c | 1911 +++++++++++++++++---------------- 11 files changed, 1059 insertions(+), 1008 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 402770391d..e4e0007190 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -670,7 +670,18 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) { if ((code = setKillInfo(pSql, pInfo, pInfo->type)) != TSDB_CODE_SUCCESS) { return code; } + break; + } + case TSDB_SQL_SYNC_DB_REPLICA: { + const char* msg1 = "invalid db name"; + SStrToken* pzName = taosArrayGet(pInfo->pMiscInfo->a, 0); + + assert(taosArrayGetSize(pInfo->pMiscInfo->a) == 1); + code = tNameSetDbName(&pTableMetaInfo->name, getAccountId(pSql), pzName); + if (code != TSDB_CODE_SUCCESS) { + return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1); + } break; } diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c index 31655a4b70..9cb2710060 100644 --- a/src/client/src/tscServer.c +++ b/src/client/src/tscServer.c @@ -1284,6 +1284,23 @@ int32_t tscBuildUseDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) { return TSDB_CODE_SUCCESS; } +int32_t tscBuildSyncDbReplicaMsg(SSqlObj* pSql, SSqlInfo *pInfo) { + SSqlCmd *pCmd = &pSql->cmd; + pCmd->payloadLen = sizeof(SSyncDbMsg); + + if (TSDB_CODE_SUCCESS != tscAllocPayload(pCmd, pCmd->payloadLen)) { + tscError("%p failed to malloc for query msg", pSql); + return TSDB_CODE_TSC_OUT_OF_MEMORY; + } + + SSyncDbMsg *pSyncMsg = (SSyncDbMsg *)pCmd->payload; + STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0); + tNameExtractFullName(&pTableMetaInfo->name, pSyncMsg->db); + pCmd->msgType = TSDB_MSG_TYPE_CM_SYNC_DB; + + return TSDB_CODE_SUCCESS; +} + int32_t tscBuildShowMsg(SSqlObj *pSql, SSqlInfo *pInfo) { STscObj *pObj = pSql->pTscObj; SSqlCmd *pCmd = &pSql->cmd; @@ -2559,6 +2576,7 @@ void tscInitMsgsFp() { tscBuildMsg[TSDB_SQL_DROP_USER] = tscBuildDropUserAcctMsg; tscBuildMsg[TSDB_SQL_DROP_ACCT] = tscBuildDropUserAcctMsg; tscBuildMsg[TSDB_SQL_DROP_DB] = tscBuildDropDbMsg; + tscBuildMsg[TSDB_SQL_SYNC_DB_REPLICA] = tscBuildSyncDbReplicaMsg; tscBuildMsg[TSDB_SQL_DROP_TABLE] = tscBuildDropTableMsg; tscBuildMsg[TSDB_SQL_ALTER_USER] = tscBuildUserMsg; tscBuildMsg[TSDB_SQL_CREATE_DNODE] = tscBuildCreateDnodeMsg; diff --git a/src/common/inc/tcmdtype.h b/src/common/inc/tcmdtype.h index bec8590536..be16e80124 100644 --- a/src/common/inc/tcmdtype.h +++ b/src/common/inc/tcmdtype.h @@ -51,6 +51,7 @@ enum { TSDB_DEFINE_SQL_TYPE( TSDB_SQL_ALTER_ACCT, "alter-acct" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_ALTER_TABLE, "alter-table" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_ALTER_DB, "alter-db" ) + TSDB_DEFINE_SQL_TYPE(TSDB_SQL_SYNC_DB_REPLICA, "sync db-replica") TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_MNODE, "create-mnode" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_MNODE, "drop-mnode" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_DNODE, "create-dnode" ) @@ -87,13 +88,13 @@ enum { */ TSDB_DEFINE_SQL_TYPE( TSDB_SQL_RETRIEVE_EMPTY_RESULT, "retrieve-empty-result" ) - TSDB_DEFINE_SQL_TYPE( TSDB_SQL_RESET_CACHE, "reset-cache" ) - TSDB_DEFINE_SQL_TYPE( TSDB_SQL_SERV_STATUS, "serv-status" ) - TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CURRENT_DB, "current-db" ) + TSDB_DEFINE_SQL_TYPE( TSDB_SQL_RESET_CACHE, "reset-cache" ) + TSDB_DEFINE_SQL_TYPE( TSDB_SQL_SERV_STATUS, "serv-status" ) + TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CURRENT_DB, "current-db" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_SERV_VERSION, "serv-version" ) - TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CLI_VERSION, "cli-version" ) + TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CLI_VERSION, "cli-version" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CURRENT_USER, "current-user ") - TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CFG_LOCAL, "cfg-local" ) + TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CFG_LOCAL, "cfg-local" ) TSDB_DEFINE_SQL_TYPE( TSDB_SQL_MAX, "max" ) }; diff --git a/src/dnode/src/dnodeShell.c b/src/dnode/src/dnodeShell.c index 60d9c38c05..50343cfd32 100644 --- a/src/dnode/src/dnodeShell.c +++ b/src/dnode/src/dnodeShell.c @@ -49,6 +49,7 @@ int32_t dnodeInitShell() { dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_DB] = dnodeDispatchToMWriteQueue; dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_TP] = dnodeDispatchToMWriteQueue; dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_DB] = dnodeDispatchToMWriteQueue; + dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_SYNC_DB] = dnodeDispatchToMWriteQueue; dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_TP] = dnodeDispatchToMWriteQueue; dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_DB] = dnodeDispatchToMWriteQueue; dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_TP] = dnodeDispatchToMWriteQueue; diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h index 00f64eba77..b9f45bd0d9 100644 --- a/src/inc/taosmsg.h +++ b/src/inc/taosmsg.h @@ -77,6 +77,7 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_DB, "create-db" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_DB, "drop-db" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_USE_DB, "use-db" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_DB, "alter-db" ) +TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_SYNC_DB, "sync-db-replica" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_TABLE, "create-table" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_TABLE, "drop-table" ) TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_TABLE, "alter-table" ) @@ -574,7 +575,7 @@ typedef struct { typedef struct { char db[TSDB_TABLE_FNAME_LEN]; uint8_t ignoreNotExists; -} SDropDbMsg, SUseDbMsg; +} SDropDbMsg, SUseDbMsg, SSyncDbMsg; // IMPORTANT: sizeof(SVnodeStatisticInfo) should not exceed // TSDB_FILE_HEADER_LEN/4 - TSDB_FILE_HEADER_VERSION_SIZE diff --git a/src/inc/ttokendef.h b/src/inc/ttokendef.h index 91c08fa26a..e9f95660f7 100644 --- a/src/inc/ttokendef.h +++ b/src/inc/ttokendef.h @@ -152,56 +152,57 @@ #define TK_NOW 133 #define TK_RESET 134 #define TK_QUERY 135 -#define TK_ADD 136 -#define TK_COLUMN 137 -#define TK_TAG 138 -#define TK_CHANGE 139 -#define TK_SET 140 -#define TK_KILL 141 -#define TK_CONNECTION 142 -#define TK_STREAM 143 -#define TK_COLON 144 -#define TK_ABORT 145 -#define TK_AFTER 146 -#define TK_ATTACH 147 -#define TK_BEFORE 148 -#define TK_BEGIN 149 -#define TK_CASCADE 150 -#define TK_CLUSTER 151 -#define TK_CONFLICT 152 -#define TK_COPY 153 -#define TK_DEFERRED 154 -#define TK_DELIMITERS 155 -#define TK_DETACH 156 -#define TK_EACH 157 -#define TK_END 158 -#define TK_EXPLAIN 159 -#define TK_FAIL 160 -#define TK_FOR 161 -#define TK_IGNORE 162 -#define TK_IMMEDIATE 163 -#define TK_INITIALLY 164 -#define TK_INSTEAD 165 -#define TK_MATCH 166 -#define TK_KEY 167 -#define TK_OF 168 -#define TK_RAISE 169 -#define TK_REPLACE 170 -#define TK_RESTRICT 171 -#define TK_ROW 172 -#define TK_STATEMENT 173 -#define TK_TRIGGER 174 -#define TK_VIEW 175 -#define TK_SEMI 176 -#define TK_NONE 177 -#define TK_PREV 178 -#define TK_LINEAR 179 -#define TK_IMPORT 180 -#define TK_TBNAME 181 -#define TK_JOIN 182 -#define TK_INSERT 183 -#define TK_INTO 184 -#define TK_VALUES 185 +#define TK_SYNCDB 136 +#define TK_ADD 137 +#define TK_COLUMN 138 +#define TK_TAG 139 +#define TK_CHANGE 140 +#define TK_SET 141 +#define TK_KILL 142 +#define TK_CONNECTION 143 +#define TK_STREAM 144 +#define TK_COLON 145 +#define TK_ABORT 146 +#define TK_AFTER 147 +#define TK_ATTACH 148 +#define TK_BEFORE 149 +#define TK_BEGIN 150 +#define TK_CASCADE 151 +#define TK_CLUSTER 152 +#define TK_CONFLICT 153 +#define TK_COPY 154 +#define TK_DEFERRED 155 +#define TK_DELIMITERS 156 +#define TK_DETACH 157 +#define TK_EACH 158 +#define TK_END 159 +#define TK_EXPLAIN 160 +#define TK_FAIL 161 +#define TK_FOR 162 +#define TK_IGNORE 163 +#define TK_IMMEDIATE 164 +#define TK_INITIALLY 165 +#define TK_INSTEAD 166 +#define TK_MATCH 167 +#define TK_KEY 168 +#define TK_OF 169 +#define TK_RAISE 170 +#define TK_REPLACE 171 +#define TK_RESTRICT 172 +#define TK_ROW 173 +#define TK_STATEMENT 174 +#define TK_TRIGGER 175 +#define TK_VIEW 176 +#define TK_SEMI 177 +#define TK_NONE 178 +#define TK_PREV 179 +#define TK_LINEAR 180 +#define TK_IMPORT 181 +#define TK_TBNAME 182 +#define TK_JOIN 183 +#define TK_INSERT 184 +#define TK_INTO 185 +#define TK_VALUES 186 #define TK_SPACE 300 diff --git a/src/mnode/src/mnodeDb.c b/src/mnode/src/mnodeDb.c index b1c88ca718..0a82b8f27c 100644 --- a/src/mnode/src/mnodeDb.c +++ b/src/mnode/src/mnodeDb.c @@ -50,6 +50,7 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *pConn); static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg); static int32_t mnodeProcessDropDbMsg(SMnodeMsg *pMsg); +static int32_t mnodeProcessSyncDbMsg(SMnodeMsg *pMsg); int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg); #ifndef _TOPIC @@ -178,6 +179,7 @@ int32_t mnodeInitDbs() { mnodeAddWriteMsgHandle(TSDB_MSG_TYPE_CM_CREATE_DB, mnodeProcessCreateDbMsg); mnodeAddWriteMsgHandle(TSDB_MSG_TYPE_CM_ALTER_DB, mnodeProcessAlterDbMsg); mnodeAddWriteMsgHandle(TSDB_MSG_TYPE_CM_DROP_DB, mnodeProcessDropDbMsg); + mnodeAddWriteMsgHandle(TSDB_MSG_TYPE_CM_SYNC_DB, mnodeProcessSyncDbMsg); mnodeAddShowMetaHandle(TSDB_MGMT_TABLE_DB, mnodeGetDbMeta); mnodeAddShowRetrieveHandle(TSDB_MGMT_TABLE_DB, mnodeRetrieveDbs); mnodeAddShowFreeIterHandle(TSDB_MGMT_TABLE_DB, mnodeCancelGetNextDb); @@ -1184,6 +1186,10 @@ static int32_t mnodeProcessDropDbMsg(SMnodeMsg *pMsg) { return mnodeDropDb(pMsg); } +static int32_t mnodeProcessSyncDbMsg(SMnodeMsg *pMsg) { + return 0; +} + void mnodeDropAllDbs(SAcctObj *pAcct) { int32_t numOfDbs = 0; SDbObj *pDb = NULL; diff --git a/src/query/inc/sql.y b/src/query/inc/sql.y index 7f6aa1ca5f..b026f90235 100644 --- a/src/query/inc/sql.y +++ b/src/query/inc/sql.y @@ -726,6 +726,9 @@ expritem(A) ::= . {A = 0;} ///////////////////////////////////reset query cache////////////////////////////////////// cmd ::= RESET QUERY CACHE. { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} +///////////////////////////////////sync replica database////////////////////////////////// +cmd ::= SYNCDB ids(X) REPLICA.{ setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &X);} + ///////////////////////////////////ALTER TABLE statement////////////////////////////////// cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). { X.n += F.n; diff --git a/src/query/src/qSqlParser.c b/src/query/src/qSqlParser.c index e76b78c523..a5fc45fa9c 100644 --- a/src/query/src/qSqlParser.c +++ b/src/query/src/qSqlParser.c @@ -911,6 +911,7 @@ void setDCLSqlElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) { SStrToken *pToken = va_arg(va, SStrToken *); taosArrayPush(pInfo->pMiscInfo->a, pToken); } + va_end(va); } diff --git a/src/query/src/qTokenizer.c b/src/query/src/qTokenizer.c index 013eaaf2a9..52b2fdbb82 100644 --- a/src/query/src/qTokenizer.c +++ b/src/query/src/qTokenizer.c @@ -100,6 +100,7 @@ static SKeyword keywordTable[] = { {"ACCOUNT", TK_ACCOUNT}, {"USE", TK_USE}, {"DESCRIBE", TK_DESCRIBE}, + {"SYNCDB", TK_SYNCDB}, {"ALTER", TK_ALTER}, {"PASS", TK_PASS}, {"PRIVILEGE", TK_PRIVILEGE}, diff --git a/src/query/src/sql.c b/src/query/src/sql.c index 98304d636f..df7aaaf001 100644 --- a/src/query/src/sql.c +++ b/src/query/src/sql.c @@ -97,28 +97,28 @@ #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 263 +#define YYNOCODE 264 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SStrToken typedef union { int yyinit; ParseTOKENTYPE yy0; - SLimitVal yy18; - SFromInfo* yy70; - SSessionWindowVal yy87; - SCreateDbInfo yy94; - int yy116; - SSubclauseInfo* yy141; - tSqlExpr* yy170; - SCreateTableSql* yy194; - tVariant yy218; - SIntervalVal yy220; - SCreatedTableInfo yy252; - SQuerySqlNode* yy254; - SCreateAcctInfo yy419; - SArray* yy429; - TAOS_FIELD yy451; - int64_t yy481; + SCreateTableSql* yy14; + int yy20; + tSqlExpr* yy118; + SArray* yy159; + SIntervalVal yy184; + SCreatedTableInfo yy206; + SSessionWindowVal yy249; + SQuerySqlNode* yy272; + int64_t yy317; + SCreateDbInfo yy322; + SCreateAcctInfo yy351; + SSubclauseInfo* yy391; + TAOS_FIELD yy407; + SLimitVal yy440; + tVariant yy488; + SFromInfo* yy514; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -128,17 +128,17 @@ typedef union { #define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo #define ParseARG_STORE yypParser->pInfo = pInfo #define YYFALLBACK 1 -#define YYNSTATE 313 -#define YYNRULE 265 -#define YYNTOKEN 186 -#define YY_MAX_SHIFT 312 -#define YY_MIN_SHIFTREDUCE 502 -#define YY_MAX_SHIFTREDUCE 766 -#define YY_ERROR_ACTION 767 -#define YY_ACCEPT_ACTION 768 -#define YY_NO_ACTION 769 -#define YY_MIN_REDUCE 770 -#define YY_MAX_REDUCE 1034 +#define YYNSTATE 315 +#define YYNRULE 266 +#define YYNTOKEN 187 +#define YY_MAX_SHIFT 314 +#define YY_MIN_SHIFTREDUCE 505 +#define YY_MAX_SHIFTREDUCE 770 +#define YY_ERROR_ACTION 771 +#define YY_ACCEPT_ACTION 772 +#define YY_NO_ACTION 773 +#define YY_MIN_REDUCE 774 +#define YY_MAX_REDUCE 1039 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -204,259 +204,259 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (676) +#define YY_ACTTAB_COUNT (679) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 910, 549, 201, 310, 205, 139, 937, 3, 166, 550, - /* 10 */ 768, 312, 17, 47, 48, 139, 51, 52, 30, 180, - /* 20 */ 213, 41, 180, 50, 260, 55, 53, 57, 54, 1016, - /* 30 */ 916, 208, 1017, 46, 45, 178, 180, 44, 43, 42, - /* 40 */ 47, 48, 219, 51, 52, 207, 1017, 213, 41, 549, - /* 50 */ 50, 260, 55, 53, 57, 54, 928, 550, 184, 202, - /* 60 */ 46, 45, 913, 218, 44, 43, 42, 48, 934, 51, - /* 70 */ 52, 240, 968, 213, 41, 549, 50, 260, 55, 53, - /* 80 */ 57, 54, 969, 550, 255, 220, 46, 45, 276, 916, - /* 90 */ 44, 43, 42, 503, 504, 505, 506, 507, 508, 509, - /* 100 */ 510, 511, 512, 513, 514, 515, 311, 628, 84, 230, - /* 110 */ 69, 916, 1013, 47, 48, 30, 51, 52, 296, 30, - /* 120 */ 213, 41, 549, 50, 260, 55, 53, 57, 54, 64, - /* 130 */ 550, 306, 714, 46, 45, 286, 285, 44, 43, 42, - /* 140 */ 47, 49, 904, 51, 52, 224, 1012, 213, 41, 65, - /* 150 */ 50, 260, 55, 53, 57, 54, 216, 916, 902, 913, - /* 160 */ 46, 45, 222, 912, 44, 43, 42, 23, 274, 305, - /* 170 */ 304, 273, 272, 271, 303, 270, 302, 301, 300, 269, - /* 180 */ 299, 298, 876, 139, 864, 865, 866, 867, 868, 869, - /* 190 */ 870, 871, 872, 873, 874, 875, 877, 878, 51, 52, - /* 200 */ 815, 139, 213, 41, 165, 50, 260, 55, 53, 57, - /* 210 */ 54, 1011, 18, 81, 226, 46, 45, 283, 282, 44, - /* 220 */ 43, 42, 212, 727, 928, 25, 718, 68, 721, 189, - /* 230 */ 724, 223, 212, 727, 278, 190, 718, 276, 721, 203, - /* 240 */ 724, 117, 116, 188, 899, 900, 29, 903, 257, 233, - /* 250 */ 77, 44, 43, 42, 209, 210, 237, 236, 259, 901, - /* 260 */ 23, 197, 305, 304, 209, 210, 225, 303, 78, 302, - /* 270 */ 301, 300, 73, 299, 298, 884, 104, 30, 882, 883, - /* 280 */ 36, 296, 720, 885, 723, 887, 888, 886, 667, 889, - /* 290 */ 890, 55, 53, 57, 54, 132, 309, 308, 125, 46, - /* 300 */ 45, 914, 239, 44, 43, 42, 102, 107, 30, 196, - /* 310 */ 664, 73, 96, 106, 112, 115, 105, 24, 217, 36, - /* 320 */ 674, 913, 109, 5, 155, 56, 261, 79, 243, 33, - /* 330 */ 154, 91, 86, 90, 30, 56, 173, 169, 726, 30, - /* 340 */ 70, 30, 171, 168, 120, 119, 118, 12, 726, 279, - /* 350 */ 211, 83, 913, 80, 725, 824, 46, 45, 245, 165, - /* 360 */ 44, 43, 42, 198, 725, 816, 671, 652, 182, 165, - /* 370 */ 649, 719, 650, 722, 651, 280, 1, 153, 913, 716, - /* 380 */ 284, 61, 288, 913, 183, 913, 241, 695, 696, 680, - /* 390 */ 31, 686, 687, 134, 6, 60, 20, 747, 227, 228, - /* 400 */ 728, 19, 638, 62, 19, 263, 31, 640, 265, 31, - /* 410 */ 639, 60, 82, 28, 60, 717, 266, 95, 94, 14, - /* 420 */ 13, 67, 730, 627, 185, 101, 100, 179, 16, 15, - /* 430 */ 979, 656, 654, 657, 655, 114, 113, 130, 128, 186, - /* 440 */ 187, 193, 194, 192, 177, 191, 181, 1026, 915, 978, - /* 450 */ 214, 975, 974, 215, 287, 131, 39, 936, 944, 946, - /* 460 */ 133, 137, 929, 244, 129, 150, 961, 960, 911, 909, - /* 470 */ 149, 679, 246, 151, 204, 152, 653, 250, 258, 827, - /* 480 */ 140, 66, 141, 268, 37, 63, 175, 926, 34, 277, - /* 490 */ 248, 823, 253, 142, 1031, 58, 92, 1030, 1028, 256, - /* 500 */ 156, 143, 281, 1025, 98, 1024, 1022, 254, 157, 845, - /* 510 */ 35, 32, 38, 252, 176, 812, 108, 810, 110, 111, - /* 520 */ 808, 807, 229, 167, 805, 804, 803, 802, 801, 800, - /* 530 */ 170, 172, 797, 795, 793, 791, 789, 174, 247, 242, - /* 540 */ 71, 74, 249, 962, 40, 297, 103, 289, 290, 291, - /* 550 */ 292, 293, 294, 295, 199, 221, 307, 766, 231, 232, - /* 560 */ 267, 765, 234, 235, 764, 200, 238, 87, 88, 752, - /* 570 */ 195, 243, 75, 8, 262, 806, 72, 659, 681, 135, - /* 580 */ 76, 121, 159, 846, 160, 161, 158, 162, 164, 122, - /* 590 */ 163, 799, 2, 123, 880, 124, 798, 790, 684, 144, - /* 600 */ 147, 145, 146, 4, 136, 148, 892, 206, 251, 26, - /* 610 */ 688, 138, 9, 10, 729, 27, 7, 11, 21, 731, - /* 620 */ 22, 85, 264, 591, 587, 83, 585, 584, 583, 580, - /* 630 */ 553, 275, 93, 89, 31, 630, 59, 97, 629, 99, - /* 640 */ 626, 575, 573, 565, 571, 567, 569, 563, 561, 594, - /* 650 */ 593, 592, 590, 589, 588, 586, 582, 581, 60, 551, - /* 660 */ 519, 517, 770, 769, 769, 769, 769, 769, 769, 769, - /* 670 */ 769, 769, 769, 769, 126, 127, + /* 0 */ 133, 552, 202, 312, 206, 140, 941, 17, 85, 553, + /* 10 */ 772, 314, 179, 47, 48, 140, 51, 52, 30, 181, + /* 20 */ 214, 41, 181, 50, 262, 55, 53, 57, 54, 1020, + /* 30 */ 920, 209, 1021, 46, 45, 185, 181, 44, 43, 42, + /* 40 */ 47, 48, 908, 51, 52, 208, 1021, 214, 41, 552, + /* 50 */ 50, 262, 55, 53, 57, 54, 932, 553, 1017, 203, + /* 60 */ 46, 45, 917, 247, 44, 43, 42, 48, 938, 51, + /* 70 */ 52, 242, 972, 214, 41, 552, 50, 262, 55, 53, + /* 80 */ 57, 54, 973, 553, 257, 278, 46, 45, 298, 225, + /* 90 */ 44, 43, 42, 506, 507, 508, 509, 510, 511, 512, + /* 100 */ 513, 514, 515, 516, 517, 518, 313, 631, 1016, 231, + /* 110 */ 70, 552, 30, 47, 48, 1015, 51, 52, 819, 553, + /* 120 */ 214, 41, 166, 50, 262, 55, 53, 57, 54, 44, + /* 130 */ 43, 42, 717, 46, 45, 288, 287, 44, 43, 42, + /* 140 */ 47, 49, 198, 51, 52, 140, 140, 214, 41, 234, + /* 150 */ 50, 262, 55, 53, 57, 54, 916, 238, 237, 227, + /* 160 */ 46, 45, 285, 284, 44, 43, 42, 23, 276, 307, + /* 170 */ 306, 275, 274, 273, 305, 272, 304, 303, 302, 271, + /* 180 */ 301, 300, 880, 30, 868, 869, 870, 871, 872, 873, + /* 190 */ 874, 875, 876, 877, 878, 879, 881, 882, 51, 52, + /* 200 */ 18, 30, 214, 41, 906, 50, 262, 55, 53, 57, + /* 210 */ 54, 259, 79, 78, 25, 46, 45, 190, 199, 44, + /* 220 */ 43, 42, 82, 191, 217, 28, 30, 917, 268, 118, + /* 230 */ 117, 189, 12, 213, 730, 932, 84, 721, 81, 724, + /* 240 */ 74, 727, 218, 213, 730, 917, 80, 721, 36, 724, + /* 250 */ 204, 727, 30, 903, 904, 29, 907, 46, 45, 71, + /* 260 */ 74, 44, 43, 42, 223, 210, 211, 281, 36, 261, + /* 270 */ 917, 23, 914, 307, 306, 210, 211, 723, 305, 726, + /* 280 */ 304, 303, 302, 278, 301, 300, 311, 310, 126, 677, + /* 290 */ 241, 888, 68, 282, 886, 887, 917, 245, 197, 889, + /* 300 */ 219, 891, 892, 890, 670, 893, 894, 55, 53, 57, + /* 310 */ 54, 1, 154, 263, 220, 46, 45, 30, 221, 44, + /* 320 */ 43, 42, 105, 103, 108, 308, 920, 298, 69, 97, + /* 330 */ 107, 113, 116, 106, 224, 655, 56, 280, 652, 110, + /* 340 */ 653, 226, 654, 30, 920, 667, 56, 5, 156, 729, + /* 350 */ 183, 920, 24, 33, 155, 92, 87, 91, 286, 729, + /* 360 */ 905, 917, 174, 170, 719, 728, 228, 229, 172, 169, + /* 370 */ 121, 120, 119, 828, 820, 728, 918, 166, 166, 3, + /* 380 */ 167, 243, 674, 212, 290, 31, 683, 917, 698, 699, + /* 390 */ 135, 689, 690, 750, 731, 60, 20, 19, 19, 722, + /* 400 */ 720, 725, 61, 64, 641, 184, 265, 643, 31, 733, + /* 410 */ 31, 60, 267, 642, 115, 114, 83, 60, 96, 95, + /* 420 */ 186, 14, 13, 65, 62, 180, 187, 6, 102, 101, + /* 430 */ 67, 188, 630, 16, 15, 659, 657, 660, 658, 131, + /* 440 */ 129, 194, 195, 193, 656, 178, 192, 182, 1031, 919, + /* 450 */ 983, 239, 982, 215, 979, 978, 216, 289, 39, 132, + /* 460 */ 940, 948, 950, 130, 134, 933, 138, 246, 965, 964, + /* 470 */ 151, 915, 150, 682, 248, 913, 205, 299, 104, 884, + /* 480 */ 160, 260, 152, 153, 145, 143, 141, 831, 270, 66, + /* 490 */ 250, 930, 63, 255, 37, 176, 34, 279, 58, 142, + /* 500 */ 827, 1036, 93, 1035, 1033, 157, 283, 1030, 99, 1029, + /* 510 */ 1027, 158, 849, 35, 258, 32, 38, 256, 177, 816, + /* 520 */ 109, 814, 111, 112, 254, 812, 811, 230, 168, 252, + /* 530 */ 809, 808, 807, 806, 805, 804, 171, 173, 801, 799, + /* 540 */ 797, 795, 793, 175, 249, 244, 72, 75, 40, 251, + /* 550 */ 966, 291, 292, 293, 294, 295, 296, 297, 309, 200, + /* 560 */ 222, 770, 269, 232, 233, 769, 235, 201, 196, 88, + /* 570 */ 89, 236, 768, 756, 755, 240, 245, 8, 810, 662, + /* 580 */ 122, 161, 123, 165, 163, 803, 850, 159, 162, 164, + /* 590 */ 124, 802, 73, 125, 794, 4, 2, 264, 76, 684, + /* 600 */ 136, 137, 687, 77, 144, 148, 146, 147, 149, 896, + /* 610 */ 207, 253, 26, 691, 139, 27, 9, 732, 10, 7, + /* 620 */ 734, 11, 21, 266, 22, 86, 594, 84, 590, 588, + /* 630 */ 587, 586, 583, 556, 277, 31, 59, 90, 633, 94, + /* 640 */ 632, 629, 578, 98, 100, 576, 568, 574, 570, 572, + /* 650 */ 566, 564, 597, 596, 595, 593, 592, 591, 589, 585, + /* 660 */ 584, 60, 554, 522, 520, 774, 773, 773, 773, 773, + /* 670 */ 773, 773, 773, 773, 773, 773, 773, 127, 128, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 190, 1, 189, 190, 209, 190, 190, 193, 194, 9, - /* 10 */ 187, 188, 251, 13, 14, 190, 16, 17, 190, 251, - /* 20 */ 20, 21, 251, 23, 24, 25, 26, 27, 28, 261, - /* 30 */ 235, 260, 261, 33, 34, 251, 251, 37, 38, 39, - /* 40 */ 13, 14, 232, 16, 17, 260, 261, 20, 21, 1, - /* 50 */ 23, 24, 25, 26, 27, 28, 233, 9, 251, 231, - /* 60 */ 33, 34, 234, 209, 37, 38, 39, 14, 252, 16, - /* 70 */ 17, 248, 257, 20, 21, 1, 23, 24, 25, 26, - /* 80 */ 27, 28, 257, 9, 259, 209, 33, 34, 79, 235, + /* 0 */ 191, 1, 190, 191, 210, 191, 191, 252, 197, 9, + /* 10 */ 188, 189, 252, 13, 14, 191, 16, 17, 191, 252, + /* 20 */ 20, 21, 252, 23, 24, 25, 26, 27, 28, 262, + /* 30 */ 236, 261, 262, 33, 34, 252, 252, 37, 38, 39, + /* 40 */ 13, 14, 231, 16, 17, 261, 262, 20, 21, 1, + /* 50 */ 23, 24, 25, 26, 27, 28, 234, 9, 252, 232, + /* 60 */ 33, 34, 235, 254, 37, 38, 39, 14, 253, 16, + /* 70 */ 17, 249, 258, 20, 21, 1, 23, 24, 25, 26, + /* 80 */ 27, 28, 258, 9, 260, 79, 33, 34, 81, 67, /* 90 */ 37, 38, 39, 45, 46, 47, 48, 49, 50, 51, - /* 100 */ 52, 53, 54, 55, 56, 57, 58, 5, 196, 61, - /* 110 */ 110, 235, 251, 13, 14, 190, 16, 17, 81, 190, - /* 120 */ 20, 21, 1, 23, 24, 25, 26, 27, 28, 109, - /* 130 */ 9, 209, 105, 33, 34, 33, 34, 37, 38, 39, - /* 140 */ 13, 14, 230, 16, 17, 67, 251, 20, 21, 129, - /* 150 */ 23, 24, 25, 26, 27, 28, 231, 235, 0, 234, - /* 160 */ 33, 34, 67, 234, 37, 38, 39, 88, 89, 90, + /* 100 */ 52, 53, 54, 55, 56, 57, 58, 5, 252, 61, + /* 110 */ 110, 1, 191, 13, 14, 252, 16, 17, 196, 9, + /* 120 */ 20, 21, 200, 23, 24, 25, 26, 27, 28, 37, + /* 130 */ 38, 39, 105, 33, 34, 33, 34, 37, 38, 39, + /* 140 */ 13, 14, 252, 16, 17, 191, 191, 20, 21, 135, + /* 150 */ 23, 24, 25, 26, 27, 28, 235, 143, 144, 137, + /* 160 */ 33, 34, 140, 141, 37, 38, 39, 88, 89, 90, /* 170 */ 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - /* 180 */ 101, 102, 208, 190, 210, 211, 212, 213, 214, 215, - /* 190 */ 216, 217, 218, 219, 220, 221, 222, 223, 16, 17, - /* 200 */ 195, 190, 20, 21, 199, 23, 24, 25, 26, 27, - /* 210 */ 28, 251, 44, 196, 136, 33, 34, 139, 140, 37, - /* 220 */ 38, 39, 1, 2, 233, 104, 5, 196, 7, 61, - /* 230 */ 9, 136, 1, 2, 139, 67, 5, 79, 7, 248, - /* 240 */ 9, 73, 74, 75, 227, 228, 229, 230, 255, 135, - /* 250 */ 257, 37, 38, 39, 33, 34, 142, 143, 37, 228, - /* 260 */ 88, 251, 90, 91, 33, 34, 190, 95, 257, 97, - /* 270 */ 98, 99, 104, 101, 102, 208, 76, 190, 211, 212, - /* 280 */ 112, 81, 5, 216, 7, 218, 219, 220, 37, 222, - /* 290 */ 223, 25, 26, 27, 28, 190, 64, 65, 66, 33, - /* 300 */ 34, 225, 134, 37, 38, 39, 62, 63, 190, 141, - /* 310 */ 109, 104, 68, 69, 70, 71, 72, 116, 231, 112, - /* 320 */ 105, 234, 78, 62, 63, 104, 15, 236, 113, 68, - /* 330 */ 69, 70, 71, 72, 190, 104, 62, 63, 117, 190, - /* 340 */ 249, 190, 68, 69, 70, 71, 72, 104, 117, 231, - /* 350 */ 60, 108, 234, 110, 133, 195, 33, 34, 253, 199, - /* 360 */ 37, 38, 39, 251, 133, 195, 115, 2, 251, 199, - /* 370 */ 5, 5, 7, 7, 9, 231, 197, 198, 234, 1, - /* 380 */ 231, 109, 231, 234, 251, 234, 105, 124, 125, 105, - /* 390 */ 109, 105, 105, 109, 104, 109, 109, 105, 33, 34, - /* 400 */ 105, 109, 105, 131, 109, 105, 109, 105, 105, 109, - /* 410 */ 105, 109, 109, 104, 109, 37, 107, 137, 138, 137, - /* 420 */ 138, 104, 111, 106, 251, 137, 138, 251, 137, 138, - /* 430 */ 226, 5, 5, 7, 7, 76, 77, 62, 63, 251, - /* 440 */ 251, 251, 251, 251, 251, 251, 251, 235, 235, 226, - /* 450 */ 226, 226, 226, 226, 226, 190, 250, 190, 190, 190, - /* 460 */ 190, 190, 233, 233, 60, 190, 258, 258, 233, 190, - /* 470 */ 237, 117, 254, 190, 254, 190, 111, 119, 122, 190, - /* 480 */ 246, 128, 245, 190, 190, 130, 190, 247, 190, 190, - /* 490 */ 254, 190, 254, 244, 190, 127, 190, 190, 190, 126, - /* 500 */ 190, 243, 190, 190, 190, 190, 190, 121, 190, 190, - /* 510 */ 190, 190, 190, 120, 190, 190, 190, 190, 190, 190, - /* 520 */ 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - /* 530 */ 190, 190, 190, 190, 190, 190, 190, 190, 118, 191, - /* 540 */ 191, 191, 191, 191, 132, 103, 87, 86, 50, 83, - /* 550 */ 85, 54, 84, 82, 191, 191, 79, 5, 144, 5, - /* 560 */ 191, 5, 144, 5, 5, 191, 135, 196, 196, 89, - /* 570 */ 191, 113, 109, 104, 107, 191, 114, 105, 105, 104, - /* 580 */ 104, 192, 205, 207, 201, 204, 206, 202, 200, 192, - /* 590 */ 203, 191, 197, 192, 224, 192, 191, 191, 105, 242, - /* 600 */ 239, 241, 240, 193, 109, 238, 224, 1, 104, 109, - /* 610 */ 105, 104, 123, 123, 105, 109, 104, 104, 104, 111, - /* 620 */ 104, 76, 107, 9, 5, 108, 5, 5, 5, 5, - /* 630 */ 80, 15, 138, 76, 109, 5, 16, 138, 5, 138, - /* 640 */ 105, 5, 5, 5, 5, 5, 5, 5, 5, 5, - /* 650 */ 5, 5, 5, 5, 5, 5, 5, 5, 109, 80, - /* 660 */ 60, 59, 0, 262, 262, 262, 262, 262, 262, 262, - /* 670 */ 262, 262, 262, 262, 21, 21, 262, 262, 262, 262, - /* 680 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 690 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 700 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 710 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 720 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 730 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 740 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 750 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 760 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 770 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 780 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 790 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 800 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 810 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 820 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 830 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 840 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 850 */ 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, - /* 860 */ 262, 262, + /* 180 */ 101, 102, 209, 191, 211, 212, 213, 214, 215, 216, + /* 190 */ 217, 218, 219, 220, 221, 222, 223, 224, 16, 17, + /* 200 */ 44, 191, 20, 21, 0, 23, 24, 25, 26, 27, + /* 210 */ 28, 256, 258, 258, 104, 33, 34, 61, 252, 37, + /* 220 */ 38, 39, 197, 67, 232, 104, 191, 235, 107, 73, + /* 230 */ 74, 75, 104, 1, 2, 234, 108, 5, 110, 7, + /* 240 */ 104, 9, 232, 1, 2, 235, 237, 5, 112, 7, + /* 250 */ 249, 9, 191, 228, 229, 230, 231, 33, 34, 250, + /* 260 */ 104, 37, 38, 39, 67, 33, 34, 232, 112, 37, + /* 270 */ 235, 88, 191, 90, 91, 33, 34, 5, 95, 7, + /* 280 */ 97, 98, 99, 79, 101, 102, 64, 65, 66, 105, + /* 290 */ 134, 209, 136, 232, 212, 213, 235, 113, 142, 217, + /* 300 */ 210, 219, 220, 221, 37, 223, 224, 25, 26, 27, + /* 310 */ 28, 198, 199, 15, 233, 33, 34, 191, 210, 37, + /* 320 */ 38, 39, 76, 62, 63, 210, 236, 81, 197, 68, + /* 330 */ 69, 70, 71, 72, 137, 2, 104, 140, 5, 78, + /* 340 */ 7, 191, 9, 191, 236, 109, 104, 62, 63, 117, + /* 350 */ 252, 236, 116, 68, 69, 70, 71, 72, 232, 117, + /* 360 */ 229, 235, 62, 63, 1, 133, 33, 34, 68, 69, + /* 370 */ 70, 71, 72, 196, 196, 133, 226, 200, 200, 194, + /* 380 */ 195, 105, 115, 60, 232, 109, 105, 235, 124, 125, + /* 390 */ 109, 105, 105, 105, 105, 109, 109, 109, 109, 5, + /* 400 */ 37, 7, 109, 109, 105, 252, 105, 105, 109, 111, + /* 410 */ 109, 109, 105, 105, 76, 77, 109, 109, 138, 139, + /* 420 */ 252, 138, 139, 129, 131, 252, 252, 104, 138, 139, + /* 430 */ 104, 252, 106, 138, 139, 5, 5, 7, 7, 62, + /* 440 */ 63, 252, 252, 252, 111, 252, 252, 252, 236, 236, + /* 450 */ 227, 191, 227, 227, 227, 227, 227, 227, 251, 191, + /* 460 */ 191, 191, 191, 60, 191, 234, 191, 234, 259, 259, + /* 470 */ 191, 234, 238, 117, 255, 191, 255, 103, 87, 225, + /* 480 */ 206, 122, 191, 191, 243, 245, 247, 191, 191, 128, + /* 490 */ 255, 248, 130, 255, 191, 191, 191, 191, 127, 246, + /* 500 */ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + /* 510 */ 191, 191, 191, 191, 126, 191, 191, 121, 191, 191, + /* 520 */ 191, 191, 191, 191, 120, 191, 191, 191, 191, 119, + /* 530 */ 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, + /* 540 */ 191, 191, 191, 191, 118, 192, 192, 192, 132, 192, + /* 550 */ 192, 86, 50, 83, 85, 54, 84, 82, 79, 192, + /* 560 */ 192, 5, 192, 145, 5, 5, 145, 192, 192, 197, + /* 570 */ 197, 5, 5, 90, 89, 135, 113, 104, 192, 105, + /* 580 */ 193, 202, 193, 201, 203, 192, 208, 207, 205, 204, + /* 590 */ 193, 192, 114, 193, 192, 194, 198, 107, 109, 105, + /* 600 */ 104, 109, 105, 104, 244, 240, 242, 241, 239, 225, + /* 610 */ 1, 104, 109, 105, 104, 109, 123, 105, 123, 104, + /* 620 */ 111, 104, 104, 107, 104, 76, 9, 108, 5, 5, + /* 630 */ 5, 5, 5, 80, 15, 109, 16, 76, 5, 139, + /* 640 */ 5, 105, 5, 139, 139, 5, 5, 5, 5, 5, + /* 650 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + /* 660 */ 5, 109, 80, 60, 59, 0, 263, 263, 263, 263, + /* 670 */ 263, 263, 263, 263, 263, 263, 263, 21, 21, 263, + /* 680 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 690 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 700 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 710 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 720 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 730 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 740 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 750 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 760 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 770 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 780 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 790 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 800 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 810 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 820 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 830 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 840 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 850 */ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, + /* 860 */ 263, 263, 263, 263, 263, 263, }; -#define YY_SHIFT_COUNT (312) +#define YY_SHIFT_COUNT (314) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (662) +#define YY_SHIFT_MAX (665) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 168, 79, 79, 172, 172, 9, 221, 231, 74, 74, - /* 10 */ 74, 74, 74, 74, 74, 74, 74, 0, 48, 231, - /* 20 */ 365, 365, 365, 365, 121, 207, 74, 74, 74, 158, - /* 30 */ 74, 74, 200, 9, 37, 37, 676, 676, 676, 231, - /* 40 */ 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - /* 50 */ 231, 231, 231, 231, 231, 231, 231, 231, 231, 365, - /* 60 */ 365, 102, 102, 102, 102, 102, 102, 102, 74, 74, - /* 70 */ 251, 74, 207, 207, 74, 74, 74, 263, 263, 201, - /* 80 */ 207, 74, 74, 74, 74, 74, 74, 74, 74, 74, + /* 0 */ 156, 79, 79, 183, 183, 6, 232, 242, 74, 74, + /* 10 */ 74, 74, 74, 74, 74, 74, 74, 0, 48, 242, + /* 20 */ 333, 333, 333, 333, 110, 136, 74, 74, 74, 204, + /* 30 */ 74, 74, 246, 6, 7, 7, 679, 679, 679, 242, + /* 40 */ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + /* 50 */ 242, 242, 242, 242, 242, 242, 242, 242, 242, 333, + /* 60 */ 333, 102, 102, 102, 102, 102, 102, 102, 74, 74, + /* 70 */ 74, 267, 74, 136, 136, 74, 74, 74, 264, 264, + /* 80 */ 236, 136, 74, 74, 74, 74, 74, 74, 74, 74, /* 90 */ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, /* 100 */ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, /* 110 */ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, /* 120 */ 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - /* 130 */ 74, 404, 404, 404, 354, 354, 354, 404, 354, 404, - /* 140 */ 353, 355, 368, 356, 373, 386, 393, 358, 420, 412, - /* 150 */ 404, 404, 404, 442, 9, 9, 404, 404, 459, 461, - /* 160 */ 498, 466, 465, 497, 468, 471, 442, 404, 477, 477, - /* 170 */ 404, 477, 404, 477, 404, 676, 676, 27, 100, 127, - /* 180 */ 100, 100, 53, 182, 266, 266, 266, 266, 244, 261, - /* 190 */ 274, 323, 323, 323, 323, 78, 114, 214, 214, 243, - /* 200 */ 95, 232, 281, 215, 284, 286, 287, 292, 295, 277, - /* 210 */ 366, 378, 290, 311, 272, 20, 297, 300, 302, 303, - /* 220 */ 305, 309, 280, 282, 288, 317, 291, 426, 427, 359, - /* 230 */ 375, 552, 414, 554, 556, 418, 558, 559, 480, 431, - /* 240 */ 458, 467, 469, 462, 472, 463, 473, 475, 493, 495, - /* 250 */ 476, 606, 504, 505, 507, 500, 489, 506, 490, 509, - /* 260 */ 512, 508, 513, 467, 514, 515, 516, 517, 545, 614, - /* 270 */ 619, 621, 622, 623, 624, 550, 616, 557, 494, 525, - /* 280 */ 525, 620, 499, 501, 525, 630, 633, 535, 525, 636, - /* 290 */ 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, - /* 300 */ 647, 648, 649, 650, 651, 652, 549, 579, 653, 654, - /* 310 */ 600, 602, 662, + /* 130 */ 74, 74, 403, 403, 403, 356, 356, 356, 403, 356, + /* 140 */ 403, 361, 362, 371, 359, 388, 396, 404, 410, 426, + /* 150 */ 416, 403, 403, 403, 374, 6, 6, 403, 403, 391, + /* 160 */ 465, 502, 470, 469, 501, 472, 475, 374, 403, 479, + /* 170 */ 479, 403, 479, 403, 479, 403, 679, 679, 27, 100, + /* 180 */ 127, 100, 100, 53, 182, 282, 282, 282, 282, 261, + /* 190 */ 285, 300, 224, 224, 224, 224, 22, 14, 92, 92, + /* 200 */ 128, 197, 222, 276, 184, 281, 286, 287, 288, 289, + /* 210 */ 272, 394, 363, 323, 298, 293, 294, 299, 301, 302, + /* 220 */ 307, 308, 121, 280, 283, 290, 326, 295, 430, 431, + /* 230 */ 338, 377, 556, 418, 559, 560, 421, 566, 567, 483, + /* 240 */ 485, 440, 463, 490, 473, 478, 474, 489, 494, 496, + /* 250 */ 497, 492, 499, 609, 507, 508, 510, 503, 493, 506, + /* 260 */ 495, 512, 515, 509, 517, 490, 518, 516, 520, 519, + /* 270 */ 549, 617, 623, 624, 625, 626, 627, 553, 619, 561, + /* 280 */ 500, 526, 526, 620, 504, 505, 526, 633, 635, 536, + /* 290 */ 526, 637, 640, 641, 642, 643, 644, 645, 646, 647, + /* 300 */ 648, 649, 650, 651, 652, 653, 654, 655, 552, 582, + /* 310 */ 656, 657, 603, 605, 665, }; -#define YY_REDUCE_COUNT (176) -#define YY_REDUCE_MIN (-239) -#define YY_REDUCE_MAX (410) +#define YY_REDUCE_COUNT (177) +#define YY_REDUCE_MIN (-245) +#define YY_REDUCE_MAX (402) static const short yy_reduce_ofst[] = { - /* 0 */ -177, -26, -26, 67, 67, 17, -229, -215, -172, -175, - /* 10 */ -7, -75, 87, 118, 144, 149, 151, -184, -187, -232, - /* 20 */ -205, -146, -124, -78, 105, -9, -185, 11, -190, -88, - /* 30 */ 76, -71, 5, 31, 160, 170, 91, 179, -186, -239, - /* 40 */ -216, -193, -139, -105, -40, 10, 112, 117, 133, 173, - /* 50 */ 176, 188, 189, 190, 191, 192, 193, 194, 195, 212, - /* 60 */ 213, 204, 223, 224, 225, 226, 227, 228, 265, 267, - /* 70 */ 206, 268, 229, 230, 269, 270, 271, 208, 209, 233, - /* 80 */ 235, 275, 279, 283, 285, 289, 293, 294, 296, 298, - /* 90 */ 299, 301, 304, 306, 307, 308, 310, 312, 313, 314, - /* 100 */ 315, 316, 318, 319, 320, 321, 322, 324, 325, 326, - /* 110 */ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - /* 120 */ 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - /* 130 */ 347, 348, 349, 350, 218, 220, 236, 351, 238, 352, - /* 140 */ 240, 234, 237, 249, 258, 357, 360, 362, 361, 367, - /* 150 */ 363, 364, 369, 370, 371, 372, 374, 379, 376, 380, - /* 160 */ 377, 383, 381, 385, 387, 388, 382, 384, 389, 397, - /* 170 */ 400, 401, 405, 403, 406, 395, 410, + /* 0 */ -178, -27, -27, 82, 82, 25, -230, -216, -173, -176, + /* 10 */ -45, -8, 10, 35, 61, 126, 152, -185, -188, -233, + /* 20 */ -206, 90, 108, 115, -191, 1, -186, -46, 81, -189, + /* 30 */ 150, -79, -78, 131, 177, 178, 9, 113, 185, -245, + /* 40 */ -240, -217, -194, -144, -137, -110, -34, 98, 153, 168, + /* 50 */ 173, 174, 179, 189, 190, 191, 193, 194, 195, 212, + /* 60 */ 213, 223, 225, 226, 227, 228, 229, 230, 260, 268, + /* 70 */ 269, 207, 270, 231, 233, 271, 273, 275, 209, 210, + /* 80 */ 234, 237, 279, 284, 291, 292, 296, 297, 303, 304, + /* 90 */ 305, 306, 309, 310, 311, 312, 313, 314, 315, 316, + /* 100 */ 317, 318, 319, 320, 321, 322, 324, 325, 327, 328, + /* 110 */ 329, 330, 331, 332, 334, 335, 336, 337, 339, 340, + /* 120 */ 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + /* 130 */ 351, 352, 353, 354, 355, 219, 221, 235, 357, 238, + /* 140 */ 358, 243, 239, 253, 240, 360, 241, 364, 366, 365, + /* 150 */ 369, 367, 368, 370, 254, 372, 373, 375, 376, 378, + /* 160 */ 380, 274, 379, 383, 381, 385, 382, 384, 386, 387, + /* 170 */ 389, 393, 397, 399, 400, 402, 398, 401, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 767, 879, 825, 891, 813, 822, 1019, 1019, 767, 767, - /* 10 */ 767, 767, 767, 767, 767, 767, 767, 938, 786, 1019, - /* 20 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 822, - /* 30 */ 767, 767, 828, 822, 828, 828, 933, 863, 881, 767, - /* 40 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 50 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 60 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 70 */ 940, 943, 767, 767, 945, 767, 767, 965, 965, 931, - /* 80 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 90 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 100 */ 767, 767, 767, 767, 767, 767, 767, 767, 811, 767, - /* 110 */ 809, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 120 */ 767, 767, 767, 767, 767, 796, 767, 767, 767, 767, - /* 130 */ 767, 788, 788, 788, 767, 767, 767, 788, 767, 788, - /* 140 */ 972, 976, 970, 958, 966, 957, 953, 951, 950, 980, - /* 150 */ 788, 788, 788, 826, 822, 822, 788, 788, 844, 842, - /* 160 */ 840, 832, 838, 834, 836, 830, 814, 788, 820, 820, - /* 170 */ 788, 820, 788, 820, 788, 863, 881, 767, 981, 767, - /* 180 */ 1018, 971, 1008, 1007, 1014, 1006, 1005, 1004, 767, 767, - /* 190 */ 767, 1000, 1001, 1003, 1002, 767, 767, 1010, 1009, 767, - /* 200 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 210 */ 767, 767, 983, 767, 977, 973, 767, 767, 767, 767, - /* 220 */ 767, 767, 767, 767, 767, 893, 767, 767, 767, 767, - /* 230 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 240 */ 930, 767, 767, 767, 767, 941, 767, 767, 767, 767, - /* 250 */ 767, 767, 767, 767, 767, 967, 767, 959, 767, 767, - /* 260 */ 767, 767, 767, 905, 767, 767, 767, 767, 767, 767, - /* 270 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 1029, - /* 280 */ 1027, 767, 767, 767, 1023, 767, 767, 767, 1021, 767, - /* 290 */ 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, - /* 300 */ 767, 767, 767, 767, 767, 767, 847, 767, 794, 792, - /* 310 */ 767, 784, 767, + /* 0 */ 771, 883, 829, 895, 817, 826, 1023, 1023, 771, 771, + /* 10 */ 771, 771, 771, 771, 771, 771, 771, 942, 790, 1023, + /* 20 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 826, + /* 30 */ 771, 771, 832, 826, 832, 832, 937, 867, 885, 771, + /* 40 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 50 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 60 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 70 */ 771, 944, 947, 771, 771, 949, 771, 771, 969, 969, + /* 80 */ 935, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 90 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 100 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 815, + /* 110 */ 771, 813, 771, 771, 771, 771, 771, 771, 771, 771, + /* 120 */ 771, 771, 771, 771, 771, 771, 800, 771, 771, 771, + /* 130 */ 771, 771, 792, 792, 792, 771, 771, 771, 792, 771, + /* 140 */ 792, 976, 980, 974, 962, 970, 961, 957, 955, 954, + /* 150 */ 984, 792, 792, 792, 830, 826, 826, 792, 792, 848, + /* 160 */ 846, 844, 836, 842, 838, 840, 834, 818, 792, 824, + /* 170 */ 824, 792, 824, 792, 824, 792, 867, 885, 771, 985, + /* 180 */ 771, 1022, 975, 1012, 1011, 1018, 1010, 1009, 1008, 771, + /* 190 */ 771, 771, 1004, 1005, 1007, 1006, 771, 771, 1014, 1013, + /* 200 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 210 */ 771, 771, 771, 987, 771, 981, 977, 771, 771, 771, + /* 220 */ 771, 771, 771, 771, 771, 771, 897, 771, 771, 771, + /* 230 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 240 */ 771, 771, 934, 771, 771, 771, 771, 945, 771, 771, + /* 250 */ 771, 771, 771, 771, 771, 771, 771, 971, 771, 963, + /* 260 */ 771, 771, 771, 771, 771, 909, 771, 771, 771, 771, + /* 270 */ 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 280 */ 771, 1034, 1032, 771, 771, 771, 1028, 771, 771, 771, + /* 290 */ 1026, 771, 771, 771, 771, 771, 771, 771, 771, 771, + /* 300 */ 771, 771, 771, 771, 771, 771, 771, 771, 851, 771, + /* 310 */ 798, 796, 771, 788, 771, }; /********** End of lemon-generated parsing tables *****************************/ @@ -612,6 +612,7 @@ static const YYCODETYPE yyFallback[] = { 1, /* NOW => ID */ 0, /* RESET => nothing */ 0, /* QUERY => nothing */ + 0, /* SYNCDB => nothing */ 0, /* ADD => nothing */ 0, /* COLUMN => nothing */ 0, /* TAG => nothing */ @@ -884,132 +885,133 @@ static const char *const yyTokenName[] = { /* 133 */ "NOW", /* 134 */ "RESET", /* 135 */ "QUERY", - /* 136 */ "ADD", - /* 137 */ "COLUMN", - /* 138 */ "TAG", - /* 139 */ "CHANGE", - /* 140 */ "SET", - /* 141 */ "KILL", - /* 142 */ "CONNECTION", - /* 143 */ "STREAM", - /* 144 */ "COLON", - /* 145 */ "ABORT", - /* 146 */ "AFTER", - /* 147 */ "ATTACH", - /* 148 */ "BEFORE", - /* 149 */ "BEGIN", - /* 150 */ "CASCADE", - /* 151 */ "CLUSTER", - /* 152 */ "CONFLICT", - /* 153 */ "COPY", - /* 154 */ "DEFERRED", - /* 155 */ "DELIMITERS", - /* 156 */ "DETACH", - /* 157 */ "EACH", - /* 158 */ "END", - /* 159 */ "EXPLAIN", - /* 160 */ "FAIL", - /* 161 */ "FOR", - /* 162 */ "IGNORE", - /* 163 */ "IMMEDIATE", - /* 164 */ "INITIALLY", - /* 165 */ "INSTEAD", - /* 166 */ "MATCH", - /* 167 */ "KEY", - /* 168 */ "OF", - /* 169 */ "RAISE", - /* 170 */ "REPLACE", - /* 171 */ "RESTRICT", - /* 172 */ "ROW", - /* 173 */ "STATEMENT", - /* 174 */ "TRIGGER", - /* 175 */ "VIEW", - /* 176 */ "SEMI", - /* 177 */ "NONE", - /* 178 */ "PREV", - /* 179 */ "LINEAR", - /* 180 */ "IMPORT", - /* 181 */ "TBNAME", - /* 182 */ "JOIN", - /* 183 */ "INSERT", - /* 184 */ "INTO", - /* 185 */ "VALUES", - /* 186 */ "error", - /* 187 */ "program", - /* 188 */ "cmd", - /* 189 */ "dbPrefix", - /* 190 */ "ids", - /* 191 */ "cpxName", - /* 192 */ "ifexists", - /* 193 */ "alter_db_optr", - /* 194 */ "alter_topic_optr", - /* 195 */ "acct_optr", - /* 196 */ "ifnotexists", - /* 197 */ "db_optr", - /* 198 */ "topic_optr", - /* 199 */ "pps", - /* 200 */ "tseries", - /* 201 */ "dbs", - /* 202 */ "streams", - /* 203 */ "storage", - /* 204 */ "qtime", - /* 205 */ "users", - /* 206 */ "conns", - /* 207 */ "state", - /* 208 */ "keep", - /* 209 */ "tagitemlist", - /* 210 */ "cache", - /* 211 */ "replica", - /* 212 */ "quorum", - /* 213 */ "days", - /* 214 */ "minrows", - /* 215 */ "maxrows", - /* 216 */ "blocks", - /* 217 */ "ctime", - /* 218 */ "wal", - /* 219 */ "fsync", - /* 220 */ "comp", - /* 221 */ "prec", - /* 222 */ "update", - /* 223 */ "cachelast", - /* 224 */ "partitions", - /* 225 */ "typename", - /* 226 */ "signed", - /* 227 */ "create_table_args", - /* 228 */ "create_stable_args", - /* 229 */ "create_table_list", - /* 230 */ "create_from_stable", - /* 231 */ "columnlist", - /* 232 */ "tagNamelist", - /* 233 */ "select", - /* 234 */ "column", - /* 235 */ "tagitem", - /* 236 */ "selcollist", - /* 237 */ "from", - /* 238 */ "where_opt", - /* 239 */ "interval_opt", - /* 240 */ "session_option", - /* 241 */ "fill_opt", - /* 242 */ "sliding_opt", - /* 243 */ "groupby_opt", - /* 244 */ "orderby_opt", - /* 245 */ "having_opt", - /* 246 */ "slimit_opt", - /* 247 */ "limit_opt", - /* 248 */ "union", - /* 249 */ "sclp", - /* 250 */ "distinct", - /* 251 */ "expr", - /* 252 */ "as", - /* 253 */ "tablelist", - /* 254 */ "tmvar", - /* 255 */ "sortlist", - /* 256 */ "sortitem", - /* 257 */ "item", - /* 258 */ "sortorder", - /* 259 */ "grouplist", - /* 260 */ "exprlist", - /* 261 */ "expritem", + /* 136 */ "SYNCDB", + /* 137 */ "ADD", + /* 138 */ "COLUMN", + /* 139 */ "TAG", + /* 140 */ "CHANGE", + /* 141 */ "SET", + /* 142 */ "KILL", + /* 143 */ "CONNECTION", + /* 144 */ "STREAM", + /* 145 */ "COLON", + /* 146 */ "ABORT", + /* 147 */ "AFTER", + /* 148 */ "ATTACH", + /* 149 */ "BEFORE", + /* 150 */ "BEGIN", + /* 151 */ "CASCADE", + /* 152 */ "CLUSTER", + /* 153 */ "CONFLICT", + /* 154 */ "COPY", + /* 155 */ "DEFERRED", + /* 156 */ "DELIMITERS", + /* 157 */ "DETACH", + /* 158 */ "EACH", + /* 159 */ "END", + /* 160 */ "EXPLAIN", + /* 161 */ "FAIL", + /* 162 */ "FOR", + /* 163 */ "IGNORE", + /* 164 */ "IMMEDIATE", + /* 165 */ "INITIALLY", + /* 166 */ "INSTEAD", + /* 167 */ "MATCH", + /* 168 */ "KEY", + /* 169 */ "OF", + /* 170 */ "RAISE", + /* 171 */ "REPLACE", + /* 172 */ "RESTRICT", + /* 173 */ "ROW", + /* 174 */ "STATEMENT", + /* 175 */ "TRIGGER", + /* 176 */ "VIEW", + /* 177 */ "SEMI", + /* 178 */ "NONE", + /* 179 */ "PREV", + /* 180 */ "LINEAR", + /* 181 */ "IMPORT", + /* 182 */ "TBNAME", + /* 183 */ "JOIN", + /* 184 */ "INSERT", + /* 185 */ "INTO", + /* 186 */ "VALUES", + /* 187 */ "error", + /* 188 */ "program", + /* 189 */ "cmd", + /* 190 */ "dbPrefix", + /* 191 */ "ids", + /* 192 */ "cpxName", + /* 193 */ "ifexists", + /* 194 */ "alter_db_optr", + /* 195 */ "alter_topic_optr", + /* 196 */ "acct_optr", + /* 197 */ "ifnotexists", + /* 198 */ "db_optr", + /* 199 */ "topic_optr", + /* 200 */ "pps", + /* 201 */ "tseries", + /* 202 */ "dbs", + /* 203 */ "streams", + /* 204 */ "storage", + /* 205 */ "qtime", + /* 206 */ "users", + /* 207 */ "conns", + /* 208 */ "state", + /* 209 */ "keep", + /* 210 */ "tagitemlist", + /* 211 */ "cache", + /* 212 */ "replica", + /* 213 */ "quorum", + /* 214 */ "days", + /* 215 */ "minrows", + /* 216 */ "maxrows", + /* 217 */ "blocks", + /* 218 */ "ctime", + /* 219 */ "wal", + /* 220 */ "fsync", + /* 221 */ "comp", + /* 222 */ "prec", + /* 223 */ "update", + /* 224 */ "cachelast", + /* 225 */ "partitions", + /* 226 */ "typename", + /* 227 */ "signed", + /* 228 */ "create_table_args", + /* 229 */ "create_stable_args", + /* 230 */ "create_table_list", + /* 231 */ "create_from_stable", + /* 232 */ "columnlist", + /* 233 */ "tagNamelist", + /* 234 */ "select", + /* 235 */ "column", + /* 236 */ "tagitem", + /* 237 */ "selcollist", + /* 238 */ "from", + /* 239 */ "where_opt", + /* 240 */ "interval_opt", + /* 241 */ "session_option", + /* 242 */ "fill_opt", + /* 243 */ "sliding_opt", + /* 244 */ "groupby_opt", + /* 245 */ "orderby_opt", + /* 246 */ "having_opt", + /* 247 */ "slimit_opt", + /* 248 */ "limit_opt", + /* 249 */ "union", + /* 250 */ "sclp", + /* 251 */ "distinct", + /* 252 */ "expr", + /* 253 */ "as", + /* 254 */ "tablelist", + /* 255 */ "tmvar", + /* 256 */ "sortlist", + /* 257 */ "sortitem", + /* 258 */ "item", + /* 259 */ "sortorder", + /* 260 */ "grouplist", + /* 261 */ "exprlist", + /* 262 */ "expritem", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1268,20 +1270,21 @@ static const char *const yyRuleName[] = { /* 248 */ "expritem ::= expr", /* 249 */ "expritem ::=", /* 250 */ "cmd ::= RESET QUERY CACHE", - /* 251 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", - /* 252 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", - /* 253 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", - /* 254 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", - /* 255 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", - /* 256 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", - /* 257 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist", - /* 258 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids", - /* 259 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist", - /* 260 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids", - /* 261 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids", - /* 262 */ "cmd ::= KILL CONNECTION INTEGER", - /* 263 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", - /* 264 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", + /* 251 */ "cmd ::= SYNCDB ids REPLICA", + /* 252 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist", + /* 253 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids", + /* 254 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist", + /* 255 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids", + /* 256 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids", + /* 257 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem", + /* 258 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist", + /* 259 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids", + /* 260 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist", + /* 261 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids", + /* 262 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids", + /* 263 */ "cmd ::= KILL CONNECTION INTEGER", + /* 264 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER", + /* 265 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER", }; #endif /* NDEBUG */ @@ -1402,52 +1405,52 @@ static void yy_destructor( ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 208: /* keep */ - case 209: /* tagitemlist */ - case 231: /* columnlist */ - case 232: /* tagNamelist */ - case 241: /* fill_opt */ - case 243: /* groupby_opt */ - case 244: /* orderby_opt */ - case 255: /* sortlist */ - case 259: /* grouplist */ + case 209: /* keep */ + case 210: /* tagitemlist */ + case 232: /* columnlist */ + case 233: /* tagNamelist */ + case 242: /* fill_opt */ + case 244: /* groupby_opt */ + case 245: /* orderby_opt */ + case 256: /* sortlist */ + case 260: /* grouplist */ { -taosArrayDestroy((yypminor->yy429)); +taosArrayDestroy((yypminor->yy159)); } break; - case 229: /* create_table_list */ + case 230: /* create_table_list */ { -destroyCreateTableSql((yypminor->yy194)); +destroyCreateTableSql((yypminor->yy14)); } break; - case 233: /* select */ + case 234: /* select */ { -destroyQuerySqlNode((yypminor->yy254)); +destroyQuerySqlNode((yypminor->yy272)); } break; - case 236: /* selcollist */ - case 249: /* sclp */ - case 260: /* exprlist */ + case 237: /* selcollist */ + case 250: /* sclp */ + case 261: /* exprlist */ { -tSqlExprListDestroy((yypminor->yy429)); +tSqlExprListDestroy((yypminor->yy159)); } break; - case 238: /* where_opt */ - case 245: /* having_opt */ - case 251: /* expr */ - case 261: /* expritem */ + case 239: /* where_opt */ + case 246: /* having_opt */ + case 252: /* expr */ + case 262: /* expritem */ { -tSqlExprDestroy((yypminor->yy170)); +tSqlExprDestroy((yypminor->yy118)); } break; - case 248: /* union */ + case 249: /* union */ { -destroyAllSelectClause((yypminor->yy141)); +destroyAllSelectClause((yypminor->yy391)); } break; - case 256: /* sortitem */ + case 257: /* sortitem */ { -tVariantDestroy(&(yypminor->yy218)); +tVariantDestroy(&(yypminor->yy488)); } break; /********* End destructor definitions *****************************************/ @@ -1741,271 +1744,272 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 187, -1 }, /* (0) program ::= cmd */ - { 188, -2 }, /* (1) cmd ::= SHOW DATABASES */ - { 188, -2 }, /* (2) cmd ::= SHOW TOPICS */ - { 188, -2 }, /* (3) cmd ::= SHOW MNODES */ - { 188, -2 }, /* (4) cmd ::= SHOW DNODES */ - { 188, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */ - { 188, -2 }, /* (6) cmd ::= SHOW USERS */ - { 188, -2 }, /* (7) cmd ::= SHOW MODULES */ - { 188, -2 }, /* (8) cmd ::= SHOW QUERIES */ - { 188, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */ - { 188, -2 }, /* (10) cmd ::= SHOW STREAMS */ - { 188, -2 }, /* (11) cmd ::= SHOW VARIABLES */ - { 188, -2 }, /* (12) cmd ::= SHOW SCORES */ - { 188, -2 }, /* (13) cmd ::= SHOW GRANTS */ - { 188, -2 }, /* (14) cmd ::= SHOW VNODES */ - { 188, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */ - { 189, 0 }, /* (16) dbPrefix ::= */ - { 189, -2 }, /* (17) dbPrefix ::= ids DOT */ - { 191, 0 }, /* (18) cpxName ::= */ - { 191, -2 }, /* (19) cpxName ::= DOT ids */ - { 188, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */ - { 188, -4 }, /* (21) cmd ::= SHOW CREATE DATABASE ids */ - { 188, -3 }, /* (22) cmd ::= SHOW dbPrefix TABLES */ - { 188, -5 }, /* (23) cmd ::= SHOW dbPrefix TABLES LIKE ids */ - { 188, -3 }, /* (24) cmd ::= SHOW dbPrefix STABLES */ - { 188, -5 }, /* (25) cmd ::= SHOW dbPrefix STABLES LIKE ids */ - { 188, -3 }, /* (26) cmd ::= SHOW dbPrefix VGROUPS */ - { 188, -4 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS ids */ - { 188, -5 }, /* (28) cmd ::= DROP TABLE ifexists ids cpxName */ - { 188, -5 }, /* (29) cmd ::= DROP STABLE ifexists ids cpxName */ - { 188, -4 }, /* (30) cmd ::= DROP DATABASE ifexists ids */ - { 188, -4 }, /* (31) cmd ::= DROP TOPIC ifexists ids */ - { 188, -3 }, /* (32) cmd ::= DROP DNODE ids */ - { 188, -3 }, /* (33) cmd ::= DROP USER ids */ - { 188, -3 }, /* (34) cmd ::= DROP ACCOUNT ids */ - { 188, -2 }, /* (35) cmd ::= USE ids */ - { 188, -3 }, /* (36) cmd ::= DESCRIBE ids cpxName */ - { 188, -5 }, /* (37) cmd ::= ALTER USER ids PASS ids */ - { 188, -5 }, /* (38) cmd ::= ALTER USER ids PRIVILEGE ids */ - { 188, -4 }, /* (39) cmd ::= ALTER DNODE ids ids */ - { 188, -5 }, /* (40) cmd ::= ALTER DNODE ids ids ids */ - { 188, -3 }, /* (41) cmd ::= ALTER LOCAL ids */ - { 188, -4 }, /* (42) cmd ::= ALTER LOCAL ids ids */ - { 188, -4 }, /* (43) cmd ::= ALTER DATABASE ids alter_db_optr */ - { 188, -4 }, /* (44) cmd ::= ALTER TOPIC ids alter_topic_optr */ - { 188, -4 }, /* (45) cmd ::= ALTER ACCOUNT ids acct_optr */ - { 188, -6 }, /* (46) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ - { 190, -1 }, /* (47) ids ::= ID */ - { 190, -1 }, /* (48) ids ::= STRING */ - { 192, -2 }, /* (49) ifexists ::= IF EXISTS */ - { 192, 0 }, /* (50) ifexists ::= */ - { 196, -3 }, /* (51) ifnotexists ::= IF NOT EXISTS */ - { 196, 0 }, /* (52) ifnotexists ::= */ - { 188, -3 }, /* (53) cmd ::= CREATE DNODE ids */ - { 188, -6 }, /* (54) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ - { 188, -5 }, /* (55) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ - { 188, -5 }, /* (56) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ - { 188, -5 }, /* (57) cmd ::= CREATE USER ids PASS ids */ - { 199, 0 }, /* (58) pps ::= */ - { 199, -2 }, /* (59) pps ::= PPS INTEGER */ - { 200, 0 }, /* (60) tseries ::= */ - { 200, -2 }, /* (61) tseries ::= TSERIES INTEGER */ - { 201, 0 }, /* (62) dbs ::= */ - { 201, -2 }, /* (63) dbs ::= DBS INTEGER */ - { 202, 0 }, /* (64) streams ::= */ - { 202, -2 }, /* (65) streams ::= STREAMS INTEGER */ - { 203, 0 }, /* (66) storage ::= */ - { 203, -2 }, /* (67) storage ::= STORAGE INTEGER */ - { 204, 0 }, /* (68) qtime ::= */ - { 204, -2 }, /* (69) qtime ::= QTIME INTEGER */ - { 205, 0 }, /* (70) users ::= */ - { 205, -2 }, /* (71) users ::= USERS INTEGER */ - { 206, 0 }, /* (72) conns ::= */ - { 206, -2 }, /* (73) conns ::= CONNS INTEGER */ - { 207, 0 }, /* (74) state ::= */ - { 207, -2 }, /* (75) state ::= STATE ids */ - { 195, -9 }, /* (76) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ - { 208, -2 }, /* (77) keep ::= KEEP tagitemlist */ - { 210, -2 }, /* (78) cache ::= CACHE INTEGER */ - { 211, -2 }, /* (79) replica ::= REPLICA INTEGER */ - { 212, -2 }, /* (80) quorum ::= QUORUM INTEGER */ - { 213, -2 }, /* (81) days ::= DAYS INTEGER */ - { 214, -2 }, /* (82) minrows ::= MINROWS INTEGER */ - { 215, -2 }, /* (83) maxrows ::= MAXROWS INTEGER */ - { 216, -2 }, /* (84) blocks ::= BLOCKS INTEGER */ - { 217, -2 }, /* (85) ctime ::= CTIME INTEGER */ - { 218, -2 }, /* (86) wal ::= WAL INTEGER */ - { 219, -2 }, /* (87) fsync ::= FSYNC INTEGER */ - { 220, -2 }, /* (88) comp ::= COMP INTEGER */ - { 221, -2 }, /* (89) prec ::= PRECISION STRING */ - { 222, -2 }, /* (90) update ::= UPDATE INTEGER */ - { 223, -2 }, /* (91) cachelast ::= CACHELAST INTEGER */ - { 224, -2 }, /* (92) partitions ::= PARTITIONS INTEGER */ - { 197, 0 }, /* (93) db_optr ::= */ - { 197, -2 }, /* (94) db_optr ::= db_optr cache */ - { 197, -2 }, /* (95) db_optr ::= db_optr replica */ - { 197, -2 }, /* (96) db_optr ::= db_optr quorum */ - { 197, -2 }, /* (97) db_optr ::= db_optr days */ - { 197, -2 }, /* (98) db_optr ::= db_optr minrows */ - { 197, -2 }, /* (99) db_optr ::= db_optr maxrows */ - { 197, -2 }, /* (100) db_optr ::= db_optr blocks */ - { 197, -2 }, /* (101) db_optr ::= db_optr ctime */ - { 197, -2 }, /* (102) db_optr ::= db_optr wal */ - { 197, -2 }, /* (103) db_optr ::= db_optr fsync */ - { 197, -2 }, /* (104) db_optr ::= db_optr comp */ - { 197, -2 }, /* (105) db_optr ::= db_optr prec */ - { 197, -2 }, /* (106) db_optr ::= db_optr keep */ - { 197, -2 }, /* (107) db_optr ::= db_optr update */ - { 197, -2 }, /* (108) db_optr ::= db_optr cachelast */ - { 198, -1 }, /* (109) topic_optr ::= db_optr */ - { 198, -2 }, /* (110) topic_optr ::= topic_optr partitions */ - { 193, 0 }, /* (111) alter_db_optr ::= */ - { 193, -2 }, /* (112) alter_db_optr ::= alter_db_optr replica */ - { 193, -2 }, /* (113) alter_db_optr ::= alter_db_optr quorum */ - { 193, -2 }, /* (114) alter_db_optr ::= alter_db_optr keep */ - { 193, -2 }, /* (115) alter_db_optr ::= alter_db_optr blocks */ - { 193, -2 }, /* (116) alter_db_optr ::= alter_db_optr comp */ - { 193, -2 }, /* (117) alter_db_optr ::= alter_db_optr wal */ - { 193, -2 }, /* (118) alter_db_optr ::= alter_db_optr fsync */ - { 193, -2 }, /* (119) alter_db_optr ::= alter_db_optr update */ - { 193, -2 }, /* (120) alter_db_optr ::= alter_db_optr cachelast */ - { 194, -1 }, /* (121) alter_topic_optr ::= alter_db_optr */ - { 194, -2 }, /* (122) alter_topic_optr ::= alter_topic_optr partitions */ - { 225, -1 }, /* (123) typename ::= ids */ - { 225, -4 }, /* (124) typename ::= ids LP signed RP */ - { 225, -2 }, /* (125) typename ::= ids UNSIGNED */ - { 226, -1 }, /* (126) signed ::= INTEGER */ - { 226, -2 }, /* (127) signed ::= PLUS INTEGER */ - { 226, -2 }, /* (128) signed ::= MINUS INTEGER */ - { 188, -3 }, /* (129) cmd ::= CREATE TABLE create_table_args */ - { 188, -3 }, /* (130) cmd ::= CREATE TABLE create_stable_args */ - { 188, -3 }, /* (131) cmd ::= CREATE STABLE create_stable_args */ - { 188, -3 }, /* (132) cmd ::= CREATE TABLE create_table_list */ - { 229, -1 }, /* (133) create_table_list ::= create_from_stable */ - { 229, -2 }, /* (134) create_table_list ::= create_table_list create_from_stable */ - { 227, -6 }, /* (135) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ - { 228, -10 }, /* (136) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ - { 230, -10 }, /* (137) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ - { 230, -13 }, /* (138) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ - { 232, -3 }, /* (139) tagNamelist ::= tagNamelist COMMA ids */ - { 232, -1 }, /* (140) tagNamelist ::= ids */ - { 227, -5 }, /* (141) create_table_args ::= ifnotexists ids cpxName AS select */ - { 231, -3 }, /* (142) columnlist ::= columnlist COMMA column */ - { 231, -1 }, /* (143) columnlist ::= column */ - { 234, -2 }, /* (144) column ::= ids typename */ - { 209, -3 }, /* (145) tagitemlist ::= tagitemlist COMMA tagitem */ - { 209, -1 }, /* (146) tagitemlist ::= tagitem */ - { 235, -1 }, /* (147) tagitem ::= INTEGER */ - { 235, -1 }, /* (148) tagitem ::= FLOAT */ - { 235, -1 }, /* (149) tagitem ::= STRING */ - { 235, -1 }, /* (150) tagitem ::= BOOL */ - { 235, -1 }, /* (151) tagitem ::= NULL */ - { 235, -2 }, /* (152) tagitem ::= MINUS INTEGER */ - { 235, -2 }, /* (153) tagitem ::= MINUS FLOAT */ - { 235, -2 }, /* (154) tagitem ::= PLUS INTEGER */ - { 235, -2 }, /* (155) tagitem ::= PLUS FLOAT */ - { 233, -13 }, /* (156) select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ - { 233, -3 }, /* (157) select ::= LP select RP */ - { 248, -1 }, /* (158) union ::= select */ - { 248, -4 }, /* (159) union ::= union UNION ALL select */ - { 188, -1 }, /* (160) cmd ::= union */ - { 233, -2 }, /* (161) select ::= SELECT selcollist */ - { 249, -2 }, /* (162) sclp ::= selcollist COMMA */ - { 249, 0 }, /* (163) sclp ::= */ - { 236, -4 }, /* (164) selcollist ::= sclp distinct expr as */ - { 236, -2 }, /* (165) selcollist ::= sclp STAR */ - { 252, -2 }, /* (166) as ::= AS ids */ - { 252, -1 }, /* (167) as ::= ids */ - { 252, 0 }, /* (168) as ::= */ - { 250, -1 }, /* (169) distinct ::= DISTINCT */ - { 250, 0 }, /* (170) distinct ::= */ - { 237, -2 }, /* (171) from ::= FROM tablelist */ - { 237, -4 }, /* (172) from ::= FROM LP union RP */ - { 253, -2 }, /* (173) tablelist ::= ids cpxName */ - { 253, -3 }, /* (174) tablelist ::= ids cpxName ids */ - { 253, -4 }, /* (175) tablelist ::= tablelist COMMA ids cpxName */ - { 253, -5 }, /* (176) tablelist ::= tablelist COMMA ids cpxName ids */ - { 254, -1 }, /* (177) tmvar ::= VARIABLE */ - { 239, -4 }, /* (178) interval_opt ::= INTERVAL LP tmvar RP */ - { 239, -6 }, /* (179) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ - { 239, 0 }, /* (180) interval_opt ::= */ - { 240, 0 }, /* (181) session_option ::= */ - { 240, -7 }, /* (182) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ - { 241, 0 }, /* (183) fill_opt ::= */ - { 241, -6 }, /* (184) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ - { 241, -4 }, /* (185) fill_opt ::= FILL LP ID RP */ - { 242, -4 }, /* (186) sliding_opt ::= SLIDING LP tmvar RP */ - { 242, 0 }, /* (187) sliding_opt ::= */ - { 244, 0 }, /* (188) orderby_opt ::= */ - { 244, -3 }, /* (189) orderby_opt ::= ORDER BY sortlist */ - { 255, -4 }, /* (190) sortlist ::= sortlist COMMA item sortorder */ - { 255, -2 }, /* (191) sortlist ::= item sortorder */ - { 257, -2 }, /* (192) item ::= ids cpxName */ - { 258, -1 }, /* (193) sortorder ::= ASC */ - { 258, -1 }, /* (194) sortorder ::= DESC */ - { 258, 0 }, /* (195) sortorder ::= */ - { 243, 0 }, /* (196) groupby_opt ::= */ - { 243, -3 }, /* (197) groupby_opt ::= GROUP BY grouplist */ - { 259, -3 }, /* (198) grouplist ::= grouplist COMMA item */ - { 259, -1 }, /* (199) grouplist ::= item */ - { 245, 0 }, /* (200) having_opt ::= */ - { 245, -2 }, /* (201) having_opt ::= HAVING expr */ - { 247, 0 }, /* (202) limit_opt ::= */ - { 247, -2 }, /* (203) limit_opt ::= LIMIT signed */ - { 247, -4 }, /* (204) limit_opt ::= LIMIT signed OFFSET signed */ - { 247, -4 }, /* (205) limit_opt ::= LIMIT signed COMMA signed */ - { 246, 0 }, /* (206) slimit_opt ::= */ - { 246, -2 }, /* (207) slimit_opt ::= SLIMIT signed */ - { 246, -4 }, /* (208) slimit_opt ::= SLIMIT signed SOFFSET signed */ - { 246, -4 }, /* (209) slimit_opt ::= SLIMIT signed COMMA signed */ - { 238, 0 }, /* (210) where_opt ::= */ - { 238, -2 }, /* (211) where_opt ::= WHERE expr */ - { 251, -3 }, /* (212) expr ::= LP expr RP */ - { 251, -1 }, /* (213) expr ::= ID */ - { 251, -3 }, /* (214) expr ::= ID DOT ID */ - { 251, -3 }, /* (215) expr ::= ID DOT STAR */ - { 251, -1 }, /* (216) expr ::= INTEGER */ - { 251, -2 }, /* (217) expr ::= MINUS INTEGER */ - { 251, -2 }, /* (218) expr ::= PLUS INTEGER */ - { 251, -1 }, /* (219) expr ::= FLOAT */ - { 251, -2 }, /* (220) expr ::= MINUS FLOAT */ - { 251, -2 }, /* (221) expr ::= PLUS FLOAT */ - { 251, -1 }, /* (222) expr ::= STRING */ - { 251, -1 }, /* (223) expr ::= NOW */ - { 251, -1 }, /* (224) expr ::= VARIABLE */ - { 251, -1 }, /* (225) expr ::= BOOL */ - { 251, -4 }, /* (226) expr ::= ID LP exprlist RP */ - { 251, -4 }, /* (227) expr ::= ID LP STAR RP */ - { 251, -3 }, /* (228) expr ::= expr IS NULL */ - { 251, -4 }, /* (229) expr ::= expr IS NOT NULL */ - { 251, -3 }, /* (230) expr ::= expr LT expr */ - { 251, -3 }, /* (231) expr ::= expr GT expr */ - { 251, -3 }, /* (232) expr ::= expr LE expr */ - { 251, -3 }, /* (233) expr ::= expr GE expr */ - { 251, -3 }, /* (234) expr ::= expr NE expr */ - { 251, -3 }, /* (235) expr ::= expr EQ expr */ - { 251, -5 }, /* (236) expr ::= expr BETWEEN expr AND expr */ - { 251, -3 }, /* (237) expr ::= expr AND expr */ - { 251, -3 }, /* (238) expr ::= expr OR expr */ - { 251, -3 }, /* (239) expr ::= expr PLUS expr */ - { 251, -3 }, /* (240) expr ::= expr MINUS expr */ - { 251, -3 }, /* (241) expr ::= expr STAR expr */ - { 251, -3 }, /* (242) expr ::= expr SLASH expr */ - { 251, -3 }, /* (243) expr ::= expr REM expr */ - { 251, -3 }, /* (244) expr ::= expr LIKE expr */ - { 251, -5 }, /* (245) expr ::= expr IN LP exprlist RP */ - { 260, -3 }, /* (246) exprlist ::= exprlist COMMA expritem */ - { 260, -1 }, /* (247) exprlist ::= expritem */ - { 261, -1 }, /* (248) expritem ::= expr */ - { 261, 0 }, /* (249) expritem ::= */ - { 188, -3 }, /* (250) cmd ::= RESET QUERY CACHE */ - { 188, -7 }, /* (251) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ - { 188, -7 }, /* (252) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ - { 188, -7 }, /* (253) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ - { 188, -7 }, /* (254) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ - { 188, -8 }, /* (255) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ - { 188, -9 }, /* (256) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ - { 188, -7 }, /* (257) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ - { 188, -7 }, /* (258) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ - { 188, -7 }, /* (259) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ - { 188, -7 }, /* (260) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ - { 188, -8 }, /* (261) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ - { 188, -3 }, /* (262) cmd ::= KILL CONNECTION INTEGER */ - { 188, -5 }, /* (263) cmd ::= KILL STREAM INTEGER COLON INTEGER */ - { 188, -5 }, /* (264) cmd ::= KILL QUERY INTEGER COLON INTEGER */ + { 188, -1 }, /* (0) program ::= cmd */ + { 189, -2 }, /* (1) cmd ::= SHOW DATABASES */ + { 189, -2 }, /* (2) cmd ::= SHOW TOPICS */ + { 189, -2 }, /* (3) cmd ::= SHOW MNODES */ + { 189, -2 }, /* (4) cmd ::= SHOW DNODES */ + { 189, -2 }, /* (5) cmd ::= SHOW ACCOUNTS */ + { 189, -2 }, /* (6) cmd ::= SHOW USERS */ + { 189, -2 }, /* (7) cmd ::= SHOW MODULES */ + { 189, -2 }, /* (8) cmd ::= SHOW QUERIES */ + { 189, -2 }, /* (9) cmd ::= SHOW CONNECTIONS */ + { 189, -2 }, /* (10) cmd ::= SHOW STREAMS */ + { 189, -2 }, /* (11) cmd ::= SHOW VARIABLES */ + { 189, -2 }, /* (12) cmd ::= SHOW SCORES */ + { 189, -2 }, /* (13) cmd ::= SHOW GRANTS */ + { 189, -2 }, /* (14) cmd ::= SHOW VNODES */ + { 189, -3 }, /* (15) cmd ::= SHOW VNODES IPTOKEN */ + { 190, 0 }, /* (16) dbPrefix ::= */ + { 190, -2 }, /* (17) dbPrefix ::= ids DOT */ + { 192, 0 }, /* (18) cpxName ::= */ + { 192, -2 }, /* (19) cpxName ::= DOT ids */ + { 189, -5 }, /* (20) cmd ::= SHOW CREATE TABLE ids cpxName */ + { 189, -4 }, /* (21) cmd ::= SHOW CREATE DATABASE ids */ + { 189, -3 }, /* (22) cmd ::= SHOW dbPrefix TABLES */ + { 189, -5 }, /* (23) cmd ::= SHOW dbPrefix TABLES LIKE ids */ + { 189, -3 }, /* (24) cmd ::= SHOW dbPrefix STABLES */ + { 189, -5 }, /* (25) cmd ::= SHOW dbPrefix STABLES LIKE ids */ + { 189, -3 }, /* (26) cmd ::= SHOW dbPrefix VGROUPS */ + { 189, -4 }, /* (27) cmd ::= SHOW dbPrefix VGROUPS ids */ + { 189, -5 }, /* (28) cmd ::= DROP TABLE ifexists ids cpxName */ + { 189, -5 }, /* (29) cmd ::= DROP STABLE ifexists ids cpxName */ + { 189, -4 }, /* (30) cmd ::= DROP DATABASE ifexists ids */ + { 189, -4 }, /* (31) cmd ::= DROP TOPIC ifexists ids */ + { 189, -3 }, /* (32) cmd ::= DROP DNODE ids */ + { 189, -3 }, /* (33) cmd ::= DROP USER ids */ + { 189, -3 }, /* (34) cmd ::= DROP ACCOUNT ids */ + { 189, -2 }, /* (35) cmd ::= USE ids */ + { 189, -3 }, /* (36) cmd ::= DESCRIBE ids cpxName */ + { 189, -5 }, /* (37) cmd ::= ALTER USER ids PASS ids */ + { 189, -5 }, /* (38) cmd ::= ALTER USER ids PRIVILEGE ids */ + { 189, -4 }, /* (39) cmd ::= ALTER DNODE ids ids */ + { 189, -5 }, /* (40) cmd ::= ALTER DNODE ids ids ids */ + { 189, -3 }, /* (41) cmd ::= ALTER LOCAL ids */ + { 189, -4 }, /* (42) cmd ::= ALTER LOCAL ids ids */ + { 189, -4 }, /* (43) cmd ::= ALTER DATABASE ids alter_db_optr */ + { 189, -4 }, /* (44) cmd ::= ALTER TOPIC ids alter_topic_optr */ + { 189, -4 }, /* (45) cmd ::= ALTER ACCOUNT ids acct_optr */ + { 189, -6 }, /* (46) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ + { 191, -1 }, /* (47) ids ::= ID */ + { 191, -1 }, /* (48) ids ::= STRING */ + { 193, -2 }, /* (49) ifexists ::= IF EXISTS */ + { 193, 0 }, /* (50) ifexists ::= */ + { 197, -3 }, /* (51) ifnotexists ::= IF NOT EXISTS */ + { 197, 0 }, /* (52) ifnotexists ::= */ + { 189, -3 }, /* (53) cmd ::= CREATE DNODE ids */ + { 189, -6 }, /* (54) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ + { 189, -5 }, /* (55) cmd ::= CREATE DATABASE ifnotexists ids db_optr */ + { 189, -5 }, /* (56) cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ + { 189, -5 }, /* (57) cmd ::= CREATE USER ids PASS ids */ + { 200, 0 }, /* (58) pps ::= */ + { 200, -2 }, /* (59) pps ::= PPS INTEGER */ + { 201, 0 }, /* (60) tseries ::= */ + { 201, -2 }, /* (61) tseries ::= TSERIES INTEGER */ + { 202, 0 }, /* (62) dbs ::= */ + { 202, -2 }, /* (63) dbs ::= DBS INTEGER */ + { 203, 0 }, /* (64) streams ::= */ + { 203, -2 }, /* (65) streams ::= STREAMS INTEGER */ + { 204, 0 }, /* (66) storage ::= */ + { 204, -2 }, /* (67) storage ::= STORAGE INTEGER */ + { 205, 0 }, /* (68) qtime ::= */ + { 205, -2 }, /* (69) qtime ::= QTIME INTEGER */ + { 206, 0 }, /* (70) users ::= */ + { 206, -2 }, /* (71) users ::= USERS INTEGER */ + { 207, 0 }, /* (72) conns ::= */ + { 207, -2 }, /* (73) conns ::= CONNS INTEGER */ + { 208, 0 }, /* (74) state ::= */ + { 208, -2 }, /* (75) state ::= STATE ids */ + { 196, -9 }, /* (76) acct_optr ::= pps tseries storage streams qtime dbs users conns state */ + { 209, -2 }, /* (77) keep ::= KEEP tagitemlist */ + { 211, -2 }, /* (78) cache ::= CACHE INTEGER */ + { 212, -2 }, /* (79) replica ::= REPLICA INTEGER */ + { 213, -2 }, /* (80) quorum ::= QUORUM INTEGER */ + { 214, -2 }, /* (81) days ::= DAYS INTEGER */ + { 215, -2 }, /* (82) minrows ::= MINROWS INTEGER */ + { 216, -2 }, /* (83) maxrows ::= MAXROWS INTEGER */ + { 217, -2 }, /* (84) blocks ::= BLOCKS INTEGER */ + { 218, -2 }, /* (85) ctime ::= CTIME INTEGER */ + { 219, -2 }, /* (86) wal ::= WAL INTEGER */ + { 220, -2 }, /* (87) fsync ::= FSYNC INTEGER */ + { 221, -2 }, /* (88) comp ::= COMP INTEGER */ + { 222, -2 }, /* (89) prec ::= PRECISION STRING */ + { 223, -2 }, /* (90) update ::= UPDATE INTEGER */ + { 224, -2 }, /* (91) cachelast ::= CACHELAST INTEGER */ + { 225, -2 }, /* (92) partitions ::= PARTITIONS INTEGER */ + { 198, 0 }, /* (93) db_optr ::= */ + { 198, -2 }, /* (94) db_optr ::= db_optr cache */ + { 198, -2 }, /* (95) db_optr ::= db_optr replica */ + { 198, -2 }, /* (96) db_optr ::= db_optr quorum */ + { 198, -2 }, /* (97) db_optr ::= db_optr days */ + { 198, -2 }, /* (98) db_optr ::= db_optr minrows */ + { 198, -2 }, /* (99) db_optr ::= db_optr maxrows */ + { 198, -2 }, /* (100) db_optr ::= db_optr blocks */ + { 198, -2 }, /* (101) db_optr ::= db_optr ctime */ + { 198, -2 }, /* (102) db_optr ::= db_optr wal */ + { 198, -2 }, /* (103) db_optr ::= db_optr fsync */ + { 198, -2 }, /* (104) db_optr ::= db_optr comp */ + { 198, -2 }, /* (105) db_optr ::= db_optr prec */ + { 198, -2 }, /* (106) db_optr ::= db_optr keep */ + { 198, -2 }, /* (107) db_optr ::= db_optr update */ + { 198, -2 }, /* (108) db_optr ::= db_optr cachelast */ + { 199, -1 }, /* (109) topic_optr ::= db_optr */ + { 199, -2 }, /* (110) topic_optr ::= topic_optr partitions */ + { 194, 0 }, /* (111) alter_db_optr ::= */ + { 194, -2 }, /* (112) alter_db_optr ::= alter_db_optr replica */ + { 194, -2 }, /* (113) alter_db_optr ::= alter_db_optr quorum */ + { 194, -2 }, /* (114) alter_db_optr ::= alter_db_optr keep */ + { 194, -2 }, /* (115) alter_db_optr ::= alter_db_optr blocks */ + { 194, -2 }, /* (116) alter_db_optr ::= alter_db_optr comp */ + { 194, -2 }, /* (117) alter_db_optr ::= alter_db_optr wal */ + { 194, -2 }, /* (118) alter_db_optr ::= alter_db_optr fsync */ + { 194, -2 }, /* (119) alter_db_optr ::= alter_db_optr update */ + { 194, -2 }, /* (120) alter_db_optr ::= alter_db_optr cachelast */ + { 195, -1 }, /* (121) alter_topic_optr ::= alter_db_optr */ + { 195, -2 }, /* (122) alter_topic_optr ::= alter_topic_optr partitions */ + { 226, -1 }, /* (123) typename ::= ids */ + { 226, -4 }, /* (124) typename ::= ids LP signed RP */ + { 226, -2 }, /* (125) typename ::= ids UNSIGNED */ + { 227, -1 }, /* (126) signed ::= INTEGER */ + { 227, -2 }, /* (127) signed ::= PLUS INTEGER */ + { 227, -2 }, /* (128) signed ::= MINUS INTEGER */ + { 189, -3 }, /* (129) cmd ::= CREATE TABLE create_table_args */ + { 189, -3 }, /* (130) cmd ::= CREATE TABLE create_stable_args */ + { 189, -3 }, /* (131) cmd ::= CREATE STABLE create_stable_args */ + { 189, -3 }, /* (132) cmd ::= CREATE TABLE create_table_list */ + { 230, -1 }, /* (133) create_table_list ::= create_from_stable */ + { 230, -2 }, /* (134) create_table_list ::= create_table_list create_from_stable */ + { 228, -6 }, /* (135) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ + { 229, -10 }, /* (136) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ + { 231, -10 }, /* (137) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ + { 231, -13 }, /* (138) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ + { 233, -3 }, /* (139) tagNamelist ::= tagNamelist COMMA ids */ + { 233, -1 }, /* (140) tagNamelist ::= ids */ + { 228, -5 }, /* (141) create_table_args ::= ifnotexists ids cpxName AS select */ + { 232, -3 }, /* (142) columnlist ::= columnlist COMMA column */ + { 232, -1 }, /* (143) columnlist ::= column */ + { 235, -2 }, /* (144) column ::= ids typename */ + { 210, -3 }, /* (145) tagitemlist ::= tagitemlist COMMA tagitem */ + { 210, -1 }, /* (146) tagitemlist ::= tagitem */ + { 236, -1 }, /* (147) tagitem ::= INTEGER */ + { 236, -1 }, /* (148) tagitem ::= FLOAT */ + { 236, -1 }, /* (149) tagitem ::= STRING */ + { 236, -1 }, /* (150) tagitem ::= BOOL */ + { 236, -1 }, /* (151) tagitem ::= NULL */ + { 236, -2 }, /* (152) tagitem ::= MINUS INTEGER */ + { 236, -2 }, /* (153) tagitem ::= MINUS FLOAT */ + { 236, -2 }, /* (154) tagitem ::= PLUS INTEGER */ + { 236, -2 }, /* (155) tagitem ::= PLUS FLOAT */ + { 234, -13 }, /* (156) select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ + { 234, -3 }, /* (157) select ::= LP select RP */ + { 249, -1 }, /* (158) union ::= select */ + { 249, -4 }, /* (159) union ::= union UNION ALL select */ + { 189, -1 }, /* (160) cmd ::= union */ + { 234, -2 }, /* (161) select ::= SELECT selcollist */ + { 250, -2 }, /* (162) sclp ::= selcollist COMMA */ + { 250, 0 }, /* (163) sclp ::= */ + { 237, -4 }, /* (164) selcollist ::= sclp distinct expr as */ + { 237, -2 }, /* (165) selcollist ::= sclp STAR */ + { 253, -2 }, /* (166) as ::= AS ids */ + { 253, -1 }, /* (167) as ::= ids */ + { 253, 0 }, /* (168) as ::= */ + { 251, -1 }, /* (169) distinct ::= DISTINCT */ + { 251, 0 }, /* (170) distinct ::= */ + { 238, -2 }, /* (171) from ::= FROM tablelist */ + { 238, -4 }, /* (172) from ::= FROM LP union RP */ + { 254, -2 }, /* (173) tablelist ::= ids cpxName */ + { 254, -3 }, /* (174) tablelist ::= ids cpxName ids */ + { 254, -4 }, /* (175) tablelist ::= tablelist COMMA ids cpxName */ + { 254, -5 }, /* (176) tablelist ::= tablelist COMMA ids cpxName ids */ + { 255, -1 }, /* (177) tmvar ::= VARIABLE */ + { 240, -4 }, /* (178) interval_opt ::= INTERVAL LP tmvar RP */ + { 240, -6 }, /* (179) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ + { 240, 0 }, /* (180) interval_opt ::= */ + { 241, 0 }, /* (181) session_option ::= */ + { 241, -7 }, /* (182) session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ + { 242, 0 }, /* (183) fill_opt ::= */ + { 242, -6 }, /* (184) fill_opt ::= FILL LP ID COMMA tagitemlist RP */ + { 242, -4 }, /* (185) fill_opt ::= FILL LP ID RP */ + { 243, -4 }, /* (186) sliding_opt ::= SLIDING LP tmvar RP */ + { 243, 0 }, /* (187) sliding_opt ::= */ + { 245, 0 }, /* (188) orderby_opt ::= */ + { 245, -3 }, /* (189) orderby_opt ::= ORDER BY sortlist */ + { 256, -4 }, /* (190) sortlist ::= sortlist COMMA item sortorder */ + { 256, -2 }, /* (191) sortlist ::= item sortorder */ + { 258, -2 }, /* (192) item ::= ids cpxName */ + { 259, -1 }, /* (193) sortorder ::= ASC */ + { 259, -1 }, /* (194) sortorder ::= DESC */ + { 259, 0 }, /* (195) sortorder ::= */ + { 244, 0 }, /* (196) groupby_opt ::= */ + { 244, -3 }, /* (197) groupby_opt ::= GROUP BY grouplist */ + { 260, -3 }, /* (198) grouplist ::= grouplist COMMA item */ + { 260, -1 }, /* (199) grouplist ::= item */ + { 246, 0 }, /* (200) having_opt ::= */ + { 246, -2 }, /* (201) having_opt ::= HAVING expr */ + { 248, 0 }, /* (202) limit_opt ::= */ + { 248, -2 }, /* (203) limit_opt ::= LIMIT signed */ + { 248, -4 }, /* (204) limit_opt ::= LIMIT signed OFFSET signed */ + { 248, -4 }, /* (205) limit_opt ::= LIMIT signed COMMA signed */ + { 247, 0 }, /* (206) slimit_opt ::= */ + { 247, -2 }, /* (207) slimit_opt ::= SLIMIT signed */ + { 247, -4 }, /* (208) slimit_opt ::= SLIMIT signed SOFFSET signed */ + { 247, -4 }, /* (209) slimit_opt ::= SLIMIT signed COMMA signed */ + { 239, 0 }, /* (210) where_opt ::= */ + { 239, -2 }, /* (211) where_opt ::= WHERE expr */ + { 252, -3 }, /* (212) expr ::= LP expr RP */ + { 252, -1 }, /* (213) expr ::= ID */ + { 252, -3 }, /* (214) expr ::= ID DOT ID */ + { 252, -3 }, /* (215) expr ::= ID DOT STAR */ + { 252, -1 }, /* (216) expr ::= INTEGER */ + { 252, -2 }, /* (217) expr ::= MINUS INTEGER */ + { 252, -2 }, /* (218) expr ::= PLUS INTEGER */ + { 252, -1 }, /* (219) expr ::= FLOAT */ + { 252, -2 }, /* (220) expr ::= MINUS FLOAT */ + { 252, -2 }, /* (221) expr ::= PLUS FLOAT */ + { 252, -1 }, /* (222) expr ::= STRING */ + { 252, -1 }, /* (223) expr ::= NOW */ + { 252, -1 }, /* (224) expr ::= VARIABLE */ + { 252, -1 }, /* (225) expr ::= BOOL */ + { 252, -4 }, /* (226) expr ::= ID LP exprlist RP */ + { 252, -4 }, /* (227) expr ::= ID LP STAR RP */ + { 252, -3 }, /* (228) expr ::= expr IS NULL */ + { 252, -4 }, /* (229) expr ::= expr IS NOT NULL */ + { 252, -3 }, /* (230) expr ::= expr LT expr */ + { 252, -3 }, /* (231) expr ::= expr GT expr */ + { 252, -3 }, /* (232) expr ::= expr LE expr */ + { 252, -3 }, /* (233) expr ::= expr GE expr */ + { 252, -3 }, /* (234) expr ::= expr NE expr */ + { 252, -3 }, /* (235) expr ::= expr EQ expr */ + { 252, -5 }, /* (236) expr ::= expr BETWEEN expr AND expr */ + { 252, -3 }, /* (237) expr ::= expr AND expr */ + { 252, -3 }, /* (238) expr ::= expr OR expr */ + { 252, -3 }, /* (239) expr ::= expr PLUS expr */ + { 252, -3 }, /* (240) expr ::= expr MINUS expr */ + { 252, -3 }, /* (241) expr ::= expr STAR expr */ + { 252, -3 }, /* (242) expr ::= expr SLASH expr */ + { 252, -3 }, /* (243) expr ::= expr REM expr */ + { 252, -3 }, /* (244) expr ::= expr LIKE expr */ + { 252, -5 }, /* (245) expr ::= expr IN LP exprlist RP */ + { 261, -3 }, /* (246) exprlist ::= exprlist COMMA expritem */ + { 261, -1 }, /* (247) exprlist ::= expritem */ + { 262, -1 }, /* (248) expritem ::= expr */ + { 262, 0 }, /* (249) expritem ::= */ + { 189, -3 }, /* (250) cmd ::= RESET QUERY CACHE */ + { 189, -3 }, /* (251) cmd ::= SYNCDB ids REPLICA */ + { 189, -7 }, /* (252) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + { 189, -7 }, /* (253) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + { 189, -7 }, /* (254) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + { 189, -7 }, /* (255) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + { 189, -8 }, /* (256) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + { 189, -9 }, /* (257) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + { 189, -7 }, /* (258) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ + { 189, -7 }, /* (259) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ + { 189, -7 }, /* (260) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ + { 189, -7 }, /* (261) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ + { 189, -8 }, /* (262) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ + { 189, -3 }, /* (263) cmd ::= KILL CONNECTION INTEGER */ + { 189, -5 }, /* (264) cmd ::= KILL STREAM INTEGER COLON INTEGER */ + { 189, -5 }, /* (265) cmd ::= KILL QUERY INTEGER COLON INTEGER */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -2252,13 +2256,13 @@ static void yy_reduce( break; case 43: /* cmd ::= ALTER DATABASE ids alter_db_optr */ case 44: /* cmd ::= ALTER TOPIC ids alter_topic_optr */ yytestcase(yyruleno==44); -{ SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy94, &t);} +{ SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy322, &t);} break; case 45: /* cmd ::= ALTER ACCOUNT ids acct_optr */ -{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy419);} +{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy351);} break; case 46: /* cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy419);} +{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy351);} break; case 47: /* ids ::= ID */ case 48: /* ids ::= STRING */ yytestcase(yyruleno==48); @@ -2280,11 +2284,11 @@ static void yy_reduce( { setDCLSqlElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);} break; case 54: /* cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */ -{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy419);} +{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &yymsp[-3].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy351);} break; case 55: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */ case 56: /* cmd ::= CREATE TOPIC ifnotexists ids topic_optr */ yytestcase(yyruleno==56); -{ setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy94, &yymsp[-2].minor.yy0);} +{ setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy322, &yymsp[-2].minor.yy0);} break; case 57: /* cmd ::= CREATE USER ids PASS ids */ { setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);} @@ -2313,20 +2317,20 @@ static void yy_reduce( break; case 76: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */ { - yylhsminor.yy419.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; - yylhsminor.yy419.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; - yylhsminor.yy419.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; - yylhsminor.yy419.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; - yylhsminor.yy419.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; - yylhsminor.yy419.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy419.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; - yylhsminor.yy419.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; - yylhsminor.yy419.stat = yymsp[0].minor.yy0; + yylhsminor.yy351.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1; + yylhsminor.yy351.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1; + yylhsminor.yy351.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1; + yylhsminor.yy351.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1; + yylhsminor.yy351.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1; + yylhsminor.yy351.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy351.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1; + yylhsminor.yy351.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1; + yylhsminor.yy351.stat = yymsp[0].minor.yy0; } - yymsp[-8].minor.yy419 = yylhsminor.yy419; + yymsp[-8].minor.yy351 = yylhsminor.yy351; break; case 77: /* keep ::= KEEP tagitemlist */ -{ yymsp[-1].minor.yy429 = yymsp[0].minor.yy429; } +{ yymsp[-1].minor.yy159 = yymsp[0].minor.yy159; } break; case 78: /* cache ::= CACHE INTEGER */ case 79: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==79); @@ -2346,234 +2350,234 @@ static void yy_reduce( { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } break; case 93: /* db_optr ::= */ -{setDefaultCreateDbOption(&yymsp[1].minor.yy94); yymsp[1].minor.yy94.dbType = TSDB_DB_TYPE_DEFAULT;} +{setDefaultCreateDbOption(&yymsp[1].minor.yy322); yymsp[1].minor.yy322.dbType = TSDB_DB_TYPE_DEFAULT;} break; case 94: /* db_optr ::= db_optr cache */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 95: /* db_optr ::= db_optr replica */ case 112: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==112); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 96: /* db_optr ::= db_optr quorum */ case 113: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==113); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 97: /* db_optr ::= db_optr days */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 98: /* db_optr ::= db_optr minrows */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 99: /* db_optr ::= db_optr maxrows */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 100: /* db_optr ::= db_optr blocks */ case 115: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==115); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 101: /* db_optr ::= db_optr ctime */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 102: /* db_optr ::= db_optr wal */ case 117: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==117); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 103: /* db_optr ::= db_optr fsync */ case 118: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==118); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 104: /* db_optr ::= db_optr comp */ case 116: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==116); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 105: /* db_optr ::= db_optr prec */ -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.precision = yymsp[0].minor.yy0; } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.precision = yymsp[0].minor.yy0; } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 106: /* db_optr ::= db_optr keep */ case 114: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==114); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.keep = yymsp[0].minor.yy429; } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.keep = yymsp[0].minor.yy159; } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 107: /* db_optr ::= db_optr update */ case 119: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==119); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 108: /* db_optr ::= db_optr cachelast */ case 120: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==120); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 109: /* topic_optr ::= db_optr */ case 121: /* alter_topic_optr ::= alter_db_optr */ yytestcase(yyruleno==121); -{ yylhsminor.yy94 = yymsp[0].minor.yy94; yylhsminor.yy94.dbType = TSDB_DB_TYPE_TOPIC; } - yymsp[0].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[0].minor.yy322; yylhsminor.yy322.dbType = TSDB_DB_TYPE_TOPIC; } + yymsp[0].minor.yy322 = yylhsminor.yy322; break; case 110: /* topic_optr ::= topic_optr partitions */ case 122: /* alter_topic_optr ::= alter_topic_optr partitions */ yytestcase(yyruleno==122); -{ yylhsminor.yy94 = yymsp[-1].minor.yy94; yylhsminor.yy94.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[-1].minor.yy94 = yylhsminor.yy94; +{ yylhsminor.yy322 = yymsp[-1].minor.yy322; yylhsminor.yy322.partitions = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[-1].minor.yy322 = yylhsminor.yy322; break; case 111: /* alter_db_optr ::= */ -{ setDefaultCreateDbOption(&yymsp[1].minor.yy94); yymsp[1].minor.yy94.dbType = TSDB_DB_TYPE_DEFAULT;} +{ setDefaultCreateDbOption(&yymsp[1].minor.yy322); yymsp[1].minor.yy322.dbType = TSDB_DB_TYPE_DEFAULT;} break; case 123: /* typename ::= ids */ { yymsp[0].minor.yy0.type = 0; - tSetColumnType (&yylhsminor.yy451, &yymsp[0].minor.yy0); + tSetColumnType (&yylhsminor.yy407, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy451 = yylhsminor.yy451; + yymsp[0].minor.yy407 = yylhsminor.yy407; break; case 124: /* typename ::= ids LP signed RP */ { - if (yymsp[-1].minor.yy481 <= 0) { + if (yymsp[-1].minor.yy317 <= 0) { yymsp[-3].minor.yy0.type = 0; - tSetColumnType(&yylhsminor.yy451, &yymsp[-3].minor.yy0); + tSetColumnType(&yylhsminor.yy407, &yymsp[-3].minor.yy0); } else { - yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy481; // negative value of name length - tSetColumnType(&yylhsminor.yy451, &yymsp[-3].minor.yy0); + yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy317; // negative value of name length + tSetColumnType(&yylhsminor.yy407, &yymsp[-3].minor.yy0); } } - yymsp[-3].minor.yy451 = yylhsminor.yy451; + yymsp[-3].minor.yy407 = yylhsminor.yy407; break; case 125: /* typename ::= ids UNSIGNED */ { yymsp[-1].minor.yy0.type = 0; yymsp[-1].minor.yy0.n = ((yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z); - tSetColumnType (&yylhsminor.yy451, &yymsp[-1].minor.yy0); + tSetColumnType (&yylhsminor.yy407, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy451 = yylhsminor.yy451; + yymsp[-1].minor.yy407 = yylhsminor.yy407; break; case 126: /* signed ::= INTEGER */ -{ yylhsminor.yy481 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } - yymsp[0].minor.yy481 = yylhsminor.yy481; +{ yylhsminor.yy317 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } + yymsp[0].minor.yy317 = yylhsminor.yy317; break; case 127: /* signed ::= PLUS INTEGER */ -{ yymsp[-1].minor.yy481 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy317 = strtol(yymsp[0].minor.yy0.z, NULL, 10); } break; case 128: /* signed ::= MINUS INTEGER */ -{ yymsp[-1].minor.yy481 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} +{ yymsp[-1].minor.yy317 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);} break; case 132: /* cmd ::= CREATE TABLE create_table_list */ -{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy194;} +{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy14;} break; case 133: /* create_table_list ::= create_from_stable */ { SCreateTableSql* pCreateTable = calloc(1, sizeof(SCreateTableSql)); pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo)); - taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy252); + taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy206); pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE; - yylhsminor.yy194 = pCreateTable; + yylhsminor.yy14 = pCreateTable; } - yymsp[0].minor.yy194 = yylhsminor.yy194; + yymsp[0].minor.yy14 = yylhsminor.yy14; break; case 134: /* create_table_list ::= create_table_list create_from_stable */ { - taosArrayPush(yymsp[-1].minor.yy194->childTableInfo, &yymsp[0].minor.yy252); - yylhsminor.yy194 = yymsp[-1].minor.yy194; + taosArrayPush(yymsp[-1].minor.yy14->childTableInfo, &yymsp[0].minor.yy206); + yylhsminor.yy14 = yymsp[-1].minor.yy14; } - yymsp[-1].minor.yy194 = yylhsminor.yy194; + yymsp[-1].minor.yy14 = yylhsminor.yy14; break; case 135: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */ { - yylhsminor.yy194 = tSetCreateTableInfo(yymsp[-1].minor.yy429, NULL, NULL, TSQL_CREATE_TABLE); - setSqlInfo(pInfo, yylhsminor.yy194, NULL, TSDB_SQL_CREATE_TABLE); + yylhsminor.yy14 = tSetCreateTableInfo(yymsp[-1].minor.yy159, NULL, NULL, TSQL_CREATE_TABLE); + setSqlInfo(pInfo, yylhsminor.yy14, NULL, TSDB_SQL_CREATE_TABLE); yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; setCreatedTableName(pInfo, &yymsp[-4].minor.yy0, &yymsp[-5].minor.yy0); } - yymsp[-5].minor.yy194 = yylhsminor.yy194; + yymsp[-5].minor.yy14 = yylhsminor.yy14; break; case 136: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */ { - yylhsminor.yy194 = tSetCreateTableInfo(yymsp[-5].minor.yy429, yymsp[-1].minor.yy429, NULL, TSQL_CREATE_STABLE); - setSqlInfo(pInfo, yylhsminor.yy194, NULL, TSDB_SQL_CREATE_TABLE); + yylhsminor.yy14 = tSetCreateTableInfo(yymsp[-5].minor.yy159, yymsp[-1].minor.yy159, NULL, TSQL_CREATE_STABLE); + setSqlInfo(pInfo, yylhsminor.yy14, NULL, TSDB_SQL_CREATE_TABLE); yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; setCreatedTableName(pInfo, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); } - yymsp[-9].minor.yy194 = yylhsminor.yy194; + yymsp[-9].minor.yy14 = yylhsminor.yy14; break; case 137: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; - yylhsminor.yy252 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy429, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); + yylhsminor.yy206 = createNewChildTableInfo(&yymsp[-5].minor.yy0, NULL, yymsp[-1].minor.yy159, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0); } - yymsp[-9].minor.yy252 = yylhsminor.yy252; + yymsp[-9].minor.yy206 = yylhsminor.yy206; break; case 138: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName LP tagNamelist RP TAGS LP tagitemlist RP */ { yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n; yymsp[-11].minor.yy0.n += yymsp[-10].minor.yy0.n; - yylhsminor.yy252 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy429, yymsp[-1].minor.yy429, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0); + yylhsminor.yy206 = createNewChildTableInfo(&yymsp[-8].minor.yy0, yymsp[-5].minor.yy159, yymsp[-1].minor.yy159, &yymsp[-11].minor.yy0, &yymsp[-12].minor.yy0); } - yymsp[-12].minor.yy252 = yylhsminor.yy252; + yymsp[-12].minor.yy206 = yylhsminor.yy206; break; case 139: /* tagNamelist ::= tagNamelist COMMA ids */ -{taosArrayPush(yymsp[-2].minor.yy429, &yymsp[0].minor.yy0); yylhsminor.yy429 = yymsp[-2].minor.yy429; } - yymsp[-2].minor.yy429 = yylhsminor.yy429; +{taosArrayPush(yymsp[-2].minor.yy159, &yymsp[0].minor.yy0); yylhsminor.yy159 = yymsp[-2].minor.yy159; } + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 140: /* tagNamelist ::= ids */ -{yylhsminor.yy429 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy429, &yymsp[0].minor.yy0);} - yymsp[0].minor.yy429 = yylhsminor.yy429; +{yylhsminor.yy159 = taosArrayInit(4, sizeof(SStrToken)); taosArrayPush(yylhsminor.yy159, &yymsp[0].minor.yy0);} + yymsp[0].minor.yy159 = yylhsminor.yy159; break; case 141: /* create_table_args ::= ifnotexists ids cpxName AS select */ { - yylhsminor.yy194 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy254, TSQL_CREATE_STREAM); - setSqlInfo(pInfo, yylhsminor.yy194, NULL, TSDB_SQL_CREATE_TABLE); + yylhsminor.yy14 = tSetCreateTableInfo(NULL, NULL, yymsp[0].minor.yy272, TSQL_CREATE_STREAM); + setSqlInfo(pInfo, yylhsminor.yy14, NULL, TSDB_SQL_CREATE_TABLE); yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n; setCreatedTableName(pInfo, &yymsp[-3].minor.yy0, &yymsp[-4].minor.yy0); } - yymsp[-4].minor.yy194 = yylhsminor.yy194; + yymsp[-4].minor.yy14 = yylhsminor.yy14; break; case 142: /* columnlist ::= columnlist COMMA column */ -{taosArrayPush(yymsp[-2].minor.yy429, &yymsp[0].minor.yy451); yylhsminor.yy429 = yymsp[-2].minor.yy429; } - yymsp[-2].minor.yy429 = yylhsminor.yy429; +{taosArrayPush(yymsp[-2].minor.yy159, &yymsp[0].minor.yy407); yylhsminor.yy159 = yymsp[-2].minor.yy159; } + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 143: /* columnlist ::= column */ -{yylhsminor.yy429 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy429, &yymsp[0].minor.yy451);} - yymsp[0].minor.yy429 = yylhsminor.yy429; +{yylhsminor.yy159 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy159, &yymsp[0].minor.yy407);} + yymsp[0].minor.yy159 = yylhsminor.yy159; break; case 144: /* column ::= ids typename */ { - tSetColumnInfo(&yylhsminor.yy451, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy451); + tSetColumnInfo(&yylhsminor.yy407, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy407); } - yymsp[-1].minor.yy451 = yylhsminor.yy451; + yymsp[-1].minor.yy407 = yylhsminor.yy407; break; case 145: /* tagitemlist ::= tagitemlist COMMA tagitem */ -{ yylhsminor.yy429 = tVariantListAppend(yymsp[-2].minor.yy429, &yymsp[0].minor.yy218, -1); } - yymsp[-2].minor.yy429 = yylhsminor.yy429; +{ yylhsminor.yy159 = tVariantListAppend(yymsp[-2].minor.yy159, &yymsp[0].minor.yy488, -1); } + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 146: /* tagitemlist ::= tagitem */ -{ yylhsminor.yy429 = tVariantListAppend(NULL, &yymsp[0].minor.yy218, -1); } - yymsp[0].minor.yy429 = yylhsminor.yy429; +{ yylhsminor.yy159 = tVariantListAppend(NULL, &yymsp[0].minor.yy488, -1); } + yymsp[0].minor.yy159 = yylhsminor.yy159; break; case 147: /* tagitem ::= INTEGER */ case 148: /* tagitem ::= FLOAT */ yytestcase(yyruleno==148); case 149: /* tagitem ::= STRING */ yytestcase(yyruleno==149); case 150: /* tagitem ::= BOOL */ yytestcase(yyruleno==150); -{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy218, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy218 = yylhsminor.yy218; +{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy488, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy488 = yylhsminor.yy488; break; case 151: /* tagitem ::= NULL */ -{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy218, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy218 = yylhsminor.yy218; +{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy488, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy488 = yylhsminor.yy488; break; case 152: /* tagitem ::= MINUS INTEGER */ case 153: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==153); @@ -2583,56 +2587,56 @@ static void yy_reduce( yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = yymsp[0].minor.yy0.type; toTSDBType(yymsp[-1].minor.yy0.type); - tVariantCreate(&yylhsminor.yy218, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy488, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy218 = yylhsminor.yy218; + yymsp[-1].minor.yy488 = yylhsminor.yy488; break; case 156: /* select ::= SELECT selcollist from where_opt interval_opt session_option fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */ { - yylhsminor.yy254 = tSetQuerySqlNode(&yymsp[-12].minor.yy0, yymsp[-11].minor.yy429, yymsp[-10].minor.yy70, yymsp[-9].minor.yy170, yymsp[-4].minor.yy429, yymsp[-3].minor.yy429, &yymsp[-8].minor.yy220, &yymsp[-7].minor.yy87, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy429, &yymsp[0].minor.yy18, &yymsp[-1].minor.yy18); + yylhsminor.yy272 = tSetQuerySqlNode(&yymsp[-12].minor.yy0, yymsp[-11].minor.yy159, yymsp[-10].minor.yy514, yymsp[-9].minor.yy118, yymsp[-4].minor.yy159, yymsp[-3].minor.yy159, &yymsp[-8].minor.yy184, &yymsp[-7].minor.yy249, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy159, &yymsp[0].minor.yy440, &yymsp[-1].minor.yy440); } - yymsp[-12].minor.yy254 = yylhsminor.yy254; + yymsp[-12].minor.yy272 = yylhsminor.yy272; break; case 157: /* select ::= LP select RP */ -{yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;} +{yymsp[-2].minor.yy272 = yymsp[-1].minor.yy272;} break; case 158: /* union ::= select */ -{ yylhsminor.yy141 = setSubclause(NULL, yymsp[0].minor.yy254); } - yymsp[0].minor.yy141 = yylhsminor.yy141; +{ yylhsminor.yy391 = setSubclause(NULL, yymsp[0].minor.yy272); } + yymsp[0].minor.yy391 = yylhsminor.yy391; break; case 159: /* union ::= union UNION ALL select */ -{ yylhsminor.yy141 = appendSelectClause(yymsp[-3].minor.yy141, yymsp[0].minor.yy254); } - yymsp[-3].minor.yy141 = yylhsminor.yy141; +{ yylhsminor.yy391 = appendSelectClause(yymsp[-3].minor.yy391, yymsp[0].minor.yy272); } + yymsp[-3].minor.yy391 = yylhsminor.yy391; break; case 160: /* cmd ::= union */ -{ setSqlInfo(pInfo, yymsp[0].minor.yy141, NULL, TSDB_SQL_SELECT); } +{ setSqlInfo(pInfo, yymsp[0].minor.yy391, NULL, TSDB_SQL_SELECT); } break; case 161: /* select ::= SELECT selcollist */ { - yylhsminor.yy254 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy429, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + yylhsminor.yy272 = tSetQuerySqlNode(&yymsp[-1].minor.yy0, yymsp[0].minor.yy159, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } - yymsp[-1].minor.yy254 = yylhsminor.yy254; + yymsp[-1].minor.yy272 = yylhsminor.yy272; break; case 162: /* sclp ::= selcollist COMMA */ -{yylhsminor.yy429 = yymsp[-1].minor.yy429;} - yymsp[-1].minor.yy429 = yylhsminor.yy429; +{yylhsminor.yy159 = yymsp[-1].minor.yy159;} + yymsp[-1].minor.yy159 = yylhsminor.yy159; break; case 163: /* sclp ::= */ case 188: /* orderby_opt ::= */ yytestcase(yyruleno==188); -{yymsp[1].minor.yy429 = 0;} +{yymsp[1].minor.yy159 = 0;} break; case 164: /* selcollist ::= sclp distinct expr as */ { - yylhsminor.yy429 = tSqlExprListAppend(yymsp[-3].minor.yy429, yymsp[-1].minor.yy170, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); + yylhsminor.yy159 = tSqlExprListAppend(yymsp[-3].minor.yy159, yymsp[-1].minor.yy118, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0); } - yymsp[-3].minor.yy429 = yylhsminor.yy429; + yymsp[-3].minor.yy159 = yylhsminor.yy159; break; case 165: /* selcollist ::= sclp STAR */ { tSqlExpr *pNode = tSqlExprCreateIdValue(NULL, TK_ALL); - yylhsminor.yy429 = tSqlExprListAppend(yymsp[-1].minor.yy429, pNode, 0, 0); + yylhsminor.yy159 = tSqlExprListAppend(yymsp[-1].minor.yy159, pNode, 0, 0); } - yymsp[-1].minor.yy429 = yylhsminor.yy429; + yymsp[-1].minor.yy159 = yylhsminor.yy159; break; case 166: /* as ::= AS ids */ { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; } @@ -2649,35 +2653,35 @@ static void yy_reduce( yymsp[0].minor.yy0 = yylhsminor.yy0; break; case 171: /* from ::= FROM tablelist */ -{yymsp[-1].minor.yy70 = yymsp[0].minor.yy429;} +{yymsp[-1].minor.yy514 = yymsp[0].minor.yy159;} break; case 172: /* from ::= FROM LP union RP */ -{yymsp[-3].minor.yy70 = yymsp[-1].minor.yy141;} +{yymsp[-3].minor.yy514 = yymsp[-1].minor.yy391;} break; case 173: /* tablelist ::= ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - yylhsminor.yy429 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL); + yylhsminor.yy159 = setTableNameList(NULL, &yymsp[-1].minor.yy0, NULL); } - yymsp[-1].minor.yy429 = yylhsminor.yy429; + yymsp[-1].minor.yy159 = yylhsminor.yy159; break; case 174: /* tablelist ::= ids cpxName ids */ { toTSDBType(yymsp[-2].minor.yy0.type); toTSDBType(yymsp[0].minor.yy0.type); yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; - yylhsminor.yy429 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); + yylhsminor.yy159 = setTableNameList(NULL, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy429 = yylhsminor.yy429; + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 175: /* tablelist ::= tablelist COMMA ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - yylhsminor.yy429 = setTableNameList(yymsp[-3].minor.yy429, &yymsp[-1].minor.yy0, NULL); + yylhsminor.yy159 = setTableNameList(yymsp[-3].minor.yy159, &yymsp[-1].minor.yy0, NULL); } - yymsp[-3].minor.yy429 = yylhsminor.yy429; + yymsp[-3].minor.yy159 = yylhsminor.yy159; break; case 176: /* tablelist ::= tablelist COMMA ids cpxName ids */ { @@ -2685,35 +2689,35 @@ static void yy_reduce( toTSDBType(yymsp[0].minor.yy0.type); yymsp[-2].minor.yy0.n += yymsp[-1].minor.yy0.n; - yylhsminor.yy429 = setTableNameList(yymsp[-4].minor.yy429, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); + yylhsminor.yy159 = setTableNameList(yymsp[-4].minor.yy159, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } - yymsp[-4].minor.yy429 = yylhsminor.yy429; + yymsp[-4].minor.yy159 = yylhsminor.yy159; break; case 177: /* tmvar ::= VARIABLE */ {yylhsminor.yy0 = yymsp[0].minor.yy0;} yymsp[0].minor.yy0 = yylhsminor.yy0; break; case 178: /* interval_opt ::= INTERVAL LP tmvar RP */ -{yymsp[-3].minor.yy220.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy220.offset.n = 0;} +{yymsp[-3].minor.yy184.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy184.offset.n = 0;} break; case 179: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */ -{yymsp[-5].minor.yy220.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy220.offset = yymsp[-1].minor.yy0;} +{yymsp[-5].minor.yy184.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy184.offset = yymsp[-1].minor.yy0;} break; case 180: /* interval_opt ::= */ -{memset(&yymsp[1].minor.yy220, 0, sizeof(yymsp[1].minor.yy220));} +{memset(&yymsp[1].minor.yy184, 0, sizeof(yymsp[1].minor.yy184));} break; case 181: /* session_option ::= */ -{yymsp[1].minor.yy87.col.n = 0; yymsp[1].minor.yy87.gap.n = 0;} +{yymsp[1].minor.yy249.col.n = 0; yymsp[1].minor.yy249.gap.n = 0;} break; case 182: /* session_option ::= SESSION LP ids cpxName COMMA tmvar RP */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - yymsp[-6].minor.yy87.col = yymsp[-4].minor.yy0; - yymsp[-6].minor.yy87.gap = yymsp[-1].minor.yy0; + yymsp[-6].minor.yy249.col = yymsp[-4].minor.yy0; + yymsp[-6].minor.yy249.gap = yymsp[-1].minor.yy0; } break; case 183: /* fill_opt ::= */ -{ yymsp[1].minor.yy429 = 0; } +{ yymsp[1].minor.yy159 = 0; } break; case 184: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */ { @@ -2721,14 +2725,14 @@ static void yy_reduce( toTSDBType(yymsp[-3].minor.yy0.type); tVariantCreate(&A, &yymsp[-3].minor.yy0); - tVariantListInsert(yymsp[-1].minor.yy429, &A, -1, 0); - yymsp[-5].minor.yy429 = yymsp[-1].minor.yy429; + tVariantListInsert(yymsp[-1].minor.yy159, &A, -1, 0); + yymsp[-5].minor.yy159 = yymsp[-1].minor.yy159; } break; case 185: /* fill_opt ::= FILL LP ID RP */ { toTSDBType(yymsp[-1].minor.yy0.type); - yymsp[-3].minor.yy429 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); + yymsp[-3].minor.yy159 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1); } break; case 186: /* sliding_opt ::= SLIDING LP tmvar RP */ @@ -2738,238 +2742,241 @@ static void yy_reduce( {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; } break; case 189: /* orderby_opt ::= ORDER BY sortlist */ -{yymsp[-2].minor.yy429 = yymsp[0].minor.yy429;} +{yymsp[-2].minor.yy159 = yymsp[0].minor.yy159;} break; case 190: /* sortlist ::= sortlist COMMA item sortorder */ { - yylhsminor.yy429 = tVariantListAppend(yymsp[-3].minor.yy429, &yymsp[-1].minor.yy218, yymsp[0].minor.yy116); + yylhsminor.yy159 = tVariantListAppend(yymsp[-3].minor.yy159, &yymsp[-1].minor.yy488, yymsp[0].minor.yy20); } - yymsp[-3].minor.yy429 = yylhsminor.yy429; + yymsp[-3].minor.yy159 = yylhsminor.yy159; break; case 191: /* sortlist ::= item sortorder */ { - yylhsminor.yy429 = tVariantListAppend(NULL, &yymsp[-1].minor.yy218, yymsp[0].minor.yy116); + yylhsminor.yy159 = tVariantListAppend(NULL, &yymsp[-1].minor.yy488, yymsp[0].minor.yy20); } - yymsp[-1].minor.yy429 = yylhsminor.yy429; + yymsp[-1].minor.yy159 = yylhsminor.yy159; break; case 192: /* item ::= ids cpxName */ { toTSDBType(yymsp[-1].minor.yy0.type); yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; - tVariantCreate(&yylhsminor.yy218, &yymsp[-1].minor.yy0); + tVariantCreate(&yylhsminor.yy488, &yymsp[-1].minor.yy0); } - yymsp[-1].minor.yy218 = yylhsminor.yy218; + yymsp[-1].minor.yy488 = yylhsminor.yy488; break; case 193: /* sortorder ::= ASC */ -{ yymsp[0].minor.yy116 = TSDB_ORDER_ASC; } +{ yymsp[0].minor.yy20 = TSDB_ORDER_ASC; } break; case 194: /* sortorder ::= DESC */ -{ yymsp[0].minor.yy116 = TSDB_ORDER_DESC;} +{ yymsp[0].minor.yy20 = TSDB_ORDER_DESC;} break; case 195: /* sortorder ::= */ -{ yymsp[1].minor.yy116 = TSDB_ORDER_ASC; } +{ yymsp[1].minor.yy20 = TSDB_ORDER_ASC; } break; case 196: /* groupby_opt ::= */ -{ yymsp[1].minor.yy429 = 0;} +{ yymsp[1].minor.yy159 = 0;} break; case 197: /* groupby_opt ::= GROUP BY grouplist */ -{ yymsp[-2].minor.yy429 = yymsp[0].minor.yy429;} +{ yymsp[-2].minor.yy159 = yymsp[0].minor.yy159;} break; case 198: /* grouplist ::= grouplist COMMA item */ { - yylhsminor.yy429 = tVariantListAppend(yymsp[-2].minor.yy429, &yymsp[0].minor.yy218, -1); + yylhsminor.yy159 = tVariantListAppend(yymsp[-2].minor.yy159, &yymsp[0].minor.yy488, -1); } - yymsp[-2].minor.yy429 = yylhsminor.yy429; + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 199: /* grouplist ::= item */ { - yylhsminor.yy429 = tVariantListAppend(NULL, &yymsp[0].minor.yy218, -1); + yylhsminor.yy159 = tVariantListAppend(NULL, &yymsp[0].minor.yy488, -1); } - yymsp[0].minor.yy429 = yylhsminor.yy429; + yymsp[0].minor.yy159 = yylhsminor.yy159; break; case 200: /* having_opt ::= */ case 210: /* where_opt ::= */ yytestcase(yyruleno==210); case 249: /* expritem ::= */ yytestcase(yyruleno==249); -{yymsp[1].minor.yy170 = 0;} +{yymsp[1].minor.yy118 = 0;} break; case 201: /* having_opt ::= HAVING expr */ case 211: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==211); -{yymsp[-1].minor.yy170 = yymsp[0].minor.yy170;} +{yymsp[-1].minor.yy118 = yymsp[0].minor.yy118;} break; case 202: /* limit_opt ::= */ case 206: /* slimit_opt ::= */ yytestcase(yyruleno==206); -{yymsp[1].minor.yy18.limit = -1; yymsp[1].minor.yy18.offset = 0;} +{yymsp[1].minor.yy440.limit = -1; yymsp[1].minor.yy440.offset = 0;} break; case 203: /* limit_opt ::= LIMIT signed */ case 207: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==207); -{yymsp[-1].minor.yy18.limit = yymsp[0].minor.yy481; yymsp[-1].minor.yy18.offset = 0;} +{yymsp[-1].minor.yy440.limit = yymsp[0].minor.yy317; yymsp[-1].minor.yy440.offset = 0;} break; case 204: /* limit_opt ::= LIMIT signed OFFSET signed */ -{ yymsp[-3].minor.yy18.limit = yymsp[-2].minor.yy481; yymsp[-3].minor.yy18.offset = yymsp[0].minor.yy481;} +{ yymsp[-3].minor.yy440.limit = yymsp[-2].minor.yy317; yymsp[-3].minor.yy440.offset = yymsp[0].minor.yy317;} break; case 205: /* limit_opt ::= LIMIT signed COMMA signed */ -{ yymsp[-3].minor.yy18.limit = yymsp[0].minor.yy481; yymsp[-3].minor.yy18.offset = yymsp[-2].minor.yy481;} +{ yymsp[-3].minor.yy440.limit = yymsp[0].minor.yy317; yymsp[-3].minor.yy440.offset = yymsp[-2].minor.yy317;} break; case 208: /* slimit_opt ::= SLIMIT signed SOFFSET signed */ -{yymsp[-3].minor.yy18.limit = yymsp[-2].minor.yy481; yymsp[-3].minor.yy18.offset = yymsp[0].minor.yy481;} +{yymsp[-3].minor.yy440.limit = yymsp[-2].minor.yy317; yymsp[-3].minor.yy440.offset = yymsp[0].minor.yy317;} break; case 209: /* slimit_opt ::= SLIMIT signed COMMA signed */ -{yymsp[-3].minor.yy18.limit = yymsp[0].minor.yy481; yymsp[-3].minor.yy18.offset = yymsp[-2].minor.yy481;} +{yymsp[-3].minor.yy440.limit = yymsp[0].minor.yy317; yymsp[-3].minor.yy440.offset = yymsp[-2].minor.yy317;} break; case 212: /* expr ::= LP expr RP */ -{yylhsminor.yy170 = yymsp[-1].minor.yy170; yylhsminor.yy170->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy170->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = yymsp[-1].minor.yy118; yylhsminor.yy118->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy118->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 213: /* expr ::= ID */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_ID);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 214: /* expr ::= ID DOT ID */ -{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ID);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 215: /* expr ::= ID DOT STAR */ -{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[-2].minor.yy0, TK_ALL);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 216: /* expr ::= INTEGER */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_INTEGER);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 217: /* expr ::= MINUS INTEGER */ case 218: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==218); -{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);} - yymsp[-1].minor.yy170 = yylhsminor.yy170; +{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_INTEGER);} + yymsp[-1].minor.yy118 = yylhsminor.yy118; break; case 219: /* expr ::= FLOAT */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_FLOAT);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 220: /* expr ::= MINUS FLOAT */ case 221: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==221); -{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);} - yymsp[-1].minor.yy170 = yylhsminor.yy170; +{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[-1].minor.yy0, TK_FLOAT);} + yymsp[-1].minor.yy118 = yylhsminor.yy118; break; case 222: /* expr ::= STRING */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_STRING);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 223: /* expr ::= NOW */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); } - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_NOW); } + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 224: /* expr ::= VARIABLE */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_VARIABLE);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 225: /* expr ::= BOOL */ -{ yylhsminor.yy170 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateIdValue(&yymsp[0].minor.yy0, TK_BOOL);} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 226: /* expr ::= ID LP exprlist RP */ -{ yylhsminor.yy170 = tSqlExprCreateFunction(yymsp[-1].minor.yy429, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateFunction(yymsp[-1].minor.yy159, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } + yymsp[-3].minor.yy118 = yylhsminor.yy118; break; case 227: /* expr ::= ID LP STAR RP */ -{ yylhsminor.yy170 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } - yymsp[-3].minor.yy170 = yylhsminor.yy170; +{ yylhsminor.yy118 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); } + yymsp[-3].minor.yy118 = yylhsminor.yy118; break; case 228: /* expr ::= expr IS NULL */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, NULL, TK_ISNULL);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, NULL, TK_ISNULL);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 229: /* expr ::= expr IS NOT NULL */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-3].minor.yy170, NULL, TK_NOTNULL);} - yymsp[-3].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-3].minor.yy118, NULL, TK_NOTNULL);} + yymsp[-3].minor.yy118 = yylhsminor.yy118; break; case 230: /* expr ::= expr LT expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_LT);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_LT);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 231: /* expr ::= expr GT expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_GT);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_GT);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 232: /* expr ::= expr LE expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_LE);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_LE);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 233: /* expr ::= expr GE expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_GE);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_GE);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 234: /* expr ::= expr NE expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_NE);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_NE);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 235: /* expr ::= expr EQ expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_EQ);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_EQ);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 236: /* expr ::= expr BETWEEN expr AND expr */ -{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy170); yylhsminor.yy170 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy170, yymsp[-2].minor.yy170, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy170, TK_LE), TK_AND);} - yymsp[-4].minor.yy170 = yylhsminor.yy170; +{ tSqlExpr* X2 = tSqlExprClone(yymsp[-4].minor.yy118); yylhsminor.yy118 = tSqlExprCreate(tSqlExprCreate(yymsp[-4].minor.yy118, yymsp[-2].minor.yy118, TK_GE), tSqlExprCreate(X2, yymsp[0].minor.yy118, TK_LE), TK_AND);} + yymsp[-4].minor.yy118 = yylhsminor.yy118; break; case 237: /* expr ::= expr AND expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_AND);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_AND);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 238: /* expr ::= expr OR expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_OR); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_OR); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 239: /* expr ::= expr PLUS expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_PLUS); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_PLUS); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 240: /* expr ::= expr MINUS expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_MINUS); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_MINUS); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 241: /* expr ::= expr STAR expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_STAR); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_STAR); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 242: /* expr ::= expr SLASH expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_DIVIDE);} - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_DIVIDE);} + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 243: /* expr ::= expr REM expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_REM); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_REM); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 244: /* expr ::= expr LIKE expr */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-2].minor.yy170, yymsp[0].minor.yy170, TK_LIKE); } - yymsp[-2].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-2].minor.yy118, yymsp[0].minor.yy118, TK_LIKE); } + yymsp[-2].minor.yy118 = yylhsminor.yy118; break; case 245: /* expr ::= expr IN LP exprlist RP */ -{yylhsminor.yy170 = tSqlExprCreate(yymsp[-4].minor.yy170, (tSqlExpr*)yymsp[-1].minor.yy429, TK_IN); } - yymsp[-4].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = tSqlExprCreate(yymsp[-4].minor.yy118, (tSqlExpr*)yymsp[-1].minor.yy159, TK_IN); } + yymsp[-4].minor.yy118 = yylhsminor.yy118; break; case 246: /* exprlist ::= exprlist COMMA expritem */ -{yylhsminor.yy429 = tSqlExprListAppend(yymsp[-2].minor.yy429,yymsp[0].minor.yy170,0, 0);} - yymsp[-2].minor.yy429 = yylhsminor.yy429; +{yylhsminor.yy159 = tSqlExprListAppend(yymsp[-2].minor.yy159,yymsp[0].minor.yy118,0, 0);} + yymsp[-2].minor.yy159 = yylhsminor.yy159; break; case 247: /* exprlist ::= expritem */ -{yylhsminor.yy429 = tSqlExprListAppend(0,yymsp[0].minor.yy170,0, 0);} - yymsp[0].minor.yy429 = yylhsminor.yy429; +{yylhsminor.yy159 = tSqlExprListAppend(0,yymsp[0].minor.yy118,0, 0);} + yymsp[0].minor.yy159 = yylhsminor.yy159; break; case 248: /* expritem ::= expr */ -{yylhsminor.yy170 = yymsp[0].minor.yy170;} - yymsp[0].minor.yy170 = yylhsminor.yy170; +{yylhsminor.yy118 = yymsp[0].minor.yy118;} + yymsp[0].minor.yy118 = yylhsminor.yy118; break; case 250: /* cmd ::= RESET QUERY CACHE */ { setDCLSqlElems(pInfo, TSDB_SQL_RESET_CACHE, 0);} break; - case 251: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ + case 251: /* cmd ::= SYNCDB ids REPLICA */ +{ setDCLSqlElems(pInfo, TSDB_SQL_SYNC_DB_REPLICA, 1, &yymsp[-1].minor.yy0);} + break; + case 252: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy429, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1); + SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy159, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 252: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ + case 253: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2980,14 +2987,14 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 253: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ + case 254: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy429, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1); + SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy159, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 254: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ + case 255: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -2998,7 +3005,7 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 255: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ + case 256: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; @@ -3012,26 +3019,26 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 256: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ + case 257: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */ { yymsp[-6].minor.yy0.n += yymsp[-5].minor.yy0.n; toTSDBType(yymsp[-2].minor.yy0.type); SArray* A = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1); - A = tVariantListAppend(A, &yymsp[0].minor.yy218, -1); + A = tVariantListAppend(A, &yymsp[0].minor.yy488, -1); SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 257: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ + case 258: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy429, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE); + SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy159, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 258: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ + case 259: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -3042,14 +3049,14 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 259: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ + case 260: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; - SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy429, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE); + SAlterTableInfo* pAlterTable = tSetAlterTableInfo(&yymsp[-4].minor.yy0, yymsp[0].minor.yy159, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE); setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 260: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ + case 261: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */ { yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n; @@ -3060,7 +3067,7 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 261: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ + case 262: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */ { yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n; @@ -3074,13 +3081,13 @@ static void yy_reduce( setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE); } break; - case 262: /* cmd ::= KILL CONNECTION INTEGER */ + case 263: /* cmd ::= KILL CONNECTION INTEGER */ {setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);} break; - case 263: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ + case 264: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSql(pInfo, TSDB_SQL_KILL_STREAM, &yymsp[-2].minor.yy0);} break; - case 264: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ + case 265: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */ {yymsp[-2].minor.yy0.n += (yymsp[-1].minor.yy0.n + yymsp[0].minor.yy0.n); setKillSql(pInfo, TSDB_SQL_KILL_QUERY, &yymsp[-2].minor.yy0);} break; default: From 076d54a9accf1f46c9849f81cbf0066b1ceeb9c6 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 23 Mar 2021 17:17:12 +0800 Subject: [PATCH 26/31] [td-225]fix compiler error. --- src/client/src/tscAsync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c index 432f4d94fd..490f9e1291 100644 --- a/src/client/src/tscAsync.c +++ b/src/client/src/tscAsync.c @@ -317,7 +317,7 @@ static int32_t updateMetaBeforeRetryQuery(SSqlObj* pSql, STableMetaInfo* pTableM // update the pExpr info, colList info, number of table columns // TODO Re-parse this sql and issue the corresponding subquery as an alternative for this case. if (pSql->retryReason == TSDB_CODE_TDB_INVALID_TABLE_ID) { - int32_t numOfExprs = tscSqlExprNumOfExprs(pQueryInfo); + int32_t numOfExprs = (int32_t) tscSqlExprNumOfExprs(pQueryInfo); int32_t numOfCols = tscGetNumOfColumns(pTableMetaInfo->pTableMeta); int32_t numOfTags = tscGetNumOfTags(pTableMetaInfo->pTableMeta); From e65475cc1db3e38c1a3bfdc51de24d42f30947c8 Mon Sep 17 00:00:00 2001 From: Ping Xiao Date: Tue, 23 Mar 2021 18:05:04 +0800 Subject: [PATCH 27/31] update docker cluster script --- .../clusterEnvSetup/buildClusterEnv.sh | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh b/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh index 0057a970ca..60c81cd82b 100755 --- a/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh +++ b/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh @@ -68,20 +68,14 @@ function prepareBuild { rm -rf $CURR_DIR/../../../../release/* fi - if [ ! -e $DOCKER_DIR/TDengine-server-$VERSION-Linux-x64.tar.gz ] || [ ! -e $DOCKER_DIR/TDengine-arbitrator-$VERSION-Linux-x64.tar.gz ]; then - cd $CURR_DIR/../../../../packaging - echo $CURR_DIR - echo $IN_TDINTERNAL - echo "generating TDeninger packages" - if [[ "$CURR_DIR" == *"$IN_TDINTERNAL"* ]]; then - pwd - ./release.sh -v cluster -n $VERSION >> /dev/null 2>&1 - else - pwd - ./release.sh -v edge -n $VERSION >> /dev/null 2>&1 - fi + cd $CURR_DIR/../../../../packaging - if [[ "$CURR_DIR" == *"$IN_TDINTERNAL"* ]]; then + if [[ "$CURR_DIR" == *"$IN_TDINTERNAL"* ]]; then + if [ ! -e $DOCKER_DIR/TDengine-enterprise-server-$VERSION-Linux-x64.tar.gz ] || [ ! -e $DOCKER_DIR/TDengine-enterprise-arbitrator-$VERSION-Linux-x64.tar.gz ]; then + + echo "generating TDeninge enterprise packages" + ./release.sh -v cluster -n $VERSION >> /dev/null 2>&1 + if [ ! -e $CURR_DIR/../../../../release/TDengine-enterprise-server-$VERSION-Linux-x64.tar.gz ]; then echo "no TDengine install package found" exit 1 @@ -91,7 +85,17 @@ function prepareBuild { echo "no arbitrator install package found" exit 1 fi - else + + cd $CURR_DIR/../../../../release + mv TDengine-enterprise-server-$VERSION-Linux-x64.tar.gz $DOCKER_DIR + mv TDengine-enterprise-arbitrator-$VERSION-Linux-x64.tar.gz $DOCKER_DIR + fi + else + if [ ! -e $DOCKER_DIR/TDengine-server-$VERSION-Linux-x64.tar.gz ] || [ ! -e $DOCKER_DIR/TDengine-arbitrator-$VERSION-Linux-x64.tar.gz ]; then + + echo "generating TDeninge community packages" + ./release.sh -v edge -n $VERSION >> /dev/null 2>&1 + if [ ! -e $CURR_DIR/../../../../release/TDengine-server-$VERSION-Linux-x64.tar.gz ]; then echo "no TDengine install package found" exit 1 @@ -101,16 +105,11 @@ function prepareBuild { echo "no arbitrator install package found" exit 1 fi - fi - cd $CURR_DIR/../../../../release - if [[ "$CURR_DIR" == *"$IN_TDINTERNAL"* ]]; then - mv TDengine-enterprise-server-$VERSION-Linux-x64.tar.gz $DOCKER_DIR - mv TDengine-enterprise-arbitrator-$VERSION-Linux-x64.tar.gz $DOCKER_DIR - else + cd $CURR_DIR/../../../../release mv TDengine-server-$VERSION-Linux-x64.tar.gz $DOCKER_DIR mv TDengine-arbitrator-$VERSION-Linux-x64.tar.gz $DOCKER_DIR - fi + fi fi rm -rf $DOCKER_DIR/*.yml From 49b674c3d277d97d6a179752cd60492186c75bd2 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Wed, 24 Mar 2021 10:37:30 +0800 Subject: [PATCH 28/31] [TD-3433] : fix child table count issue. (#5552) Co-authored-by: Shuduo Sang --- src/kit/taosdemo/taosdemo.c | 89 +++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 5a65e3dc5e..fe39085981 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -2541,6 +2541,7 @@ static void* createTable(void *sarg) static int startMultiThreadCreateChildTable( char* cols, int threads, int startFrom, int ntables, char* db_name, SSuperTable* superTblInfo) { + pthread_t *pids = malloc(threads * sizeof(pthread_t)); threadInfo *infos = malloc(threads * sizeof(threadInfo)); @@ -2625,12 +2626,12 @@ static void createChildTables() { g_totalChildTables += g_Dbs.db[i].superTbls[j].childTblCount; verbosePrint("%s() LN%d: create %d child tables from %d\n", __func__, __LINE__, - g_totalChildTables, startFrom); + g_totalChildTables, startFrom); startMultiThreadCreateChildTable( g_Dbs.db[i].superTbls[j].colsOfCreateChildTable, g_Dbs.threadCountByCreateTbl, startFrom, - g_totalChildTables, + g_Dbs.db[i].superTbls[j].childTblCount, g_Dbs.db[i].dbName, &(g_Dbs.db[i].superTbls[j])); } } else { @@ -5314,16 +5315,16 @@ static int insertTestProcess() { continue; } startMultiThreadInsertData( - g_Dbs.threadCount, - g_Dbs.db[i].dbName, - g_Dbs.db[i].dbCfg.precision, + g_Dbs.threadCount, + g_Dbs.db[i].dbName, + g_Dbs.db[i].dbCfg.precision, superTblInfo); } } else { startMultiThreadInsertData( - g_Dbs.threadCount, - g_Dbs.db[i].dbName, - g_Dbs.db[i].dbCfg.precision, + g_Dbs.threadCount, + g_Dbs.db[i].dbName, + g_Dbs.db[i].dbCfg.precision, NULL); } } @@ -5343,7 +5344,7 @@ static int insertTestProcess() { } static void *superQueryProcess(void *sarg) { - threadInfo *winfo = (threadInfo *)sarg; + threadInfo *winfo = (threadInfo *)sarg; //char sqlStr[MAX_TB_NAME_SIZE*2]; //sprintf(sqlStr, "use %s", g_queryInfo.dbName); @@ -5352,39 +5353,41 @@ static void *superQueryProcess(void *sarg) { int64_t st = 0; int64_t et = 0; while (1) { - if (g_queryInfo.superQueryInfo.rate && (et - st) < (int64_t)g_queryInfo.superQueryInfo.rate*1000) { + if (g_queryInfo.superQueryInfo.rate && (et - st) < + (int64_t)g_queryInfo.superQueryInfo.rate*1000) { taosMsleep(g_queryInfo.superQueryInfo.rate*1000 - (et - st)); // ms //printf("========sleep duration:%"PRId64 "========inserted rows:%d, table range:%d - %d\n", (1000 - (et - st)), i, winfo->start_table_from, winfo->end_table_to); } st = taosGetTimestampUs(); for (int i = 0; i < g_queryInfo.superQueryInfo.sqlCount; i++) { - if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { + if (0 == strncasecmp(g_queryInfo.queryMode, "taosc", 5)) { int64_t t1 = taosGetTimestampUs(); char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; if (g_queryInfo.superQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", g_queryInfo.superQueryInfo.result[i], winfo->threadID); + sprintf(tmpFile, "%s-%d", + g_queryInfo.superQueryInfo.result[i], winfo->threadID); } - selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile); - int64_t t2 = taosGetTimestampUs(); - printf("=[taosc] thread[%"PRId64"] complete one sql, Spent %f s\n", + selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile); + int64_t t2 = taosGetTimestampUs(); + printf("=[taosc] thread[%"PRId64"] complete one sql, Spent %f s\n", taosGetSelfPthreadId(), (t2 - t1)/1000000.0); } else { int64_t t1 = taosGetTimestampUs(); - int retCode = postProceSql(g_queryInfo.host, + int retCode = postProceSql(g_queryInfo.host, g_queryInfo.port, g_queryInfo.superQueryInfo.sql[i]); - int64_t t2 = taosGetTimestampUs(); - printf("=[restful] thread[%"PRId64"] complete one sql, Spent %f s\n", + int64_t t2 = taosGetTimestampUs(); + printf("=[restful] thread[%"PRId64"] complete one sql, Spent %f s\n", taosGetSelfPthreadId(), (t2 - t1)/1000000.0); - + if (0 != retCode) { printf("====restful return fail, threadID[%d]\n", winfo->threadID); return NULL; } - } + } } et = taosGetTimestampUs(); - printf("==thread[%"PRId64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", + printf("==thread[%"PRId64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", taosGetSelfPthreadId(), (double)(et - st)/1000.0); } return NULL; @@ -5393,28 +5396,28 @@ static void *superQueryProcess(void *sarg) { static void replaceSubTblName(char* inSql, char* outSql, int tblIndex) { char sourceString[32] = "xxxx"; char subTblName[MAX_TB_NAME_SIZE*3]; - sprintf(subTblName, "%s.%s", - g_queryInfo.dbName, + sprintf(subTblName, "%s.%s", + g_queryInfo.dbName, g_queryInfo.subQueryInfo.childTblName + tblIndex*TSDB_TABLE_NAME_LEN); //printf("inSql: %s\n", inSql); char* pos = strstr(inSql, sourceString); if (0 == pos) { - return; + return; } tstrncpy(outSql, inSql, pos - inSql + 1); //printf("1: %s\n", outSql); - strcat(outSql, subTblName); - //printf("2: %s\n", outSql); - strcat(outSql, pos+strlen(sourceString)); - //printf("3: %s\n", outSql); + strcat(outSql, subTblName); + //printf("2: %s\n", outSql); + strcat(outSql, pos+strlen(sourceString)); + //printf("3: %s\n", outSql); } static void *subQueryProcess(void *sarg) { char sqlstr[1024]; - threadInfo *winfo = (threadInfo *)sarg; + threadInfo *winfo = (threadInfo *)sarg; int64_t st = 0; int64_t et = (int64_t)g_queryInfo.subQueryInfo.rate*1000; while (1) { @@ -5431,29 +5434,29 @@ static void *subQueryProcess(void *sarg) { replaceSubTblName(g_queryInfo.subQueryInfo.sql[j], sqlstr, i); char tmpFile[MAX_FILE_NAME_LEN*2] = {0}; if (g_queryInfo.subQueryInfo.result[i][0] != 0) { - sprintf(tmpFile, "%s-%d", - g_queryInfo.subQueryInfo.result[i], + sprintf(tmpFile, "%s-%d", + g_queryInfo.subQueryInfo.result[i], winfo->threadID); } - selectAndGetResult(winfo->taos, sqlstr, tmpFile); + selectAndGetResult(winfo->taos, sqlstr, tmpFile); } } et = taosGetTimestampUs(); printf("####thread[%"PRId64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", - taosGetSelfPthreadId(), - winfo->start_table_from, - winfo->end_table_to, + taosGetSelfPthreadId(), + winfo->start_table_from, + winfo->end_table_to, (double)(et - st)/1000000.0); } return NULL; } static int queryTestProcess() { - TAOS * taos = NULL; - taos = taos_connect(g_queryInfo.host, - g_queryInfo.user, - g_queryInfo.password, - NULL, + TAOS * taos = NULL; + taos = taos_connect(g_queryInfo.host, + g_queryInfo.user, + g_queryInfo.password, + NULL, g_queryInfo.port); if (taos == NULL) { errorPrint( "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); @@ -5466,7 +5469,7 @@ static int queryTestProcess() { g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); - } + } printfQueryMeta(); @@ -5563,7 +5566,7 @@ static int queryTestProcess() { for (int i = 0; i < threads; i++) { threadInfo *t_info = infosOfSub + i; t_info->threadID = i; - + t_info->start_table_from = startFrom; t_info->ntables = iend_table_to = i < b ? startFrom + a : startFrom + a - 1; @@ -5575,7 +5578,7 @@ static int queryTestProcess() { g_queryInfo.subQueryInfo.threadCnt = threads; } else { g_queryInfo.subQueryInfo.threadCnt = 0; - } + } for (int i = 0; i < g_queryInfo.superQueryInfo.concurrent; i++) { pthread_join(pids[i], NULL); From b7ec3a3c700ed66fa567aba359ad1364605c756d Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Wed, 24 Mar 2021 11:08:20 +0800 Subject: [PATCH 29/31] [TD-3357] : fix child table count if exists. (#5542) Co-authored-by: Shuduo Sang --- src/kit/taosdemo/taosdemo.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index fe39085981..252773e3ac 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -2422,11 +2422,8 @@ static int createDatabases() { &g_Dbs.db[i].superTbls[j], g_Dbs.use_metric); } else { g_Dbs.db[i].superTbls[j].superTblExists = TBL_ALREADY_EXISTS; - - if (g_Dbs.db[i].superTbls[j].childTblExists != TBL_ALREADY_EXISTS) { - ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, + ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j]); - } } if (0 != ret) { @@ -2434,16 +2431,16 @@ static int createDatabases() { taos_close(taos); return -1; } - } + } } taos_close(taos); return 0; } -static void* createTable(void *sarg) -{ - threadInfo *winfo = (threadInfo *)sarg; +static void* createTable(void *sarg) +{ + threadInfo *winfo = (threadInfo *)sarg; SSuperTable* superTblInfo = winfo->superTblInfo; int64_t lastPrintTime = taosGetTimestampMs(); @@ -2463,19 +2460,19 @@ static void* createTable(void *sarg) int len = 0; int batchNum = 0; - verbosePrint("%s() LN%d: Creating table from %d to %d\n", + verbosePrint("%s() LN%d: Creating table from %d to %d\n", __func__, __LINE__, winfo->start_table_from, winfo->end_table_to); for (int i = winfo->start_table_from; i <= winfo->end_table_to; i++) { if (0 == g_Dbs.use_metric) { - snprintf(buffer, buff_len, + snprintf(buffer, buff_len, "create table if not exists %s.%s%d %s;", winfo->db_name, g_args.tb_prefix, i, winfo->cols); } else { - if (0 == len) { + if (0 == len) { batchNum = 0; memset(buffer, 0, buff_len); len += snprintf(buffer + len, @@ -2494,7 +2491,7 @@ static void* createTable(void *sarg) free(buffer); return NULL; } - + len += snprintf(buffer + len, superTblInfo->maxSqlLen - len, "if not exists %s.%s%d using %s.%s tags %s ", @@ -2505,7 +2502,7 @@ static void* createTable(void *sarg) batchNum++; if ((batchNum < superTblInfo->batchCreateTableNum) - && ((superTblInfo->maxSqlLen - len) + && ((superTblInfo->maxSqlLen - len) >= (superTblInfo->lenOfTagOfOneRow + 256))) { continue; } @@ -2514,8 +2511,8 @@ static void* createTable(void *sarg) len = 0; verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer); if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)){ - errorPrint( "queryDbExec() failed. buffer:\n%s\n", buffer); free(buffer); + errorPrint( "queryDbExec() failed. buffer:\n%s\n", buffer); return NULL; } @@ -2578,7 +2575,7 @@ static int startMultiThreadCreateChildTable( if (t_info->taos == NULL) { errorPrint( "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); free(pids); - free(infos); + free(infos); return -1; } @@ -4530,7 +4527,6 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { recOfBatch += batchPerTbl; startTime += batchPerTbl * superTblInfo->timeStampStep; pThreadInfo->totalInsertRows += batchPerTbl; - verbosePrint("[%d] %s() LN%d batchPerTbl=%d recOfBatch=%d\n", pThreadInfo->threadID, __func__, __LINE__, batchPerTbl, recOfBatch); From 6e3322d35dee5f04fd74acd86a09d65ed10163aa Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Wed, 24 Mar 2021 16:58:09 +0800 Subject: [PATCH 30/31] Feature/sangshuduo/td 3434 taosdemo support query times (#5541) * [TD-3434] : taosdemo support query times first commit. * [TD-3434] : taosdemo support query times. refine interlace test case. * [TD-3434] : taosdemo support query times. change cmdline parameters according to TD-3431. * [TD-3434] : taosdemo support query times. fix typo in fulltest.sh * [TD-3434] : taosdemo support query times. add 2 sec sleep to avoid segfault. * [TD-3434] : taosdemo support query times. make query test easier to pass. Co-authored-by: Shuduo Sang --- src/kit/taosdemo/taosdemo.c | 137 +++++++++++++------- tests/pytest/fulltest.sh | 22 ++-- tests/pytest/tools/query.json | 22 ++++ tests/pytest/tools/taosdemoTestInterlace.py | 5 +- tests/pytest/tools/taosdemoTestQuery.py | 78 +++++++++++ 5 files changed, 203 insertions(+), 61 deletions(-) create mode 100644 tests/pytest/tools/query.json create mode 100644 tests/pytest/tools/taosdemoTestQuery.py diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 252773e3ac..8a742c6b32 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -199,6 +199,7 @@ typedef struct SArguments_S { int num_of_CPR; int num_of_threads; int insert_interval; + int query_times; int interlace_rows; int num_of_RPR; int max_sql_len; @@ -351,7 +352,7 @@ typedef struct SuperQueryInfo_S { int subscribeInterval; // ms int subscribeRestart; int subscribeKeepProgress; - char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1]; + char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1]; char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN+1]; TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; } SuperQueryInfo; @@ -359,7 +360,7 @@ typedef struct SuperQueryInfo_S { typedef struct SubQueryInfo_S { char sTblName[MAX_TB_NAME_SIZE+1]; int rate; // 0: unlimit > 0 loop/s - int threadCnt; + int threadCnt; int subscribeMode; // 0: sync, 1: async int subscribeInterval; // ms int subscribeRestart; @@ -367,7 +368,7 @@ typedef struct SubQueryInfo_S { int childTblCount; char childTblPrefix[MAX_TB_NAME_SIZE]; int sqlCount; - char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1]; + char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1]; char result[MAX_QUERY_SQL_COUNT][MAX_FILE_NAME_LEN+1]; TAOS_SUB* tsub[MAX_QUERY_SQL_COUNT]; @@ -397,14 +398,14 @@ typedef struct SThreadInfo_S { int end_table_to; int ntables; int data_of_rate; - uint64_t start_time; - char* cols; - bool use_metric; + uint64_t start_time; + char* cols; + bool use_metric; SSuperTable* superTblInfo; // for async insert tsem_t lock_sem; - int64_t counter; + int64_t counter; uint64_t st; uint64_t et; int64_t lastTs; @@ -547,6 +548,7 @@ SArguments g_args = { 10, // num_of_CPR 10, // num_of_connections/thread 0, // insert_interval + 1, // query_times 0, // interlace_rows; 100, // num_of_RPR TSDB_PAYLOAD_SIZE, // max_sql_len @@ -681,6 +683,8 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) { arguments->num_of_threads = atoi(argv[++i]); } else if (strcmp(argv[i], "-i") == 0) { arguments->insert_interval = atoi(argv[++i]); + } else if (strcmp(argv[i], "-qt") == 0) { + arguments->query_times = atoi(argv[++i]); } else if (strcmp(argv[i], "-B") == 0) { arguments->interlace_rows = atoi(argv[++i]); } else if (strcmp(argv[i], "-r") == 0) { @@ -1379,12 +1383,12 @@ static void printfQueryMeta() { printf("host: \033[33m%s:%u\033[0m\n", g_queryInfo.host, g_queryInfo.port); printf("user: \033[33m%s\033[0m\n", g_queryInfo.user); - printf("password: \033[33m%s\033[0m\n", g_queryInfo.password); printf("database name: \033[33m%s\033[0m\n", g_queryInfo.dbName); printf("\n"); printf("specified table query info: \n"); printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.rate); + printf("query times: \033[33m%d\033[0m\n", g_args.query_times); printf("concurrent: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.concurrent); printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.sqlCount); @@ -1421,7 +1425,6 @@ static void printfQueryMeta() { SHOW_PARSE_RESULT_END(); } - static char* formatTimestamp(char* buf, int64_t val, int precision) { time_t tt; if (precision == TSDB_TIME_PRECISION_MICRO) { @@ -2045,15 +2048,25 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos, res = taos_query(taos, command); int32_t code = taos_errno(res); if (code != 0) { - printf("failed to run command %s\n", command); taos_free_result(res); taos_close(taos); + errorPrint("%s() LN%d, failed to run command %s\n", + __func__, __LINE__, command); exit(-1); } int childTblCount = (limit < 0)?10000:limit; int count = 0; -// childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN); + if (childTblName == NULL) { + childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN); + if (NULL == childTblName) { + taos_free_result(res); + taos_close(taos); + errorPrint("%s() LN%d, failed to allocate memory!\n", __func__, __LINE__); + exit(-1); + } + } + char* pTblName = childTblName; while ((row = taos_fetch_row(res)) != NULL) { int32_t* len = taos_fetch_lengths(res); @@ -3015,10 +3028,20 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { goto PARSE_OVER; } - cJSON* rowsPerTbl = cJSON_GetObjectItem(root, "interlace_rows"); - if (rowsPerTbl && rowsPerTbl->type == cJSON_Number) { - g_args.interlace_rows = rowsPerTbl->valueint; - } else if (!rowsPerTbl) { + cJSON* gQueryTimes = cJSON_GetObjectItem(root, "query_times"); + if (gQueryTimes && gQueryTimes->type == cJSON_Number) { + g_args.query_times = gQueryTimes->valueint; + } else if (!gQueryTimes) { + g_args.query_times = 1; + } else { + errorPrint("%s() LN%d, failed to read json, query_times input mistake\n", __func__, __LINE__); + goto PARSE_OVER; + } + + cJSON* interlaceRows = cJSON_GetObjectItem(root, "interlace_rows"); + if (interlaceRows && interlaceRows->type == cJSON_Number) { + g_args.interlace_rows = interlaceRows->valueint; + } else if (!interlaceRows) { g_args.interlace_rows = 0; // 0 means progressive mode, > 0 mean interlace mode. max value is less or equ num_of_records_per_req } else { errorPrint("%s() LN%d, failed to read json, interlace_rows input mistake\n", __func__, __LINE__); @@ -4448,7 +4471,8 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) { pThreadInfo->totalAffectedRows = 0; int64_t insertRows = (superTblInfo)?superTblInfo->insertRows:g_args.num_of_DPT; - int insert_interval = superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; + int insert_interval = + superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; uint64_t st = 0; uint64_t et = 0xffffffff; @@ -4647,8 +4671,10 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) { int64_t startTs = taosGetTimestampUs(); int64_t endTs; - int timeStampStep = superTblInfo?superTblInfo->timeStampStep:DEFAULT_TIMESTAMP_STEP; - int insert_interval = superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; + int timeStampStep = + superTblInfo?superTblInfo->timeStampStep:DEFAULT_TIMESTAMP_STEP; + int insert_interval = + superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; uint64_t st = 0; uint64_t et = 0xffffffff; @@ -4657,7 +4683,8 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) { pThreadInfo->samplePos = 0; - for (uint32_t tableSeq = pThreadInfo->start_table_from; tableSeq <= pThreadInfo->end_table_to; + for (uint32_t tableSeq = + pThreadInfo->start_table_from; tableSeq <= pThreadInfo->end_table_to; tableSeq ++) { int64_t start_time = pThreadInfo->start_time; @@ -4768,14 +4795,15 @@ static void callBack(void *param, TAOS_RES *res, int code) { threadInfo* winfo = (threadInfo*)param; SSuperTable* superTblInfo = winfo->superTblInfo; - int insert_interval = superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; + int insert_interval = + superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; if (insert_interval) { winfo->et = taosGetTimestampUs(); if (((winfo->et - winfo->st)/1000) < insert_interval) { taosMsleep(insert_interval - (winfo->et - winfo->st)/1000); // ms } } - + char *buffer = calloc(1, winfo->superTblInfo->maxSqlLen); char *data = calloc(1, MAX_DATA_SIZE); char *pstr = buffer; @@ -4793,17 +4821,17 @@ static void callBack(void *param, TAOS_RES *res, int code) { taos_free_result(res); return; } - + for (int i = 0; i < g_args.num_of_RPR; i++) { int rand_num = taosRandom() % 100; - if (0 != winfo->superTblInfo->disorderRatio && rand_num < winfo->superTblInfo->disorderRatio) - { + if (0 != winfo->superTblInfo->disorderRatio + && rand_num < winfo->superTblInfo->disorderRatio) { int64_t d = winfo->lastTs - taosRandom() % 1000000 + rand_num; //generateData(data, datatype, ncols_per_record, d, len_of_binary); - (void)generateRowData(data, MAX_DATA_SIZE, d, winfo->superTblInfo); + generateRowData(data, MAX_DATA_SIZE, d, winfo->superTblInfo); } else { //generateData(data, datatype, ncols_per_record, start_time += 1000, len_of_binary); - (void)generateRowData(data, MAX_DATA_SIZE, winfo->lastTs += 1000, winfo->superTblInfo); + generateRowData(data, MAX_DATA_SIZE, winfo->lastTs += 1000, winfo->superTblInfo); } pstr += sprintf(pstr, "%s", data); winfo->counter++; @@ -4831,7 +4859,8 @@ static void *asyncWrite(void *sarg) { winfo->et = 0; winfo->lastTs = winfo->start_time; - int insert_interval = superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; + int insert_interval = + superTblInfo?superTblInfo->insertInterval:g_args.insert_interval; if (insert_interval) { winfo->st = taosGetTimestampUs(); } @@ -4857,7 +4886,7 @@ static void startMultiThreadInsertData(int threads, char* db_name, int ntables = 0; if (superTblInfo) { - if ((superTblInfo->childTblOffset >= 0) + if ((superTblInfo->childTblOffset >= 0) && (superTblInfo->childTblLimit > 0)) { ntables = superTblInfo->childTblLimit; @@ -5416,7 +5445,9 @@ static void *subQueryProcess(void *sarg) { threadInfo *winfo = (threadInfo *)sarg; int64_t st = 0; int64_t et = (int64_t)g_queryInfo.subQueryInfo.rate*1000; - while (1) { + int queryTimes = g_args.query_times; + + while (queryTimes --) { if (g_queryInfo.subQueryInfo.rate && (et - st) < (int64_t)g_queryInfo.subQueryInfo.rate*1000) { taosMsleep(g_queryInfo.subQueryInfo.rate*1000 - (et - st)); // ms @@ -5444,15 +5475,21 @@ static void *subQueryProcess(void *sarg) { winfo->end_table_to, (double)(et - st)/1000000.0); } + return NULL; } static int queryTestProcess() { - TAOS * taos = NULL; - taos = taos_connect(g_queryInfo.host, - g_queryInfo.user, - g_queryInfo.password, - NULL, + + setupForAnsiEscape(); + printfQueryMeta(); + resetAfterAnsiEscape(); + + TAOS * taos = NULL; + taos = taos_connect(g_queryInfo.host, + g_queryInfo.user, + g_queryInfo.password, + NULL, g_queryInfo.port); if (taos == NULL) { errorPrint( "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); @@ -5467,13 +5504,11 @@ static int queryTestProcess() { &g_queryInfo.subQueryInfo.childTblCount); } - printfQueryMeta(); - if (!g_args.answer_yes) { printf("Press enter key to continue\n\n"); (void)getchar(); } - + printfQuerySystemInfo(taos); pthread_t *pids = NULL; @@ -5762,18 +5797,20 @@ static void *superSubscribeProcess(void *sarg) { } static int subscribeTestProcess() { + setupForAnsiEscape(); printfQueryMeta(); - + resetAfterAnsiEscape(); + if (!g_args.answer_yes) { printf("Press enter key to continue\n\n"); (void)getchar(); } - TAOS * taos = NULL; - taos = taos_connect(g_queryInfo.host, - g_queryInfo.user, - g_queryInfo.password, - g_queryInfo.dbName, + TAOS * taos = NULL; + taos = taos_connect(g_queryInfo.host, + g_queryInfo.user, + g_queryInfo.password, + g_queryInfo.dbName, g_queryInfo.port); if (taos == NULL) { errorPrint( "Failed to connect to TDengine, reason:%s\n", taos_errstr(NULL)); @@ -5781,10 +5818,10 @@ static int subscribeTestProcess() { } if (0 != g_queryInfo.subQueryInfo.sqlCount) { - getAllChildNameOfSuperTable(taos, - g_queryInfo.dbName, - g_queryInfo.subQueryInfo.sTblName, - &g_queryInfo.subQueryInfo.childTblName, + getAllChildNameOfSuperTable(taos, + g_queryInfo.dbName, + g_queryInfo.subQueryInfo.sTblName, + &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount); } @@ -6094,15 +6131,21 @@ static void querySqlFile(TAOS* taos, char* sqlFile) static void testMetaFile() { if (INSERT_TEST == g_args.test_mode) { if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); + insertTestProcess(); + } else if (QUERY_TEST == g_args.test_mode) { if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + queryTestProcess(); + } else if (SUBSCRIBE_TEST == g_args.test_mode) { if (g_queryInfo.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_queryInfo.cfgDir); + subscribeTestProcess(); + } else { ; } diff --git a/tests/pytest/fulltest.sh b/tests/pytest/fulltest.sh index 0869d20af7..fc86570bd2 100755 --- a/tests/pytest/fulltest.sh +++ b/tests/pytest/fulltest.sh @@ -233,16 +233,6 @@ python3 client/twoClients.py python3 test.py -f query/queryInterval.py python3 test.py -f query/queryFillTest.py -# tools -python3 test.py -f tools/taosdemoTest.py -python3 test.py -f tools/taosdemoTestWithoutMetric.py -python3 test.py -f tools/taosdemoTestWithJson.py -python3 test.py -f tools/taosdemoTestLimitOffset.py -python3 test.py -f tools/taosdumpTest.py -python3 test.py -f tools/taosdemoTest2.py -python3 test.py -f tools/taosdemoTestSampleData.py -python3 test.py -f tools/taosdemoTestInterlace.py - # subscribe python3 test.py -f subscribe/singlemeter.py #python3 test.py -f subscribe/stability.py @@ -252,6 +242,18 @@ python3 test.py -f subscribe/supertable.py #======================p3-end=============== #======================p4-start=============== +# tools +python3 test.py -f tools/taosdumpTest.py + +python3 test.py -f tools/taosdemoTest.py +python3 test.py -f tools/taosdemoTestWithoutMetric.py +python3 test.py -f tools/taosdemoTestWithJson.py +python3 test.py -f tools/taosdemoTestLimitOffset.py +python3 test.py -f tools/taosdemoTest2.py +python3 test.py -f tools/taosdemoTestSampleData.py +python3 test.py -f tools/taosdemoTestInterlace.py +python3 test.py -f tools/taosdemoTestQuery.py + python3 ./test.py -f update/merge_commit_data-0.py # wal python3 ./test.py -f wal/addOldWalTest.py diff --git a/tests/pytest/tools/query.json b/tests/pytest/tools/query.json new file mode 100644 index 0000000000..d486423865 --- /dev/null +++ b/tests/pytest/tools/query.json @@ -0,0 +1,22 @@ +{ + "filetype": "query", + "cfgdir": "/etc/taos", + "host": "127.0.0.1", + "port": 6030, + "user": "root", + "password": "taosdata", + "confirm_parameter_prompt": "no", + "databases": "test", + "query_times": 1, + "super_table_query": { + "stblname": "meters", + "query_interval": 10, + "threads": 8, + "sqls": [ + { + "sql": "select last_row(ts) from xxxx", + "result": "" + } + ] + } +} diff --git a/tests/pytest/tools/taosdemoTestInterlace.py b/tests/pytest/tools/taosdemoTestInterlace.py index 953bfff90f..4c551f327a 100644 --- a/tests/pytest/tools/taosdemoTestInterlace.py +++ b/tests/pytest/tools/taosdemoTestInterlace.py @@ -1,4 +1,4 @@ -################################################################### +################################################################## # Copyright (c) 2016 by TAOS Technologies, Inc. # All rights reserved. # @@ -25,9 +25,6 @@ class TDTestCase: tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) - self.numberOfTables = 10000 - self.numberOfRecords = 100 - def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) diff --git a/tests/pytest/tools/taosdemoTestQuery.py b/tests/pytest/tools/taosdemoTestQuery.py new file mode 100644 index 0000000000..bb2bb85052 --- /dev/null +++ b/tests/pytest/tools/taosdemoTestQuery.py @@ -0,0 +1,78 @@ +################################################################### +# 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 time +from util.log import * +from util.cases import * +from util.sql import * +from util.dnodes import * +import subprocess + + +class TDTestCase: + def init(self, conn, logSql): + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor(), logSql) + + self.numberOfTables = 1000 + self.numberOfRecords = 100 + + 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): + rootRealPath = os.path.dirname(os.path.realpath(root)) + if ("packaging" not in rootRealPath): + buildPath = root[:len(root) - len("/build/bin")] + break + return buildPath + + def run(self): + tdSql.prepare() + buildPath = self.getBuildPath() + if (buildPath == ""): + tdLog.exit("taosd not found!") + else: + tdLog.info("taosd found in %s" % buildPath) + binPath = buildPath + "/build/bin/" + os.system("%staosdemo -y -t %d -n %d" % + (binPath, self.numberOfTables, self.numberOfRecords)) + print("Sleep 2 seconds..") + time.sleep(2) + os.system('%staosdemo -f tools/query.json ' % binPath) +# taosdemoCmd = '%staosdemo -f tools/query.json ' % binPath +# threads = subprocess.check_output( +# taosdemoCmd, shell=True).decode("utf-8") +# print("threads: %d" % int(threads)) + +# if (int(threads) != 8): +# caller = inspect.getframeinfo(inspect.stack()[0][0]) +# tdLog.exit( +# "%s(%d) failed: expected threads 8, actual %d" % +# (caller.filename, caller.lineno, int(threads))) +# + def stop(self): + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) From afd0869a7c53ce33b3dc1cea903b0d09be08eac4 Mon Sep 17 00:00:00 2001 From: Shuduo Sang Date: Wed, 24 Mar 2021 20:04:31 +0800 Subject: [PATCH 31/31] [TD-3321] : describe stb with better logic. (#5559) Co-authored-by: Shuduo Sang --- src/kit/taosdemo/taosdemo.c | 57 ++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/src/kit/taosdemo/taosdemo.c b/src/kit/taosdemo/taosdemo.c index 8a742c6b32..7aad2b4b52 100644 --- a/src/kit/taosdemo/taosdemo.c +++ b/src/kit/taosdemo/taosdemo.c @@ -187,6 +187,7 @@ typedef struct SArguments_S { char * tb_prefix; char * sqlFile; bool use_metric; + bool drop_database; bool insert_only; bool answer_yes; bool debug_print; @@ -315,7 +316,7 @@ typedef struct SDbCfg_S { typedef struct SDataBase_S { char dbName[MAX_DB_NAME_SIZE]; - int drop; // 0: use exists, 1: if exists, drop then new create + bool drop; // 0: use exists, 1: if exists, drop then new create SDbCfg dbCfg; int superTblCount; SSuperTable superTbls[MAX_SUPER_TABLE_COUNT]; @@ -525,6 +526,7 @@ SArguments g_args = { "t", // tb_prefix NULL, // sqlFile true, // use_metric + true, // drop_database true, // insert_only false, // debug_print false, // verbose_print @@ -2112,6 +2114,7 @@ static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName, static int getSuperTableFromServer(TAOS * taos, char* dbName, SSuperTable* superTbls) { + char command[BUFFER_SIZE] = "\0"; TAOS_RES * res; TAOS_ROW row = NULL; @@ -2337,7 +2340,7 @@ static int createDatabases() { } char command[BUFFER_SIZE] = "\0"; - for (int i = 0; i < g_Dbs.dbCount; i++) { + for (int i = 0; i < g_Dbs.dbCount; i++) { if (g_Dbs.db[i].drop) { sprintf(command, "drop database if exists %s;", g_Dbs.db[i].dbName); verbosePrint("%s() %d command: %s\n", __func__, __LINE__, command); @@ -2348,7 +2351,7 @@ static int createDatabases() { } int dataLen = 0; - dataLen += snprintf(command + dataLen, + dataLen += snprintf(command + dataLen, BUFFER_SIZE - dataLen, "create database if not exists %s", g_Dbs.db[i].dbName); if (g_Dbs.db[i].dbCfg.blocks > 0) { @@ -2425,25 +2428,38 @@ static int createDatabases() { debugPrint("%s() %d supertbl count:%d\n", __func__, __LINE__, g_Dbs.db[i].superTblCount); for (int j = 0; j < g_Dbs.db[i].superTblCount; j++) { - // describe super table, if exists + if ((g_Dbs.db[i].drop) || (g_Dbs.db[i].superTbls[j].superTblExists == TBL_NO_EXISTS)) { + ret = createSuperTable(taos, g_Dbs.db[i].dbName, + &g_Dbs.db[i].superTbls[j], g_Dbs.use_metric); + + if (0 != ret) { + errorPrint("\ncreate super table %d failed!\n\n", j); + taos_close(taos); + return -1; + } + } + + /* describe super table, if exists sprintf(command, "describe %s.%s;", g_Dbs.db[i].dbName, g_Dbs.db[i].superTbls[j].sTblName); verbosePrint("%s() %d command: %s\n", __func__, __LINE__, command); + if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) { g_Dbs.db[i].superTbls[j].superTblExists = TBL_NO_EXISTS; - ret = createSuperTable(taos, g_Dbs.db[i].dbName, - &g_Dbs.db[i].superTbls[j], g_Dbs.use_metric); + } else { + */ g_Dbs.db[i].superTbls[j].superTblExists = TBL_ALREADY_EXISTS; ret = getSuperTableFromServer(taos, g_Dbs.db[i].dbName, &g_Dbs.db[i].superTbls[j]); - } + //} + if (0 != ret) { + errorPrint("\nget super table %s.%s info failed!\n\n", g_Dbs.db[i].dbName, + g_Dbs.db[i].superTbls[j].sTblName); + taos_close(taos); + return -1; + } - if (0 != ret) { - printf("\ncreate super table %d failed!\n\n", j); - taos_close(taos); - return -1; - } } } @@ -3122,15 +3138,16 @@ static bool getMetaFromInsertJsonFile(cJSON* root) { cJSON *drop = cJSON_GetObjectItem(dbinfo, "drop"); if (drop && drop->type == cJSON_String && drop->valuestring != NULL) { - if (0 == strncasecmp(drop->valuestring, "yes", 3)) { - g_Dbs.db[i].drop = 1; + if (0 == strncasecmp(drop->valuestring, "yes", strlen("yes"))) { + g_Dbs.db[i].drop = true; } else { - g_Dbs.db[i].drop = 0; + g_Dbs.db[i].drop = false; } } else if (!drop) { - g_Dbs.db[i].drop = 0; + g_Dbs.db[i].drop = g_args.drop_database; } else { - printf("ERROR: failed to read json, drop not found\n"); + errorPrint("%s() LN%d, failed to read json, drop input mistake\n", + __func__, __LINE__); goto PARSE_OVER; } @@ -5921,7 +5938,8 @@ static void initOfInsertMeta() { tstrncpy(g_Dbs.user, TSDB_DEFAULT_USER, MAX_DB_NAME_SIZE); tstrncpy(g_Dbs.password, TSDB_DEFAULT_PASS, MAX_DB_NAME_SIZE); g_Dbs.threadCount = 2; - g_Dbs.use_metric = true; + + g_Dbs.use_metric = g_args.use_metric; } static void initOfQueryMeta() { @@ -6130,7 +6148,8 @@ static void querySqlFile(TAOS* taos, char* sqlFile) static void testMetaFile() { if (INSERT_TEST == g_args.test_mode) { - if (g_Dbs.cfgDir[0]) taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); + if (g_Dbs.cfgDir[0]) + taos_options(TSDB_OPTION_CONFIGDIR, g_Dbs.cfgDir); insertTestProcess();