Merge pull request #24865 from taosdata/cases/TD-28408-3.0

feat: autoshell add news keyword
This commit is contained in:
Alex Duan 2024-02-27 15:30:03 +08:00 committed by GitHub
commit 7ba2e37384
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 232 additions and 25 deletions

View File

@ -373,6 +373,7 @@ static int32_t collectUseTable(const SName* pName, SHashObj* pTable) {
return taosHashPut(pTable, fullName, strlen(fullName), pName, sizeof(SName)); return taosHashPut(pTable, fullName, strlen(fullName), pName, sizeof(SName));
} }
#ifdef BUILD_NO_CALL
static int32_t getViewMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta) { static int32_t getViewMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta) {
#ifndef TD_ENTERPRISE #ifndef TD_ENTERPRISE
return TSDB_CODE_PAR_TABLE_NOT_EXIST; return TSDB_CODE_PAR_TABLE_NOT_EXIST;
@ -396,6 +397,7 @@ static int32_t getViewMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCac
} }
return code; return code;
} }
#endif
int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView) { int32_t getTargetMetaImpl(SParseContext* pParCxt, SParseMetaCache* pMetaCache, const SName* pName, STableMeta** pMeta, bool couldBeView) {
int32_t code = TSDB_CODE_SUCCESS; int32_t code = TSDB_CODE_SUCCESS;
@ -774,9 +776,11 @@ static bool isAggFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsAggFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsAggFunc(((SFunctionNode*)pNode)->funcId));
} }
#ifdef BUILD_NO_CALL
static bool isSelectFunc(const SNode* pNode) { static bool isSelectFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsSelectFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsSelectFunc(((SFunctionNode*)pNode)->funcId));
} }
#endif
static bool isWindowPseudoColumnFunc(const SNode* pNode) { static bool isWindowPseudoColumnFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsWindowPseudoColumnFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsWindowPseudoColumnFunc(((SFunctionNode*)pNode)->funcId));
@ -790,9 +794,11 @@ static bool isInterpPseudoColumnFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsInterpPseudoColumnFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsInterpPseudoColumnFunc(((SFunctionNode*)pNode)->funcId));
} }
#ifdef BUILD_NO_CALL
static bool isTimelineFunc(const SNode* pNode) { static bool isTimelineFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsTimelineFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsTimelineFunc(((SFunctionNode*)pNode)->funcId));
} }
#endif
static bool isImplicitTsFunc(const SNode* pNode) { static bool isImplicitTsFunc(const SNode* pNode) {
return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsImplicitTsFunc(((SFunctionNode*)pNode)->funcId)); return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsImplicitTsFunc(((SFunctionNode*)pNode)->funcId));
@ -7738,9 +7744,11 @@ static int32_t addSubtableInfoToCreateStreamQuery(STranslateContext* pCxt, STabl
return code; return code;
} }
#ifdef BUILD_NO_CALL
static bool isEventWindowQuery(SSelectStmt* pSelect) { static bool isEventWindowQuery(SSelectStmt* pSelect) {
return NULL != pSelect->pWindow && QUERY_NODE_EVENT_WINDOW == nodeType(pSelect->pWindow); return NULL != pSelect->pWindow && QUERY_NODE_EVENT_WINDOW == nodeType(pSelect->pWindow);
} }
#endif
static bool hasJsonTypeProjection(SSelectStmt* pSelect) { static bool hasJsonTypeProjection(SSelectStmt* pSelect) {
SNode* pProj = NULL; SNode* pProj = NULL;

View File

@ -67,7 +67,6 @@ class TDTestCase(TBase):
dirs = glob.glob(dnodesRootDir) dirs = glob.glob(dnodesRootDir)
for dir in dirs: for dir in dirs:
if os.path.isdir(dir): if os.path.isdir(dir):
tdLog.debug("delete dir: %s " % (dnodesRootDir))
self.remove_directory(os.path.join(dir, "wal")) self.remove_directory(os.path.join(dir, "wal"))
sc.dnodeStart(1) sc.dnodeStart(1)
@ -88,7 +87,7 @@ class TDTestCase(TBase):
if bFinish: if bFinish:
break break
self.timestamp_step = 1 self.timestamp_step = 1000
self.insert_rows = 6000 self.insert_rows = 6000
self.checkInsertCorrect() self.checkInsertCorrect()
self.checkAggCorrect() self.checkAggCorrect()

View File

@ -0,0 +1,152 @@
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import sys
import time
import random
import taos
import frame
import frame.etool
from frame.log import *
from frame.cases import *
from frame.sql import *
from frame.caseBase import *
from frame import *
from frame.autogen import *
class TDTestCase(TBase):
updatecfgDict = {
}
def insertData(self):
tdLog.info(f"create table and insert data.")
self.stb = "stb"
self.db = "db"
self.childtable_count = 10
self.insert_rows = 10000
self.autoGen = AutoGen(startTs = 1600000000000*1000*1000, batch=500, fillOne=True)
self.autoGen.create_db(self.db, 2, 3, "precision 'ns'")
self.autoGen.create_stable(stbname = self.stb, tag_cnt = 5, column_cnt = 20, binary_len = 10, nchar_len = 5)
self.autoGen.create_child(self.stb, "child", self.childtable_count)
self.autoGen.insert_data(self.insert_rows, True)
tdLog.info("create view.")
tdSql.execute(f"use {self.db}")
sqls = [
"create view viewc0c1 as select c0,c1 from stb ",
"create view viewc0c1c2 as select c0,c1,c2 from stb ",
"create view viewc0c3 as select c0,c3 from stb where c3=1",
"create view viewc0c4c5 as select c4,c5 from stb ",
"create view viewc0c6 as select c0,c1,c6 from stb ",
"create view viewc0c7 as select c0,c1 from stb ",
"create view viewc0c7c8 as select c0,c7,c8 from stb where c8>0",
"create view viewc0c3c1 as select c0,c3,c1 from stb ",
"create view viewc2c4 as select c2,c4 from stb ",
"create view viewc2c5 as select c2,c5 from stb ",
]
tdSql.executes(sqls)
def checkView(self):
tdLog.info(f"check view like.")
# like
sql = f"show views like 'view%'"
tdSql.query(sql)
tdSql.checkRows(10)
sql = f"show views like 'vie_c0c1c2'"
tdSql.query(sql)
tdSql.checkRows(1)
tdSql.checkData(0,0,"viewc0c1c2")
sql = f"show views like '%c2c_'"
tdSql.query(sql)
tdSql.checkRows(2)
tdSql.checkData(0,0, "viewc2c4")
tdSql.checkData(1,0, "viewc2c5")
sql = f"show views like '%' "
tdSql.query(sql)
tdSql.checkRows(10)
# zero
sql = "show views like '_' "
tdSql.query(sql)
tdSql.checkRows(0)
sql = "show views like 'a%' "
tdSql.query(sql)
tdSql.checkRows(0)
def doQuery(self):
tdLog.info(f"do query.")
# __group_key
sql = f"select count(*) from {self.stb} "
tdSql.query(sql)
# column index 1 value same with 2
allRows = self.insert_rows * self.childtable_count
tdSql.checkFirstValue(sql, allRows)
def checkShow(self):
# not support
sql = "show accounts;"
tdSql.error(sql)
# check result
sql = "SHOW CLUSTER;"
tdSql.query(sql)
tdSql.checkRows(1)
sql = "SHOW COMPACTS;"
tdSql.query(sql)
tdSql.checkRows(0)
sql = "SHOW COMPACT 1;"
tdSql.query(sql)
tdSql.checkRows(0)
sql = "SHOW CLUSTER MACHINES;"
tdSql.query(sql)
tdSql.checkRows(1)
# run to check crash
sqls = [
"show scores;",
"SHOW CLUSTER VARIABLES",
"SHOW BNODES;",
]
tdSql.executes(sqls)
# run
def run(self):
tdLog.debug(f"start to excute {__file__}")
# insert data
self.insertData()
# check view
self.checkView()
# do action
self.doQuery()
tdLog.success(f"{__file__} successfully executed")
tdCases.addLinux(__file__, TDTestCase())
tdCases.addWindows(__file__, TDTestCase())

View File

@ -6,7 +6,7 @@
"user": "root", "user": "root",
"password": "taosdata", "password": "taosdata",
"connection_pool_size": 8, "connection_pool_size": 8,
"num_of_records_per_req": 2000, "num_of_records_per_req": 4000,
"prepared_rand": 1000, "prepared_rand": 1000,
"thread_count": 2, "thread_count": 2,
"create_table_thread_count": 1, "create_table_thread_count": 1,
@ -18,26 +18,27 @@
"drop": "yes", "drop": "yes",
"vgroups": 2, "vgroups": 2,
"replica": 1, "replica": 1,
"duration":"1d", "duration":"15d",
"keep": "3d,6d,30d" "flush_each_batch":"yes",
"keep": "60d,100d,200d"
}, },
"super_tables": [ "super_tables": [
{ {
"name": "stb", "name": "stb",
"child_table_exists": "no", "child_table_exists": "no",
"childtable_count": 4, "childtable_count": 2,
"insert_rows": 1000000, "insert_rows": 2000000,
"childtable_prefix": "d", "childtable_prefix": "d",
"insert_mode": "taosc", "insert_mode": "taosc",
"timestamp_step": 1000, "timestamp_step": 1000,
"start_timestamp":"now-13d", "start_timestamp":"now-90d",
"columns": [ "columns": [
{ "type": "bool", "name": "bc"}, { "type": "bool", "name": "bc"},
{ "type": "float", "name": "fc" }, { "type": "float", "name": "fc" },
{ "type": "double", "name": "dc"}, { "type": "double", "name": "dc"},
{ "type": "tinyint", "name": "ti", "values":["1"]}, { "type": "tinyint", "name": "ti"},
{ "type": "smallint", "name": "si" }, { "type": "smallint", "name": "si" },
{ "type": "int", "name": "ic" }, { "type": "int", "name": "ic" ,"max": 1,"min": 1},
{ "type": "bigint", "name": "bi" }, { "type": "bigint", "name": "bi" },
{ "type": "utinyint", "name": "uti"}, { "type": "utinyint", "name": "uti"},
{ "type": "usmallint", "name": "usi"}, { "type": "usmallint", "name": "usi"},

View File

@ -58,8 +58,8 @@ class TDTestCase(TBase):
tdSql.execute(f"use {self.db}") tdSql.execute(f"use {self.db}")
# come from s3_basic.json # come from s3_basic.json
self.childtable_count = 4 self.childtable_count = 2
self.insert_rows = 1000000 self.insert_rows = 2000000
self.timestamp_step = 1000 self.timestamp_step = 1000
def createStream(self, sname): def createStream(self, sname):

View File

@ -14,15 +14,18 @@ import time
# Auto Gen class # Auto Gen class
# #
class AutoGen: class AutoGen:
def __init__(self, fillOne=False): def __init__(self, startTs = 1600000000000, step = 1000, batch = 100, fillOne=False):
self.ts = 1600000000000 self.startTs = startTs
self.batch_size = 100 self.ts = startTs
self.step = step
self.batch_size = batch
self.fillOne = fillOne
seed = time.time() % 10000 seed = time.time() % 10000
random.seed(seed) random.seed(seed)
self.fillOne = fillOne
# set start ts # set start ts
def set_start_ts(self, ts): def set_start_ts(self, ts):
self.startTs = ts
self.ts = ts self.ts = ts
# set batch size # set batch size
@ -111,9 +114,9 @@ class AutoGen:
return ''.join(random.choice(letters) for i in range(count)) return ''.join(random.choice(letters) for i in range(count))
# create db # create db
def create_db(self, dbname, vgroups = 2, replica = 1): def create_db(self, dbname, vgroups = 2, replica = 1, others=""):
self.dbname = dbname self.dbname = dbname
tdSql.execute(f'create database {dbname} vgroups {vgroups} replica {replica}') tdSql.execute(f'create database {dbname} vgroups {vgroups} replica {replica} {others}')
# create table or stable # create table or stable
def create_stable(self, stbname, tag_cnt, column_cnt, binary_len, nchar_len): def create_stable(self, stbname, tag_cnt, column_cnt, binary_len, nchar_len):
@ -167,12 +170,12 @@ class AutoGen:
def insert_data(self, cnt, bContinue=False): def insert_data(self, cnt, bContinue=False):
if not bContinue: if not bContinue:
self.ts = 1600000000000 self.ts = self.startTs
currTs = 1600000000000 currTs = self.startTs
for i in range(self.child_cnt): for i in range(self.child_cnt):
name = f"{self.child_name}{i}" name = f"{self.child_name}{i}"
currTs = self.insert_data_child(name, cnt, self.batch_size, 1) currTs = self.insert_data_child(name, cnt, self.batch_size, self.step)
self.ts = currTs self.ts = currTs
tdLog.info(f" insert data ok, child table={self.child_cnt} insert rows={cnt}") tdLog.info(f" insert data ok, child table={self.child_cnt} insert rows={cnt}")

View File

@ -15,10 +15,11 @@
,,y,army,./pytest.sh python3 ./test.py -f community/cluster/snapshot.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/snapshot.py -N 3 -L 3 -D 2
,,y,army,./pytest.sh python3 ./test.py -f community/query/function/test_func_elapsed.py ,,y,army,./pytest.sh python3 ./test.py -f community/query/function/test_func_elapsed.py
,,y,army,./pytest.sh python3 ./test.py -f community/query/fill/fill_desc.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f community/query/fill/fill_desc.py -N 3 -L 3 -D 2
,,y,army,./pytest.sh python3 ./test.py -f community/cluster/incSnapshot.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/incSnapshot.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f community/query/query_basic.py -N 3 ,,y,army,./pytest.sh python3 ./test.py -f community/query/query_basic.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f community/cluster/splitVgroupByLearner.py -N 3 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/splitVgroupByLearner.py -N 3
,,n,army,python3 ./test.py -f community/cmdline/fullopt.py ,,n,army,python3 ./test.py -f community/cmdline/fullopt.py
,,n,army,python3 ./test.py -f community/query/show.py -N 3
,,y,army,./pytest.sh python3 ./test.py -f community/storage/oneStageComp.py -N 3 -L 3 -D 1 ,,y,army,./pytest.sh python3 ./test.py -f community/storage/oneStageComp.py -N 3 -L 3 -D 1
# #

View File

@ -105,7 +105,8 @@ SWords shellCommands[] = {
{"create or replace aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>", 0, 0, NULL}, {"create or replace aggregate function <anyword> as <anyword> outputtype <data_types> bufsize <anyword> language <udf_language>", 0, 0, NULL},
{"create user <anyword> pass <anyword> sysinfo 0;", 0, 0, NULL}, {"create user <anyword> pass <anyword> sysinfo 0;", 0, 0, NULL},
{"create user <anyword> pass <anyword> sysinfo 1;", 0, 0, NULL}, {"create user <anyword> pass <anyword> sysinfo 1;", 0, 0, NULL},
#ifdef TD_ENTERPRISE #ifdef TD_ENTERPRISE
{"create view <anyword> as select", 0, 0, NULL},
{"compact database <db_name>", 0, 0, NULL}, {"compact database <db_name>", 0, 0, NULL},
#endif #endif
{"describe <all_table>", 0, 0, NULL}, {"describe <all_table>", 0, 0, NULL},
@ -162,13 +163,20 @@ SWords shellCommands[] = {
{"show create database <db_name> \\G;", 0, 0, NULL}, {"show create database <db_name> \\G;", 0, 0, NULL},
{"show create stable <stb_name> \\G;", 0, 0, NULL}, {"show create stable <stb_name> \\G;", 0, 0, NULL},
{"show create table <tb_name> \\G;", 0, 0, NULL}, {"show create table <tb_name> \\G;", 0, 0, NULL},
#ifdef TD_ENTERPRISE
{"show create view <all_table> \\G;", 0, 0, NULL},
#endif
{"show connections;", 0, 0, NULL}, {"show connections;", 0, 0, NULL},
{"show compact", 0, 0, NULL},
{"show compacts;", 0, 0, NULL},
{"show cluster;", 0, 0, NULL}, {"show cluster;", 0, 0, NULL},
{"show cluster alive;", 0, 0, NULL}, {"show cluster alive;", 0, 0, NULL},
{"show cluster machines;", 0, 0, NULL},
{"show databases;", 0, 0, NULL}, {"show databases;", 0, 0, NULL},
{"show dnodes;", 0, 0, NULL}, {"show dnodes;", 0, 0, NULL},
{"show dnode <dnode_id> variables;", 0, 0, NULL}, {"show dnode <dnode_id> variables;", 0, 0, NULL},
{"show functions;", 0, 0, NULL}, {"show functions;", 0, 0, NULL},
{"show licences;", 0, 0, NULL},
{"show mnodes;", 0, 0, NULL}, {"show mnodes;", 0, 0, NULL},
{"show queries;", 0, 0, NULL}, {"show queries;", 0, 0, NULL},
// 80 // 80
@ -185,6 +193,7 @@ SWords shellCommands[] = {
{"show table distributed <all_table>", 0, 0, NULL}, {"show table distributed <all_table>", 0, 0, NULL},
{"show tags from <tb_name>", 0, 0, NULL}, {"show tags from <tb_name>", 0, 0, NULL},
{"show tags from <db_name>", 0, 0, NULL}, {"show tags from <db_name>", 0, 0, NULL},
{"show table tags from <all_table>", 0, 0, NULL},
{"show topics;", 0, 0, NULL}, {"show topics;", 0, 0, NULL},
{"show transactions;", 0, 0, NULL}, {"show transactions;", 0, 0, NULL},
{"show users;", 0, 0, NULL}, {"show users;", 0, 0, NULL},
@ -194,6 +203,8 @@ SWords shellCommands[] = {
{"show vgroups;", 0, 0, NULL}, {"show vgroups;", 0, 0, NULL},
{"show consumers;", 0, 0, NULL}, {"show consumers;", 0, 0, NULL},
{"show grants;", 0, 0, NULL}, {"show grants;", 0, 0, NULL},
{"show grants full;", 0, 0, NULL},
{"show grants logs;", 0, 0, NULL},
#ifdef TD_ENTERPRISE #ifdef TD_ENTERPRISE
{"split vgroup <vgroup_id>", 0, 0, NULL}, {"split vgroup <vgroup_id>", 0, 0, NULL},
#endif #endif
@ -302,6 +313,20 @@ char* key_systable[] = {
char* udf_language[] = {"\'Python\'", "\'C\'"}; char* udf_language[] = {"\'Python\'", "\'C\'"};
// global keys can tips on anywhere
char* global_keys[] = {
"tbname",
"now",
"_wstart",
"_wend",
"_wduration",
"_qstart",
"_qend",
"_qduration",
"_qtag",
"_isfilled"
};
// //
// ------- global variant define --------- // ------- global variant define ---------
// //
@ -341,8 +366,9 @@ bool waitAutoFill = false;
#define WT_VAR_KEYSELECT 20 #define WT_VAR_KEYSELECT 20
#define WT_VAR_SYSTABLE 21 #define WT_VAR_SYSTABLE 21
#define WT_VAR_LANGUAGE 22 #define WT_VAR_LANGUAGE 22
#define WT_VAR_GLOBALKEYS 23
#define WT_VAR_CNT 23 #define WT_VAR_CNT 24
#define WT_TEXT 0xFF #define WT_TEXT 0xFF
@ -494,10 +520,12 @@ void showHelp() {
show connections;\n\ show connections;\n\
show cluster;\n\ show cluster;\n\
show cluster alive;\n\ show cluster alive;\n\
show cluster machines;\n\
show databases;\n\ show databases;\n\
show dnodes;\n\ show dnodes;\n\
show dnode <dnode_id> variables;\n\ show dnode <dnode_id> variables;\n\
show functions;\n\ show functions;\n\
show licences;\n\
show mnodes;\n\ show mnodes;\n\
show queries;\n\ show queries;\n\
show query <query_id> ;\n\ show query <query_id> ;\n\
@ -513,6 +541,7 @@ void showHelp() {
show table distributed <all_table>;\n\ show table distributed <all_table>;\n\
show tags from <tb_name>\n\ show tags from <tb_name>\n\
show tags from <db_name>\n\ show tags from <db_name>\n\
show table tags from <all_table>\n\
show topics;\n\ show topics;\n\
show transactions;\n\ show transactions;\n\
show users;\n\ show users;\n\
@ -522,6 +551,8 @@ void showHelp() {
show vgroups;\n\ show vgroups;\n\
show consumers;\n\ show consumers;\n\
show grants;\n\ show grants;\n\
show grants full;\n\
show grants logs;\n\
----- T ----- \n\ ----- T ----- \n\
trim database <db_name>;\n\ trim database <db_name>;\n\
----- U ----- \n\ ----- U ----- \n\
@ -534,8 +565,12 @@ void showHelp() {
balance vgroup ;\n\ balance vgroup ;\n\
balance vgroup leader on <vgroup_id> \n\ balance vgroup leader on <vgroup_id> \n\
compact database <db_name>; \n\ compact database <db_name>; \n\
crate view <view_name> as select ...\n\
redistribute vgroup <vgroup_id> dnode <dnode_id> ;\n\ redistribute vgroup <vgroup_id> dnode <dnode_id> ;\n\
split vgroup <vgroup_id>;"); split vgroup <vgroup_id>;\n\
show compacts;\n\
show compact \n\
show create view <all_table>;");
#endif #endif
printf("\n\n"); printf("\n\n");
@ -699,6 +734,7 @@ bool shellAutoInit() {
GenerateVarType(WT_VAR_KEYSELECT, key_select, sizeof(key_select) / sizeof(char*)); GenerateVarType(WT_VAR_KEYSELECT, key_select, sizeof(key_select) / sizeof(char*));
GenerateVarType(WT_VAR_SYSTABLE, key_systable, sizeof(key_systable) / sizeof(char*)); GenerateVarType(WT_VAR_SYSTABLE, key_systable, sizeof(key_systable) / sizeof(char*));
GenerateVarType(WT_VAR_LANGUAGE, udf_language, sizeof(udf_language) / sizeof(char*)); GenerateVarType(WT_VAR_LANGUAGE, udf_language, sizeof(udf_language) / sizeof(char*));
GenerateVarType(WT_VAR_GLOBALKEYS, global_keys, sizeof(global_keys) / sizeof(char*));
return true; return true;
} }
@ -1800,6 +1836,13 @@ bool matchEnd(TAOS* con, SShellCmd* cmd) {
goto _return; goto _return;
} }
// global keys
if (fillWithType(con, cmd, last, WT_VAR_GLOBALKEYS)) {
ret = true;
goto _return;
}
_return: _return:
taosMemoryFree(ps); taosMemoryFree(ps);
return ret; return ret;