diff --git a/cmake/install.inc b/cmake/install.inc
index 55b3fa188f..b0e5c71022 100755
--- a/cmake/install.inc
+++ b/cmake/install.inc
@@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
IF (TD_MVN_INSTALLED)
- INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.15-dist.jar DESTINATION connector/jdbc)
+ INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.16-dist.jar DESTINATION connector/jdbc)
ENDIF ()
ELSEIF (TD_DARWIN)
SET(TD_MAKE_INSTALL_SH "${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh")
diff --git a/cmake/version.inc b/cmake/version.inc
index 49f01d00bc..0509a5ce1b 100644
--- a/cmake/version.inc
+++ b/cmake/version.inc
@@ -4,7 +4,7 @@ PROJECT(TDengine)
IF (DEFINED VERNUMBER)
SET(TD_VER_NUMBER ${VERNUMBER})
ELSE ()
- SET(TD_VER_NUMBER "2.0.13.0")
+ SET(TD_VER_NUMBER "2.0.14.0")
ENDIF ()
IF (DEFINED VERCOMPATIBLE)
diff --git a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
index bee3d99b26..4563b5b5fc 100644
--- a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
+++ b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
@@ -121,6 +121,7 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
**Tips**: 以上所有参数修改后都可以用show databases来确认是否修改成功。
- **显示系统所有数据库**
+
```mysql
SHOW DATABASES;
```
@@ -742,7 +743,7 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
- 适用于:表。
+ 适用于:表。(从 2.0.15 版本开始,本函数也支持超级表)
示例:
```mysql
@@ -1156,7 +1157,7 @@ SELECT AVG(current), MAX(current), LEASTSQUARES(current, start_val, step_val), P
- 数据库名最大长度为32
- 表名最大长度为192,每行数据最大长度16k个字符
- 列名最大长度为64,最多允许1024列,最少需要2列,第一列必须是时间戳
-- 标签最多允许128个,可以0个,标签总长度不超过16k个字符
+- 标签最多允许128个,可以1个,标签总长度不超过16k个字符
- SQL语句最大长度65480个字符,但可通过系统配置参数maxSQLLength修改,最长可配置为1M
- 库的数目,超级表的数目、表的数目,系统不做限制,仅受系统资源限制
diff --git a/documentation20/webdocs/markdowndocs/architecture-ch.md b/documentation20/webdocs/markdowndocs/architecture-ch.md
index 47fb8094b7..773d8196f2 100644
--- a/documentation20/webdocs/markdowndocs/architecture-ch.md
+++ b/documentation20/webdocs/markdowndocs/architecture-ch.md
@@ -248,7 +248,7 @@ Master Vnode遵循下面的写入流程:
1. Master vnode收到应用的数据插入请求,验证OK,进入下一步;
2. 如果系统配置参数walLevel大于0,vnode将把该请求的原始数据包写入数据库日志文件WAL。如果walLevel设置为2,而且fsync设置为0,TDengine还将WAL数据立即落盘,以保证即使宕机,也能从数据库日志文件中恢复数据,避免数据的丢失;
3. 如果有多个副本,vnode将把数据包转发给同一虚拟节点组内slave vnodes, 该转发包带有数据的版本号(version);
-4. 写入内存,并加记录加入到skip list;
+4. 写入内存,并将记录加入到skip list;
5. Master vnode返回确认信息给应用,表示写入成功。
6. 如果第2,3,4步中任何一步失败,将直接返回错误给应用。
@@ -372,7 +372,7 @@ select count(*) from d1001 interval(1h);
select count(*) from d1001 interval(1h) fill(prev);
```
-针对d1001设备采集数据统计每小时记录数,如果某一个小时不存在数据,这返回之前一个小时的统计数据。TDengine提供前向插值(prev)、线性插值(linear)、NULL值填充(NULL)、特定值填充(value)。
+针对d1001设备采集数据统计每小时记录数,如果某一个小时不存在数据,则返回之前一个小时的统计数据。TDengine提供前向插值(prev)、线性插值(linear)、NULL值填充(NULL)、特定值填充(value)。
### 多表聚合查询
TDengine对每个数据采集点单独建表,但在实际应用中经常需要对不同的采集点数据进行聚合。为高效的进行聚合操作,TDengine引入超级表(STable)的概念。超级表用来代表一特定类型的数据采集点,它是包含多张表的表集合,集合里每张表的模式(schema)完全一致,但每张表都带有自己的静态标签,标签可以多个,可以随时增加、删除和修改。 应用可通过指定标签的过滤条件,对一个STable下的全部或部分表进行聚合或统计操作,这样大大简化应用的开发。其具体流程如下图所示:
diff --git a/documentation20/webdocs/markdowndocs/cluster-ch.md b/documentation20/webdocs/markdowndocs/cluster-ch.md
index 89f6a64f19..f3f6f2b300 100644
--- a/documentation20/webdocs/markdowndocs/cluster-ch.md
+++ b/documentation20/webdocs/markdowndocs/cluster-ch.md
@@ -218,7 +218,7 @@ SHOW MNODES;
如果一个数据节点离线,TDengine集群将自动检测到。有如下两种情况:
-- 该数据节点离线超过一定时间(taos.cfg里配置参数offlineThreshold控制时长),系统将自动把该数据节点删除,产生系统报警信息,触发负载均衡流程。如果该被删除的数据节点重现上线时,它将无法加入集群,需要系统管理员重新将其添加进集群才会开始工作。
+- 该数据节点离线超过一定时间(taos.cfg里配置参数offlineThreshold控制时长),系统将自动把该数据节点删除,产生系统报警信息,触发负载均衡流程。如果该被删除的数据节点重新上线时,它将无法加入集群,需要系统管理员重新将其添加进集群才会开始工作。
- 离线后,在offlineThreshold的时长内重新上线,系统将自动启动数据恢复流程,等数据完全恢复后,该节点将开始正常工作。
**注意:**如果一个虚拟节点组(包括mnode组)里所归属的每个数据节点都处于离线或unsynced状态,必须等该虚拟节点组里的所有数据节点都上线、都能交换状态信息后,才能选出Master,该虚拟节点组才能对外提供服务。比如整个集群有3个数据节点,副本数为3,如果3个数据节点都宕机,然后2个数据节点重启,是无法工作的,只有等3个数据节点都重启成功,才能对外服务。
@@ -227,5 +227,5 @@ SHOW MNODES;
如果副本数为偶数,当一个vnode group里一半vnode不工作时,是无法从中选出master的。同理,一半mnode不工作时,是无法选出mnode的master的,因为存在“split brain”问题。为解决这个问题,TDengine引入了arbitrator的概念。Arbitrator模拟一个vnode或mnode在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含arbitrator在内,超过半数的vnode或mnode工作,那么该vnode group或mnode组就可以正常的提供数据插入或查询服务。比如对于副本数为2的情形,如果一个节点A离线,但另外一个节点B正常,而且能连接到arbitrator, 那么节点B就能正常工作。
-TDengine提供一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。请点击[安装包下载](https://www.taosdata.com/cn/all-downloads/),在TDengine Arbitrator Linux一节中,选择适合的版本下载并安装。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数`-p`可以指定其对外服务的端口号,缺省是6042。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为arbitrator的End Point。如果该参数配置了,当副本数为偶数数,系统将自动连接配置的arbitrator。如果副本数为奇数,即使配置了arbitrator, 系统也不会去建立连接。
+TDengine提供一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。请点击[安装包下载](https://www.taosdata.com/cn/all-downloads/),在TDengine Arbitrator Linux一节中,选择适合的版本下载并安装。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数`-p`可以指定其对外服务的端口号,缺省是6042。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为arbitrator的End Point。如果该参数配置了,当副本数为偶数时,系统将自动连接配置的arbitrator。如果副本数为奇数,即使配置了arbitrator, 系统也不会去建立连接。
diff --git a/documentation20/webdocs/markdowndocs/cluster.md b/documentation20/webdocs/markdowndocs/cluster.md
index 08206a85a8..8cf7065f72 100644
--- a/documentation20/webdocs/markdowndocs/cluster.md
+++ b/documentation20/webdocs/markdowndocs/cluster.md
@@ -141,6 +141,6 @@ SHOW MNODES;
如果副本数为偶数,当一个vnode group里一半vnode不工作时,是无法从中选出master的。同理,一半mnode不工作时,是无法选出mnode的master的,因为存在“split brain”问题。为解决这个问题,TDengine引入了arbitrator的概念。Arbitrator模拟一个vnode或mnode在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含arbitrator在内,超过半数的vnode或mnode工作,那么该vnode group或mnode组就可以正常的提供数据插入或查询服务。比如对于副本数为2的情形,如果一个节点A离线,但另外一个节点B正常,而且能连接到arbitrator, 那么节点B就能正常工作。
-TDengine安装包里带有一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数`-p`可以指定其对外服务的端口号,缺省是6030。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为Arbitrator的End Point。如果该参数配置了,当副本数为偶数数,系统将自动连接配置的Arbitrator。
+TDengine安装包里带有一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数`-p`可以指定其对外服务的端口号,缺省是6030。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为Arbitrator的End Point。如果该参数配置了,当副本数为偶数时,系统将自动连接配置的Arbitrator。
在配置了Arbitrator的情况下,它也会显示在“show dnodes;”指令给出的节点列表中。
diff --git a/documentation20/webdocs/markdowndocs/connector-ch.md b/documentation20/webdocs/markdowndocs/connector-ch.md
index da9c2e5a11..bcaabe3c0a 100644
--- a/documentation20/webdocs/markdowndocs/connector-ch.md
+++ b/documentation20/webdocs/markdowndocs/connector-ch.md
@@ -288,13 +288,6 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
* res:`taos_query_a`回调时返回的结果集
* fp:回调函数。其参数`param`是用户可定义的传递给回调函数的参数结构体;`numOfRows`是获取到的数据的行数(不是整个查询结果集的函数)。 在回调函数中,应用可以通过调用`taos_fetch_row`前向迭代获取批量记录中每一行记录。读完一块内的所有记录后,应用需要在回调函数中继续调用`taos_fetch_rows_a`获取下一批记录进行处理,直到返回的记录数(numOfRows)为零(结果返回完成)或记录数为负值(查询出错)。
-- `void taos_fetch_row_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row), void *param);`
-
- 异步获取一条记录。其中:
-
- * res:`taos_query_a`回调时返回的结果集
- * fp:回调函数。其参数`param`是应用提供的一个用于回调的参数。回调时,第三个参数`row`指向一行记录。不同于`taos_fetch_rows_a`,应用无需调用`taos_fetch_row`来获取一行数据,更加简单,但数据提取性能不及批量获取的API。
-
TDengine的异步API均采用非阻塞调用模式。应用程序可以用多线程同时打开多张表,并可以同时对每张打开的表进行查询或者插入操作。需要指出的是,**客户端应用必须确保对同一张表的操作完全串行化**,即对同一个表的插入或查询操作未完成时(未返回时),不能够执行第二个插入或查询操作。
### 参数绑定API
diff --git a/documentation20/webdocs/markdowndocs/faq-ch.md b/documentation20/webdocs/markdowndocs/faq-ch.md
index a085e6159a..79139078c1 100644
--- a/documentation20/webdocs/markdowndocs/faq-ch.md
+++ b/documentation20/webdocs/markdowndocs/faq-ch.md
@@ -1,5 +1,19 @@
# 常见问题
+## 0. 怎么报告问题?
+
+如果 FAQ 中的信息不能够帮到您,需要 TDengine 技术团队的技术支持与协助,请将以下两个目录中内容打包:
+1. /var/log/taos (如果没有修改过默认路径)
+2. /etc/taos
+
+附上必要的问题描述,包括使用的 TDengine 版本信息、平台环境信息、发生该问题的执行操作、出现问题的表征及大概的时间,在 GitHub提交Issue。
+
+为了保证有足够的debug信息,如果问题能够重复,请修改/etc/taos/taos.cfg文件,最后面添加一行“debugFlag 135"(不带引号本身),然后重启taosd, 重复问题,然后再递交。也可以通过如下SQL语句,临时设置taosd的日志级别。
+```
+ alter dnode debugFlag 135;
+```
+但系统正常运行时,请一定将debugFlag设置为131,否则会产生大量的日志信息,降低系统效率。
+
## 1. TDengine2.0之前的版本升级到2.0及以上的版本应该注意什么?☆☆☆
2.0版本在之前版本的基础上,进行了完全的重构,配置文件和数据文件是不兼容的。在升级之前务必进行如下操作:
@@ -118,16 +132,8 @@ TDengine是根据hostname唯一标志一台机器的,在数据文件从机器A
- 2.0.7.0 及以后的版本,到/var/lib/taos/dnode下,修复dnodeEps.json的dnodeId对应的FQDN,重启。确保机器内所有机器的此文件是完全相同的。
- 1.x 和 2.x 版本的存储结构不兼容,需要使用迁移工具或者自己开发应用导出导入数据。
-## 17. 怎么报告问题?
+## 17. TDengine 是否支持删除或更新已经写入的数据?
-如果 FAQ 中的信息不能够帮到您,需要 TDengine 技术团队的技术支持与协助,请将以下两个目录中内容打包:
-1. /var/log/taos
-2. /etc/taos
+TDengine 目前尚不支持删除功能,未来根据用户需求可能会支持。
-附上必要的问题描述,以及发生该问题的执行操作,出现问题的表征及大概的时间,在 GitHub提交Issue。
-
-为了保证有足够的debug信息,如果问题能够重复,请修改/etc/taos/taos.cfg文件,最后面添加一行“debugFlag 135"(不带引号本身),然后重启taosd, 重复问题,然后再递交。也可以通过如下SQL语句,临时设置taosd的日志级别。
-```
- alter dnode debugFlag 135;
-```
-但系统正常运行时,请一定将debugFlag设置为131,否则会产生大量的日志信息,降低系统效率。
+从 2.0.8.0 开始,TDengine 支持更新已经写入数据的功能。使用更新功能需要在创建数据库时使用 UPDATE 1 参数,之后可以使用 INSERT INTO 命令更新已经写入的相同时间戳数据。UPDATE 参数不支持 ALTER DATABASE 命令修改。没有使用 UPDATE 1 参数创建的数据库,写入相同时间戳的数据不会修改之前的数据,也不会报错。
\ No newline at end of file
diff --git a/packaging/cfg/taos.cfg b/packaging/cfg/taos.cfg
index 4aefc2f449..2908a8a21e 100644
--- a/packaging/cfg/taos.cfg
+++ b/packaging/cfg/taos.cfg
@@ -36,6 +36,9 @@
# 0.0: only one core available.
# tsRatioOfQueryCores 1.0
+# the last_row/first/last aggregator will not change the original column name in the result fields
+# keepColumnName 0
+
# number of management nodes in the system
# numOfMnodes 3
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index c4b2039737..102fea6b9e 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -1,6 +1,6 @@
name: tdengine
base: core18
-version: '2.0.13.0'
+version: '2.0.14.0'
icon: snap/gui/t-dengine.svg
summary: an open-source big data platform designed and optimized for IoT.
description: |
@@ -72,7 +72,7 @@ parts:
- usr/bin/taosd
- usr/bin/taos
- usr/bin/taosdemo
- - usr/lib/libtaos.so.2.0.13.0
+ - usr/lib/libtaos.so.2.0.14.0
- usr/lib/libtaos.so.1
- usr/lib/libtaos.so
diff --git a/src/client/inc/tscLog.h b/src/client/inc/tscLog.h
index 5273a87ea0..f25ec02bd8 100644
--- a/src/client/inc/tscLog.h
+++ b/src/client/inc/tscLog.h
@@ -13,8 +13,8 @@
* along with this program. If not, see .
*/
-#ifndef TDENGINE_TSC_LOG_H
-#define TDENGINE_TSC_LOG_H
+#ifndef TDENGINE_TSCLOG_H
+#define TDENGINE_TSCLOG_H
#ifdef __cplusplus
extern "C" {
@@ -22,7 +22,7 @@ extern "C" {
#include "tlog.h"
-extern int32_t cDebugFlag;
+extern uint32_t cDebugFlag;
extern int8_t tscEmbedded;
#define tscFatal(...) do { if (cDebugFlag & DEBUG_FATAL) { taosPrintLog("TSC FATAL ", tscEmbedded ? 255 : cDebugFlag, __VA_ARGS__); }} while(0)
diff --git a/src/client/inc/tscSubquery.h b/src/client/inc/tscSubquery.h
index 43c9b009bf..e1370513ef 100644
--- a/src/client/inc/tscSubquery.h
+++ b/src/client/inc/tscSubquery.h
@@ -13,8 +13,8 @@
* along with this program. If not, see .
*/
-#ifndef TDENGINE_TSCJOINPROCESS_H
-#define TDENGINE_TSCJOINPROCESS_H
+#ifndef TDENGINE_TSCSUBQUERY_H
+#define TDENGINE_TSCSUBQUERY_H
#ifdef __cplusplus
extern "C" {
@@ -47,9 +47,8 @@ void tscLockByThread(int64_t *lockedBy);
void tscUnlockByThread(int64_t *lockedBy);
-
#ifdef __cplusplus
}
#endif
-#endif // TDENGINE_TSCJOINPROCESS_H
+#endif // TDENGINE_TSCSUBQUERY_H
diff --git a/src/client/inc/tscUtil.h b/src/client/inc/tscUtil.h
index 8d82c65cee..633512e324 100644
--- a/src/client/inc/tscUtil.h
+++ b/src/client/inc/tscUtil.h
@@ -110,7 +110,7 @@ void* tscDestroyBlockArrayList(SArray* pDataBlockList);
void* tscDestroyBlockHashTable(SHashObj* pBlockHashTable);
int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock);
-int32_t tscMergeTableDataBlocks(SSqlObj* pSql);
+int32_t tscMergeTableDataBlocks(SSqlObj* pSql, bool freeBlockMap);
int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, int32_t startOffset, int32_t rowSize, const char* tableId, STableMeta* pTableMeta,
STableDataBlocks** dataBlocks, SArray* pBlockList);
@@ -256,11 +256,11 @@ void tscSVgroupInfoCopy(SVgroupInfo* dst, const SVgroupInfo* src);
* @param pPrevSql
* @return
*/
-SSqlObj* createSimpleSubObj(SSqlObj* pSql, void (*fp)(), void* param, int32_t cmd);
+SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, int32_t cmd);
void registerSqlObj(SSqlObj* pSql);
-SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void* param, int32_t cmd, SSqlObj* pPrevSql);
+SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t fp, void* param, int32_t cmd, SSqlObj* pPrevSql);
void addGroupInfoForSubquery(SSqlObj* pParentObj, SSqlObj* pSql, int32_t subClauseIndex, int32_t tableIndex);
void doAddGroupColumnForSubquery(SQueryInfo* pQueryInfo, int32_t tagIndex);
diff --git a/src/client/inc/tschemautil.h b/src/client/inc/tschemautil.h
index c881a7a763..a9dcd230a6 100644
--- a/src/client/inc/tschemautil.h
+++ b/src/client/inc/tschemautil.h
@@ -24,10 +24,6 @@ extern "C" {
#include "tstoken.h"
#include "tsclient.h"
-#define VALIDNUMOFCOLS(x) ((x) >= TSDB_MIN_COLUMNS && (x) <= TSDB_MAX_COLUMNS)
-
-#define VALIDNUMOFTAGS(x) ((x) >= 0 && (x) <= TSDB_MAX_TAGS)
-
/**
* get the number of tags of this table
* @param pTableMeta
@@ -79,26 +75,6 @@ SSchema *tscGetTableColumnSchema(const STableMeta *pMeta, int32_t colIndex);
*/
SSchema* tscGetColumnSchemaById(STableMeta* pTableMeta, int16_t colId);
-/**
- * check if the schema is valid or not, including following aspects:
- * 1. number of columns
- * 2. column types
- * 3. column length
- * 4. column names
- * 5. total length
- *
- * @param pSchema
- * @param numOfCols
- * @return
- */
-bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols, int32_t numOfTags);
-
-/**
- * get the schema for the "tbname" column. it is a built column
- * @return
- */
-SSchema tscGetTbnameColumnSchema();
-
/**
* create the table meta from the msg
* @param pTableMetaMsg
diff --git a/src/client/inc/tsclient.h b/src/client/inc/tsclient.h
index 26a2502106..8bab8e2d01 100644
--- a/src/client/inc/tsclient.h
+++ b/src/client/inc/tsclient.h
@@ -237,7 +237,7 @@ typedef struct {
int32_t numOfTablesInSubmit;
};
- uint32_t insertType;
+ uint32_t insertType; // TODO remove it
int32_t clauseIndex; // index of multiple subclause query
char * curSql; // current sql, resume position of sql after parsing paused
@@ -319,7 +319,8 @@ typedef struct STscObj {
} STscObj;
typedef struct SSubqueryState {
- int32_t numOfRemain; // the number of remain unfinished subquery
+ pthread_mutex_t mutex;
+ int8_t *states;
int32_t numOfSub; // the number of total sub-queries
uint64_t numOfRetrievedRows; // total number of points in this query
} SSubqueryState;
@@ -329,8 +330,8 @@ typedef struct SSqlObj {
pthread_t owner; // owner of sql object, by which it is executed
STscObj *pTscObj;
int64_t rpcRid;
- void (*fp)();
- void (*fetchFp)();
+ __async_cb_func_t fp;
+ __async_cb_func_t fetchFp;
void *param;
int64_t stime;
uint32_t queryId;
@@ -465,7 +466,7 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
pRes->length[columnIndex] = pInfo->pSqlExpr->param[1].nLen;
pRes->tsrow[columnIndex] = (pInfo->pSqlExpr->param[1].nType == TSDB_DATA_TYPE_NULL) ? NULL : (unsigned char*)pData;
} else {
- assert(bytes == tDataTypeDesc[type].nSize);
+ assert(bytes == tDataTypes[type].bytes);
pRes->tsrow[columnIndex] = isNull(pData, type) ? NULL : (unsigned char*)&pInfo->pSqlExpr->param[1].i64;
pRes->length[columnIndex] = bytes;
@@ -482,7 +483,7 @@ static FORCE_INLINE void tscGetResultColumnChr(SSqlRes* pRes, SFieldInfo* pField
pRes->length[columnIndex] = realLen;
} else {
- assert(bytes == tDataTypeDesc[type].nSize);
+ assert(bytes == tDataTypes[type].bytes);
pRes->tsrow[columnIndex] = isNull(pData, type) ? NULL : (unsigned char*)pData;
pRes->length[columnIndex] = bytes;
diff --git a/src/client/src/taos.def b/src/client/src/taos.def
index 49d7290ce7..43cd819061 100644
--- a/src/client/src/taos.def
+++ b/src/client/src/taos.def
@@ -32,7 +32,6 @@ taos_errstr
taos_errno
taos_query_a
taos_fetch_rows_a
-taos_fetch_row_a
taos_subscribe
taos_consume
taos_unsubscribe
diff --git a/src/client/src/tscAsync.c b/src/client/src/tscAsync.c
index 37207858a8..4eae2b7a87 100644
--- a/src/client/src/tscAsync.c
+++ b/src/client/src/tscAsync.c
@@ -20,24 +20,19 @@
#include "trpc.h"
#include "tscLog.h"
#include "tscSubquery.h"
-#include "tscLocalMerge.h"
#include "tscUtil.h"
#include "tsched.h"
#include "tschemautil.h"
#include "tsclient.h"
-static void tscProcessFetchRow(SSchedMsg *pMsg);
static void tscAsyncQueryRowsForNextVnode(void *param, TAOS_RES *tres, int numOfRows);
-static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRows, void (*fp)());
-
/*
* Proxy function to perform sequentially query&retrieve operation.
* If sql queries upon a super table and two-stage merge procedure is not involved (when employ the projection
* query), it will sequentially query&retrieve data for all vnodes
*/
static void tscAsyncFetchRowsProxy(void *param, TAOS_RES *tres, int numOfRows);
-static void tscAsyncFetchSingleRowProxy(void *param, TAOS_RES *tres, int numOfRows);
void doAsyncQuery(STscObj* pObj, SSqlObj* pSql, __async_cb_func_t fp, void* param, const char* sqlstr, size_t sqlLen) {
SSqlCmd* pCmd = &pSql->cmd;
@@ -148,7 +143,7 @@ static void tscAsyncFetchRowsProxy(void *param, TAOS_RES *tres, int numOfRows) {
}
// actual continue retrieve function with user-specified callback function
-static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRows, void (*fp)()) {
+static void tscProcessAsyncRetrieveImpl(void *param, TAOS_RES *tres, int numOfRows, __async_cb_func_t fp) {
SSqlObj *pSql = (SSqlObj *)tres;
if (pSql == NULL) { // error
tscError("sql object is NULL");
@@ -191,11 +186,6 @@ static void tscAsyncQueryRowsForNextVnode(void *param, TAOS_RES *tres, int numOf
tscProcessAsyncRetrieveImpl(param, tres, numOfRows, tscAsyncFetchRowsProxy);
}
-void tscAsyncQuerySingleRowForNextVnode(void *param, TAOS_RES *tres, int numOfRows) {
- // query completed, continue to retrieve
- tscProcessAsyncRetrieveImpl(param, tres, numOfRows, tscAsyncFetchSingleRowProxy);
-}
-
void taos_fetch_rows_a(TAOS_RES *taosa, __async_cb_func_t fp, void *param) {
SSqlObj *pSql = (SSqlObj *)taosa;
if (pSql == NULL || pSql->signature != pSql) {
@@ -263,103 +253,6 @@ void taos_fetch_rows_a(TAOS_RES *taosa, __async_cb_func_t fp, void *param) {
}
}
-void taos_fetch_row_a(TAOS_RES *taosa, void (*fp)(void *, TAOS_RES *, TAOS_ROW), void *param) {
- SSqlObj *pSql = (SSqlObj *)taosa;
- if (pSql == NULL || pSql->signature != pSql) {
- tscError("sql object is NULL");
- tscQueueAsyncError(fp, param, TSDB_CODE_TSC_DISCONNECTED);
- return;
- }
-
- SSqlRes *pRes = &pSql->res;
- SSqlCmd *pCmd = &pSql->cmd;
-
- if (pRes->qhandle == 0) {
- tscError("qhandle is NULL");
- pSql->param = param;
- pRes->code = TSDB_CODE_TSC_INVALID_QHANDLE;
-
- tscAsyncResultOnError(pSql);
- return;
- }
-
- pSql->fetchFp = fp;
- pSql->param = param;
-
- if (pRes->row >= pRes->numOfRows) {
- tscResetForNextRetrieve(pRes);
- pSql->fp = tscAsyncFetchSingleRowProxy;
-
- if (pCmd->command != TSDB_SQL_RETRIEVE_LOCALMERGE && pCmd->command < TSDB_SQL_LOCAL) {
- pCmd->command = (pCmd->command > TSDB_SQL_MGMT) ? TSDB_SQL_RETRIEVE : TSDB_SQL_FETCH;
- }
-
- tscProcessSql(pSql);
- } else {
- SSchedMsg schedMsg = { 0 };
- schedMsg.fp = tscProcessFetchRow;
- schedMsg.ahandle = pSql;
- schedMsg.thandle = pRes->tsrow;
- schedMsg.msg = NULL;
- taosScheduleTask(tscQhandle, &schedMsg);
- }
-}
-
-void tscAsyncFetchSingleRowProxy(void *param, TAOS_RES *tres, int numOfRows) {
- SSqlObj *pSql = (SSqlObj *)tres;
- SSqlRes *pRes = &pSql->res;
- SSqlCmd *pCmd = &pSql->cmd;
-
- SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
-
- if (numOfRows == 0) {
- if (hasMoreVnodesToTry(pSql)) { // sequentially retrieve data from remain vnodes.
- tscTryQueryNextVnode(pSql, tscAsyncQuerySingleRowForNextVnode);
- } else {
- /*
- * 1. has reach the limitation
- * 2. no remain virtual nodes to be retrieved anymore
- */
- (*pSql->fetchFp)(pSql->param, pSql, NULL);
- }
- return;
- }
-
- for (int i = 0; i < pCmd->numOfCols; ++i){
- SInternalField* pSup = taosArrayGet(pQueryInfo->fieldsInfo.internalField, i);
- if (pSup->pSqlExpr != NULL) {
-// pRes->tsrow[i] = TSC_GET_RESPTR_BASE(pRes, pQueryInfo, i) + pSup->pSqlExpr->resBytes * pRes->row;
- } else {
- //todo add
- }
- }
-
- pRes->row++;
-
- (*pSql->fetchFp)(pSql->param, pSql, pSql->res.tsrow);
-}
-
-void tscProcessFetchRow(SSchedMsg *pMsg) {
- SSqlObj *pSql = (SSqlObj *)pMsg->ahandle;
- SSqlRes *pRes = &pSql->res;
- SSqlCmd *pCmd = &pSql->cmd;
-
- SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
-
- for (int i = 0; i < pCmd->numOfCols; ++i) {
- SInternalField* pSup = taosArrayGet(pQueryInfo->fieldsInfo.internalField, i);
-
- if (pSup->pSqlExpr != NULL) {
- tscGetResultColumnChr(pRes, &pQueryInfo->fieldsInfo, i, 0);
- } else {
-// todo add
- }
- }
-
- pRes->row++;
- (*pSql->fetchFp)(pSql->param, pSql, pRes->tsrow);
-}
-
// this function will be executed by queue task threads, so the terrno is not valid
static void tscProcessAsyncError(SSchedMsg *pMsg) {
void (*fp)() = pMsg->ahandle;
@@ -372,7 +265,7 @@ void tscQueueAsyncError(void(*fp), void *param, int32_t code) {
int32_t* c = malloc(sizeof(int32_t));
*c = code;
- SSchedMsg schedMsg = { 0 };
+ SSchedMsg schedMsg = {0};
schedMsg.fp = tscProcessAsyncError;
schedMsg.ahandle = fp;
schedMsg.thandle = param;
@@ -380,7 +273,6 @@ void tscQueueAsyncError(void(*fp), void *param, int32_t code) {
taosScheduleTask(tscQhandle, &schedMsg);
}
-
void tscAsyncResultOnError(SSqlObj *pSql) {
if (pSql == NULL || pSql->signature != pSql) {
tscDebug("%p SqlObj is freed, not add into queue async res", pSql);
diff --git a/src/client/src/tscLocal.c b/src/client/src/tscLocal.c
index 48380f8641..599fa86460 100644
--- a/src/client/src/tscLocal.c
+++ b/src/client/src/tscLocal.c
@@ -79,7 +79,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
char* dst = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 0) * totalNumOfRows + pField->bytes * i;
STR_WITH_MAXSIZE_TO_VARSTR(dst, pSchema[i].name, pField->bytes);
- char *type = tDataTypeDesc[pSchema[i].type].aName;
+ char *type = tDataTypes[pSchema[i].type].name;
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 1);
dst = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i;
@@ -119,7 +119,7 @@ static int32_t tscSetValueToResObj(SSqlObj *pSql, int32_t rowLen) {
// type name
pField = tscFieldInfoGetField(&pQueryInfo->fieldsInfo, 1);
- char *type = tDataTypeDesc[pSchema[i].type].aName;
+ char *type = tDataTypes[pSchema[i].type].name;
output = pRes->data + tscFieldInfoGetOffset(pQueryInfo, 1) * totalNumOfRows + pField->bytes * i;
STR_WITH_MAXSIZE_TO_VARSTR(output, type, pField->bytes);
@@ -619,9 +619,9 @@ static int32_t tscRebuildDDLForNormalTable(SSqlObj *pSql, const char *tableName,
if (type == TSDB_DATA_TYPE_NCHAR) {
bytes = bytes/TSDB_NCHAR_SIZE;
}
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s(%d),", pSchema[i].name, tDataTypeDesc[pSchema[i].type].aName, bytes);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s(%d),", pSchema[i].name, tDataTypes[pSchema[i].type].name, bytes);
} else {
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypeDesc[pSchema[i].type].aName);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypes[pSchema[i].type].name);
}
}
sprintf(result + strlen(result) - 1, "%s", ")");
@@ -646,9 +646,9 @@ static int32_t tscRebuildDDLForSuperTable(SSqlObj *pSql, const char *tableName,
if (type == TSDB_DATA_TYPE_NCHAR) {
bytes = bytes/TSDB_NCHAR_SIZE;
}
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result),"%s %s(%d),", pSchema[i].name,tDataTypeDesc[pSchema[i].type].aName, bytes);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result),"%s %s(%d),", pSchema[i].name,tDataTypes[pSchema[i].type].name, bytes);
} else {
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypeDesc[type].aName);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypes[type].name);
}
}
snprintf(result + strlen(result) - 1, TSDB_MAX_BINARY_LEN - strlen(result), "%s %s", ")", "TAGS (");
@@ -660,9 +660,9 @@ static int32_t tscRebuildDDLForSuperTable(SSqlObj *pSql, const char *tableName,
if (type == TSDB_DATA_TYPE_NCHAR) {
bytes = bytes/TSDB_NCHAR_SIZE;
}
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s(%d),", pSchema[i].name,tDataTypeDesc[pSchema[i].type].aName, bytes);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s(%d),", pSchema[i].name,tDataTypes[pSchema[i].type].name, bytes);
} else {
- snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypeDesc[type].aName);
+ snprintf(result + strlen(result), TSDB_MAX_BINARY_LEN - strlen(result), "%s %s,", pSchema[i].name, tDataTypes[type].name);
}
}
sprintf(result + strlen(result) - 1, "%s", ")");
diff --git a/src/client/src/tscLocalMerge.c b/src/client/src/tscLocalMerge.c
index 80dde8576f..21bff0e5ef 100644
--- a/src/client/src/tscLocalMerge.c
+++ b/src/client/src/tscLocalMerge.c
@@ -979,14 +979,13 @@ static void doFillResult(SSqlObj *pSql, SLocalReducer *pLocalReducer, bool doneO
pQueryInfo->limit.offset -= newRows;
pRes->numOfRows = 0;
- int32_t rpoints = taosNumOfRemainRows(pFillInfo);
- if (rpoints <= 0) {
+ if (!taosFillHasMoreResults(pFillInfo)) {
if (!doneOutput) { // reduce procedure has not completed yet, but current results for fill are exhausted
break;
}
// all output in current group are completed
- int32_t totalRemainRows = (int32_t)getNumOfResWithFill(pFillInfo, actualETime, pLocalReducer->resColModel->capacity);
+ int32_t totalRemainRows = (int32_t)getNumOfResultsAfterFillGap(pFillInfo, actualETime, pLocalReducer->resColModel->capacity);
if (totalRemainRows <= 0) {
break;
}
@@ -1337,14 +1336,14 @@ static bool doBuildFilledResultForGroup(SSqlObj *pSql) {
SLocalReducer *pLocalReducer = pRes->pLocalReducer;
SFillInfo *pFillInfo = pLocalReducer->pFillInfo;
- if (pFillInfo != NULL && taosNumOfRemainRows(pFillInfo) > 0) {
+ if (pFillInfo != NULL && taosFillHasMoreResults(pFillInfo)) {
assert(pQueryInfo->fillType != TSDB_FILL_NONE);
tFilePage *pFinalDataBuf = pLocalReducer->pResultBuf;
int64_t etime = *(int64_t *)(pFinalDataBuf->data + TSDB_KEYSIZE * (pFillInfo->numOfRows - 1));
// the first column must be the timestamp column
- int32_t rows = (int32_t) getNumOfResWithFill(pFillInfo, etime, pLocalReducer->resColModel->capacity);
+ int32_t rows = (int32_t) getNumOfResultsAfterFillGap(pFillInfo, etime, pLocalReducer->resColModel->capacity);
if (rows > 0) { // do fill gap
doFillResult(pSql, pLocalReducer, false);
}
@@ -1373,7 +1372,7 @@ static bool doHandleLastRemainData(SSqlObj *pSql) {
((pRes->numOfRowsGroup < pQueryInfo->limit.limit && pQueryInfo->limit.limit > 0) || (pQueryInfo->limit.limit < 0))) {
int64_t etime = (pQueryInfo->order.order == TSDB_ORDER_ASC)? pQueryInfo->window.ekey : pQueryInfo->window.skey;
- int32_t rows = (int32_t)getNumOfResWithFill(pFillInfo, etime, pLocalReducer->resColModel->capacity);
+ int32_t rows = (int32_t)getNumOfResultsAfterFillGap(pFillInfo, etime, pLocalReducer->resColModel->capacity);
if (rows > 0) {
doFillResult(pSql, pLocalReducer, true);
}
@@ -1428,6 +1427,10 @@ int32_t tscDoLocalMerge(SSqlObj *pSql) {
tscResetForNextRetrieve(pRes);
if (pSql->signature != pSql || pRes == NULL || pRes->pLocalReducer == NULL) { // all data has been processed
+ if (pRes->code == TSDB_CODE_SUCCESS) {
+ return pRes->code;
+ }
+
tscError("%p local merge abort due to error occurs, code:%s", pSql, tstrerror(pRes->code));
return pRes->code;
}
diff --git a/src/client/src/tscParseInsert.c b/src/client/src/tscParseInsert.c
index 7151c33393..0c7af5d4e3 100644
--- a/src/client/src/tscParseInsert.c
+++ b/src/client/src/tscParseInsert.c
@@ -1281,7 +1281,7 @@ int tsParseInsertSql(SSqlObj *pSql) {
}
if (taosHashGetSize(pCmd->pTableBlockHashList) > 0) { // merge according to vgId
- if ((code = tscMergeTableDataBlocks(pSql)) != TSDB_CODE_SUCCESS) {
+ if ((code = tscMergeTableDataBlocks(pSql, true)) != TSDB_CODE_SUCCESS) {
goto _clean;
}
}
@@ -1336,15 +1336,6 @@ int tsParseSql(SSqlObj *pSql, bool initial) {
}
if (tscIsInsertData(pSql->sqlstr)) {
- /*
- * Set the fp before parse the sql string, in case of getTableMeta failed, in which
- * the error handle callback function can rightfully restore the user-defined callback function (fp).
- */
- if (initial && (pSql->cmd.insertType != TSDB_QUERY_TYPE_STMT_INSERT)) {
- pSql->fetchFp = pSql->fp;
- pSql->fp = (void(*)())tscHandleMultivnodeInsert;
- }
-
if (initial && ((ret = tsInsertInitialCheck(pSql)) != TSDB_CODE_SUCCESS)) {
return ret;
}
@@ -1398,7 +1389,7 @@ static int doPackSendDataBlock(SSqlObj *pSql, int32_t numOfRows, STableDataBlock
return tscInvalidSQLErrMsg(pCmd->payload, "too many rows in sql, total number of rows should be less than 32767", NULL);
}
- if ((code = tscMergeTableDataBlocks(pSql)) != TSDB_CODE_SUCCESS) {
+ if ((code = tscMergeTableDataBlocks(pSql, true)) != TSDB_CODE_SUCCESS) {
return code;
}
diff --git a/src/client/src/tscPrepare.c b/src/client/src/tscPrepare.c
index 981b354c8a..7c69c16b04 100644
--- a/src/client/src/tscPrepare.c
+++ b/src/client/src/tscPrepare.c
@@ -255,7 +255,6 @@ static char* normalStmtBuildSql(STscStmt* stmt) {
////////////////////////////////////////////////////////////////////////////////
// functions for insertion statement preparation
-
static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
if (bind->is_null != NULL && *(bind->is_null)) {
setNull(data + param->offset, param->type, param->bytes);
@@ -697,71 +696,52 @@ static int doBindParam(char* data, SParamInfo* param, TAOS_BIND* bind) {
static int insertStmtBindParam(STscStmt* stmt, TAOS_BIND* bind) {
SSqlCmd* pCmd = &stmt->pSql->cmd;
- int32_t alloced = 1, binded = 0;
- if (pCmd->batchSize > 0) {
- alloced = (pCmd->batchSize + 1) / 2;
- binded = pCmd->batchSize / 2;
+ STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, 0, 0);
+
+ STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
+ if (pCmd->pTableBlockHashList == NULL) {
+ pCmd->pTableBlockHashList = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, false);
}
- size_t size = taosArrayGetSize(pCmd->pDataBlocks);
- for (int32_t i = 0; i < size; ++i) {
- STableDataBlocks* pBlock = taosArrayGetP(pCmd->pDataBlocks, i);
- uint32_t totalDataSize = pBlock->size - sizeof(SSubmitBlk);
- uint32_t dataSize = totalDataSize / alloced;
- assert(dataSize * alloced == totalDataSize);
+ STableDataBlocks* pBlock = NULL;
- if (alloced == binded) {
- totalDataSize += dataSize + sizeof(SSubmitBlk);
- if (totalDataSize > pBlock->nAllocSize) {
- const double factor = 1.5;
- void* tmp = realloc(pBlock->pData, (uint32_t)(totalDataSize * factor));
- if (tmp == NULL) {
- return TSDB_CODE_TSC_OUT_OF_MEMORY;
- }
- pBlock->pData = (char*)tmp;
- pBlock->nAllocSize = (uint32_t)(totalDataSize * factor);
- }
+ int32_t ret =
+ tscGetDataBlockFromList(pCmd->pTableBlockHashList, pTableMeta->id.uid, TSDB_PAYLOAD_SIZE, sizeof(SSubmitBlk),
+ pTableMeta->tableInfo.rowSize, pTableMetaInfo->name, pTableMeta, &pBlock, NULL);
+ if (ret != 0) {
+ // todo handle error
+ }
+
+ uint32_t totalDataSize = sizeof(SSubmitBlk) + pCmd->batchSize * pBlock->rowSize;
+ if (totalDataSize > pBlock->nAllocSize) {
+ const double factor = 1.5;
+
+ void* tmp = realloc(pBlock->pData, (uint32_t)(totalDataSize * factor));
+ if (tmp == NULL) {
+ return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
- char* data = pBlock->pData + sizeof(SSubmitBlk) + dataSize * binded;
- for (uint32_t j = 0; j < pBlock->numOfParams; ++j) {
- SParamInfo* param = pBlock->params + j;
- int code = doBindParam(data, param, bind + param->idx);
- if (code != TSDB_CODE_SUCCESS) {
- tscDebug("param %d: type mismatch or invalid", param->idx);
- return code;
- }
+ pBlock->pData = (char*)tmp;
+ pBlock->nAllocSize = (uint32_t)(totalDataSize * factor);
+ }
+
+ char* data = pBlock->pData + sizeof(SSubmitBlk) + pBlock->rowSize * pCmd->batchSize;
+ for (uint32_t j = 0; j < pBlock->numOfParams; ++j) {
+ SParamInfo* param = &pBlock->params[j];
+
+ int code = doBindParam(data, param, &bind[param->idx]);
+ if (code != TSDB_CODE_SUCCESS) {
+ tscDebug("param %d: type mismatch or invalid", param->idx);
+ return code;
}
}
- // actual work of all data blocks is done, update block size and numOfRows.
- // note we don't do this block by block during the binding process, because
- // we cannot recover if something goes wrong.
- pCmd->batchSize = binded * 2 + 1;
-
- if (binded < alloced) {
- return TSDB_CODE_SUCCESS;
- }
-
- size_t total = taosArrayGetSize(pCmd->pDataBlocks);
- for (int32_t i = 0; i < total; ++i) {
- STableDataBlocks* pBlock = taosArrayGetP(pCmd->pDataBlocks, i);
-
- uint32_t totalDataSize = pBlock->size - sizeof(SSubmitBlk);
- pBlock->size += totalDataSize / alloced;
-
- SSubmitBlk* pSubmit = (SSubmitBlk*)pBlock->pData;
- pSubmit->numOfRows += pSubmit->numOfRows / alloced;
- }
-
return TSDB_CODE_SUCCESS;
}
static int insertStmtAddBatch(STscStmt* stmt) {
SSqlCmd* pCmd = &stmt->pSql->cmd;
- if ((pCmd->batchSize % 2) == 1) {
- ++pCmd->batchSize;
- }
+ ++pCmd->batchSize;
return TSDB_CODE_SUCCESS;
}
@@ -793,50 +773,66 @@ static int insertStmtExecute(STscStmt* stmt) {
if (pCmd->batchSize == 0) {
return TSDB_CODE_TSC_INVALID_VALUE;
}
- if ((pCmd->batchSize % 2) == 1) {
- ++pCmd->batchSize;
- }
- STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
assert(pCmd->numOfClause == 1);
-
- if (taosHashGetSize(pCmd->pTableBlockHashList) > 0) {
- // merge according to vgid
- int code = tscMergeTableDataBlocks(stmt->pSql);
- if (code != TSDB_CODE_SUCCESS) {
- return code;
- }
-
- STableDataBlocks *pDataBlock = taosArrayGetP(pCmd->pDataBlocks, 0);
- code = tscCopyDataBlockToPayload(stmt->pSql, pDataBlock);
- if (code != TSDB_CODE_SUCCESS) {
- return code;
- }
-
- // set the next sent data vnode index in data block arraylist
- pTableMetaInfo->vgroupIndex = 1;
- } else {
- pCmd->pDataBlocks = tscDestroyBlockArrayList(pCmd->pDataBlocks);
+ if (taosHashGetSize(pCmd->pTableBlockHashList) == 0) {
+ return TSDB_CODE_SUCCESS;
}
- SSqlObj *pSql = stmt->pSql;
- SSqlRes *pRes = &pSql->res;
- pRes->numOfRows = 0;
+ STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, 0, 0);
+
+ STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
+ if (pCmd->pTableBlockHashList == NULL) {
+ pCmd->pTableBlockHashList = taosHashInit(16, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BIGINT), true, false);
+ }
+
+ STableDataBlocks* pBlock = NULL;
+
+ int32_t ret =
+ tscGetDataBlockFromList(pCmd->pTableBlockHashList, pTableMeta->id.uid, TSDB_PAYLOAD_SIZE, sizeof(SSubmitBlk),
+ pTableMeta->tableInfo.rowSize, pTableMetaInfo->name, pTableMeta, &pBlock, NULL);
+ assert(ret == 0);
+ pBlock->size = sizeof(SSubmitBlk) + pCmd->batchSize * pBlock->rowSize;
+ SSubmitBlk* pBlk = (SSubmitBlk*) pBlock->pData;
+ pBlk->numOfRows = pCmd->batchSize;
+ pBlk->dataLen = 0;
+ pBlk->uid = pTableMeta->id.uid;
+ pBlk->tid = pTableMeta->id.tid;
+
+ int code = tscMergeTableDataBlocks(stmt->pSql, false);
+ if (code != TSDB_CODE_SUCCESS) {
+ return code;
+ }
+
+ STableDataBlocks* pDataBlock = taosArrayGetP(pCmd->pDataBlocks, 0);
+ code = tscCopyDataBlockToPayload(stmt->pSql, pDataBlock);
+ if (code != TSDB_CODE_SUCCESS) {
+ return code;
+ }
+
+ SSqlObj* pSql = stmt->pSql;
+ SSqlRes* pRes = &pSql->res;
+ pRes->numOfRows = 0;
pRes->numOfTotal = 0;
- pRes->numOfClauseTotal = 0;
- pRes->qhandle = 0;
-
- pSql->cmd.insertType = 0;
- pSql->fetchFp = waitForQueryRsp;
- pSql->fp = (void(*)())tscHandleMultivnodeInsert;
-
- tscDoQuery(pSql);
+ tscProcessSql(pSql);
// wait for the callback function to post the semaphore
tsem_wait(&pSql->rspSem);
- return pSql->res.code;
+ // data block reset
+ pCmd->batchSize = 0;
+ for(int32_t i = 0; i < pCmd->numOfTables; ++i) {
+ if (pCmd->pTableNameList && pCmd->pTableNameList[i]) {
+ tfree(pCmd->pTableNameList[i]);
+ }
+ }
+
+ pCmd->numOfTables = 0;
+ tfree(pCmd->pTableNameList);
+ pCmd->pDataBlocks = tscDestroyBlockArrayList(pCmd->pDataBlocks);
+
+ return pSql->res.code;
}
////////////////////////////////////////////////////////////////////////////////
@@ -867,11 +863,11 @@ TAOS_STMT* taos_stmt_init(TAOS* taos) {
}
tsem_init(&pSql->rspSem, 0, 0);
- pSql->signature = pSql;
- pSql->pTscObj = pObj;
- pSql->maxRetry = TSDB_MAX_REPLICA;
+ pSql->signature = pSql;
+ pSql->pTscObj = pObj;
+ pSql->maxRetry = TSDB_MAX_REPLICA;
+ pStmt->pSql = pSql;
- pStmt->pSql = pSql;
return pStmt;
}
@@ -890,7 +886,9 @@ int taos_stmt_prepare(TAOS_STMT* stmt, const char* sql, unsigned long length) {
SSqlRes *pRes = &pSql->res;
pSql->param = (void*) pSql;
pSql->fp = waitForQueryRsp;
- pSql->cmd.insertType = TSDB_QUERY_TYPE_STMT_INSERT;
+ pSql->fetchFp = waitForQueryRsp;
+
+ pCmd->insertType = TSDB_QUERY_TYPE_STMT_INSERT;
if (TSDB_CODE_SUCCESS != tscAllocPayload(pCmd, TSDB_DEFAULT_PAYLOAD_SIZE)) {
tscError("%p failed to malloc payload buffer", pSql);
@@ -956,8 +954,9 @@ int taos_stmt_bind_param(TAOS_STMT* stmt, TAOS_BIND* bind) {
STscStmt* pStmt = (STscStmt*)stmt;
if (pStmt->isInsert) {
return insertStmtBindParam(pStmt, bind);
+ } else {
+ return normalStmtBindParam(pStmt, bind);
}
- return normalStmtBindParam(pStmt, bind);
}
int taos_stmt_add_batch(TAOS_STMT* stmt) {
@@ -981,7 +980,7 @@ int taos_stmt_execute(TAOS_STMT* stmt) {
STscStmt* pStmt = (STscStmt*)stmt;
if (pStmt->isInsert) {
ret = insertStmtExecute(pStmt);
- } else {
+ } else { // normal stmt query
char* sql = normalStmtBuildSql(pStmt);
if (sql == NULL) {
ret = TSDB_CODE_TSC_OUT_OF_MEMORY;
@@ -995,6 +994,7 @@ int taos_stmt_execute(TAOS_STMT* stmt) {
free(sql);
}
}
+
return ret;
}
diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c
index 94b01f0a65..b13c8bbc47 100644
--- a/src/client/src/tscSQLParser.c
+++ b/src/client/src/tscSQLParser.c
@@ -229,7 +229,7 @@ static int32_t handlePassword(SSqlCmd* pCmd, SStrToken* pPwd) {
}
int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
- if (pInfo == NULL || pSql == NULL || pSql->signature != pSql) {
+ if (pInfo == NULL || pSql == NULL) {
return TSDB_CODE_TSC_APP_ERROR;
}
@@ -264,6 +264,7 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
case TSDB_SQL_DROP_DB: {
const char* msg2 = "invalid name";
const char* msg3 = "param name too long";
+ const char* msg4 = "table is not super table";
SStrToken* pzName = &pInfo->pDCLInfo->a[0];
if ((pInfo->type != TSDB_SQL_DROP_DNODE) && (tscValidateName(pzName) != TSDB_CODE_SUCCESS)) {
@@ -285,6 +286,18 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
if(code != TSDB_CODE_SUCCESS) {
return code;
}
+
+ if (pInfo->pDCLInfo->tableType == TSDB_SUPER_TABLE) {
+ code = tscGetTableMeta(pSql, pTableMetaInfo);
+ if (code != TSDB_CODE_SUCCESS) {
+ return code;
+ }
+
+ if (!UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
+ return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg4);
+ }
+ }
+
} else if (pInfo->type == TSDB_SQL_DROP_DNODE) {
pzName->n = strdequote(pzName->z);
strncpy(pTableMetaInfo->name, pzName->z, pzName->n);
@@ -642,7 +655,11 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
pSql->cmd.parseFinished = 1;
- return tscBuildMsg[pCmd->command](pSql, pInfo);
+ if (tscBuildMsg[pCmd->command] != NULL) {
+ return tscBuildMsg[pCmd->command](pSql, pInfo);
+ } else {
+ return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "not support sql expression");
+ }
}
/*
@@ -1761,7 +1778,7 @@ static int32_t setExprInfoForFunctions(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SS
return -1;
} else {
type = TSDB_DATA_TYPE_DOUBLE;
- bytes = tDataTypeDesc[type].nSize;
+ bytes = tDataTypes[type].bytes;
}
} else {
type = pSchema->type;
@@ -1867,7 +1884,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX};
- int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
+ int32_t size = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, getNewResColId(pQueryInfo), size, false);
} else if (sqlOptr == TK_INTEGER) { // select count(1) from table1
char buf[8] = {0};
@@ -1879,7 +1896,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
if (val == 1) {
index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX};
- int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
+ int32_t size = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, getNewResColId(pQueryInfo), size, false);
} else {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
@@ -1899,12 +1916,12 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
isTag = true;
}
- int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
+ int32_t size = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, getNewResColId(pQueryInfo), size, isTag);
}
} else { // count(*) is equalled to count(primary_timestamp_key)
index = (SColumnIndex){0, PRIMARYKEY_TIMESTAMP_COL_INDEX};
- int32_t size = tDataTypeDesc[TSDB_DATA_TYPE_BIGINT].nSize;
+ int32_t size = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes;
pExpr = tscSqlExprAppend(pQueryInfo, functionID, &index, TSDB_DATA_TYPE_BIGINT, size, getNewResColId(pQueryInfo), size, false);
}
@@ -4533,6 +4550,8 @@ int32_t parseFillClause(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQuery
}
} else if (strncasecmp(pItem->pVar.pz, "prev", 4) == 0 && pItem->pVar.nLen == 4) {
pQueryInfo->fillType = TSDB_FILL_PREV;
+ } else if (strncasecmp(pItem->pVar.pz, "next", 4) == 0 && pItem->pVar.nLen == 4) {
+ pQueryInfo->fillType = TSDB_FILL_NEXT;
} else if (strncasecmp(pItem->pVar.pz, "linear", 6) == 0 && pItem->pVar.nLen == 6) {
pQueryInfo->fillType = TSDB_FILL_LINEAR;
} else if (strncasecmp(pItem->pVar.pz, "value", 5) == 0 && pItem->pVar.nLen == 5) {
@@ -4817,6 +4836,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
const char* msg17 = "invalid column name";
const char* msg18 = "primary timestamp column cannot be dropped";
const char* msg19 = "invalid new tag name";
+ const char* msg20 = "table is not super table";
int32_t code = TSDB_CODE_SUCCESS;
@@ -4842,6 +4862,10 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
STableMeta* pTableMeta = pTableMetaInfo->pTableMeta;
+ if (pAlterSQL->tableType == TSDB_SUPER_TABLE && !(UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo))) {
+ return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg20);
+ }
+
if (pAlterSQL->type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN || pAlterSQL->type == TSDB_ALTER_TABLE_DROP_TAG_COLUMN ||
pAlterSQL->type == TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN) {
if (UTIL_TABLE_IS_NORMAL_TABLE(pTableMetaInfo)) {
@@ -4898,7 +4922,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
char name1[128] = {0};
strncpy(name1, pItem->pVar.pz, pItem->pVar.nLen);
- TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name1, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
+ TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name1, tDataTypes[TSDB_DATA_TYPE_INT].bytes);
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN) {
SArray* pVarList = pAlterSQL->varList;
@@ -4934,14 +4958,14 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
char name[TSDB_COL_NAME_LEN] = {0};
strncpy(name, pItem->pVar.pz, pItem->pVar.nLen);
- TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
+ TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name, tDataTypes[TSDB_DATA_TYPE_INT].bytes);
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
pItem = taosArrayGet(pVarList, 1);
memset(name, 0, tListLen(name));
strncpy(name, pItem->pVar.pz, pItem->pVar.nLen);
- f = tscCreateField(TSDB_DATA_TYPE_INT, name, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
+ f = tscCreateField(TSDB_DATA_TYPE_INT, name, tDataTypes[TSDB_DATA_TYPE_INT].bytes);
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
} else if (pAlterSQL->type == TSDB_ALTER_TABLE_UPDATE_TAG_VAL) {
// Note: update can only be applied to table not super table.
@@ -5016,7 +5040,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
int32_t len = 0;
if (pTagsSchema->type != TSDB_DATA_TYPE_BINARY && pTagsSchema->type != TSDB_DATA_TYPE_NCHAR) {
- len = tDataTypeDesc[pTagsSchema->type].nSize;
+ len = tDataTypes[pTagsSchema->type].bytes;
} else {
len = varDataTLen(pUpdateMsg->data + schemaLen);
}
@@ -5063,7 +5087,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
char name1[TSDB_COL_NAME_LEN] = {0};
tstrncpy(name1, pItem->pVar.pz, sizeof(name1));
- TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name1, tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize);
+ TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_INT, name1, tDataTypes[TSDB_DATA_TYPE_INT].bytes);
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
}
@@ -6026,7 +6050,7 @@ int32_t doLocalQueryProcess(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SQuerySQL* pQ
SColumnIndex ind = {0};
SSqlExpr* pExpr1 = tscSqlExprAppend(pQueryInfo, TSDB_FUNC_TAG_DUMMY, &ind, TSDB_DATA_TYPE_INT,
- tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize, getNewResColId(pQueryInfo), tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize, false);
+ tDataTypes[TSDB_DATA_TYPE_INT].bytes, getNewResColId(pQueryInfo), tDataTypes[TSDB_DATA_TYPE_INT].bytes, false);
const char* name = (pExprList->a[0].aliasName != NULL)? pExprList->a[0].aliasName:functionsInfo[index].name;
tstrncpy(pExpr1->aliasName, name, tListLen(pExpr1->aliasName));
diff --git a/src/client/src/tscSchemaUtil.c b/src/client/src/tscSchemaUtil.c
index 123f0fd222..47c3cd9716 100644
--- a/src/client/src/tscSchemaUtil.c
+++ b/src/client/src/tscSchemaUtil.c
@@ -66,68 +66,6 @@ STableComInfo tscGetTableInfo(const STableMeta* pTableMeta) {
return pTableMeta->tableInfo;
}
-static bool doValidateSchema(SSchema* pSchema, int32_t numOfCols, int32_t maxLen) {
- int32_t rowLen = 0;
-
- for (int32_t i = 0; i < numOfCols; ++i) {
- // 1. valid types
- if (!isValidDataType(pSchema[i].type)) {
- return false;
- }
-
- // 2. valid length for each type
- if (pSchema[i].type == TSDB_DATA_TYPE_BINARY) {
- if (pSchema[i].bytes > TSDB_MAX_BINARY_LEN) {
- return false;
- }
- } else if (pSchema[i].type == TSDB_DATA_TYPE_NCHAR) {
- if (pSchema[i].bytes > TSDB_MAX_NCHAR_LEN) {
- return false;
- }
- } else {
- if (pSchema[i].bytes != tDataTypeDesc[pSchema[i].type].nSize) {
- return false;
- }
- }
-
- // 3. valid column names
- for (int32_t j = i + 1; j < numOfCols; ++j) {
- if (strncasecmp(pSchema[i].name, pSchema[j].name, sizeof(pSchema[i].name) - 1) == 0) {
- return false;
- }
- }
-
- rowLen += pSchema[i].bytes;
- }
-
- return rowLen <= maxLen;
-}
-
-bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols, int32_t numOfTags) {
- if (!VALIDNUMOFCOLS(numOfCols)) {
- return false;
- }
-
- if (!VALIDNUMOFTAGS(numOfTags)) {
- return false;
- }
-
- /* first column must be the timestamp, which is a primary key */
- if (pSchema[0].type != TSDB_DATA_TYPE_TIMESTAMP) {
- return false;
- }
-
- if (!doValidateSchema(pSchema, numOfCols, TSDB_MAX_BYTES_PER_ROW)) {
- return false;
- }
-
- if (!doValidateSchema(&pSchema[numOfCols], numOfTags, TSDB_MAX_TAGS_LEN)) {
- return false;
- }
-
- return true;
-}
-
SSchema* tscGetTableColumnSchema(const STableMeta* pTableMeta, int32_t colIndex) {
assert(pTableMeta != NULL);
diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c
index 15dd77faeb..953680c43e 100644
--- a/src/client/src/tscServer.c
+++ b/src/client/src/tscServer.c
@@ -25,8 +25,6 @@
#include "ttimer.h"
#include "tlockfree.h"
-///SRpcCorEpSet tscMgmtEpSet;
-
int (*tscBuildMsg[TSDB_SQL_MAX])(SSqlObj *pSql, SSqlInfo *pInfo) = {0};
int (*tscProcessMsgRsp[TSDB_SQL_MAX])(SSqlObj *pSql);
@@ -341,7 +339,8 @@ void tscProcessMsgFromServer(SRpcMsg *rpcMsg, SRpcEpSet *pEpSet) {
if (pSql->retry > pSql->maxRetry) {
tscError("%p max retry %d reached, give up", pSql, pSql->maxRetry);
} else {
- // wait for a little bit moment and then retry, todo do not sleep in rpc callback thread
+ // wait for a little bit moment and then retry
+ // todo do not sleep in rpc callback thread, add this process into queueu to process
if (rpcMsg->code == TSDB_CODE_APP_NOT_READY || rpcMsg->code == TSDB_CODE_VND_INVALID_VGROUP_ID) {
int32_t duration = getWaitingTimeInterval(pSql->retry);
taosMsleep(duration);
@@ -484,9 +483,9 @@ int tscProcessSql(SSqlObj *pSql) {
pSql->res.code = TSDB_CODE_TSC_APP_ERROR;
return pSql->res.code;
}
- } else if (pCmd->command < TSDB_SQL_LOCAL) {
+ } else if (pCmd->command >= TSDB_SQL_LOCAL) {
//pSql->epSet = tscMgmtEpSet;
- } else { // local handler
+// } else { // local handler
return (*tscProcessMsgRsp[pCmd->command])(pSql);
}
@@ -1157,7 +1156,7 @@ int32_t tscBuildDropTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SCMDropTableMsg *pDropTableMsg = (SCMDropTableMsg*)pCmd->payload;
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
- strcpy(pDropTableMsg->tableId, pTableMetaInfo->name);
+ strcpy(pDropTableMsg->tableFname, pTableMetaInfo->name);
pDropTableMsg->igNotExists = pInfo->pDCLInfo->existsCheck ? 1 : 0;
pCmd->msgType = TSDB_MSG_TYPE_CM_DROP_TABLE;
@@ -1180,7 +1179,7 @@ int32_t tscBuildDropDnodeMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
return TSDB_CODE_SUCCESS;
}
-int32_t tscBuildDropUserMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
+int32_t tscBuildDropUserMsg(SSqlObj *pSql, SSqlInfo * UNUSED_PARAM(pInfo)) {
SSqlCmd *pCmd = &pSql->cmd;
pCmd->payloadLen = sizeof(SDropUserMsg);
pCmd->msgType = TSDB_MSG_TYPE_CM_DROP_USER;
@@ -1347,7 +1346,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
pMsg += sizeof(SCreateTableMsg);
SCreatedTableInfo* p = taosArrayGet(list, i);
- strcpy(pCreate->tableId, p->fullname);
+ strcpy(pCreate->tableFname, p->fullname);
pCreate->igExists = (p->igExist)? 1 : 0;
// use dbinfo from table id without modifying current db info
@@ -1360,7 +1359,7 @@ int tscBuildCreateTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
} else { // create (super) table
pCreateTableMsg->numOfTables = htonl(1); // only one table will be created
- strcpy(pCreateMsg->tableId, pTableMetaInfo->name);
+ strcpy(pCreateMsg->tableFname, pTableMetaInfo->name);
// use dbinfo from table id without modifying current db info
tscGetDBInfoFromTableFullName(pTableMetaInfo->name, pCreateMsg->db);
@@ -1431,7 +1430,7 @@ int tscBuildAlterTableMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
SAlterTableMsg *pAlterTableMsg = (SAlterTableMsg *)pCmd->payload;
tscGetDBInfoFromTableFullName(pTableMetaInfo->name, pAlterTableMsg->db);
- strcpy(pAlterTableMsg->tableId, pTableMetaInfo->name);
+ strcpy(pAlterTableMsg->tableFname, pTableMetaInfo->name);
pAlterTableMsg->type = htons(pAlterInfo->type);
pAlterTableMsg->numOfCols = htons(tscNumOfFields(pQueryInfo));
@@ -1630,7 +1629,7 @@ int tscBuildTableMetaMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
STableInfoMsg *pInfoMsg = (STableInfoMsg *)pCmd->payload;
- strcpy(pInfoMsg->tableId, pTableMetaInfo->name);
+ strcpy(pInfoMsg->tableFname, pTableMetaInfo->name);
pInfoMsg->createFlag = htons(pSql->cmd.autoCreated ? 1 : 0);
char *pMsg = (char *)pInfoMsg + sizeof(STableInfoMsg);
@@ -1799,7 +1798,7 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
if ((pMetaMsg->tableType != TSDB_SUPER_TABLE) &&
(pMetaMsg->tid <= 0 || pMetaMsg->vgroup.vgId < 2 || pMetaMsg->vgroup.numOfEps <= 0)) {
tscError("invalid value in table numOfEps:%d, vgId:%d tid:%d, name:%s", pMetaMsg->vgroup.numOfEps, pMetaMsg->vgroup.vgId,
- pMetaMsg->tid, pMetaMsg->tableId);
+ pMetaMsg->tid, pMetaMsg->tableFname);
return TSDB_CODE_TSC_INVALID_VALUE;
}
@@ -1831,12 +1830,16 @@ int tscProcessTableMetaRsp(SSqlObj *pSql) {
assert(isValidDataType(pSchema->type));
pSchema++;
}
-
- STableMeta* pTableMeta = tscCreateTableMetaFromMsg(pMetaMsg);
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0);
assert(pTableMetaInfo->pTableMeta == NULL);
+ STableMeta* pTableMeta = tscCreateTableMetaFromMsg(pMetaMsg);
+ if (!isValidSchema(pTableMeta->schema, pTableMeta->tableInfo.numOfColumns, pTableMeta->tableInfo.numOfTags)) {
+ tscError("%p invalid table meta from mnode, name:%s", pSql, pTableMetaInfo->name);
+ return TSDB_CODE_TSC_INVALID_VALUE;
+ }
+
if (pTableMeta->tableType == TSDB_CHILD_TABLE) {
// check if super table hashmap or not
int32_t len = (int32_t) strnlen(pTableMeta->sTableName, TSDB_TABLE_FNAME_LEN);
@@ -2097,7 +2100,7 @@ int tscProcessShowRsp(SSqlObj *pSql) {
return 0;
}
-static void createHBObj(STscObj* pObj) {
+static void createHbObj(STscObj* pObj) {
if (pObj->hbrid != 0) {
return;
}
@@ -2160,7 +2163,7 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
pObj->superAuth = pConnect->superAuth;
pObj->connId = htonl(pConnect->connId);
- createHBObj(pObj);
+ createHbObj(pObj);
//launch a timer to send heartbeat to maintain the connection and send status to mnode
taosTmrReset(tscProcessActivityTimer, tsShellActivityTimer * 500, (void *)pObj->rid, tscTmr, &pObj->pTimer);
@@ -2190,7 +2193,7 @@ int tscProcessDropTableRsp(SSqlObj *pSql) {
tscDebug("%p remove table meta after drop table:%s, numOfRemain:%d", pSql, pTableMetaInfo->name,
(int32_t) taosHashGetSize(tscTableMetaInfo));
- assert(pTableMetaInfo->pTableMeta == NULL);
+ pTableMetaInfo->pTableMeta = NULL;
return 0;
}
diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c
index 3f25d7a14d..a4f2976cad 100644
--- a/src/client/src/tscSql.c
+++ b/src/client/src/tscSql.c
@@ -781,6 +781,7 @@ bool taos_is_null(TAOS_RES *res, int32_t row, int32_t col) {
int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) {
int len = 0;
+
for (int i = 0; i < num_fields; ++i) {
if (i > 0) {
str[len++] = ' ';
@@ -838,13 +839,15 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
case TSDB_DATA_TYPE_BINARY:
case TSDB_DATA_TYPE_NCHAR: {
- size_t xlen = 0;
- for (xlen = 0; xlen < fields[i].bytes - VARSTR_HEADER_SIZE; xlen++) {
- char c = ((char *)row[i])[xlen];
- if (c == 0) break;
- str[len++] = c;
+ int32_t charLen = varDataLen((char*)row[i] - VARSTR_HEADER_SIZE);
+ if (fields[i].type == TSDB_DATA_TYPE_BINARY) {
+ assert(charLen <= fields[i].bytes);
+ } else {
+ assert(charLen <= fields[i].bytes * TSDB_NCHAR_SIZE);
}
- str[len] = 0;
+
+ memcpy(str + len, row[i], charLen);
+ len += charLen;
} break;
case TSDB_DATA_TYPE_TIMESTAMP:
diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c
index a00ea68bd0..ee9526e297 100644
--- a/src/client/src/tscSubquery.c
+++ b/src/client/src/tscSubquery.c
@@ -55,6 +55,58 @@ static void skipRemainValue(STSBuf* pTSBuf, tVariant* tag1) {
}
}
+static void subquerySetState(SSqlObj *pSql, SSubqueryState *subState, int idx, int8_t state) {
+ assert(idx < subState->numOfSub);
+ assert(subState->states);
+
+ pthread_mutex_lock(&subState->mutex);
+
+ tscDebug("subquery:%p,%d state set to %d", pSql, idx, state);
+
+ subState->states[idx] = state;
+
+ pthread_mutex_unlock(&subState->mutex);
+}
+
+static bool allSubqueryDone(SSqlObj *pParentSql) {
+ bool done = true;
+ SSubqueryState *subState = &pParentSql->subState;
+
+ //lock in caller
+
+ for (int i = 0; i < subState->numOfSub; i++) {
+ if (0 == subState->states[i]) {
+ tscDebug("%p subquery:%p,%d is NOT finished, total:%d", pParentSql, pParentSql->pSubs[i], i, subState->numOfSub);
+ done = false;
+ break;
+ } else {
+ tscDebug("%p subquery:%p,%d is finished, total:%d", pParentSql, pParentSql->pSubs[i], i, subState->numOfSub);
+ }
+ }
+
+ return done;
+}
+
+static bool subAndCheckDone(SSqlObj *pSql, SSqlObj *pParentSql, int idx) {
+ SSubqueryState *subState = &pParentSql->subState;
+
+ assert(idx < subState->numOfSub);
+
+ pthread_mutex_lock(&subState->mutex);
+
+ tscDebug("%p subquery:%p,%d state set to 1", pParentSql, pSql, idx);
+
+ subState->states[idx] = 1;
+
+ bool done = allSubqueryDone(pParentSql);
+
+ pthread_mutex_unlock(&subState->mutex);
+
+ return done;
+}
+
+
+
static int64_t doTSBlockIntersect(SSqlObj* pSql, SJoinSupporter* pSupporter1, SJoinSupporter* pSupporter2, STimeWindow * win) {
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, pSql->cmd.clauseIndex);
@@ -367,10 +419,6 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
// scan all subquery, if one sub query has only ts, ignore it
tscDebug("%p start to launch secondary subqueries, %d out of %d needs to query", pSql, numOfSub, pSql->subState.numOfSub);
- //the subqueries that do not actually launch the secondary query to virtual node is set as completed.
- SSubqueryState* pState = &pSql->subState;
- pState->numOfRemain = numOfSub;
-
bool success = true;
for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
@@ -403,6 +451,7 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
success = false;
break;
}
+
tscClearSubqueryInfo(&pNew->cmd);
pSql->pSubs[i] = pNew;
@@ -480,6 +529,8 @@ static int32_t tscLaunchRealSubqueries(SSqlObj* pSql) {
}
}
+ subquerySetState(pPrevSub, &pSql->subState, i, 0);
+
size_t numOfCols = taosArrayGetSize(pQueryInfo->colList);
tscDebug("%p subquery:%p tableIndex:%d, vgroupIndex:%d, type:%d, exprInfo:%" PRIzu ", colList:%" PRIzu ", fieldsInfo:%d, name:%s",
pSql, pNew, 0, pTableMetaInfo->vgroupIndex, pQueryInfo->type, taosArrayGetSize(pQueryInfo->exprList),
@@ -517,20 +568,25 @@ void freeJoinSubqueryObj(SSqlObj* pSql) {
SJoinSupporter* p = pSub->param;
tscDestroyJoinSupporter(p);
- if (pSub->res.code == TSDB_CODE_SUCCESS) {
- taos_free_result(pSub);
- }
+ taos_free_result(pSub);
+ pSql->pSubs[i] = NULL;
}
+ if (pSql->subState.states) {
+ pthread_mutex_destroy(&pSql->subState.mutex);
+ }
+
+ tfree(pSql->subState.states);
+
+
pSql->subState.numOfSub = 0;
}
-static void quitAllSubquery(SSqlObj* pSqlObj, SJoinSupporter* pSupporter) {
- assert(pSqlObj->subState.numOfRemain > 0);
-
- if (atomic_sub_fetch_32(&pSqlObj->subState.numOfRemain, 1) <= 0) {
- tscError("%p all subquery return and query failed, global code:%s", pSqlObj, tstrerror(pSqlObj->res.code));
+static void quitAllSubquery(SSqlObj* pSqlSub, SSqlObj* pSqlObj, SJoinSupporter* pSupporter) {
+ if (subAndCheckDone(pSqlSub, pSqlObj, pSupporter->subqueryIndex)) {
+ tscError("%p all subquery return and query failed, global code:%s", pSqlObj, tstrerror(pSqlObj->res.code));
freeJoinSubqueryObj(pSqlObj);
+ return;
}
//tscDestroyJoinSupporter(pSupporter);
@@ -777,6 +833,15 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
assert(TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_TAG_FILTER_QUERY));
+ if (pParentSql->res.code != TSDB_CODE_SUCCESS) {
+ tscError("%p abort query due to other subquery failure. code:%d, global code:%d", pSql, numOfRows, pParentSql->res.code);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
+
+ tscAsyncResultOnError(pParentSql);
+
+ return;
+ }
+
// check for the error code firstly
if (taos_errno(pSql) != TSDB_CODE_SUCCESS) {
// todo retry if other subqueries are not failed
@@ -785,7 +850,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError("%p sub query failed, code:%s, index:%d", pSql, tstrerror(numOfRows), pSupporter->subqueryIndex);
pParentSql->res.code = numOfRows;
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
return;
@@ -802,7 +867,7 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError("%p failed to malloc memory", pSql);
pParentSql->res.code = TAOS_SYSTEM_ERROR(errno);
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
return;
@@ -844,9 +909,10 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
// no data exists in next vnode, mark the query completed
// only when there is no subquery exits any more, proceeds to get the intersect of the tuple sets.
- if (atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1) > 0) {
+ if (!subAndCheckDone(pSql, pParentSql, pSupporter->subqueryIndex)) {
+ tscDebug("%p tagRetrieve:%p,%d completed, total:%d", pParentSql, tres, pSupporter->subqueryIndex, pParentSql->subState.numOfSub);
return;
- }
+ }
SArray *s1 = NULL, *s2 = NULL;
int32_t code = getIntersectionOfTableTuple(pQueryInfo, pParentSql, &s1, &s2);
@@ -891,8 +957,10 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
((SJoinSupporter*)psub2->param)->pVgroupTables = tscVgroupTableInfoClone(pTableMetaInfo2->pVgroupTables);
pParentSql->subState.numOfSub = 2;
- pParentSql->subState.numOfRemain = pParentSql->subState.numOfSub;
-
+
+ memset(pParentSql->subState.states, 0, sizeof(pParentSql->subState.states[0]) * pParentSql->subState.numOfSub);
+ tscDebug("%p reset all sub states to 0", pParentSql);
+
for (int32_t m = 0; m < pParentSql->subState.numOfSub; ++m) {
SSqlObj* sub = pParentSql->pSubs[m];
issueTSCompQuery(sub, sub->param, pParentSql);
@@ -915,6 +983,15 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
assert(!TSDB_QUERY_HAS_TYPE(pQueryInfo->type, TSDB_QUERY_TYPE_JOIN_SEC_STAGE));
+ if (pParentSql->res.code != TSDB_CODE_SUCCESS) {
+ tscError("%p abort query due to other subquery failure. code:%d, global code:%d", pSql, numOfRows, pParentSql->res.code);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
+
+ tscAsyncResultOnError(pParentSql);
+
+ return;
+ }
+
// check for the error code firstly
if (taos_errno(pSql) != TSDB_CODE_SUCCESS) {
// todo retry if other subqueries are not failed yet
@@ -922,7 +999,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
tscError("%p sub query failed, code:%s, index:%d", pSql, tstrerror(numOfRows), pSupporter->subqueryIndex);
pParentSql->res.code = numOfRows;
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
return;
@@ -937,7 +1014,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
pParentSql->res.code = TAOS_SYSTEM_ERROR(errno);
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
@@ -955,7 +1032,7 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
pParentSql->res.code = TAOS_SYSTEM_ERROR(errno);
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
@@ -1009,9 +1086,9 @@ static void tsCompRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
return;
}
- if (atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1) > 0) {
+ if (!subAndCheckDone(pSql, pParentSql, pSupporter->subqueryIndex)) {
return;
- }
+ }
tscDebug("%p all subquery retrieve ts complete, do ts block intersect", pParentSql);
@@ -1049,6 +1126,17 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
SSqlRes* pRes = &pSql->res;
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
+
+ if (pParentSql->res.code != TSDB_CODE_SUCCESS) {
+ tscError("%p abort query due to other subquery failure. code:%d, global code:%d", pSql, numOfRows, pParentSql->res.code);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
+
+ tscAsyncResultOnError(pParentSql);
+
+ return;
+ }
+
+
if (taos_errno(pSql) != TSDB_CODE_SUCCESS) {
assert(numOfRows == taos_errno(pSql));
@@ -1088,9 +1176,8 @@ static void joinRetrieveFinalResCallback(void* param, TAOS_RES* tres, int numOfR
}
}
- assert(pState->numOfRemain > 0);
- if (atomic_sub_fetch_32(&pState->numOfRemain, 1) > 0) {
- tscDebug("%p sub:%p completed, remain:%d, total:%d", pParentSql, tres, pState->numOfRemain, pState->numOfSub);
+ if (!subAndCheckDone(pSql, pParentSql, pSupporter->subqueryIndex)) {
+ tscDebug("%p sub:%p,%d completed, total:%d", pParentSql, tres, pSupporter->subqueryIndex, pState->numOfSub);
return;
}
@@ -1205,15 +1292,16 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
}
}
- // get the number of subquery that need to retrieve the next vnode.
+
if (orderedPrjQuery) {
for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
SSqlObj* pSub = pSql->pSubs[i];
if (pSub != NULL && pSub->res.row >= pSub->res.numOfRows && pSub->res.completed) {
- pSql->subState.numOfRemain++;
+ subquerySetState(pSub, &pSql->subState, i, 0);
}
}
}
+
for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
SSqlObj* pSub = pSql->pSubs[i];
@@ -1270,7 +1358,19 @@ void tscFetchDatablockForSubquery(SSqlObj* pSql) {
// retrieve data from current vnode.
tscDebug("%p retrieve data from %d subqueries", pSql, numOfFetch);
SJoinSupporter* pSupporter = NULL;
- pSql->subState.numOfRemain = numOfFetch;
+
+ for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
+ SSqlObj* pSql1 = pSql->pSubs[i];
+ if (pSql1 == NULL) {
+ continue;
+ }
+
+ SSqlRes* pRes1 = &pSql1->res;
+
+ if (pRes1->row >= pRes1->numOfRows) {
+ subquerySetState(pSql1, &pSql->subState, i, 0);
+ }
+ }
for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
SSqlObj* pSql1 = pSql->pSubs[i];
@@ -1372,14 +1472,8 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
// retrieve actual query results from vnode during the second stage join subquery
if (pParentSql->res.code != TSDB_CODE_SUCCESS) {
tscError("%p abort query due to other subquery failure. code:%d, global code:%d", pSql, code, pParentSql->res.code);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
- if (!(pTableMetaInfo->vgroupIndex > 0 && tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0))) {
- if (atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1) > 0) {
- return;
- }
- }
-
- quitAllSubquery(pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
return;
@@ -1392,13 +1486,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
tscError("%p abort query, code:%s, global code:%s", pSql, tstrerror(code), tstrerror(pParentSql->res.code));
pParentSql->res.code = code;
- if (!(pTableMetaInfo->vgroupIndex > 0 && tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0))) {
- if (atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1) > 0) {
- return;
- }
- }
-
- quitAllSubquery(pParentSql, pSupporter);
+ quitAllSubquery(pSql, pParentSql, pSupporter);
tscAsyncResultOnError(pParentSql);
return;
@@ -1422,9 +1510,9 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
// In case of consequence query from other vnode, do not wait for other query response here.
if (!(pTableMetaInfo->vgroupIndex > 0 && tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0))) {
- if (atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1) > 0) {
+ if (!subAndCheckDone(pSql, pParentSql, pSupporter->subqueryIndex)) {
return;
- }
+ }
}
tscSetupOutputColumnIndex(pParentSql);
@@ -1436,6 +1524,7 @@ void tscJoinQueryCallback(void* param, TAOS_RES* tres, int code) {
if (pTableMetaInfo->vgroupIndex > 0 && tscNonOrderedProjectionQueryOnSTable(pQueryInfo, 0)) {
pSql->fp = joinRetrieveFinalResCallback; // continue retrieve data
pSql->cmd.command = TSDB_SQL_FETCH;
+
tscProcessSql(pSql);
} else { // first retrieve from vnode during the secondary stage sub-query
// set the command flag must be after the semaphore been correctly set.
@@ -1471,8 +1560,7 @@ int32_t tscCreateJoinSubquery(SSqlObj *pSql, int16_t tableIndex, SJoinSupporter
return TSDB_CODE_TSC_OUT_OF_MEMORY;
}
- pSql->pSubs[pSql->subState.numOfRemain++] = pNew;
- assert(pSql->subState.numOfRemain <= pSql->subState.numOfSub);
+ pSql->pSubs[tableIndex] = pNew;
if (QUERY_IS_JOIN_QUERY(pQueryInfo->type)) {
addGroupInfoForSubquery(pSql, pNew, 0, tableIndex);
@@ -1604,6 +1692,19 @@ void tscHandleMasterJoinQuery(SSqlObj* pSql) {
int32_t code = TSDB_CODE_SUCCESS;
pSql->subState.numOfSub = pQueryInfo->numOfTables;
+ if (pSql->subState.states == NULL) {
+ pSql->subState.states = calloc(pSql->subState.numOfSub, sizeof(*pSql->subState.states));
+ if (pSql->subState.states == NULL) {
+ code = TSDB_CODE_TSC_OUT_OF_MEMORY;
+ goto _error;
+ }
+
+ pthread_mutex_init(&pSql->subState.mutex, NULL);
+ }
+
+ memset(pSql->subState.states, 0, sizeof(*pSql->subState.states) * pSql->subState.numOfSub);
+ tscDebug("%p reset all sub states to 0", pSql);
+
bool hasEmptySub = false;
tscDebug("%p start subquery, total:%d", pSql, pQueryInfo->numOfTables);
@@ -1636,12 +1737,23 @@ void tscHandleMasterJoinQuery(SSqlObj* pSql) {
pSql->cmd.command = TSDB_SQL_RETRIEVE_EMPTY_RESULT;
(*pSql->fp)(pSql->param, pSql, 0);
} else {
+ int fail = 0;
for (int32_t i = 0; i < pSql->subState.numOfSub; ++i) {
SSqlObj* pSub = pSql->pSubs[i];
- if ((code = tscProcessSql(pSub)) != TSDB_CODE_SUCCESS) {
- pSql->subState.numOfRemain = i - 1; // the already sent request will continue and do not go to the error process routine
- break;
+ if (fail) {
+ (*pSub->fp)(pSub->param, pSub, 0);
+ continue;
}
+
+ if ((code = tscProcessSql(pSub)) != TSDB_CODE_SUCCESS) {
+ pRes->code = code;
+ (*pSub->fp)(pSub->param, pSub, 0);
+ fail = 1;
+ }
+ }
+
+ if(fail) {
+ return;
}
pSql->cmd.command = TSDB_SQL_TABLE_JOIN_RETRIEVE;
@@ -1742,7 +1854,21 @@ int32_t tscHandleMasterSTableQuery(SSqlObj *pSql) {
return ret;
}
- pState->numOfRemain = pState->numOfSub;
+ if (pState->states == NULL) {
+ pState->states = calloc(pState->numOfSub, sizeof(*pState->states));
+ if (pState->states == NULL) {
+ pRes->code = TSDB_CODE_TSC_OUT_OF_MEMORY;
+ tscAsyncResultOnError(pSql);
+ tfree(pMemoryBuf);
+ return ret;
+ }
+
+ pthread_mutex_init(&pState->mutex, NULL);
+ }
+
+ memset(pState->states, 0, sizeof(*pState->states) * pState->numOfSub);
+ tscDebug("%p reset all sub states to 0", pSql);
+
pRes->code = TSDB_CODE_SUCCESS;
int32_t i = 0;
@@ -1891,7 +2017,6 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
assert(pSql != NULL);
SSubqueryState* pState = &pParentSql->subState;
- assert(pState->numOfRemain <= pState->numOfSub && pState->numOfRemain >= 0);
// retrieved in subquery failed. OR query cancelled in retrieve phase.
if (taos_errno(pSql) == TSDB_CODE_SUCCESS && pParentSql->res.code != TSDB_CODE_SUCCESS) {
@@ -1922,14 +2047,12 @@ void tscHandleSubqueryError(SRetrieveSupport *trsupport, SSqlObj *pSql, int numO
}
}
- int32_t remain = -1;
- if ((remain = atomic_sub_fetch_32(&pState->numOfRemain, 1)) > 0) {
- tscDebug("%p sub:%p orderOfSub:%d freed, finished subqueries:%d", pParentSql, pSql, trsupport->subqueryIndex,
- pState->numOfSub - remain);
+ if (!subAndCheckDone(pSql, pParentSql, subqueryIndex)) {
+ tscDebug("%p sub:%p,%d freed, not finished, total:%d", pParentSql, pSql, trsupport->subqueryIndex, pState->numOfSub);
tscFreeRetrieveSup(pSql);
return;
- }
+ }
// all subqueries are failed
tscError("%p retrieve from %d vnode(s) completed,code:%s.FAILED.", pParentSql, pState->numOfSub,
@@ -1994,14 +2117,12 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
return;
}
- int32_t remain = -1;
- if ((remain = atomic_sub_fetch_32(&pParentSql->subState.numOfRemain, 1)) > 0) {
- tscDebug("%p sub:%p orderOfSub:%d freed, finished subqueries:%d", pParentSql, pSql, trsupport->subqueryIndex,
- pState->numOfSub - remain);
+ if (!subAndCheckDone(pSql, pParentSql, idx)) {
+ tscDebug("%p sub:%p orderOfSub:%d freed, not finished", pParentSql, pSql, trsupport->subqueryIndex);
tscFreeRetrieveSup(pSql);
return;
- }
+ }
// all sub-queries are returned, start to local merge process
pDesc->pColumnModel->capacity = trsupport->pExtMemBuffer[idx]->numOfElemsPerPage;
@@ -2047,7 +2168,6 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
SSqlObj * pParentSql = trsupport->pParentSql;
SSubqueryState* pState = &pParentSql->subState;
- assert(pState->numOfRemain <= pState->numOfSub && pState->numOfRemain >= 0);
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0);
SVgroupInfo *pVgroup = &pTableMetaInfo->vgroupList->vgroups[0];
@@ -2268,7 +2388,8 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
}
}
- if (atomic_sub_fetch_32(&pParentObj->subState.numOfRemain, 1) > 0) {
+ if (!subAndCheckDone(tres, pParentObj, pSupporter->index)) {
+ tscDebug("%p insert:%p,%d completed, total:%d", pParentObj, tres, pSupporter->index, pParentObj->subState.numOfSub);
return;
}
@@ -2302,6 +2423,8 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
STableMetaInfo* pMasterTableMetaInfo = tscGetTableMetaInfoFromCmd(&pParentObj->cmd, pSql->cmd.clauseIndex, 0);
tscAddTableMetaInfo(pQueryInfo, pMasterTableMetaInfo->name, NULL, NULL, NULL, NULL);
+ subquerySetState(pSql, &pParentObj->subState, i, 0);
+
tscDebug("%p, failed sub:%d, %p", pParentObj, i, pSql);
}
}
@@ -2316,7 +2439,6 @@ static void multiVnodeInsertFinalize(void* param, TAOS_RES* tres, int numOfRows)
}
pParentObj->cmd.parseFinished = false;
- pParentObj->subState.numOfRemain = numOfFailed;
tscResetSqlCmdObj(&pParentObj->cmd);
@@ -2392,7 +2514,19 @@ int32_t tscHandleMultivnodeInsert(SSqlObj *pSql) {
// the number of already initialized subqueries
int32_t numOfSub = 0;
- pSql->subState.numOfRemain = pSql->subState.numOfSub;
+ if (pSql->subState.states == NULL) {
+ pSql->subState.states = calloc(pSql->subState.numOfSub, sizeof(*pSql->subState.states));
+ if (pSql->subState.states == NULL) {
+ pRes->code = TSDB_CODE_TSC_OUT_OF_MEMORY;
+ goto _error;
+ }
+
+ pthread_mutex_init(&pSql->subState.mutex, NULL);
+ }
+
+ memset(pSql->subState.states, 0, sizeof(*pSql->subState.states) * pSql->subState.numOfSub);
+ tscDebug("%p reset all sub states to 0", pSql);
+
pSql->pSubs = calloc(pSql->subState.numOfSub, POINTER_BYTES);
if (pSql->pSubs == NULL) {
goto _error;
diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c
index 9a8aa917e7..438836468b 100644
--- a/src/client/src/tscUtil.c
+++ b/src/client/src/tscUtil.c
@@ -441,6 +441,12 @@ static void tscFreeSubobj(SSqlObj* pSql) {
pSql->pSubs[i] = NULL;
}
+ if (pSql->subState.states) {
+ pthread_mutex_destroy(&pSql->subState.mutex);
+ }
+
+ tfree(pSql->subState.states);
+
pSql->subState.numOfSub = 0;
}
@@ -603,6 +609,7 @@ int32_t tscCopyDataBlockToPayload(SSqlObj* pSql, STableDataBlocks* pDataBlock) {
assert(pCmd->numOfClause == 1);
STableMetaInfo* pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
+ // todo refactor
// set the correct table meta object, the table meta has been locked in pDataBlocks, so it must be in the cache
if (pTableMetaInfo->pTableMeta != pDataBlock->pTableMeta) {
tstrncpy(pTableMetaInfo->name, pDataBlock->tableName, sizeof(pTableMetaInfo->name));
@@ -689,7 +696,6 @@ int32_t tscCreateDataBlock(size_t initialSize, int32_t rowSize, int32_t startOff
int32_t tscGetDataBlockFromList(SHashObj* pHashList, int64_t id, int32_t size, int32_t startOffset, int32_t rowSize, const char* tableId, STableMeta* pTableMeta,
STableDataBlocks** dataBlocks, SArray* pBlockList) {
*dataBlocks = NULL;
-
STableDataBlocks** t1 = (STableDataBlocks**)taosHashGet(pHashList, (const char*)&id, sizeof(id));
if (t1 != NULL) {
*dataBlocks = *t1;
@@ -785,9 +791,13 @@ static int32_t getRowExpandSize(STableMeta* pTableMeta) {
return result;
}
-static void extractTableNameList(SSqlCmd* pCmd) {
+static void extractTableNameList(SSqlCmd* pCmd, bool freeBlockMap) {
pCmd->numOfTables = (int32_t) taosHashGetSize(pCmd->pTableBlockHashList);
- pCmd->pTableNameList = calloc(pCmd->numOfTables, POINTER_BYTES);
+ if (pCmd->pTableNameList == NULL) {
+ pCmd->pTableNameList = calloc(pCmd->numOfTables, POINTER_BYTES);
+ } else {
+ memset(pCmd->pTableNameList, 0, pCmd->numOfTables * POINTER_BYTES);
+ }
STableDataBlocks **p1 = taosHashIterate(pCmd->pTableBlockHashList, NULL);
int32_t i = 0;
@@ -797,10 +807,12 @@ static void extractTableNameList(SSqlCmd* pCmd) {
p1 = taosHashIterate(pCmd->pTableBlockHashList, p1);
}
- pCmd->pTableBlockHashList = tscDestroyBlockHashTable(pCmd->pTableBlockHashList);
+ if (freeBlockMap) {
+ pCmd->pTableBlockHashList = tscDestroyBlockHashTable(pCmd->pTableBlockHashList);
+ }
}
-int32_t tscMergeTableDataBlocks(SSqlObj* pSql) {
+int32_t tscMergeTableDataBlocks(SSqlObj* pSql, bool freeBlockMap) {
const int INSERT_HEAD_SIZE = sizeof(SMsgDesc) + sizeof(SSubmitMsg);
SSqlCmd* pCmd = &pSql->cmd;
@@ -880,7 +892,7 @@ int32_t tscMergeTableDataBlocks(SSqlObj* pSql) {
pOneTableBlock = *p;
}
- extractTableNameList(pCmd);
+ extractTableNameList(pCmd, freeBlockMap);
// free the table data blocks;
pCmd->pDataBlocks = pVnodeDataBlockList;
@@ -1915,7 +1927,7 @@ void registerSqlObj(SSqlObj* pSql) {
tscDebug("%p new SqlObj from %p, total in tscObj:%d, total:%d", pSql, pSql->pTscObj, num, total);
}
-SSqlObj* createSimpleSubObj(SSqlObj* pSql, void (*fp)(), void* param, int32_t cmd) {
+SSqlObj* createSimpleSubObj(SSqlObj* pSql, __async_cb_func_t fp, void* param, int32_t cmd) {
SSqlObj* pNew = (SSqlObj*)calloc(1, sizeof(SSqlObj));
if (pNew == NULL) {
tscError("%p new subquery failed, tableIndex:%d", pSql, 0);
@@ -2000,7 +2012,7 @@ static void doSetSqlExprAndResultFieldInfo(SQueryInfo* pNewQueryInfo, int64_t ui
tscFieldInfoUpdateOffset(pNewQueryInfo);
}
-SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, void (*fp)(), void* param, int32_t cmd, SSqlObj* pPrevSql) {
+SSqlObj* createSubqueryObj(SSqlObj* pSql, int16_t tableIndex, __async_cb_func_t fp, void* param, int32_t cmd, SSqlObj* pPrevSql) {
SSqlCmd* pCmd = &pSql->cmd;
SSqlObj* pNew = (SSqlObj*)calloc(1, sizeof(SSqlObj));
@@ -2196,7 +2208,7 @@ void tscDoQuery(SSqlObj* pSql) {
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
uint16_t type = pQueryInfo->type;
- if (pSql->fp == (void(*)())tscHandleMultivnodeInsert) { // multi-vnodes insertion
+ if (TSDB_QUERY_HAS_TYPE(type, TSDB_QUERY_TYPE_INSERT)) { // multi-vnodes insertion
tscHandleMultivnodeInsert(pSql);
return;
}
diff --git a/src/client/tests/resultFieldTest.cpp b/src/client/tests/cliTest.cpp
similarity index 58%
rename from src/client/tests/resultFieldTest.cpp
rename to src/client/tests/cliTest.cpp
index c917f0ebaf..5cfe61d92a 100644
--- a/src/client/tests/resultFieldTest.cpp
+++ b/src/client/tests/cliTest.cpp
@@ -2,15 +2,117 @@
#include
#include "taos.h"
+#include "tglobal.h"
namespace {
static int64_t start_ts = 1433955661000;
-}
-/* test parse time function */
-TEST(testCase, result_field_test) {
- taos_options(TSDB_OPTION_CONFIGDIR, "~/first/cfg");
- taos_init();
+void stmtInsertTest() {
+ TAOS* conn = taos_connect("ubuntu", "root", "taosdata", 0, 0);
+ if (conn == NULL) {
+ printf("Failed to connect to DB, reason:%s", taos_errstr(conn));
+ exit(-1);
+ }
+
+ TAOS_RES* res = taos_query(conn, "use test");
+ taos_free_result(res);
+
+ const char* sql = "insert into t1 values(?, ?, ?, ?)";
+ TAOS_STMT* stmt = taos_stmt_init(conn);
+
+ int32_t ret = taos_stmt_prepare(stmt, sql, 0);
+ ASSERT_EQ(ret, 0);
+
+ //ts timestamp, k int, a binary(11), b nchar(4)
+ struct {
+ int64_t ts;
+ int k;
+ char* a;
+ char* b;
+ } v = {0};
+
+ TAOS_BIND params[4];
+ params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
+ params[0].buffer_length = sizeof(v.ts);
+ params[0].buffer = &v.ts;
+ params[0].length = ¶ms[0].buffer_length;
+ params[0].is_null = NULL;
+
+ params[1].buffer_type = TSDB_DATA_TYPE_INT;
+ params[1].buffer_length = sizeof(v.k);
+ params[1].buffer = &v.k;
+ params[1].length = ¶ms[1].buffer_length;
+ params[1].is_null = NULL;
+
+ params[2].buffer_type = TSDB_DATA_TYPE_BINARY;
+ params[2].buffer_length = sizeof(v.a);
+ params[2].buffer = &v.a;
+ params[2].is_null = NULL;
+
+ params[3].buffer_type = TSDB_DATA_TYPE_NCHAR;
+ params[3].buffer_length = sizeof(v.b);
+ params[3].buffer = &v.b;
+ params[3].is_null = NULL;
+
+ v.ts = start_ts + 20;
+ v.k = 123;
+
+ char* str = "abc";
+ uintptr_t len = strlen(str);
+
+ v.a = str;
+ params[2].length = &len;
+ params[2].buffer_length = len;
+ params[2].buffer = str;
+
+ char* nstr = "999";
+ uintptr_t len1 = strlen(nstr);
+
+ v.b = nstr;
+ params[3].buffer_length = len1;
+ params[3].buffer = nstr;
+ params[3].length = &len1;
+
+ taos_stmt_bind_param(stmt, params);
+ taos_stmt_add_batch(stmt);
+
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute insert statement.\033[0m\n");
+ return;
+ }
+
+ v.ts = start_ts + 30;
+ v.k = 911;
+
+ str = "92";
+ len = strlen(str);
+
+ params[2].length = &len;
+ params[2].buffer_length = len;
+ params[2].buffer = str;
+
+ nstr = "1920";
+ len1 = strlen(nstr);
+
+ params[3].buffer_length = len1;
+ params[3].buffer = nstr;
+ params[3].length = &len1;
+
+ taos_stmt_bind_param(stmt, params);
+ taos_stmt_add_batch(stmt);
+
+ ret = taos_stmt_execute(stmt);
+ if (ret != 0) {
+ printf("%p\n", ret);
+ printf("\033[31mfailed to execute insert statement.\033[0m\n");
+ return;
+ }
+
+ taos_stmt_close(stmt);
+ taos_close(conn);
+}
+
+void validateResultFields() {
TAOS* conn = taos_connect("ubuntu", "root", "taosdata", 0, 0);
if (conn == NULL) {
printf("Failed to connect to DB, reason:%s", taos_errstr(conn));
@@ -134,5 +236,31 @@ TEST(testCase, result_field_test) {
ASSERT_STREQ(fields[6].name, "first(ts)");
taos_free_result(res);
+
+ // update the configure parameter, the result field name will be changed
+ tsKeepOriginalColumnName = 1;
+ res = taos_query(conn, "select first(ts, a, k, k, b, b, ts) from t1");
+ ASSERT_EQ(taos_num_fields(res), 7);
+
+ fields = taos_fetch_fields(res);
+ ASSERT_EQ(fields[0].bytes, 8);
+ ASSERT_EQ(fields[0].type, TSDB_DATA_TYPE_TIMESTAMP);
+ ASSERT_STREQ(fields[0].name, "ts");
+
+ ASSERT_EQ(fields[2].bytes, 4);
+ ASSERT_EQ(fields[2].type, TSDB_DATA_TYPE_INT);
+ ASSERT_STREQ(fields[2].name, "k");
+
+ taos_free_result(res);
+
taos_close(conn);
}
+}
+/* test parse time function */
+TEST(testCase, result_field_test) {
+ taos_options(TSDB_OPTION_CONFIGDIR, "~/first/cfg");
+ taos_init();
+
+ validateResultFields();
+ stmtInsertTest();
+}
diff --git a/src/common/inc/tdataformat.h b/src/common/inc/tdataformat.h
index 8d4949d9b4..43208e0e47 100644
--- a/src/common/inc/tdataformat.h
+++ b/src/common/inc/tdataformat.h
@@ -20,7 +20,7 @@
#include
#include "talgo.h"
-#include "taosdef.h"
+#include "ttype.h"
#include "tutil.h"
#ifdef __cplusplus
diff --git a/src/common/inc/tglobal.h b/src/common/inc/tglobal.h
index c54d519637..54334d49f3 100644
--- a/src/common/inc/tglobal.h
+++ b/src/common/inc/tglobal.h
@@ -180,7 +180,7 @@ extern int32_t tsLogKeepDays;
extern int32_t dDebugFlag;
extern int32_t vDebugFlag;
extern int32_t mDebugFlag;
-extern int32_t cDebugFlag;
+extern uint32_t cDebugFlag;
extern int32_t jniDebugFlag;
extern int32_t tmrDebugFlag;
extern int32_t sdbDebugFlag;
diff --git a/src/common/inc/tname.h b/src/common/inc/tname.h
index 9e0093ebfe..44f1047543 100644
--- a/src/common/inc/tname.h
+++ b/src/common/inc/tname.h
@@ -39,4 +39,18 @@ SColumnFilterInfo* tscFilterInfoClone(const SColumnFilterInfo* src, int32_t numO
SSchema tscGetTbnameColumnSchema();
+/**
+ * check if the schema is valid or not, including following aspects:
+ * 1. number of columns
+ * 2. column types
+ * 3. column length
+ * 4. column names
+ * 5. total length
+ *
+ * @param pSchema
+ * @param numOfCols
+ * @return
+ */
+bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols, int32_t numOfTags);
+
#endif // TDENGINE_NAME_H
diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c
index 125e805642..cfe91d3519 100644
--- a/src/common/src/tglobal.c
+++ b/src/common/src/tglobal.c
@@ -212,7 +212,7 @@ int32_t mDebugFlag = 131;
int32_t sdbDebugFlag = 131;
int32_t dDebugFlag = 135;
int32_t vDebugFlag = 135;
-int32_t cDebugFlag = 131;
+uint32_t cDebugFlag = 131;
int32_t jniDebugFlag = 131;
int32_t odbcDebugFlag = 131;
int32_t httpDebugFlag = 131;
diff --git a/src/common/src/tname.c b/src/common/src/tname.c
index 5c351edf48..f35867ede3 100644
--- a/src/common/src/tname.c
+++ b/src/common/src/tname.c
@@ -6,6 +6,10 @@
#include "ttokendef.h"
#include "tvariant.h"
+#define VALIDNUMOFCOLS(x) ((x) >= TSDB_MIN_COLUMNS && (x) <= TSDB_MAX_COLUMNS)
+
+#define VALIDNUMOFTAGS(x) ((x) >= 0 && (x) <= TSDB_MAX_TAGS)
+
// todo refactor
UNUSED_FUNC static FORCE_INLINE const char* skipSegments(const char* input, char delim, int32_t num) {
for (int32_t i = 0; i < num; ++i) {
@@ -62,7 +66,7 @@ SSchema tGetUserSpecifiedColumnSchema(tVariant* pVal, SStrToken* exprStr, const
if (s.type == TSDB_DATA_TYPE_BINARY || s.type == TSDB_DATA_TYPE_NCHAR) {
s.bytes = (int16_t)(pVal->nLen + VARSTR_HEADER_SIZE);
} else {
- s.bytes = tDataTypeDesc[pVal->nType].nSize;
+ s.bytes = tDataTypes[pVal->nType].bytes;
}
s.colId = TSDB_UD_COLUMN_INDEX;
@@ -206,3 +210,65 @@ SSchema tscGetTbnameColumnSchema() {
strcpy(s.name, TSQL_TBNAME_L);
return s;
}
+
+static bool doValidateSchema(SSchema* pSchema, int32_t numOfCols, int32_t maxLen) {
+ int32_t rowLen = 0;
+
+ for (int32_t i = 0; i < numOfCols; ++i) {
+ // 1. valid types
+ if (!isValidDataType(pSchema[i].type)) {
+ return false;
+ }
+
+ // 2. valid length for each type
+ if (pSchema[i].type == TSDB_DATA_TYPE_BINARY) {
+ if (pSchema[i].bytes > TSDB_MAX_BINARY_LEN) {
+ return false;
+ }
+ } else if (pSchema[i].type == TSDB_DATA_TYPE_NCHAR) {
+ if (pSchema[i].bytes > TSDB_MAX_NCHAR_LEN) {
+ return false;
+ }
+ } else {
+ if (pSchema[i].bytes != tDataTypes[pSchema[i].type].bytes) {
+ return false;
+ }
+ }
+
+ // 3. valid column names
+ for (int32_t j = i + 1; j < numOfCols; ++j) {
+ if (strncasecmp(pSchema[i].name, pSchema[j].name, sizeof(pSchema[i].name) - 1) == 0) {
+ return false;
+ }
+ }
+
+ rowLen += pSchema[i].bytes;
+ }
+
+ return rowLen <= maxLen;
+}
+
+bool isValidSchema(struct SSchema* pSchema, int32_t numOfCols, int32_t numOfTags) {
+ if (!VALIDNUMOFCOLS(numOfCols)) {
+ return false;
+ }
+
+ if (!VALIDNUMOFTAGS(numOfTags)) {
+ return false;
+ }
+
+ /* first column must be the timestamp, which is a primary key */
+ if (pSchema[0].type != TSDB_DATA_TYPE_TIMESTAMP) {
+ return false;
+ }
+
+ if (!doValidateSchema(pSchema, numOfCols, TSDB_MAX_BYTES_PER_ROW)) {
+ return false;
+ }
+
+ if (!doValidateSchema(&pSchema[numOfCols], numOfTags, TSDB_MAX_TAGS_LEN)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/src/common/src/ttypes.c b/src/common/src/ttypes.c
index 8197fb1042..0d5910ea38 100644
--- a/src/common/src/ttypes.c
+++ b/src/common/src/ttypes.c
@@ -14,7 +14,7 @@
*/
#include "os.h"
-#include "taosdef.h"
+#include "ttype.h"
#include "ttokendef.h"
#include "tscompression.h"
@@ -367,7 +367,7 @@ static void getStatics_nchr(const void *pData, int32_t numOfRow, int64_t *min, i
*maxIndex = 0;
}
-tDataTypeDescriptor tDataTypeDesc[15] = {
+tDataTypeDescriptor tDataTypes[15] = {
{TSDB_DATA_TYPE_NULL, 6,1, "NOTYPE", NULL, NULL, NULL},
{TSDB_DATA_TYPE_BOOL, 4, CHAR_BYTES, "BOOL", tsCompressBool, tsDecompressBool, getStatics_bool},
{TSDB_DATA_TYPE_TINYINT, 7, CHAR_BYTES, "TINYINT", tsCompressTinyint, tsDecompressTinyint, getStatics_i8},
@@ -423,58 +423,58 @@ void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems) {
switch (type) {
case TSDB_DATA_TYPE_BOOL:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint8_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_BOOL_NULL;
+ *(uint8_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_BOOL_NULL;
}
break;
case TSDB_DATA_TYPE_TINYINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint8_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_TINYINT_NULL;
+ *(uint8_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_TINYINT_NULL;
}
break;
case TSDB_DATA_TYPE_SMALLINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint16_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_SMALLINT_NULL;
+ *(uint16_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_SMALLINT_NULL;
}
break;
case TSDB_DATA_TYPE_INT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint32_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_INT_NULL;
+ *(uint32_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_INT_NULL;
}
break;
case TSDB_DATA_TYPE_BIGINT:
case TSDB_DATA_TYPE_TIMESTAMP:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint64_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_BIGINT_NULL;
+ *(uint64_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_BIGINT_NULL;
}
break;
case TSDB_DATA_TYPE_UTINYINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint8_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_UTINYINT_NULL;
+ *(uint8_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_UTINYINT_NULL;
}
break;
case TSDB_DATA_TYPE_USMALLINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint16_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_USMALLINT_NULL;
+ *(uint16_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_USMALLINT_NULL;
}
break;
case TSDB_DATA_TYPE_UINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint32_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_UINT_NULL;
+ *(uint32_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_UINT_NULL;
}
break;
case TSDB_DATA_TYPE_UBIGINT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint64_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_UBIGINT_NULL;
+ *(uint64_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_UBIGINT_NULL;
}
break;
case TSDB_DATA_TYPE_FLOAT:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint32_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_FLOAT_NULL;
+ *(uint32_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_FLOAT_NULL;
}
break;
case TSDB_DATA_TYPE_DOUBLE:
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint64_t *)(val + i * tDataTypeDesc[type].nSize) = TSDB_DATA_DOUBLE_NULL;
+ *(uint64_t *)(val + i * tDataTypes[type].bytes) = TSDB_DATA_DOUBLE_NULL;
}
break;
case TSDB_DATA_TYPE_NCHAR:
@@ -485,7 +485,7 @@ void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems) {
break;
default: {
for (int32_t i = 0; i < numOfElems; ++i) {
- *(uint32_t *)(val + i * tDataTypeDesc[TSDB_DATA_TYPE_INT].nSize) = TSDB_DATA_INT_NULL;
+ *(uint32_t *)(val + i * tDataTypes[TSDB_DATA_TYPE_INT].bytes) = TSDB_DATA_INT_NULL;
}
break;
}
@@ -524,15 +524,18 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
switch (type) {
case TSDB_DATA_TYPE_BOOL:
case TSDB_DATA_TYPE_TINYINT:
+ case TSDB_DATA_TYPE_UTINYINT:
*((int8_t *)val) = GET_INT8_VAL(src);
break;
case TSDB_DATA_TYPE_SMALLINT:
+ case TSDB_DATA_TYPE_USMALLINT:
*((int16_t *)val) = GET_INT16_VAL(src);
break;
- case TSDB_DATA_TYPE_INT: {
+ case TSDB_DATA_TYPE_INT:
+ case TSDB_DATA_TYPE_UINT:
*((int32_t *)val) = GET_INT32_VAL(src);
break;
- }
+
case TSDB_DATA_TYPE_FLOAT:
SET_FLOAT_VAL(val, GET_FLOAT_VAL(src));
break;
@@ -540,6 +543,7 @@ void assignVal(char *val, const char *src, int32_t len, int32_t type) {
SET_DOUBLE_VAL(val, GET_DOUBLE_VAL(src));
break;
case TSDB_DATA_TYPE_BIGINT:
+ case TSDB_DATA_TYPE_UBIGINT:
case TSDB_DATA_TYPE_TIMESTAMP:
*((int64_t *)val) = GET_INT64_VAL(src);
break;
diff --git a/src/common/src/tvariant.c b/src/common/src/tvariant.c
index 09c5c76163..95aa576889 100644
--- a/src/common/src/tvariant.c
+++ b/src/common/src/tvariant.c
@@ -205,7 +205,7 @@ void tVariantAssign(tVariant *pDst, const tVariant *pSrc) {
}
if (pDst->nType != TSDB_DATA_TYPE_ARRAY) {
- pDst->nLen = tDataTypeDesc[pDst->nType].nSize;
+ pDst->nLen = tDataTypes[pDst->nType].bytes;
}
}
@@ -425,7 +425,7 @@ static FORCE_INLINE int32_t convertToDouble(char *pStr, int32_t len, double *val
static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result, int32_t type, bool issigned, bool releaseVariantPtr) {
if (pVariant->nType == TSDB_DATA_TYPE_NULL) {
- setNull((char *)result, type, tDataTypeDesc[type].nSize);
+ setNull((char *)result, type, tDataTypes[type].bytes);
return 0;
}
@@ -446,7 +446,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
pVariant->nLen = 0;
}
- setNull((char *)result, type, tDataTypeDesc[type].nSize);
+ setNull((char *)result, type, tDataTypes[type].bytes);
return 0;
}
@@ -496,7 +496,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
free(pVariant->pz);
pVariant->nLen = 0;
}
- setNull((char *)result, type, tDataTypeDesc[type].nSize);
+ setNull((char *)result, type, tDataTypes[type].bytes);
return 0;
} else {
int64_t val = wcstoll(pVariant->wpz, &endPtr, 10);
diff --git a/src/connector/jdbc/.classpath b/src/connector/jdbc/.classpath
deleted file mode 100644
index a5d95095cc..0000000000
--- a/src/connector/jdbc/.classpath
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/connector/jdbc/.project b/src/connector/jdbc/.project
deleted file mode 100644
index 656ab58d20..0000000000
--- a/src/connector/jdbc/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- taos-jdbcdriver
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- org.eclipse.m2e.core.maven2Builder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.m2e.core.maven2Nature
-
-
diff --git a/src/connector/jdbc/CMakeLists.txt b/src/connector/jdbc/CMakeLists.txt
index 22d3d31547..7097e9bc5a 100644
--- a/src/connector/jdbc/CMakeLists.txt
+++ b/src/connector/jdbc/CMakeLists.txt
@@ -8,7 +8,7 @@ IF (TD_MVN_INSTALLED)
ADD_CUSTOM_COMMAND(OUTPUT ${JDBC_CMD_NAME}
POST_BUILD
COMMAND mvn -Dmaven.test.skip=true install -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.15-dist.jar ${LIBRARY_OUTPUT_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.16-dist.jar ${LIBRARY_OUTPUT_PATH}
COMMAND mvn -Dmaven.test.skip=true clean -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
COMMENT "build jdbc driver")
ADD_CUSTOM_TARGET(${JDBC_TARGET_NAME} ALL WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} DEPENDS ${JDBC_CMD_NAME})
diff --git a/src/connector/jdbc/deploy-pom.xml b/src/connector/jdbc/deploy-pom.xml
index 1a86bc57dc..5aa60c0df9 100755
--- a/src/connector/jdbc/deploy-pom.xml
+++ b/src/connector/jdbc/deploy-pom.xml
@@ -5,7 +5,7 @@
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.15
+ 2.0.16
jar
JDBCDriver
diff --git a/src/connector/jdbc/pom.xml b/src/connector/jdbc/pom.xml
index 9865fc7127..d18d86258a 100755
--- a/src/connector/jdbc/pom.xml
+++ b/src/connector/jdbc/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.15
+ 2.0.16
jar
JDBCDriver
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
@@ -49,6 +49,7 @@
+
junit
junit
@@ -56,12 +57,6 @@
test
-
- mysql
- mysql-connector-java
- 5.1.47
-
-
org.apache.httpcomponents
@@ -79,12 +74,6 @@
1.2.58
-
- mysql
- mysql-connector-java
- 5.1.49
-
-
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
index 1445be1865..8ab0e4429a 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
@@ -497,12 +497,12 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return null;
}
public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
String columnNamePattern) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return null;
}
public abstract ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
index f4dee67adf..4ea0fc7950 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
@@ -20,13 +20,11 @@ import java.util.List;
public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
- private String dbProductName = null;
- private String url = null;
- private String userName = null;
- private Connection conn = null;
+ private String url;
+ private String userName;
+ private Connection conn;
- public TSDBDatabaseMetaData(String dbProductName, String url, String userName) {
- this.dbProductName = dbProductName;
+ public TSDBDatabaseMetaData(String url, String userName) {
this.url = url;
this.userName = userName;
}
@@ -35,12 +33,17 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
this.conn = conn;
}
+ @Override
public T unwrap(Class iface) throws SQLException {
- return null;
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
}
public boolean isWrapperFor(Class> iface) throws SQLException {
- return false;
+ return iface.isInstance(this);
}
public boolean allProceduresAreCallable() throws SQLException {
@@ -80,11 +83,11 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public String getDatabaseProductName() throws SQLException {
- return this.dbProductName;
+ return "TDengine";
}
public String getDatabaseProductVersion() throws SQLException {
- return "1.5.1";
+ return "2.0.x.x";
}
public String getDriverName() throws SQLException {
@@ -92,7 +95,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public String getDriverVersion() throws SQLException {
- return "1.0.0";
+ return "2.0.x";
}
public int getDriverMajorVersion() {
@@ -111,7 +114,9 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
return false;
}
+
public boolean supportsMixedCaseIdentifiers() throws SQLException {
+ //像database、table这些对象的标识符,在存储时是否采用大小写混合的模式
return false;
}
@@ -120,7 +125,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean storesLowerCaseIdentifiers() throws SQLException {
- return false;
+ return true;
}
public boolean storesMixedCaseIdentifiers() throws SQLException {
@@ -128,6 +133,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
+ //像database、table这些对象的标识符,在存储时是否采用大小写混合、并带引号的模式
return false;
}
@@ -188,10 +194,12 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean nullPlusNonNullIsNull() throws SQLException {
+ // null + non-null != null
return false;
}
public boolean supportsConvert() throws SQLException {
+ // 是否支持转换函数convert
return false;
}
@@ -216,7 +224,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean supportsGroupBy() throws SQLException {
- return false;
+ return true;
}
public boolean supportsGroupByUnrelated() throws SQLException {
@@ -488,7 +496,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public int getDefaultTransactionIsolation() throws SQLException {
- return 0;
+ return Connection.TRANSACTION_NONE;
}
public boolean supportsTransactions() throws SQLException {
@@ -496,6 +504,8 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
+ if (level == Connection.TRANSACTION_NONE)
+ return true;
return false;
}
@@ -517,28 +527,27 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return null;
}
public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
String columnNamePattern) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return null;
}
- public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
- throws SQLException {
- Statement stmt = null;
- if (null != conn && !conn.isClosed()) {
- stmt = conn.createStatement();
- if (catalog == null || catalog.length() < 1) {
- catalog = conn.getCatalog();
- }
+ public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
+ if (conn == null || conn.isClosed()) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ }
+
+ try (Statement stmt = conn.createStatement()) {
+ if (catalog == null || catalog.isEmpty())
+ return null;
+
stmt.executeUpdate("use " + catalog);
ResultSet resultSet0 = stmt.executeQuery("show tables");
GetTablesResultSet getTablesResultSet = new GetTablesResultSet(resultSet0, catalog, schemaPattern, tableNamePattern, types);
return getTablesResultSet;
- } else {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
}
}
@@ -547,14 +556,12 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public ResultSet getCatalogs() throws SQLException {
+ if (conn == null || conn.isClosed())
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- if (conn != null && !conn.isClosed()) {
- Statement stmt = conn.createStatement();
- ResultSet resultSet0 = stmt.executeQuery("show databases");
- CatalogResultSet resultSet = new CatalogResultSet(resultSet0);
- return resultSet;
- } else {
- return getEmptyResultSet();
+ try (Statement stmt = conn.createStatement()) {
+ ResultSet rs = stmt.executeQuery("show databases");
+ return new CatalogResultSet(rs);
}
}
@@ -562,7 +569,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
// set up ColumnMetaDataList
- List columnMetaDataList = new ArrayList(1);
+ List columnMetaDataList = new ArrayList<>(1);
ColumnMetaData colMetaData = new ColumnMetaData();
colMetaData.setColIndex(0);
colMetaData.setColName("TABLE_TYPE");
@@ -571,7 +578,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
columnMetaDataList.add(colMetaData);
// set up rowDataList
- List rowDataList = new ArrayList(2);
+ List rowDataList = new ArrayList<>(2);
TSDBResultSetRowData rowData = new TSDBResultSetRowData();
rowData.setString(0, "TABLE");
rowDataList.add(rowData);
@@ -591,11 +598,10 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
Statement stmt = null;
if (null != conn && !conn.isClosed()) {
stmt = conn.createStatement();
- if (catalog == null || catalog.length() < 1) {
- catalog = conn.getCatalog();
- }
- stmt.executeUpdate("use " + catalog);
+ if (catalog == null || catalog.isEmpty())
+ return null;
+ stmt.executeUpdate("use " + catalog);
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
// set up ColumnMetaDataList
List columnMetaDataList = new ArrayList<>(24);
@@ -851,7 +857,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public Connection getConnection() throws SQLException {
- return null;
+ return this.conn;
}
public boolean supportsSavepoints() throws SQLException {
@@ -884,15 +890,17 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public boolean supportsResultSetHoldability(int holdability) throws SQLException {
+ if (holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT)
+ return true;
return false;
}
public int getResultSetHoldability() throws SQLException {
- return 0;
+ return ResultSet.HOLD_CURSORS_OVER_COMMIT;
}
public int getDatabaseMajorVersion() throws SQLException {
- return 0;
+ return 2;
}
public int getDatabaseMinorVersion() throws SQLException {
@@ -900,7 +908,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
}
public int getJDBCMajorVersion() throws SQLException {
- return 0;
+ return 2;
}
public int getJDBCMinorVersion() throws SQLException {
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
index 06f88cebfa..c171ca2a36 100755
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDriver.java
@@ -214,7 +214,7 @@ public class TSDBDriver extends AbstractTaosDriver {
urlProps.setProperty(TSDBDriver.PROPERTY_KEY_HOST, url);
}
- this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty(TSDBDriver.PROPERTY_KEY_USER));
+ this.dbMetaData = new TSDBDatabaseMetaData(urlForMeta, urlProps.getProperty(TSDBDriver.PROPERTY_KEY_USER));
return urlProps;
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
index 84a3f58f46..a8a8b3ca87 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
@@ -39,7 +39,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-@SuppressWarnings("unused")
public class TSDBResultSet implements ResultSet {
private TSDBJNIConnector jniConnector = null;
@@ -104,6 +103,7 @@ public class TSDBResultSet implements ResultSet {
}
public TSDBResultSet() {
+
}
public TSDBResultSet(TSDBJNIConnector connector, long resultSetPointer) throws SQLException {
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
index cd2a768a38..381f1d3622 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
@@ -17,6 +17,7 @@ package com.taosdata.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
public class TSDBStatement implements Statement {
private TSDBJNIConnector connector = null;
@@ -68,7 +69,6 @@ public class TSDBStatement implements Statement {
pSql = this.connector.executeQuery(sql);
long resultSetPointer = this.connector.getResultSet();
-
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
this.connector.freeResultSet(pSql);
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
index 21d2c6402f..3c372cc503 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
@@ -8,7 +8,6 @@ import java.util.List;
public class RestfulDatabaseMetaData extends AbstractDatabaseMetaData {
-
private final String url;
private final String userName;
private final Connection connection;
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java
deleted file mode 100644
index 19dabe0746..0000000000
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/DatabaseMetaDataTest.java
+++ /dev/null
@@ -1,245 +0,0 @@
-package com.taosdata.jdbc;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.sql.*;
-import java.util.Properties;
-
-public class DatabaseMetaDataTest {
- static Connection connection = null;
- static PreparedStatement statement = null;
- static String dbName = "test";
- static String tName = "t0";
- static String host = "localhost";
-
- @BeforeClass
- public static void createConnection() throws SQLException {
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- } catch (ClassNotFoundException e) {
- return;
- }
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_USER, "root");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_PASSWORD, "taosdata");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
-
- String sql = "drop database if exists " + dbName;
- statement = connection.prepareStatement(sql);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
- }
-
- @Test
- public void testMetaDataTest() throws SQLException {
- DatabaseMetaData databaseMetaData = connection.getMetaData();
- ResultSet resultSet = databaseMetaData.getTables(dbName, "t*", "t*", new String[]{"t"});
- while (resultSet.next()) {
- for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
- System.out.printf("%d: %s\n", i, resultSet.getString(i));
- }
- }
- resultSet.close();
- databaseMetaData.isWrapperFor(null);
- databaseMetaData.allProceduresAreCallable();
- databaseMetaData.allTablesAreSelectable();
- databaseMetaData.getURL();
- databaseMetaData.getUserName();
- databaseMetaData.isReadOnly();
- databaseMetaData.nullsAreSortedHigh();
- databaseMetaData.nullsAreSortedLow();
- databaseMetaData.nullsAreSortedAtStart();
- databaseMetaData.nullsAreSortedAtEnd();
- databaseMetaData.getDatabaseProductName();
- databaseMetaData.getDatabaseProductVersion();
- databaseMetaData.getDriverName();
- databaseMetaData.getDriverVersion();
- databaseMetaData.getDriverMajorVersion();
- databaseMetaData.getDriverMinorVersion();
- databaseMetaData.usesLocalFiles();
- databaseMetaData.usesLocalFilePerTable();
- databaseMetaData.supportsMixedCaseIdentifiers();
- databaseMetaData.storesUpperCaseIdentifiers();
- databaseMetaData.storesLowerCaseIdentifiers();
- databaseMetaData.storesMixedCaseIdentifiers();
- databaseMetaData.supportsMixedCaseQuotedIdentifiers();
- databaseMetaData.storesUpperCaseQuotedIdentifiers();
- databaseMetaData.storesLowerCaseQuotedIdentifiers();
- databaseMetaData.storesMixedCaseQuotedIdentifiers();
- databaseMetaData.getIdentifierQuoteString();
- databaseMetaData.getSQLKeywords();
- databaseMetaData.getNumericFunctions();
- databaseMetaData.getStringFunctions();
- databaseMetaData.getSystemFunctions();
- databaseMetaData.getTimeDateFunctions();
- databaseMetaData.getSearchStringEscape();
- databaseMetaData.getExtraNameCharacters();
- databaseMetaData.supportsAlterTableWithAddColumn();
- databaseMetaData.supportsAlterTableWithDropColumn();
- databaseMetaData.supportsColumnAliasing();
- databaseMetaData.nullPlusNonNullIsNull();
- databaseMetaData.supportsConvert();
- databaseMetaData.supportsConvert(0, 0);
- databaseMetaData.supportsTableCorrelationNames();
- databaseMetaData.supportsDifferentTableCorrelationNames();
- databaseMetaData.supportsExpressionsInOrderBy();
- databaseMetaData.supportsOrderByUnrelated();
- databaseMetaData.supportsGroupBy();
- databaseMetaData.supportsGroupByUnrelated();
- databaseMetaData.supportsGroupByBeyondSelect();
- databaseMetaData.supportsLikeEscapeClause();
- databaseMetaData.supportsMultipleResultSets();
- databaseMetaData.supportsMultipleTransactions();
- databaseMetaData.supportsNonNullableColumns();
- databaseMetaData.supportsMinimumSQLGrammar();
- databaseMetaData.supportsCoreSQLGrammar();
- databaseMetaData.supportsExtendedSQLGrammar();
- databaseMetaData.supportsANSI92EntryLevelSQL();
- databaseMetaData.supportsANSI92IntermediateSQL();
- databaseMetaData.supportsANSI92FullSQL();
- databaseMetaData.supportsIntegrityEnhancementFacility();
- databaseMetaData.supportsOuterJoins();
- databaseMetaData.supportsFullOuterJoins();
- databaseMetaData.supportsLimitedOuterJoins();
- databaseMetaData.getSchemaTerm();
- databaseMetaData.getProcedureTerm();
- databaseMetaData.getCatalogTerm();
- databaseMetaData.isCatalogAtStart();
- databaseMetaData.getCatalogSeparator();
- databaseMetaData.supportsSchemasInDataManipulation();
- databaseMetaData.supportsSchemasInProcedureCalls();
- databaseMetaData.supportsSchemasInTableDefinitions();
- databaseMetaData.supportsSchemasInIndexDefinitions();
- databaseMetaData.supportsSchemasInPrivilegeDefinitions();
- databaseMetaData.supportsCatalogsInDataManipulation();
- databaseMetaData.supportsCatalogsInProcedureCalls();
- databaseMetaData.supportsCatalogsInTableDefinitions();
- databaseMetaData.supportsCatalogsInIndexDefinitions();
- databaseMetaData.supportsCatalogsInPrivilegeDefinitions();
- databaseMetaData.supportsPositionedDelete();
- databaseMetaData.supportsPositionedUpdate();
- databaseMetaData.supportsSelectForUpdate();
- databaseMetaData.supportsStoredProcedures();
- databaseMetaData.supportsSubqueriesInComparisons();
- databaseMetaData.supportsSubqueriesInExists();
- databaseMetaData.supportsSubqueriesInIns();
- databaseMetaData.supportsSubqueriesInQuantifieds();
- databaseMetaData.supportsCorrelatedSubqueries();
- databaseMetaData.supportsUnion();
- databaseMetaData.supportsUnionAll();
- databaseMetaData.supportsOpenCursorsAcrossCommit();
- databaseMetaData.supportsOpenCursorsAcrossRollback();
- databaseMetaData.supportsOpenStatementsAcrossCommit();
- databaseMetaData.supportsOpenStatementsAcrossRollback();
- databaseMetaData.getMaxBinaryLiteralLength();
- databaseMetaData.getMaxCharLiteralLength();
- databaseMetaData.getMaxColumnNameLength();
- databaseMetaData.getMaxColumnsInGroupBy();
- databaseMetaData.getMaxColumnsInIndex();
- databaseMetaData.getMaxColumnsInOrderBy();
- databaseMetaData.getMaxColumnsInSelect();
- databaseMetaData.getMaxColumnsInTable();
- databaseMetaData.getMaxConnections();
- databaseMetaData.getMaxCursorNameLength();
- databaseMetaData.getMaxIndexLength();
- databaseMetaData.getMaxSchemaNameLength();
- databaseMetaData.getMaxProcedureNameLength();
- databaseMetaData.getMaxCatalogNameLength();
- databaseMetaData.getMaxRowSize();
- databaseMetaData.doesMaxRowSizeIncludeBlobs();
- databaseMetaData.getMaxStatementLength();
- databaseMetaData.getMaxStatements();
- databaseMetaData.getMaxTableNameLength();
- databaseMetaData.getMaxTablesInSelect();
- databaseMetaData.getMaxUserNameLength();
- databaseMetaData.getDefaultTransactionIsolation();
- databaseMetaData.supportsTransactions();
- databaseMetaData.supportsTransactionIsolationLevel(0);
- databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions();
- databaseMetaData.supportsDataManipulationTransactionsOnly();
- databaseMetaData.dataDefinitionCausesTransactionCommit();
- databaseMetaData.dataDefinitionIgnoredInTransactions();
- try {
- databaseMetaData.getProcedures("", "", "");
- } catch (Exception e) {
- }
- try {
- databaseMetaData.getProcedureColumns("", "", "", "");
- } catch (Exception e) {
- }
- try {
- databaseMetaData.getTables("", "", "", new String[]{""});
- } catch (Exception e) {
- }
- databaseMetaData.getSchemas();
- databaseMetaData.getCatalogs();
-// databaseMetaData.getTableTypes();
-
- databaseMetaData.getColumns(dbName, "", tName, "");
- databaseMetaData.getColumnPrivileges("", "", "", "");
- databaseMetaData.getTablePrivileges("", "", "");
- databaseMetaData.getBestRowIdentifier("", "", "", 0, false);
- databaseMetaData.getVersionColumns("", "", "");
- databaseMetaData.getPrimaryKeys("", "", "");
- databaseMetaData.getImportedKeys("", "", "");
- databaseMetaData.getExportedKeys("", "", "");
- databaseMetaData.getCrossReference("", "", "", "", "", "");
- databaseMetaData.getTypeInfo();
- databaseMetaData.getIndexInfo("", "", "", false, false);
- databaseMetaData.supportsResultSetType(0);
- databaseMetaData.supportsResultSetConcurrency(0, 0);
- databaseMetaData.ownUpdatesAreVisible(0);
- databaseMetaData.ownDeletesAreVisible(0);
- databaseMetaData.ownInsertsAreVisible(0);
- databaseMetaData.othersUpdatesAreVisible(0);
- databaseMetaData.othersDeletesAreVisible(0);
- databaseMetaData.othersInsertsAreVisible(0);
- databaseMetaData.updatesAreDetected(0);
- databaseMetaData.deletesAreDetected(0);
- databaseMetaData.insertsAreDetected(0);
- databaseMetaData.supportsBatchUpdates();
- databaseMetaData.getUDTs("", "", "", new int[]{0});
- databaseMetaData.getConnection();
- databaseMetaData.supportsSavepoints();
- databaseMetaData.supportsNamedParameters();
- databaseMetaData.supportsMultipleOpenResults();
- databaseMetaData.supportsGetGeneratedKeys();
- databaseMetaData.getSuperTypes("", "", "");
- databaseMetaData.getSuperTables("", "", "");
- databaseMetaData.getAttributes("", "", "", "");
- databaseMetaData.supportsResultSetHoldability(0);
- databaseMetaData.getResultSetHoldability();
- databaseMetaData.getDatabaseMajorVersion();
- databaseMetaData.getDatabaseMinorVersion();
- databaseMetaData.getJDBCMajorVersion();
- databaseMetaData.getJDBCMinorVersion();
- databaseMetaData.getSQLStateType();
- databaseMetaData.locatorsUpdateCopy();
- databaseMetaData.supportsStatementPooling();
- databaseMetaData.getRowIdLifetime();
- databaseMetaData.getSchemas("", "");
- databaseMetaData.supportsStoredFunctionsUsingCallSyntax();
- databaseMetaData.autoCommitFailureClosesAllResultSets();
- databaseMetaData.getClientInfoProperties();
- databaseMetaData.getFunctions("", "", "");
- databaseMetaData.getFunctionColumns("", "", "", "");
- databaseMetaData.getPseudoColumns("", "", "", "");
- databaseMetaData.generatedKeyAlwaysReturned();
-
- }
-
- @AfterClass
- public static void close() throws Exception {
- statement.executeUpdate("drop database " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
-
- }
-}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
new file mode 100644
index 0000000000..448b513d0e
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
@@ -0,0 +1,913 @@
+package com.taosdata.jdbc;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+
+public class TSDBDatabaseMetaDataTest {
+ private TSDBDatabaseMetaData metaData;
+ private static final String host = "localhost";
+
+ @Before
+ public void before() throws ClassNotFoundException, SQLException {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ metaData = (TSDBDatabaseMetaData) DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata", properties).getMetaData();
+ }
+
+ @Test
+ public void unwrap() throws SQLException {
+ TSDBDatabaseMetaData unwrap = metaData.unwrap(TSDBDatabaseMetaData.class);
+ Assert.assertNotNull(unwrap);
+ }
+
+ @Test
+ public void isWrapperFor() throws SQLException {
+ Assert.assertTrue(metaData.isWrapperFor(TSDBDatabaseMetaData.class));
+ }
+
+ @Test
+ public void allProceduresAreCallable() throws SQLException {
+ Assert.assertFalse(metaData.allProceduresAreCallable());
+ }
+
+ @Test
+ public void allTablesAreSelectable() throws SQLException {
+ Assert.assertFalse(metaData.allTablesAreSelectable());
+ }
+
+ @Test
+ public void getURL() throws SQLException {
+ Assert.assertEquals("jdbc:TAOS://localhost:6030/?user=root&password=taosdata", metaData.getURL());
+ }
+
+ @Test
+ public void getUserName() throws SQLException {
+ Assert.assertEquals("root", metaData.getUserName());
+ }
+
+ @Test
+ public void isReadOnly() throws SQLException {
+ Assert.assertFalse(metaData.isReadOnly());
+ }
+
+ @Test
+ public void nullsAreSortedHigh() throws SQLException {
+ Assert.assertFalse(metaData.nullsAreSortedHigh());
+ }
+
+ @Test
+ public void nullsAreSortedLow() throws SQLException {
+ Assert.assertTrue(metaData.nullsAreSortedLow());
+ }
+
+ @Test
+ public void nullsAreSortedAtStart() throws SQLException {
+ Assert.assertTrue(metaData.nullsAreSortedAtStart());
+ }
+
+ @Test
+ public void nullsAreSortedAtEnd() throws SQLException {
+ Assert.assertFalse(metaData.nullsAreSortedAtEnd());
+ }
+
+ @Test
+ public void getDatabaseProductName() throws SQLException {
+ Assert.assertEquals("TDengine", metaData.getDatabaseProductName());
+ }
+
+ @Test
+ public void getDatabaseProductVersion() throws SQLException {
+ Assert.assertEquals("2.0.x.x", metaData.getDatabaseProductVersion());
+ }
+
+ @Test
+ public void getDriverName() throws SQLException {
+ Assert.assertEquals("com.taosdata.jdbc.TSDBDriver", metaData.getDriverName());
+ }
+
+ @Test
+ public void getDriverVersion() throws SQLException {
+ Assert.assertEquals("2.0.x", metaData.getDriverVersion());
+ }
+
+ @Test
+ public void getDriverMajorVersion() {
+ Assert.assertEquals(2, metaData.getDriverMajorVersion());
+ }
+
+ @Test
+ public void getDriverMinorVersion() {
+ Assert.assertEquals(0, metaData.getDriverMinorVersion());
+ }
+
+ @Test
+ public void usesLocalFiles() throws SQLException {
+ Assert.assertFalse(metaData.usesLocalFiles());
+ }
+
+ @Test
+ public void usesLocalFilePerTable() throws SQLException {
+ Assert.assertFalse(metaData.usesLocalFilePerTable());
+ }
+
+ @Test
+ public void supportsMixedCaseIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.supportsMixedCaseIdentifiers());
+ }
+
+ @Test
+ public void storesUpperCaseIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.storesUpperCaseIdentifiers());
+ }
+
+ @Test
+ public void storesLowerCaseIdentifiers() throws SQLException {
+ Assert.assertTrue(metaData.storesLowerCaseIdentifiers());
+ }
+
+ @Test
+ public void storesMixedCaseIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.storesMixedCaseIdentifiers());
+ }
+
+ @Test
+ public void supportsMixedCaseQuotedIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.supportsMixedCaseQuotedIdentifiers());
+ }
+
+ @Test
+ public void storesUpperCaseQuotedIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.storesUpperCaseQuotedIdentifiers());
+ }
+
+ @Test
+ public void storesLowerCaseQuotedIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.storesLowerCaseQuotedIdentifiers());
+ }
+
+ @Test
+ public void storesMixedCaseQuotedIdentifiers() throws SQLException {
+ Assert.assertFalse(metaData.storesMixedCaseQuotedIdentifiers());
+ }
+
+ @Test
+ public void getIdentifierQuoteString() throws SQLException {
+ Assert.assertEquals(" ", metaData.getIdentifierQuoteString());
+ }
+
+ @Test
+ public void getSQLKeywords() throws SQLException {
+ Assert.assertEquals(null, metaData.getSQLKeywords());
+ }
+
+ @Test
+ public void getNumericFunctions() throws SQLException {
+ Assert.assertEquals(null, metaData.getNumericFunctions());
+ }
+
+ @Test
+ public void getStringFunctions() throws SQLException {
+ Assert.assertEquals(null, metaData.getStringFunctions());
+ }
+
+ @Test
+ public void getSystemFunctions() throws SQLException {
+ Assert.assertEquals(null, metaData.getSystemFunctions());
+ }
+
+ @Test
+ public void getTimeDateFunctions() throws SQLException {
+ Assert.assertEquals(null, metaData.getTimeDateFunctions());
+ }
+
+ @Test
+ public void getSearchStringEscape() throws SQLException {
+ Assert.assertEquals(null, metaData.getSearchStringEscape());
+ }
+
+ @Test
+ public void getExtraNameCharacters() throws SQLException {
+ Assert.assertEquals(null, metaData.getExtraNameCharacters());
+ }
+
+ @Test
+ public void supportsAlterTableWithAddColumn() throws SQLException {
+ Assert.assertTrue(metaData.supportsAlterTableWithAddColumn());
+ }
+
+ @Test
+ public void supportsAlterTableWithDropColumn() throws SQLException {
+ Assert.assertTrue(metaData.supportsAlterTableWithDropColumn());
+ }
+
+ @Test
+ public void supportsColumnAliasing() throws SQLException {
+ Assert.assertTrue(metaData.supportsColumnAliasing());
+ }
+
+ @Test
+ public void nullPlusNonNullIsNull() throws SQLException {
+ Assert.assertFalse(metaData.nullPlusNonNullIsNull());
+ }
+
+ @Test
+ public void supportsConvert() throws SQLException {
+ Assert.assertFalse(metaData.supportsConvert());
+ }
+
+ @Test
+ public void testSupportsConvert() throws SQLException {
+ Assert.assertFalse(metaData.supportsConvert(1, 1));
+ }
+
+ @Test
+ public void supportsTableCorrelationNames() throws SQLException {
+ Assert.assertFalse(metaData.supportsTableCorrelationNames());
+ }
+
+ @Test
+ public void supportsDifferentTableCorrelationNames() throws SQLException {
+ Assert.assertFalse(metaData.supportsDifferentTableCorrelationNames());
+ }
+
+ @Test
+ public void supportsExpressionsInOrderBy() throws SQLException {
+ Assert.assertFalse(metaData.supportsExpressionsInOrderBy());
+ }
+
+ @Test
+ public void supportsOrderByUnrelated() throws SQLException {
+ Assert.assertFalse(metaData.supportsOrderByUnrelated());
+ }
+
+ @Test
+ public void supportsGroupBy() throws SQLException {
+ Assert.assertTrue(metaData.supportsGroupBy());
+ }
+
+ @Test
+ public void supportsGroupByUnrelated() throws SQLException {
+ Assert.assertFalse(metaData.supportsGroupByUnrelated());
+ }
+
+ @Test
+ public void supportsGroupByBeyondSelect() throws SQLException {
+ Assert.assertFalse(metaData.supportsGroupByBeyondSelect());
+ }
+
+ @Test
+ public void supportsLikeEscapeClause() throws SQLException {
+ Assert.assertFalse(metaData.supportsLikeEscapeClause());
+ }
+
+ @Test
+ public void supportsMultipleResultSets() throws SQLException {
+ Assert.assertFalse(metaData.supportsMultipleResultSets());
+ }
+
+ @Test
+ public void supportsMultipleTransactions() throws SQLException {
+ Assert.assertFalse(metaData.supportsMultipleTransactions());
+ }
+
+ @Test
+ public void supportsNonNullableColumns() throws SQLException {
+ Assert.assertFalse(metaData.supportsNonNullableColumns());
+ }
+
+ @Test
+ public void supportsMinimumSQLGrammar() throws SQLException {
+ Assert.assertFalse(metaData.supportsMinimumSQLGrammar());
+ }
+
+ @Test
+ public void supportsCoreSQLGrammar() throws SQLException {
+ Assert.assertFalse(metaData.supportsCoreSQLGrammar());
+ }
+
+ @Test
+ public void supportsExtendedSQLGrammar() throws SQLException {
+ Assert.assertFalse(metaData.supportsExtendedSQLGrammar());
+ }
+
+ @Test
+ public void supportsANSI92EntryLevelSQL() throws SQLException {
+ Assert.assertFalse(metaData.supportsANSI92EntryLevelSQL());
+ }
+
+ @Test
+ public void supportsANSI92IntermediateSQL() throws SQLException {
+ Assert.assertFalse(metaData.supportsANSI92IntermediateSQL());
+ }
+
+ @Test
+ public void supportsANSI92FullSQL() throws SQLException {
+ Assert.assertFalse(metaData.supportsANSI92FullSQL());
+ }
+
+ @Test
+ public void supportsIntegrityEnhancementFacility() throws SQLException {
+ Assert.assertFalse(metaData.supportsIntegrityEnhancementFacility());
+ }
+
+ @Test
+ public void supportsOuterJoins() throws SQLException {
+ Assert.assertFalse(metaData.supportsOuterJoins());
+ }
+
+ @Test
+ public void supportsFullOuterJoins() throws SQLException {
+ Assert.assertFalse(metaData.supportsFullOuterJoins());
+ }
+
+ @Test
+ public void supportsLimitedOuterJoins() throws SQLException {
+ Assert.assertFalse(metaData.supportsLimitedOuterJoins());
+ }
+
+ @Test
+ public void getSchemaTerm() throws SQLException {
+ Assert.assertNull(metaData.getSchemaTerm());
+ }
+
+ @Test
+ public void getProcedureTerm() throws SQLException {
+ Assert.assertNull(metaData.getProcedureTerm());
+ }
+
+ @Test
+ public void getCatalogTerm() throws SQLException {
+ Assert.assertEquals("database", metaData.getCatalogTerm());
+ }
+
+ @Test
+ public void isCatalogAtStart() throws SQLException {
+ Assert.assertTrue(metaData.isCatalogAtStart());
+ }
+
+ @Test
+ public void getCatalogSeparator() throws SQLException {
+ Assert.assertEquals(".", metaData.getCatalogSeparator());
+ }
+
+ @Test
+ public void supportsSchemasInDataManipulation() throws SQLException {
+ Assert.assertFalse(metaData.supportsSchemasInDataManipulation());
+ }
+
+ @Test
+ public void supportsSchemasInProcedureCalls() throws SQLException {
+ Assert.assertFalse(metaData.supportsSchemasInProcedureCalls());
+ }
+
+ @Test
+ public void supportsSchemasInTableDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsSchemasInTableDefinitions());
+ }
+
+ @Test
+ public void supportsSchemasInIndexDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsSchemasInIndexDefinitions());
+ }
+
+ @Test
+ public void supportsSchemasInPrivilegeDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsSchemasInPrivilegeDefinitions());
+ }
+
+ @Test
+ public void supportsCatalogsInDataManipulation() throws SQLException {
+ Assert.assertTrue(metaData.supportsCatalogsInDataManipulation());
+ }
+
+ @Test
+ public void supportsCatalogsInProcedureCalls() throws SQLException {
+ Assert.assertFalse(metaData.supportsCatalogsInProcedureCalls());
+ }
+
+ @Test
+ public void supportsCatalogsInTableDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsCatalogsInTableDefinitions());
+ }
+
+ @Test
+ public void supportsCatalogsInIndexDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsCatalogsInIndexDefinitions());
+ }
+
+ @Test
+ public void supportsCatalogsInPrivilegeDefinitions() throws SQLException {
+ Assert.assertFalse(metaData.supportsCatalogsInPrivilegeDefinitions());
+ }
+
+ @Test
+ public void supportsPositionedDelete() throws SQLException {
+ Assert.assertFalse(metaData.supportsPositionedDelete());
+ }
+
+ @Test
+ public void supportsPositionedUpdate() throws SQLException {
+ Assert.assertFalse(metaData.supportsPositionedUpdate());
+ }
+
+ @Test
+ public void supportsSelectForUpdate() throws SQLException {
+ Assert.assertFalse(metaData.supportsSelectForUpdate());
+ }
+
+ @Test
+ public void supportsStoredProcedures() throws SQLException {
+ Assert.assertFalse(metaData.supportsStoredProcedures());
+ }
+
+ @Test
+ public void supportsSubqueriesInComparisons() throws SQLException {
+ Assert.assertFalse(metaData.supportsSubqueriesInComparisons());
+ }
+
+ @Test
+ public void supportsSubqueriesInExists() throws SQLException {
+ Assert.assertFalse(metaData.supportsSubqueriesInExists());
+ }
+
+ @Test
+ public void supportsSubqueriesInIns() throws SQLException {
+ Assert.assertFalse(metaData.supportsSubqueriesInIns());
+ }
+
+ @Test
+ public void supportsSubqueriesInQuantifieds() throws SQLException {
+ Assert.assertFalse(metaData.supportsSubqueriesInQuantifieds());
+ }
+
+ @Test
+ public void supportsCorrelatedSubqueries() throws SQLException {
+ Assert.assertFalse(metaData.supportsCorrelatedSubqueries());
+ }
+
+ @Test
+ public void supportsUnion() throws SQLException {
+ Assert.assertFalse(metaData.supportsUnion());
+ }
+
+ @Test
+ public void supportsUnionAll() throws SQLException {
+ Assert.assertFalse(metaData.supportsUnionAll());
+ }
+
+ @Test
+ public void supportsOpenCursorsAcrossCommit() throws SQLException {
+ Assert.assertFalse(metaData.supportsOpenCursorsAcrossCommit());
+ }
+
+ @Test
+ public void supportsOpenCursorsAcrossRollback() throws SQLException {
+ Assert.assertFalse(metaData.supportsOpenCursorsAcrossRollback());
+ }
+
+ @Test
+ public void supportsOpenStatementsAcrossCommit() throws SQLException {
+ Assert.assertFalse(metaData.supportsOpenStatementsAcrossCommit());
+ }
+
+ @Test
+ public void supportsOpenStatementsAcrossRollback() throws SQLException {
+ Assert.assertFalse(metaData.supportsOpenStatementsAcrossRollback());
+ }
+
+ @Test
+ public void getMaxBinaryLiteralLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxBinaryLiteralLength());
+ }
+
+ @Test
+ public void getMaxCharLiteralLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxCharLiteralLength());
+ }
+
+ @Test
+ public void getMaxColumnNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnNameLength());
+ }
+
+ @Test
+ public void getMaxColumnsInGroupBy() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnsInGroupBy());
+ }
+
+ @Test
+ public void getMaxColumnsInIndex() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnsInIndex());
+ }
+
+ @Test
+ public void getMaxColumnsInOrderBy() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnsInOrderBy());
+ }
+
+ @Test
+ public void getMaxColumnsInSelect() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnsInSelect());
+ }
+
+ @Test
+ public void getMaxColumnsInTable() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxColumnsInTable());
+ }
+
+ @Test
+ public void getMaxConnections() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxConnections());
+ }
+
+ @Test
+ public void getMaxCursorNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxCursorNameLength());
+ }
+
+ @Test
+ public void getMaxIndexLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxIndexLength());
+ }
+
+ @Test
+ public void getMaxSchemaNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxSchemaNameLength());
+ }
+
+ @Test
+ public void getMaxProcedureNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxProcedureNameLength());
+ }
+
+ @Test
+ public void getMaxCatalogNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxCatalogNameLength());
+ }
+
+ @Test
+ public void getMaxRowSize() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxRowSize());
+ }
+
+ @Test
+ public void doesMaxRowSizeIncludeBlobs() throws SQLException {
+ Assert.assertFalse(metaData.doesMaxRowSizeIncludeBlobs());
+ }
+
+ @Test
+ public void getMaxStatementLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxStatementLength());
+ }
+
+ @Test
+ public void getMaxStatements() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxStatements());
+ }
+
+ @Test
+ public void getMaxTableNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxTableNameLength());
+ }
+
+ @Test
+ public void getMaxTablesInSelect() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxTablesInSelect());
+ }
+
+ @Test
+ public void getMaxUserNameLength() throws SQLException {
+ Assert.assertEquals(0, metaData.getMaxUserNameLength());
+ }
+
+ @Test
+ public void getDefaultTransactionIsolation() throws SQLException {
+ Assert.assertEquals(Connection.TRANSACTION_NONE, metaData.getDefaultTransactionIsolation());
+ }
+
+ @Test
+ public void supportsTransactions() throws SQLException {
+ Assert.assertFalse(metaData.supportsTransactions());
+ }
+
+ @Test
+ public void supportsTransactionIsolationLevel() throws SQLException {
+ Assert.assertTrue(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE));
+ Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
+ Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
+ Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
+ Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
+ }
+
+ @Test
+ public void supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
+ Assert.assertFalse(metaData.supportsDataDefinitionAndDataManipulationTransactions());
+ }
+
+ @Test
+ public void supportsDataManipulationTransactionsOnly() throws SQLException {
+ Assert.assertFalse(metaData.supportsDataManipulationTransactionsOnly());
+ }
+
+ @Test
+ public void dataDefinitionCausesTransactionCommit() throws SQLException {
+ Assert.assertFalse(metaData.dataDefinitionCausesTransactionCommit());
+ }
+
+ @Test
+ public void dataDefinitionIgnoredInTransactions() throws SQLException {
+ Assert.assertFalse(metaData.dataDefinitionIgnoredInTransactions());
+ }
+
+ @Test
+ public void getProcedures() throws SQLException {
+ Assert.assertNull(metaData.getProcedures("*", "*", "*"));
+ }
+
+ @Test
+ public void getProcedureColumns() throws SQLException {
+ Assert.assertNull(metaData.getProcedureColumns("*", "*", "*", "*"));
+ }
+
+ @Test
+ public void getTables() throws SQLException {
+ Assert.assertNull(metaData.getTables("", "", "*", null));
+ }
+
+ @Test
+ public void getSchemas() throws SQLException {
+ Assert.assertNotNull(metaData.getSchemas());
+ }
+
+ @Test
+ public void getCatalogs() throws SQLException {
+ Assert.assertNotNull(metaData.getCatalogs());
+ }
+
+ @Test
+ public void getTableTypes() throws SQLException {
+ Assert.assertNotNull(metaData.getTableTypes());
+ }
+
+ @Test
+ public void getColumns() throws SQLException {
+ Assert.assertNotNull(metaData.getColumns("", "", "", ""));
+ }
+
+ @Test
+ public void getColumnPrivileges() throws SQLException {
+ Assert.assertNotNull(metaData.getColumnPrivileges("", "", "", ""));
+ }
+
+ @Test
+ public void getTablePrivileges() throws SQLException {
+ Assert.assertNotNull(metaData.getTablePrivileges("", "", ""));
+ }
+
+ @Test
+ public void getBestRowIdentifier() throws SQLException {
+ Assert.assertNotNull(metaData.getBestRowIdentifier("", "", "", 0, false));
+ }
+
+ @Test
+ public void getVersionColumns() throws SQLException {
+ Assert.assertNotNull(metaData.getVersionColumns("", "", ""));
+ }
+
+ @Test
+ public void getPrimaryKeys() throws SQLException {
+ Assert.assertNotNull(metaData.getPrimaryKeys("", "", ""));
+ }
+
+ @Test
+ public void getImportedKeys() throws SQLException {
+ Assert.assertNotNull(metaData.getImportedKeys("", "", ""));
+ }
+
+ @Test
+ public void getExportedKeys() throws SQLException {
+ Assert.assertNotNull(metaData.getExportedKeys("", "", ""));
+ }
+
+ @Test
+ public void getCrossReference() throws SQLException {
+ Assert.assertNotNull(metaData.getCrossReference("", "", "", "", "", ""));
+ }
+
+ @Test
+ public void getTypeInfo() throws SQLException {
+ Assert.assertNotNull(metaData.getTypeInfo());
+ }
+
+ @Test
+ public void getIndexInfo() throws SQLException {
+ Assert.assertNotNull(metaData.getIndexInfo("", "", "", false, false));
+ }
+
+ @Test
+ public void supportsResultSetType() throws SQLException {
+ Assert.assertFalse(metaData.supportsResultSetType(0));
+ }
+
+ @Test
+ public void supportsResultSetConcurrency() throws SQLException {
+ Assert.assertFalse(metaData.supportsResultSetConcurrency(0, 0));
+ }
+
+ @Test
+ public void ownUpdatesAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.ownUpdatesAreVisible(0));
+ }
+
+ @Test
+ public void ownDeletesAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.ownDeletesAreVisible(0));
+ }
+
+ @Test
+ public void ownInsertsAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.ownInsertsAreVisible(0));
+ }
+
+ @Test
+ public void othersUpdatesAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.othersUpdatesAreVisible(0));
+ }
+
+ @Test
+ public void othersDeletesAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.othersDeletesAreVisible(0));
+ }
+
+ @Test
+ public void othersInsertsAreVisible() throws SQLException {
+ Assert.assertFalse(metaData.othersInsertsAreVisible(0));
+ }
+
+ @Test
+ public void updatesAreDetected() throws SQLException {
+ Assert.assertFalse(metaData.updatesAreDetected(0));
+ }
+
+ @Test
+ public void deletesAreDetected() throws SQLException {
+ Assert.assertFalse(metaData.deletesAreDetected(0));
+ }
+
+ @Test
+ public void insertsAreDetected() throws SQLException {
+ Assert.assertFalse(metaData.insertsAreDetected(0));
+ }
+
+ @Test
+ public void supportsBatchUpdates() throws SQLException {
+ Assert.assertFalse(metaData.supportsBatchUpdates());
+ }
+
+ @Test
+ public void getUDTs() throws SQLException {
+ Assert.assertNotNull(metaData.getUDTs("", "", "", null));
+ }
+
+ @Test
+ public void getConnection() throws SQLException {
+ Assert.assertNotNull(metaData.getConnection());
+ }
+
+ @Test
+ public void supportsSavepoints() throws SQLException {
+ Assert.assertFalse(metaData.supportsSavepoints());
+ }
+
+ @Test
+ public void supportsNamedParameters() throws SQLException {
+ Assert.assertFalse(metaData.supportsNamedParameters());
+ }
+
+ @Test
+ public void supportsMultipleOpenResults() throws SQLException {
+ Assert.assertFalse(metaData.supportsMultipleOpenResults());
+ }
+
+ @Test
+ public void supportsGetGeneratedKeys() throws SQLException {
+ Assert.assertFalse(metaData.supportsGetGeneratedKeys());
+ }
+
+ @Test
+ public void getSuperTypes() throws SQLException {
+ Assert.assertNotNull(metaData.getSuperTypes("", "", ""));
+ }
+
+ @Test
+ public void getSuperTables() throws SQLException {
+ Assert.assertNotNull(metaData.getSuperTables("", "", ""));
+ }
+
+ @Test
+ public void getAttributes() throws SQLException {
+ Assert.assertNotNull(metaData.getAttributes("", "", "", ""));
+ }
+
+ @Test
+ public void supportsResultSetHoldability() throws SQLException {
+ Assert.assertTrue(metaData.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT));
+ Assert.assertFalse(metaData.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT));
+ }
+
+ @Test
+ public void getResultSetHoldability() throws SQLException {
+ Assert.assertEquals(1, metaData.getResultSetHoldability());
+ }
+
+ @Test
+ public void getDatabaseMajorVersion() throws SQLException {
+ Assert.assertEquals(2, metaData.getDatabaseMajorVersion());
+ }
+
+ @Test
+ public void getDatabaseMinorVersion() throws SQLException {
+ Assert.assertEquals(0, metaData.getDatabaseMinorVersion());
+ }
+
+ @Test
+ public void getJDBCMajorVersion() throws SQLException {
+ Assert.assertEquals(2, metaData.getJDBCMajorVersion());
+ }
+
+ @Test
+ public void getJDBCMinorVersion() throws SQLException {
+ Assert.assertEquals(0, metaData.getJDBCMinorVersion());
+ }
+
+ @Test
+ public void getSQLStateType() throws SQLException {
+ Assert.assertEquals(0, metaData.getSQLStateType());
+ }
+
+ @Test
+ public void locatorsUpdateCopy() throws SQLException {
+ Assert.assertFalse(metaData.locatorsUpdateCopy());
+ }
+
+ @Test
+ public void supportsStatementPooling() throws SQLException {
+ Assert.assertFalse(metaData.supportsStatementPooling());
+ }
+
+ @Test
+ public void getRowIdLifetime() throws SQLException {
+ Assert.assertNull(metaData.getRowIdLifetime());
+ }
+
+ @Test
+ public void testGetSchemas() throws SQLException {
+ Assert.assertNull(metaData.getSchemas());
+ }
+
+ @Test
+ public void supportsStoredFunctionsUsingCallSyntax() throws SQLException {
+ Assert.assertFalse(metaData.supportsStoredFunctionsUsingCallSyntax());
+ }
+
+ @Test
+ public void autoCommitFailureClosesAllResultSets() throws SQLException {
+ Assert.assertFalse(metaData.autoCommitFailureClosesAllResultSets());
+ }
+
+ @Test
+ public void getClientInfoProperties() throws SQLException {
+ Assert.assertNotNull(metaData.getClientInfoProperties());
+ }
+
+ @Test
+ public void getFunctions() throws SQLException {
+ Assert.assertNotNull(metaData.getFunctions("", "", ""));
+ }
+
+ @Test
+ public void getFunctionColumns() throws SQLException {
+ Assert.assertNotNull(metaData.getFunctionColumns("", "", "", ""));
+ }
+
+ @Test
+ public void getPseudoColumns() throws SQLException {
+ Assert.assertNotNull(metaData.getPseudoColumns("", "", "", ""));
+ }
+
+ @Test
+ public void generatedKeyAlwaysReturned() throws SQLException {
+ Assert.assertFalse(metaData.generatedKeyAlwaysReturned());
+ }
+}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/MultiThreadsWithSameStatmentTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/MultiThreadsWithSameStatmentTest.java
new file mode 100644
index 0000000000..5cb76cc0cb
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/MultiThreadsWithSameStatmentTest.java
@@ -0,0 +1,91 @@
+package com.taosdata.jdbc.cases;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.sql.*;
+import java.util.concurrent.TimeUnit;
+
+public class MultiThreadsWithSameStatmentTest {
+
+
+ private class Service {
+ public Connection conn;
+ public Statement stmt;
+
+ public Service() {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ conn = DriverManager.getConnection("jdbc:TAOS://localhost:6030/?user=root&password=taosdata");
+ stmt = conn.createStatement();
+ stmt.execute("create database if not exists jdbctest");
+ stmt.executeUpdate("create table if not exists jdbctest.weather (ts timestamp, f1 int)");
+ } catch (ClassNotFoundException | SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void release() {
+ try {
+ stmt.close();
+ conn.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Before
+ public void before() {
+ }
+
+ @Test
+ public void test() {
+ Thread t1 = new Thread(() -> {
+ try {
+ Service service = new Service();
+ ResultSet resultSet = service.stmt.executeQuery("select * from jdbctest.weather");
+ while (resultSet.next()) {
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ for (int i = 1; i <= metaData.getColumnCount(); i++) {
+ System.out.print(metaData.getColumnLabel(i) + ": " + resultSet.getString(i));
+ }
+ System.out.println();
+ }
+ resultSet.close();
+ service.release();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ });
+
+ Thread t2 = new Thread(() -> {
+ while (true) {
+ try {
+ Service service = new Service();
+ service.stmt.executeUpdate("insert into jdbctest.weather values(now,1)");
+ service.release();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ });
+ t1.start();
+ sleep(1000);
+ t2.start();
+ }
+
+ private void sleep(long mills) {
+ try {
+ TimeUnit.MILLISECONDS.sleep(mills);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @After
+ public void after() {
+ }
+}
diff --git a/src/connector/python/linux/python2/setup.py b/src/connector/python/linux/python2/setup.py
index 92a931b504..2cad664307 100644
--- a/src/connector/python/linux/python2/setup.py
+++ b/src/connector/python/linux/python2/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="taos",
- version="2.0.3",
+ version="2.0.4",
author="Taosdata Inc.",
author_email="support@taosdata.com",
description="TDengine python client package",
diff --git a/src/connector/python/linux/python2/taos/cursor.py b/src/connector/python/linux/python2/taos/cursor.py
index 82a01be671..ada83d72c5 100644
--- a/src/connector/python/linux/python2/taos/cursor.py
+++ b/src/connector/python/linux/python2/taos/cursor.py
@@ -184,7 +184,7 @@ class TDengineCursor(object):
return False
- def fetchall(self):
+ def fetchall_row(self):
"""Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples). Note that the cursor's arraysize attribute can affect the performance of this operation.
"""
if self._result is None or self._fields is None:
@@ -203,7 +203,7 @@ class TDengineCursor(object):
for i in range(len(self._fields)):
buffer[i].extend(block[i])
return list(map(tuple, zip(*buffer)))
- def fetchall_block(self):
+ def fetchall(self):
if self._result is None or self._fields is None:
raise OperationalError("Invalid use of fetchall")
diff --git a/src/connector/python/linux/python3/setup.py b/src/connector/python/linux/python3/setup.py
index 655a12ad13..e238372cd3 100644
--- a/src/connector/python/linux/python3/setup.py
+++ b/src/connector/python/linux/python3/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="taos",
- version="2.0.3",
+ version="2.0.4",
author="Taosdata Inc.",
author_email="support@taosdata.com",
description="TDengine python client package",
diff --git a/src/connector/python/linux/python3/taos/cursor.py b/src/connector/python/linux/python3/taos/cursor.py
index 0ce20f0eda..f972d2ff07 100644
--- a/src/connector/python/linux/python3/taos/cursor.py
+++ b/src/connector/python/linux/python3/taos/cursor.py
@@ -192,7 +192,7 @@ class TDengineCursor(object):
return False
- def fetchall(self):
+ def fetchall_row(self):
"""Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples). Note that the cursor's arraysize attribute can affect the performance of this operation.
"""
if self._result is None or self._fields is None:
@@ -212,7 +212,7 @@ class TDengineCursor(object):
buffer[i].extend(block[i])
return list(map(tuple, zip(*buffer)))
- def fetchall_block(self):
+ def fetchall(self):
if self._result is None or self._fields is None:
raise OperationalError("Invalid use of fetchall")
diff --git a/src/connector/python/windows/python2/setup.py b/src/connector/python/windows/python2/setup.py
index 5ddbe83011..333f5bedad 100644
--- a/src/connector/python/windows/python2/setup.py
+++ b/src/connector/python/windows/python2/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="taos",
- version="2.0.3",
+ version="2.0.4",
author="Taosdata Inc.",
author_email="support@taosdata.com",
description="TDengine python client package",
diff --git a/src/connector/python/windows/python2/taos/cursor.py b/src/connector/python/windows/python2/taos/cursor.py
index f6fde2619b..958466985e 100644
--- a/src/connector/python/windows/python2/taos/cursor.py
+++ b/src/connector/python/windows/python2/taos/cursor.py
@@ -138,7 +138,7 @@ class TDengineCursor(object):
def fetchmany(self):
pass
- def fetchall(self):
+ def fetchall_row(self):
"""Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples). Note that the cursor's arraysize attribute can affect the performance of this operation.
"""
if self._result is None or self._fields is None:
@@ -158,7 +158,7 @@ class TDengineCursor(object):
buffer[i].extend(block[i])
return list(map(tuple, zip(*buffer)))
- def fetchall_block(self):
+ def fetchall(self):
if self._result is None or self._fields is None:
raise OperationalError("Invalid use of fetchall")
diff --git a/src/connector/python/windows/python3/setup.py b/src/connector/python/windows/python3/setup.py
index ffed304c85..f29fec121b 100644
--- a/src/connector/python/windows/python3/setup.py
+++ b/src/connector/python/windows/python3/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
setuptools.setup(
name="taos",
- version="2.0.3",
+ version="2.0.4",
author="Taosdata Inc.",
author_email="support@taosdata.com",
description="TDengine python client package",
diff --git a/src/connector/python/windows/python3/taos/cursor.py b/src/connector/python/windows/python3/taos/cursor.py
index db66b99d3b..bbac1b1dd5 100644
--- a/src/connector/python/windows/python3/taos/cursor.py
+++ b/src/connector/python/windows/python3/taos/cursor.py
@@ -139,7 +139,7 @@ class TDengineCursor(object):
def fetchmany(self):
pass
- def fetchall(self):
+ def fetchall_row(self):
"""Fetch all (remaining) rows of a query result, returning them as a sequence of sequences (e.g. a list of tuples). Note that the cursor's arraysize attribute can affect the performance of this operation.
"""
if self._result is None or self._fields is None:
@@ -159,7 +159,7 @@ class TDengineCursor(object):
buffer[i].extend(block[i])
return list(map(tuple, zip(*buffer)))
- def fetchall_block(self):
+ def fetchall(self):
if self._result is None or self._fields is None:
raise OperationalError("Invalid use of fetchall")
diff --git a/src/dnode/src/dnodeShell.c b/src/dnode/src/dnodeShell.c
index 79cc70005b..fbdf7f7b40 100644
--- a/src/dnode/src/dnodeShell.c
+++ b/src/dnode/src/dnodeShell.c
@@ -216,7 +216,7 @@ void *dnodeSendCfgTableToRecv(int32_t vgId, int32_t tid) {
int16_t numOfTags = htons(pTable->numOfTags);
int32_t tableId = htonl(pTable->tid);
uint64_t uid = htobe64(pTable->uid);
- dInfo("table:%s, numOfColumns:%d numOfTags:%d tid:%d uid:%" PRIu64, pTable->tableId, numOfColumns, numOfTags, tableId, uid);
+ dInfo("table:%s, numOfColumns:%d numOfTags:%d tid:%d uid:%" PRIu64, pTable->tableFname, numOfColumns, numOfTags, tableId, uid);
return rpcRsp.pCont;
}
diff --git a/src/inc/taos.h b/src/inc/taos.h
index 5e4f50e31d..05d390ffd0 100644
--- a/src/inc/taos.h
+++ b/src/inc/taos.h
@@ -140,7 +140,7 @@ DLL_EXPORT int taos_errno(TAOS_RES *tres);
DLL_EXPORT void taos_query_a(TAOS *taos, const char *sql, void (*fp)(void *param, TAOS_RES *, int code), void *param);
DLL_EXPORT void taos_fetch_rows_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, int numOfRows), void *param);
-DLL_EXPORT void taos_fetch_row_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row), void *param);
+//DLL_EXPORT void taos_fetch_row_a(TAOS_RES *res, void (*fp)(void *param, TAOS_RES *, TAOS_ROW row), void *param);
typedef void (*TAOS_SUBSCRIBE_CALLBACK)(TAOS_SUB* tsub, TAOS_RES *res, void* param, int code);
DLL_EXPORT TAOS_SUB *taos_subscribe(TAOS* taos, int restart, const char* topic, const char *sql, TAOS_SUBSCRIBE_CALLBACK fp, void *param, int interval);
diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h
index 493b8091e9..d751dbb969 100644
--- a/src/inc/taosdef.h
+++ b/src/inc/taosdef.h
@@ -36,29 +36,6 @@ extern "C" {
#define TSWINDOW_INITIALIZER ((STimeWindow) {INT64_MIN, INT64_MAX})
#define TSKEY_INITIAL_VAL INT64_MIN
-// ----------------- For variable data types such as TSDB_DATA_TYPE_BINARY and TSDB_DATA_TYPE_NCHAR
-typedef int32_t VarDataOffsetT;
-typedef int16_t VarDataLenT;
-
-typedef struct tstr {
- VarDataLenT len;
- char data[];
-} tstr;
-
-#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
-
-#define varDataLen(v) ((VarDataLenT *)(v))[0]
-#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
-#define varDataVal(v) ((void *)((char *)v + VARSTR_HEADER_SIZE))
-#define varDataCopy(dst, v) memcpy((dst), (void*) (v), varDataTLen(v))
-#define varDataLenByData(v) (*(VarDataLenT *)(((char*)(v)) - VARSTR_HEADER_SIZE))
-#define varDataSetLen(v, _len) (((VarDataLenT *)(v))[0] = (VarDataLenT) (_len))
-#define IS_VAR_DATA_TYPE(t) (((t) == TSDB_DATA_TYPE_BINARY) || ((t) == TSDB_DATA_TYPE_NCHAR))
-
-// this data type is internally used only in 'in' query to hold the values
-#define TSDB_DATA_TYPE_ARRAY (TSDB_DATA_TYPE_NCHAR + 1)
-
-
// Bytes for each type.
extern const int32_t TYPE_BYTES[15];
@@ -164,70 +141,6 @@ do { \
#define SET_DOUBLE_PTR(x, y) { (*(double *)(x)) = (*(double *)(y)); }
#endif
-typedef struct tDataTypeDescriptor {
- int16_t nType;
- int16_t nameLen;
- int32_t nSize;
- char * aName;
- int (*compFunc)(const char *const input, int inputSize, const int nelements, char *const output, int outputSize,
- char algorithm, char *const buffer, int bufferSize);
- int (*decompFunc)(const char *const input, int compressedSize, const int nelements, char *const output,
- int outputSize, char algorithm, char *const buffer, int bufferSize);
- void (*getStatisFunc)(const void *pData, int32_t numofrow, int64_t *min, int64_t *max, int64_t *sum,
- int16_t *minindex, int16_t *maxindex, int16_t *numofnull);
-} tDataTypeDescriptor;
-
-extern tDataTypeDescriptor tDataTypeDesc[15];
-
-bool isValidDataType(int32_t type);
-
-static FORCE_INLINE bool isNull(const char *val, int32_t type) {
- switch (type) {
- case TSDB_DATA_TYPE_BOOL:
- return *(uint8_t *)val == TSDB_DATA_BOOL_NULL;
- case TSDB_DATA_TYPE_TINYINT:
- return *(uint8_t *)val == TSDB_DATA_TINYINT_NULL;
- case TSDB_DATA_TYPE_SMALLINT:
- return *(uint16_t *)val == TSDB_DATA_SMALLINT_NULL;
- case TSDB_DATA_TYPE_INT:
- return *(uint32_t *)val == TSDB_DATA_INT_NULL;
- case TSDB_DATA_TYPE_BIGINT:
- case TSDB_DATA_TYPE_TIMESTAMP:
- return *(uint64_t *)val == TSDB_DATA_BIGINT_NULL;
- case TSDB_DATA_TYPE_FLOAT:
- return *(uint32_t *)val == TSDB_DATA_FLOAT_NULL;
- case TSDB_DATA_TYPE_DOUBLE:
- return *(uint64_t *)val == TSDB_DATA_DOUBLE_NULL;
- case TSDB_DATA_TYPE_NCHAR:
- return varDataLen(val) == sizeof(int32_t) && *(uint32_t*) varDataVal(val) == TSDB_DATA_NCHAR_NULL;
- case TSDB_DATA_TYPE_BINARY:
- return varDataLen(val) == sizeof(int8_t) && *(uint8_t *) varDataVal(val) == TSDB_DATA_BINARY_NULL;
- case TSDB_DATA_TYPE_UTINYINT:
- return *(uint8_t*) val == TSDB_DATA_UTINYINT_NULL;
- case TSDB_DATA_TYPE_USMALLINT:
- return *(uint16_t*) val == TSDB_DATA_USMALLINT_NULL;
- case TSDB_DATA_TYPE_UINT:
- return *(uint32_t*) val == TSDB_DATA_UINT_NULL;
- case TSDB_DATA_TYPE_UBIGINT:
- return *(uint64_t*) val == TSDB_DATA_UBIGINT_NULL;
-
- default:
- return false;
- };
-}
-
-void setVardataNull(char* val, int32_t type);
-void setNull(char *val, int32_t type, int32_t bytes);
-void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems);
-void* getNullValue(int32_t type);
-
-void assignVal(char *val, const char *src, int32_t len, int32_t type);
-void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size, void* buf);
-
-int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bool issigned);
-
-#define SET_DOUBLE_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_DOUBLE_NULL)
-
// TODO: check if below is necessary
#define TSDB_RELATION_INVALID 0
#define TSDB_RELATION_LESS 1
@@ -270,7 +183,7 @@ int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bo
#define TSDB_MAX_SAVED_SQL_LEN TSDB_MAX_COLUMNS * 64
#define TSDB_MAX_SQL_LEN TSDB_PAYLOAD_SIZE
#define TSDB_MAX_SQL_SHOW_LEN 512
-#define TSDB_MAX_ALLOWED_SQL_LEN (1*1024*1024U) // sql length should be less than 1mb
+#define TSDB_MAX_ALLOWED_SQL_LEN (1*1024*1024u) // sql length should be less than 1mb
#define TSDB_APPNAME_LEN TSDB_UNI_LEN
@@ -399,8 +312,8 @@ int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bo
#define TSDB_MAX_RPC_THREADS 5
-#define TSDB_QUERY_TYPE_NON_TYPE 0x00u // none type
-#define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01u // free qhandle at vnode
+#define TSDB_QUERY_TYPE_NON_TYPE 0x00u // none type
+#define TSDB_QUERY_TYPE_FREE_RESOURCE 0x01u // free qhandle at vnode
/*
* 1. ordinary sub query for select * from super_table
@@ -420,31 +333,31 @@ int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bo
#define TSDB_QUERY_TYPE_MULTITABLE_QUERY 0x200u
#define TSDB_QUERY_TYPE_STMT_INSERT 0x800u // stmt insert type
-#define TSDB_QUERY_HAS_TYPE(x, _type) (((x) & (_type)) != 0)
-#define TSDB_QUERY_SET_TYPE(x, _type) ((x) |= (_type))
-#define TSDB_QUERY_CLEAR_TYPE(x, _type) ((x) &= (~_type))
-#define TSDB_QUERY_RESET_TYPE(x) ((x) = TSDB_QUERY_TYPE_NON_TYPE)
+#define TSDB_QUERY_HAS_TYPE(x, _type) (((x) & (_type)) != 0)
+#define TSDB_QUERY_SET_TYPE(x, _type) ((x) |= (_type))
+#define TSDB_QUERY_CLEAR_TYPE(x, _type) ((x) &= (~_type))
+#define TSDB_QUERY_RESET_TYPE(x) ((x) = TSDB_QUERY_TYPE_NON_TYPE)
-#define TSDB_ORDER_ASC 1
-#define TSDB_ORDER_DESC 2
+#define TSDB_ORDER_ASC 1
+#define TSDB_ORDER_DESC 2
+
+#define TSDB_DEFAULT_CLUSTER_HASH_SIZE 1
+#define TSDB_DEFAULT_MNODES_HASH_SIZE 5
+#define TSDB_DEFAULT_DNODES_HASH_SIZE 10
+#define TSDB_DEFAULT_ACCOUNTS_HASH_SIZE 10
+#define TSDB_DEFAULT_USERS_HASH_SIZE 20
+#define TSDB_DEFAULT_DBS_HASH_SIZE 100
+#define TSDB_DEFAULT_VGROUPS_HASH_SIZE 100
+#define TSDB_DEFAULT_STABLES_HASH_SIZE 100
+#define TSDB_DEFAULT_CTABLES_HASH_SIZE 20000
-#define TSDB_DEFAULT_CLUSTER_HASH_SIZE 1
-#define TSDB_DEFAULT_MNODES_HASH_SIZE 5
-#define TSDB_DEFAULT_DNODES_HASH_SIZE 10
-#define TSDB_DEFAULT_ACCOUNTS_HASH_SIZE 10
-#define TSDB_DEFAULT_USERS_HASH_SIZE 20
-#define TSDB_DEFAULT_DBS_HASH_SIZE 100
-#define TSDB_DEFAULT_VGROUPS_HASH_SIZE 100
-#define TSDB_DEFAULT_STABLES_HASH_SIZE 100
-#define TSDB_DEFAULT_CTABLES_HASH_SIZE 20000
+#define TSDB_PORT_DNODESHELL 0
+#define TSDB_PORT_DNODEDNODE 5
+#define TSDB_PORT_SYNC 10
+#define TSDB_PORT_HTTP 11
+#define TSDB_PORT_ARBITRATOR 12
-#define TSDB_PORT_DNODESHELL 0
-#define TSDB_PORT_DNODEDNODE 5
-#define TSDB_PORT_SYNC 10
-#define TSDB_PORT_HTTP 11
-#define TSDB_PORT_ARBITRATOR 12
-
-#define TSDB_MAX_WAL_SIZE (1024*1024*2)
+#define TSDB_MAX_WAL_SIZE (1024*1024*3)
typedef enum {
TAOS_QTYPE_RPC = 0,
diff --git a/src/inc/taosmsg.h b/src/inc/taosmsg.h
index 905867fbc7..4582efbc40 100644
--- a/src/inc/taosmsg.h
+++ b/src/inc/taosmsg.h
@@ -153,30 +153,31 @@ enum _mgmt_table {
#define TSDB_ALTER_TABLE_DROP_COLUMN 6
#define TSDB_ALTER_TABLE_CHANGE_COLUMN 7
-#define TSDB_FILL_NONE 0
-#define TSDB_FILL_NULL 1
-#define TSDB_FILL_SET_VALUE 2
-#define TSDB_FILL_LINEAR 3
-#define TSDB_FILL_PREV 4
+#define TSDB_FILL_NONE 0
+#define TSDB_FILL_NULL 1
+#define TSDB_FILL_SET_VALUE 2
+#define TSDB_FILL_LINEAR 3
+#define TSDB_FILL_PREV 4
+#define TSDB_FILL_NEXT 5
-#define TSDB_ALTER_USER_PASSWD 0x1
+#define TSDB_ALTER_USER_PASSWD 0x1
#define TSDB_ALTER_USER_PRIVILEGES 0x2
-#define TSDB_KILL_MSG_LEN 30
+#define TSDB_KILL_MSG_LEN 30
-#define TSDB_VN_READ_ACCCESS ((char)0x1)
-#define TSDB_VN_WRITE_ACCCESS ((char)0x2)
+#define TSDB_VN_READ_ACCCESS ((char)0x1)
+#define TSDB_VN_WRITE_ACCCESS ((char)0x2)
#define TSDB_VN_ALL_ACCCESS (TSDB_VN_READ_ACCCESS | TSDB_VN_WRITE_ACCCESS)
-#define TSDB_COL_NORMAL 0x0u // the normal column of the table
-#define TSDB_COL_TAG 0x1u // the tag column type
-#define TSDB_COL_UDC 0x2u // the user specified normal string column, it is a dummy column
-#define TSDB_COL_NULL 0x4u // the column filter NULL or not
+#define TSDB_COL_NORMAL 0x0u // the normal column of the table
+#define TSDB_COL_TAG 0x1u // the tag column type
+#define TSDB_COL_UDC 0x2u // the user specified normal string column, it is a dummy column
+#define TSDB_COL_NULL 0x4u // the column filter NULL or not
-#define TSDB_COL_IS_TAG(f) (((f&(~(TSDB_COL_NULL)))&TSDB_COL_TAG) != 0)
-#define TSDB_COL_IS_NORMAL_COL(f) ((f&(~(TSDB_COL_NULL))) == TSDB_COL_NORMAL)
-#define TSDB_COL_IS_UD_COL(f) ((f&(~(TSDB_COL_NULL))) == TSDB_COL_UDC)
-#define TSDB_COL_REQ_NULL(f) (((f)&TSDB_COL_NULL) != 0)
+#define TSDB_COL_IS_TAG(f) (((f&(~(TSDB_COL_NULL)))&TSDB_COL_TAG) != 0)
+#define TSDB_COL_IS_NORMAL_COL(f) ((f&(~(TSDB_COL_NULL))) == TSDB_COL_NORMAL)
+#define TSDB_COL_IS_UD_COL(f) ((f&(~(TSDB_COL_NULL))) == TSDB_COL_UDC)
+#define TSDB_COL_REQ_NULL(f) (((f)&TSDB_COL_NULL) != 0)
extern char *taosMsg[];
@@ -260,14 +261,14 @@ typedef struct {
uint64_t uid;
uint64_t superTableUid;
uint64_t createdTime;
- char tableId[TSDB_TABLE_FNAME_LEN];
- char superTableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
+ char stableFname[TSDB_TABLE_FNAME_LEN];
char data[];
} SMDCreateTableMsg;
typedef struct {
int32_t len; // one create table message
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
char db[TSDB_ACCT_ID_LEN + TSDB_DB_NAME_LEN];
int8_t igExists;
int8_t getMeta;
@@ -284,12 +285,12 @@ typedef struct {
} SCMCreateTableMsg;
typedef struct {
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
int8_t igNotExists;
} SCMDropTableMsg;
typedef struct {
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
char db[TSDB_ACCT_ID_LEN + TSDB_DB_NAME_LEN];
int16_t type; /* operation type */
int16_t numOfCols; /* number of schema */
@@ -369,14 +370,14 @@ typedef struct {
int32_t vgId;
int32_t tid;
uint64_t uid;
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
} SMDDropTableMsg;
typedef struct {
int32_t contLen;
int32_t vgId;
uint64_t uid;
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
} SDropSTableMsg;
typedef struct {
@@ -688,7 +689,7 @@ typedef struct {
} SCreateVnodeMsg, SAlterVnodeMsg;
typedef struct {
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
int16_t createFlag;
char tags[];
} STableInfoMsg;
@@ -726,7 +727,7 @@ typedef struct {
typedef struct STableMetaMsg {
int32_t contLen;
- char tableId[TSDB_TABLE_FNAME_LEN]; // table id
+ char tableFname[TSDB_TABLE_FNAME_LEN]; // table id
uint8_t numOfTags;
uint8_t precision;
uint8_t tableType;
@@ -847,7 +848,7 @@ typedef struct {
uint64_t uid;
uint64_t stime; // stream starting time
int32_t status;
- char tableId[TSDB_TABLE_FNAME_LEN];
+ char tableFname[TSDB_TABLE_FNAME_LEN];
} SAlterStreamMsg;
typedef struct {
diff --git a/src/inc/ttokendef.h b/src/inc/ttokendef.h
index a4de75e938..031857df09 100644
--- a/src/inc/ttokendef.h
+++ b/src/inc/ttokendef.h
@@ -83,146 +83,146 @@
#define TK_STABLES 64
#define TK_VGROUPS 65
#define TK_DROP 66
-#define TK_DNODE 67
-#define TK_USER 68
-#define TK_ACCOUNT 69
-#define TK_USE 70
-#define TK_DESCRIBE 71
-#define TK_ALTER 72
-#define TK_PASS 73
-#define TK_PRIVILEGE 74
-#define TK_LOCAL 75
-#define TK_IF 76
-#define TK_EXISTS 77
-#define TK_PPS 78
-#define TK_TSERIES 79
-#define TK_DBS 80
-#define TK_STORAGE 81
-#define TK_QTIME 82
-#define TK_CONNS 83
-#define TK_STATE 84
-#define TK_KEEP 85
-#define TK_CACHE 86
-#define TK_REPLICA 87
-#define TK_QUORUM 88
-#define TK_DAYS 89
-#define TK_MINROWS 90
-#define TK_MAXROWS 91
-#define TK_BLOCKS 92
-#define TK_CTIME 93
-#define TK_WAL 94
-#define TK_FSYNC 95
-#define TK_COMP 96
-#define TK_PRECISION 97
-#define TK_UPDATE 98
-#define TK_CACHELAST 99
-#define TK_LP 100
-#define TK_RP 101
-#define TK_UNSIGNED 102
-#define TK_TAGS 103
-#define TK_USING 104
-#define TK_AS 105
-#define TK_COMMA 106
-#define TK_NULL 107
-#define TK_SELECT 108
-#define TK_UNION 109
-#define TK_ALL 110
-#define TK_DISTINCT 111
-#define TK_FROM 112
-#define TK_VARIABLE 113
-#define TK_INTERVAL 114
-#define TK_FILL 115
-#define TK_SLIDING 116
-#define TK_ORDER 117
-#define TK_BY 118
-#define TK_ASC 119
-#define TK_DESC 120
-#define TK_GROUP 121
-#define TK_HAVING 122
-#define TK_LIMIT 123
-#define TK_OFFSET 124
-#define TK_SLIMIT 125
-#define TK_SOFFSET 126
-#define TK_WHERE 127
-#define TK_NOW 128
-#define TK_RESET 129
-#define TK_QUERY 130
-#define TK_ADD 131
-#define TK_COLUMN 132
-#define TK_TAG 133
-#define TK_CHANGE 134
-#define TK_SET 135
-#define TK_KILL 136
-#define TK_CONNECTION 137
-#define TK_STREAM 138
-#define TK_COLON 139
-#define TK_ABORT 140
-#define TK_AFTER 141
-#define TK_ATTACH 142
-#define TK_BEFORE 143
-#define TK_BEGIN 144
-#define TK_CASCADE 145
-#define TK_CLUSTER 146
-#define TK_CONFLICT 147
-#define TK_COPY 148
-#define TK_DEFERRED 149
-#define TK_DELIMITERS 150
-#define TK_DETACH 151
-#define TK_EACH 152
-#define TK_END 153
-#define TK_EXPLAIN 154
-#define TK_FAIL 155
-#define TK_FOR 156
-#define TK_IGNORE 157
-#define TK_IMMEDIATE 158
-#define TK_INITIALLY 159
-#define TK_INSTEAD 160
-#define TK_MATCH 161
-#define TK_KEY 162
-#define TK_OF 163
-#define TK_RAISE 164
-#define TK_REPLACE 165
-#define TK_RESTRICT 166
-#define TK_ROW 167
-#define TK_STATEMENT 168
-#define TK_TRIGGER 169
-#define TK_VIEW 170
-#define TK_COUNT 171
-#define TK_SUM 172
-#define TK_AVG 173
-#define TK_MIN 174
-#define TK_MAX 175
-#define TK_FIRST 176
-#define TK_LAST 177
-#define TK_TOP 178
-#define TK_BOTTOM 179
-#define TK_STDDEV 180
-#define TK_PERCENTILE 181
-#define TK_APERCENTILE 182
-#define TK_LEASTSQUARES 183
-#define TK_HISTOGRAM 184
-#define TK_DIFF 185
-#define TK_SPREAD 186
-#define TK_TWA 187
-#define TK_INTERP 188
-#define TK_LAST_ROW 189
-#define TK_RATE 190
-#define TK_IRATE 191
-#define TK_SUM_RATE 192
-#define TK_SUM_IRATE 193
-#define TK_AVG_RATE 194
-#define TK_AVG_IRATE 195
-#define TK_TBID 196
-#define TK_SEMI 197
-#define TK_NONE 198
-#define TK_PREV 199
-#define TK_LINEAR 200
-#define TK_IMPORT 201
-#define TK_METRIC 202
-#define TK_TBNAME 203
-#define TK_JOIN 204
-#define TK_METRICS 205
-#define TK_STABLE 206
+#define TK_STABLE 67
+#define TK_DNODE 68
+#define TK_USER 69
+#define TK_ACCOUNT 70
+#define TK_USE 71
+#define TK_DESCRIBE 72
+#define TK_ALTER 73
+#define TK_PASS 74
+#define TK_PRIVILEGE 75
+#define TK_LOCAL 76
+#define TK_IF 77
+#define TK_EXISTS 78
+#define TK_PPS 79
+#define TK_TSERIES 80
+#define TK_DBS 81
+#define TK_STORAGE 82
+#define TK_QTIME 83
+#define TK_CONNS 84
+#define TK_STATE 85
+#define TK_KEEP 86
+#define TK_CACHE 87
+#define TK_REPLICA 88
+#define TK_QUORUM 89
+#define TK_DAYS 90
+#define TK_MINROWS 91
+#define TK_MAXROWS 92
+#define TK_BLOCKS 93
+#define TK_CTIME 94
+#define TK_WAL 95
+#define TK_FSYNC 96
+#define TK_COMP 97
+#define TK_PRECISION 98
+#define TK_UPDATE 99
+#define TK_CACHELAST 100
+#define TK_LP 101
+#define TK_RP 102
+#define TK_UNSIGNED 103
+#define TK_TAGS 104
+#define TK_USING 105
+#define TK_AS 106
+#define TK_COMMA 107
+#define TK_NULL 108
+#define TK_SELECT 109
+#define TK_UNION 110
+#define TK_ALL 111
+#define TK_DISTINCT 112
+#define TK_FROM 113
+#define TK_VARIABLE 114
+#define TK_INTERVAL 115
+#define TK_FILL 116
+#define TK_SLIDING 117
+#define TK_ORDER 118
+#define TK_BY 119
+#define TK_ASC 120
+#define TK_DESC 121
+#define TK_GROUP 122
+#define TK_HAVING 123
+#define TK_LIMIT 124
+#define TK_OFFSET 125
+#define TK_SLIMIT 126
+#define TK_SOFFSET 127
+#define TK_WHERE 128
+#define TK_NOW 129
+#define TK_RESET 130
+#define TK_QUERY 131
+#define TK_ADD 132
+#define TK_COLUMN 133
+#define TK_TAG 134
+#define TK_CHANGE 135
+#define TK_SET 136
+#define TK_KILL 137
+#define TK_CONNECTION 138
+#define TK_STREAM 139
+#define TK_COLON 140
+#define TK_ABORT 141
+#define TK_AFTER 142
+#define TK_ATTACH 143
+#define TK_BEFORE 144
+#define TK_BEGIN 145
+#define TK_CASCADE 146
+#define TK_CLUSTER 147
+#define TK_CONFLICT 148
+#define TK_COPY 149
+#define TK_DEFERRED 150
+#define TK_DELIMITERS 151
+#define TK_DETACH 152
+#define TK_EACH 153
+#define TK_END 154
+#define TK_EXPLAIN 155
+#define TK_FAIL 156
+#define TK_FOR 157
+#define TK_IGNORE 158
+#define TK_IMMEDIATE 159
+#define TK_INITIALLY 160
+#define TK_INSTEAD 161
+#define TK_MATCH 162
+#define TK_KEY 163
+#define TK_OF 164
+#define TK_RAISE 165
+#define TK_REPLACE 166
+#define TK_RESTRICT 167
+#define TK_ROW 168
+#define TK_STATEMENT 169
+#define TK_TRIGGER 170
+#define TK_VIEW 171
+#define TK_COUNT 172
+#define TK_SUM 173
+#define TK_AVG 174
+#define TK_MIN 175
+#define TK_MAX 176
+#define TK_FIRST 177
+#define TK_LAST 178
+#define TK_TOP 179
+#define TK_BOTTOM 180
+#define TK_STDDEV 181
+#define TK_PERCENTILE 182
+#define TK_APERCENTILE 183
+#define TK_LEASTSQUARES 184
+#define TK_HISTOGRAM 185
+#define TK_DIFF 186
+#define TK_SPREAD 187
+#define TK_TWA 188
+#define TK_INTERP 189
+#define TK_LAST_ROW 190
+#define TK_RATE 191
+#define TK_IRATE 192
+#define TK_SUM_RATE 193
+#define TK_SUM_IRATE 194
+#define TK_AVG_RATE 195
+#define TK_AVG_IRATE 196
+#define TK_TBID 197
+#define TK_SEMI 198
+#define TK_NONE 199
+#define TK_PREV 200
+#define TK_LINEAR 201
+#define TK_IMPORT 202
+#define TK_METRIC 203
+#define TK_TBNAME 204
+#define TK_JOIN 205
+#define TK_METRICS 206
#define TK_INSERT 207
#define TK_INTO 208
#define TK_VALUES 209
diff --git a/src/inc/ttype.h b/src/inc/ttype.h
index 1849139df1..686c986f5b 100644
--- a/src/inc/ttype.h
+++ b/src/inc/ttype.h
@@ -7,6 +7,28 @@ extern "C" {
#include "taosdef.h"
+// ----------------- For variable data types such as TSDB_DATA_TYPE_BINARY and TSDB_DATA_TYPE_NCHAR
+typedef int32_t VarDataOffsetT;
+typedef int16_t VarDataLenT;
+
+typedef struct tstr {
+ VarDataLenT len;
+ char data[];
+} tstr;
+
+#define VARSTR_HEADER_SIZE sizeof(VarDataLenT)
+
+#define varDataLen(v) ((VarDataLenT *)(v))[0]
+#define varDataTLen(v) (sizeof(VarDataLenT) + varDataLen(v))
+#define varDataVal(v) ((void *)((char *)v + VARSTR_HEADER_SIZE))
+#define varDataCopy(dst, v) memcpy((dst), (void*) (v), varDataTLen(v))
+#define varDataLenByData(v) (*(VarDataLenT *)(((char*)(v)) - VARSTR_HEADER_SIZE))
+#define varDataSetLen(v, _len) (((VarDataLenT *)(v))[0] = (VarDataLenT) (_len))
+#define IS_VAR_DATA_TYPE(t) (((t) == TSDB_DATA_TYPE_BINARY) || ((t) == TSDB_DATA_TYPE_NCHAR))
+
+// this data type is internally used only in 'in' query to hold the values
+#define TSDB_DATA_TYPE_ARRAY (TSDB_DATA_TYPE_NCHAR + 1)
+
#define GET_TYPED_DATA(_v, _finalType, _type, _data) \
do { \
switch (_type) { \
@@ -59,6 +81,70 @@ extern "C" {
#define IS_VALID_UINT(_t) ((_t) >= 0 && (_t) < UINT32_MAX)
#define IS_VALID_UBIGINT(_t) ((_t) >= 0 && (_t) < UINT64_MAX)
+static FORCE_INLINE bool isNull(const char *val, int32_t type) {
+ switch (type) {
+ case TSDB_DATA_TYPE_BOOL:
+ return *(uint8_t *)val == TSDB_DATA_BOOL_NULL;
+ case TSDB_DATA_TYPE_TINYINT:
+ return *(uint8_t *)val == TSDB_DATA_TINYINT_NULL;
+ case TSDB_DATA_TYPE_SMALLINT:
+ return *(uint16_t *)val == TSDB_DATA_SMALLINT_NULL;
+ case TSDB_DATA_TYPE_INT:
+ return *(uint32_t *)val == TSDB_DATA_INT_NULL;
+ case TSDB_DATA_TYPE_BIGINT:
+ case TSDB_DATA_TYPE_TIMESTAMP:
+ return *(uint64_t *)val == TSDB_DATA_BIGINT_NULL;
+ case TSDB_DATA_TYPE_FLOAT:
+ return *(uint32_t *)val == TSDB_DATA_FLOAT_NULL;
+ case TSDB_DATA_TYPE_DOUBLE:
+ return *(uint64_t *)val == TSDB_DATA_DOUBLE_NULL;
+ case TSDB_DATA_TYPE_NCHAR:
+ return varDataLen(val) == sizeof(int32_t) && *(uint32_t*) varDataVal(val) == TSDB_DATA_NCHAR_NULL;
+ case TSDB_DATA_TYPE_BINARY:
+ return varDataLen(val) == sizeof(int8_t) && *(uint8_t *) varDataVal(val) == TSDB_DATA_BINARY_NULL;
+ case TSDB_DATA_TYPE_UTINYINT:
+ return *(uint8_t*) val == TSDB_DATA_UTINYINT_NULL;
+ case TSDB_DATA_TYPE_USMALLINT:
+ return *(uint16_t*) val == TSDB_DATA_USMALLINT_NULL;
+ case TSDB_DATA_TYPE_UINT:
+ return *(uint32_t*) val == TSDB_DATA_UINT_NULL;
+ case TSDB_DATA_TYPE_UBIGINT:
+ return *(uint64_t*) val == TSDB_DATA_UBIGINT_NULL;
+
+ default:
+ return false;
+ };
+}
+
+typedef struct tDataTypeDescriptor {
+ int16_t type;
+ int16_t nameLen;
+ int32_t bytes;
+ char * name;
+ int (*compFunc)(const char *const input, int inputSize, const int nelements, char *const output, int outputSize,
+ char algorithm, char *const buffer, int bufferSize);
+ int (*decompFunc)(const char *const input, int compressedSize, const int nelements, char *const output,
+ int outputSize, char algorithm, char *const buffer, int bufferSize);
+ void (*statisFunc)(const void *pData, int32_t numofrow, int64_t *min, int64_t *max, int64_t *sum,
+ int16_t *minindex, int16_t *maxindex, int16_t *numofnull);
+} tDataTypeDescriptor;
+
+extern tDataTypeDescriptor tDataTypes[15];
+
+bool isValidDataType(int32_t type);
+
+void setVardataNull(char* val, int32_t type);
+void setNull(char *val, int32_t type, int32_t bytes);
+void setNullN(char *val, int32_t type, int32_t bytes, int32_t numOfElems);
+void* getNullValue(int32_t type);
+
+void assignVal(char *val, const char *src, int32_t len, int32_t type);
+void tsDataSwap(void *pLeft, void *pRight, int32_t type, int32_t size, void* buf);
+
+int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bool issigned);
+
+#define SET_DOUBLE_NULL(v) (*(uint64_t *)(v) = TSDB_DATA_DOUBLE_NULL)
+
#ifdef __cplusplus
}
#endif
diff --git a/src/kit/taosdemox/taosdemox.c b/src/kit/taosdemox/taosdemox.c
index 5c187030c5..2968d65331 100644
--- a/src/kit/taosdemox/taosdemox.c
+++ b/src/kit/taosdemox/taosdemox.c
@@ -1085,8 +1085,8 @@ static void printfQueryMeta() {
printf("database name: \033[33m%s\033[0m\n", g_queryInfo.dbName);
printf("\n");
- printf("super table query info: \n");
- printf("rate: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.rate);
+ printf("specified table query info: \n");
+ printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.rate);
printf("concurrent: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.concurrent);
printf("sqlCount: \033[33m%d\033[0m\n", g_queryInfo.superQueryInfo.sqlCount);
@@ -1102,11 +1102,11 @@ static void printfQueryMeta() {
printf(" sql[%d]: \033[33m%s\033[0m\n", i, g_queryInfo.superQueryInfo.sql[i]);
}
printf("\n");
- printf("sub table query info: \n");
- printf("rate: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.rate);
+ printf("super table query info: \n");
+ printf("query interval: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.rate);
printf("threadCnt: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.threadCnt);
printf("childTblCount: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.childTblCount);
- printf("childTblPrefix: \033[33m%s\033[0m\n", g_queryInfo.subQueryInfo.childTblPrefix);
+ printf("stable name: \033[33m%s\033[0m\n", g_queryInfo.subQueryInfo.sTblName);
if (SUBSCRIBE_MODE == g_jsonType) {
printf("mod: \033[33m%d\033[0m\n", g_queryInfo.subQueryInfo.subscribeMode);
@@ -4020,23 +4020,23 @@ void *superQueryProcess(void *sarg) {
}
selectAndGetResult(winfo->taos, g_queryInfo.superQueryInfo.sql[i], tmpFile);
int64_t t2 = taosGetTimestampUs();
- printf("taosc select sql return, Spent %f s\n", (t2 - t1)/1000000.0);
+ printf("=[taosc] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0);
} else {
#ifdef TD_LOWA_CURL
int64_t t1 = taosGetTimestampUs();
int retCode = curlProceSql(g_queryInfo.host, g_queryInfo.port, g_queryInfo.superQueryInfo.sql[i], winfo->curl_handle);
int64_t t2 = taosGetTimestampUs();
- printf("http select sql return, Spent %f s \n", (t2 - t1)/1000000.0);
+ printf("=[restful] thread[%"PRIu64"] complete one sql, Spent %f s\n", (uint64_t)pthread_self(), (t2 - t1)/1000000.0);
if (0 != retCode) {
- printf("========curl return fail, threadID[%d]\n", winfo->threadID);
+ printf("====curl return fail, threadID[%d]\n", winfo->threadID);
return NULL;
}
#endif
}
}
et = taosGetTimestampMs();
- printf("========thread[%"PRIu64"] complete all sqls to super table once queries duration:%.6fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0);
+ printf("==thread[%"PRIu64"] complete all sqls to specify tables once queries duration:%.6fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0);
}
return NULL;
}
@@ -4065,7 +4065,7 @@ void *subQueryProcess(void *sarg) {
char sqlstr[1024];
threadInfo *winfo = (threadInfo *)sarg;
int64_t st = 0;
- int64_t et = 0;
+ int64_t et = g_queryInfo.subQueryInfo.rate*1000;
while (1) {
if (g_queryInfo.subQueryInfo.rate && (et - st) < g_queryInfo.subQueryInfo.rate*1000) {
taosMsleep(g_queryInfo.subQueryInfo.rate*1000 - (et - st)); // ms
@@ -4085,17 +4085,12 @@ void *subQueryProcess(void *sarg) {
}
}
et = taosGetTimestampMs();
- printf("========thread[%"PRIu64"] complete all sqls to allocate all sub-tables once queries duration:%.4fs\n\n", (uint64_t)pthread_self(), (double)(et - st)/1000.0);
+ printf("####thread[%"PRIu64"] complete all sqls to allocate all sub-tables[%d - %d] once queries duration:%.4fs\n\n", (uint64_t)pthread_self(), winfo->start_table_id, winfo->end_table_id, (double)(et - st)/1000.0);
}
return NULL;
}
int queryTestProcess() {
- printfQueryMeta();
-
- printf("Press enter key to continue\n\n");
- (void)getchar();
-
TAOS * taos = NULL;
taos_init();
taos = taos_connect(g_queryInfo.host, g_queryInfo.user, g_queryInfo.password, g_queryInfo.dbName, g_queryInfo.port);
@@ -4108,9 +4103,13 @@ int queryTestProcess() {
(void)getAllChildNameOfSuperTable(taos, g_queryInfo.dbName, g_queryInfo.subQueryInfo.sTblName, &g_queryInfo.subQueryInfo.childTblName, &g_queryInfo.subQueryInfo.childTblCount);
}
+ printfQueryMeta();
+ printf("Press enter key to continue\n\n");
+ (void)getchar();
+
pthread_t *pids = NULL;
threadInfo *infos = NULL;
- //==== create sub threads for query from super table
+ //==== create sub threads for query from specify table
if (g_queryInfo.superQueryInfo.sqlCount > 0 && g_queryInfo.superQueryInfo.concurrent > 0) {
pids = malloc(g_queryInfo.superQueryInfo.concurrent * sizeof(pthread_t));
@@ -4146,7 +4145,7 @@ int queryTestProcess() {
pthread_t *pidsOfSub = NULL;
threadInfo *infosOfSub = NULL;
- //==== create sub threads for query from sub table
+ //==== create sub threads for query from all sub table of the super table
if ((g_queryInfo.subQueryInfo.sqlCount > 0) && (g_queryInfo.subQueryInfo.threadCnt > 0)) {
pidsOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(pthread_t));
infosOfSub = malloc(g_queryInfo.subQueryInfo.threadCnt * sizeof(threadInfo));
@@ -4177,6 +4176,7 @@ int queryTestProcess() {
t_info->start_table_id = last;
t_info->end_table_id = i < b ? last + a : last + a - 1;
+ last = t_info->end_table_id + 1;
t_info->taos = taos;
pthread_create(pidsOfSub + i, NULL, subQueryProcess, t_info);
}
diff --git a/src/mnode/src/mnodeCluster.c b/src/mnode/src/mnodeCluster.c
index a35e304810..7892918a39 100644
--- a/src/mnode/src/mnodeCluster.c
+++ b/src/mnode/src/mnodeCluster.c
@@ -195,7 +195,7 @@ static int32_t mnodeGetClusterMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *
cols++;
pMeta->numOfColumns = htons(cols);
- strcpy(pMeta->tableId, "show cluster");
+ strcpy(pMeta->tableFname, "show cluster");
pShow->numOfColumns = cols;
pShow->offset[0] = 0;
diff --git a/src/mnode/src/mnodeProfile.c b/src/mnode/src/mnodeProfile.c
index 7c35829f88..89dc32f03a 100644
--- a/src/mnode/src/mnodeProfile.c
+++ b/src/mnode/src/mnodeProfile.c
@@ -385,12 +385,22 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v
SConnObj *pConnObj = NULL;
int32_t cols = 0;
char * pWrite;
+ void * pIter;
char str[TSDB_IPv4ADDR_LEN + 6] = {0};
while (numOfRows < rows) {
- pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
- if (pConnObj == NULL) break;
+ pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
+ if (pConnObj == NULL) {
+ pShow->pIter = pIter;
+ break;
+ }
+ if (numOfRows + pConnObj->numOfQueries >= rows) {
+ mnodeCancelGetNextConn(pIter);
+ break;
+ }
+
+ pShow->pIter = pIter;
for (int32_t i = 0; i < pConnObj->numOfQueries; ++i) {
SQueryDesc *pDesc = pConnObj->pQueries + i;
cols = 0;
@@ -518,12 +528,22 @@ static int32_t mnodeRetrieveStreams(SShowObj *pShow, char *data, int32_t rows, v
SConnObj *pConnObj = NULL;
int32_t cols = 0;
char * pWrite;
+ void * pIter;
char ipStr[TSDB_IPv4ADDR_LEN + 6];
while (numOfRows < rows) {
- pShow->pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
- if (pConnObj == NULL) break;
+ pIter = mnodeGetNextConn(pShow->pIter, &pConnObj);
+ if (pConnObj == NULL) {
+ pShow->pIter = pIter;
+ break;
+ }
+ if (numOfRows + pConnObj->numOfStreams >= rows) {
+ mnodeCancelGetNextConn(pIter);
+ break;
+ }
+
+ pShow->pIter = pIter;
for (int32_t i = 0; i < pConnObj->numOfStreams; ++i) {
SStreamDesc *pDesc = pConnObj->pStreams + i;
cols = 0;
diff --git a/src/mnode/src/mnodeTable.c b/src/mnode/src/mnodeTable.c
index de37b09345..bdf5a7fb8b 100644
--- a/src/mnode/src/mnodeTable.c
+++ b/src/mnode/src/mnodeTable.c
@@ -68,7 +68,7 @@ static int32_t mnodeGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow,
static int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows, void *pConn);
static int32_t mnodeGetStreamTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn);
static int32_t mnodeRetrieveStreamTables(SShowObj *pShow, char *data, int32_t rows, void *pConn);
-
+
static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg);
static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg);
static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg);
@@ -164,7 +164,7 @@ static int32_t mnodeChildTableActionDelete(SSdbRow *pRow) {
SVgObj *pVgroup = NULL;
SDbObj *pDb = NULL;
SAcctObj *pAcct = NULL;
-
+
pVgroup = mnodeGetVgroup(pTable->vgId);
if (pVgroup != NULL) pDb = mnodeGetDb(pVgroup->dbName);
if (pDb != NULL) pAcct = mnodeGetAcct(pDb->acct);
@@ -180,14 +180,14 @@ static int32_t mnodeChildTableActionDelete(SSdbRow *pRow) {
grantRestore(TSDB_GRANT_TIMESERIES, pTable->numOfColumns - 1);
if (pAcct != NULL) pAcct->acctInfo.numOfTimeSeries -= (pTable->numOfColumns - 1);
}
-
+
if (pDb != NULL) mnodeRemoveTableFromDb(pDb);
if (pVgroup != NULL) mnodeRemoveTableFromVgroup(pVgroup, pTable);
mnodeDecVgroupRef(pVgroup);
mnodeDecDbRef(pDb);
mnodeDecAcctRef(pAcct);
-
+
return TSDB_CODE_SUCCESS;
}
@@ -195,19 +195,19 @@ static int32_t mnodeChildTableActionUpdate(SSdbRow *pRow) {
SCTableObj *pNew = pRow->pObj;
SCTableObj *pTable = mnodeGetChildTable(pNew->info.tableId);
if (pTable != pNew) {
- void *oldTableId = pTable->info.tableId;
+ void *oldTableId = pTable->info.tableId;
void *oldSql = pTable->sql;
void *oldSchema = pTable->schema;
void *oldSTable = pTable->superTable;
int32_t oldRefCount = pTable->refCount;
-
+
memcpy(pTable, pNew, sizeof(SCTableObj));
-
+
pTable->refCount = oldRefCount;
pTable->sql = pNew->sql;
pTable->schema = pNew->schema;
pTable->superTable = oldSTable;
-
+
free(pNew);
free(oldSql);
free(oldSchema);
@@ -544,7 +544,7 @@ static int32_t mnodeSuperTableActionDecode(SSdbRow *pRow) {
}
memcpy(pStable->schema, pRow->rowData + len, schemaSize);
-
+
pRow->pObj = pStable;
return TSDB_CODE_SUCCESS;
@@ -611,7 +611,7 @@ int32_t mnodeInitTables() {
mnodeAddWriteMsgHandle(TSDB_MSG_TYPE_CM_ALTER_TABLE, mnodeProcessAlterTableMsg);
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_TABLE_META, mnodeProcessTableMetaMsg);
mnodeAddReadMsgHandle(TSDB_MSG_TYPE_CM_STABLE_VGROUP, mnodeProcessSuperTableVgroupMsg);
-
+
mnodeAddPeerRspHandle(TSDB_MSG_TYPE_MD_CREATE_TABLE_RSP, mnodeProcessCreateChildTableRsp);
mnodeAddPeerRspHandle(TSDB_MSG_TYPE_MD_DROP_TABLE_RSP, mnodeProcessDropChildTableRsp);
mnodeAddPeerRspHandle(TSDB_MSG_TYPE_MD_DROP_STABLE_RSP, mnodeProcessDropSuperTableRsp);
@@ -750,7 +750,7 @@ void mnodeDestroySubMsg(SMnodeMsg *pSubMsg) {
static int32_t mnodeValidateCreateTableMsg(SCreateTableMsg *pCreateTable, SMnodeMsg *pMsg) {
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(pCreateTable->db);
if (pMsg->pDb == NULL) {
- mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableFname);
return TSDB_CODE_MND_DB_NOT_SELECTED;
}
@@ -759,28 +759,28 @@ static int32_t mnodeValidateCreateTableMsg(SCreateTableMsg *pCreateTable, SMnode
return TSDB_CODE_MND_DB_IN_DROPPING;
}
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreateTable->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreateTable->tableFname);
if (pMsg->pTable != NULL && pMsg->retry == 0) {
if (pCreateTable->getMeta) {
- mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableId);
+ mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableFname);
return mnodeGetChildTableMeta(pMsg);
} else if (pCreateTable->igExists) {
- mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableId);
+ mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, pCreateTable->tableFname);
return TSDB_CODE_SUCCESS;
} else {
mError("msg:%p, app:%p table:%s, failed to create, table already exist", pMsg, pMsg->rpcMsg.ahandle,
- pCreateTable->tableId);
+ pCreateTable->tableFname);
return TSDB_CODE_MND_TABLE_ALREADY_EXIST;
}
}
if (pCreateTable->numOfTags != 0) {
mDebug("msg:%p, app:%p table:%s, create stable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
- pCreateTable->tableId, pMsg->rpcMsg.handle);
+ pCreateTable->tableFname, pMsg->rpcMsg.handle);
return mnodeProcessCreateSuperTableMsg(pMsg);
} else {
mDebug("msg:%p, app:%p table:%s, create ctable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
- pCreateTable->tableId, pMsg->rpcMsg.handle);
+ pCreateTable->tableFname, pMsg->rpcMsg.handle);
return mnodeProcessCreateChildTableMsg(pMsg);
}
}
@@ -862,47 +862,46 @@ static int32_t mnodeProcessCreateTableMsg(SMnodeMsg *pMsg) {
SCreateTableMsg *p = (SCreateTableMsg*)((char*) pCreate + sizeof(SCMCreateTableMsg));
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(p->db);
if (pMsg->pDb == NULL) {
- mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, db not selected", pMsg, pMsg->rpcMsg.ahandle, p->tableFname);
return TSDB_CODE_MND_DB_NOT_SELECTED;
}
-
+
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
return TSDB_CODE_MND_DB_IN_DROPPING;
}
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(p->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(p->tableFname);
if (pMsg->pTable != NULL && pMsg->retry == 0) {
if (p->getMeta) {
- mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
+ mDebug("msg:%p, app:%p table:%s, continue to get meta", pMsg, pMsg->rpcMsg.ahandle, p->tableFname);
return mnodeGetChildTableMeta(pMsg);
} else if (p->igExists) {
- mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, p->tableId);
+ mDebug("msg:%p, app:%p table:%s, is already exist", pMsg, pMsg->rpcMsg.ahandle, p->tableFname);
return TSDB_CODE_SUCCESS;
} else {
- mError("msg:%p, app:%p table:%s, failed to create, table already exist", pMsg, pMsg->rpcMsg.ahandle,
- p->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, table already exist", pMsg, pMsg->rpcMsg.ahandle, p->tableFname);
return TSDB_CODE_MND_TABLE_ALREADY_EXIST;
}
}
if (p->numOfTags != 0) {
mDebug("msg:%p, app:%p table:%s, create stable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
- p->tableId, pMsg->rpcMsg.handle);
+ p->tableFname, pMsg->rpcMsg.handle);
return mnodeProcessCreateSuperTableMsg(pMsg);
} else {
mDebug("msg:%p, app:%p table:%s, create ctable msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
- p->tableId, pMsg->rpcMsg.handle);
+ p->tableFname, pMsg->rpcMsg.handle);
return mnodeProcessCreateChildTableMsg(pMsg);
}
}
static int32_t mnodeProcessDropTableMsg(SMnodeMsg *pMsg) {
SCMDropTableMsg *pDrop = pMsg->rpcMsg.pCont;
- if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pDrop->tableId);
+ if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pDrop->tableFname);
if (pMsg->pDb == NULL) {
mError("msg:%p, app:%p table:%s, failed to drop table, db not selected or db in dropping", pMsg,
- pMsg->rpcMsg.ahandle, pDrop->tableId);
+ pMsg->rpcMsg.ahandle, pDrop->tableFname);
return TSDB_CODE_MND_DB_NOT_SELECTED;
}
@@ -913,17 +912,17 @@ static int32_t mnodeProcessDropTableMsg(SMnodeMsg *pMsg) {
if (mnodeCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
mError("msg:%p, app:%p table:%s, failed to drop table, in monitor database", pMsg, pMsg->rpcMsg.ahandle,
- pDrop->tableId);
+ pDrop->tableFname);
return TSDB_CODE_MND_MONITOR_DB_FORBIDDEN;
}
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pDrop->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pDrop->tableFname);
if (pMsg->pTable == NULL) {
if (pDrop->igNotExists) {
- mDebug("msg:%p, app:%p table:%s is not exist, treat as success", pMsg, pMsg->rpcMsg.ahandle, pDrop->tableId);
+ mDebug("msg:%p, app:%p table:%s is not exist, treat as success", pMsg, pMsg->rpcMsg.ahandle, pDrop->tableFname);
return TSDB_CODE_SUCCESS;
} else {
- mError("msg:%p, app:%p table:%s, failed to drop, table not exist", pMsg, pMsg->rpcMsg.ahandle, pDrop->tableId);
+ mError("msg:%p, app:%p table:%s, failed to drop, table not exist", pMsg, pMsg->rpcMsg.ahandle, pDrop->tableFname);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
}
}
@@ -931,12 +930,12 @@ static int32_t mnodeProcessDropTableMsg(SMnodeMsg *pMsg) {
if (pMsg->pTable->type == TSDB_SUPER_TABLE) {
SSTableObj *pSTable = (SSTableObj *)pMsg->pTable;
mInfo("msg:%p, app:%p table:%s, start to drop stable, uid:%" PRIu64 ", numOfChildTables:%d, sizeOfVgList:%d", pMsg,
- pMsg->rpcMsg.ahandle, pDrop->tableId, pSTable->uid, pSTable->numOfTables, taosHashGetSize(pSTable->vgHash));
+ pMsg->rpcMsg.ahandle, pDrop->tableFname, pSTable->uid, pSTable->numOfTables, taosHashGetSize(pSTable->vgHash));
return mnodeProcessDropSuperTableMsg(pMsg);
} else {
SCTableObj *pCTable = (SCTableObj *)pMsg->pTable;
mInfo("msg:%p, app:%p table:%s, start to drop ctable, vgId:%d tid:%d uid:%" PRIu64, pMsg, pMsg->rpcMsg.ahandle,
- pDrop->tableId, pCTable->vgId, pCTable->tid, pCTable->uid);
+ pDrop->tableFname, pCTable->vgId, pCTable->tid, pCTable->uid);
return mnodeProcessDropChildTableMsg(pMsg);
}
}
@@ -945,29 +944,29 @@ static int32_t mnodeProcessTableMetaMsg(SMnodeMsg *pMsg) {
STableInfoMsg *pInfo = pMsg->rpcMsg.pCont;
pInfo->createFlag = htons(pInfo->createFlag);
mDebug("msg:%p, app:%p table:%s, table meta msg is received from thandle:%p, createFlag:%d", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId, pMsg->rpcMsg.handle, pInfo->createFlag);
+ pInfo->tableFname, pMsg->rpcMsg.handle, pInfo->createFlag);
- if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pInfo->tableId);
+ if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pInfo->tableFname);
if (pMsg->pDb == NULL) {
mError("msg:%p, app:%p table:%s, failed to get table meta, db not selected", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId);
+ pInfo->tableFname);
return TSDB_CODE_MND_DB_NOT_SELECTED;
}
-
+
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
return TSDB_CODE_MND_DB_IN_DROPPING;
}
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pInfo->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pInfo->tableFname);
if (pMsg->pTable == NULL) {
if (!pInfo->createFlag) {
mError("msg:%p, app:%p table:%s, failed to get table meta, table not exist", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId);
+ pInfo->tableFname);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
} else {
mDebug("msg:%p, app:%p table:%s, failed to get table meta, start auto create table ", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId);
+ pInfo->tableFname);
return mnodeAutoCreateChildTable(pMsg);
}
} else {
@@ -1007,12 +1006,12 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
SSTableObj * pStable = calloc(1, sizeof(SSTableObj));
if (pStable == NULL) {
- mError("msg:%p, app:%p table:%s, failed to create, no enough memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, no enough memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return TSDB_CODE_MND_OUT_OF_MEMORY;
}
int64_t us = taosGetTimestampUs();
- pStable->info.tableId = strdup(pCreate->tableId);
+ pStable->info.tableId = strdup(pCreate->tableFname);
pStable->info.type = TSDB_SUPER_TABLE;
pStable->createdTime = taosGetTimestampMs();
pStable->uid = (us << 24) + ((sdbGetVersion() & ((1ul << 16) - 1ul)) << 8) + (taosRand() & ((1ul << 8) - 1ul));
@@ -1026,41 +1025,27 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
pStable->schema = (SSchema *)calloc(1, schemaSize);
if (pStable->schema == NULL) {
free(pStable);
- mError("msg:%p, app:%p table:%s, failed to create, no schema input", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, no schema input", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
}
memcpy(pStable->schema, pCreate->schema, numOfCols * sizeof(SSchema));
if (pStable->numOfColumns > TSDB_MAX_COLUMNS || pStable->numOfTags > TSDB_MAX_TAGS) {
- mError("msg:%p, app:%p table:%s, failed to create, too many columns", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, too many columns", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
}
pStable->nextColId = 0;
- // TODO extract method to valid the schema
- int32_t schemaLen = 0;
- int32_t tagLen = 0;
for (int32_t col = 0; col < numOfCols; col++) {
SSchema *tschema = pStable->schema;
tschema[col].colId = pStable->nextColId++;
tschema[col].bytes = htons(tschema[col].bytes);
-
- if (col < pStable->numOfTables) {
- schemaLen += tschema[col].bytes;
- } else {
- tagLen += tschema[col].bytes;
- }
-
- if (!isValidDataType(tschema[col].type)) {
- mError("msg:%p, app:%p table:%s, failed to create, invalid data type in schema", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
- return TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG;
- }
}
- if (schemaLen > (TSDB_MAX_BYTES_PER_ROW || tagLen > TSDB_MAX_TAGS_LEN)) {
- mError("msg:%p, app:%p table:%s, failed to create, schema is too long", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ if (!isValidSchema(pStable->schema, pStable->numOfColumns, pStable->numOfTags)) {
+ mError("msg:%p, app:%p table:%s, failed to create table, invalid schema", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return TSDB_CODE_MND_INVALID_CREATE_TABLE_MSG;
}
@@ -1080,7 +1065,7 @@ static int32_t mnodeProcessCreateSuperTableMsg(SMnodeMsg *pMsg) {
if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_MND_ACTION_IN_PROGRESS) {
mnodeDestroySuperTable(pStable);
pMsg->pTable = NULL;
- mError("msg:%p, app:%p table:%s, failed to create, sdb error", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mError("msg:%p, app:%p table:%s, failed to create, sdb error", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
}
return code;
@@ -1115,7 +1100,7 @@ static int32_t mnodeProcessDropSuperTableMsg(SMnodeMsg *pMsg) {
pDrop->contLen = htonl(sizeof(SDropSTableMsg));
pDrop->vgId = htonl(pVgroup->vgId);
pDrop->uid = htobe64(pStable->uid);
- mnodeExtractTableName(pStable->info.tableId, pDrop->tableId);
+ mnodeExtractTableName(pStable->info.tableId, pDrop->tableFname);
mInfo("msg:%p, app:%p stable:%s, send drop stable msg to vgId:%d, hash:%p sizeOfVgList:%d", pMsg,
pMsg->rpcMsg.ahandle, pStable->info.tableId, pVgroup->vgId, pStable->vgHash,
@@ -1129,8 +1114,8 @@ static int32_t mnodeProcessDropSuperTableMsg(SMnodeMsg *pMsg) {
taosHashCancelIterate(pStable->vgHash, pVgId);
mnodeDropAllChildTablesInStable(pStable);
- }
-
+ }
+
SSdbRow row = {
.type = SDB_OPER_GLOBAL,
.pTable = tsSuperTableSdb,
@@ -1274,7 +1259,7 @@ static int32_t mnodeModifySuperTableTagName(SMnodeMsg *pMsg, char *oldTagName, c
if (mnodeFindSuperTableTagIndex(pStable, newTagName) >= 0) {
return TSDB_CODE_MND_TAG_ALREAY_EXIST;
}
-
+
// update
SSchema *schema = (SSchema *) (pStable->schema + pStable->numOfColumns + col);
tstrncpy(schema->name, newTagName, sizeof(schema->name));
@@ -1437,7 +1422,7 @@ static int32_t mnodeChangeSuperTableColumn(SMnodeMsg *pMsg, char *oldName, char
if (mnodeFindSuperTableColumnIndex(pStable, newName) >= 0) {
return TSDB_CODE_MND_FIELD_ALREAY_EXIST;
}
-
+
// update
SSchema *schema = (SSchema *) (pStable->schema + col);
tstrncpy(schema->name, newName, sizeof(schema->name));
@@ -1460,7 +1445,7 @@ static int32_t mnodeChangeSuperTableColumn(SMnodeMsg *pMsg, char *oldName, char
static int32_t mnodeGetShowSuperTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
@@ -1525,7 +1510,7 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows,
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return 0;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
@@ -1539,7 +1524,7 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows,
SPatternCompareInfo info = PATTERN_COMPARE_INFO_INITIALIZER;
char stableName[TSDB_TABLE_NAME_LEN] = {0};
- while (numOfRows < rows) {
+ while (numOfRows < rows) {
pShow->pIter = mnodeGetNextSuperTable(pShow->pIter, &pTable);
if (pTable == NULL) break;
if (strncmp(pTable->info.tableId, prefix, prefixLen)) {
@@ -1558,11 +1543,11 @@ int32_t mnodeRetrieveShowSuperTables(SShowObj *pShow, char *data, int32_t rows,
cols = 0;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
-
+
int16_t len = strnlen(stableName, TSDB_TABLE_NAME_LEN - 1);
*(int16_t*) pWrite = len;
pWrite += sizeof(int16_t); // todo refactor
-
+
strncpy(pWrite, stableName, len);
cols++;
@@ -1629,7 +1614,7 @@ void mnodeDropAllSuperTables(SDbObj *pDropDb) {
static int32_t mnodeSetSchemaFromSuperTable(SSchema *pSchema, SSTableObj *pTable) {
int32_t numOfCols = pTable->numOfColumns + pTable->numOfTags;
assert(numOfCols <= TSDB_MAX_COLUMNS);
-
+
for (int32_t i = 0; i < numOfCols; ++i) {
tstrncpy(pSchema->name, pTable->schema[i].name, sizeof(pSchema->name));
pSchema->type = pTable->schema[i].type;
@@ -1655,7 +1640,7 @@ static int32_t mnodeGetSuperTableMeta(SMnodeMsg *pMsg) {
pMeta->numOfColumns = htons((int16_t)pTable->numOfColumns);
pMeta->tableType = pTable->info.type;
pMeta->contLen = sizeof(STableMetaMsg) + mnodeSetSchemaFromSuperTable(pMeta->schema, pTable);
- tstrncpy(pMeta->tableId, pTable->info.tableId, sizeof(pMeta->tableId));
+ tstrncpy(pMeta->tableFname, pTable->info.tableId, sizeof(pMeta->tableFname));
pMsg->rpcRsp.len = pMeta->contLen;
pMeta->contLen = htons(pMeta->contLen);
@@ -1709,7 +1694,7 @@ static int32_t mnodeProcessSuperTableVgroupMsg(SMnodeMsg *pMsg) {
SVgroupsMsg *pVgroupMsg = (SVgroupsMsg *)msg;
pVgroupMsg->numOfVgroups = 0;
-
+
msg += sizeof(SVgroupsMsg);
} else {
SVgroupsMsg *pVgroupMsg = (SVgroupsMsg *)msg;
@@ -1798,7 +1783,7 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pCreateMsg, SCTabl
return NULL;
}
- mnodeExtractTableName(pTable->info.tableId, pCreate->tableId);
+ mnodeExtractTableName(pTable->info.tableId, pCreate->tableFname);
pCreate->contLen = htonl(contLen);
pCreate->vgId = htonl(pTable->vgId);
pCreate->tableType = pTable->info.type;
@@ -1806,9 +1791,9 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pCreateMsg, SCTabl
pCreate->tid = htonl(pTable->tid);
pCreate->sqlDataLen = htonl(pTable->sqlLen);
pCreate->uid = htobe64(pTable->uid);
-
+
if (pTable->info.type == TSDB_CHILD_TABLE) {
- mnodeExtractTableName(pTable->superTable->info.tableId, pCreate->superTableId);
+ mnodeExtractTableName(pTable->superTable->info.tableId, pCreate->stableFname);
pCreate->numOfColumns = htons(pTable->superTable->numOfColumns);
pCreate->numOfTags = htons(pTable->superTable->numOfTags);
pCreate->sversion = htonl(pTable->superTable->sversion);
@@ -1823,7 +1808,7 @@ static void *mnodeBuildCreateChildTableMsg(SCMCreateTableMsg *pCreateMsg, SCTabl
pCreate->tagDataLen = 0;
pCreate->superTableUid = 0;
}
-
+
SSchema *pSchema = (SSchema *) pCreate->data;
if (pTable->info.type == TSDB_CHILD_TABLE) {
memcpy(pSchema, pTable->superTable->schema, totalCols * sizeof(SSchema));
@@ -1922,12 +1907,12 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
SCTableObj *pTable = calloc(1, sizeof(SCTableObj));
if (pTable == NULL) {
- mError("msg:%p, app:%p table:%s, failed to alloc memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mError("msg:%p, app:%p table:%s, failed to alloc memory", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return TSDB_CODE_MND_OUT_OF_MEMORY;
}
pTable->info.type = (pCreate->numOfColumns == 0)? TSDB_CHILD_TABLE:TSDB_NORMAL_TABLE;
- pTable->info.tableId = strdup(pCreate->tableId);
+ pTable->info.tableId = strdup(pCreate->tableFname);
pTable->createdTime = taosGetTimestampMs();
pTable->tid = tid;
pTable->vgId = pVgroup->vgId;
@@ -1943,7 +1928,7 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
size_t prefixLen = tableIdPrefix(pMsg->pDb->name, prefix, 64);
if (0 != strncasecmp(prefix, stableName, prefixLen)) {
mError("msg:%p, app:%p table:%s, corresponding super table:%s not in this db", pMsg, pMsg->rpcMsg.ahandle,
- pCreate->tableId, stableName);
+ pCreate->tableFname, stableName);
mnodeDestroyChildTable(pTable);
return TSDB_CODE_TDB_INVALID_CREATE_TB_MSG;
}
@@ -1951,7 +1936,7 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
if (pMsg->pSTable == NULL) pMsg->pSTable = mnodeGetSuperTable(stableName);
if (pMsg->pSTable == NULL) {
mError("msg:%p, app:%p table:%s, corresponding super table:%s does not exist", pMsg, pMsg->rpcMsg.ahandle,
- pCreate->tableId, stableName);
+ pCreate->tableFname, stableName);
mnodeDestroyChildTable(pTable);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
}
@@ -2013,12 +1998,12 @@ static int32_t mnodeDoCreateChildTable(SMnodeMsg *pMsg, int32_t tid) {
.pMsg = pMsg,
.fpReq = mnodeDoCreateChildTableFp
};
-
+
int32_t code = sdbInsertRow(&desc);
if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_MND_ACTION_IN_PROGRESS) {
mnodeDestroyChildTable(pTable);
pMsg->pTable = NULL;
- mError("msg:%p, app:%p table:%s, failed to create, reason:%s", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId,
+ mError("msg:%p, app:%p table:%s, failed to create, reason:%s", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname,
tstrerror(code));
} else {
mDebug("msg:%p, app:%p table:%s, allocated in vgroup, vgId:%d sid:%d uid:%" PRIu64, pMsg, pMsg->rpcMsg.ahandle,
@@ -2035,7 +2020,7 @@ static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) {
int32_t code = grantCheck(TSDB_GRANT_TIMESERIES);
if (code != TSDB_CODE_SUCCESS) {
mError("msg:%p, app:%p table:%s, failed to create, grant timeseries failed", pMsg, pMsg->rpcMsg.ahandle,
- pCreate->tableId);
+ pCreate->tableFname);
return code;
}
@@ -2046,7 +2031,7 @@ static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) {
code = mnodeGetAvailableVgroup(pMsg, &pVgroup, &tid);
if (code != TSDB_CODE_SUCCESS) {
mDebug("msg:%p, app:%p table:%s, failed to get available vgroup, reason:%s", pMsg, pMsg->rpcMsg.ahandle,
- pCreate->tableId, tstrerror(code));
+ pCreate->tableFname, tstrerror(code));
return code;
}
@@ -2060,15 +2045,15 @@ static int32_t mnodeProcessCreateChildTableMsg(SMnodeMsg *pMsg) {
return mnodeDoCreateChildTable(pMsg, tid);
}
} else {
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreate->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pCreate->tableFname);
}
if (pMsg->pTable == NULL) {
- mError("msg:%p, app:%p table:%s, object not found, retry:%d reason:%s", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId, pMsg->retry,
+ mError("msg:%p, app:%p table:%s, object not found, retry:%d reason:%s", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname, pMsg->retry,
tstrerror(terrno));
return terrno;
} else {
- mDebug("msg:%p, app:%p table:%s, send create msg to vnode again", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableId);
+ mDebug("msg:%p, app:%p table:%s, send create msg to vnode again", pMsg, pMsg->rpcMsg.ahandle, pCreate->tableFname);
return mnodeDoCreateChildTableFp(pMsg);
}
}
@@ -2084,7 +2069,7 @@ static int32_t mnodeSendDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
return TSDB_CODE_MND_OUT_OF_MEMORY;
}
- tstrncpy(pDrop->tableId, pTable->info.tableId, TSDB_TABLE_FNAME_LEN);
+ tstrncpy(pDrop->tableFname, pTable->info.tableId, TSDB_TABLE_FNAME_LEN);
pDrop->vgId = htonl(pTable->vgId);
pDrop->contLen = htonl(sizeof(SMDDropTableMsg));
pDrop->tid = htonl(pTable->tid);
@@ -2093,7 +2078,7 @@ static int32_t mnodeSendDropChildTableMsg(SMnodeMsg *pMsg, bool needReturn) {
SRpcEpSet epSet = mnodeGetEpSetFromVgroup(pMsg->pVgroup);
mInfo("msg:%p, app:%p ctable:%s, send drop ctable msg, vgId:%d sid:%d uid:%" PRIu64, pMsg, pMsg->rpcMsg.ahandle,
- pDrop->tableId, pTable->vgId, pTable->tid, pTable->uid);
+ pDrop->tableFname, pTable->vgId, pTable->tid, pTable->uid);
SRpcMsg rpcMsg = {
.ahandle = pMsg,
@@ -2115,7 +2100,7 @@ static int32_t mnodeDropChildTableCb(SMnodeMsg *pMsg, int32_t code) {
SCTableObj *pTable = (SCTableObj *)pMsg->pTable;
mError("msg:%p, app:%p ctable:%s, failed to drop, sdb error", pMsg, pMsg->rpcMsg.ahandle, pTable->info.tableId);
return code;
- }
+ }
return mnodeSendDropChildTableMsg(pMsg, true);
}
@@ -2224,7 +2209,7 @@ static int32_t mnodeAddNormalTableColumn(SMnodeMsg *pMsg, SSchema schema[], int3
pTable->numOfColumns += ncols;
pTable->sversion++;
-
+
SAcctObj *pAcct = mnodeGetAcct(pDb->acct);
if (pAcct != NULL) {
pAcct->acctInfo.numOfTimeSeries += ncols;
@@ -2295,7 +2280,7 @@ static int32_t mnodeChangeNormalTableColumn(SMnodeMsg *pMsg, char *oldName, char
if (mnodeFindNormalTableColumnIndex(pTable, newName) >= 0) {
return TSDB_CODE_MND_FIELD_ALREAY_EXIST;
}
-
+
// update
SSchema *schema = (SSchema *) (pTable->schema + col);
tstrncpy(schema->name, newName, sizeof(schema->name));
@@ -2335,7 +2320,7 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
pMeta->tid = htonl(pTable->tid);
pMeta->precision = pDb->cfg.precision;
pMeta->tableType = pTable->info.type;
- tstrncpy(pMeta->tableId, pTable->info.tableId, TSDB_TABLE_FNAME_LEN);
+ tstrncpy(pMeta->tableFname, pTable->info.tableId, TSDB_TABLE_FNAME_LEN);
if (pTable->info.type == TSDB_CHILD_TABLE) {
assert(pTable->superTable != NULL);
@@ -2352,7 +2337,7 @@ static int32_t mnodeDoGetChildTableMeta(SMnodeMsg *pMsg, STableMetaMsg *pMeta) {
pMeta->tversion = 0;
pMeta->numOfTags = 0;
pMeta->numOfColumns = htons((int16_t)pTable->numOfColumns);
- pMeta->contLen = sizeof(STableMetaMsg) + mnodeSetSchemaFromNormalTable(pMeta->schema, pTable);
+ pMeta->contLen = sizeof(STableMetaMsg) + mnodeSetSchemaFromNormalTable(pMeta->schema, pTable);
}
if (pMsg->pVgroup == NULL) pMsg->pVgroup = mnodeGetVgroup(pTable->vgId);
@@ -2383,7 +2368,7 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
if (pMsg->rpcMsg.contLen <= sizeof(*pInfo)) {
mError("msg:%p, app:%p table:%s, failed to auto create child table, tags not exist", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId);
+ pInfo->tableFname);
return TSDB_CODE_MND_TAG_NOT_EXIST;
}
@@ -2398,7 +2383,7 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
int32_t totalLen = nameLen + tagLen + sizeof(int32_t)*2;
if (tagLen == 0 || nameLen == 0) {
mError("msg:%p, app:%p table:%s, failed to create table on demand for super table is empty, tagLen:%d", pMsg,
- pMsg->rpcMsg.ahandle, pInfo->tableId, tagLen);
+ pMsg->rpcMsg.ahandle, pInfo->tableFname, tagLen);
return TSDB_CODE_MND_INVALID_STABLE_NAME;
}
@@ -2406,14 +2391,14 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
SCMCreateTableMsg *pCreateMsg = calloc(1, contLen);
if (pCreateMsg == NULL) {
mError("msg:%p, app:%p table:%s, failed to create table while get meta info, no enough memory", pMsg,
- pMsg->rpcMsg.ahandle, pInfo->tableId);
+ pMsg->rpcMsg.ahandle, pInfo->tableFname);
return TSDB_CODE_MND_OUT_OF_MEMORY;
}
SCreateTableMsg* pCreate = (SCreateTableMsg*) ((char*) pCreateMsg + sizeof(SCMCreateTableMsg));
- size_t size = tListLen(pInfo->tableId);
- tstrncpy(pCreate->tableId, pInfo->tableId, size);
+ size_t size = tListLen(pInfo->tableFname);
+ tstrncpy(pCreate->tableFname, pInfo->tableFname, size);
tstrncpy(pCreate->db, pMsg->pDb->name, sizeof(pCreate->db));
pCreate->igExists = 1;
pCreate->getMeta = 1;
@@ -2427,7 +2412,7 @@ static int32_t mnodeAutoCreateChildTable(SMnodeMsg *pMsg) {
memcpy(name, pInfo->tags + sizeof(int32_t), nameLen);
mDebug("msg:%p, app:%p table:%s, start to create on demand, tagLen:%d stable:%s", pMsg, pMsg->rpcMsg.ahandle,
- pInfo->tableId, tagLen, name);
+ pInfo->tableFname, tagLen, name);
if (pMsg->rpcMsg.pCont != pMsg->pCont) {
tfree(pMsg->rpcMsg.pCont);
@@ -2557,7 +2542,7 @@ static SCTableObj* mnodeGetTableByPos(int32_t vnode, int32_t tid) {
static int32_t mnodeProcessTableCfgMsg(SMnodeMsg *pMsg) {
return TSDB_CODE_COM_OPS_NOT_SUPPORT;
-#if 0
+#if 0
SConfigTableMsg *pCfg = pMsg->rpcMsg.pCont;
pCfg->dnodeId = htonl(pCfg->dnodeId);
pCfg->vgId = htonl(pCfg->vgId);
@@ -2575,13 +2560,13 @@ static int32_t mnodeProcessTableCfgMsg(SMnodeMsg *pMsg) {
SMDCreateTableMsg *pCreate = NULL;
pCreate = mnodeBuildCreateChildTableMsg(NULL, (SCTableObj *)pTable);
mnodeDecTableRef(pTable);
-
+
if (pCreate == NULL) return terrno;
-
+
pMsg->rpcRsp.rsp = pCreate;
pMsg->rpcRsp.len = htonl(pCreate->contLen);
return TSDB_CODE_SUCCESS;
-#endif
+#endif
}
// handle drop child response
@@ -2674,7 +2659,7 @@ static void mnodeProcessCreateChildTableRsp(SRpcMsg *rpcMsg) {
.pMsg = pMsg,
.fpRsp = mnodeDoCreateChildTableCb
};
-
+
int32_t code = sdbInsertRowToQueue(&desc);
if (code != TSDB_CODE_SUCCESS && code != TSDB_CODE_MND_ACTION_IN_PROGRESS) {
pMsg->pTable = NULL;
@@ -2821,7 +2806,7 @@ static int32_t mnodeProcessMultiTableMetaMsg(SMnodeMsg *pMsg) {
static int32_t mnodeGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
@@ -2894,7 +2879,7 @@ static int32_t mnodeGetShowTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void
static int32_t mnodeRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows, void *pConn) {
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return 0;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
@@ -2931,7 +2916,7 @@ static int32_t mnodeRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows
}
char tableName[TSDB_TABLE_NAME_LEN] = {0};
-
+
// pattern compare for table name
mnodeExtractTableName(pTable->info.tableId, tableName);
@@ -2960,13 +2945,13 @@ static int32_t mnodeRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows
cols++;
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
-
+
memset(tableName, 0, sizeof(tableName));
if (pTable->info.type == TSDB_CHILD_TABLE) {
mnodeExtractTableName(pTable->superTable->info.tableId, tableName);
STR_WITH_MAXSIZE_TO_VARSTR(pWrite, tableName, pShow->bytes[cols]);
}
-
+
cols++;
// uid
@@ -3001,27 +2986,27 @@ static int32_t mnodeRetrieveShowTables(SShowObj *pShow, char *data, int32_t rows
static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
SAlterTableMsg *pAlter = pMsg->rpcMsg.pCont;
mDebug("msg:%p, app:%p table:%s, alter table msg is received from thandle:%p", pMsg, pMsg->rpcMsg.ahandle,
- pAlter->tableId, pMsg->rpcMsg.handle);
+ pAlter->tableFname, pMsg->rpcMsg.handle);
- if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pAlter->tableId);
+ if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDbByTableId(pAlter->tableFname);
if (pMsg->pDb == NULL) {
- mError("msg:%p, app:%p table:%s, failed to alter table, db not selected", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId);
+ mError("msg:%p, app:%p table:%s, failed to alter table, db not selected", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname);
return TSDB_CODE_MND_DB_NOT_SELECTED;
}
-
+
if (pMsg->pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pMsg->pDb->name, pMsg->pDb->status);
return TSDB_CODE_MND_DB_IN_DROPPING;
}
if (mnodeCheckIsMonitorDB(pMsg->pDb->name, tsMonitorDbName)) {
- mError("msg:%p, app:%p table:%s, failed to alter table, its log db", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId);
+ mError("msg:%p, app:%p table:%s, failed to alter table, its log db", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname);
return TSDB_CODE_MND_MONITOR_DB_FORBIDDEN;
}
- if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pAlter->tableId);
+ if (pMsg->pTable == NULL) pMsg->pTable = mnodeGetTable(pAlter->tableFname);
if (pMsg->pTable == NULL) {
- mError("msg:%p, app:%p table:%s, failed to alter table, table not exist", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId);
+ mError("msg:%p, app:%p table:%s, failed to alter table, table not exist", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname);
return TSDB_CODE_MND_INVALID_TABLE_NAME;
}
@@ -3030,7 +3015,7 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
pAlter->tagValLen = htonl(pAlter->tagValLen);
if (pAlter->numOfCols > 2) {
- mError("msg:%p, app:%p table:%s, error numOfCols:%d in alter table", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId,
+ mError("msg:%p, app:%p table:%s, error numOfCols:%d in alter table", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname,
pAlter->numOfCols);
return TSDB_CODE_MND_APP_ERROR;
}
@@ -3041,7 +3026,7 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
int32_t code = TSDB_CODE_COM_OPS_NOT_SUPPORT;
if (pMsg->pTable->type == TSDB_SUPER_TABLE) {
- mDebug("msg:%p, app:%p table:%s, start to alter stable", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId);
+ mDebug("msg:%p, app:%p table:%s, start to alter stable", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname);
if (pAlter->type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) {
code = mnodeAddSuperTableTag(pMsg, pAlter->schema, 1);
} else if (pAlter->type == TSDB_ALTER_TABLE_DROP_TAG_COLUMN) {
@@ -3057,7 +3042,7 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
} else {
}
} else {
- mDebug("msg:%p, app:%p table:%s, start to alter ctable", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableId);
+ mDebug("msg:%p, app:%p table:%s, start to alter ctable", pMsg, pMsg->rpcMsg.ahandle, pAlter->tableFname);
if (pAlter->type == TSDB_ALTER_TABLE_UPDATE_TAG_VAL) {
return TSDB_CODE_COM_OPS_NOT_SUPPORT;
} else if (pAlter->type == TSDB_ALTER_TABLE_ADD_COLUMN) {
@@ -3076,7 +3061,7 @@ static int32_t mnodeProcessAlterTableMsg(SMnodeMsg *pMsg) {
static int32_t mnodeGetStreamTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return TSDB_CODE_MND_DB_NOT_SELECTED;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
@@ -3129,13 +3114,13 @@ static int32_t mnodeGetStreamTableMeta(STableMetaMsg *pMeta, SShowObj *pShow, vo
static int32_t mnodeRetrieveStreamTables(SShowObj *pShow, char *data, int32_t rows, void *pConn) {
SDbObj *pDb = mnodeGetDb(pShow->db);
if (pDb == NULL) return 0;
-
+
if (pDb->status != TSDB_DB_STATUS_READY) {
mError("db:%s, status:%d, in dropping", pDb->name, pDb->status);
mnodeDecDbRef(pDb);
return 0;
}
-
+
int32_t numOfRows = 0;
SCTableObj *pTable = NULL;
SPatternCompareInfo info = PATTERN_COMPARE_INFO_INITIALIZER;
@@ -3148,7 +3133,7 @@ static int32_t mnodeRetrieveStreamTables(SShowObj *pShow, char *data, int32_t ro
while (numOfRows < rows) {
pShow->pIter = mnodeGetNextChildTable(pShow->pIter, &pTable);
if (pTable == NULL) break;
-
+
// not belong to current db
if (strncmp(pTable->info.tableId, prefix, prefixLen) || pTable->info.type != TSDB_STREAM_TABLE) {
mnodeDecTableRef(pTable);
@@ -3156,7 +3141,7 @@ static int32_t mnodeRetrieveStreamTables(SShowObj *pShow, char *data, int32_t ro
}
char tableName[TSDB_TABLE_NAME_LEN] = {0};
-
+
// pattern compare for table name
mnodeExtractTableName(pTable->info.tableId, tableName);
diff --git a/src/mnode/src/mnodeUser.c b/src/mnode/src/mnodeUser.c
index fb26086d04..fbee8a42b8 100644
--- a/src/mnode/src/mnodeUser.c
+++ b/src/mnode/src/mnodeUser.c
@@ -337,7 +337,7 @@ static int32_t mnodeGetUserMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pCo
cols++;
pMeta->numOfColumns = htons(cols);
- strcpy(pMeta->tableId, "show users");
+ strcpy(pMeta->tableFname, "show users");
pShow->numOfColumns = cols;
pShow->offset[0] = 0;
diff --git a/src/query/inc/qFill.h b/src/query/inc/qFill.h
index 385ae88543..93537ec3da 100644
--- a/src/query/inc/qFill.h
+++ b/src/query/inc/qFill.h
@@ -82,9 +82,9 @@ void taosFillCopyInputDataFromFilePage(SFillInfo* pFillInfo, const tFilePage** p
void taosFillCopyInputDataFromOneFilePage(SFillInfo* pFillInfo, const tFilePage* pInput);
-int64_t getNumOfResWithFill(SFillInfo* pFillInfo, int64_t ekey, int32_t maxNumOfRows);
+bool taosFillHasMoreResults(SFillInfo* pFillInfo);
-int32_t taosNumOfRemainRows(SFillInfo *pFillInfo);
+int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, int64_t ekey, int32_t maxNumOfRows);
int32_t taosGetLinearInterpolationVal(int32_t type, SPoint *point1, SPoint *point2, SPoint *point);
diff --git a/src/query/inc/qSqlparser.h b/src/query/inc/qSqlparser.h
index 640576e090..697db9ae98 100644
--- a/src/query/inc/qSqlparser.h
+++ b/src/query/inc/qSqlparser.h
@@ -98,6 +98,7 @@ typedef struct SCreateTableSQL {
typedef struct SAlterTableSQL {
SStrToken name;
+ int16_t tableType;
int16_t type;
STagData tagData;
SArray *pAddColumns; // SArray
@@ -156,6 +157,7 @@ typedef struct tDCLSQL {
int32_t nAlloc; /* Number of entries allocated below */
SStrToken *a; /* one entry for element */
bool existsCheck;
+ int16_t tableType;
union {
SCreateDBInfo dbOpt;
@@ -251,7 +253,7 @@ SCreateTableSQL *tSetCreateSqlElems(SArray *pCols, SArray *pTags, SQuerySQL *pSe
void tSqlExprNodeDestroy(tSQLExpr *pExpr);
-SAlterTableSQL * tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type);
+SAlterTableSQL * tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableTable);
SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagVals, SStrToken *pToken, SStrToken* igExists);
void destroyAllSelectClause(SSubclauseInfo *pSql);
@@ -268,7 +270,7 @@ void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken
void SqlInfoDestroy(SSqlInfo *pInfo);
void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
-void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck);
+void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck,int16_t tableType);
void setShowOptions(SSqlInfo *pInfo, int32_t type, SStrToken* prefix, SStrToken* pPatterns);
tDCLSQL *tTokenListAppend(tDCLSQL *pTokenList, SStrToken *pToken);
diff --git a/src/query/inc/sql.y b/src/query/inc/sql.y
index 660a1f0663..5e3fe9a860 100644
--- a/src/query/inc/sql.y
+++ b/src/query/inc/sql.y
@@ -131,10 +131,16 @@ cmd ::= SHOW dbPrefix(X) VGROUPS ids(Y). {
//drop configure for tables
cmd ::= DROP TABLE ifexists(Y) ids(X) cpxName(Z). {
X.n += Z.n;
- setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y);
+ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1);
}
-cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y); }
+//drop stable
+cmd ::= DROP STABLE ifexists(Y) ids(X) cpxName(Z). {
+ X.n += Z.n;
+ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, TSDB_SUPER_TABLE);
+}
+
+cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, -1); }
cmd ::= DROP DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
cmd ::= DROP USER ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
cmd ::= DROP ACCOUNT ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
@@ -305,6 +311,8 @@ signed(A) ::= MINUS INTEGER(X). { A = -strtol(X.z, NULL, 10);}
////////////////////////////////// The CREATE TABLE statement ///////////////////////////////
cmd ::= CREATE TABLE create_table_args. {}
+cmd ::= CREATE TABLE create_stable_args. {}
+cmd ::= CREATE STABLE create_stable_args. {}
cmd ::= CREATE TABLE create_table_list(Z). { pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = Z;}
%type create_table_list{SCreateTableSQL*}
@@ -333,7 +341,8 @@ create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP. {
}
// create super table
-create_table_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
+%type create_stable_args{SCreateTableSQL*}
+create_stable_args(A) ::= ifnotexists(U) ids(V) cpxName(Z) LP columnlist(X) RP TAGS LP columnlist(Y) RP. {
A = tSetCreateSqlElems(X, Y, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, A, NULL, TSDB_SQL_CREATE_TABLE);
@@ -687,7 +696,7 @@ cmd ::= RESET QUERY CACHE. { setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
///////////////////////////////////ALTER TABLE statement//////////////////////////////////
cmd ::= ALTER TABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
X.n += F.n;
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
@@ -697,14 +706,14 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
toTSDBType(A.type);
SArray* K = tVariantListAppendToken(NULL, &A, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
cmd ::= ALTER TABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
X.n += Y.n;
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
@@ -713,7 +722,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
toTSDBType(Y.type);
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
@@ -726,7 +735,7 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
toTSDBType(Z.type);
A = tVariantListAppendToken(A, &Z, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
@@ -737,7 +746,54 @@ cmd ::= ALTER TABLE ids(X) cpxName(F) SET TAG ids(Y) EQ tagitem(Z). {
SArray* A = tVariantListAppendToken(NULL, &Y, -1);
A = tVariantListAppend(A, &Z, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+
+
+///////////////////////////////////ALTER STABLE statement//////////////////////////////////
+cmd ::= ALTER STABLE ids(X) cpxName(F) ADD COLUMN columnlist(A). {
+ X.n += F.n;
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+
+cmd ::= ALTER STABLE ids(X) cpxName(F) DROP COLUMN ids(A). {
+ X.n += F.n;
+
+ toTSDBType(A.type);
+ SArray* K = tVariantListAppendToken(NULL, &A, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+
+//////////////////////////////////ALTER TAGS statement/////////////////////////////////////
+cmd ::= ALTER STABLE ids(X) cpxName(Y) ADD TAG columnlist(A). {
+ X.n += Y.n;
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, A, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+cmd ::= ALTER STABLE ids(X) cpxName(Z) DROP TAG ids(Y). {
+ X.n += Z.n;
+
+ toTSDBType(Y.type);
+ SArray* A = tVariantListAppendToken(NULL, &Y, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+
+cmd ::= ALTER STABLE ids(X) cpxName(F) CHANGE TAG ids(Y) ids(Z). {
+ X.n += F.n;
+
+ toTSDBType(Y.type);
+ SArray* A = tVariantListAppendToken(NULL, &Y, -1);
+
+ toTSDBType(Z.type);
+ A = tVariantListAppendToken(A, &Z, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&X, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
diff --git a/src/query/src/qAggMain.c b/src/query/src/qAggMain.c
index 3c7fd794bf..543b205112 100644
--- a/src/query/src/qAggMain.c
+++ b/src/query/src/qAggMain.c
@@ -1901,7 +1901,7 @@ static void valuePairAssign(tValuePair *dst, int16_t type, const char *val, int6
static void do_top_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pData, int64_t ts, uint16_t type,
SExtTagsInfo *pTagInfo, char *pTags, int16_t stage) {
tVariant val = {0};
- tVariantCreateFromBinary(&val, pData, tDataTypeDesc[type].nSize, type);
+ tVariantCreateFromBinary(&val, pData, tDataTypes[type].bytes, type);
tValuePair **pList = pInfo->res;
assert(pList != NULL);
@@ -1958,7 +1958,7 @@ static void do_top_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pData,
static void do_bottom_function_add(STopBotInfo *pInfo, int32_t maxLen, void *pData, int64_t ts, uint16_t type,
SExtTagsInfo *pTagInfo, char *pTags, int16_t stage) {
tVariant val = {0};
- tVariantCreateFromBinary(&val, pData, tDataTypeDesc[type].nSize, type);
+ tVariantCreateFromBinary(&val, pData, tDataTypes[type].bytes, type);
tValuePair **pList = pInfo->res;
assert(pList != NULL);
diff --git a/src/query/src/qArithmeticOperator.c b/src/query/src/qArithmeticOperator.c
index 27bdd4372b..677951bd07 100644
--- a/src/query/src/qArithmeticOperator.c
+++ b/src/query/src/qArithmeticOperator.c
@@ -16,7 +16,7 @@
#include "os.h"
#include "qArithmeticOperator.h"
-#include "taosdef.h"
+#include "ttype.h"
#include "tutil.h"
#define ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \
@@ -145,7 +145,7 @@ void calc_i32_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight
if (numLeft == numRight) {
for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
+ SET_DOUBLE_NULL(pOutput);
continue;
}
@@ -154,7 +154,7 @@ void calc_i32_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight
} else if (numLeft == 1) {
for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
+ SET_DOUBLE_NULL(pOutput);
continue;
}
@@ -163,7 +163,7 @@ void calc_i32_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight
} else if (numRight == 1) {
for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
+ SET_DOUBLE_NULL(pOutput);
continue;
}
*pOutput = (double)pLeft[i] + pRight[0];
@@ -2556,1123 +2556,6 @@ void vectorRemainder(void *left, int32_t numLeft, int32_t leftType, void *right,
}
}
-/*
-void calc_i32_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int8_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int16_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int64_t);
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, float)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int8_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_u8_u8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, uint8_t, uint8_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_UTINYINT, TSDB_DATA_TYPE_UTINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_u8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, uint8_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_UTINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_u8_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_u8_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i8_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int16_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i8_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i8_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int64_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, float)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_i16_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i16_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int16_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i16_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i16_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int64_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, float)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_i64_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_i64_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i64_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int64_t)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, float)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_f_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_f_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_f_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i64_f_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, float)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i8_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_d_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i16_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_d_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_d_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i64_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i64_d_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_f_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_f_d_add(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_d_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, double)
- ARRAY_LIST_ADD(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-void calc_i32_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- int32_t *pLeft = (int32_t *)left;
- int32_t *pRight = (int32_t *)right;
- double * pOutput = (double *)output;
-
- int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1;
- int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1;
-
- if (numLeft == numRight) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
- *pOutput = (double)pLeft[i] - pRight[i];
- }
- } else if (numLeft == 1) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
- *pOutput = (double)pLeft[0] - pRight[i];
- }
- } else if (numRight == 1) {
- for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
- if (isNull((char *)&pLeft[i], TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
- *pOutput = (double)pLeft[i] - pRight[0];
- }
- }
-}
-
-void calc_i32_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int32_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int32_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int32_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int32_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i8_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int8_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i16_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int16_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i32_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int32_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i64_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int64_t)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_f_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, float)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_d_sub(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, double)
- ARRAY_LIST_SUB(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-void calc_i32_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- int32_t *pLeft = (int32_t *)left;
- int32_t *pRight = (int32_t *)right;
- double * pOutput = (double *)output;
-
- int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1;
- int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1;
-
- if (numLeft == numRight) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] * pRight[i];
- }
- } else if (numLeft == 1) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[0] * pRight[i];
- }
- } else if (numRight == 1) {
- for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
- *pOutput = (double)pLeft[i] * pRight[0];
- }
- }
-}
-
-void calc_i32_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int8_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int16_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int64_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, float)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int8_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int16_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i8_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i8_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int64_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, float)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_i16_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i16_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int16_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i16_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i16_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int64_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, float)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_i64_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_i64_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_i64_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_i64_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int64_t)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, float)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_f_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_f_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_f_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i64_f_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_f_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, float)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i8_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i8_d_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i16_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i16_d_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i32_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i32_d_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_i64_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_i64_d_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_f_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- calc_f_d_multi(right, left, numRight, numLeft, output, order);
-}
-
-void calc_d_d_multi(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, double)
- ARRAY_LIST_MULTI(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-void calc_i32_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- int32_t *pLeft = (int32_t *)left;
- int32_t *pRight = (int32_t *)right;
- double * pOutput = (double *)output;
-
- int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1;
- int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1;
-
- if (numLeft == numRight) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] / pRight[i];
- }
- } else if (numLeft == 1) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[0] / pRight[i];
- }
- } else if (numRight == 1) {
- for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
- *pOutput = (double)pLeft[i] / pRight[0];
- }
- }
-}
-
-void calc_i32_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int32_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int32_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int32_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int32_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i8_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int8_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i16_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int16_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i32_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int32_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i64_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int64_t)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_f_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, float)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_d_div(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, double)
- ARRAY_LIST_DIV(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-void calc_i32_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- int32_t *pLeft = (int32_t *)left;
- int32_t *pRight = (int32_t *)right;
- double * pOutput = (double *)output;
-
- int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1;
- int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1;
-
- if (numLeft == numRight) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] - ((int64_t)(((double)pLeft[i]) / pRight[i])) * pRight[i];
- }
- } else if (numLeft == 1) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[0] - ((int64_t)(((double)pLeft[0]) / pRight[i])) * pRight[i];
- }
- } else if (numRight == 1) {
- for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] - ((int64_t)(((double)pLeft[i]) / pRight[0])) * pRight[0];
- }
- }
-}
-
-void calc_i32_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int32_t, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_INT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i32_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- int32_t *pLeft = (int32_t *)left;
- double * pRight = (double *)right;
- double * pOutput = (double *)output;
-
- int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1;
- int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1;
-
- if (numLeft == numRight) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)(pOutput), TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] - ((int64_t)(((double)pLeft[i]) / pRight[i])) * pRight[i];
- }
- } else if (numLeft == 1) {
- for (; i >= 0 && i < numRight; i += step, pOutput += 1) {
- if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[0] - ((int64_t)(((double)pLeft[0]) / pRight[i])) * pRight[i];
- }
- } else if (numRight == 1) {
- for (; i >= 0 && i < numLeft; i += step, pOutput += 1) {
- if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) {
- setNull((char *)pOutput, TSDB_DATA_TYPE_DOUBLE, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
- continue;
- }
-
- *pOutput = (double)pLeft[i] - ((int64_t)(((double)pLeft[i]) / pRight[0])) * pRight[0];
- }
- }
-}
-
-void calc_i8_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int32_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i8_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int8_t, double)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_TINYINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int32_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i16_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int16_t, double)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_SMALLINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int32_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_i64_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, int64_t, double)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_BIGINT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int32_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_f_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, float, double)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_FLOAT, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i8_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int8_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_TINYINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i16_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int16_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_SMALLINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i32_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int32_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_INT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_i64_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, int64_t)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_BIGINT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_f_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, float)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_FLOAT, numLeft, numRight, pOutput, order);
-}
-
-void calc_d_d_rem(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) {
- TYPE_CONVERT(left, right, output, double, double)
- ARRAY_LIST_REM(pLeft, pRight, TSDB_DATA_TYPE_DOUBLE, TSDB_DATA_TYPE_DOUBLE, numLeft, numRight, pOutput, order);
-}
-
-*
- * the following are two-dimensional array list of callback function .
- */
-//_arithmetic_operator_fn_t add_function_arraylist[15][15] = {
-// /*NULL, bool, tinyint, smallint, int, bigint, float, double, timestamp, binary*/
-// {0}, // EMPTY,
-// {0}, // TSDB_DATA_TYPE_BOOL,
-// {NULL, NULL, calc_i8_i8_add, calc_i8_i16_add, calc_i8_i32_add, calc_i8_i64_add, calc_i8_f_add, calc_i8_d_add, NULL, NULL}, // TSDB_DATA_TYPE_TINYINT
-// {NULL, NULL, calc_i16_i8_add, calc_i16_i16_add, calc_i16_i32_add, calc_i16_i64_add, calc_i16_f_add, calc_i16_d_add, NULL, NULL}, // TSDB_DATA_TYPE_SMALLINT
-// {NULL, NULL, calc_i32_i8_add, calc_i32_i16_add, calc_i32_i32_add, calc_i32_i64_add, calc_i32_f_add, calc_i32_d_add, NULL, NULL}, // TSDB_DATA_TYPE_INT
-// {NULL, NULL, calc_i64_i8_add, calc_i64_i16_add, calc_i64_i32_add, calc_i64_i64_add, calc_i64_f_add, calc_i64_d_add, NULL, NULL}, // TSDB_DATA_TYPE_BIGINT
-// {NULL, NULL, calc_f_i8_add, calc_f_i16_add, calc_f_i32_add, calc_f_i64_add, calc_f_f_add, calc_f_d_add, NULL, NULL}, // TSDB_DATA_TYPE_FLOAT
-// {NULL, NULL, calc_d_i8_add, calc_d_i16_add, calc_d_i32_add, calc_d_i64_add, calc_d_f_add, calc_d_d_add, NULL, NULL}, // TSDB_DATA_TYPE_DOUBLE
-// {0}, // TSDB_DATA_TYPE_BINARY,
-// {0}, // TSDB_DATA_TYPE_NCHAR,
-// {NULL, NULL, calc_u8_i8_add, calc_u8_i16_add, calc_u8_i32_add, calc_u8_i64_add, calc_u8_f_add, calc_u8_d_add, NULL, NULL, calc_u8_u8_add, calc_u8_u16_add, calc_u8_u32_add, calc_u8_u64_add, NULL}, // TSDB_DATA_TYPE_UTINYINT,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_USMALLINT,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_UINT,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_UBIGINT,
-//
-//};
-//
-//_arithmetic_operator_fn_t sub_function_arraylist[8][15] = {
-// /*NULL, bool, tinyint, smallint, int, bigint, float, double, timestamp, binary*/
-// {0}, // EMPTY,
-// {0}, // TSDB_DATA_TYPE_BOOL,
-// {NULL, NULL, calc_i8_i8_sub, calc_i8_i16_sub, calc_i8_i32_sub, calc_i8_i64_sub, calc_i8_f_sub, calc_i8_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_TINYINT
-// {NULL, NULL, calc_i16_i8_sub, calc_i16_i16_sub, calc_i16_i32_sub, calc_i16_i64_sub, calc_i16_f_sub, calc_i16_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_SMALLINT
-// {NULL, NULL, calc_i32_i8_sub, calc_i32_i16_sub, calc_i32_i32_sub, calc_i32_i64_sub, calc_i32_f_sub, calc_i32_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_INT
-// {NULL, NULL, calc_i64_i8_sub, calc_i64_i16_sub, calc_i64_i32_sub, calc_i64_i64_sub, calc_i64_f_sub, calc_i64_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_BIGINT
-// {NULL, NULL, calc_f_i8_sub, calc_f_i16_sub, calc_f_i32_sub, calc_f_i64_sub, calc_f_f_sub, calc_f_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_FLOAT
-// {NULL, NULL, calc_d_i8_sub, calc_d_i16_sub, calc_d_i32_sub, calc_d_i64_sub, calc_d_f_sub, calc_d_d_sub, NULL, NULL}, // TSDB_DATA_TYPE_DOUBLE
-//};
-//
-//_arithmetic_operator_fn_t multi_function_arraylist[][15] = {
-// /*NULL, bool, tinyint, smallint, int, bigint, float, double, timestamp, binary*/
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // EMPTY,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_BOOL,
-// {NULL, NULL, calc_i8_i8_multi, calc_i8_i16_multi, calc_i8_i32_multi, calc_i8_i64_multi, calc_i8_f_multi, calc_i8_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_TINYINT
-// {NULL, NULL, calc_i16_i8_multi, calc_i16_i16_multi, calc_i16_i32_multi, calc_i16_i64_multi, calc_i16_f_multi, calc_i16_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_SMALLINT
-// {NULL, NULL, calc_i32_i8_multi, calc_i32_i16_multi, calc_i32_i32_multi, calc_i32_i64_multi, calc_i32_f_multi, calc_i32_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_INT
-// {NULL, NULL, calc_i64_i8_multi, calc_i64_i16_multi, calc_i64_i32_multi, calc_i64_i64_multi, calc_i64_f_multi, calc_i64_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_BIGINT
-// {NULL, NULL, calc_f_i8_multi, calc_f_i16_multi, calc_f_i32_multi, calc_f_i64_multi, calc_f_f_multi, calc_f_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_FLOAT
-// {NULL, NULL, calc_d_i8_multi, calc_d_i16_multi, calc_d_i32_multi, calc_d_i64_multi, calc_d_f_multi, calc_d_d_multi, NULL, NULL}, // TSDB_DATA_TYPE_DOUBLE
-//};
-//
-//_arithmetic_operator_fn_t div_function_arraylist[8][15] = {
-// /*NULL, bool, tinyint, smallint, int, bigint, float, double, timestamp, binary*/
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // EMPTY,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_BOOL,
-// {NULL, NULL, calc_i8_i8_div, calc_i8_i16_div, calc_i8_i32_div, calc_i8_i64_div, calc_i8_f_div, calc_i8_d_div, NULL, NULL}, // TSDB_DATA_TYPE_TINYINT
-// {NULL, NULL, calc_i16_i8_div, calc_i16_i16_div, calc_i16_i32_div, calc_i16_i64_div, calc_i16_f_div, calc_i16_d_div, NULL, NULL}, // TSDB_DATA_TYPE_SMALLINT
-// {NULL, NULL, calc_i32_i8_div, calc_i32_i16_div, calc_i32_i32_div, calc_i32_i64_div, calc_i32_f_div, calc_i32_d_div, NULL, NULL}, // TSDB_DATA_TYPE_INT
-// {NULL, NULL, calc_i64_i8_div, calc_i64_i16_div, calc_i64_i32_div, calc_i64_i64_div, calc_i64_f_div, calc_i64_d_div, NULL, NULL}, // TSDB_DATA_TYPE_BIGINT
-// {NULL, NULL, calc_f_i8_div, calc_f_i16_div, calc_f_i32_div, calc_f_i64_div, calc_f_f_div, calc_f_d_div, NULL, NULL}, // TSDB_DATA_TYPE_FLOAT
-// {NULL, NULL, calc_d_i8_div, calc_d_i16_div, calc_d_i32_div, calc_d_i64_div, calc_d_f_div, calc_d_d_div, NULL, NULL}, // TSDB_DATA_TYPE_DOUBLE
-//};
-//
-//_arithmetic_operator_fn_t rem_function_arraylist[8][15] = {
-// /*NULL, bool, tinyint, smallint, int, bigint, float, double, timestamp, binary, nchar, unsigned tinyint, unsigned smallint, unsigned int, unsigned bigint*/
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // EMPTY,
-// {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // TSDB_DATA_TYPE_BOOL,
-// {NULL, NULL, calc_i8_i8_rem, calc_i8_i16_rem, calc_i8_i32_rem, calc_i8_i64_rem, calc_i8_f_rem, calc_i8_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_TINYINT
-// {NULL, NULL, calc_i16_i8_rem, calc_i16_i16_rem, calc_i16_i32_rem, calc_i16_i64_rem, calc_i16_f_rem, calc_i16_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_SMALLINT
-// {NULL, NULL, calc_i32_i8_rem, calc_i32_i16_rem, calc_i32_i32_rem, calc_i32_i64_rem, calc_i32_f_rem, calc_i32_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_INT
-// {NULL, NULL, calc_i64_i8_rem, calc_i64_i16_rem, calc_i64_i32_rem, calc_i64_i64_rem, calc_i64_f_rem, calc_i64_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_BIGINT
-// {NULL, NULL, calc_f_i8_rem, calc_f_i16_rem, calc_f_i32_rem, calc_f_i64_rem, calc_f_f_rem, calc_f_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_FLOAT
-// {NULL, NULL, calc_d_i8_rem, calc_d_i16_rem, calc_d_i32_rem, calc_d_i64_rem, calc_d_f_rem, calc_d_d_rem, NULL, NULL}, // TSDB_DATA_TYPE_DOUBLE
-//};
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
_arithmetic_operator_fn_t getArithmeticOperatorFn(int32_t arithmeticOptr) {
switch (arithmeticOptr) {
case TSDB_BINARY_OP_ADD:
diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c
index 4978a27d4f..fbc24b50a7 100644
--- a/src/query/src/qExecutor.c
+++ b/src/query/src/qExecutor.c
@@ -1875,6 +1875,7 @@ static int32_t setCtxTagColumnInfo(SQueryRuntimeEnv *pRuntimeEnv, SQLFunctionCtx
return TSDB_CODE_SUCCESS;
}
+// todo refactor
static int32_t setupQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv, int16_t order) {
qDebug("QInfo:%p setup runtime env", GET_QINFO_ADDR(pRuntimeEnv));
SQuery *pQuery = pRuntimeEnv->pQuery;
@@ -3849,11 +3850,6 @@ void setExecutionContext(SQInfo *pQInfo, int32_t groupIndex, TSKEY nextKey) {
// lastKey needs to be updated
pTableQueryInfo->lastKey = nextKey;
-
- if (pRuntimeEnv->hasTagResults || pRuntimeEnv->pTsBuf != NULL) {
- setAdditionalInfo(pQInfo, pTableQueryInfo->pTable, pTableQueryInfo);
- }
-
if (pRuntimeEnv->prevGroupId != INT32_MIN && pRuntimeEnv->prevGroupId == groupIndex) {
return;
}
@@ -4180,7 +4176,7 @@ static void stableApplyFunctionsOnBlock(SQueryRuntimeEnv *pRuntimeEnv, SDataBloc
}
}
-bool queryHasRemainResForTableQuery(SQueryRuntimeEnv* pRuntimeEnv) {
+bool hasNotReturnedResults(SQueryRuntimeEnv* pRuntimeEnv) {
SQuery *pQuery = pRuntimeEnv->pQuery;
SFillInfo *pFillInfo = pRuntimeEnv->pFillInfo;
@@ -4190,8 +4186,7 @@ bool queryHasRemainResForTableQuery(SQueryRuntimeEnv* pRuntimeEnv) {
if (pQuery->fillType != TSDB_FILL_NONE && !isPointInterpoQuery(pQuery)) {
// There are results not returned to client yet, so filling applied to the remain result is required firstly.
- int32_t remain = taosNumOfRemainRows(pFillInfo);
- if (remain > 0) {
+ if (taosFillHasMoreResults(pFillInfo)) {
return true;
}
@@ -4205,7 +4200,7 @@ bool queryHasRemainResForTableQuery(SQueryRuntimeEnv* pRuntimeEnv) {
* first result row in the actual result set will fill nothing.
*/
if (Q_STATUS_EQUAL(pQuery->status, QUERY_COMPLETED)) {
- int32_t numOfTotal = (int32_t)getNumOfResWithFill(pFillInfo, pQuery->window.ekey, (int32_t)pQuery->rec.capacity);
+ int32_t numOfTotal = (int32_t)getNumOfResultsAfterFillGap(pFillInfo, pQuery->window.ekey, (int32_t)pQuery->rec.capacity);
return numOfTotal > 0;
}
@@ -4273,7 +4268,7 @@ static void doCopyQueryResultToMsg(SQInfo *pQInfo, int32_t numOfRows, char *data
setQueryStatus(pQuery, QUERY_OVER);
}
} else {
- if (!queryHasRemainResForTableQuery(&pQInfo->runtimeEnv)) {
+ if (!hasNotReturnedResults(&pQInfo->runtimeEnv)) {
setQueryStatus(pQuery, QUERY_OVER);
}
}
@@ -4300,7 +4295,6 @@ int32_t doFillGapsInResults(SQueryRuntimeEnv* pRuntimeEnv, tFilePage **pDst, int
pQInfo, pFillInfo->numOfRows, ret, pQuery->limit.offset, ret - pQuery->limit.offset, 0);
ret -= (int32_t)pQuery->limit.offset;
- // todo !!!!there exactly number of interpo is not valid.
for (int32_t i = 0; i < pQuery->numOfOutput; ++i) {
memmove(pDst[i]->data, pDst[i]->data + pQuery->pExpr1[i].bytes * pQuery->limit.offset,
ret * pQuery->pExpr1[i].bytes);
@@ -4318,7 +4312,7 @@ int32_t doFillGapsInResults(SQueryRuntimeEnv* pRuntimeEnv, tFilePage **pDst, int
ret = 0;
}
- if (!queryHasRemainResForTableQuery(pRuntimeEnv)) {
+ if (!hasNotReturnedResults(pRuntimeEnv)) {
return ret;
}
}
@@ -4781,19 +4775,17 @@ static void enableExecutionForNextTable(SQueryRuntimeEnv *pRuntimeEnv) {
}
}
-// TODO refactor: setAdditionalInfo
static FORCE_INLINE void setEnvForEachBlock(SQInfo* pQInfo, STableQueryInfo* pTableQueryInfo, SDataBlockInfo* pBlockInfo) {
SQueryRuntimeEnv* pRuntimeEnv = &pQInfo->runtimeEnv;
SQuery* pQuery = pQInfo->runtimeEnv.pQuery;
int32_t step = GET_FORWARD_DIRECTION_FACTOR(pQuery->order.order);
- if (QUERY_IS_INTERVAL_QUERY(pQuery)) {
- TSKEY nextKey = pBlockInfo->window.skey;
- setIntervalQueryRange(pQInfo, nextKey);
+ if (pRuntimeEnv->hasTagResults || pRuntimeEnv->pTsBuf != NULL) {
+ setAdditionalInfo(pQInfo, pTableQueryInfo->pTable, pTableQueryInfo);
+ }
- if (pRuntimeEnv->hasTagResults || pRuntimeEnv->pTsBuf != NULL) {
- setAdditionalInfo(pQInfo, pTableQueryInfo->pTable, pTableQueryInfo);
- }
+ if (QUERY_IS_INTERVAL_QUERY(pQuery)) {
+ setIntervalQueryRange(pQInfo, pBlockInfo->window.skey);
} else { // non-interval query
setExecutionContext(pQInfo, pTableQueryInfo->groupIndex, pBlockInfo->window.ekey + step);
}
@@ -4816,7 +4808,7 @@ static void doTableQueryInfoTimeWindowCheck(SQuery* pQuery, STableQueryInfo* pTa
static int64_t scanMultiTableDataBlocks(SQInfo *pQInfo) {
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
SQuery* pQuery = pRuntimeEnv->pQuery;
- SQueryCostInfo* summary = &pRuntimeEnv->summary;
+ SQueryCostInfo* summary = &pRuntimeEnv->summary;
int64_t st = taosGetTimestampMs();
@@ -5473,7 +5465,7 @@ static void doRestoreContext(SQInfo *pQInfo) {
SET_MASTER_SCAN_FLAG(pRuntimeEnv);
}
-static void doCloseAllTimeWindowAfterScan(SQInfo *pQInfo) {
+static void doCloseAllTimeWindow(SQInfo *pQInfo) {
SQuery *pQuery = pQInfo->runtimeEnv.pQuery;
if (QUERY_IS_INTERVAL_QUERY(pQuery)) {
@@ -5525,7 +5517,7 @@ static void multiTableQueryProcess(SQInfo *pQInfo) {
}
// close all time window results
- doCloseAllTimeWindowAfterScan(pQInfo);
+ doCloseAllTimeWindow(pQInfo);
if (needReverseScan(pQuery)) {
int32_t code = doSaveContext(pQInfo);
@@ -5778,7 +5770,7 @@ static void tableQueryImpl(SQInfo *pQInfo) {
SQueryRuntimeEnv *pRuntimeEnv = &pQInfo->runtimeEnv;
SQuery * pQuery = pRuntimeEnv->pQuery;
- if (queryHasRemainResForTableQuery(pRuntimeEnv)) {
+ if (hasNotReturnedResults(pRuntimeEnv)) {
if (pQuery->fillType != TSDB_FILL_NONE) {
/*
* There are remain results that are not returned due to result interpolation
@@ -5850,8 +5842,7 @@ static void stableQueryImpl(SQInfo *pQInfo) {
(isFixedOutputQuery(pRuntimeEnv) && (!isPointInterpoQuery(pQuery)) && (!pRuntimeEnv->groupbyColumn))) {
multiTableQueryProcess(pQInfo);
} else {
- assert((pQuery->checkResultBuf == 1 && pQuery->interval.interval == 0) || isPointInterpoQuery(pQuery) ||
- pRuntimeEnv->groupbyColumn);
+ assert(pQuery->checkResultBuf == 1 || isPointInterpoQuery(pQuery) || pRuntimeEnv->groupbyColumn);
sequentialTableProcess(pQInfo);
}
@@ -6318,7 +6309,7 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
}
type = TSDB_DATA_TYPE_DOUBLE;
- bytes = tDataTypeDesc[type].nSize;
+ bytes = tDataTypes[type].bytes;
} else if (pExprs[i].base.colInfo.colId == TSDB_TBNAME_COLUMN_INDEX && pExprs[i].base.functionId == TSDB_FUNC_TAGPRJ) { // parse the normal column
SSchema s = tGetTableNameColumnSchema();
type = s.type;
@@ -6379,7 +6370,7 @@ static int32_t createQueryFuncExprFromMsg(SQueryTableMsg *pQueryMsg, int32_t num
if (functId == TSDB_FUNC_TOP || functId == TSDB_FUNC_BOTTOM) {
int32_t j = getColumnIndexInSource(pQueryMsg, &pExprs[i].base, pTagCols);
if (j < 0 || j >= pQueryMsg->numOfCols) {
- assert(0);
+ return TSDB_CODE_QRY_INVALID_MSG;
} else {
SColumnInfo *pCol = &pQueryMsg->colList[j];
int32_t ret =
@@ -6644,7 +6635,7 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SSqlGroupbyExpr *pGrou
pQInfo->runtimeEnv.summary.tableInfoSize += (pTableGroupInfo->numOfTables * sizeof(STableQueryInfo));
pQInfo->runtimeEnv.pResultRowHashTable = taosHashInit(pTableGroupInfo->numOfTables, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
- pQInfo->runtimeEnv.keyBuf = malloc(TSDB_MAX_BYTES_PER_ROW);
+ pQInfo->runtimeEnv.keyBuf = malloc(TSDB_MAX_BYTES_PER_ROW); // todo opt size
pQInfo->runtimeEnv.pool = initResultRowPool(getResultRowSize(&pQInfo->runtimeEnv));
pQInfo->runtimeEnv.prevRow = malloc(POINTER_BYTES * pQuery->numOfCols + srcSize);
@@ -6932,11 +6923,12 @@ static size_t getResultSize(SQInfo *pQInfo, int64_t *numOfRows) {
*/
if (isTSCompQuery(pQuery) && (*numOfRows) > 0) {
struct stat fStat;
- if (fstat(fileno(*(FILE **)pQuery->sdata[0]->data), &fStat) == 0) {
+ FILE *f = *(FILE **)pQuery->sdata[0]->data;
+ if ((f != NULL) && (fstat(fileno(f), &fStat) == 0)) {
*numOfRows = fStat.st_size;
return fStat.st_size;
} else {
- qError("QInfo:%p failed to get file info, path:%s, reason:%s", pQInfo, pQuery->sdata[0]->data, strerror(errno));
+ qError("QInfo:%p failed to get file info, file:%p, reason:%s", pQInfo, f, strerror(errno));
return 0;
}
} else {
@@ -6951,7 +6943,7 @@ static int32_t doDumpQueryResult(SQInfo *pQInfo, char *data) {
// load data from file to msg buffer
if (isTSCompQuery(pQuery)) {
- FILE *f = *(FILE **)pQuery->sdata[0]->data;
+ FILE *f = *(FILE **)pQuery->sdata[0]->data; // TODO refactor
// make sure file exist
if (f) {
diff --git a/src/query/src/qFill.c b/src/query/src/qFill.c
index ca1203cb17..65b58467b7 100644
--- a/src/query/src/qFill.c
+++ b/src/query/src/qFill.c
@@ -25,6 +25,251 @@
#include "queryLog.h"
#define FILL_IS_ASC_FILL(_f) ((_f)->order == TSDB_ORDER_ASC)
+#define DO_INTERPOLATION(_v1, _v2, _k1, _k2, _k) ((_v1) + ((_v2) - (_v1)) * (((double)(_k)) - ((double)(_k1))) / (((double)(_k2)) - ((double)(_k1))))
+
+static void setTagsValue(SFillInfo* pFillInfo, tFilePage** data, int32_t genRows) {
+ for(int32_t j = 0; j < pFillInfo->numOfCols; ++j) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[j];
+ if (TSDB_COL_IS_NORMAL_COL(pCol->flag)) {
+ continue;
+ }
+
+ char* val1 = elePtrAt(data[j]->data, pCol->col.bytes, genRows);
+
+ assert(pCol->tagIndex >= 0 && pCol->tagIndex < pFillInfo->numOfTags);
+ SFillTagColInfo* pTag = &pFillInfo->pTags[pCol->tagIndex];
+
+ assert (pTag->col.colId == pCol->col.colId);
+ assignVal(val1, pTag->tagVal, pCol->col.bytes, pCol->col.type);
+ }
+}
+
+static void setNullValueForRow(SFillInfo* pFillInfo, tFilePage** data, int32_t numOfCol, int32_t rowIndex) {
+ // the first are always the timestamp column, so start from the second column.
+ for (int32_t i = 1; i < numOfCol; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+
+ char* output = elePtrAt(data[i]->data, pCol->col.bytes, rowIndex);
+ setNull(output, pCol->col.type, pCol->col.bytes);
+ }
+}
+
+static void doFillOneRowResult(SFillInfo* pFillInfo, tFilePage** data, char** srcData, int64_t ts, bool outOfBound) {
+ char* prev = pFillInfo->prevValues;
+ char* next = pFillInfo->nextValues;
+
+ SPoint point1, point2, point;
+ int32_t step = GET_FORWARD_DIRECTION_FACTOR(pFillInfo->order);
+
+ // set the primary timestamp column value
+ int32_t index = pFillInfo->numOfCurrent;
+ char* val = elePtrAt(data[0]->data, TSDB_KEYSIZE, index);
+ *(TSKEY*) val = pFillInfo->currentKey;
+
+ // set the other values
+ if (pFillInfo->type == TSDB_FILL_PREV) {
+ char* p = FILL_IS_ASC_FILL(pFillInfo) ? prev : next;
+
+ if (p != NULL) {
+ for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ if (TSDB_COL_IS_TAG(pCol->flag)) {
+ continue;
+ }
+
+ char* output = elePtrAt(data[i]->data, pCol->col.bytes, index);
+ assignVal(output, p + pCol->col.offset, pCol->col.bytes, pCol->col.type);
+ }
+ } else { // no prev value yet, set the value for NULL
+ setNullValueForRow(pFillInfo, data, pFillInfo->numOfCols, index);
+ }
+ } else if (pFillInfo->type == TSDB_FILL_NEXT) {
+ char* p = FILL_IS_ASC_FILL(pFillInfo)? next : prev;
+
+ if (p != NULL) {
+ for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ if (TSDB_COL_IS_TAG(pCol->flag)) {
+ continue;
+ }
+
+ char* output = elePtrAt(data[i]->data, pCol->col.bytes, index);
+ assignVal(output, p + pCol->col.offset, pCol->col.bytes, pCol->col.type);
+ }
+ } else { // no prev value yet, set the value for NULL
+ setNullValueForRow(pFillInfo, data, pFillInfo->numOfCols, index);
+ }
+ } else if (pFillInfo->type == TSDB_FILL_LINEAR) {
+ // TODO : linear interpolation supports NULL value
+ if (prev != NULL && !outOfBound) {
+ for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ if (TSDB_COL_IS_TAG(pCol->flag)) {
+ continue;
+ }
+
+ int16_t type = pCol->col.type;
+ int16_t bytes = pCol->col.bytes;
+
+ char *val1 = elePtrAt(data[i]->data, pCol->col.bytes, index);
+ if (type == TSDB_DATA_TYPE_BINARY|| type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_BOOL) {
+ setNull(val1, pCol->col.type, bytes);
+ continue;
+ }
+
+ point1 = (SPoint){.key = *(TSKEY*)(prev), .val = prev + pCol->col.offset};
+ point2 = (SPoint){.key = ts, .val = srcData[i] + pFillInfo->index * bytes};
+ point = (SPoint){.key = pFillInfo->currentKey, .val = val1};
+ taosGetLinearInterpolationVal(type, &point1, &point2, &point);
+ }
+ } else {
+ setNullValueForRow(pFillInfo, data, pFillInfo->numOfCols, index);
+ }
+ } else { /* fill the default value */
+ for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ if (TSDB_COL_IS_TAG(pCol->flag)) {
+ continue;
+ }
+
+ char* val1 = elePtrAt(data[i]->data, pCol->col.bytes, index);
+ assignVal(val1, (char*)&pCol->fillVal.i, pCol->col.bytes, pCol->col.type);
+ }
+ }
+
+ setTagsValue(pFillInfo, data, index);
+ pFillInfo->currentKey = taosTimeAdd(pFillInfo->currentKey, pFillInfo->interval.sliding * step, pFillInfo->interval.slidingUnit, pFillInfo->precision);
+ pFillInfo->numOfCurrent++;
+}
+
+static void initBeforeAfterDataBuf(SFillInfo* pFillInfo, char** next) {
+ if (*next != NULL) {
+ return;
+ }
+
+ *next = calloc(1, pFillInfo->rowSize);
+ for (int i = 1; i < pFillInfo->numOfCols; i++) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ setNull(*next + pCol->col.offset, pCol->col.type, pCol->col.bytes);
+ }
+}
+
+static void copyCurrentRowIntoBuf(SFillInfo* pFillInfo, char** srcData, char* buf) {
+ int32_t rowIndex = pFillInfo->index;
+ for (int32_t i = 0; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ memcpy(buf + pCol->col.offset, srcData[i] + rowIndex * pCol->col.bytes, pCol->col.bytes);
+ }
+}
+
+static int32_t fillResultImpl(SFillInfo* pFillInfo, tFilePage** data, int32_t outputRows) {
+ pFillInfo->numOfCurrent = 0;
+
+ char** srcData = pFillInfo->pData;
+ char** prev = &pFillInfo->prevValues;
+ char** next = &pFillInfo->nextValues;
+
+ int32_t step = GET_FORWARD_DIRECTION_FACTOR(pFillInfo->order);
+
+ if (FILL_IS_ASC_FILL(pFillInfo)) {
+ assert(pFillInfo->currentKey >= pFillInfo->start);
+ } else {
+ assert(pFillInfo->currentKey <= pFillInfo->start);
+ }
+
+ while (pFillInfo->numOfCurrent < outputRows) {
+ int64_t ts = ((int64_t*)pFillInfo->pData[0])[pFillInfo->index];
+
+ // set the next value for interpolation
+ if ((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) ||
+ (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) {
+ initBeforeAfterDataBuf(pFillInfo, next);
+ copyCurrentRowIntoBuf(pFillInfo, srcData, *next);
+ }
+
+ if (((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) || (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) &&
+ pFillInfo->numOfCurrent < outputRows) {
+
+ // fill the gap between two actual input rows
+ while (((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) ||
+ (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) &&
+ pFillInfo->numOfCurrent < outputRows) {
+ doFillOneRowResult(pFillInfo, data, srcData, ts, false);
+ }
+
+ // output buffer is full, abort
+ if (pFillInfo->numOfCurrent == outputRows) {
+ pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
+ return outputRows;
+ }
+ } else {
+ assert(pFillInfo->currentKey == ts);
+ initBeforeAfterDataBuf(pFillInfo, prev);
+
+ // assign rows to dst buffer
+ for (int32_t i = 0; i < pFillInfo->numOfCols; ++i) {
+ SFillColInfo* pCol = &pFillInfo->pFillCol[i];
+ if (TSDB_COL_IS_TAG(pCol->flag)) {
+ continue;
+ }
+
+ char* output = elePtrAt(data[i]->data, pCol->col.bytes, pFillInfo->numOfCurrent);
+ char* src = elePtrAt(srcData[i], pCol->col.bytes, pFillInfo->index);
+
+ if (i == 0 || (pCol->functionId != TSDB_FUNC_COUNT && !isNull(src, pCol->col.type)) ||
+ (pCol->functionId == TSDB_FUNC_COUNT && GET_INT64_VAL(src) != 0)) {
+ assignVal(output, src, pCol->col.bytes, pCol->col.type);
+ memcpy(*prev + pCol->col.offset, src, pCol->col.bytes);
+ } else { // i > 0 and data is null , do interpolation
+ if (pFillInfo->type == TSDB_FILL_PREV) {
+ assignVal(output, *prev + pCol->col.offset, pCol->col.bytes, pCol->col.type);
+ } else if (pFillInfo->type == TSDB_FILL_LINEAR) {
+ assignVal(output, src, pCol->col.bytes, pCol->col.type);
+ memcpy(*prev + pCol->col.offset, src, pCol->col.bytes);
+ } else {
+ assignVal(output, (char*)&pCol->fillVal.i, pCol->col.bytes, pCol->col.type);
+ }
+ }
+ }
+
+ // set the tag value for final result
+ setTagsValue(pFillInfo, data, pFillInfo->numOfCurrent);
+
+ pFillInfo->currentKey = taosTimeAdd(pFillInfo->currentKey, pFillInfo->interval.sliding * step,
+ pFillInfo->interval.slidingUnit, pFillInfo->precision);
+ pFillInfo->index += 1;
+ pFillInfo->numOfCurrent += 1;
+ }
+
+ if (pFillInfo->index >= pFillInfo->numOfRows || pFillInfo->numOfCurrent >= outputRows) {
+ /* the raw data block is exhausted, next value does not exists */
+ if (pFillInfo->index >= pFillInfo->numOfRows) {
+ tfree(*next);
+ }
+
+ pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
+ return pFillInfo->numOfCurrent;
+ }
+ }
+
+ return pFillInfo->numOfCurrent;
+}
+
+static int64_t appendFilledResult(SFillInfo* pFillInfo, tFilePage** output, int64_t resultCapacity) {
+ /*
+ * These data are generated according to fill strategy, since the current timestamp is out of the time window of
+ * real result set. Note that we need to keep the direct previous result rows, to generated the filled data.
+ */
+ pFillInfo->numOfCurrent = 0;
+ while (pFillInfo->numOfCurrent < resultCapacity) {
+ doFillOneRowResult(pFillInfo, output, pFillInfo->pData, pFillInfo->start, true);
+ }
+
+ pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
+
+ assert(pFillInfo->numOfCurrent == resultCapacity);
+ return resultCapacity;
+}
// there are no duplicated tags in the SFillTagColInfo list
static int32_t setTagColumnInfo(SFillInfo* pFillInfo, int32_t numOfCols, int32_t capacity) {
@@ -68,6 +313,14 @@ static int32_t setTagColumnInfo(SFillInfo* pFillInfo, int32_t numOfCols, int32_t
return rowsize;
}
+static int32_t taosNumOfRemainRows(SFillInfo* pFillInfo) {
+ if (pFillInfo->numOfRows == 0 || (pFillInfo->numOfRows > 0 && pFillInfo->index >= pFillInfo->numOfRows)) {
+ return 0;
+ }
+
+ return pFillInfo->numOfRows - pFillInfo->index;
+}
+
SFillInfo* taosInitFillInfo(int32_t order, TSKEY skey, int32_t numOfTags, int32_t capacity, int32_t numOfCols,
int64_t slidingTime, int8_t slidingUnit, int8_t precision, int32_t fillType,
SFillColInfo* pCol, void* handle) {
@@ -76,22 +329,21 @@ SFillInfo* taosInitFillInfo(int32_t order, TSKEY skey, int32_t numOfTags, int32_
}
SFillInfo* pFillInfo = calloc(1, sizeof(SFillInfo));
-
taosResetFillInfo(pFillInfo, skey);
- pFillInfo->order = order;
- pFillInfo->type = fillType;
- pFillInfo->pFillCol = pCol;
+ pFillInfo->order = order;
+ pFillInfo->type = fillType;
+ pFillInfo->pFillCol = pCol;
pFillInfo->numOfTags = numOfTags;
pFillInfo->numOfCols = numOfCols;
pFillInfo->precision = precision;
pFillInfo->alloc = capacity;
pFillInfo->handle = handle;
- pFillInfo->interval.interval = slidingTime;
+ pFillInfo->interval.interval = slidingTime;
pFillInfo->interval.intervalUnit = slidingUnit;
- pFillInfo->interval.sliding = slidingTime;
- pFillInfo->interval.slidingUnit = slidingUnit;
+ pFillInfo->interval.sliding = slidingTime;
+ pFillInfo->interval.slidingUnit = slidingUnit;
pFillInfo->pData = malloc(POINTER_BYTES * numOfCols);
if (numOfTags > 0) {
@@ -185,7 +437,11 @@ void taosFillCopyInputDataFromOneFilePage(SFillInfo* pFillInfo, const tFilePage*
}
}
-int64_t getNumOfResWithFill(SFillInfo* pFillInfo, TSKEY ekey, int32_t maxNumOfRows) {
+bool taosFillHasMoreResults(SFillInfo* pFillInfo) {
+ return taosNumOfRemainRows(pFillInfo) > 0;
+}
+
+int64_t getNumOfResultsAfterFillGap(SFillInfo* pFillInfo, TSKEY ekey, int32_t maxNumOfRows) {
int64_t* tsList = (int64_t*) pFillInfo->pData[0];
int32_t numOfRows = taosNumOfRemainRows(pFillInfo);
@@ -223,16 +479,6 @@ int64_t getNumOfResWithFill(SFillInfo* pFillInfo, TSKEY ekey, int32_t maxNumOfRo
return (numOfRes > maxNumOfRows) ? maxNumOfRows : numOfRes;
}
-int32_t taosNumOfRemainRows(SFillInfo* pFillInfo) {
- if (pFillInfo->numOfRows == 0 || (pFillInfo->numOfRows > 0 && pFillInfo->index >= pFillInfo->numOfRows)) {
- return 0;
- }
-
- return pFillInfo->numOfRows - pFillInfo->index;
-}
-
-#define DO_INTERPOLATION(_v1, _v2, _k1, _k2, _k) ((_v1) + ((_v2) - (_v1)) * (((double)(_k)) - ((double)(_k1))) / (((double)(_k2)) - ((double)(_k1))))
-
int32_t taosGetLinearInterpolationVal(int32_t type, SPoint* point1, SPoint* point2, SPoint* point) {
double v1 = -1;
double v2 = -1;
@@ -256,243 +502,15 @@ int32_t taosGetLinearInterpolationVal(int32_t type, SPoint* point1, SPoint* poin
return TSDB_CODE_SUCCESS;
}
-static void setTagsValue(SFillInfo* pFillInfo, tFilePage** data, int32_t genRows) {
- for(int32_t j = 0; j < pFillInfo->numOfCols; ++j) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[j];
- if (TSDB_COL_IS_NORMAL_COL(pCol->flag)) {
- continue;
- }
-
- char* val1 = elePtrAt(data[j]->data, pCol->col.bytes, genRows);
-
- assert(pCol->tagIndex >= 0 && pCol->tagIndex < pFillInfo->numOfTags);
- SFillTagColInfo* pTag = &pFillInfo->pTags[pCol->tagIndex];
-
- assert (pTag->col.colId == pCol->col.colId);
- assignVal(val1, pTag->tagVal, pCol->col.bytes, pCol->col.type);
- }
-}
-
-static void setNullValueForRow(SFillInfo* pFillInfo, tFilePage** data, int32_t numOfCol, int32_t rowIndex) {
- // the first are always the timestamp column, so start from the second column.
- for (int32_t i = 1; i < numOfCol; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
-
- char* output = elePtrAt(data[i]->data, pCol->col.bytes, rowIndex);
- setNull(output, pCol->col.type, pCol->col.bytes);
- }
-}
-
-static void doFillOneRowResult(SFillInfo* pFillInfo, tFilePage** data, char** srcData, int64_t ts, bool outOfBound) {
- char* prev = pFillInfo->prevValues;
- char* next = pFillInfo->nextValues;
-
- SPoint point1, point2, point;
- int32_t step = GET_FORWARD_DIRECTION_FACTOR(pFillInfo->order);
-
- // set the primary timestamp column value
- int32_t index = pFillInfo->numOfCurrent;
- char* val = elePtrAt(data[0]->data, TSDB_KEYSIZE, index);
- *(TSKEY*) val = pFillInfo->currentKey;
-
- // set the other values
- if (pFillInfo->type == TSDB_FILL_PREV) {
- char* p = FILL_IS_ASC_FILL(pFillInfo) ? prev : next;
-
- if (p != NULL) {
- for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- if (TSDB_COL_IS_TAG(pCol->flag)) {
- continue;
- }
-
- char* output = elePtrAt(data[i]->data, pCol->col.bytes, index);
- assignVal(output, p + pCol->col.offset, pCol->col.bytes, pCol->col.type);
- }
- } else { // no prev value yet, set the value for NULL
- setNullValueForRow(pFillInfo, data, pFillInfo->numOfCols, index);
- }
- } else if (pFillInfo->type == TSDB_FILL_LINEAR) {
- // TODO : linear interpolation supports NULL value
- if (prev != NULL && !outOfBound) {
- for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- if (TSDB_COL_IS_TAG(pCol->flag)) {
- continue;
- }
-
- int16_t type = pCol->col.type;
- int16_t bytes = pCol->col.bytes;
-
- char *val1 = elePtrAt(data[i]->data, pCol->col.bytes, index);
- if (type == TSDB_DATA_TYPE_BINARY|| type == TSDB_DATA_TYPE_NCHAR || type == TSDB_DATA_TYPE_BOOL) {
- setNull(val1, pCol->col.type, bytes);
- continue;
- }
-
- point1 = (SPoint){.key = *(TSKEY*)(prev), .val = prev + pCol->col.offset};
- point2 = (SPoint){.key = ts, .val = srcData[i] + pFillInfo->index * bytes};
- point = (SPoint){.key = pFillInfo->currentKey, .val = val1};
- taosGetLinearInterpolationVal(type, &point1, &point2, &point);
- }
- } else {
- setNullValueForRow(pFillInfo, data, pFillInfo->numOfCols, index);
- }
- } else { /* fill the default value */
- for (int32_t i = 1; i < pFillInfo->numOfCols; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- if (TSDB_COL_IS_TAG(pCol->flag)) {
- continue;
- }
-
- char* val1 = elePtrAt(data[i]->data, pCol->col.bytes, index);
- assignVal(val1, (char*)&pCol->fillVal.i, pCol->col.bytes, pCol->col.type);
- }
- }
-
- setTagsValue(pFillInfo, data, index);
- pFillInfo->currentKey = taosTimeAdd(pFillInfo->currentKey, pFillInfo->interval.sliding * step, pFillInfo->interval.slidingUnit, pFillInfo->precision);
- pFillInfo->numOfCurrent++;
-}
-
-static void initBeforeAfterDataBuf(SFillInfo* pFillInfo, char** next) {
- if (*next != NULL) {
- return;
- }
-
- *next = calloc(1, pFillInfo->rowSize);
- for (int i = 1; i < pFillInfo->numOfCols; i++) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- setNull(*next + pCol->col.offset, pCol->col.type, pCol->col.bytes);
- }
-}
-
-static void copyCurrentRowIntoBuf(SFillInfo* pFillInfo, char** srcData, char* buf) {
- int32_t rowIndex = pFillInfo->index;
- for (int32_t i = 0; i < pFillInfo->numOfCols; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- memcpy(buf + pCol->col.offset, srcData[i] + rowIndex * pCol->col.bytes, pCol->col.bytes);
- }
-}
-
-static int32_t fillResultImpl(SFillInfo* pFillInfo, tFilePage** data, int32_t outputRows) {
- pFillInfo->numOfCurrent = 0;
-
- char** srcData = pFillInfo->pData;
- char** prev = &pFillInfo->prevValues;
- char** next = &pFillInfo->nextValues;
-
- int32_t step = GET_FORWARD_DIRECTION_FACTOR(pFillInfo->order);
-
- if (FILL_IS_ASC_FILL(pFillInfo)) {
- assert(pFillInfo->currentKey >= pFillInfo->start);
- } else {
- assert(pFillInfo->currentKey <= pFillInfo->start);
- }
-
- while (pFillInfo->numOfCurrent < outputRows) {
- int64_t ts = ((int64_t*)pFillInfo->pData[0])[pFillInfo->index];
-
- if ((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) ||
- (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) {
- /* set the next value for interpolation */
- initBeforeAfterDataBuf(pFillInfo, next);
- copyCurrentRowIntoBuf(pFillInfo, srcData, *next);
- }
-
- if (((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) || (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) &&
- pFillInfo->numOfCurrent < outputRows) {
-
- // fill the gap between two actual input rows
- while (((pFillInfo->currentKey < ts && FILL_IS_ASC_FILL(pFillInfo)) ||
- (pFillInfo->currentKey > ts && !FILL_IS_ASC_FILL(pFillInfo))) &&
- pFillInfo->numOfCurrent < outputRows) {
- doFillOneRowResult(pFillInfo, data, srcData, ts, false);
- }
-
- // output buffer is full, abort
- if (pFillInfo->numOfCurrent == outputRows) {
- pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
- return outputRows;
- }
- } else {
- assert(pFillInfo->currentKey == ts);
- initBeforeAfterDataBuf(pFillInfo, prev);
-
- // assign rows to dst buffer
- for (int32_t i = 0; i < pFillInfo->numOfCols; ++i) {
- SFillColInfo* pCol = &pFillInfo->pFillCol[i];
- if (TSDB_COL_IS_TAG(pCol->flag)) {
- continue;
- }
-
- char* output = elePtrAt(data[i]->data, pCol->col.bytes, pFillInfo->numOfCurrent);
- char* src = elePtrAt(srcData[i], pCol->col.bytes, pFillInfo->index);
-
- if (i == 0 || (pCol->functionId != TSDB_FUNC_COUNT && !isNull(src, pCol->col.type)) ||
- (pCol->functionId == TSDB_FUNC_COUNT && GET_INT64_VAL(src) != 0)) {
- assignVal(output, src, pCol->col.bytes, pCol->col.type);
- memcpy(*prev + pCol->col.offset, src, pCol->col.bytes);
- } else { // i > 0 and data is null , do interpolation
- if (pFillInfo->type == TSDB_FILL_PREV) {
- assignVal(output, *prev + pCol->col.offset, pCol->col.bytes, pCol->col.type);
- } else if (pFillInfo->type == TSDB_FILL_LINEAR) {
- assignVal(output, src, pCol->col.bytes, pCol->col.type);
- memcpy(*prev + pCol->col.offset, src, pCol->col.bytes);
- } else {
- assignVal(output, (char*)&pCol->fillVal.i, pCol->col.bytes, pCol->col.type);
- }
- }
- }
-
- // set the tag value for final result
- setTagsValue(pFillInfo, data, pFillInfo->numOfCurrent);
-
- pFillInfo->currentKey = taosTimeAdd(pFillInfo->currentKey, pFillInfo->interval.sliding * step,
- pFillInfo->interval.slidingUnit, pFillInfo->precision);
- pFillInfo->index += 1;
- pFillInfo->numOfCurrent += 1;
- }
-
- if (pFillInfo->index >= pFillInfo->numOfRows || pFillInfo->numOfCurrent >= outputRows) {
- /* the raw data block is exhausted, next value does not exists */
- if (pFillInfo->index >= pFillInfo->numOfRows) {
- tfree(*next);
- }
-
- pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
- return pFillInfo->numOfCurrent;
- }
- }
-
- return pFillInfo->numOfCurrent;
-}
-
-static int64_t fillExternalResults(SFillInfo* pFillInfo, tFilePage** output, int64_t resultCapacity) {
- /*
- * These data are generated according to fill strategy, since the current timestamp is out of the time window of
- * real result set. Note that we need to keep the direct previous result rows, to generated the filled data.
- */
- pFillInfo->numOfCurrent = 0;
- while (pFillInfo->numOfCurrent < resultCapacity) {
- doFillOneRowResult(pFillInfo, output, pFillInfo->pData, pFillInfo->start, true);
- }
-
- pFillInfo->numOfTotal += pFillInfo->numOfCurrent;
-
- assert(pFillInfo->numOfCurrent == resultCapacity);
- return resultCapacity;
-}
-
int64_t taosFillResultDataBlock(SFillInfo* pFillInfo, tFilePage** output, int32_t capacity) {
int32_t remain = taosNumOfRemainRows(pFillInfo);
- int64_t numOfRes = getNumOfResWithFill(pFillInfo, pFillInfo->end, capacity);
+ int64_t numOfRes = getNumOfResultsAfterFillGap(pFillInfo, pFillInfo->end, capacity);
assert(numOfRes <= capacity);
// no data existed for fill operation now, append result according to the fill strategy
if (remain == 0) {
- fillExternalResults(pFillInfo, output, numOfRes);
+ appendFilledResult(pFillInfo, output, numOfRes);
} else {
fillResultImpl(pFillInfo, output, (int32_t) numOfRes);
assert(numOfRes == pFillInfo->numOfCurrent);
diff --git a/src/query/src/qHistogram.c b/src/query/src/qHistogram.c
index bdc071060c..ae25a75234 100644
--- a/src/query/src/qHistogram.c
+++ b/src/query/src/qHistogram.c
@@ -184,7 +184,7 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
histogramCreateBin(*pHisto, idx, val);
}
#else
- tSkipListKey key = tSkipListCreateKey(TSDB_DATA_TYPE_DOUBLE, &val, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
+ tSkipListKey key = tSkipListCreateKey(TSDB_DATA_TYPE_DOUBLE, &val, tDataTypes[TSDB_DATA_TYPE_DOUBLE].nSize);
SHistBin* entry = calloc(1, sizeof(SHistBin));
entry->val = val;
@@ -217,7 +217,7 @@ int32_t tHistogramAdd(SHistogramInfo** pHisto, double val) {
}
tSkipListKey kx =
- tSkipListCreateKey(TSDB_DATA_TYPE_DOUBLE, &(*pHisto)->max, tDataTypeDesc[TSDB_DATA_TYPE_DOUBLE].nSize);
+ tSkipListCreateKey(TSDB_DATA_TYPE_DOUBLE, &(*pHisto)->max, tDataTypes[TSDB_DATA_TYPE_DOUBLE].nSize);
pLast = tSkipListGetOne((*pHisto)->pList, &kx);
}
} else {
diff --git a/src/query/src/qParserImpl.c b/src/query/src/qParserImpl.c
index b3827ca45c..52294375cf 100644
--- a/src/query/src/qParserImpl.c
+++ b/src/query/src/qParserImpl.c
@@ -399,21 +399,21 @@ void tSqlSetColumnType(TAOS_FIELD *pField, SStrToken *type) {
pField->name[0] = 0;
int32_t i = 0;
- while (i < tListLen(tDataTypeDesc)) {
- if ((type->n == tDataTypeDesc[i].nameLen) &&
- (strncasecmp(type->z, tDataTypeDesc[i].aName, tDataTypeDesc[i].nameLen) == 0)) {
+ while (i < tListLen(tDataTypes)) {
+ if ((type->n == tDataTypes[i].nameLen) &&
+ (strncasecmp(type->z, tDataTypes[i].name, tDataTypes[i].nameLen) == 0)) {
break;
}
i += 1;
}
- if (i == tListLen(tDataTypeDesc)) {
+ if (i == tListLen(tDataTypes)) {
return;
}
pField->type = i;
- pField->bytes = tDataTypeDesc[i].nSize;
+ pField->bytes = tDataTypes[i].bytes;
if (i == TSDB_DATA_TYPE_NCHAR) {
/*
@@ -586,11 +586,12 @@ SCreatedTableInfo createNewChildTableInfo(SStrToken *pTableName, SArray *pTagVal
return info;
}
-SAlterTableSQL *tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type) {
+SAlterTableSQL *tAlterTableSqlElems(SStrToken *pTableName, SArray *pCols, SArray *pVals, int32_t type, int16_t tableType) {
SAlterTableSQL *pAlterTable = calloc(1, sizeof(SAlterTableSQL));
pAlterTable->name = *pTableName;
pAlterTable->type = type;
+ pAlterTable->tableType = tableType;
if (type == TSDB_ALTER_TABLE_ADD_COLUMN || type == TSDB_ALTER_TABLE_ADD_TAG_COLUMN) {
pAlterTable->pAddColumns = pCols;
@@ -734,9 +735,10 @@ void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParam, ...) {
va_end(va);
}
-void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck) {
+void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck, int16_t tableType) {
pInfo->type = type;
pInfo->pDCLInfo = tTokenListAppend(pInfo->pDCLInfo, pToken);
+ pInfo->pDCLInfo->tableType = tableType;
pInfo->pDCLInfo->existsCheck = (existsCheck->n == 1);
}
diff --git a/src/query/src/sql.c b/src/query/src/sql.c
index f540e49646..700c26c4f8 100644
--- a/src/query/src/sql.c
+++ b/src/query/src/sql.c
@@ -97,27 +97,27 @@
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 281
+#define YYNOCODE 282
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SStrToken
typedef union {
int yyinit;
ParseTOKENTYPE yy0;
- tSQLExpr* yy50;
- SCreateAcctSQL yy79;
- tVariant yy106;
- int64_t yy109;
- int yy172;
- tSQLExprList* yy178;
- SArray* yy221;
- SSubclauseInfo* yy273;
- SIntervalVal yy280;
- SQuerySQL* yy344;
+ SCreatedTableInfo yy42;
+ SCreateAcctSQL yy71;
+ SQuerySQL* yy114;
+ TAOS_FIELD yy179;
+ SLimitVal yy204;
+ SSubclauseInfo* yy219;
+ int yy222;
+ SArray* yy247;
+ tSQLExpr* yy326;
SCreateTableSQL* yy358;
- SCreatedTableInfo yy416;
- SLimitVal yy454;
- SCreateDBInfo yy478;
- TAOS_FIELD yy503;
+ tVariant yy378;
+ SCreateDBInfo yy388;
+ int64_t yy403;
+ SIntervalVal yy430;
+ tSQLExprList* yy522;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -127,17 +127,17 @@ typedef union {
#define ParseARG_FETCH SSqlInfo* pInfo = yypParser->pInfo
#define ParseARG_STORE yypParser->pInfo = pInfo
#define YYFALLBACK 1
-#define YYNSTATE 259
-#define YYNRULE 242
+#define YYNSTATE 283
+#define YYNRULE 250
#define YYNTOKEN 210
-#define YY_MAX_SHIFT 258
-#define YY_MIN_SHIFTREDUCE 433
-#define YY_MAX_SHIFTREDUCE 674
-#define YY_ERROR_ACTION 675
-#define YY_ACCEPT_ACTION 676
-#define YY_NO_ACTION 677
-#define YY_MIN_REDUCE 678
-#define YY_MAX_REDUCE 919
+#define YY_MAX_SHIFT 282
+#define YY_MIN_SHIFTREDUCE 463
+#define YY_MAX_SHIFTREDUCE 712
+#define YY_ERROR_ACTION 713
+#define YY_ACCEPT_ACTION 714
+#define YY_NO_ACTION 715
+#define YY_MIN_REDUCE 716
+#define YY_MAX_REDUCE 965
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
@@ -203,226 +203,241 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (578)
+#define YY_ACTTAB_COUNT (615)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 144, 476, 144, 23, 676, 258, 831, 549, 12, 477,
- /* 10 */ 906, 169, 907, 37, 38, 820, 39, 40, 143, 23,
- /* 20 */ 174, 31, 476, 476, 211, 43, 41, 45, 42, 164,
- /* 30 */ 477, 477, 106, 36, 35, 233, 232, 34, 33, 32,
- /* 40 */ 37, 38, 805, 39, 40, 820, 148, 174, 31, 163,
- /* 50 */ 256, 211, 43, 41, 45, 42, 177, 166, 806, 196,
- /* 60 */ 36, 35, 828, 903, 34, 33, 32, 434, 435, 436,
- /* 70 */ 437, 438, 439, 440, 441, 442, 443, 444, 445, 257,
- /* 80 */ 809, 226, 186, 37, 38, 719, 39, 40, 134, 199,
- /* 90 */ 174, 31, 144, 798, 211, 43, 41, 45, 42, 111,
- /* 100 */ 111, 168, 907, 36, 35, 57, 243, 34, 33, 32,
- /* 110 */ 17, 224, 251, 250, 223, 222, 221, 249, 220, 248,
- /* 120 */ 247, 246, 219, 245, 244, 179, 902, 778, 628, 766,
- /* 130 */ 767, 768, 769, 770, 771, 772, 773, 774, 775, 776,
- /* 140 */ 777, 779, 780, 38, 18, 39, 40, 23, 809, 174,
- /* 150 */ 31, 901, 28, 211, 43, 41, 45, 42, 111, 208,
- /* 160 */ 859, 62, 36, 35, 23, 212, 34, 33, 32, 226,
- /* 170 */ 39, 40, 180, 111, 174, 31, 160, 65, 211, 43,
- /* 180 */ 41, 45, 42, 13, 178, 181, 806, 36, 35, 189,
- /* 190 */ 584, 34, 33, 32, 173, 641, 193, 192, 632, 156,
- /* 200 */ 635, 231, 638, 806, 161, 157, 797, 22, 799, 93,
- /* 210 */ 92, 151, 173, 641, 609, 610, 632, 807, 635, 860,
- /* 220 */ 638, 206, 17, 252, 251, 250, 170, 171, 23, 249,
- /* 230 */ 210, 248, 247, 246, 63, 245, 244, 182, 9, 18,
- /* 240 */ 230, 229, 66, 121, 170, 171, 809, 28, 784, 67,
- /* 250 */ 146, 782, 783, 255, 254, 99, 785, 644, 787, 788,
- /* 260 */ 786, 81, 789, 790, 588, 235, 243, 806, 195, 916,
- /* 270 */ 43, 41, 45, 42, 728, 159, 596, 134, 36, 35,
- /* 280 */ 800, 108, 34, 33, 32, 568, 720, 64, 565, 134,
- /* 290 */ 566, 630, 567, 44, 79, 83, 808, 3, 125, 58,
- /* 300 */ 88, 91, 82, 73, 69, 72, 640, 147, 85, 36,
- /* 310 */ 35, 44, 105, 34, 33, 32, 183, 184, 576, 581,
- /* 320 */ 28, 639, 138, 136, 640, 19, 198, 631, 96, 95,
- /* 330 */ 94, 34, 33, 32, 172, 600, 601, 49, 660, 639,
- /* 340 */ 48, 15, 642, 14, 634, 52, 637, 14, 633, 557,
- /* 350 */ 636, 214, 149, 558, 24, 150, 24, 50, 48, 78,
- /* 360 */ 77, 154, 55, 53, 548, 572, 570, 573, 571, 155,
- /* 370 */ 11, 10, 90, 89, 153, 4, 104, 102, 142, 152,
- /* 380 */ 145, 870, 869, 175, 822, 830, 29, 866, 865, 176,
- /* 390 */ 569, 234, 837, 839, 107, 852, 851, 122, 123, 120,
- /* 400 */ 124, 730, 595, 218, 28, 140, 26, 197, 227, 727,
- /* 410 */ 228, 915, 75, 914, 912, 126, 748, 27, 25, 141,
- /* 420 */ 717, 84, 715, 86, 87, 103, 54, 819, 713, 712,
- /* 430 */ 185, 200, 135, 710, 709, 708, 707, 706, 137, 704,
- /* 440 */ 702, 165, 700, 698, 696, 204, 139, 51, 46, 112,
- /* 450 */ 209, 207, 205, 203, 201, 59, 30, 60, 853, 80,
- /* 460 */ 236, 237, 238, 239, 240, 241, 242, 253, 674, 188,
- /* 470 */ 162, 187, 216, 217, 673, 158, 190, 191, 70, 672,
- /* 480 */ 665, 194, 711, 198, 578, 97, 98, 597, 705, 129,
- /* 490 */ 56, 128, 749, 127, 130, 131, 133, 132, 1, 697,
- /* 500 */ 109, 61, 2, 167, 202, 804, 117, 113, 114, 602,
- /* 510 */ 115, 116, 118, 119, 110, 20, 6, 7, 643, 21,
- /* 520 */ 5, 8, 645, 16, 68, 213, 517, 215, 513, 66,
- /* 530 */ 511, 510, 509, 506, 480, 225, 74, 47, 71, 76,
- /* 540 */ 24, 551, 550, 547, 501, 499, 491, 497, 493, 495,
- /* 550 */ 489, 487, 519, 518, 516, 515, 514, 512, 508, 507,
- /* 560 */ 48, 478, 449, 447, 678, 677, 677, 677, 677, 677,
- /* 570 */ 677, 677, 677, 677, 677, 677, 100, 101,
+ /* 0 */ 872, 507, 159, 714, 282, 159, 15, 580, 183, 508,
+ /* 10 */ 663, 186, 948, 41, 42, 947, 43, 44, 26, 158,
+ /* 20 */ 191, 35, 507, 507, 232, 47, 45, 49, 46, 163,
+ /* 30 */ 508, 508, 850, 40, 39, 257, 256, 38, 37, 36,
+ /* 40 */ 41, 42, 118, 43, 44, 861, 664, 191, 35, 179,
+ /* 50 */ 280, 232, 47, 45, 49, 46, 181, 869, 847, 215,
+ /* 60 */ 40, 39, 957, 123, 38, 37, 36, 464, 465, 466,
+ /* 70 */ 467, 468, 469, 470, 471, 472, 473, 474, 475, 281,
+ /* 80 */ 91, 196, 205, 41, 42, 267, 43, 44, 839, 247,
+ /* 90 */ 191, 35, 159, 944, 232, 47, 45, 49, 46, 123,
+ /* 100 */ 220, 185, 948, 40, 39, 850, 62, 38, 37, 36,
+ /* 110 */ 20, 245, 275, 274, 244, 243, 242, 273, 241, 272,
+ /* 120 */ 271, 270, 240, 269, 268, 901, 267, 227, 817, 661,
+ /* 130 */ 805, 806, 807, 808, 809, 810, 811, 812, 813, 814,
+ /* 140 */ 815, 816, 818, 819, 42, 208, 43, 44, 642, 643,
+ /* 150 */ 191, 35, 212, 211, 232, 47, 45, 49, 46, 229,
+ /* 160 */ 861, 67, 21, 40, 39, 247, 276, 38, 37, 36,
+ /* 170 */ 32, 43, 44, 197, 180, 191, 35, 849, 70, 232,
+ /* 180 */ 47, 45, 49, 46, 16, 38, 37, 36, 40, 39,
+ /* 190 */ 850, 123, 38, 37, 36, 190, 674, 72, 26, 665,
+ /* 200 */ 167, 668, 667, 671, 670, 61, 168, 836, 837, 25,
+ /* 210 */ 840, 103, 102, 166, 190, 674, 758, 199, 665, 147,
+ /* 220 */ 668, 767, 671, 20, 147, 275, 274, 187, 188, 841,
+ /* 230 */ 273, 231, 272, 271, 270, 838, 269, 268, 846, 198,
+ /* 240 */ 823, 21, 249, 821, 822, 943, 187, 188, 824, 32,
+ /* 250 */ 826, 827, 825, 900, 828, 829, 123, 3, 137, 47,
+ /* 260 */ 45, 49, 46, 29, 78, 74, 77, 40, 39, 617,
+ /* 270 */ 214, 38, 37, 36, 233, 601, 759, 174, 598, 147,
+ /* 280 */ 599, 26, 600, 201, 89, 93, 254, 253, 26, 942,
+ /* 290 */ 83, 98, 101, 92, 26, 48, 153, 149, 26, 95,
+ /* 300 */ 175, 26, 151, 106, 105, 104, 202, 203, 673, 26,
+ /* 310 */ 69, 40, 39, 200, 48, 38, 37, 36, 68, 194,
+ /* 320 */ 10, 847, 63, 672, 71, 133, 195, 673, 847, 279,
+ /* 330 */ 278, 110, 250, 666, 847, 669, 251, 614, 847, 255,
+ /* 340 */ 116, 847, 672, 22, 621, 848, 609, 259, 32, 847,
+ /* 350 */ 218, 629, 633, 634, 217, 27, 120, 52, 18, 693,
+ /* 360 */ 675, 189, 53, 176, 17, 17, 590, 677, 56, 235,
+ /* 370 */ 591, 27, 100, 99, 27, 52, 82, 81, 12, 11,
+ /* 380 */ 161, 602, 54, 59, 162, 579, 57, 88, 87, 14,
+ /* 390 */ 13, 605, 603, 606, 604, 115, 113, 164, 165, 171,
+ /* 400 */ 911, 172, 170, 4, 157, 169, 160, 910, 192, 907,
+ /* 410 */ 906, 193, 258, 117, 871, 33, 878, 880, 119, 863,
+ /* 420 */ 893, 892, 134, 135, 132, 136, 769, 32, 239, 155,
+ /* 430 */ 30, 248, 766, 216, 962, 79, 961, 114, 959, 138,
+ /* 440 */ 252, 956, 85, 955, 628, 953, 221, 139, 182, 225,
+ /* 450 */ 787, 31, 28, 58, 156, 756, 94, 860, 55, 50,
+ /* 460 */ 754, 96, 230, 124, 228, 125, 97, 752, 126, 127,
+ /* 470 */ 226, 128, 224, 222, 751, 34, 204, 148, 90, 749,
+ /* 480 */ 260, 261, 262, 748, 747, 746, 745, 263, 150, 152,
+ /* 490 */ 742, 740, 264, 738, 736, 734, 265, 154, 266, 219,
+ /* 500 */ 64, 65, 894, 277, 712, 206, 207, 177, 237, 238,
+ /* 510 */ 711, 178, 173, 209, 75, 210, 710, 698, 217, 213,
+ /* 520 */ 750, 611, 107, 60, 744, 234, 142, 141, 788, 140,
+ /* 530 */ 143, 144, 146, 145, 1, 108, 743, 2, 109, 735,
+ /* 540 */ 66, 6, 184, 630, 845, 121, 223, 131, 129, 130,
+ /* 550 */ 635, 122, 5, 23, 7, 8, 24, 676, 9, 19,
+ /* 560 */ 678, 71, 73, 236, 548, 544, 542, 541, 540, 537,
+ /* 570 */ 511, 246, 76, 27, 51, 582, 80, 84, 581, 578,
+ /* 580 */ 532, 86, 530, 522, 528, 524, 526, 520, 518, 550,
+ /* 590 */ 549, 547, 546, 545, 543, 539, 538, 52, 509, 479,
+ /* 600 */ 477, 716, 715, 715, 715, 715, 715, 715, 715, 715,
+ /* 610 */ 715, 715, 715, 111, 112,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 269, 1, 269, 214, 211, 212, 214, 5, 269, 9,
- /* 10 */ 279, 278, 279, 13, 14, 252, 16, 17, 269, 214,
- /* 20 */ 20, 21, 1, 1, 24, 25, 26, 27, 28, 266,
- /* 30 */ 9, 9, 214, 33, 34, 33, 34, 37, 38, 39,
- /* 40 */ 13, 14, 253, 16, 17, 252, 269, 20, 21, 213,
- /* 50 */ 214, 24, 25, 26, 27, 28, 251, 231, 253, 266,
- /* 60 */ 33, 34, 270, 269, 37, 38, 39, 45, 46, 47,
+ /* 0 */ 214, 1, 270, 211, 212, 270, 270, 5, 231, 9,
+ /* 10 */ 1, 279, 280, 13, 14, 280, 16, 17, 214, 270,
+ /* 20 */ 20, 21, 1, 1, 24, 25, 26, 27, 28, 270,
+ /* 30 */ 9, 9, 255, 33, 34, 33, 34, 37, 38, 39,
+ /* 40 */ 13, 14, 214, 16, 17, 253, 37, 20, 21, 213,
+ /* 50 */ 214, 24, 25, 26, 27, 28, 252, 271, 254, 267,
+ /* 60 */ 33, 34, 255, 214, 37, 38, 39, 45, 46, 47,
/* 70 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- /* 80 */ 254, 76, 60, 13, 14, 218, 16, 17, 221, 271,
- /* 90 */ 20, 21, 269, 0, 24, 25, 26, 27, 28, 214,
- /* 100 */ 214, 278, 279, 33, 34, 105, 78, 37, 38, 39,
- /* 110 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- /* 120 */ 95, 96, 97, 98, 99, 231, 269, 230, 101, 232,
- /* 130 */ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- /* 140 */ 243, 244, 245, 14, 100, 16, 17, 214, 254, 20,
- /* 150 */ 21, 269, 108, 24, 25, 26, 27, 28, 214, 273,
- /* 160 */ 275, 275, 33, 34, 214, 15, 37, 38, 39, 76,
- /* 170 */ 16, 17, 66, 214, 20, 21, 269, 219, 24, 25,
- /* 180 */ 26, 27, 28, 44, 251, 214, 253, 33, 34, 130,
- /* 190 */ 37, 37, 38, 39, 1, 2, 137, 138, 5, 60,
- /* 200 */ 7, 251, 9, 253, 269, 66, 248, 249, 250, 70,
- /* 210 */ 71, 72, 1, 2, 119, 120, 5, 246, 7, 275,
- /* 220 */ 9, 277, 85, 231, 87, 88, 33, 34, 214, 92,
- /* 230 */ 37, 94, 95, 96, 275, 98, 99, 131, 100, 100,
- /* 240 */ 134, 135, 104, 105, 33, 34, 254, 108, 230, 219,
- /* 250 */ 269, 233, 234, 63, 64, 65, 238, 107, 240, 241,
- /* 260 */ 242, 73, 244, 245, 111, 251, 78, 253, 129, 254,
- /* 270 */ 25, 26, 27, 28, 218, 136, 101, 221, 33, 34,
- /* 280 */ 250, 106, 37, 38, 39, 2, 218, 255, 5, 221,
- /* 290 */ 7, 1, 9, 100, 61, 62, 254, 61, 62, 267,
- /* 300 */ 67, 68, 69, 67, 68, 69, 113, 269, 75, 33,
- /* 310 */ 34, 100, 100, 37, 38, 39, 33, 34, 101, 106,
- /* 320 */ 108, 128, 61, 62, 113, 112, 109, 37, 67, 68,
- /* 330 */ 69, 37, 38, 39, 59, 101, 101, 106, 101, 128,
- /* 340 */ 106, 106, 101, 106, 5, 106, 7, 106, 5, 101,
- /* 350 */ 7, 101, 269, 101, 106, 269, 106, 126, 106, 132,
- /* 360 */ 133, 269, 100, 124, 102, 5, 5, 7, 7, 269,
- /* 370 */ 132, 133, 73, 74, 269, 100, 61, 62, 269, 269,
- /* 380 */ 269, 247, 247, 247, 252, 214, 268, 247, 247, 247,
- /* 390 */ 107, 247, 214, 214, 214, 276, 276, 214, 214, 256,
- /* 400 */ 214, 214, 113, 214, 108, 214, 214, 252, 214, 214,
- /* 410 */ 214, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- /* 420 */ 214, 214, 214, 214, 214, 59, 123, 265, 214, 214,
- /* 430 */ 214, 272, 214, 214, 214, 214, 214, 214, 214, 214,
- /* 440 */ 214, 272, 214, 214, 214, 272, 214, 125, 122, 264,
- /* 450 */ 117, 121, 116, 115, 114, 215, 127, 215, 215, 84,
- /* 460 */ 83, 49, 80, 82, 53, 81, 79, 76, 5, 5,
- /* 470 */ 215, 139, 215, 215, 5, 215, 139, 5, 219, 5,
- /* 480 */ 86, 130, 215, 109, 101, 216, 216, 101, 215, 223,
- /* 490 */ 110, 227, 229, 228, 226, 224, 222, 225, 220, 215,
- /* 500 */ 100, 106, 217, 1, 100, 252, 259, 263, 262, 101,
- /* 510 */ 261, 260, 258, 257, 100, 106, 118, 118, 101, 106,
- /* 520 */ 100, 100, 107, 100, 73, 103, 9, 103, 5, 104,
- /* 530 */ 5, 5, 5, 5, 77, 15, 133, 16, 73, 133,
- /* 540 */ 106, 5, 5, 101, 5, 5, 5, 5, 5, 5,
- /* 550 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- /* 560 */ 106, 77, 59, 58, 0, 280, 280, 280, 280, 280,
- /* 570 */ 280, 280, 280, 280, 280, 280, 21, 21, 280, 280,
- /* 580 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 590 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 600 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 610 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 620 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 630 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 640 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 650 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 660 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 670 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 680 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 690 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 700 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 710 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 720 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 730 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 740 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 750 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 760 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 770 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
- /* 780 */ 280, 280, 280, 280, 280, 280, 280, 280,
+ /* 80 */ 74, 231, 60, 13, 14, 79, 16, 17, 0, 77,
+ /* 90 */ 20, 21, 270, 270, 24, 25, 26, 27, 28, 214,
+ /* 100 */ 272, 279, 280, 33, 34, 255, 106, 37, 38, 39,
+ /* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ /* 120 */ 96, 97, 98, 99, 100, 276, 79, 278, 230, 102,
+ /* 130 */ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ /* 140 */ 242, 243, 244, 245, 14, 131, 16, 17, 120, 121,
+ /* 150 */ 20, 21, 138, 139, 24, 25, 26, 27, 28, 274,
+ /* 160 */ 253, 276, 101, 33, 34, 77, 231, 37, 38, 39,
+ /* 170 */ 109, 16, 17, 66, 267, 20, 21, 255, 219, 24,
+ /* 180 */ 25, 26, 27, 28, 44, 37, 38, 39, 33, 34,
+ /* 190 */ 255, 214, 37, 38, 39, 1, 2, 219, 214, 5,
+ /* 200 */ 60, 7, 5, 9, 7, 219, 66, 248, 249, 250,
+ /* 210 */ 251, 71, 72, 73, 1, 2, 218, 66, 5, 221,
+ /* 220 */ 7, 218, 9, 86, 221, 88, 89, 33, 34, 251,
+ /* 230 */ 93, 37, 95, 96, 97, 249, 99, 100, 254, 132,
+ /* 240 */ 230, 101, 135, 233, 234, 270, 33, 34, 238, 109,
+ /* 250 */ 240, 241, 242, 276, 244, 245, 214, 61, 62, 25,
+ /* 260 */ 26, 27, 28, 67, 68, 69, 70, 33, 34, 37,
+ /* 270 */ 130, 37, 38, 39, 15, 2, 218, 137, 5, 221,
+ /* 280 */ 7, 214, 9, 132, 61, 62, 135, 136, 214, 270,
+ /* 290 */ 67, 68, 69, 70, 214, 101, 61, 62, 214, 76,
+ /* 300 */ 270, 214, 67, 68, 69, 70, 33, 34, 114, 214,
+ /* 310 */ 256, 33, 34, 214, 101, 37, 38, 39, 276, 252,
+ /* 320 */ 101, 254, 268, 129, 105, 106, 252, 114, 254, 63,
+ /* 330 */ 64, 65, 252, 5, 254, 7, 252, 107, 254, 252,
+ /* 340 */ 101, 254, 129, 113, 112, 246, 102, 252, 109, 254,
+ /* 350 */ 102, 102, 102, 102, 110, 107, 107, 107, 107, 102,
+ /* 360 */ 102, 59, 107, 270, 107, 107, 102, 108, 107, 102,
+ /* 370 */ 102, 107, 74, 75, 107, 107, 133, 134, 133, 134,
+ /* 380 */ 270, 108, 127, 101, 270, 103, 125, 133, 134, 133,
+ /* 390 */ 134, 5, 5, 7, 7, 61, 62, 270, 270, 270,
+ /* 400 */ 247, 270, 270, 101, 270, 270, 270, 247, 247, 247,
+ /* 410 */ 247, 247, 247, 214, 214, 269, 214, 214, 214, 253,
+ /* 420 */ 277, 277, 214, 214, 257, 214, 214, 109, 214, 214,
+ /* 430 */ 214, 214, 214, 253, 214, 214, 214, 59, 214, 214,
+ /* 440 */ 214, 214, 214, 214, 114, 214, 273, 214, 273, 273,
+ /* 450 */ 214, 214, 214, 124, 214, 214, 214, 266, 126, 123,
+ /* 460 */ 214, 214, 118, 265, 122, 264, 214, 214, 263, 262,
+ /* 470 */ 117, 261, 116, 115, 214, 128, 214, 214, 85, 214,
+ /* 480 */ 84, 49, 81, 214, 214, 214, 214, 83, 214, 214,
+ /* 490 */ 214, 214, 53, 214, 214, 214, 82, 214, 80, 215,
+ /* 500 */ 215, 215, 215, 77, 5, 140, 5, 215, 215, 215,
+ /* 510 */ 5, 215, 215, 140, 219, 5, 5, 87, 110, 131,
+ /* 520 */ 215, 102, 216, 111, 215, 104, 223, 227, 229, 228,
+ /* 530 */ 226, 224, 222, 225, 220, 216, 215, 217, 216, 215,
+ /* 540 */ 107, 101, 1, 102, 253, 101, 101, 258, 260, 259,
+ /* 550 */ 102, 101, 101, 107, 119, 119, 107, 102, 101, 101,
+ /* 560 */ 108, 105, 74, 104, 9, 5, 5, 5, 5, 5,
+ /* 570 */ 78, 15, 74, 107, 16, 5, 134, 134, 5, 102,
+ /* 580 */ 5, 134, 5, 5, 5, 5, 5, 5, 5, 5,
+ /* 590 */ 5, 5, 5, 5, 5, 5, 5, 107, 78, 59,
+ /* 600 */ 58, 0, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 610 */ 281, 281, 281, 21, 21, 281, 281, 281, 281, 281,
+ /* 620 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 630 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 640 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 650 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 660 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 670 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 680 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 690 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 700 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 710 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 720 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 730 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 740 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 750 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 760 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 770 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 780 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 790 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 800 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 810 */ 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
+ /* 820 */ 281, 281, 281, 281, 281,
};
-#define YY_SHIFT_COUNT (258)
+#define YY_SHIFT_COUNT (282)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (564)
+#define YY_SHIFT_MAX (601)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 139, 25, 137, 5, 193, 211, 21, 21, 21, 21,
- /* 10 */ 21, 21, 0, 22, 211, 283, 283, 283, 44, 21,
- /* 20 */ 21, 21, 93, 21, 21, 188, 28, 28, 578, 211,
- /* 30 */ 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
- /* 40 */ 211, 211, 211, 211, 211, 211, 211, 283, 283, 2,
- /* 50 */ 2, 2, 2, 2, 2, 2, 212, 21, 153, 21,
- /* 60 */ 21, 21, 95, 95, 213, 21, 21, 21, 21, 21,
+ /* 0 */ 140, 24, 137, 12, 194, 213, 21, 21, 21, 21,
+ /* 10 */ 21, 21, 21, 21, 21, 0, 22, 213, 273, 273,
+ /* 20 */ 273, 61, 21, 21, 21, 88, 21, 21, 6, 12,
+ /* 30 */ 47, 47, 615, 213, 213, 213, 213, 213, 213, 213,
+ /* 40 */ 213, 213, 213, 213, 213, 213, 213, 213, 213, 213,
+ /* 50 */ 213, 273, 273, 2, 2, 2, 2, 2, 2, 2,
+ /* 60 */ 239, 21, 21, 232, 21, 21, 21, 28, 28, 230,
/* 70 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
/* 80 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
/* 90 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- /* 100 */ 21, 21, 21, 21, 21, 296, 366, 366, 289, 289,
- /* 110 */ 289, 366, 303, 322, 326, 333, 330, 336, 338, 340,
- /* 120 */ 329, 296, 366, 366, 366, 5, 366, 375, 377, 412,
- /* 130 */ 382, 381, 411, 384, 387, 366, 391, 366, 391, 366,
- /* 140 */ 578, 578, 27, 70, 70, 70, 129, 154, 245, 245,
- /* 150 */ 245, 233, 276, 276, 276, 276, 236, 261, 106, 59,
- /* 160 */ 294, 294, 138, 190, 217, 175, 234, 235, 237, 241,
- /* 170 */ 339, 343, 290, 275, 150, 231, 239, 248, 250, 252,
- /* 180 */ 227, 262, 238, 360, 361, 299, 315, 463, 332, 464,
- /* 190 */ 469, 337, 472, 474, 394, 351, 374, 383, 380, 395,
- /* 200 */ 386, 400, 502, 404, 408, 414, 409, 398, 413, 399,
- /* 210 */ 417, 420, 415, 421, 422, 423, 424, 425, 451, 517,
- /* 220 */ 523, 525, 526, 527, 528, 457, 520, 465, 521, 403,
- /* 230 */ 406, 434, 536, 537, 442, 434, 539, 540, 541, 542,
- /* 240 */ 543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
- /* 250 */ 553, 554, 454, 484, 555, 556, 503, 505, 564,
+ /* 100 */ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ /* 110 */ 21, 21, 21, 21, 21, 21, 318, 378, 378, 378,
+ /* 120 */ 330, 330, 330, 378, 329, 332, 336, 344, 342, 353,
+ /* 130 */ 356, 358, 347, 318, 378, 378, 378, 12, 378, 378,
+ /* 140 */ 393, 396, 432, 401, 404, 439, 414, 418, 378, 426,
+ /* 150 */ 378, 426, 378, 426, 378, 615, 615, 27, 70, 70,
+ /* 160 */ 70, 130, 155, 234, 234, 234, 223, 196, 235, 278,
+ /* 170 */ 278, 278, 278, 151, 14, 148, 148, 219, 107, 266,
+ /* 180 */ 244, 248, 249, 250, 251, 257, 258, 197, 328, 9,
+ /* 190 */ 302, 259, 255, 261, 264, 267, 268, 243, 245, 254,
+ /* 200 */ 282, 256, 386, 387, 298, 334, 499, 365, 501, 505,
+ /* 210 */ 373, 510, 511, 430, 388, 408, 419, 412, 421, 440,
+ /* 220 */ 433, 441, 444, 541, 445, 448, 450, 446, 435, 449,
+ /* 230 */ 436, 455, 451, 452, 457, 421, 458, 459, 456, 488,
+ /* 240 */ 555, 560, 561, 562, 563, 564, 492, 556, 498, 442,
+ /* 250 */ 466, 466, 558, 443, 447, 466, 570, 573, 477, 466,
+ /* 260 */ 575, 577, 578, 579, 580, 581, 582, 583, 584, 585,
+ /* 270 */ 586, 587, 588, 589, 590, 591, 490, 520, 592, 593,
+ /* 280 */ 540, 542, 601,
};
-#define YY_REDUCE_COUNT (141)
-#define YY_REDUCE_MIN (-269)
-#define YY_REDUCE_MAX (285)
+#define YY_REDUCE_COUNT (156)
+#define YY_REDUCE_MIN (-268)
+#define YY_REDUCE_MAX (324)
static const short yy_reduce_ofst[] = {
- /* 0 */ -207, -103, 18, -42, -267, -177, -56, -114, -195, -67,
- /* 10 */ -50, 14, -208, -164, -269, -174, -106, -8, -237, -182,
- /* 20 */ -115, -41, 30, -29, -211, -133, 56, 68, 32, -261,
- /* 30 */ -251, -223, -206, -143, -118, -93, -65, -19, 38, 83,
- /* 40 */ 86, 92, 100, 105, 109, 110, 111, 15, 42, 134,
- /* 50 */ 135, 136, 140, 141, 142, 144, 132, 171, 118, 178,
- /* 60 */ 179, 180, 119, 120, 143, 183, 184, 186, 187, 189,
- /* 70 */ 191, 192, 194, 195, 196, 197, 198, 199, 200, 201,
- /* 80 */ 202, 203, 204, 205, 206, 207, 208, 209, 210, 214,
- /* 90 */ 215, 216, 218, 219, 220, 221, 222, 223, 224, 225,
- /* 100 */ 226, 228, 229, 230, 232, 155, 240, 242, 159, 169,
- /* 110 */ 173, 243, 162, 185, 244, 246, 249, 251, 247, 254,
- /* 120 */ 256, 253, 255, 257, 258, 259, 260, 263, 265, 264,
- /* 130 */ 266, 268, 271, 272, 274, 267, 269, 273, 270, 284,
- /* 140 */ 278, 285,
+ /* 0 */ -208, -102, 10, -41, -268, -178, -196, -151, -115, 67,
+ /* 10 */ 74, 80, 84, 87, 95, -214, -164, -265, -223, -150,
+ /* 20 */ -65, -93, -172, -23, 42, -22, 99, -16, -2, -14,
+ /* 30 */ 3, 58, 54, -264, -251, -241, -177, -25, 19, 30,
+ /* 40 */ 93, 110, 114, 127, 128, 129, 131, 132, 134, 135,
+ /* 50 */ 136, -193, -78, 153, 160, 161, 162, 163, 164, 165,
+ /* 60 */ 166, 199, 200, 146, 202, 203, 204, 143, 144, 167,
+ /* 70 */ 208, 209, 211, 212, 214, 215, 216, 217, 218, 220,
+ /* 80 */ 221, 222, 224, 225, 226, 227, 228, 229, 231, 233,
+ /* 90 */ 236, 237, 238, 240, 241, 242, 246, 247, 252, 253,
+ /* 100 */ 260, 262, 263, 265, 269, 270, 271, 272, 274, 275,
+ /* 110 */ 276, 277, 279, 280, 281, 283, 180, 284, 285, 286,
+ /* 120 */ 173, 175, 176, 287, 191, 198, 201, 205, 207, 210,
+ /* 130 */ 288, 290, 289, 291, 292, 293, 294, 295, 296, 297,
+ /* 140 */ 299, 301, 300, 303, 304, 307, 308, 310, 305, 306,
+ /* 150 */ 309, 319, 321, 322, 324, 314, 320,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 675, 729, 718, 726, 909, 909, 675, 675, 675, 675,
- /* 10 */ 675, 675, 832, 693, 909, 675, 675, 675, 675, 675,
- /* 20 */ 675, 675, 726, 675, 675, 731, 731, 731, 827, 675,
- /* 30 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 40 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 50 */ 675, 675, 675, 675, 675, 675, 675, 675, 834, 836,
- /* 60 */ 838, 675, 856, 856, 825, 675, 675, 675, 675, 675,
- /* 70 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 80 */ 675, 675, 675, 675, 716, 675, 714, 675, 675, 675,
- /* 90 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 703,
- /* 100 */ 675, 675, 675, 675, 675, 675, 695, 695, 675, 675,
- /* 110 */ 675, 695, 863, 867, 861, 849, 857, 848, 844, 843,
- /* 120 */ 871, 675, 695, 695, 695, 726, 695, 747, 745, 743,
- /* 130 */ 735, 741, 737, 739, 733, 695, 724, 695, 724, 695,
- /* 140 */ 765, 781, 675, 872, 908, 862, 898, 897, 904, 896,
- /* 150 */ 895, 675, 891, 892, 894, 893, 675, 675, 675, 675,
- /* 160 */ 900, 899, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 170 */ 675, 675, 675, 874, 675, 868, 864, 675, 675, 675,
- /* 180 */ 675, 791, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 190 */ 675, 675, 675, 675, 675, 675, 824, 675, 675, 835,
- /* 200 */ 675, 675, 675, 675, 675, 675, 858, 675, 850, 675,
- /* 210 */ 675, 675, 675, 675, 801, 675, 675, 675, 675, 675,
- /* 220 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 230 */ 675, 913, 675, 675, 675, 911, 675, 675, 675, 675,
- /* 240 */ 675, 675, 675, 675, 675, 675, 675, 675, 675, 675,
- /* 250 */ 675, 675, 750, 675, 701, 699, 675, 691, 675,
+ /* 0 */ 713, 768, 757, 765, 950, 950, 713, 713, 713, 713,
+ /* 10 */ 713, 713, 713, 713, 713, 873, 731, 950, 713, 713,
+ /* 20 */ 713, 713, 713, 713, 713, 765, 713, 713, 770, 765,
+ /* 30 */ 770, 770, 868, 713, 713, 713, 713, 713, 713, 713,
+ /* 40 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 50 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 60 */ 713, 713, 713, 875, 877, 879, 713, 897, 897, 866,
+ /* 70 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 80 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 90 */ 713, 713, 713, 713, 755, 713, 753, 713, 713, 713,
+ /* 100 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 110 */ 741, 713, 713, 713, 713, 713, 713, 733, 733, 733,
+ /* 120 */ 713, 713, 713, 733, 904, 908, 902, 890, 898, 889,
+ /* 130 */ 885, 884, 912, 713, 733, 733, 733, 765, 733, 733,
+ /* 140 */ 786, 784, 782, 774, 780, 776, 778, 772, 733, 763,
+ /* 150 */ 733, 763, 733, 763, 733, 804, 820, 713, 913, 949,
+ /* 160 */ 903, 939, 938, 945, 937, 936, 713, 713, 713, 932,
+ /* 170 */ 933, 935, 934, 713, 713, 941, 940, 713, 713, 713,
+ /* 180 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 190 */ 915, 713, 909, 905, 713, 713, 713, 713, 713, 713,
+ /* 200 */ 830, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 210 */ 713, 713, 713, 713, 713, 865, 713, 713, 713, 713,
+ /* 220 */ 876, 713, 713, 713, 713, 713, 713, 899, 713, 891,
+ /* 230 */ 713, 713, 713, 713, 713, 842, 713, 713, 713, 713,
+ /* 240 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 250 */ 960, 958, 713, 713, 713, 954, 713, 713, 713, 952,
+ /* 260 */ 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
+ /* 270 */ 713, 713, 713, 713, 713, 713, 789, 713, 739, 737,
+ /* 280 */ 713, 729, 713,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -509,6 +524,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* STABLES => nothing */
0, /* VGROUPS => nothing */
0, /* DROP => nothing */
+ 1, /* STABLE => ID */
0, /* DNODE => nothing */
0, /* USER => nothing */
0, /* ACCOUNT => nothing */
@@ -648,7 +664,6 @@ static const YYCODETYPE yyFallback[] = {
1, /* TBNAME => ID */
1, /* JOIN => ID */
1, /* METRICS => ID */
- 1, /* STABLE => ID */
1, /* INSERT => ID */
1, /* INTO => ID */
1, /* VALUES => ID */
@@ -805,146 +820,146 @@ static const char *const yyTokenName[] = {
/* 64 */ "STABLES",
/* 65 */ "VGROUPS",
/* 66 */ "DROP",
- /* 67 */ "DNODE",
- /* 68 */ "USER",
- /* 69 */ "ACCOUNT",
- /* 70 */ "USE",
- /* 71 */ "DESCRIBE",
- /* 72 */ "ALTER",
- /* 73 */ "PASS",
- /* 74 */ "PRIVILEGE",
- /* 75 */ "LOCAL",
- /* 76 */ "IF",
- /* 77 */ "EXISTS",
- /* 78 */ "PPS",
- /* 79 */ "TSERIES",
- /* 80 */ "DBS",
- /* 81 */ "STORAGE",
- /* 82 */ "QTIME",
- /* 83 */ "CONNS",
- /* 84 */ "STATE",
- /* 85 */ "KEEP",
- /* 86 */ "CACHE",
- /* 87 */ "REPLICA",
- /* 88 */ "QUORUM",
- /* 89 */ "DAYS",
- /* 90 */ "MINROWS",
- /* 91 */ "MAXROWS",
- /* 92 */ "BLOCKS",
- /* 93 */ "CTIME",
- /* 94 */ "WAL",
- /* 95 */ "FSYNC",
- /* 96 */ "COMP",
- /* 97 */ "PRECISION",
- /* 98 */ "UPDATE",
- /* 99 */ "CACHELAST",
- /* 100 */ "LP",
- /* 101 */ "RP",
- /* 102 */ "UNSIGNED",
- /* 103 */ "TAGS",
- /* 104 */ "USING",
- /* 105 */ "AS",
- /* 106 */ "COMMA",
- /* 107 */ "NULL",
- /* 108 */ "SELECT",
- /* 109 */ "UNION",
- /* 110 */ "ALL",
- /* 111 */ "DISTINCT",
- /* 112 */ "FROM",
- /* 113 */ "VARIABLE",
- /* 114 */ "INTERVAL",
- /* 115 */ "FILL",
- /* 116 */ "SLIDING",
- /* 117 */ "ORDER",
- /* 118 */ "BY",
- /* 119 */ "ASC",
- /* 120 */ "DESC",
- /* 121 */ "GROUP",
- /* 122 */ "HAVING",
- /* 123 */ "LIMIT",
- /* 124 */ "OFFSET",
- /* 125 */ "SLIMIT",
- /* 126 */ "SOFFSET",
- /* 127 */ "WHERE",
- /* 128 */ "NOW",
- /* 129 */ "RESET",
- /* 130 */ "QUERY",
- /* 131 */ "ADD",
- /* 132 */ "COLUMN",
- /* 133 */ "TAG",
- /* 134 */ "CHANGE",
- /* 135 */ "SET",
- /* 136 */ "KILL",
- /* 137 */ "CONNECTION",
- /* 138 */ "STREAM",
- /* 139 */ "COLON",
- /* 140 */ "ABORT",
- /* 141 */ "AFTER",
- /* 142 */ "ATTACH",
- /* 143 */ "BEFORE",
- /* 144 */ "BEGIN",
- /* 145 */ "CASCADE",
- /* 146 */ "CLUSTER",
- /* 147 */ "CONFLICT",
- /* 148 */ "COPY",
- /* 149 */ "DEFERRED",
- /* 150 */ "DELIMITERS",
- /* 151 */ "DETACH",
- /* 152 */ "EACH",
- /* 153 */ "END",
- /* 154 */ "EXPLAIN",
- /* 155 */ "FAIL",
- /* 156 */ "FOR",
- /* 157 */ "IGNORE",
- /* 158 */ "IMMEDIATE",
- /* 159 */ "INITIALLY",
- /* 160 */ "INSTEAD",
- /* 161 */ "MATCH",
- /* 162 */ "KEY",
- /* 163 */ "OF",
- /* 164 */ "RAISE",
- /* 165 */ "REPLACE",
- /* 166 */ "RESTRICT",
- /* 167 */ "ROW",
- /* 168 */ "STATEMENT",
- /* 169 */ "TRIGGER",
- /* 170 */ "VIEW",
- /* 171 */ "COUNT",
- /* 172 */ "SUM",
- /* 173 */ "AVG",
- /* 174 */ "MIN",
- /* 175 */ "MAX",
- /* 176 */ "FIRST",
- /* 177 */ "LAST",
- /* 178 */ "TOP",
- /* 179 */ "BOTTOM",
- /* 180 */ "STDDEV",
- /* 181 */ "PERCENTILE",
- /* 182 */ "APERCENTILE",
- /* 183 */ "LEASTSQUARES",
- /* 184 */ "HISTOGRAM",
- /* 185 */ "DIFF",
- /* 186 */ "SPREAD",
- /* 187 */ "TWA",
- /* 188 */ "INTERP",
- /* 189 */ "LAST_ROW",
- /* 190 */ "RATE",
- /* 191 */ "IRATE",
- /* 192 */ "SUM_RATE",
- /* 193 */ "SUM_IRATE",
- /* 194 */ "AVG_RATE",
- /* 195 */ "AVG_IRATE",
- /* 196 */ "TBID",
- /* 197 */ "SEMI",
- /* 198 */ "NONE",
- /* 199 */ "PREV",
- /* 200 */ "LINEAR",
- /* 201 */ "IMPORT",
- /* 202 */ "METRIC",
- /* 203 */ "TBNAME",
- /* 204 */ "JOIN",
- /* 205 */ "METRICS",
- /* 206 */ "STABLE",
+ /* 67 */ "STABLE",
+ /* 68 */ "DNODE",
+ /* 69 */ "USER",
+ /* 70 */ "ACCOUNT",
+ /* 71 */ "USE",
+ /* 72 */ "DESCRIBE",
+ /* 73 */ "ALTER",
+ /* 74 */ "PASS",
+ /* 75 */ "PRIVILEGE",
+ /* 76 */ "LOCAL",
+ /* 77 */ "IF",
+ /* 78 */ "EXISTS",
+ /* 79 */ "PPS",
+ /* 80 */ "TSERIES",
+ /* 81 */ "DBS",
+ /* 82 */ "STORAGE",
+ /* 83 */ "QTIME",
+ /* 84 */ "CONNS",
+ /* 85 */ "STATE",
+ /* 86 */ "KEEP",
+ /* 87 */ "CACHE",
+ /* 88 */ "REPLICA",
+ /* 89 */ "QUORUM",
+ /* 90 */ "DAYS",
+ /* 91 */ "MINROWS",
+ /* 92 */ "MAXROWS",
+ /* 93 */ "BLOCKS",
+ /* 94 */ "CTIME",
+ /* 95 */ "WAL",
+ /* 96 */ "FSYNC",
+ /* 97 */ "COMP",
+ /* 98 */ "PRECISION",
+ /* 99 */ "UPDATE",
+ /* 100 */ "CACHELAST",
+ /* 101 */ "LP",
+ /* 102 */ "RP",
+ /* 103 */ "UNSIGNED",
+ /* 104 */ "TAGS",
+ /* 105 */ "USING",
+ /* 106 */ "AS",
+ /* 107 */ "COMMA",
+ /* 108 */ "NULL",
+ /* 109 */ "SELECT",
+ /* 110 */ "UNION",
+ /* 111 */ "ALL",
+ /* 112 */ "DISTINCT",
+ /* 113 */ "FROM",
+ /* 114 */ "VARIABLE",
+ /* 115 */ "INTERVAL",
+ /* 116 */ "FILL",
+ /* 117 */ "SLIDING",
+ /* 118 */ "ORDER",
+ /* 119 */ "BY",
+ /* 120 */ "ASC",
+ /* 121 */ "DESC",
+ /* 122 */ "GROUP",
+ /* 123 */ "HAVING",
+ /* 124 */ "LIMIT",
+ /* 125 */ "OFFSET",
+ /* 126 */ "SLIMIT",
+ /* 127 */ "SOFFSET",
+ /* 128 */ "WHERE",
+ /* 129 */ "NOW",
+ /* 130 */ "RESET",
+ /* 131 */ "QUERY",
+ /* 132 */ "ADD",
+ /* 133 */ "COLUMN",
+ /* 134 */ "TAG",
+ /* 135 */ "CHANGE",
+ /* 136 */ "SET",
+ /* 137 */ "KILL",
+ /* 138 */ "CONNECTION",
+ /* 139 */ "STREAM",
+ /* 140 */ "COLON",
+ /* 141 */ "ABORT",
+ /* 142 */ "AFTER",
+ /* 143 */ "ATTACH",
+ /* 144 */ "BEFORE",
+ /* 145 */ "BEGIN",
+ /* 146 */ "CASCADE",
+ /* 147 */ "CLUSTER",
+ /* 148 */ "CONFLICT",
+ /* 149 */ "COPY",
+ /* 150 */ "DEFERRED",
+ /* 151 */ "DELIMITERS",
+ /* 152 */ "DETACH",
+ /* 153 */ "EACH",
+ /* 154 */ "END",
+ /* 155 */ "EXPLAIN",
+ /* 156 */ "FAIL",
+ /* 157 */ "FOR",
+ /* 158 */ "IGNORE",
+ /* 159 */ "IMMEDIATE",
+ /* 160 */ "INITIALLY",
+ /* 161 */ "INSTEAD",
+ /* 162 */ "MATCH",
+ /* 163 */ "KEY",
+ /* 164 */ "OF",
+ /* 165 */ "RAISE",
+ /* 166 */ "REPLACE",
+ /* 167 */ "RESTRICT",
+ /* 168 */ "ROW",
+ /* 169 */ "STATEMENT",
+ /* 170 */ "TRIGGER",
+ /* 171 */ "VIEW",
+ /* 172 */ "COUNT",
+ /* 173 */ "SUM",
+ /* 174 */ "AVG",
+ /* 175 */ "MIN",
+ /* 176 */ "MAX",
+ /* 177 */ "FIRST",
+ /* 178 */ "LAST",
+ /* 179 */ "TOP",
+ /* 180 */ "BOTTOM",
+ /* 181 */ "STDDEV",
+ /* 182 */ "PERCENTILE",
+ /* 183 */ "APERCENTILE",
+ /* 184 */ "LEASTSQUARES",
+ /* 185 */ "HISTOGRAM",
+ /* 186 */ "DIFF",
+ /* 187 */ "SPREAD",
+ /* 188 */ "TWA",
+ /* 189 */ "INTERP",
+ /* 190 */ "LAST_ROW",
+ /* 191 */ "RATE",
+ /* 192 */ "IRATE",
+ /* 193 */ "SUM_RATE",
+ /* 194 */ "SUM_IRATE",
+ /* 195 */ "AVG_RATE",
+ /* 196 */ "AVG_IRATE",
+ /* 197 */ "TBID",
+ /* 198 */ "SEMI",
+ /* 199 */ "NONE",
+ /* 200 */ "PREV",
+ /* 201 */ "LINEAR",
+ /* 202 */ "IMPORT",
+ /* 203 */ "METRIC",
+ /* 204 */ "TBNAME",
+ /* 205 */ "JOIN",
+ /* 206 */ "METRICS",
/* 207 */ "INSERT",
/* 208 */ "INTO",
/* 209 */ "VALUES",
@@ -987,37 +1002,38 @@ static const char *const yyTokenName[] = {
/* 246 */ "typename",
/* 247 */ "signed",
/* 248 */ "create_table_args",
- /* 249 */ "create_table_list",
- /* 250 */ "create_from_stable",
- /* 251 */ "columnlist",
- /* 252 */ "select",
- /* 253 */ "column",
- /* 254 */ "tagitem",
- /* 255 */ "selcollist",
- /* 256 */ "from",
- /* 257 */ "where_opt",
- /* 258 */ "interval_opt",
- /* 259 */ "fill_opt",
- /* 260 */ "sliding_opt",
- /* 261 */ "groupby_opt",
- /* 262 */ "orderby_opt",
- /* 263 */ "having_opt",
- /* 264 */ "slimit_opt",
- /* 265 */ "limit_opt",
- /* 266 */ "union",
- /* 267 */ "sclp",
- /* 268 */ "distinct",
- /* 269 */ "expr",
- /* 270 */ "as",
- /* 271 */ "tablelist",
- /* 272 */ "tmvar",
- /* 273 */ "sortlist",
- /* 274 */ "sortitem",
- /* 275 */ "item",
- /* 276 */ "sortorder",
- /* 277 */ "grouplist",
- /* 278 */ "exprlist",
- /* 279 */ "expritem",
+ /* 249 */ "create_stable_args",
+ /* 250 */ "create_table_list",
+ /* 251 */ "create_from_stable",
+ /* 252 */ "columnlist",
+ /* 253 */ "select",
+ /* 254 */ "column",
+ /* 255 */ "tagitem",
+ /* 256 */ "selcollist",
+ /* 257 */ "from",
+ /* 258 */ "where_opt",
+ /* 259 */ "interval_opt",
+ /* 260 */ "fill_opt",
+ /* 261 */ "sliding_opt",
+ /* 262 */ "groupby_opt",
+ /* 263 */ "orderby_opt",
+ /* 264 */ "having_opt",
+ /* 265 */ "slimit_opt",
+ /* 266 */ "limit_opt",
+ /* 267 */ "union",
+ /* 268 */ "sclp",
+ /* 269 */ "distinct",
+ /* 270 */ "expr",
+ /* 271 */ "as",
+ /* 272 */ "tablelist",
+ /* 273 */ "tmvar",
+ /* 274 */ "sortlist",
+ /* 275 */ "sortitem",
+ /* 276 */ "item",
+ /* 277 */ "sortorder",
+ /* 278 */ "grouplist",
+ /* 279 */ "exprlist",
+ /* 280 */ "expritem",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -1053,220 +1069,228 @@ static const char *const yyRuleName[] = {
/* 25 */ "cmd ::= SHOW dbPrefix VGROUPS",
/* 26 */ "cmd ::= SHOW dbPrefix VGROUPS ids",
/* 27 */ "cmd ::= DROP TABLE ifexists ids cpxName",
- /* 28 */ "cmd ::= DROP DATABASE ifexists ids",
- /* 29 */ "cmd ::= DROP DNODE ids",
- /* 30 */ "cmd ::= DROP USER ids",
- /* 31 */ "cmd ::= DROP ACCOUNT ids",
- /* 32 */ "cmd ::= USE ids",
- /* 33 */ "cmd ::= DESCRIBE ids cpxName",
- /* 34 */ "cmd ::= ALTER USER ids PASS ids",
- /* 35 */ "cmd ::= ALTER USER ids PRIVILEGE ids",
- /* 36 */ "cmd ::= ALTER DNODE ids ids",
- /* 37 */ "cmd ::= ALTER DNODE ids ids ids",
- /* 38 */ "cmd ::= ALTER LOCAL ids",
- /* 39 */ "cmd ::= ALTER LOCAL ids ids",
- /* 40 */ "cmd ::= ALTER DATABASE ids alter_db_optr",
- /* 41 */ "cmd ::= ALTER ACCOUNT ids acct_optr",
- /* 42 */ "cmd ::= ALTER ACCOUNT ids PASS ids acct_optr",
- /* 43 */ "ids ::= ID",
- /* 44 */ "ids ::= STRING",
- /* 45 */ "ifexists ::= IF EXISTS",
- /* 46 */ "ifexists ::=",
- /* 47 */ "ifnotexists ::= IF NOT EXISTS",
- /* 48 */ "ifnotexists ::=",
- /* 49 */ "cmd ::= CREATE DNODE ids",
- /* 50 */ "cmd ::= CREATE ACCOUNT ids PASS ids acct_optr",
- /* 51 */ "cmd ::= CREATE DATABASE ifnotexists ids db_optr",
- /* 52 */ "cmd ::= CREATE USER ids PASS ids",
- /* 53 */ "pps ::=",
- /* 54 */ "pps ::= PPS INTEGER",
- /* 55 */ "tseries ::=",
- /* 56 */ "tseries ::= TSERIES INTEGER",
- /* 57 */ "dbs ::=",
- /* 58 */ "dbs ::= DBS INTEGER",
- /* 59 */ "streams ::=",
- /* 60 */ "streams ::= STREAMS INTEGER",
- /* 61 */ "storage ::=",
- /* 62 */ "storage ::= STORAGE INTEGER",
- /* 63 */ "qtime ::=",
- /* 64 */ "qtime ::= QTIME INTEGER",
- /* 65 */ "users ::=",
- /* 66 */ "users ::= USERS INTEGER",
- /* 67 */ "conns ::=",
- /* 68 */ "conns ::= CONNS INTEGER",
- /* 69 */ "state ::=",
- /* 70 */ "state ::= STATE ids",
- /* 71 */ "acct_optr ::= pps tseries storage streams qtime dbs users conns state",
- /* 72 */ "keep ::= KEEP tagitemlist",
- /* 73 */ "cache ::= CACHE INTEGER",
- /* 74 */ "replica ::= REPLICA INTEGER",
- /* 75 */ "quorum ::= QUORUM INTEGER",
- /* 76 */ "days ::= DAYS INTEGER",
- /* 77 */ "minrows ::= MINROWS INTEGER",
- /* 78 */ "maxrows ::= MAXROWS INTEGER",
- /* 79 */ "blocks ::= BLOCKS INTEGER",
- /* 80 */ "ctime ::= CTIME INTEGER",
- /* 81 */ "wal ::= WAL INTEGER",
- /* 82 */ "fsync ::= FSYNC INTEGER",
- /* 83 */ "comp ::= COMP INTEGER",
- /* 84 */ "prec ::= PRECISION STRING",
- /* 85 */ "update ::= UPDATE INTEGER",
- /* 86 */ "cachelast ::= CACHELAST INTEGER",
- /* 87 */ "db_optr ::=",
- /* 88 */ "db_optr ::= db_optr cache",
- /* 89 */ "db_optr ::= db_optr replica",
- /* 90 */ "db_optr ::= db_optr quorum",
- /* 91 */ "db_optr ::= db_optr days",
- /* 92 */ "db_optr ::= db_optr minrows",
- /* 93 */ "db_optr ::= db_optr maxrows",
- /* 94 */ "db_optr ::= db_optr blocks",
- /* 95 */ "db_optr ::= db_optr ctime",
- /* 96 */ "db_optr ::= db_optr wal",
- /* 97 */ "db_optr ::= db_optr fsync",
- /* 98 */ "db_optr ::= db_optr comp",
- /* 99 */ "db_optr ::= db_optr prec",
- /* 100 */ "db_optr ::= db_optr keep",
- /* 101 */ "db_optr ::= db_optr update",
- /* 102 */ "db_optr ::= db_optr cachelast",
- /* 103 */ "alter_db_optr ::=",
- /* 104 */ "alter_db_optr ::= alter_db_optr replica",
- /* 105 */ "alter_db_optr ::= alter_db_optr quorum",
- /* 106 */ "alter_db_optr ::= alter_db_optr keep",
- /* 107 */ "alter_db_optr ::= alter_db_optr blocks",
- /* 108 */ "alter_db_optr ::= alter_db_optr comp",
- /* 109 */ "alter_db_optr ::= alter_db_optr wal",
- /* 110 */ "alter_db_optr ::= alter_db_optr fsync",
- /* 111 */ "alter_db_optr ::= alter_db_optr update",
- /* 112 */ "alter_db_optr ::= alter_db_optr cachelast",
- /* 113 */ "typename ::= ids",
- /* 114 */ "typename ::= ids LP signed RP",
- /* 115 */ "typename ::= ids UNSIGNED",
- /* 116 */ "signed ::= INTEGER",
- /* 117 */ "signed ::= PLUS INTEGER",
- /* 118 */ "signed ::= MINUS INTEGER",
- /* 119 */ "cmd ::= CREATE TABLE create_table_args",
- /* 120 */ "cmd ::= CREATE TABLE create_table_list",
- /* 121 */ "create_table_list ::= create_from_stable",
- /* 122 */ "create_table_list ::= create_table_list create_from_stable",
- /* 123 */ "create_table_args ::= ifnotexists ids cpxName LP columnlist RP",
- /* 124 */ "create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP",
- /* 125 */ "create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP",
- /* 126 */ "create_table_args ::= ifnotexists ids cpxName AS select",
- /* 127 */ "columnlist ::= columnlist COMMA column",
- /* 128 */ "columnlist ::= column",
- /* 129 */ "column ::= ids typename",
- /* 130 */ "tagitemlist ::= tagitemlist COMMA tagitem",
- /* 131 */ "tagitemlist ::= tagitem",
- /* 132 */ "tagitem ::= INTEGER",
- /* 133 */ "tagitem ::= FLOAT",
- /* 134 */ "tagitem ::= STRING",
- /* 135 */ "tagitem ::= BOOL",
- /* 136 */ "tagitem ::= NULL",
- /* 137 */ "tagitem ::= MINUS INTEGER",
- /* 138 */ "tagitem ::= MINUS FLOAT",
- /* 139 */ "tagitem ::= PLUS INTEGER",
- /* 140 */ "tagitem ::= PLUS FLOAT",
- /* 141 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
- /* 142 */ "union ::= select",
- /* 143 */ "union ::= LP union RP",
- /* 144 */ "union ::= union UNION ALL select",
- /* 145 */ "union ::= union UNION ALL LP select RP",
- /* 146 */ "cmd ::= union",
- /* 147 */ "select ::= SELECT selcollist",
- /* 148 */ "sclp ::= selcollist COMMA",
- /* 149 */ "sclp ::=",
- /* 150 */ "selcollist ::= sclp distinct expr as",
- /* 151 */ "selcollist ::= sclp STAR",
- /* 152 */ "as ::= AS ids",
- /* 153 */ "as ::= ids",
- /* 154 */ "as ::=",
- /* 155 */ "distinct ::= DISTINCT",
- /* 156 */ "distinct ::=",
- /* 157 */ "from ::= FROM tablelist",
- /* 158 */ "tablelist ::= ids cpxName",
- /* 159 */ "tablelist ::= ids cpxName ids",
- /* 160 */ "tablelist ::= tablelist COMMA ids cpxName",
- /* 161 */ "tablelist ::= tablelist COMMA ids cpxName ids",
- /* 162 */ "tmvar ::= VARIABLE",
- /* 163 */ "interval_opt ::= INTERVAL LP tmvar RP",
- /* 164 */ "interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP",
- /* 165 */ "interval_opt ::=",
- /* 166 */ "fill_opt ::=",
- /* 167 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
- /* 168 */ "fill_opt ::= FILL LP ID RP",
- /* 169 */ "sliding_opt ::= SLIDING LP tmvar RP",
- /* 170 */ "sliding_opt ::=",
- /* 171 */ "orderby_opt ::=",
- /* 172 */ "orderby_opt ::= ORDER BY sortlist",
- /* 173 */ "sortlist ::= sortlist COMMA item sortorder",
- /* 174 */ "sortlist ::= item sortorder",
- /* 175 */ "item ::= ids cpxName",
- /* 176 */ "sortorder ::= ASC",
- /* 177 */ "sortorder ::= DESC",
- /* 178 */ "sortorder ::=",
- /* 179 */ "groupby_opt ::=",
- /* 180 */ "groupby_opt ::= GROUP BY grouplist",
- /* 181 */ "grouplist ::= grouplist COMMA item",
- /* 182 */ "grouplist ::= item",
- /* 183 */ "having_opt ::=",
- /* 184 */ "having_opt ::= HAVING expr",
- /* 185 */ "limit_opt ::=",
- /* 186 */ "limit_opt ::= LIMIT signed",
- /* 187 */ "limit_opt ::= LIMIT signed OFFSET signed",
- /* 188 */ "limit_opt ::= LIMIT signed COMMA signed",
- /* 189 */ "slimit_opt ::=",
- /* 190 */ "slimit_opt ::= SLIMIT signed",
- /* 191 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
- /* 192 */ "slimit_opt ::= SLIMIT signed COMMA signed",
- /* 193 */ "where_opt ::=",
- /* 194 */ "where_opt ::= WHERE expr",
- /* 195 */ "expr ::= LP expr RP",
- /* 196 */ "expr ::= ID",
- /* 197 */ "expr ::= ID DOT ID",
- /* 198 */ "expr ::= ID DOT STAR",
- /* 199 */ "expr ::= INTEGER",
- /* 200 */ "expr ::= MINUS INTEGER",
- /* 201 */ "expr ::= PLUS INTEGER",
- /* 202 */ "expr ::= FLOAT",
- /* 203 */ "expr ::= MINUS FLOAT",
- /* 204 */ "expr ::= PLUS FLOAT",
- /* 205 */ "expr ::= STRING",
- /* 206 */ "expr ::= NOW",
- /* 207 */ "expr ::= VARIABLE",
- /* 208 */ "expr ::= BOOL",
- /* 209 */ "expr ::= ID LP exprlist RP",
- /* 210 */ "expr ::= ID LP STAR RP",
- /* 211 */ "expr ::= expr IS NULL",
- /* 212 */ "expr ::= expr IS NOT NULL",
- /* 213 */ "expr ::= expr LT expr",
- /* 214 */ "expr ::= expr GT expr",
- /* 215 */ "expr ::= expr LE expr",
- /* 216 */ "expr ::= expr GE expr",
- /* 217 */ "expr ::= expr NE expr",
- /* 218 */ "expr ::= expr EQ expr",
- /* 219 */ "expr ::= expr AND expr",
- /* 220 */ "expr ::= expr OR expr",
- /* 221 */ "expr ::= expr PLUS expr",
- /* 222 */ "expr ::= expr MINUS expr",
- /* 223 */ "expr ::= expr STAR expr",
- /* 224 */ "expr ::= expr SLASH expr",
- /* 225 */ "expr ::= expr REM expr",
- /* 226 */ "expr ::= expr LIKE expr",
- /* 227 */ "expr ::= expr IN LP exprlist RP",
- /* 228 */ "exprlist ::= exprlist COMMA expritem",
- /* 229 */ "exprlist ::= expritem",
- /* 230 */ "expritem ::= expr",
- /* 231 */ "expritem ::=",
- /* 232 */ "cmd ::= RESET QUERY CACHE",
- /* 233 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
- /* 234 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
- /* 235 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
- /* 236 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
- /* 237 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
- /* 238 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
- /* 239 */ "cmd ::= KILL CONNECTION INTEGER",
- /* 240 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
- /* 241 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
+ /* 28 */ "cmd ::= DROP STABLE ifexists ids cpxName",
+ /* 29 */ "cmd ::= DROP DATABASE ifexists ids",
+ /* 30 */ "cmd ::= DROP DNODE ids",
+ /* 31 */ "cmd ::= DROP USER ids",
+ /* 32 */ "cmd ::= DROP ACCOUNT ids",
+ /* 33 */ "cmd ::= USE ids",
+ /* 34 */ "cmd ::= DESCRIBE ids cpxName",
+ /* 35 */ "cmd ::= ALTER USER ids PASS ids",
+ /* 36 */ "cmd ::= ALTER USER ids PRIVILEGE ids",
+ /* 37 */ "cmd ::= ALTER DNODE ids ids",
+ /* 38 */ "cmd ::= ALTER DNODE ids ids ids",
+ /* 39 */ "cmd ::= ALTER LOCAL ids",
+ /* 40 */ "cmd ::= ALTER LOCAL ids ids",
+ /* 41 */ "cmd ::= ALTER DATABASE ids alter_db_optr",
+ /* 42 */ "cmd ::= ALTER ACCOUNT ids acct_optr",
+ /* 43 */ "cmd ::= ALTER ACCOUNT ids PASS ids acct_optr",
+ /* 44 */ "ids ::= ID",
+ /* 45 */ "ids ::= STRING",
+ /* 46 */ "ifexists ::= IF EXISTS",
+ /* 47 */ "ifexists ::=",
+ /* 48 */ "ifnotexists ::= IF NOT EXISTS",
+ /* 49 */ "ifnotexists ::=",
+ /* 50 */ "cmd ::= CREATE DNODE ids",
+ /* 51 */ "cmd ::= CREATE ACCOUNT ids PASS ids acct_optr",
+ /* 52 */ "cmd ::= CREATE DATABASE ifnotexists ids db_optr",
+ /* 53 */ "cmd ::= CREATE USER ids PASS ids",
+ /* 54 */ "pps ::=",
+ /* 55 */ "pps ::= PPS INTEGER",
+ /* 56 */ "tseries ::=",
+ /* 57 */ "tseries ::= TSERIES INTEGER",
+ /* 58 */ "dbs ::=",
+ /* 59 */ "dbs ::= DBS INTEGER",
+ /* 60 */ "streams ::=",
+ /* 61 */ "streams ::= STREAMS INTEGER",
+ /* 62 */ "storage ::=",
+ /* 63 */ "storage ::= STORAGE INTEGER",
+ /* 64 */ "qtime ::=",
+ /* 65 */ "qtime ::= QTIME INTEGER",
+ /* 66 */ "users ::=",
+ /* 67 */ "users ::= USERS INTEGER",
+ /* 68 */ "conns ::=",
+ /* 69 */ "conns ::= CONNS INTEGER",
+ /* 70 */ "state ::=",
+ /* 71 */ "state ::= STATE ids",
+ /* 72 */ "acct_optr ::= pps tseries storage streams qtime dbs users conns state",
+ /* 73 */ "keep ::= KEEP tagitemlist",
+ /* 74 */ "cache ::= CACHE INTEGER",
+ /* 75 */ "replica ::= REPLICA INTEGER",
+ /* 76 */ "quorum ::= QUORUM INTEGER",
+ /* 77 */ "days ::= DAYS INTEGER",
+ /* 78 */ "minrows ::= MINROWS INTEGER",
+ /* 79 */ "maxrows ::= MAXROWS INTEGER",
+ /* 80 */ "blocks ::= BLOCKS INTEGER",
+ /* 81 */ "ctime ::= CTIME INTEGER",
+ /* 82 */ "wal ::= WAL INTEGER",
+ /* 83 */ "fsync ::= FSYNC INTEGER",
+ /* 84 */ "comp ::= COMP INTEGER",
+ /* 85 */ "prec ::= PRECISION STRING",
+ /* 86 */ "update ::= UPDATE INTEGER",
+ /* 87 */ "cachelast ::= CACHELAST INTEGER",
+ /* 88 */ "db_optr ::=",
+ /* 89 */ "db_optr ::= db_optr cache",
+ /* 90 */ "db_optr ::= db_optr replica",
+ /* 91 */ "db_optr ::= db_optr quorum",
+ /* 92 */ "db_optr ::= db_optr days",
+ /* 93 */ "db_optr ::= db_optr minrows",
+ /* 94 */ "db_optr ::= db_optr maxrows",
+ /* 95 */ "db_optr ::= db_optr blocks",
+ /* 96 */ "db_optr ::= db_optr ctime",
+ /* 97 */ "db_optr ::= db_optr wal",
+ /* 98 */ "db_optr ::= db_optr fsync",
+ /* 99 */ "db_optr ::= db_optr comp",
+ /* 100 */ "db_optr ::= db_optr prec",
+ /* 101 */ "db_optr ::= db_optr keep",
+ /* 102 */ "db_optr ::= db_optr update",
+ /* 103 */ "db_optr ::= db_optr cachelast",
+ /* 104 */ "alter_db_optr ::=",
+ /* 105 */ "alter_db_optr ::= alter_db_optr replica",
+ /* 106 */ "alter_db_optr ::= alter_db_optr quorum",
+ /* 107 */ "alter_db_optr ::= alter_db_optr keep",
+ /* 108 */ "alter_db_optr ::= alter_db_optr blocks",
+ /* 109 */ "alter_db_optr ::= alter_db_optr comp",
+ /* 110 */ "alter_db_optr ::= alter_db_optr wal",
+ /* 111 */ "alter_db_optr ::= alter_db_optr fsync",
+ /* 112 */ "alter_db_optr ::= alter_db_optr update",
+ /* 113 */ "alter_db_optr ::= alter_db_optr cachelast",
+ /* 114 */ "typename ::= ids",
+ /* 115 */ "typename ::= ids LP signed RP",
+ /* 116 */ "typename ::= ids UNSIGNED",
+ /* 117 */ "signed ::= INTEGER",
+ /* 118 */ "signed ::= PLUS INTEGER",
+ /* 119 */ "signed ::= MINUS INTEGER",
+ /* 120 */ "cmd ::= CREATE TABLE create_table_args",
+ /* 121 */ "cmd ::= CREATE TABLE create_stable_args",
+ /* 122 */ "cmd ::= CREATE STABLE create_stable_args",
+ /* 123 */ "cmd ::= CREATE TABLE create_table_list",
+ /* 124 */ "create_table_list ::= create_from_stable",
+ /* 125 */ "create_table_list ::= create_table_list create_from_stable",
+ /* 126 */ "create_table_args ::= ifnotexists ids cpxName LP columnlist RP",
+ /* 127 */ "create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP",
+ /* 128 */ "create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP",
+ /* 129 */ "create_table_args ::= ifnotexists ids cpxName AS select",
+ /* 130 */ "columnlist ::= columnlist COMMA column",
+ /* 131 */ "columnlist ::= column",
+ /* 132 */ "column ::= ids typename",
+ /* 133 */ "tagitemlist ::= tagitemlist COMMA tagitem",
+ /* 134 */ "tagitemlist ::= tagitem",
+ /* 135 */ "tagitem ::= INTEGER",
+ /* 136 */ "tagitem ::= FLOAT",
+ /* 137 */ "tagitem ::= STRING",
+ /* 138 */ "tagitem ::= BOOL",
+ /* 139 */ "tagitem ::= NULL",
+ /* 140 */ "tagitem ::= MINUS INTEGER",
+ /* 141 */ "tagitem ::= MINUS FLOAT",
+ /* 142 */ "tagitem ::= PLUS INTEGER",
+ /* 143 */ "tagitem ::= PLUS FLOAT",
+ /* 144 */ "select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt",
+ /* 145 */ "union ::= select",
+ /* 146 */ "union ::= LP union RP",
+ /* 147 */ "union ::= union UNION ALL select",
+ /* 148 */ "union ::= union UNION ALL LP select RP",
+ /* 149 */ "cmd ::= union",
+ /* 150 */ "select ::= SELECT selcollist",
+ /* 151 */ "sclp ::= selcollist COMMA",
+ /* 152 */ "sclp ::=",
+ /* 153 */ "selcollist ::= sclp distinct expr as",
+ /* 154 */ "selcollist ::= sclp STAR",
+ /* 155 */ "as ::= AS ids",
+ /* 156 */ "as ::= ids",
+ /* 157 */ "as ::=",
+ /* 158 */ "distinct ::= DISTINCT",
+ /* 159 */ "distinct ::=",
+ /* 160 */ "from ::= FROM tablelist",
+ /* 161 */ "tablelist ::= ids cpxName",
+ /* 162 */ "tablelist ::= ids cpxName ids",
+ /* 163 */ "tablelist ::= tablelist COMMA ids cpxName",
+ /* 164 */ "tablelist ::= tablelist COMMA ids cpxName ids",
+ /* 165 */ "tmvar ::= VARIABLE",
+ /* 166 */ "interval_opt ::= INTERVAL LP tmvar RP",
+ /* 167 */ "interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP",
+ /* 168 */ "interval_opt ::=",
+ /* 169 */ "fill_opt ::=",
+ /* 170 */ "fill_opt ::= FILL LP ID COMMA tagitemlist RP",
+ /* 171 */ "fill_opt ::= FILL LP ID RP",
+ /* 172 */ "sliding_opt ::= SLIDING LP tmvar RP",
+ /* 173 */ "sliding_opt ::=",
+ /* 174 */ "orderby_opt ::=",
+ /* 175 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 176 */ "sortlist ::= sortlist COMMA item sortorder",
+ /* 177 */ "sortlist ::= item sortorder",
+ /* 178 */ "item ::= ids cpxName",
+ /* 179 */ "sortorder ::= ASC",
+ /* 180 */ "sortorder ::= DESC",
+ /* 181 */ "sortorder ::=",
+ /* 182 */ "groupby_opt ::=",
+ /* 183 */ "groupby_opt ::= GROUP BY grouplist",
+ /* 184 */ "grouplist ::= grouplist COMMA item",
+ /* 185 */ "grouplist ::= item",
+ /* 186 */ "having_opt ::=",
+ /* 187 */ "having_opt ::= HAVING expr",
+ /* 188 */ "limit_opt ::=",
+ /* 189 */ "limit_opt ::= LIMIT signed",
+ /* 190 */ "limit_opt ::= LIMIT signed OFFSET signed",
+ /* 191 */ "limit_opt ::= LIMIT signed COMMA signed",
+ /* 192 */ "slimit_opt ::=",
+ /* 193 */ "slimit_opt ::= SLIMIT signed",
+ /* 194 */ "slimit_opt ::= SLIMIT signed SOFFSET signed",
+ /* 195 */ "slimit_opt ::= SLIMIT signed COMMA signed",
+ /* 196 */ "where_opt ::=",
+ /* 197 */ "where_opt ::= WHERE expr",
+ /* 198 */ "expr ::= LP expr RP",
+ /* 199 */ "expr ::= ID",
+ /* 200 */ "expr ::= ID DOT ID",
+ /* 201 */ "expr ::= ID DOT STAR",
+ /* 202 */ "expr ::= INTEGER",
+ /* 203 */ "expr ::= MINUS INTEGER",
+ /* 204 */ "expr ::= PLUS INTEGER",
+ /* 205 */ "expr ::= FLOAT",
+ /* 206 */ "expr ::= MINUS FLOAT",
+ /* 207 */ "expr ::= PLUS FLOAT",
+ /* 208 */ "expr ::= STRING",
+ /* 209 */ "expr ::= NOW",
+ /* 210 */ "expr ::= VARIABLE",
+ /* 211 */ "expr ::= BOOL",
+ /* 212 */ "expr ::= ID LP exprlist RP",
+ /* 213 */ "expr ::= ID LP STAR RP",
+ /* 214 */ "expr ::= expr IS NULL",
+ /* 215 */ "expr ::= expr IS NOT NULL",
+ /* 216 */ "expr ::= expr LT expr",
+ /* 217 */ "expr ::= expr GT expr",
+ /* 218 */ "expr ::= expr LE expr",
+ /* 219 */ "expr ::= expr GE expr",
+ /* 220 */ "expr ::= expr NE expr",
+ /* 221 */ "expr ::= expr EQ expr",
+ /* 222 */ "expr ::= expr AND expr",
+ /* 223 */ "expr ::= expr OR expr",
+ /* 224 */ "expr ::= expr PLUS expr",
+ /* 225 */ "expr ::= expr MINUS expr",
+ /* 226 */ "expr ::= expr STAR expr",
+ /* 227 */ "expr ::= expr SLASH expr",
+ /* 228 */ "expr ::= expr REM expr",
+ /* 229 */ "expr ::= expr LIKE expr",
+ /* 230 */ "expr ::= expr IN LP exprlist RP",
+ /* 231 */ "exprlist ::= exprlist COMMA expritem",
+ /* 232 */ "exprlist ::= expritem",
+ /* 233 */ "expritem ::= expr",
+ /* 234 */ "expritem ::=",
+ /* 235 */ "cmd ::= RESET QUERY CACHE",
+ /* 236 */ "cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist",
+ /* 237 */ "cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids",
+ /* 238 */ "cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist",
+ /* 239 */ "cmd ::= ALTER TABLE ids cpxName DROP TAG ids",
+ /* 240 */ "cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids",
+ /* 241 */ "cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem",
+ /* 242 */ "cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist",
+ /* 243 */ "cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids",
+ /* 244 */ "cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist",
+ /* 245 */ "cmd ::= ALTER STABLE ids cpxName DROP TAG ids",
+ /* 246 */ "cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids",
+ /* 247 */ "cmd ::= KILL CONNECTION INTEGER",
+ /* 248 */ "cmd ::= KILL STREAM INTEGER COLON INTEGER",
+ /* 249 */ "cmd ::= KILL QUERY INTEGER COLON INTEGER",
};
#endif /* NDEBUG */
@@ -1389,49 +1413,49 @@ static void yy_destructor(
/********* Begin destructor definitions ***************************************/
case 230: /* keep */
case 231: /* tagitemlist */
- case 251: /* columnlist */
- case 259: /* fill_opt */
- case 261: /* groupby_opt */
- case 262: /* orderby_opt */
- case 273: /* sortlist */
- case 277: /* grouplist */
+ case 252: /* columnlist */
+ case 260: /* fill_opt */
+ case 262: /* groupby_opt */
+ case 263: /* orderby_opt */
+ case 274: /* sortlist */
+ case 278: /* grouplist */
{
-taosArrayDestroy((yypminor->yy221));
+taosArrayDestroy((yypminor->yy247));
}
break;
- case 249: /* create_table_list */
+ case 250: /* create_table_list */
{
destroyCreateTableSql((yypminor->yy358));
}
break;
- case 252: /* select */
+ case 253: /* select */
{
-doDestroyQuerySql((yypminor->yy344));
+doDestroyQuerySql((yypminor->yy114));
}
break;
- case 255: /* selcollist */
- case 267: /* sclp */
- case 278: /* exprlist */
+ case 256: /* selcollist */
+ case 268: /* sclp */
+ case 279: /* exprlist */
{
-tSqlExprListDestroy((yypminor->yy178));
+tSqlExprListDestroy((yypminor->yy522));
}
break;
- case 257: /* where_opt */
- case 263: /* having_opt */
- case 269: /* expr */
- case 279: /* expritem */
+ case 258: /* where_opt */
+ case 264: /* having_opt */
+ case 270: /* expr */
+ case 280: /* expritem */
{
-tSqlExprDestroy((yypminor->yy50));
+tSqlExprDestroy((yypminor->yy326));
}
break;
- case 266: /* union */
+ case 267: /* union */
{
-destroyAllSelectClause((yypminor->yy273));
+destroyAllSelectClause((yypminor->yy219));
}
break;
- case 274: /* sortitem */
+ case 275: /* sortitem */
{
-tVariantDestroy(&(yypminor->yy106));
+tVariantDestroy(&(yypminor->yy378));
}
break;
/********* End destructor definitions *****************************************/
@@ -1753,220 +1777,228 @@ static const struct {
{ 212, -3 }, /* (25) cmd ::= SHOW dbPrefix VGROUPS */
{ 212, -4 }, /* (26) cmd ::= SHOW dbPrefix VGROUPS ids */
{ 212, -5 }, /* (27) cmd ::= DROP TABLE ifexists ids cpxName */
- { 212, -4 }, /* (28) cmd ::= DROP DATABASE ifexists ids */
- { 212, -3 }, /* (29) cmd ::= DROP DNODE ids */
- { 212, -3 }, /* (30) cmd ::= DROP USER ids */
- { 212, -3 }, /* (31) cmd ::= DROP ACCOUNT ids */
- { 212, -2 }, /* (32) cmd ::= USE ids */
- { 212, -3 }, /* (33) cmd ::= DESCRIBE ids cpxName */
- { 212, -5 }, /* (34) cmd ::= ALTER USER ids PASS ids */
- { 212, -5 }, /* (35) cmd ::= ALTER USER ids PRIVILEGE ids */
- { 212, -4 }, /* (36) cmd ::= ALTER DNODE ids ids */
- { 212, -5 }, /* (37) cmd ::= ALTER DNODE ids ids ids */
- { 212, -3 }, /* (38) cmd ::= ALTER LOCAL ids */
- { 212, -4 }, /* (39) cmd ::= ALTER LOCAL ids ids */
- { 212, -4 }, /* (40) cmd ::= ALTER DATABASE ids alter_db_optr */
- { 212, -4 }, /* (41) cmd ::= ALTER ACCOUNT ids acct_optr */
- { 212, -6 }, /* (42) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
- { 214, -1 }, /* (43) ids ::= ID */
- { 214, -1 }, /* (44) ids ::= STRING */
- { 216, -2 }, /* (45) ifexists ::= IF EXISTS */
- { 216, 0 }, /* (46) ifexists ::= */
- { 219, -3 }, /* (47) ifnotexists ::= IF NOT EXISTS */
- { 219, 0 }, /* (48) ifnotexists ::= */
- { 212, -3 }, /* (49) cmd ::= CREATE DNODE ids */
- { 212, -6 }, /* (50) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
- { 212, -5 }, /* (51) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
- { 212, -5 }, /* (52) cmd ::= CREATE USER ids PASS ids */
- { 221, 0 }, /* (53) pps ::= */
- { 221, -2 }, /* (54) pps ::= PPS INTEGER */
- { 222, 0 }, /* (55) tseries ::= */
- { 222, -2 }, /* (56) tseries ::= TSERIES INTEGER */
- { 223, 0 }, /* (57) dbs ::= */
- { 223, -2 }, /* (58) dbs ::= DBS INTEGER */
- { 224, 0 }, /* (59) streams ::= */
- { 224, -2 }, /* (60) streams ::= STREAMS INTEGER */
- { 225, 0 }, /* (61) storage ::= */
- { 225, -2 }, /* (62) storage ::= STORAGE INTEGER */
- { 226, 0 }, /* (63) qtime ::= */
- { 226, -2 }, /* (64) qtime ::= QTIME INTEGER */
- { 227, 0 }, /* (65) users ::= */
- { 227, -2 }, /* (66) users ::= USERS INTEGER */
- { 228, 0 }, /* (67) conns ::= */
- { 228, -2 }, /* (68) conns ::= CONNS INTEGER */
- { 229, 0 }, /* (69) state ::= */
- { 229, -2 }, /* (70) state ::= STATE ids */
- { 218, -9 }, /* (71) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
- { 230, -2 }, /* (72) keep ::= KEEP tagitemlist */
- { 232, -2 }, /* (73) cache ::= CACHE INTEGER */
- { 233, -2 }, /* (74) replica ::= REPLICA INTEGER */
- { 234, -2 }, /* (75) quorum ::= QUORUM INTEGER */
- { 235, -2 }, /* (76) days ::= DAYS INTEGER */
- { 236, -2 }, /* (77) minrows ::= MINROWS INTEGER */
- { 237, -2 }, /* (78) maxrows ::= MAXROWS INTEGER */
- { 238, -2 }, /* (79) blocks ::= BLOCKS INTEGER */
- { 239, -2 }, /* (80) ctime ::= CTIME INTEGER */
- { 240, -2 }, /* (81) wal ::= WAL INTEGER */
- { 241, -2 }, /* (82) fsync ::= FSYNC INTEGER */
- { 242, -2 }, /* (83) comp ::= COMP INTEGER */
- { 243, -2 }, /* (84) prec ::= PRECISION STRING */
- { 244, -2 }, /* (85) update ::= UPDATE INTEGER */
- { 245, -2 }, /* (86) cachelast ::= CACHELAST INTEGER */
- { 220, 0 }, /* (87) db_optr ::= */
- { 220, -2 }, /* (88) db_optr ::= db_optr cache */
- { 220, -2 }, /* (89) db_optr ::= db_optr replica */
- { 220, -2 }, /* (90) db_optr ::= db_optr quorum */
- { 220, -2 }, /* (91) db_optr ::= db_optr days */
- { 220, -2 }, /* (92) db_optr ::= db_optr minrows */
- { 220, -2 }, /* (93) db_optr ::= db_optr maxrows */
- { 220, -2 }, /* (94) db_optr ::= db_optr blocks */
- { 220, -2 }, /* (95) db_optr ::= db_optr ctime */
- { 220, -2 }, /* (96) db_optr ::= db_optr wal */
- { 220, -2 }, /* (97) db_optr ::= db_optr fsync */
- { 220, -2 }, /* (98) db_optr ::= db_optr comp */
- { 220, -2 }, /* (99) db_optr ::= db_optr prec */
- { 220, -2 }, /* (100) db_optr ::= db_optr keep */
- { 220, -2 }, /* (101) db_optr ::= db_optr update */
- { 220, -2 }, /* (102) db_optr ::= db_optr cachelast */
- { 217, 0 }, /* (103) alter_db_optr ::= */
- { 217, -2 }, /* (104) alter_db_optr ::= alter_db_optr replica */
- { 217, -2 }, /* (105) alter_db_optr ::= alter_db_optr quorum */
- { 217, -2 }, /* (106) alter_db_optr ::= alter_db_optr keep */
- { 217, -2 }, /* (107) alter_db_optr ::= alter_db_optr blocks */
- { 217, -2 }, /* (108) alter_db_optr ::= alter_db_optr comp */
- { 217, -2 }, /* (109) alter_db_optr ::= alter_db_optr wal */
- { 217, -2 }, /* (110) alter_db_optr ::= alter_db_optr fsync */
- { 217, -2 }, /* (111) alter_db_optr ::= alter_db_optr update */
- { 217, -2 }, /* (112) alter_db_optr ::= alter_db_optr cachelast */
- { 246, -1 }, /* (113) typename ::= ids */
- { 246, -4 }, /* (114) typename ::= ids LP signed RP */
- { 246, -2 }, /* (115) typename ::= ids UNSIGNED */
- { 247, -1 }, /* (116) signed ::= INTEGER */
- { 247, -2 }, /* (117) signed ::= PLUS INTEGER */
- { 247, -2 }, /* (118) signed ::= MINUS INTEGER */
- { 212, -3 }, /* (119) cmd ::= CREATE TABLE create_table_args */
- { 212, -3 }, /* (120) cmd ::= CREATE TABLE create_table_list */
- { 249, -1 }, /* (121) create_table_list ::= create_from_stable */
- { 249, -2 }, /* (122) create_table_list ::= create_table_list create_from_stable */
- { 248, -6 }, /* (123) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
- { 248, -10 }, /* (124) create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
- { 250, -10 }, /* (125) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
- { 248, -5 }, /* (126) create_table_args ::= ifnotexists ids cpxName AS select */
- { 251, -3 }, /* (127) columnlist ::= columnlist COMMA column */
- { 251, -1 }, /* (128) columnlist ::= column */
- { 253, -2 }, /* (129) column ::= ids typename */
- { 231, -3 }, /* (130) tagitemlist ::= tagitemlist COMMA tagitem */
- { 231, -1 }, /* (131) tagitemlist ::= tagitem */
- { 254, -1 }, /* (132) tagitem ::= INTEGER */
- { 254, -1 }, /* (133) tagitem ::= FLOAT */
- { 254, -1 }, /* (134) tagitem ::= STRING */
- { 254, -1 }, /* (135) tagitem ::= BOOL */
- { 254, -1 }, /* (136) tagitem ::= NULL */
- { 254, -2 }, /* (137) tagitem ::= MINUS INTEGER */
- { 254, -2 }, /* (138) tagitem ::= MINUS FLOAT */
- { 254, -2 }, /* (139) tagitem ::= PLUS INTEGER */
- { 254, -2 }, /* (140) tagitem ::= PLUS FLOAT */
- { 252, -12 }, /* (141) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
- { 266, -1 }, /* (142) union ::= select */
- { 266, -3 }, /* (143) union ::= LP union RP */
- { 266, -4 }, /* (144) union ::= union UNION ALL select */
- { 266, -6 }, /* (145) union ::= union UNION ALL LP select RP */
- { 212, -1 }, /* (146) cmd ::= union */
- { 252, -2 }, /* (147) select ::= SELECT selcollist */
- { 267, -2 }, /* (148) sclp ::= selcollist COMMA */
- { 267, 0 }, /* (149) sclp ::= */
- { 255, -4 }, /* (150) selcollist ::= sclp distinct expr as */
- { 255, -2 }, /* (151) selcollist ::= sclp STAR */
- { 270, -2 }, /* (152) as ::= AS ids */
- { 270, -1 }, /* (153) as ::= ids */
- { 270, 0 }, /* (154) as ::= */
- { 268, -1 }, /* (155) distinct ::= DISTINCT */
- { 268, 0 }, /* (156) distinct ::= */
- { 256, -2 }, /* (157) from ::= FROM tablelist */
- { 271, -2 }, /* (158) tablelist ::= ids cpxName */
- { 271, -3 }, /* (159) tablelist ::= ids cpxName ids */
- { 271, -4 }, /* (160) tablelist ::= tablelist COMMA ids cpxName */
- { 271, -5 }, /* (161) tablelist ::= tablelist COMMA ids cpxName ids */
- { 272, -1 }, /* (162) tmvar ::= VARIABLE */
- { 258, -4 }, /* (163) interval_opt ::= INTERVAL LP tmvar RP */
- { 258, -6 }, /* (164) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
- { 258, 0 }, /* (165) interval_opt ::= */
- { 259, 0 }, /* (166) fill_opt ::= */
- { 259, -6 }, /* (167) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
- { 259, -4 }, /* (168) fill_opt ::= FILL LP ID RP */
- { 260, -4 }, /* (169) sliding_opt ::= SLIDING LP tmvar RP */
- { 260, 0 }, /* (170) sliding_opt ::= */
- { 262, 0 }, /* (171) orderby_opt ::= */
- { 262, -3 }, /* (172) orderby_opt ::= ORDER BY sortlist */
- { 273, -4 }, /* (173) sortlist ::= sortlist COMMA item sortorder */
- { 273, -2 }, /* (174) sortlist ::= item sortorder */
- { 275, -2 }, /* (175) item ::= ids cpxName */
- { 276, -1 }, /* (176) sortorder ::= ASC */
- { 276, -1 }, /* (177) sortorder ::= DESC */
- { 276, 0 }, /* (178) sortorder ::= */
- { 261, 0 }, /* (179) groupby_opt ::= */
- { 261, -3 }, /* (180) groupby_opt ::= GROUP BY grouplist */
- { 277, -3 }, /* (181) grouplist ::= grouplist COMMA item */
- { 277, -1 }, /* (182) grouplist ::= item */
- { 263, 0 }, /* (183) having_opt ::= */
- { 263, -2 }, /* (184) having_opt ::= HAVING expr */
- { 265, 0 }, /* (185) limit_opt ::= */
- { 265, -2 }, /* (186) limit_opt ::= LIMIT signed */
- { 265, -4 }, /* (187) limit_opt ::= LIMIT signed OFFSET signed */
- { 265, -4 }, /* (188) limit_opt ::= LIMIT signed COMMA signed */
- { 264, 0 }, /* (189) slimit_opt ::= */
- { 264, -2 }, /* (190) slimit_opt ::= SLIMIT signed */
- { 264, -4 }, /* (191) slimit_opt ::= SLIMIT signed SOFFSET signed */
- { 264, -4 }, /* (192) slimit_opt ::= SLIMIT signed COMMA signed */
- { 257, 0 }, /* (193) where_opt ::= */
- { 257, -2 }, /* (194) where_opt ::= WHERE expr */
- { 269, -3 }, /* (195) expr ::= LP expr RP */
- { 269, -1 }, /* (196) expr ::= ID */
- { 269, -3 }, /* (197) expr ::= ID DOT ID */
- { 269, -3 }, /* (198) expr ::= ID DOT STAR */
- { 269, -1 }, /* (199) expr ::= INTEGER */
- { 269, -2 }, /* (200) expr ::= MINUS INTEGER */
- { 269, -2 }, /* (201) expr ::= PLUS INTEGER */
- { 269, -1 }, /* (202) expr ::= FLOAT */
- { 269, -2 }, /* (203) expr ::= MINUS FLOAT */
- { 269, -2 }, /* (204) expr ::= PLUS FLOAT */
- { 269, -1 }, /* (205) expr ::= STRING */
- { 269, -1 }, /* (206) expr ::= NOW */
- { 269, -1 }, /* (207) expr ::= VARIABLE */
- { 269, -1 }, /* (208) expr ::= BOOL */
- { 269, -4 }, /* (209) expr ::= ID LP exprlist RP */
- { 269, -4 }, /* (210) expr ::= ID LP STAR RP */
- { 269, -3 }, /* (211) expr ::= expr IS NULL */
- { 269, -4 }, /* (212) expr ::= expr IS NOT NULL */
- { 269, -3 }, /* (213) expr ::= expr LT expr */
- { 269, -3 }, /* (214) expr ::= expr GT expr */
- { 269, -3 }, /* (215) expr ::= expr LE expr */
- { 269, -3 }, /* (216) expr ::= expr GE expr */
- { 269, -3 }, /* (217) expr ::= expr NE expr */
- { 269, -3 }, /* (218) expr ::= expr EQ expr */
- { 269, -3 }, /* (219) expr ::= expr AND expr */
- { 269, -3 }, /* (220) expr ::= expr OR expr */
- { 269, -3 }, /* (221) expr ::= expr PLUS expr */
- { 269, -3 }, /* (222) expr ::= expr MINUS expr */
- { 269, -3 }, /* (223) expr ::= expr STAR expr */
- { 269, -3 }, /* (224) expr ::= expr SLASH expr */
- { 269, -3 }, /* (225) expr ::= expr REM expr */
- { 269, -3 }, /* (226) expr ::= expr LIKE expr */
- { 269, -5 }, /* (227) expr ::= expr IN LP exprlist RP */
- { 278, -3 }, /* (228) exprlist ::= exprlist COMMA expritem */
- { 278, -1 }, /* (229) exprlist ::= expritem */
- { 279, -1 }, /* (230) expritem ::= expr */
- { 279, 0 }, /* (231) expritem ::= */
- { 212, -3 }, /* (232) cmd ::= RESET QUERY CACHE */
- { 212, -7 }, /* (233) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
- { 212, -7 }, /* (234) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
- { 212, -7 }, /* (235) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
- { 212, -7 }, /* (236) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
- { 212, -8 }, /* (237) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
- { 212, -9 }, /* (238) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
- { 212, -3 }, /* (239) cmd ::= KILL CONNECTION INTEGER */
- { 212, -5 }, /* (240) cmd ::= KILL STREAM INTEGER COLON INTEGER */
- { 212, -5 }, /* (241) cmd ::= KILL QUERY INTEGER COLON INTEGER */
+ { 212, -5 }, /* (28) cmd ::= DROP STABLE ifexists ids cpxName */
+ { 212, -4 }, /* (29) cmd ::= DROP DATABASE ifexists ids */
+ { 212, -3 }, /* (30) cmd ::= DROP DNODE ids */
+ { 212, -3 }, /* (31) cmd ::= DROP USER ids */
+ { 212, -3 }, /* (32) cmd ::= DROP ACCOUNT ids */
+ { 212, -2 }, /* (33) cmd ::= USE ids */
+ { 212, -3 }, /* (34) cmd ::= DESCRIBE ids cpxName */
+ { 212, -5 }, /* (35) cmd ::= ALTER USER ids PASS ids */
+ { 212, -5 }, /* (36) cmd ::= ALTER USER ids PRIVILEGE ids */
+ { 212, -4 }, /* (37) cmd ::= ALTER DNODE ids ids */
+ { 212, -5 }, /* (38) cmd ::= ALTER DNODE ids ids ids */
+ { 212, -3 }, /* (39) cmd ::= ALTER LOCAL ids */
+ { 212, -4 }, /* (40) cmd ::= ALTER LOCAL ids ids */
+ { 212, -4 }, /* (41) cmd ::= ALTER DATABASE ids alter_db_optr */
+ { 212, -4 }, /* (42) cmd ::= ALTER ACCOUNT ids acct_optr */
+ { 212, -6 }, /* (43) cmd ::= ALTER ACCOUNT ids PASS ids acct_optr */
+ { 214, -1 }, /* (44) ids ::= ID */
+ { 214, -1 }, /* (45) ids ::= STRING */
+ { 216, -2 }, /* (46) ifexists ::= IF EXISTS */
+ { 216, 0 }, /* (47) ifexists ::= */
+ { 219, -3 }, /* (48) ifnotexists ::= IF NOT EXISTS */
+ { 219, 0 }, /* (49) ifnotexists ::= */
+ { 212, -3 }, /* (50) cmd ::= CREATE DNODE ids */
+ { 212, -6 }, /* (51) cmd ::= CREATE ACCOUNT ids PASS ids acct_optr */
+ { 212, -5 }, /* (52) cmd ::= CREATE DATABASE ifnotexists ids db_optr */
+ { 212, -5 }, /* (53) cmd ::= CREATE USER ids PASS ids */
+ { 221, 0 }, /* (54) pps ::= */
+ { 221, -2 }, /* (55) pps ::= PPS INTEGER */
+ { 222, 0 }, /* (56) tseries ::= */
+ { 222, -2 }, /* (57) tseries ::= TSERIES INTEGER */
+ { 223, 0 }, /* (58) dbs ::= */
+ { 223, -2 }, /* (59) dbs ::= DBS INTEGER */
+ { 224, 0 }, /* (60) streams ::= */
+ { 224, -2 }, /* (61) streams ::= STREAMS INTEGER */
+ { 225, 0 }, /* (62) storage ::= */
+ { 225, -2 }, /* (63) storage ::= STORAGE INTEGER */
+ { 226, 0 }, /* (64) qtime ::= */
+ { 226, -2 }, /* (65) qtime ::= QTIME INTEGER */
+ { 227, 0 }, /* (66) users ::= */
+ { 227, -2 }, /* (67) users ::= USERS INTEGER */
+ { 228, 0 }, /* (68) conns ::= */
+ { 228, -2 }, /* (69) conns ::= CONNS INTEGER */
+ { 229, 0 }, /* (70) state ::= */
+ { 229, -2 }, /* (71) state ::= STATE ids */
+ { 218, -9 }, /* (72) acct_optr ::= pps tseries storage streams qtime dbs users conns state */
+ { 230, -2 }, /* (73) keep ::= KEEP tagitemlist */
+ { 232, -2 }, /* (74) cache ::= CACHE INTEGER */
+ { 233, -2 }, /* (75) replica ::= REPLICA INTEGER */
+ { 234, -2 }, /* (76) quorum ::= QUORUM INTEGER */
+ { 235, -2 }, /* (77) days ::= DAYS INTEGER */
+ { 236, -2 }, /* (78) minrows ::= MINROWS INTEGER */
+ { 237, -2 }, /* (79) maxrows ::= MAXROWS INTEGER */
+ { 238, -2 }, /* (80) blocks ::= BLOCKS INTEGER */
+ { 239, -2 }, /* (81) ctime ::= CTIME INTEGER */
+ { 240, -2 }, /* (82) wal ::= WAL INTEGER */
+ { 241, -2 }, /* (83) fsync ::= FSYNC INTEGER */
+ { 242, -2 }, /* (84) comp ::= COMP INTEGER */
+ { 243, -2 }, /* (85) prec ::= PRECISION STRING */
+ { 244, -2 }, /* (86) update ::= UPDATE INTEGER */
+ { 245, -2 }, /* (87) cachelast ::= CACHELAST INTEGER */
+ { 220, 0 }, /* (88) db_optr ::= */
+ { 220, -2 }, /* (89) db_optr ::= db_optr cache */
+ { 220, -2 }, /* (90) db_optr ::= db_optr replica */
+ { 220, -2 }, /* (91) db_optr ::= db_optr quorum */
+ { 220, -2 }, /* (92) db_optr ::= db_optr days */
+ { 220, -2 }, /* (93) db_optr ::= db_optr minrows */
+ { 220, -2 }, /* (94) db_optr ::= db_optr maxrows */
+ { 220, -2 }, /* (95) db_optr ::= db_optr blocks */
+ { 220, -2 }, /* (96) db_optr ::= db_optr ctime */
+ { 220, -2 }, /* (97) db_optr ::= db_optr wal */
+ { 220, -2 }, /* (98) db_optr ::= db_optr fsync */
+ { 220, -2 }, /* (99) db_optr ::= db_optr comp */
+ { 220, -2 }, /* (100) db_optr ::= db_optr prec */
+ { 220, -2 }, /* (101) db_optr ::= db_optr keep */
+ { 220, -2 }, /* (102) db_optr ::= db_optr update */
+ { 220, -2 }, /* (103) db_optr ::= db_optr cachelast */
+ { 217, 0 }, /* (104) alter_db_optr ::= */
+ { 217, -2 }, /* (105) alter_db_optr ::= alter_db_optr replica */
+ { 217, -2 }, /* (106) alter_db_optr ::= alter_db_optr quorum */
+ { 217, -2 }, /* (107) alter_db_optr ::= alter_db_optr keep */
+ { 217, -2 }, /* (108) alter_db_optr ::= alter_db_optr blocks */
+ { 217, -2 }, /* (109) alter_db_optr ::= alter_db_optr comp */
+ { 217, -2 }, /* (110) alter_db_optr ::= alter_db_optr wal */
+ { 217, -2 }, /* (111) alter_db_optr ::= alter_db_optr fsync */
+ { 217, -2 }, /* (112) alter_db_optr ::= alter_db_optr update */
+ { 217, -2 }, /* (113) alter_db_optr ::= alter_db_optr cachelast */
+ { 246, -1 }, /* (114) typename ::= ids */
+ { 246, -4 }, /* (115) typename ::= ids LP signed RP */
+ { 246, -2 }, /* (116) typename ::= ids UNSIGNED */
+ { 247, -1 }, /* (117) signed ::= INTEGER */
+ { 247, -2 }, /* (118) signed ::= PLUS INTEGER */
+ { 247, -2 }, /* (119) signed ::= MINUS INTEGER */
+ { 212, -3 }, /* (120) cmd ::= CREATE TABLE create_table_args */
+ { 212, -3 }, /* (121) cmd ::= CREATE TABLE create_stable_args */
+ { 212, -3 }, /* (122) cmd ::= CREATE STABLE create_stable_args */
+ { 212, -3 }, /* (123) cmd ::= CREATE TABLE create_table_list */
+ { 250, -1 }, /* (124) create_table_list ::= create_from_stable */
+ { 250, -2 }, /* (125) create_table_list ::= create_table_list create_from_stable */
+ { 248, -6 }, /* (126) create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
+ { 249, -10 }, /* (127) create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
+ { 251, -10 }, /* (128) create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
+ { 248, -5 }, /* (129) create_table_args ::= ifnotexists ids cpxName AS select */
+ { 252, -3 }, /* (130) columnlist ::= columnlist COMMA column */
+ { 252, -1 }, /* (131) columnlist ::= column */
+ { 254, -2 }, /* (132) column ::= ids typename */
+ { 231, -3 }, /* (133) tagitemlist ::= tagitemlist COMMA tagitem */
+ { 231, -1 }, /* (134) tagitemlist ::= tagitem */
+ { 255, -1 }, /* (135) tagitem ::= INTEGER */
+ { 255, -1 }, /* (136) tagitem ::= FLOAT */
+ { 255, -1 }, /* (137) tagitem ::= STRING */
+ { 255, -1 }, /* (138) tagitem ::= BOOL */
+ { 255, -1 }, /* (139) tagitem ::= NULL */
+ { 255, -2 }, /* (140) tagitem ::= MINUS INTEGER */
+ { 255, -2 }, /* (141) tagitem ::= MINUS FLOAT */
+ { 255, -2 }, /* (142) tagitem ::= PLUS INTEGER */
+ { 255, -2 }, /* (143) tagitem ::= PLUS FLOAT */
+ { 253, -12 }, /* (144) select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
+ { 267, -1 }, /* (145) union ::= select */
+ { 267, -3 }, /* (146) union ::= LP union RP */
+ { 267, -4 }, /* (147) union ::= union UNION ALL select */
+ { 267, -6 }, /* (148) union ::= union UNION ALL LP select RP */
+ { 212, -1 }, /* (149) cmd ::= union */
+ { 253, -2 }, /* (150) select ::= SELECT selcollist */
+ { 268, -2 }, /* (151) sclp ::= selcollist COMMA */
+ { 268, 0 }, /* (152) sclp ::= */
+ { 256, -4 }, /* (153) selcollist ::= sclp distinct expr as */
+ { 256, -2 }, /* (154) selcollist ::= sclp STAR */
+ { 271, -2 }, /* (155) as ::= AS ids */
+ { 271, -1 }, /* (156) as ::= ids */
+ { 271, 0 }, /* (157) as ::= */
+ { 269, -1 }, /* (158) distinct ::= DISTINCT */
+ { 269, 0 }, /* (159) distinct ::= */
+ { 257, -2 }, /* (160) from ::= FROM tablelist */
+ { 272, -2 }, /* (161) tablelist ::= ids cpxName */
+ { 272, -3 }, /* (162) tablelist ::= ids cpxName ids */
+ { 272, -4 }, /* (163) tablelist ::= tablelist COMMA ids cpxName */
+ { 272, -5 }, /* (164) tablelist ::= tablelist COMMA ids cpxName ids */
+ { 273, -1 }, /* (165) tmvar ::= VARIABLE */
+ { 259, -4 }, /* (166) interval_opt ::= INTERVAL LP tmvar RP */
+ { 259, -6 }, /* (167) interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
+ { 259, 0 }, /* (168) interval_opt ::= */
+ { 260, 0 }, /* (169) fill_opt ::= */
+ { 260, -6 }, /* (170) fill_opt ::= FILL LP ID COMMA tagitemlist RP */
+ { 260, -4 }, /* (171) fill_opt ::= FILL LP ID RP */
+ { 261, -4 }, /* (172) sliding_opt ::= SLIDING LP tmvar RP */
+ { 261, 0 }, /* (173) sliding_opt ::= */
+ { 263, 0 }, /* (174) orderby_opt ::= */
+ { 263, -3 }, /* (175) orderby_opt ::= ORDER BY sortlist */
+ { 274, -4 }, /* (176) sortlist ::= sortlist COMMA item sortorder */
+ { 274, -2 }, /* (177) sortlist ::= item sortorder */
+ { 276, -2 }, /* (178) item ::= ids cpxName */
+ { 277, -1 }, /* (179) sortorder ::= ASC */
+ { 277, -1 }, /* (180) sortorder ::= DESC */
+ { 277, 0 }, /* (181) sortorder ::= */
+ { 262, 0 }, /* (182) groupby_opt ::= */
+ { 262, -3 }, /* (183) groupby_opt ::= GROUP BY grouplist */
+ { 278, -3 }, /* (184) grouplist ::= grouplist COMMA item */
+ { 278, -1 }, /* (185) grouplist ::= item */
+ { 264, 0 }, /* (186) having_opt ::= */
+ { 264, -2 }, /* (187) having_opt ::= HAVING expr */
+ { 266, 0 }, /* (188) limit_opt ::= */
+ { 266, -2 }, /* (189) limit_opt ::= LIMIT signed */
+ { 266, -4 }, /* (190) limit_opt ::= LIMIT signed OFFSET signed */
+ { 266, -4 }, /* (191) limit_opt ::= LIMIT signed COMMA signed */
+ { 265, 0 }, /* (192) slimit_opt ::= */
+ { 265, -2 }, /* (193) slimit_opt ::= SLIMIT signed */
+ { 265, -4 }, /* (194) slimit_opt ::= SLIMIT signed SOFFSET signed */
+ { 265, -4 }, /* (195) slimit_opt ::= SLIMIT signed COMMA signed */
+ { 258, 0 }, /* (196) where_opt ::= */
+ { 258, -2 }, /* (197) where_opt ::= WHERE expr */
+ { 270, -3 }, /* (198) expr ::= LP expr RP */
+ { 270, -1 }, /* (199) expr ::= ID */
+ { 270, -3 }, /* (200) expr ::= ID DOT ID */
+ { 270, -3 }, /* (201) expr ::= ID DOT STAR */
+ { 270, -1 }, /* (202) expr ::= INTEGER */
+ { 270, -2 }, /* (203) expr ::= MINUS INTEGER */
+ { 270, -2 }, /* (204) expr ::= PLUS INTEGER */
+ { 270, -1 }, /* (205) expr ::= FLOAT */
+ { 270, -2 }, /* (206) expr ::= MINUS FLOAT */
+ { 270, -2 }, /* (207) expr ::= PLUS FLOAT */
+ { 270, -1 }, /* (208) expr ::= STRING */
+ { 270, -1 }, /* (209) expr ::= NOW */
+ { 270, -1 }, /* (210) expr ::= VARIABLE */
+ { 270, -1 }, /* (211) expr ::= BOOL */
+ { 270, -4 }, /* (212) expr ::= ID LP exprlist RP */
+ { 270, -4 }, /* (213) expr ::= ID LP STAR RP */
+ { 270, -3 }, /* (214) expr ::= expr IS NULL */
+ { 270, -4 }, /* (215) expr ::= expr IS NOT NULL */
+ { 270, -3 }, /* (216) expr ::= expr LT expr */
+ { 270, -3 }, /* (217) expr ::= expr GT expr */
+ { 270, -3 }, /* (218) expr ::= expr LE expr */
+ { 270, -3 }, /* (219) expr ::= expr GE expr */
+ { 270, -3 }, /* (220) expr ::= expr NE expr */
+ { 270, -3 }, /* (221) expr ::= expr EQ expr */
+ { 270, -3 }, /* (222) expr ::= expr AND expr */
+ { 270, -3 }, /* (223) expr ::= expr OR expr */
+ { 270, -3 }, /* (224) expr ::= expr PLUS expr */
+ { 270, -3 }, /* (225) expr ::= expr MINUS expr */
+ { 270, -3 }, /* (226) expr ::= expr STAR expr */
+ { 270, -3 }, /* (227) expr ::= expr SLASH expr */
+ { 270, -3 }, /* (228) expr ::= expr REM expr */
+ { 270, -3 }, /* (229) expr ::= expr LIKE expr */
+ { 270, -5 }, /* (230) expr ::= expr IN LP exprlist RP */
+ { 279, -3 }, /* (231) exprlist ::= exprlist COMMA expritem */
+ { 279, -1 }, /* (232) exprlist ::= expritem */
+ { 280, -1 }, /* (233) expritem ::= expr */
+ { 280, 0 }, /* (234) expritem ::= */
+ { 212, -3 }, /* (235) cmd ::= RESET QUERY CACHE */
+ { 212, -7 }, /* (236) cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
+ { 212, -7 }, /* (237) cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
+ { 212, -7 }, /* (238) cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
+ { 212, -7 }, /* (239) cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
+ { 212, -8 }, /* (240) cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
+ { 212, -9 }, /* (241) cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
+ { 212, -7 }, /* (242) cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
+ { 212, -7 }, /* (243) cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
+ { 212, -7 }, /* (244) cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
+ { 212, -7 }, /* (245) cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
+ { 212, -8 }, /* (246) cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
+ { 212, -3 }, /* (247) cmd ::= KILL CONNECTION INTEGER */
+ { 212, -5 }, /* (248) cmd ::= KILL STREAM INTEGER COLON INTEGER */
+ { 212, -5 }, /* (249) cmd ::= KILL QUERY INTEGER COLON INTEGER */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -2047,7 +2079,9 @@ static void yy_reduce(
/********** Begin reduce actions **********************************************/
YYMINORTYPE yylhsminor;
case 0: /* program ::= cmd */
- case 119: /* cmd ::= CREATE TABLE create_table_args */ yytestcase(yyruleno==119);
+ case 120: /* cmd ::= CREATE TABLE create_table_args */ yytestcase(yyruleno==120);
+ case 121: /* cmd ::= CREATE TABLE create_stable_args */ yytestcase(yyruleno==121);
+ case 122: /* cmd ::= CREATE STABLE create_stable_args */ yytestcase(yyruleno==122);
{}
break;
case 1: /* cmd ::= SHOW DATABASES */
@@ -2155,276 +2189,282 @@ static void yy_reduce(
case 27: /* cmd ::= DROP TABLE ifexists ids cpxName */
{
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
- setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &yymsp[-1].minor.yy0, &yymsp[-2].minor.yy0);
+ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &yymsp[-1].minor.yy0, &yymsp[-2].minor.yy0, -1);
}
break;
- case 28: /* cmd ::= DROP DATABASE ifexists ids */
-{ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &yymsp[0].minor.yy0, &yymsp[-1].minor.yy0); }
+ case 28: /* cmd ::= DROP STABLE ifexists ids cpxName */
+{
+ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
+ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &yymsp[-1].minor.yy0, &yymsp[-2].minor.yy0, TSDB_SUPER_TABLE);
+}
break;
- case 29: /* cmd ::= DROP DNODE ids */
+ case 29: /* cmd ::= DROP DATABASE ifexists ids */
+{ setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &yymsp[0].minor.yy0, &yymsp[-1].minor.yy0, -1); }
+ break;
+ case 30: /* cmd ::= DROP DNODE ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &yymsp[0].minor.yy0); }
break;
- case 30: /* cmd ::= DROP USER ids */
+ case 31: /* cmd ::= DROP USER ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &yymsp[0].minor.yy0); }
break;
- case 31: /* cmd ::= DROP ACCOUNT ids */
+ case 32: /* cmd ::= DROP ACCOUNT ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &yymsp[0].minor.yy0); }
break;
- case 32: /* cmd ::= USE ids */
+ case 33: /* cmd ::= USE ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_USE_DB, 1, &yymsp[0].minor.yy0);}
break;
- case 33: /* cmd ::= DESCRIBE ids cpxName */
+ case 34: /* cmd ::= DESCRIBE ids cpxName */
{
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
setDCLSQLElems(pInfo, TSDB_SQL_DESCRIBE_TABLE, 1, &yymsp[-1].minor.yy0);
}
break;
- case 34: /* cmd ::= ALTER USER ids PASS ids */
+ case 35: /* cmd ::= ALTER USER ids PASS ids */
{ setAlterUserSql(pInfo, TSDB_ALTER_USER_PASSWD, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, NULL); }
break;
- case 35: /* cmd ::= ALTER USER ids PRIVILEGE ids */
+ case 36: /* cmd ::= ALTER USER ids PRIVILEGE ids */
{ setAlterUserSql(pInfo, TSDB_ALTER_USER_PRIVILEGES, &yymsp[-2].minor.yy0, NULL, &yymsp[0].minor.yy0);}
break;
- case 36: /* cmd ::= ALTER DNODE ids ids */
+ case 37: /* cmd ::= ALTER DNODE ids ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
break;
- case 37: /* cmd ::= ALTER DNODE ids ids ids */
+ case 38: /* cmd ::= ALTER DNODE ids ids ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_DNODE, 3, &yymsp[-2].minor.yy0, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
break;
- case 38: /* cmd ::= ALTER LOCAL ids */
+ case 39: /* cmd ::= ALTER LOCAL ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &yymsp[0].minor.yy0); }
break;
- case 39: /* cmd ::= ALTER LOCAL ids ids */
+ case 40: /* cmd ::= ALTER LOCAL ids ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
break;
- case 40: /* cmd ::= ALTER DATABASE ids alter_db_optr */
-{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy478, &t);}
+ case 41: /* cmd ::= ALTER DATABASE ids alter_db_optr */
+{ SStrToken t = {0}; setCreateDBSQL(pInfo, TSDB_SQL_ALTER_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy388, &t);}
break;
- case 41: /* cmd ::= ALTER ACCOUNT ids acct_optr */
-{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy79);}
+ case 42: /* cmd ::= ALTER ACCOUNT ids acct_optr */
+{ setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &yymsp[-1].minor.yy0, NULL, &yymsp[0].minor.yy71);}
break;
- case 42: /* 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.yy79);}
+ case 43: /* 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.yy71);}
break;
- case 43: /* ids ::= ID */
- case 44: /* ids ::= STRING */ yytestcase(yyruleno==44);
+ case 44: /* ids ::= ID */
+ case 45: /* ids ::= STRING */ yytestcase(yyruleno==45);
{yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
- case 45: /* ifexists ::= IF EXISTS */
+ case 46: /* ifexists ::= IF EXISTS */
{ yymsp[-1].minor.yy0.n = 1;}
break;
- case 46: /* ifexists ::= */
- case 48: /* ifnotexists ::= */ yytestcase(yyruleno==48);
- case 156: /* distinct ::= */ yytestcase(yyruleno==156);
+ case 47: /* ifexists ::= */
+ case 49: /* ifnotexists ::= */ yytestcase(yyruleno==49);
+ case 159: /* distinct ::= */ yytestcase(yyruleno==159);
{ yymsp[1].minor.yy0.n = 0;}
break;
- case 47: /* ifnotexists ::= IF NOT EXISTS */
+ case 48: /* ifnotexists ::= IF NOT EXISTS */
{ yymsp[-2].minor.yy0.n = 1;}
break;
- case 49: /* cmd ::= CREATE DNODE ids */
+ case 50: /* cmd ::= CREATE DNODE ids */
{ setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE, 1, &yymsp[0].minor.yy0);}
break;
- case 50: /* 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.yy79);}
+ case 51: /* 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.yy71);}
break;
- case 51: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
-{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy478, &yymsp[-2].minor.yy0);}
+ case 52: /* cmd ::= CREATE DATABASE ifnotexists ids db_optr */
+{ setCreateDBSQL(pInfo, TSDB_SQL_CREATE_DB, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy388, &yymsp[-2].minor.yy0);}
break;
- case 52: /* cmd ::= CREATE USER ids PASS ids */
+ case 53: /* cmd ::= CREATE USER ids PASS ids */
{ setCreateUserSql(pInfo, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 53: /* pps ::= */
- case 55: /* tseries ::= */ yytestcase(yyruleno==55);
- case 57: /* dbs ::= */ yytestcase(yyruleno==57);
- case 59: /* streams ::= */ yytestcase(yyruleno==59);
- case 61: /* storage ::= */ yytestcase(yyruleno==61);
- case 63: /* qtime ::= */ yytestcase(yyruleno==63);
- case 65: /* users ::= */ yytestcase(yyruleno==65);
- case 67: /* conns ::= */ yytestcase(yyruleno==67);
- case 69: /* state ::= */ yytestcase(yyruleno==69);
+ case 54: /* pps ::= */
+ case 56: /* tseries ::= */ yytestcase(yyruleno==56);
+ case 58: /* dbs ::= */ yytestcase(yyruleno==58);
+ case 60: /* streams ::= */ yytestcase(yyruleno==60);
+ case 62: /* storage ::= */ yytestcase(yyruleno==62);
+ case 64: /* qtime ::= */ yytestcase(yyruleno==64);
+ case 66: /* users ::= */ yytestcase(yyruleno==66);
+ case 68: /* conns ::= */ yytestcase(yyruleno==68);
+ case 70: /* state ::= */ yytestcase(yyruleno==70);
{ yymsp[1].minor.yy0.n = 0; }
break;
- case 54: /* pps ::= PPS INTEGER */
- case 56: /* tseries ::= TSERIES INTEGER */ yytestcase(yyruleno==56);
- case 58: /* dbs ::= DBS INTEGER */ yytestcase(yyruleno==58);
- case 60: /* streams ::= STREAMS INTEGER */ yytestcase(yyruleno==60);
- case 62: /* storage ::= STORAGE INTEGER */ yytestcase(yyruleno==62);
- case 64: /* qtime ::= QTIME INTEGER */ yytestcase(yyruleno==64);
- case 66: /* users ::= USERS INTEGER */ yytestcase(yyruleno==66);
- case 68: /* conns ::= CONNS INTEGER */ yytestcase(yyruleno==68);
- case 70: /* state ::= STATE ids */ yytestcase(yyruleno==70);
+ case 55: /* pps ::= PPS INTEGER */
+ case 57: /* tseries ::= TSERIES INTEGER */ yytestcase(yyruleno==57);
+ case 59: /* dbs ::= DBS INTEGER */ yytestcase(yyruleno==59);
+ case 61: /* streams ::= STREAMS INTEGER */ yytestcase(yyruleno==61);
+ case 63: /* storage ::= STORAGE INTEGER */ yytestcase(yyruleno==63);
+ case 65: /* qtime ::= QTIME INTEGER */ yytestcase(yyruleno==65);
+ case 67: /* users ::= USERS INTEGER */ yytestcase(yyruleno==67);
+ case 69: /* conns ::= CONNS INTEGER */ yytestcase(yyruleno==69);
+ case 71: /* state ::= STATE ids */ yytestcase(yyruleno==71);
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
- case 71: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
+ case 72: /* acct_optr ::= pps tseries storage streams qtime dbs users conns state */
{
- yylhsminor.yy79.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
- yylhsminor.yy79.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
- yylhsminor.yy79.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
- yylhsminor.yy79.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
- yylhsminor.yy79.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
- yylhsminor.yy79.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
- yylhsminor.yy79.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
- yylhsminor.yy79.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
- yylhsminor.yy79.stat = yymsp[0].minor.yy0;
+ yylhsminor.yy71.maxUsers = (yymsp[-2].minor.yy0.n>0)?atoi(yymsp[-2].minor.yy0.z):-1;
+ yylhsminor.yy71.maxDbs = (yymsp[-3].minor.yy0.n>0)?atoi(yymsp[-3].minor.yy0.z):-1;
+ yylhsminor.yy71.maxTimeSeries = (yymsp[-7].minor.yy0.n>0)?atoi(yymsp[-7].minor.yy0.z):-1;
+ yylhsminor.yy71.maxStreams = (yymsp[-5].minor.yy0.n>0)?atoi(yymsp[-5].minor.yy0.z):-1;
+ yylhsminor.yy71.maxPointsPerSecond = (yymsp[-8].minor.yy0.n>0)?atoi(yymsp[-8].minor.yy0.z):-1;
+ yylhsminor.yy71.maxStorage = (yymsp[-6].minor.yy0.n>0)?strtoll(yymsp[-6].minor.yy0.z, NULL, 10):-1;
+ yylhsminor.yy71.maxQueryTime = (yymsp[-4].minor.yy0.n>0)?strtoll(yymsp[-4].minor.yy0.z, NULL, 10):-1;
+ yylhsminor.yy71.maxConnections = (yymsp[-1].minor.yy0.n>0)?atoi(yymsp[-1].minor.yy0.z):-1;
+ yylhsminor.yy71.stat = yymsp[0].minor.yy0;
}
- yymsp[-8].minor.yy79 = yylhsminor.yy79;
+ yymsp[-8].minor.yy71 = yylhsminor.yy71;
break;
- case 72: /* keep ::= KEEP tagitemlist */
-{ yymsp[-1].minor.yy221 = yymsp[0].minor.yy221; }
+ case 73: /* keep ::= KEEP tagitemlist */
+{ yymsp[-1].minor.yy247 = yymsp[0].minor.yy247; }
break;
- case 73: /* cache ::= CACHE INTEGER */
- case 74: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==74);
- case 75: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==75);
- case 76: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==76);
- case 77: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==77);
- case 78: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==78);
- case 79: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==79);
- case 80: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==80);
- case 81: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==81);
- case 82: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==82);
- case 83: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==83);
- case 84: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==84);
- case 85: /* update ::= UPDATE INTEGER */ yytestcase(yyruleno==85);
- case 86: /* cachelast ::= CACHELAST INTEGER */ yytestcase(yyruleno==86);
+ case 74: /* cache ::= CACHE INTEGER */
+ case 75: /* replica ::= REPLICA INTEGER */ yytestcase(yyruleno==75);
+ case 76: /* quorum ::= QUORUM INTEGER */ yytestcase(yyruleno==76);
+ case 77: /* days ::= DAYS INTEGER */ yytestcase(yyruleno==77);
+ case 78: /* minrows ::= MINROWS INTEGER */ yytestcase(yyruleno==78);
+ case 79: /* maxrows ::= MAXROWS INTEGER */ yytestcase(yyruleno==79);
+ case 80: /* blocks ::= BLOCKS INTEGER */ yytestcase(yyruleno==80);
+ case 81: /* ctime ::= CTIME INTEGER */ yytestcase(yyruleno==81);
+ case 82: /* wal ::= WAL INTEGER */ yytestcase(yyruleno==82);
+ case 83: /* fsync ::= FSYNC INTEGER */ yytestcase(yyruleno==83);
+ case 84: /* comp ::= COMP INTEGER */ yytestcase(yyruleno==84);
+ case 85: /* prec ::= PRECISION STRING */ yytestcase(yyruleno==85);
+ case 86: /* update ::= UPDATE INTEGER */ yytestcase(yyruleno==86);
+ case 87: /* cachelast ::= CACHELAST INTEGER */ yytestcase(yyruleno==87);
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
- case 87: /* db_optr ::= */
-{setDefaultCreateDbOption(&yymsp[1].minor.yy478);}
+ case 88: /* db_optr ::= */
+{setDefaultCreateDbOption(&yymsp[1].minor.yy388);}
break;
- case 88: /* db_optr ::= db_optr cache */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 89: /* db_optr ::= db_optr cache */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.cacheBlockSize = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 89: /* db_optr ::= db_optr replica */
- case 104: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==104);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 90: /* db_optr ::= db_optr replica */
+ case 105: /* alter_db_optr ::= alter_db_optr replica */ yytestcase(yyruleno==105);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.replica = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 90: /* db_optr ::= db_optr quorum */
- case 105: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==105);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 91: /* db_optr ::= db_optr quorum */
+ case 106: /* alter_db_optr ::= alter_db_optr quorum */ yytestcase(yyruleno==106);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.quorum = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 91: /* db_optr ::= db_optr days */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 92: /* db_optr ::= db_optr days */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.daysPerFile = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 92: /* db_optr ::= db_optr minrows */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 93: /* db_optr ::= db_optr minrows */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.minRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 93: /* db_optr ::= db_optr maxrows */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 94: /* db_optr ::= db_optr maxrows */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.maxRowsPerBlock = strtod(yymsp[0].minor.yy0.z, NULL); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 94: /* db_optr ::= db_optr blocks */
- case 107: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==107);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 95: /* db_optr ::= db_optr blocks */
+ case 108: /* alter_db_optr ::= alter_db_optr blocks */ yytestcase(yyruleno==108);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.numOfBlocks = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 95: /* db_optr ::= db_optr ctime */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 96: /* db_optr ::= db_optr ctime */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.commitTime = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 96: /* db_optr ::= db_optr wal */
- case 109: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==109);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 97: /* db_optr ::= db_optr wal */
+ case 110: /* alter_db_optr ::= alter_db_optr wal */ yytestcase(yyruleno==110);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.walLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 97: /* db_optr ::= db_optr fsync */
- case 110: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==110);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 98: /* db_optr ::= db_optr fsync */
+ case 111: /* alter_db_optr ::= alter_db_optr fsync */ yytestcase(yyruleno==111);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.fsyncPeriod = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 98: /* db_optr ::= db_optr comp */
- case 108: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==108);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 99: /* db_optr ::= db_optr comp */
+ case 109: /* alter_db_optr ::= alter_db_optr comp */ yytestcase(yyruleno==109);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.compressionLevel = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 99: /* db_optr ::= db_optr prec */
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.precision = yymsp[0].minor.yy0; }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 100: /* db_optr ::= db_optr prec */
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.precision = yymsp[0].minor.yy0; }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 100: /* db_optr ::= db_optr keep */
- case 106: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==106);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.keep = yymsp[0].minor.yy221; }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 101: /* db_optr ::= db_optr keep */
+ case 107: /* alter_db_optr ::= alter_db_optr keep */ yytestcase(yyruleno==107);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.keep = yymsp[0].minor.yy247; }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 101: /* db_optr ::= db_optr update */
- case 111: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==111);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 102: /* db_optr ::= db_optr update */
+ case 112: /* alter_db_optr ::= alter_db_optr update */ yytestcase(yyruleno==112);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.update = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 102: /* db_optr ::= db_optr cachelast */
- case 112: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==112);
-{ yylhsminor.yy478 = yymsp[-1].minor.yy478; yylhsminor.yy478.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[-1].minor.yy478 = yylhsminor.yy478;
+ case 103: /* db_optr ::= db_optr cachelast */
+ case 113: /* alter_db_optr ::= alter_db_optr cachelast */ yytestcase(yyruleno==113);
+{ yylhsminor.yy388 = yymsp[-1].minor.yy388; yylhsminor.yy388.cachelast = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[-1].minor.yy388 = yylhsminor.yy388;
break;
- case 103: /* alter_db_optr ::= */
-{ setDefaultCreateDbOption(&yymsp[1].minor.yy478);}
+ case 104: /* alter_db_optr ::= */
+{ setDefaultCreateDbOption(&yymsp[1].minor.yy388);}
break;
- case 113: /* typename ::= ids */
+ case 114: /* typename ::= ids */
{
yymsp[0].minor.yy0.type = 0;
- tSqlSetColumnType (&yylhsminor.yy503, &yymsp[0].minor.yy0);
+ tSqlSetColumnType (&yylhsminor.yy179, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy503 = yylhsminor.yy503;
+ yymsp[0].minor.yy179 = yylhsminor.yy179;
break;
- case 114: /* typename ::= ids LP signed RP */
+ case 115: /* typename ::= ids LP signed RP */
{
- if (yymsp[-1].minor.yy109 <= 0) {
+ if (yymsp[-1].minor.yy403 <= 0) {
yymsp[-3].minor.yy0.type = 0;
- tSqlSetColumnType(&yylhsminor.yy503, &yymsp[-3].minor.yy0);
+ tSqlSetColumnType(&yylhsminor.yy179, &yymsp[-3].minor.yy0);
} else {
- yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy109; // negative value of name length
- tSqlSetColumnType(&yylhsminor.yy503, &yymsp[-3].minor.yy0);
+ yymsp[-3].minor.yy0.type = -yymsp[-1].minor.yy403; // negative value of name length
+ tSqlSetColumnType(&yylhsminor.yy179, &yymsp[-3].minor.yy0);
}
}
- yymsp[-3].minor.yy503 = yylhsminor.yy503;
+ yymsp[-3].minor.yy179 = yylhsminor.yy179;
break;
- case 115: /* typename ::= ids UNSIGNED */
+ case 116: /* 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);
- tSqlSetColumnType (&yylhsminor.yy503, &yymsp[-1].minor.yy0);
+ tSqlSetColumnType (&yylhsminor.yy179, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy503 = yylhsminor.yy503;
+ yymsp[-1].minor.yy179 = yylhsminor.yy179;
break;
- case 116: /* signed ::= INTEGER */
-{ yylhsminor.yy109 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
- yymsp[0].minor.yy109 = yylhsminor.yy109;
+ case 117: /* signed ::= INTEGER */
+{ yylhsminor.yy403 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ yymsp[0].minor.yy403 = yylhsminor.yy403;
break;
- case 117: /* signed ::= PLUS INTEGER */
-{ yymsp[-1].minor.yy109 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
+ case 118: /* signed ::= PLUS INTEGER */
+{ yymsp[-1].minor.yy403 = strtol(yymsp[0].minor.yy0.z, NULL, 10); }
break;
- case 118: /* signed ::= MINUS INTEGER */
-{ yymsp[-1].minor.yy109 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
+ case 119: /* signed ::= MINUS INTEGER */
+{ yymsp[-1].minor.yy403 = -strtol(yymsp[0].minor.yy0.z, NULL, 10);}
break;
- case 120: /* cmd ::= CREATE TABLE create_table_list */
+ case 123: /* cmd ::= CREATE TABLE create_table_list */
{ pInfo->type = TSDB_SQL_CREATE_TABLE; pInfo->pCreateTableInfo = yymsp[0].minor.yy358;}
break;
- case 121: /* create_table_list ::= create_from_stable */
+ case 124: /* create_table_list ::= create_from_stable */
{
SCreateTableSQL* pCreateTable = calloc(1, sizeof(SCreateTableSQL));
pCreateTable->childTableInfo = taosArrayInit(4, sizeof(SCreatedTableInfo));
- taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy416);
+ taosArrayPush(pCreateTable->childTableInfo, &yymsp[0].minor.yy42);
pCreateTable->type = TSQL_CREATE_TABLE_FROM_STABLE;
yylhsminor.yy358 = pCreateTable;
}
yymsp[0].minor.yy358 = yylhsminor.yy358;
break;
- case 122: /* create_table_list ::= create_table_list create_from_stable */
+ case 125: /* create_table_list ::= create_table_list create_from_stable */
{
- taosArrayPush(yymsp[-1].minor.yy358->childTableInfo, &yymsp[0].minor.yy416);
+ taosArrayPush(yymsp[-1].minor.yy358->childTableInfo, &yymsp[0].minor.yy42);
yylhsminor.yy358 = yymsp[-1].minor.yy358;
}
yymsp[-1].minor.yy358 = yylhsminor.yy358;
break;
- case 123: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
+ case 126: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP */
{
- yylhsminor.yy358 = tSetCreateSqlElems(yymsp[-1].minor.yy221, NULL, NULL, TSQL_CREATE_TABLE);
+ yylhsminor.yy358 = tSetCreateSqlElems(yymsp[-1].minor.yy247, NULL, NULL, TSQL_CREATE_TABLE);
setSqlInfo(pInfo, yylhsminor.yy358, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
@@ -2432,9 +2472,9 @@ static void yy_reduce(
}
yymsp[-5].minor.yy358 = yylhsminor.yy358;
break;
- case 124: /* create_table_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
+ case 127: /* create_stable_args ::= ifnotexists ids cpxName LP columnlist RP TAGS LP columnlist RP */
{
- yylhsminor.yy358 = tSetCreateSqlElems(yymsp[-5].minor.yy221, yymsp[-1].minor.yy221, NULL, TSQL_CREATE_STABLE);
+ yylhsminor.yy358 = tSetCreateSqlElems(yymsp[-5].minor.yy247, yymsp[-1].minor.yy247, NULL, TSQL_CREATE_STABLE);
setSqlInfo(pInfo, yylhsminor.yy358, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-8].minor.yy0.n += yymsp[-7].minor.yy0.n;
@@ -2442,17 +2482,17 @@ static void yy_reduce(
}
yymsp[-9].minor.yy358 = yylhsminor.yy358;
break;
- case 125: /* create_from_stable ::= ifnotexists ids cpxName USING ids cpxName TAGS LP tagitemlist RP */
+ case 128: /* 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.yy416 = createNewChildTableInfo(&yymsp[-5].minor.yy0, yymsp[-1].minor.yy221, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
+ yylhsminor.yy42 = createNewChildTableInfo(&yymsp[-5].minor.yy0, yymsp[-1].minor.yy247, &yymsp[-8].minor.yy0, &yymsp[-9].minor.yy0);
}
- yymsp[-9].minor.yy416 = yylhsminor.yy416;
+ yymsp[-9].minor.yy42 = yylhsminor.yy42;
break;
- case 126: /* create_table_args ::= ifnotexists ids cpxName AS select */
+ case 129: /* create_table_args ::= ifnotexists ids cpxName AS select */
{
- yylhsminor.yy358 = tSetCreateSqlElems(NULL, NULL, yymsp[0].minor.yy344, TSQL_CREATE_STREAM);
+ yylhsminor.yy358 = tSetCreateSqlElems(NULL, NULL, yymsp[0].minor.yy114, TSQL_CREATE_STREAM);
setSqlInfo(pInfo, yylhsminor.yy358, NULL, TSDB_SQL_CREATE_TABLE);
yymsp[-3].minor.yy0.n += yymsp[-2].minor.yy0.n;
@@ -2460,455 +2500,455 @@ static void yy_reduce(
}
yymsp[-4].minor.yy358 = yylhsminor.yy358;
break;
- case 127: /* columnlist ::= columnlist COMMA column */
-{taosArrayPush(yymsp[-2].minor.yy221, &yymsp[0].minor.yy503); yylhsminor.yy221 = yymsp[-2].minor.yy221; }
- yymsp[-2].minor.yy221 = yylhsminor.yy221;
+ case 130: /* columnlist ::= columnlist COMMA column */
+{taosArrayPush(yymsp[-2].minor.yy247, &yymsp[0].minor.yy179); yylhsminor.yy247 = yymsp[-2].minor.yy247; }
+ yymsp[-2].minor.yy247 = yylhsminor.yy247;
break;
- case 128: /* columnlist ::= column */
-{yylhsminor.yy221 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy221, &yymsp[0].minor.yy503);}
- yymsp[0].minor.yy221 = yylhsminor.yy221;
+ case 131: /* columnlist ::= column */
+{yylhsminor.yy247 = taosArrayInit(4, sizeof(TAOS_FIELD)); taosArrayPush(yylhsminor.yy247, &yymsp[0].minor.yy179);}
+ yymsp[0].minor.yy247 = yylhsminor.yy247;
break;
- case 129: /* column ::= ids typename */
+ case 132: /* column ::= ids typename */
{
- tSqlSetColumnInfo(&yylhsminor.yy503, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy503);
+ tSqlSetColumnInfo(&yylhsminor.yy179, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy179);
}
- yymsp[-1].minor.yy503 = yylhsminor.yy503;
+ yymsp[-1].minor.yy179 = yylhsminor.yy179;
break;
- case 130: /* tagitemlist ::= tagitemlist COMMA tagitem */
-{ yylhsminor.yy221 = tVariantListAppend(yymsp[-2].minor.yy221, &yymsp[0].minor.yy106, -1); }
- yymsp[-2].minor.yy221 = yylhsminor.yy221;
+ case 133: /* tagitemlist ::= tagitemlist COMMA tagitem */
+{ yylhsminor.yy247 = tVariantListAppend(yymsp[-2].minor.yy247, &yymsp[0].minor.yy378, -1); }
+ yymsp[-2].minor.yy247 = yylhsminor.yy247;
break;
- case 131: /* tagitemlist ::= tagitem */
-{ yylhsminor.yy221 = tVariantListAppend(NULL, &yymsp[0].minor.yy106, -1); }
- yymsp[0].minor.yy221 = yylhsminor.yy221;
+ case 134: /* tagitemlist ::= tagitem */
+{ yylhsminor.yy247 = tVariantListAppend(NULL, &yymsp[0].minor.yy378, -1); }
+ yymsp[0].minor.yy247 = yylhsminor.yy247;
break;
- case 132: /* tagitem ::= INTEGER */
- case 133: /* tagitem ::= FLOAT */ yytestcase(yyruleno==133);
- case 134: /* tagitem ::= STRING */ yytestcase(yyruleno==134);
- case 135: /* tagitem ::= BOOL */ yytestcase(yyruleno==135);
-{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy106, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy106 = yylhsminor.yy106;
+ case 135: /* tagitem ::= INTEGER */
+ case 136: /* tagitem ::= FLOAT */ yytestcase(yyruleno==136);
+ case 137: /* tagitem ::= STRING */ yytestcase(yyruleno==137);
+ case 138: /* tagitem ::= BOOL */ yytestcase(yyruleno==138);
+{ toTSDBType(yymsp[0].minor.yy0.type); tVariantCreate(&yylhsminor.yy378, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy378 = yylhsminor.yy378;
break;
- case 136: /* tagitem ::= NULL */
-{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy106, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy106 = yylhsminor.yy106;
+ case 139: /* tagitem ::= NULL */
+{ yymsp[0].minor.yy0.type = 0; tVariantCreate(&yylhsminor.yy378, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy378 = yylhsminor.yy378;
break;
- case 137: /* tagitem ::= MINUS INTEGER */
- case 138: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==138);
- case 139: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==139);
- case 140: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==140);
+ case 140: /* tagitem ::= MINUS INTEGER */
+ case 141: /* tagitem ::= MINUS FLOAT */ yytestcase(yyruleno==141);
+ case 142: /* tagitem ::= PLUS INTEGER */ yytestcase(yyruleno==142);
+ case 143: /* tagitem ::= PLUS FLOAT */ yytestcase(yyruleno==143);
{
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.yy106, &yymsp[-1].minor.yy0);
+ tVariantCreate(&yylhsminor.yy378, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy106 = yylhsminor.yy106;
+ yymsp[-1].minor.yy378 = yylhsminor.yy378;
break;
- case 141: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
+ case 144: /* select ::= SELECT selcollist from where_opt interval_opt fill_opt sliding_opt groupby_opt orderby_opt having_opt slimit_opt limit_opt */
{
- yylhsminor.yy344 = tSetQuerySqlElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy178, yymsp[-9].minor.yy221, yymsp[-8].minor.yy50, yymsp[-4].minor.yy221, yymsp[-3].minor.yy221, &yymsp[-7].minor.yy280, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy221, &yymsp[0].minor.yy454, &yymsp[-1].minor.yy454);
+ yylhsminor.yy114 = tSetQuerySqlElems(&yymsp[-11].minor.yy0, yymsp[-10].minor.yy522, yymsp[-9].minor.yy247, yymsp[-8].minor.yy326, yymsp[-4].minor.yy247, yymsp[-3].minor.yy247, &yymsp[-7].minor.yy430, &yymsp[-5].minor.yy0, yymsp[-6].minor.yy247, &yymsp[0].minor.yy204, &yymsp[-1].minor.yy204);
}
- yymsp[-11].minor.yy344 = yylhsminor.yy344;
+ yymsp[-11].minor.yy114 = yylhsminor.yy114;
break;
- case 142: /* union ::= select */
-{ yylhsminor.yy273 = setSubclause(NULL, yymsp[0].minor.yy344); }
- yymsp[0].minor.yy273 = yylhsminor.yy273;
+ case 145: /* union ::= select */
+{ yylhsminor.yy219 = setSubclause(NULL, yymsp[0].minor.yy114); }
+ yymsp[0].minor.yy219 = yylhsminor.yy219;
break;
- case 143: /* union ::= LP union RP */
-{ yymsp[-2].minor.yy273 = yymsp[-1].minor.yy273; }
+ case 146: /* union ::= LP union RP */
+{ yymsp[-2].minor.yy219 = yymsp[-1].minor.yy219; }
break;
- case 144: /* union ::= union UNION ALL select */
-{ yylhsminor.yy273 = appendSelectClause(yymsp[-3].minor.yy273, yymsp[0].minor.yy344); }
- yymsp[-3].minor.yy273 = yylhsminor.yy273;
+ case 147: /* union ::= union UNION ALL select */
+{ yylhsminor.yy219 = appendSelectClause(yymsp[-3].minor.yy219, yymsp[0].minor.yy114); }
+ yymsp[-3].minor.yy219 = yylhsminor.yy219;
break;
- case 145: /* union ::= union UNION ALL LP select RP */
-{ yylhsminor.yy273 = appendSelectClause(yymsp[-5].minor.yy273, yymsp[-1].minor.yy344); }
- yymsp[-5].minor.yy273 = yylhsminor.yy273;
+ case 148: /* union ::= union UNION ALL LP select RP */
+{ yylhsminor.yy219 = appendSelectClause(yymsp[-5].minor.yy219, yymsp[-1].minor.yy114); }
+ yymsp[-5].minor.yy219 = yylhsminor.yy219;
break;
- case 146: /* cmd ::= union */
-{ setSqlInfo(pInfo, yymsp[0].minor.yy273, NULL, TSDB_SQL_SELECT); }
+ case 149: /* cmd ::= union */
+{ setSqlInfo(pInfo, yymsp[0].minor.yy219, NULL, TSDB_SQL_SELECT); }
break;
- case 147: /* select ::= SELECT selcollist */
+ case 150: /* select ::= SELECT selcollist */
{
- yylhsminor.yy344 = tSetQuerySqlElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy178, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ yylhsminor.yy114 = tSetQuerySqlElems(&yymsp[-1].minor.yy0, yymsp[0].minor.yy522, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
}
- yymsp[-1].minor.yy344 = yylhsminor.yy344;
+ yymsp[-1].minor.yy114 = yylhsminor.yy114;
break;
- case 148: /* sclp ::= selcollist COMMA */
-{yylhsminor.yy178 = yymsp[-1].minor.yy178;}
- yymsp[-1].minor.yy178 = yylhsminor.yy178;
+ case 151: /* sclp ::= selcollist COMMA */
+{yylhsminor.yy522 = yymsp[-1].minor.yy522;}
+ yymsp[-1].minor.yy522 = yylhsminor.yy522;
break;
- case 149: /* sclp ::= */
-{yymsp[1].minor.yy178 = 0;}
+ case 152: /* sclp ::= */
+{yymsp[1].minor.yy522 = 0;}
break;
- case 150: /* selcollist ::= sclp distinct expr as */
+ case 153: /* selcollist ::= sclp distinct expr as */
{
- yylhsminor.yy178 = tSqlExprListAppend(yymsp[-3].minor.yy178, yymsp[-1].minor.yy50, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
+ yylhsminor.yy522 = tSqlExprListAppend(yymsp[-3].minor.yy522, yymsp[-1].minor.yy326, yymsp[-2].minor.yy0.n? &yymsp[-2].minor.yy0:0, yymsp[0].minor.yy0.n?&yymsp[0].minor.yy0:0);
}
- yymsp[-3].minor.yy178 = yylhsminor.yy178;
+ yymsp[-3].minor.yy522 = yylhsminor.yy522;
break;
- case 151: /* selcollist ::= sclp STAR */
+ case 154: /* selcollist ::= sclp STAR */
{
tSQLExpr *pNode = tSqlExprIdValueCreate(NULL, TK_ALL);
- yylhsminor.yy178 = tSqlExprListAppend(yymsp[-1].minor.yy178, pNode, 0, 0);
+ yylhsminor.yy522 = tSqlExprListAppend(yymsp[-1].minor.yy522, pNode, 0, 0);
}
- yymsp[-1].minor.yy178 = yylhsminor.yy178;
+ yymsp[-1].minor.yy522 = yylhsminor.yy522;
break;
- case 152: /* as ::= AS ids */
+ case 155: /* as ::= AS ids */
{ yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; }
break;
- case 153: /* as ::= ids */
+ case 156: /* as ::= ids */
{ yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
- case 154: /* as ::= */
+ case 157: /* as ::= */
{ yymsp[1].minor.yy0.n = 0; }
break;
- case 155: /* distinct ::= DISTINCT */
+ case 158: /* distinct ::= DISTINCT */
{ yylhsminor.yy0 = yymsp[0].minor.yy0; }
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
- case 157: /* from ::= FROM tablelist */
-{yymsp[-1].minor.yy221 = yymsp[0].minor.yy221;}
+ case 160: /* from ::= FROM tablelist */
+{yymsp[-1].minor.yy247 = yymsp[0].minor.yy247;}
break;
- case 158: /* tablelist ::= ids cpxName */
+ case 161: /* tablelist ::= ids cpxName */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
- yylhsminor.yy221 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
- yylhsminor.yy221 = tVariantListAppendToken(yylhsminor.yy221, &yymsp[-1].minor.yy0, -1); // table alias name
+ yylhsminor.yy247 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yylhsminor.yy247, &yymsp[-1].minor.yy0, -1); // table alias name
}
- yymsp[-1].minor.yy221 = yylhsminor.yy221;
+ yymsp[-1].minor.yy247 = yylhsminor.yy247;
break;
- case 159: /* tablelist ::= ids cpxName ids */
+ case 162: /* 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.yy221 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
- yylhsminor.yy221 = tVariantListAppendToken(yylhsminor.yy221, &yymsp[0].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(NULL, &yymsp[-2].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yylhsminor.yy247, &yymsp[0].minor.yy0, -1);
}
- yymsp[-2].minor.yy221 = yylhsminor.yy221;
+ yymsp[-2].minor.yy247 = yylhsminor.yy247;
break;
- case 160: /* tablelist ::= tablelist COMMA ids cpxName */
+ case 163: /* tablelist ::= tablelist COMMA ids cpxName */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
- yylhsminor.yy221 = tVariantListAppendToken(yymsp[-3].minor.yy221, &yymsp[-1].minor.yy0, -1);
- yylhsminor.yy221 = tVariantListAppendToken(yylhsminor.yy221, &yymsp[-1].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yymsp[-3].minor.yy247, &yymsp[-1].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yylhsminor.yy247, &yymsp[-1].minor.yy0, -1);
}
- yymsp[-3].minor.yy221 = yylhsminor.yy221;
+ yymsp[-3].minor.yy247 = yylhsminor.yy247;
break;
- case 161: /* tablelist ::= tablelist COMMA ids cpxName ids */
+ case 164: /* tablelist ::= tablelist COMMA 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.yy221 = tVariantListAppendToken(yymsp[-4].minor.yy221, &yymsp[-2].minor.yy0, -1);
- yylhsminor.yy221 = tVariantListAppendToken(yylhsminor.yy221, &yymsp[0].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yymsp[-4].minor.yy247, &yymsp[-2].minor.yy0, -1);
+ yylhsminor.yy247 = tVariantListAppendToken(yylhsminor.yy247, &yymsp[0].minor.yy0, -1);
}
- yymsp[-4].minor.yy221 = yylhsminor.yy221;
+ yymsp[-4].minor.yy247 = yylhsminor.yy247;
break;
- case 162: /* tmvar ::= VARIABLE */
+ case 165: /* tmvar ::= VARIABLE */
{yylhsminor.yy0 = yymsp[0].minor.yy0;}
yymsp[0].minor.yy0 = yylhsminor.yy0;
break;
- case 163: /* interval_opt ::= INTERVAL LP tmvar RP */
-{yymsp[-3].minor.yy280.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy280.offset.n = 0; yymsp[-3].minor.yy280.offset.z = NULL; yymsp[-3].minor.yy280.offset.type = 0;}
+ case 166: /* interval_opt ::= INTERVAL LP tmvar RP */
+{yymsp[-3].minor.yy430.interval = yymsp[-1].minor.yy0; yymsp[-3].minor.yy430.offset.n = 0; yymsp[-3].minor.yy430.offset.z = NULL; yymsp[-3].minor.yy430.offset.type = 0;}
break;
- case 164: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
-{yymsp[-5].minor.yy280.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy280.offset = yymsp[-1].minor.yy0;}
+ case 167: /* interval_opt ::= INTERVAL LP tmvar COMMA tmvar RP */
+{yymsp[-5].minor.yy430.interval = yymsp[-3].minor.yy0; yymsp[-5].minor.yy430.offset = yymsp[-1].minor.yy0;}
break;
- case 165: /* interval_opt ::= */
-{memset(&yymsp[1].minor.yy280, 0, sizeof(yymsp[1].minor.yy280));}
+ case 168: /* interval_opt ::= */
+{memset(&yymsp[1].minor.yy430, 0, sizeof(yymsp[1].minor.yy430));}
break;
- case 166: /* fill_opt ::= */
-{yymsp[1].minor.yy221 = 0; }
+ case 169: /* fill_opt ::= */
+{yymsp[1].minor.yy247 = 0; }
break;
- case 167: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
+ case 170: /* fill_opt ::= FILL LP ID COMMA tagitemlist RP */
{
tVariant A = {0};
toTSDBType(yymsp[-3].minor.yy0.type);
tVariantCreate(&A, &yymsp[-3].minor.yy0);
- tVariantListInsert(yymsp[-1].minor.yy221, &A, -1, 0);
- yymsp[-5].minor.yy221 = yymsp[-1].minor.yy221;
+ tVariantListInsert(yymsp[-1].minor.yy247, &A, -1, 0);
+ yymsp[-5].minor.yy247 = yymsp[-1].minor.yy247;
}
break;
- case 168: /* fill_opt ::= FILL LP ID RP */
+ case 171: /* fill_opt ::= FILL LP ID RP */
{
toTSDBType(yymsp[-1].minor.yy0.type);
- yymsp[-3].minor.yy221 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
+ yymsp[-3].minor.yy247 = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
}
break;
- case 169: /* sliding_opt ::= SLIDING LP tmvar RP */
+ case 172: /* sliding_opt ::= SLIDING LP tmvar RP */
{yymsp[-3].minor.yy0 = yymsp[-1].minor.yy0; }
break;
- case 170: /* sliding_opt ::= */
+ case 173: /* sliding_opt ::= */
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = NULL; yymsp[1].minor.yy0.type = 0; }
break;
- case 171: /* orderby_opt ::= */
-{yymsp[1].minor.yy221 = 0;}
+ case 174: /* orderby_opt ::= */
+{yymsp[1].minor.yy247 = 0;}
break;
- case 172: /* orderby_opt ::= ORDER BY sortlist */
-{yymsp[-2].minor.yy221 = yymsp[0].minor.yy221;}
+ case 175: /* orderby_opt ::= ORDER BY sortlist */
+{yymsp[-2].minor.yy247 = yymsp[0].minor.yy247;}
break;
- case 173: /* sortlist ::= sortlist COMMA item sortorder */
+ case 176: /* sortlist ::= sortlist COMMA item sortorder */
{
- yylhsminor.yy221 = tVariantListAppend(yymsp[-3].minor.yy221, &yymsp[-1].minor.yy106, yymsp[0].minor.yy172);
+ yylhsminor.yy247 = tVariantListAppend(yymsp[-3].minor.yy247, &yymsp[-1].minor.yy378, yymsp[0].minor.yy222);
}
- yymsp[-3].minor.yy221 = yylhsminor.yy221;
+ yymsp[-3].minor.yy247 = yylhsminor.yy247;
break;
- case 174: /* sortlist ::= item sortorder */
+ case 177: /* sortlist ::= item sortorder */
{
- yylhsminor.yy221 = tVariantListAppend(NULL, &yymsp[-1].minor.yy106, yymsp[0].minor.yy172);
+ yylhsminor.yy247 = tVariantListAppend(NULL, &yymsp[-1].minor.yy378, yymsp[0].minor.yy222);
}
- yymsp[-1].minor.yy221 = yylhsminor.yy221;
+ yymsp[-1].minor.yy247 = yylhsminor.yy247;
break;
- case 175: /* item ::= ids cpxName */
+ case 178: /* item ::= ids cpxName */
{
toTSDBType(yymsp[-1].minor.yy0.type);
yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n;
- tVariantCreate(&yylhsminor.yy106, &yymsp[-1].minor.yy0);
+ tVariantCreate(&yylhsminor.yy378, &yymsp[-1].minor.yy0);
}
- yymsp[-1].minor.yy106 = yylhsminor.yy106;
+ yymsp[-1].minor.yy378 = yylhsminor.yy378;
break;
- case 176: /* sortorder ::= ASC */
-{ yymsp[0].minor.yy172 = TSDB_ORDER_ASC; }
+ case 179: /* sortorder ::= ASC */
+{ yymsp[0].minor.yy222 = TSDB_ORDER_ASC; }
break;
- case 177: /* sortorder ::= DESC */
-{ yymsp[0].minor.yy172 = TSDB_ORDER_DESC;}
+ case 180: /* sortorder ::= DESC */
+{ yymsp[0].minor.yy222 = TSDB_ORDER_DESC;}
break;
- case 178: /* sortorder ::= */
-{ yymsp[1].minor.yy172 = TSDB_ORDER_ASC; }
+ case 181: /* sortorder ::= */
+{ yymsp[1].minor.yy222 = TSDB_ORDER_ASC; }
break;
- case 179: /* groupby_opt ::= */
-{ yymsp[1].minor.yy221 = 0;}
+ case 182: /* groupby_opt ::= */
+{ yymsp[1].minor.yy247 = 0;}
break;
- case 180: /* groupby_opt ::= GROUP BY grouplist */
-{ yymsp[-2].minor.yy221 = yymsp[0].minor.yy221;}
+ case 183: /* groupby_opt ::= GROUP BY grouplist */
+{ yymsp[-2].minor.yy247 = yymsp[0].minor.yy247;}
break;
- case 181: /* grouplist ::= grouplist COMMA item */
+ case 184: /* grouplist ::= grouplist COMMA item */
{
- yylhsminor.yy221 = tVariantListAppend(yymsp[-2].minor.yy221, &yymsp[0].minor.yy106, -1);
+ yylhsminor.yy247 = tVariantListAppend(yymsp[-2].minor.yy247, &yymsp[0].minor.yy378, -1);
}
- yymsp[-2].minor.yy221 = yylhsminor.yy221;
+ yymsp[-2].minor.yy247 = yylhsminor.yy247;
break;
- case 182: /* grouplist ::= item */
+ case 185: /* grouplist ::= item */
{
- yylhsminor.yy221 = tVariantListAppend(NULL, &yymsp[0].minor.yy106, -1);
+ yylhsminor.yy247 = tVariantListAppend(NULL, &yymsp[0].minor.yy378, -1);
}
- yymsp[0].minor.yy221 = yylhsminor.yy221;
+ yymsp[0].minor.yy247 = yylhsminor.yy247;
break;
- case 183: /* having_opt ::= */
- case 193: /* where_opt ::= */ yytestcase(yyruleno==193);
- case 231: /* expritem ::= */ yytestcase(yyruleno==231);
-{yymsp[1].minor.yy50 = 0;}
+ case 186: /* having_opt ::= */
+ case 196: /* where_opt ::= */ yytestcase(yyruleno==196);
+ case 234: /* expritem ::= */ yytestcase(yyruleno==234);
+{yymsp[1].minor.yy326 = 0;}
break;
- case 184: /* having_opt ::= HAVING expr */
- case 194: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==194);
-{yymsp[-1].minor.yy50 = yymsp[0].minor.yy50;}
+ case 187: /* having_opt ::= HAVING expr */
+ case 197: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==197);
+{yymsp[-1].minor.yy326 = yymsp[0].minor.yy326;}
break;
- case 185: /* limit_opt ::= */
- case 189: /* slimit_opt ::= */ yytestcase(yyruleno==189);
-{yymsp[1].minor.yy454.limit = -1; yymsp[1].minor.yy454.offset = 0;}
+ case 188: /* limit_opt ::= */
+ case 192: /* slimit_opt ::= */ yytestcase(yyruleno==192);
+{yymsp[1].minor.yy204.limit = -1; yymsp[1].minor.yy204.offset = 0;}
break;
- case 186: /* limit_opt ::= LIMIT signed */
- case 190: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==190);
-{yymsp[-1].minor.yy454.limit = yymsp[0].minor.yy109; yymsp[-1].minor.yy454.offset = 0;}
+ case 189: /* limit_opt ::= LIMIT signed */
+ case 193: /* slimit_opt ::= SLIMIT signed */ yytestcase(yyruleno==193);
+{yymsp[-1].minor.yy204.limit = yymsp[0].minor.yy403; yymsp[-1].minor.yy204.offset = 0;}
break;
- case 187: /* limit_opt ::= LIMIT signed OFFSET signed */
-{ yymsp[-3].minor.yy454.limit = yymsp[-2].minor.yy109; yymsp[-3].minor.yy454.offset = yymsp[0].minor.yy109;}
+ case 190: /* limit_opt ::= LIMIT signed OFFSET signed */
+{ yymsp[-3].minor.yy204.limit = yymsp[-2].minor.yy403; yymsp[-3].minor.yy204.offset = yymsp[0].minor.yy403;}
break;
- case 188: /* limit_opt ::= LIMIT signed COMMA signed */
-{ yymsp[-3].minor.yy454.limit = yymsp[0].minor.yy109; yymsp[-3].minor.yy454.offset = yymsp[-2].minor.yy109;}
+ case 191: /* limit_opt ::= LIMIT signed COMMA signed */
+{ yymsp[-3].minor.yy204.limit = yymsp[0].minor.yy403; yymsp[-3].minor.yy204.offset = yymsp[-2].minor.yy403;}
break;
- case 191: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
-{yymsp[-3].minor.yy454.limit = yymsp[-2].minor.yy109; yymsp[-3].minor.yy454.offset = yymsp[0].minor.yy109;}
+ case 194: /* slimit_opt ::= SLIMIT signed SOFFSET signed */
+{yymsp[-3].minor.yy204.limit = yymsp[-2].minor.yy403; yymsp[-3].minor.yy204.offset = yymsp[0].minor.yy403;}
break;
- case 192: /* slimit_opt ::= SLIMIT signed COMMA signed */
-{yymsp[-3].minor.yy454.limit = yymsp[0].minor.yy109; yymsp[-3].minor.yy454.offset = yymsp[-2].minor.yy109;}
+ case 195: /* slimit_opt ::= SLIMIT signed COMMA signed */
+{yymsp[-3].minor.yy204.limit = yymsp[0].minor.yy403; yymsp[-3].minor.yy204.offset = yymsp[-2].minor.yy403;}
break;
- case 195: /* expr ::= LP expr RP */
-{yylhsminor.yy50 = yymsp[-1].minor.yy50; yylhsminor.yy50->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy50->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 198: /* expr ::= LP expr RP */
+{yylhsminor.yy326 = yymsp[-1].minor.yy326; yylhsminor.yy326->token.z = yymsp[-2].minor.yy0.z; yylhsminor.yy326->token.n = (yymsp[0].minor.yy0.z - yymsp[-2].minor.yy0.z + 1);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 196: /* expr ::= ID */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 199: /* expr ::= ID */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_ID);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 197: /* expr ::= ID DOT ID */
-{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 200: /* expr ::= ID DOT ID */
+{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ID);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 198: /* expr ::= ID DOT STAR */
-{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 201: /* expr ::= ID DOT STAR */
+{ yymsp[-2].minor.yy0.n += (1+yymsp[0].minor.yy0.n); yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[-2].minor.yy0, TK_ALL);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 199: /* expr ::= INTEGER */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 202: /* expr ::= INTEGER */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_INTEGER);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 200: /* expr ::= MINUS INTEGER */
- case 201: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==201);
-{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
- yymsp[-1].minor.yy50 = yylhsminor.yy50;
+ case 203: /* expr ::= MINUS INTEGER */
+ case 204: /* expr ::= PLUS INTEGER */ yytestcase(yyruleno==204);
+{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_INTEGER; yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_INTEGER);}
+ yymsp[-1].minor.yy326 = yylhsminor.yy326;
break;
- case 202: /* expr ::= FLOAT */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 205: /* expr ::= FLOAT */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_FLOAT);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 203: /* expr ::= MINUS FLOAT */
- case 204: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==204);
-{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
- yymsp[-1].minor.yy50 = yylhsminor.yy50;
+ case 206: /* expr ::= MINUS FLOAT */
+ case 207: /* expr ::= PLUS FLOAT */ yytestcase(yyruleno==207);
+{ yymsp[-1].minor.yy0.n += yymsp[0].minor.yy0.n; yymsp[-1].minor.yy0.type = TK_FLOAT; yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[-1].minor.yy0, TK_FLOAT);}
+ yymsp[-1].minor.yy326 = yylhsminor.yy326;
break;
- case 205: /* expr ::= STRING */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 208: /* expr ::= STRING */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_STRING);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 206: /* expr ::= NOW */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 209: /* expr ::= NOW */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_NOW); }
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 207: /* expr ::= VARIABLE */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 210: /* expr ::= VARIABLE */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_VARIABLE);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 208: /* expr ::= BOOL */
-{ yylhsminor.yy50 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 211: /* expr ::= BOOL */
+{ yylhsminor.yy326 = tSqlExprIdValueCreate(&yymsp[0].minor.yy0, TK_BOOL);}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 209: /* expr ::= ID LP exprlist RP */
-{ yylhsminor.yy50 = tSqlExprCreateFunction(yymsp[-1].minor.yy178, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
- yymsp[-3].minor.yy50 = yylhsminor.yy50;
+ case 212: /* expr ::= ID LP exprlist RP */
+{ yylhsminor.yy326 = tSqlExprCreateFunction(yymsp[-1].minor.yy522, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
+ yymsp[-3].minor.yy326 = yylhsminor.yy326;
break;
- case 210: /* expr ::= ID LP STAR RP */
-{ yylhsminor.yy50 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
- yymsp[-3].minor.yy50 = yylhsminor.yy50;
+ case 213: /* expr ::= ID LP STAR RP */
+{ yylhsminor.yy326 = tSqlExprCreateFunction(NULL, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, yymsp[-3].minor.yy0.type); }
+ yymsp[-3].minor.yy326 = yylhsminor.yy326;
break;
- case 211: /* expr ::= expr IS NULL */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, NULL, TK_ISNULL);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 214: /* expr ::= expr IS NULL */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, NULL, TK_ISNULL);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 212: /* expr ::= expr IS NOT NULL */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-3].minor.yy50, NULL, TK_NOTNULL);}
- yymsp[-3].minor.yy50 = yylhsminor.yy50;
+ case 215: /* expr ::= expr IS NOT NULL */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-3].minor.yy326, NULL, TK_NOTNULL);}
+ yymsp[-3].minor.yy326 = yylhsminor.yy326;
break;
- case 213: /* expr ::= expr LT expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_LT);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 216: /* expr ::= expr LT expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_LT);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 214: /* expr ::= expr GT expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_GT);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 217: /* expr ::= expr GT expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_GT);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 215: /* expr ::= expr LE expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_LE);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 218: /* expr ::= expr LE expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_LE);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 216: /* expr ::= expr GE expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_GE);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 219: /* expr ::= expr GE expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_GE);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 217: /* expr ::= expr NE expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_NE);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 220: /* expr ::= expr NE expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_NE);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 218: /* expr ::= expr EQ expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_EQ);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 221: /* expr ::= expr EQ expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_EQ);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 219: /* expr ::= expr AND expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_AND);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 222: /* expr ::= expr AND expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_AND);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 220: /* expr ::= expr OR expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_OR); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 223: /* expr ::= expr OR expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_OR); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 221: /* expr ::= expr PLUS expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_PLUS); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 224: /* expr ::= expr PLUS expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_PLUS); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 222: /* expr ::= expr MINUS expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_MINUS); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 225: /* expr ::= expr MINUS expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_MINUS); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 223: /* expr ::= expr STAR expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_STAR); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 226: /* expr ::= expr STAR expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_STAR); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 224: /* expr ::= expr SLASH expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_DIVIDE);}
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 227: /* expr ::= expr SLASH expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_DIVIDE);}
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 225: /* expr ::= expr REM expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_REM); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 228: /* expr ::= expr REM expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_REM); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 226: /* expr ::= expr LIKE expr */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-2].minor.yy50, yymsp[0].minor.yy50, TK_LIKE); }
- yymsp[-2].minor.yy50 = yylhsminor.yy50;
+ case 229: /* expr ::= expr LIKE expr */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-2].minor.yy326, yymsp[0].minor.yy326, TK_LIKE); }
+ yymsp[-2].minor.yy326 = yylhsminor.yy326;
break;
- case 227: /* expr ::= expr IN LP exprlist RP */
-{yylhsminor.yy50 = tSqlExprCreate(yymsp[-4].minor.yy50, (tSQLExpr*)yymsp[-1].minor.yy178, TK_IN); }
- yymsp[-4].minor.yy50 = yylhsminor.yy50;
+ case 230: /* expr ::= expr IN LP exprlist RP */
+{yylhsminor.yy326 = tSqlExprCreate(yymsp[-4].minor.yy326, (tSQLExpr*)yymsp[-1].minor.yy522, TK_IN); }
+ yymsp[-4].minor.yy326 = yylhsminor.yy326;
break;
- case 228: /* exprlist ::= exprlist COMMA expritem */
-{yylhsminor.yy178 = tSqlExprListAppend(yymsp[-2].minor.yy178,yymsp[0].minor.yy50,0, 0);}
- yymsp[-2].minor.yy178 = yylhsminor.yy178;
+ case 231: /* exprlist ::= exprlist COMMA expritem */
+{yylhsminor.yy522 = tSqlExprListAppend(yymsp[-2].minor.yy522,yymsp[0].minor.yy326,0, 0);}
+ yymsp[-2].minor.yy522 = yylhsminor.yy522;
break;
- case 229: /* exprlist ::= expritem */
-{yylhsminor.yy178 = tSqlExprListAppend(0,yymsp[0].minor.yy50,0, 0);}
- yymsp[0].minor.yy178 = yylhsminor.yy178;
+ case 232: /* exprlist ::= expritem */
+{yylhsminor.yy522 = tSqlExprListAppend(0,yymsp[0].minor.yy326,0, 0);}
+ yymsp[0].minor.yy522 = yylhsminor.yy522;
break;
- case 230: /* expritem ::= expr */
-{yylhsminor.yy50 = yymsp[0].minor.yy50;}
- yymsp[0].minor.yy50 = yylhsminor.yy50;
+ case 233: /* expritem ::= expr */
+{yylhsminor.yy326 = yymsp[0].minor.yy326;}
+ yymsp[0].minor.yy326 = yylhsminor.yy326;
break;
- case 232: /* cmd ::= RESET QUERY CACHE */
+ case 235: /* cmd ::= RESET QUERY CACHE */
{ setDCLSQLElems(pInfo, TSDB_SQL_RESET_CACHE, 0);}
break;
- case 233: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
+ case 236: /* cmd ::= ALTER TABLE ids cpxName ADD COLUMN columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy221, NULL, TSDB_ALTER_TABLE_ADD_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy247, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 234: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
+ case 237: /* cmd ::= ALTER TABLE ids cpxName DROP COLUMN ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
toTSDBType(yymsp[0].minor.yy0.type);
SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 235: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
+ case 238: /* cmd ::= ALTER TABLE ids cpxName ADD TAG columnlist */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy221, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy247, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 236: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
+ case 239: /* cmd ::= ALTER TABLE ids cpxName DROP TAG ids */
{
yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
toTSDBType(yymsp[0].minor.yy0.type);
SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 237: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
+ case 240: /* cmd ::= ALTER TABLE ids cpxName CHANGE TAG ids ids */
{
yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
@@ -2918,29 +2958,79 @@ static void yy_reduce(
toTSDBType(yymsp[0].minor.yy0.type);
A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 238: /* cmd ::= ALTER TABLE ids cpxName SET TAG ids EQ tagitem */
+ case 241: /* 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.yy106, -1);
+ A = tVariantListAppend(A, &yymsp[0].minor.yy378, -1);
- SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL);
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-6].minor.yy0, NULL, A, TSDB_ALTER_TABLE_UPDATE_TAG_VAL, -1);
setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
}
break;
- case 239: /* cmd ::= KILL CONNECTION INTEGER */
+ case 242: /* cmd ::= ALTER STABLE ids cpxName ADD COLUMN columnlist */
+{
+ yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy247, NULL, TSDB_ALTER_TABLE_ADD_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+ break;
+ case 243: /* cmd ::= ALTER STABLE ids cpxName DROP COLUMN ids */
+{
+ yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
+
+ toTSDBType(yymsp[0].minor.yy0.type);
+ SArray* K = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, K, TSDB_ALTER_TABLE_DROP_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+ break;
+ case 244: /* cmd ::= ALTER STABLE ids cpxName ADD TAG columnlist */
+{
+ yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, yymsp[0].minor.yy247, NULL, TSDB_ALTER_TABLE_ADD_TAG_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+ break;
+ case 245: /* cmd ::= ALTER STABLE ids cpxName DROP TAG ids */
+{
+ yymsp[-4].minor.yy0.n += yymsp[-3].minor.yy0.n;
+
+ toTSDBType(yymsp[0].minor.yy0.type);
+ SArray* A = tVariantListAppendToken(NULL, &yymsp[0].minor.yy0, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-4].minor.yy0, NULL, A, TSDB_ALTER_TABLE_DROP_TAG_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+ break;
+ case 246: /* cmd ::= ALTER STABLE ids cpxName CHANGE TAG ids ids */
+{
+ yymsp[-5].minor.yy0.n += yymsp[-4].minor.yy0.n;
+
+ toTSDBType(yymsp[-1].minor.yy0.type);
+ SArray* A = tVariantListAppendToken(NULL, &yymsp[-1].minor.yy0, -1);
+
+ toTSDBType(yymsp[0].minor.yy0.type);
+ A = tVariantListAppendToken(A, &yymsp[0].minor.yy0, -1);
+
+ SAlterTableSQL* pAlterTable = tAlterTableSqlElems(&yymsp[-5].minor.yy0, NULL, A, TSDB_ALTER_TABLE_CHANGE_TAG_COLUMN, TSDB_SUPER_TABLE);
+ setSqlInfo(pInfo, pAlterTable, NULL, TSDB_SQL_ALTER_TABLE);
+}
+ break;
+ case 247: /* cmd ::= KILL CONNECTION INTEGER */
{setKillSql(pInfo, TSDB_SQL_KILL_CONNECTION, &yymsp[0].minor.yy0);}
break;
- case 240: /* cmd ::= KILL STREAM INTEGER COLON INTEGER */
+ case 248: /* 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 241: /* cmd ::= KILL QUERY INTEGER COLON INTEGER */
+ case 249: /* 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:
diff --git a/src/query/tests/percentileTest.cpp b/src/query/tests/percentileTest.cpp
index f1fc458501..f2b457e7dd 100644
--- a/src/query/tests/percentileTest.cpp
+++ b/src/query/tests/percentileTest.cpp
@@ -43,7 +43,7 @@ tMemBucket *createDoubleDataBucket(int32_t start, int32_t end) {
}
tMemBucket *createUnsignedDataBucket(int32_t start, int32_t end, int32_t type) {
- tMemBucket *pBucket = tMemBucketCreate(tDataTypeDesc[type].nSize, type, start, end);
+ tMemBucket *pBucket = tMemBucketCreate(tDataTypes[type].bytes, type, start, end);
for (int32_t i = start; i <= end; ++i) {
uint64_t k = i;
int32_t ret = tMemBucketPut(pBucket, &k, 1);
diff --git a/src/sync/src/syncMain.c b/src/sync/src/syncMain.c
index 98100fbdd8..1981196525 100644
--- a/src/sync/src/syncMain.c
+++ b/src/sync/src/syncMain.c
@@ -568,7 +568,7 @@ static void syncStartCheckPeerConn(SSyncPeer *pPeer) {
int32_t ret = strcmp(pPeer->fqdn, tsNodeFqdn);
if (pPeer->nodeId == 0 || (ret > 0) || (ret == 0 && pPeer->port > tsSyncPort)) {
int32_t checkMs = 100 + (pNode->vgId * 10) % 100;
- if (pNode->vgId > 1) checkMs = tsStatusInterval * 1000 + checkMs;
+
sDebug("%s, check peer connection after %d ms", pPeer->id, checkMs);
taosTmrReset(syncCheckPeerConnection, checkMs, (void *)pPeer->rid, tsSyncTmrCtrl, &pPeer->timer);
}
diff --git a/src/sync/src/syncRetrieve.c b/src/sync/src/syncRetrieve.c
index 153886102e..cb2379583f 100644
--- a/src/sync/src/syncRetrieve.c
+++ b/src/sync/src/syncRetrieve.c
@@ -475,7 +475,8 @@ void *syncRetrieveData(void *param) {
SSyncNode *pNode = pPeer->pSyncNode;
taosBlockSIGPIPE();
- sInfo("%s, start to retrieve data, sstatus:%s", pPeer->id, syncStatus[pPeer->sstatus]);
+ sInfo("%s, start to retrieve data, sstatus:%s, numOfRetrieves:%d", pPeer->id, syncStatus[pPeer->sstatus],
+ pPeer->numOfRetrieves);
if (pNode->notifyFlowCtrl) (*pNode->notifyFlowCtrl)(pNode->vgId, pPeer->numOfRetrieves);
@@ -497,9 +498,11 @@ void *syncRetrieveData(void *param) {
pPeer->numOfRetrieves++;
} else {
pPeer->numOfRetrieves = 0;
- if (pNode->notifyFlowCtrl) (*pNode->notifyFlowCtrl)(pNode->vgId, 0);
+ // if (pNode->notifyFlowCtrl) (*pNode->notifyFlowCtrl)(pNode->vgId, 0);
}
+ if (pNode->notifyFlowCtrl) (*pNode->notifyFlowCtrl)(pNode->vgId, 0);
+
pPeer->fileChanged = 0;
taosClose(pPeer->syncFd);
diff --git a/src/tsdb/src/tsdbMeta.c b/src/tsdb/src/tsdbMeta.c
index 7b08178f49..2bc387c3cd 100644
--- a/src/tsdb/src/tsdbMeta.c
+++ b/src/tsdb/src/tsdbMeta.c
@@ -253,7 +253,7 @@ STableCfg *tsdbCreateTableCfgFromMsg(SMDCreateTableMsg *pMsg) {
}
}
if (tsdbTableSetSchema(pCfg, tdGetSchemaFromBuilder(&schemaBuilder), false) < 0) goto _err;
- if (tsdbTableSetName(pCfg, pMsg->tableId, true) < 0) goto _err;
+ if (tsdbTableSetName(pCfg, pMsg->tableFname, true) < 0) goto _err;
if (numOfTags > 0) {
// Decode tag schema
@@ -265,7 +265,7 @@ STableCfg *tsdbCreateTableCfgFromMsg(SMDCreateTableMsg *pMsg) {
}
}
if (tsdbTableSetTagSchema(pCfg, tdGetSchemaFromBuilder(&schemaBuilder), false) < 0) goto _err;
- if (tsdbTableSetSName(pCfg, pMsg->superTableId, true) < 0) goto _err;
+ if (tsdbTableSetSName(pCfg, pMsg->stableFname, true) < 0) goto _err;
if (tsdbTableSetSuperUid(pCfg, htobe64(pMsg->superTableUid)) < 0) goto _err;
int32_t tagDataLen = htonl(pMsg->tagDataLen);
diff --git a/src/tsdb/src/tsdbRWHelper.c b/src/tsdb/src/tsdbRWHelper.c
index b53b8ed5b4..4a44784cc2 100644
--- a/src/tsdb/src/tsdbRWHelper.c
+++ b/src/tsdb/src/tsdbRWHelper.c
@@ -751,8 +751,8 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa
pCompCol->colId = pDataCol->colId;
pCompCol->type = pDataCol->type;
- if (tDataTypeDesc[pDataCol->type].getStatisFunc) {
- (*tDataTypeDesc[pDataCol->type].getStatisFunc)(
+ if (tDataTypes[pDataCol->type].statisFunc) {
+ (*tDataTypes[pDataCol->type].statisFunc)(
pDataCol->pData, rowsToWrite, &(pCompCol->min), &(pCompCol->max), &(pCompCol->sum), &(pCompCol->minIndex),
&(pCompCol->maxIndex), &(pCompCol->numOfNull));
}
@@ -788,7 +788,7 @@ static int tsdbWriteBlockToFile(SRWHelper *pHelper, SFile *pFile, SDataCols *pDa
}
}
- flen = (*(tDataTypeDesc[pDataCol->type].compFunc))((char *)pDataCol->pData, tlen, rowsToWrite, tptr,
+ flen = (*(tDataTypes[pDataCol->type].compFunc))((char *)pDataCol->pData, tlen, rowsToWrite, tptr,
(int32_t)taosTSizeof(pHelper->pBuffer) - lsize, pCfg->compression,
pHelper->compBuffer, (int32_t)taosTSizeof(pHelper->compBuffer));
} else {
@@ -1208,7 +1208,7 @@ static int tsdbCheckAndDecodeColumnData(SDataCol *pDataCol, char *content, int32
// Decode the data
if (comp) {
// // Need to decompress
- int tlen = (*(tDataTypeDesc[pDataCol->type].decompFunc))(content, len - sizeof(TSCKSUM), numOfRows, pDataCol->pData,
+ int tlen = (*(tDataTypes[pDataCol->type].decompFunc))(content, len - sizeof(TSCKSUM), numOfRows, pDataCol->pData,
pDataCol->spaceSize, comp, buffer, bufferSize);
if (tlen <= 0) {
tsdbError("Failed to decompress column, file corrupted, len:%d comp:%d numOfRows:%d maxPoints:%d bufferSize:%d",
diff --git a/src/util/src/tcompare.c b/src/util/src/tcompare.c
index 75ac930723..01e61987c6 100644
--- a/src/util/src/tcompare.c
+++ b/src/util/src/tcompare.c
@@ -1,4 +1,4 @@
-#include "taosdef.h"
+#include "ttype.h"
#include "tcompare.h"
#include "tarray.h"
diff --git a/src/vnode/src/vnodeWrite.c b/src/vnode/src/vnodeWrite.c
index 4b9f59279c..b1df7bc19f 100644
--- a/src/vnode/src/vnodeWrite.c
+++ b/src/vnode/src/vnodeWrite.c
@@ -174,7 +174,7 @@ static int32_t vnodeProcessDropTableMsg(SVnodeObj *pVnode, void *pCont, SRspRet
SMDDropTableMsg *pTable = pCont;
int32_t code = TSDB_CODE_SUCCESS;
- vDebug("vgId:%d, table:%s, start to drop", pVnode->vgId, pTable->tableId);
+ vDebug("vgId:%d, table:%s, start to drop", pVnode->vgId, pTable->tableFname);
STableId tableId = {.uid = htobe64(pTable->uid), .tid = htonl(pTable->tid)};
if (tsdbDropTable(pVnode->tsdb, tableId) < 0) code = terrno;
@@ -197,13 +197,13 @@ static int32_t vnodeProcessDropStableMsg(SVnodeObj *pVnode, void *pCont, SRspRet
SDropSTableMsg *pTable = pCont;
int32_t code = TSDB_CODE_SUCCESS;
- vDebug("vgId:%d, stable:%s, start to drop", pVnode->vgId, pTable->tableId);
+ vDebug("vgId:%d, stable:%s, start to drop", pVnode->vgId, pTable->tableFname);
STableId stableId = {.uid = htobe64(pTable->uid), .tid = -1};
if (tsdbDropTable(pVnode->tsdb, stableId) < 0) code = terrno;
- vDebug("vgId:%d, stable:%s, drop stable result:%s", pVnode->vgId, pTable->tableId, tstrerror(code));
+ vDebug("vgId:%d, stable:%s, drop stable result:%s", pVnode->vgId, pTable->tableFname, tstrerror(code));
return code;
}
@@ -308,7 +308,7 @@ static void vnodeFlowCtrlMsgToWQueue(void *param, void *tmrId) {
if (pVnode->flowctrlLevel <= 0) code = TSDB_CODE_VND_IS_FLOWCTRL;
pWrite->processedCount++;
- if (pWrite->processedCount > 100) {
+ if (pWrite->processedCount >= 100) {
vError("vgId:%d, msg:%p, failed to process since %s, retry:%d", pVnode->vgId, pWrite, tstrerror(code),
pWrite->processedCount);
pWrite->processedCount = 1;
diff --git a/tests/examples/JDBC/taosdemo/readme.md b/tests/examples/JDBC/taosdemo/readme.md
index a4b6e29769..123affc71a 100644
--- a/tests/examples/JDBC/taosdemo/readme.md
+++ b/tests/examples/JDBC/taosdemo/readme.md
@@ -1,3 +1,6 @@
+
+
需求:
1. 可以读lowa的配置文件
-2. 支持对JNI方式和Restful方式的taos-driver
\ No newline at end of file
+2. 支持JDBC-JNI和JDBC-restful
+3. 读取配置文件,持续执行查询
\ No newline at end of file
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
index b9a22a1ef7..4dc49fd37b 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
@@ -19,14 +19,13 @@ import java.util.Map;
public class TaosDemoApplication {
- private static Logger logger = Logger.getLogger(TaosDemoApplication.class);
+ private static final Logger logger = Logger.getLogger(TaosDemoApplication.class);
public static void main(String[] args) throws IOException {
// 读配置参数
JdbcTaosdemoConfig config = new JdbcTaosdemoConfig(args);
boolean isHelp = Arrays.asList(args).contains("--help");
if (isHelp || config.host == null || config.host.isEmpty()) {
-// if (isHelp) {
JdbcTaosdemoConfig.printHelp();
System.exit(0);
}
@@ -75,7 +74,7 @@ public class TaosDemoApplication {
}
}
end = System.currentTimeMillis();
- logger.error(">>> create table time cost : " + (end - start) + " ms.");
+ logger.info(">>> create table time cost : " + (end - start) + " ms.");
/**********************************************************************************/
// 插入
long tableSize = config.numOfTables;
@@ -90,7 +89,7 @@ public class TaosDemoApplication {
// multi threads to insert
int affectedRows = subTableService.insertMultiThreads(superTableMeta, threadSize, tableSize, startTime, gap, config);
end = System.currentTimeMillis();
- logger.error("insert " + affectedRows + " rows, time cost: " + (end - start) + " ms");
+ logger.info("insert " + affectedRows + " rows, time cost: " + (end - start) + " ms");
/**********************************************************************************/
// 删除表
if (config.dropTable) {
@@ -108,5 +107,4 @@ public class TaosDemoApplication {
return startTime;
}
-
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java
index 69bae160f6..421a2dea1f 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java
@@ -21,27 +21,27 @@ public class DatabaseMapperImpl implements DatabaseMapper {
public void createDatabase(String dbname) {
String sql = "create database if not exists " + dbname;
jdbcTemplate.execute(sql);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
}
@Override
public void dropDatabase(String dbname) {
String sql = "drop database if exists " + dbname;
jdbcTemplate.update(sql);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
}
@Override
public void createDatabaseWithParameters(Map map) {
String sql = SqlSpeller.createDatabase(map);
jdbcTemplate.execute(sql);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
}
@Override
public void useDatabase(String dbname) {
String sql = "use " + dbname;
jdbcTemplate.execute(sql);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
}
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java
index e3a6691430..90b0990a2b 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java
@@ -21,14 +21,14 @@ public class SubTableMapperImpl implements SubTableMapper {
@Override
public void createUsingSuperTable(SubTableMeta subTableMeta) {
String sql = SqlSpeller.createTableUsingSuperTable(subTableMeta);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
jdbcTemplate.execute(sql);
}
@Override
public int insertOneTableMultiValues(SubTableValue subTableValue) {
String sql = SqlSpeller.insertOneTableMultiValues(subTableValue);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
int affectRows = 0;
try {
@@ -42,7 +42,7 @@ public class SubTableMapperImpl implements SubTableMapper {
@Override
public int insertOneTableMultiValuesUsingSuperTable(SubTableValue subTableValue) {
String sql = SqlSpeller.insertOneTableMultiValuesUsingSuperTable(subTableValue);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
int affectRows = 0;
try {
@@ -56,7 +56,7 @@ public class SubTableMapperImpl implements SubTableMapper {
@Override
public int insertMultiTableMultiValues(List tables) {
String sql = SqlSpeller.insertMultiSubTableMultiValues(tables);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
int affectRows = 0;
try {
affectRows = jdbcTemplate.update(sql);
@@ -69,7 +69,7 @@ public class SubTableMapperImpl implements SubTableMapper {
@Override
public int insertMultiTableMultiValuesUsingSuperTable(List tables) {
String sql = SqlSpeller.insertMultiTableMultiValuesUsingSuperTable(tables);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
int affectRows = 0;
try {
affectRows = jdbcTemplate.update(sql);
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java
index a293de5100..efa9a1f39e 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java
@@ -18,14 +18,14 @@ public class SuperTableMapperImpl implements SuperTableMapper {
@Override
public void createSuperTable(SuperTableMeta tableMetadata) {
String sql = SqlSpeller.createSuperTable(tableMetadata);
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
jdbcTemplate.execute(sql);
}
@Override
public void dropSuperTable(String database, String name) {
String sql = "drop table if exists " + database + "." + name;
- logger.info("SQL >>> " + sql);
+ logger.debug("SQL >>> " + sql);
jdbcTemplate.execute(sql);
}
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java
index 77415619f0..b049fbe197 100644
--- a/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java
+++ b/tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java
@@ -1,43 +1,49 @@
package com.taosdata.taosdemo.dao;
-import com.taosdata.taosdemo.dao.TableMapper;
import com.taosdata.taosdemo.domain.TableMeta;
import com.taosdata.taosdemo.domain.TableValue;
import com.taosdata.taosdemo.utils.SqlSpeller;
+import org.apache.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class TableMapperImpl implements TableMapper {
+ private static final Logger logger = Logger.getLogger(TableMapperImpl.class);
private JdbcTemplate template;
@Override
public void create(TableMeta tableMeta) {
String sql = SqlSpeller.createTable(tableMeta);
+ logger.debug("SQL >>> " + sql);
template.execute(sql);
}
@Override
public int insertOneTableMultiValues(TableValue values) {
String sql = SqlSpeller.insertOneTableMultiValues(values);
+ logger.debug("SQL >>> " + sql);
return template.update(sql);
}
@Override
public int insertOneTableMultiValuesWithColumns(TableValue values) {
String sql = SqlSpeller.insertOneTableMultiValuesWithColumns(values);
+ logger.debug("SQL >>> " + sql);
return template.update(sql);
}
@Override
public int insertMultiTableMultiValues(List tables) {
String sql = SqlSpeller.insertMultiTableMultiValues(tables);
+ logger.debug("SQL >>> " + sql);
return template.update(sql);
}
@Override
public int insertMultiTableMultiValuesWithColumns(List tables) {
String sql = SqlSpeller.insertMultiTableMultiValuesWithColumns(tables);
+ logger.debug("SQL >>> " + sql);
return template.update(sql);
}
}
diff --git a/tests/examples/JDBC/taosdemo/src/main/resources/log4j.properties b/tests/examples/JDBC/taosdemo/src/main/resources/log4j.properties
index b2a9586ea7..352545854d 100644
--- a/tests/examples/JDBC/taosdemo/src/main/resources/log4j.properties
+++ b/tests/examples/JDBC/taosdemo/src/main/resources/log4j.properties
@@ -1,5 +1,5 @@
### 设置###
-log4j.rootLogger=error,stdout
+log4j.rootLogger=info,stdout
### 输出信息到控制抬 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
diff --git a/tests/examples/c/asyncdemo.c b/tests/examples/c/asyncdemo.c
index c6cc89b31d..be3a908f11 100644
--- a/tests/examples/c/asyncdemo.c
+++ b/tests/examples/c/asyncdemo.c
@@ -261,9 +261,6 @@ void taos_select_call_back(void *param, TAOS_RES *tres, int code)
if (code == 0 && tres) {
// asynchronous API to fetch a batch of records
taos_fetch_rows_a(tres, taos_retrieve_call_back, pTable);
-
- // taos_fetch_row_a is a less efficient way to retrieve records since it call back app for every row
- // taos_fetch_row_a(tres, taos_fetch_row_call_back, pTable);
}
else {
printf("%s select failed, code:%d\n", pTable->name, code);
diff --git a/tests/examples/c/demo.c b/tests/examples/c/demo.c
index 54e81d33b9..9cbcee45a2 100644
--- a/tests/examples/c/demo.c
+++ b/tests/examples/c/demo.c
@@ -93,15 +93,15 @@ void Test(TAOS *taos, char *qstr, int index) {
// if (taos_query(taos, qstr)) {
// printf("insert row: %i, reason:%s\n", i, taos_errstr(taos));
// }
- TAOS_RES *result = taos_query(taos, qstr);
- if (result) {
+ TAOS_RES *result1 = taos_query(taos, qstr);
+ if (result1) {
printf("insert row: %i\n", i);
} else {
printf("failed to insert row: %i, reason:%s\n", i, "null result"/*taos_errstr(result)*/);
- taos_free_result(result);
+ taos_free_result(result1);
exit(1);
}
- taos_free_result(result);
+ taos_free_result(result1);
}
printf("success to insert rows, total %d rows\n", i);
diff --git a/tests/perftest-scripts/perftest-taosdemo.sh b/tests/perftest-scripts/perftest-taosdemo.sh
index ae9e8dd737..dffa251ef7 100755
--- a/tests/perftest-scripts/perftest-taosdemo.sh
+++ b/tests/perftest-scripts/perftest-taosdemo.sh
@@ -16,6 +16,9 @@ fi
logDir=`grep "^logDir" /etc/taos/taos.cfg | awk '{print $2}'`
dataDir=`grep "^dataDir" /etc/taos/taos.cfg | awk '{print $2}'`
+[ -z "$logDir" ] && logDir="/var/log/taos"
+[ -z "$dataDir" ] && dataDir="/var/lib/taos"
+
# Coloured Echoes
function red_echo { echo -e "\033[31m$@\033[0m"; }
function green_echo { echo -e "\033[32m$@\033[0m"; }
diff --git a/tests/perftest-scripts/perftest-tsdb-compare-13d.sh b/tests/perftest-scripts/perftest-tsdb-compare-13d.sh
index 110ab9e5fa..3f56a048e9 100755
--- a/tests/perftest-scripts/perftest-tsdb-compare-13d.sh
+++ b/tests/perftest-scripts/perftest-tsdb-compare-13d.sh
@@ -16,6 +16,9 @@ fi
logDir=`grep "^logDir" /etc/taos/taos.cfg | awk '{print $2}'`
dataDir=`grep "^dataDir" /etc/taos/taos.cfg | awk '{print $2}'`
+[ -z "$logDir" ] && logDir="/var/log/taos"
+[ -z "$dataDir" ] && dataDir="/var/lib/taos"
+
# Coloured Echoes #
function red_echo { echo -e "\033[31m$@\033[0m"; } #
function green_echo { echo -e "\033[32m$@\033[0m"; } #
diff --git a/tests/perftest-scripts/perftest-tsdb-compare-1d.sh b/tests/perftest-scripts/perftest-tsdb-compare-1d.sh
index 9e8bc697bc..29e72d7b3f 100755
--- a/tests/perftest-scripts/perftest-tsdb-compare-1d.sh
+++ b/tests/perftest-scripts/perftest-tsdb-compare-1d.sh
@@ -16,6 +16,9 @@ fi
logDir=`grep "^logDir" /etc/taos/taos.cfg | awk '{print $2}'`
dataDir=`grep "^dataDir" /etc/taos/taos.cfg | awk '{print $2}'`
+[ -z "$logDir" ] && logDir="/var/log/taos"
+[ -z "$dataDir" ] && dataDir="/var/lib/taos"
+
# Coloured Echoes #
function red_echo { echo -e "\033[31m$@\033[0m"; } #
function green_echo { echo -e "\033[32m$@\033[0m"; } #
diff --git a/tests/perftest-scripts/perftest-tsdb-compare-var10k-int100s.sh b/tests/perftest-scripts/perftest-tsdb-compare-var10k-int100s.sh
index 5fc5b9d03a..3bc63b831b 100755
--- a/tests/perftest-scripts/perftest-tsdb-compare-var10k-int100s.sh
+++ b/tests/perftest-scripts/perftest-tsdb-compare-var10k-int100s.sh
@@ -16,6 +16,9 @@ fi
logDir=`grep "^logDir" /etc/taos/taos.cfg | awk '{print $2}'`
dataDir=`grep "^dataDir" /etc/taos/taos.cfg | awk '{print $2}'`
+[ -z "$logDir" ] && logDir="/var/log/taos"
+[ -z "$dataDir" ] && dataDir="/var/lib/taos"
+
# Coloured Echoes #
function red_echo { echo -e "\033[31m$@\033[0m"; } #
function green_echo { echo -e "\033[32m$@\033[0m"; } #
diff --git a/tests/perftest-scripts/perftest-tsdb-compare-var10k-int10s.sh b/tests/perftest-scripts/perftest-tsdb-compare-var10k-int10s.sh
index bafa04f174..566479c967 100755
--- a/tests/perftest-scripts/perftest-tsdb-compare-var10k-int10s.sh
+++ b/tests/perftest-scripts/perftest-tsdb-compare-var10k-int10s.sh
@@ -16,6 +16,9 @@ fi
logDir=`grep "^logDir" /etc/taos/taos.cfg | awk '{print $2}'`
dataDir=`grep "^dataDir" /etc/taos/taos.cfg | awk '{print $2}'`
+[ -z "$logDir" ] && logDir="/var/log/taos"
+[ -z "$dataDir" ] && dataDir="/var/lib/taos"
+
# Coloured Echoes #
function red_echo { echo -e "\033[31m$@\033[0m"; } #
function green_echo { echo -e "\033[32m$@\033[0m"; } #
diff --git a/tests/pytest/cluster/clusterEnvSetup/Dockerfile b/tests/pytest/cluster/clusterEnvSetup/Dockerfile
new file mode 100644
index 0000000000..b699e8a23f
--- /dev/null
+++ b/tests/pytest/cluster/clusterEnvSetup/Dockerfile
@@ -0,0 +1,36 @@
+FROM ubuntu:latest AS builder
+
+ARG PACKAGE=TDengine-server-1.6.5.10-Linux-x64.tar.gz
+ARG EXTRACTDIR=TDengine-enterprise-server
+ARG CONTENT=taos.tar.gz
+
+WORKDIR /root
+
+COPY ${PACKAGE} .
+
+RUN tar -zxf ${PACKAGE}
+RUN mv ${EXTRACTDIR}/driver ./lib
+RUN tar -zxf ${EXTRACTDIR}/${CONTENT}
+
+FROM ubuntu:latest
+
+WORKDIR /root
+
+RUN apt-get update
+RUN apt-get install -y vim tmux net-tools
+RUN echo 'alias ll="ls -l --color=auto"' >> /root/.bashrc
+
+COPY --from=builder /root/bin/taosd /usr/bin
+COPY --from=builder /root/bin/taos /usr/bin
+COPY --from=builder /root/cfg/taos.cfg /etc/taos/
+COPY --from=builder /root/lib/libtaos.so.* /usr/lib/libtaos.so.1
+
+ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib"
+ENV LC_CTYPE=en_US.UTF-8
+ENV LANG=en_US.UTF-8
+
+EXPOSE 6030-6041/tcp 6060/tcp 6030-6039/udp
+
+# VOLUME [ "/var/lib/taos", "/var/log/taos", "/etc/taos" ]
+
+CMD [ "bash" ]
diff --git a/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh b/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh
new file mode 100755
index 0000000000..e0788ef329
--- /dev/null
+++ b/tests/pytest/cluster/clusterEnvSetup/buildClusterEnv.sh
@@ -0,0 +1,102 @@
+#!/bin/bash
+echo "Executing buildClusterEnv.sh"
+DOCKER_DIR=/data
+CURR_DIR=`pwd`
+
+if [ $# != 4 ]; then
+ echo "argument list need input : "
+ echo " -n numOfNodes"
+ echo " -v version"
+ exit 1
+fi
+
+NUM_OF_NODES=
+VERSION=
+while getopts "n:v:" arg
+do
+ case $arg in
+ n)
+ NUM_OF_NODES=$OPTARG
+ ;;
+ v)
+ VERSION=$OPTARG
+ ;;
+ ?)
+ echo "unkonwn argument"
+ ;;
+ esac
+done
+
+
+function createDIR {
+ for i in {1.. $2}
+ do
+ mkdir -p /data/node$i/data
+ mkdir -p /data/node$i/log
+ mkdir -p /data/node$i/cfg
+ done
+}
+
+function cleanEnv {
+ for i in {1..3}
+ do
+ echo /data/node$i/data/*
+ rm -rf /data/node$i/data/*
+ echo /data/node$i/log/*
+ rm -rf /data/node$i/log/*
+ done
+}
+
+function prepareBuild {
+
+ if [ -d $CURR_DIR/../../../../release ]; then
+ echo release exists
+ rm -rf $CURR_DIR/../../../../release/*
+ fi
+
+ cd $CURR_DIR/../../../../packaging
+ ./release.sh -v edge -n $VERSION >> /dev/null
+
+ if [ ! -f $CURR_DIR/../../../../release/TDengine-server-$VERSION-Linux-x64.tar.gz ]; then
+ echo "no TDengine install package found"
+ exit 1
+ fi
+
+ cd $CURR_DIR/../../../../release
+ mv TDengine-server-$VERSION-Linux-x64.tar.gz $DOCKER_DIR
+
+ rm -rf $DOCKER_DIR/*.yml
+ cd $CURR_DIR
+
+ cp docker-compose.yml $DOCKER_DIR
+ cp Dockerfile $DOCKER_DIR
+
+ if [ $NUM_OF_NODES -eq 4 ]; then
+ cp ../node4.yml $DOCKER_DIR
+ fi
+
+ if [ $NUM_OF_NODES -eq 5 ]; then
+ cp ../node5.yml $DOCKER_DIR
+ fi
+}
+
+function clusterUp {
+
+ cd $DOCKER_DIR
+
+ if [ $NUM_OF_NODES -eq 3 ]; then
+ PACKAGE=TDengine-server-$VERSION-Linux-x64.tar.gz DIR=TDengine-server-$VERSION docker-compose up -d
+ fi
+
+ if [ $NUM_OF_NODES -eq 4 ]; then
+ PACKAGE=TDengine-server-$VERSION-Linux-x64.tar.gz DIR=TDengine-server-$VERSION docker-compose -f docker-compose.yml -f node4.yml up -d
+ fi
+
+ if [ $NUM_OF_NODES -eq 5 ]; then
+ PACKAGE=TDengine-server-$VERSION-Linux-x64.tar.gz DIR=TDengine-server-$VERSION docker-compose -f docker-compose.yml -f node4.yml -f node5.yml up -d
+ fi
+}
+
+cleanEnv
+# prepareBuild
+# clusterUp
\ No newline at end of file
diff --git a/tests/pytest/cluster/clusterEnvSetup/docker-compose.yml b/tests/pytest/cluster/clusterEnvSetup/docker-compose.yml
new file mode 100644
index 0000000000..c8498b36d4
--- /dev/null
+++ b/tests/pytest/cluster/clusterEnvSetup/docker-compose.yml
@@ -0,0 +1,127 @@
+version: '3.7'
+
+services:
+ td2.0-node1:
+ build:
+ context: .
+ args:
+ - PACKAGE=${PACKAGE}
+ - EXTRACTDIR=${DIR}
+ image: 'tdengine:2.0.13.1'
+ container_name: 'td2.0-node1'
+ cap_add:
+ - ALL
+ stdin_open: true
+ tty: true
+ environment:
+ TZ: "Asia/Shanghai"
+ command: >
+ sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
+ echo $TZ > /etc/timezone &&
+ exec my-main-application"
+ volumes:
+ # bind data directory
+ - type: bind
+ source: /data/node1/data
+ target: /var/lib/taos
+ # bind log directory
+ - type: bind
+ source: /data/node1/log
+ target: /var/log/taos
+ # bind configuration
+ - type: bind
+ source: /data/node1/cfg
+ target: /etc/taos
+ - type: bind
+ source: /data
+ target: /root
+ networks:
+ taos_update_net:
+ ipv4_address: 172.27.0.7
+ command: taosd
+
+ td2.0-node2:
+ build:
+ context: .
+ args:
+ - PACKAGE=${PACKAGE}
+ - EXTRACTDIR=${DIR}
+ image: 'tdengine:2.0.13.1'
+ container_name: 'td2.0-node2'
+ cap_add:
+ - ALL
+ stdin_open: true
+ tty: true
+ environment:
+ TZ: "Asia/Shanghai"
+ command: >
+ sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
+ echo $TZ > /etc/timezone &&
+ exec my-main-application"
+ volumes:
+ # bind data directory
+ - type: bind
+ source: /data/node2/data
+ target: /var/lib/taos
+ # bind log directory
+ - type: bind
+ source: /data/node2/log
+ target: /var/log/taos
+ # bind configuration
+ - type: bind
+ source: /data/node2/cfg
+ target: /etc/taos
+ - type: bind
+ source: /data
+ target: /root
+ networks:
+ taos_update_net:
+ ipv4_address: 172.27.0.8
+ command: taosd
+
+ td2.0-node3:
+ build:
+ context: .
+ args:
+ - PACKAGE=${PACKAGE}
+ - EXTRACTDIR=${DIR}
+ image: 'tdengine:2.0.13.1'
+ container_name: 'td2.0-node3'
+ cap_add:
+ - ALL
+ stdin_open: true
+ tty: true
+ environment:
+ TZ: "Asia/Shanghai"
+ command: >
+ sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
+ echo $TZ > /etc/timezone &&
+ exec my-main-application"
+ volumes:
+ # bind data directory
+ - type: bind
+ source: /data/node3/data
+ target: /var/lib/taos
+ # bind log directory
+ - type: bind
+ source: /data/node3/log
+ target: /var/log/taos
+ # bind configuration
+ - type: bind
+ source: /data/node3/cfg
+ target: /etc/taos
+ - type: bind
+ source: /data
+ target: /root
+ networks:
+ taos_update_net:
+ ipv4_address: 172.27.0.9
+ command: taosd
+
+networks:
+ taos_update_net:
+# external: true
+ ipam:
+ driver: default
+ config:
+ - subnet: "172.27.0.0/24"
diff --git a/tests/pytest/cluster/clusterEnvSetup/node4.yml b/tests/pytest/cluster/clusterEnvSetup/node4.yml
new file mode 100644
index 0000000000..542dc4cac1
--- /dev/null
+++ b/tests/pytest/cluster/clusterEnvSetup/node4.yml
@@ -0,0 +1,41 @@
+version: '3.7'
+
+services:
+ td2.0-node4:
+ build:
+ context: .
+ args:
+ - PACKAGE=${PACKAGE}
+ - EXTRACTDIR=${DIR}
+ image: 'tdengine:2.0.13.1'
+ container_name: 'td2.0-node4'
+ cap_add:
+ - ALL
+ stdin_open: true
+ tty: true
+ environment:
+ TZ: "Asia/Shanghai"
+ command: >
+ sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
+ echo $TZ > /etc/timezone &&
+ exec my-main-application"
+ volumes:
+ # bind data directory
+ - type: bind
+ source: /data/node4/data
+ target: /var/lib/taos
+ # bind log directory
+ - type: bind
+ source: /data/node4/log
+ target: /var/log/taos
+ # bind configuration
+ - type: bind
+ source: /data/node4/cfg
+ target: /etc/taos
+ - type: bind
+ source: /data
+ target: /root
+ networks:
+ taos_update_net:
+ ipv4_address: 172.27.0.10
+ command: taosd
\ No newline at end of file
diff --git a/tests/pytest/cluster/clusterEnvSetup/node5.yml b/tests/pytest/cluster/clusterEnvSetup/node5.yml
new file mode 100644
index 0000000000..832cc65e08
--- /dev/null
+++ b/tests/pytest/cluster/clusterEnvSetup/node5.yml
@@ -0,0 +1,41 @@
+version: '3.7'
+
+services:
+ td2.0-node5:
+ build:
+ context: .
+ args:
+ - PACKAGE=${PACKAGE}
+ - EXTRACTDIR=${DIR}
+ image: 'tdengine:2.0.13.1'
+ container_name: 'td2.0-node5'
+ cap_add:
+ - ALL
+ stdin_open: true
+ tty: true
+ environment:
+ TZ: "Asia/Shanghai"
+ command: >
+ sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
+ echo $TZ > /etc/timezone &&
+ exec my-main-application"
+ volumes:
+ # bind data directory
+ - type: bind
+ source: /data/node5/data
+ target: /var/lib/taos
+ # bind log directory
+ - type: bind
+ source: /data/node5/log
+ target: /var/log/taos
+ # bind configuration
+ - type: bind
+ source: /data/node5/cfg
+ target: /etc/taos
+ - type: bind
+ source: /data
+ target: /root
+ networks:
+ taos_update_net:
+ ipv4_address: 172.27.0.11
+ command: taosd
\ No newline at end of file
diff --git a/tests/script/general/http/restful_full.sim b/tests/script/general/http/restful_full.sim
index 7e12d30ac9..645ebd2788 100644
--- a/tests/script/general/http/restful_full.sim
+++ b/tests/script/general/http/restful_full.sim
@@ -15,6 +15,7 @@ print =============== step1 - login
system_content curl 127.0.0.1:7111/rest/
print 1-> $system_content
if $system_content != @{"status":"error","code":4357,"desc":"no auth info input"}@ then
+ print $system_content
return -1
endi
diff --git a/tests/script/general/parser/columnValue_unsign.sim b/tests/script/general/parser/columnValue_unsign.sim
index 895b13961e..6e9a37fdb6 100644
--- a/tests/script/general/parser/columnValue_unsign.sim
+++ b/tests/script/general/parser/columnValue_unsign.sim
@@ -111,7 +111,8 @@ if $rows != 1 then
return -1
endi
-if $data00 != 6.000000000 then
+if $data00 != NULL then
+ print expect NULL, actual:$data00
return -1
endi
@@ -167,7 +168,7 @@ if $data01 != 4 then
return -1
endi
-// todo insert more rows and chec it
+## todo insert more rows and chec it
sql select first(a),count(b),last(c),sum(b),spread(d),avg(c),min(b),max(a),stddev(a) from mt_unsigned_1;
if $rows != 1 then
return -1
diff --git a/tests/script/general/parser/function.sim b/tests/script/general/parser/function.sim
index 7d702e989e..133c05c6f4 100644
--- a/tests/script/general/parser/function.sim
+++ b/tests/script/general/parser/function.sim
@@ -382,4 +382,28 @@ sql drop table cars;
sql create table cars(ts timestamp, c int) tags(id int);
sql create table car1 using cars tags(1);
sql create table car2 using cars tags(2);
-sql insert into car1 (ts, c) values (now,1) car2(ts, c) values(now, 2);
\ No newline at end of file
+sql insert into car1 (ts, c) values (now,1) car2(ts, c) values(now, 2);
+
+print ========================> TD-2700
+sql create table t1(ts timestamp, k int);
+sql insert into t1 values(1500000001000, 0);
+sql select sum(k) from t1 interval(1d) sliding(1h);
+if $rows != 24 then
+ return -1
+endi
+
+print ========================> TD-2740
+sql drop table if exists m1;
+sql create table m1(ts timestamp, k int) tags(a int);
+sql create table tm0 using m1 tags(0);
+sql create table tm1 using m1 tags(1);
+sql create table tm2 using m1 tags(2);
+sql create table tm3 using m1 tags(3);
+sql insert into tm0 values('2020-1-1 1:1:1', 0);
+sql insert into tm1 values('2020-1-5 1:1:1', 0);
+sql insert into tm2 values('2020-1-7 1:1:1', 0);
+sql insert into tm3 values('2020-1-1 1:1:1', 0);
+sql select count from m1 where ts='2020-1-1 1:1:1' interval(1h) group by tbname;
+if $rows != 2 then
+ return -1
+endi
\ No newline at end of file
diff --git a/tests/script/general/parser/join.sim b/tests/script/general/parser/join.sim
index d18a3d7676..56f115051c 100644
--- a/tests/script/general/parser/join.sim
+++ b/tests/script/general/parser/join.sim
@@ -415,6 +415,7 @@ sql select count(join_mt0.c1), sum(join_mt1.c2), first(join_mt0.c5), last(join_m
$val = 100
if $rows != $val then
+ print $rows
return -1
endi
@@ -514,4 +515,4 @@ sql drop table tm2;
sql select count(*) from m1, m2 where m1.ts=m2.ts and m1.b=m2.a;
sql drop database ux1;
-system sh/exec.sh -n dnode1 -s stop -x SIGINT
\ No newline at end of file
+system sh/exec.sh -n dnode1 -s stop -x SIGINT
diff --git a/tests/script/general/parser/testSuite.sim b/tests/script/general/parser/testSuite.sim
index 2d77cb15d2..90cccb80e5 100644
--- a/tests/script/general/parser/testSuite.sim
+++ b/tests/script/general/parser/testSuite.sim
@@ -1,64 +1,64 @@
-#run general/parser/alter.sim
-#sleep 100
-#run general/parser/alter1.sim
-#sleep 100
-#run general/parser/alter_stable.sim
-#sleep 100
-#run general/parser/auto_create_tb.sim
-#sleep 100
-#run general/parser/auto_create_tb_drop_tb.sim
-#sleep 100
-#run general/parser/col_arithmetic_operation.sim
-#sleep 100
-#run general/parser/columnValue.sim
-#sleep 100
-#run general/parser/commit.sim
-#sleep 100
-#run general/parser/create_db.sim
-#sleep 100
-#run general/parser/create_mt.sim
-#sleep 100
-#run general/parser/create_tb.sim
-#sleep 100
-#run general/parser/dbtbnameValidate.sim
-#sleep 100
-#run general/parser/fill.sim
-#sleep 100
-#run general/parser/fill_stb.sim
-#sleep 100
-##run general/parser/fill_us.sim #
-#sleep 100
-#run general/parser/first_last.sim
-#sleep 100
-#run general/parser/import_commit1.sim
-#sleep 100
-#run general/parser/import_commit2.sim
-#sleep 100
-#run general/parser/import_commit3.sim
-#sleep 100
-##run general/parser/import_file.sim
-#sleep 100
-#run general/parser/insert_tb.sim
-#sleep 100
-#run general/parser/tags_dynamically_specifiy.sim
-#sleep 100
-#run general/parser/interp.sim
-#sleep 100
-#run general/parser/lastrow.sim
-#sleep 100
-#run general/parser/limit.sim
-#sleep 100
-#run general/parser/limit1.sim
-#sleep 100
-#run general/parser/limit1_tblocks100.sim
-#sleep 100
-#run general/parser/limit2.sim
-#sleep 100
-#run general/parser/mixed_blocks.sim
-#sleep 100
-#run general/parser/nchar.sim
-#sleep 100
-#run general/parser/null_char.sim
+run general/parser/alter.sim
+sleep 100
+run general/parser/alter1.sim
+sleep 100
+run general/parser/alter_stable.sim
+sleep 100
+run general/parser/auto_create_tb.sim
+sleep 100
+run general/parser/auto_create_tb_drop_tb.sim
+sleep 100
+run general/parser/col_arithmetic_operation.sim
+sleep 100
+run general/parser/columnValue.sim
+sleep 100
+run general/parser/commit.sim
+sleep 100
+run general/parser/create_db.sim
+sleep 100
+run general/parser/create_mt.sim
+sleep 100
+run general/parser/create_tb.sim
+sleep 100
+run general/parser/dbtbnameValidate.sim
+sleep 100
+run general/parser/fill.sim
+sleep 100
+run general/parser/fill_stb.sim
+sleep 100
+#run general/parser/fill_us.sim #
+sleep 100
+run general/parser/first_last.sim
+sleep 100
+run general/parser/import_commit1.sim
+sleep 100
+run general/parser/import_commit2.sim
+sleep 100
+run general/parser/import_commit3.sim
+sleep 100
+#run general/parser/import_file.sim
+sleep 100
+run general/parser/insert_tb.sim
+sleep 100
+run general/parser/tags_dynamically_specifiy.sim
+sleep 100
+run general/parser/interp.sim
+sleep 100
+run general/parser/lastrow.sim
+sleep 100
+run general/parser/limit.sim
+sleep 100
+run general/parser/limit1.sim
+sleep 100
+run general/parser/limit1_tblocks100.sim
+sleep 100
+run general/parser/limit2.sim
+sleep 100
+run general/parser/mixed_blocks.sim
+sleep 100
+run general/parser/nchar.sim
+sleep 100
+run general/parser/null_char.sim
sleep 100
run general/parser/selectResNum.sim
sleep 100