diff --git a/Jenkinsfile2 b/Jenkinsfile2
index 80f6b8e9e7..1920d8da17 100644
--- a/Jenkinsfile2
+++ b/Jenkinsfile2
@@ -173,7 +173,7 @@ def pre_test_build_mac() {
'''
sh '''
cd ${WK}/debug
- cmake .. -DBUILD_TEST=true -DBUILD_HTTPS=false
+ cmake .. -DBUILD_TEST=true -DBUILD_HTTPS=false -DCMAKE_BUILD_TYPE=Release
make -j10
ctest -j10 || exit 7
'''
diff --git a/cmake/cmake.define b/cmake/cmake.define
index e34785cba6..542b4b4489 100644
--- a/cmake/cmake.define
+++ b/cmake/cmake.define
@@ -123,21 +123,39 @@ ELSE ()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-literal-suffix -Werror=return-type -fPIC -gdwarf-2 -g3 -Wformat=2 -Wno-format-nonliteral -Wno-format-truncation -Wno-format-y2k")
ENDIF ()
- IF (TD_INTEL_64 OR TD_INTEL_32)
- ADD_DEFINITIONS("-msse4.2")
- IF("${FMA_SUPPORT}" MATCHES "true")
- MESSAGE(STATUS "fma function supported")
- ADD_DEFINITIONS("-mfma")
- ELSE ()
- MESSAGE(STATUS "fma function NOT supported")
- ENDIF()
+ INCLUDE(CheckCCompilerFlag)
+ IF (TD_ARM_64 OR TD_ARM_32)
+ SET(COMPILER_SUPPORT_SSE42 false)
+ ELSEIF (("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") OR ("${CMAKE_C_COMPILER_ID}" MATCHES "AppleClang"))
+ SET(COMPILER_SUPPORT_SSE42 true)
+ MESSAGE(STATUS "Always enable sse4.2 for Clang/AppleClang")
+ ELSE()
+ CHECK_C_COMPILER_FLAG("-msse4.2" COMPILER_SUPPORT_SSE42)
+ ENDIF()
- IF("${SIMD_SUPPORT}" MATCHES "true")
- ADD_DEFINITIONS("-mavx -mavx2")
- MESSAGE(STATUS "SIMD instructions (AVX/AVX2) is ACTIVATED")
- ELSE()
- MESSAGE(STATUS "SIMD instruction (AVX/AVX2)is NOT ACTIVATED")
+ CHECK_C_COMPILER_FLAG("-mfma" COMPILER_SUPPORT_FMA)
+ CHECK_C_COMPILER_FLAG("-mavx" COMPILER_SUPPORT_AVX)
+ CHECK_C_COMPILER_FLAG("-mavx2" COMPILER_SUPPORT_AVX2)
+
+ IF (COMPILER_SUPPORT_SSE42)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
+ ENDIF()
+ IF (COMPILER_SUPPORT_FMA)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma")
+ ENDIF()
+
+ IF ("${SIMD_SUPPORT}" MATCHES "true")
+ IF (COMPILER_SUPPORT_AVX)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
ENDIF()
- ENDIF ()
+ IF (COMPILER_SUPPORT_AVX2)
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2")
+ ENDIF()
+ MESSAGE(STATUS "SIMD instructions (AVX/AVX2) is ACTIVATED")
+ ENDIF()
ENDIF ()
diff --git a/cmake/cmake.platform b/cmake/cmake.platform
index 711d74fa4c..a4bfcaf609 100644
--- a/cmake/cmake.platform
+++ b/cmake/cmake.platform
@@ -147,7 +147,7 @@ ELSE ()
ENDIF ()
ENDIF ()
-MESSAGE(STATUS "platform arch:" ${PLATFORM_ARCH_STR})
+MESSAGE(STATUS "Platform arch:" ${PLATFORM_ARCH_STR})
MESSAGE("C Compiler: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID}, ${CMAKE_C_COMPILER_VERSION})")
MESSAGE("CXX Compiler: ${CMAKE_CXX_COMPILER} (${CMAKE_C_COMPILER_ID}, ${CMAKE_CXX_COMPILER_VERSION})")
diff --git a/cmake/taosadapter_CMakeLists.txt.in b/cmake/taosadapter_CMakeLists.txt.in
index 75679a8ff5..a47b3b0feb 100644
--- a/cmake/taosadapter_CMakeLists.txt.in
+++ b/cmake/taosadapter_CMakeLists.txt.in
@@ -2,7 +2,7 @@
# taosadapter
ExternalProject_Add(taosadapter
GIT_REPOSITORY https://github.com/taosdata/taosadapter.git
- GIT_TAG 566540d
+ GIT_TAG f0c1753
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taosadapter"
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in
index 2f2dfc5ddc..0cc57d1246 100644
--- a/cmake/taostools_CMakeLists.txt.in
+++ b/cmake/taostools_CMakeLists.txt.in
@@ -2,7 +2,7 @@
# taos-tools
ExternalProject_Add(taos-tools
GIT_REPOSITORY https://github.com/taosdata/taos-tools.git
- GIT_TAG a50de3b
+ GIT_TAG 261fcca
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
diff --git a/docs/en/12-taos-sql/10-function.md b/docs/en/12-taos-sql/10-function.md
index f0daf4b82a..30422ca20c 100644
--- a/docs/en/12-taos-sql/10-function.md
+++ b/docs/en/12-taos-sql/10-function.md
@@ -876,7 +876,8 @@ INTERP(expr)
- The number of rows in the result set of `INTERP` is determined by the parameter `EVERY`. Starting from timestamp1, one interpolation is performed for every time interval specified `EVERY` parameter. The parameter `EVERY` must be an integer, with no quotes, with a time unit of: b(nanosecond), u(microsecond), a(millisecond)), s(second), m(minute), h(hour), d(day), or w(week). For example, `EVERY(500a)` will interpolate every 500 milliseconds.
- Interpolation is performed based on `FILL` parameter.
- `INTERP` can only be used to interpolate in single timeline. So it must be used with `partition by tbname` when it's used on a STable.
-- Pseudo column `_irowts` can be used along with `INTERP` to return the timestamps associated with interpolation points(support after version 3.0.1.4).
+- Pseudocolumn `_irowts` can be used along with `INTERP` to return the timestamps associated with interpolation points(support after version 3.0.1.4).
+- Pseudocolumn `_isfilled` can be used along with `INTERP` to indicate whether the results are original records or data points generated by interpolation algorithm(support after version 3.0.2.1).
### LAST
diff --git a/docs/en/12-taos-sql/14-stream.md b/docs/en/12-taos-sql/14-stream.md
index 17e4e4d1b0..e70e962668 100644
--- a/docs/en/12-taos-sql/14-stream.md
+++ b/docs/en/12-taos-sql/14-stream.md
@@ -10,7 +10,7 @@ Because stream processing is built in to TDengine, you are no longer reliant on
## Create a Stream
```sql
-CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name AS subquery
+CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name SUBTABLE(expression) AS subquery
stream_options: {
TRIGGER [AT_ONCE | WINDOW_CLOSE | MAX_DELAY time]
WATERMARK time
@@ -30,6 +30,8 @@ subquery: SELECT [DISTINCT] select_list
Session windows, state windows, and sliding windows are supported. When you configure a session or state window for a supertable, you must use PARTITION BY TBNAME.
+Subtable Clause defines the naming rules of auto-created subtable, you can see more details in below part: Partitions of Stream.
+
```sql
window_clause: {
SESSION(ts_col, tol_val)
@@ -47,6 +49,47 @@ CREATE STREAM avg_vol_s INTO avg_vol AS
SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname INTERVAL(1m) SLIDING(30s);
```
+## Partitions of Stream
+
+A Stream can process data in multiple partitions. Partition rules can be defined by PARTITION BY clause in stream processing. Each partition will have different timelines and windows, and will be processed separately and be written into different subtables of target supertable.
+
+If a stream is created without PARTITION BY clause, all data will be written into one subtable.
+
+If a stream is created with PARTITION BY clause without SUBTABLE clause, each partition will be given a random name.
+
+If a stream is created with PARTITION BY clause and SUBTABLE clause, the name of each partition will be calculated according to SUBTABLE clause. For example:
+
+```sql
+CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
+```
+
+IN PARTITION clause, 'tbname', representing each subtable name of source supertable, is given alias 'tname'. And 'tname' is used in SUBTABLE clause. In SUBTABLE clause, each auto created subtable will concat 'new-' and source subtable name as their name. Other expressions are also allowed in SUBTABLE clause, but the output type must be varchar.
+
+If the output length exceeds the limitation of TDengine(192), the name will be truncated. If the generated name is occupied by some other table, the creation and writing of the new subtable will be failed.
+
+## Filling history data
+
+Normally a stream does not process data already or being written into source table when it's being creating. But adding FILL_HISTORY 1 as a stream option when creating the stream will allow it to process data written before and while creating the stream. For example:
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
+```
+
+Combining fill_history option and where clause, stream can processing data of specific time range. For example, only process data after a past time. (In this case, 2020-01-30)
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' interval(10s)
+```
+
+As another example, only processing data starting from some past time, and ending at some future time.
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' and ts < '2023-01-01' interval(10s)
+```
+
+If some streams are totally outdated, and you do not want it to monitor or process anymore, those streams can be manually dropped and output data will be still kept.
+
+
## Delete a Stream
```sql
@@ -65,7 +108,7 @@ SHOW STREAMS;
When you create a stream, you can use the TRIGGER parameter to specify triggering conditions for it.
-For non-windowed processing, triggering occurs in real time. For windowed processing, there are three methods of triggering:
+For non-windowed processing, triggering occurs in real time. For windowed processing, there are three methods of triggering,the default value is AT_ONCE:
1. AT_ONCE: triggers on write
diff --git a/docs/en/12-taos-sql/24-show.md b/docs/en/12-taos-sql/24-show.md
index 1bda4a118d..08e8df6252 100644
--- a/docs/en/12-taos-sql/24-show.md
+++ b/docs/en/12-taos-sql/24-show.md
@@ -178,6 +178,77 @@ SHOW TABLE DISTRIBUTED table_name;
Shows how table data is distributed.
+Examples: show table distributed d0\G; Display the block distribution of table `d0` in detailed format.
+
+*************************** 1.row ***************************
+_block_dist: Total_Blocks=[5] Total_Size=[93.65 Kb] Average_size=[18.73 Kb] Compression_Ratio=[23.98 %]
+
+Total_Blocks : Table `d0` contains total 5 blocks
+Total_Size: The total size of all the data blocks in table `d0` is 93.65 KB
+Average_size: The average size of each block is 18.73 KB
+Compression_Ratio: The data compression rate is 23.98%
+
+*************************** 2.row ***************************
+_block_dist: Total_Rows=[20000] Inmem_Rows=[0] MinRows=[3616] MaxRows=[4096] Average_Rows=[4000]
+
+Total_Rows: Table `d0` contains 20,000 rows
+Inmem_Rows: The rows still in memory, i.e. not committed in disk, is 0, i.e. none such rows
+MinRows: The minimum number of rows in a block is 3,616
+MaxRows: The maximum number of rows in a block is 4,096B
+Average_Rows: The average number of rows in a block is 4,000
+
+*************************** 3.row ***************************
+_block_dist: Total_Tables=[1] Total_Files=[2]
+
+Total_Tables: The number of child tables, 1 in this example
+Total_Files: The number of files storing the table's data, 2 in this example
+
+*************************** 4.row ***************************
+_block_dist: --------------------------------------------------------------------------------
+*************************** 5.row ***************************
+_block_dist: 0100 |
+*************************** 6.row ***************************
+_block_dist: 0299 |
+*************************** 7.row ***************************
+_block_dist: 0498 |
+*************************** 8.row ***************************
+_block_dist: 0697 |
+*************************** 9.row ***************************
+_block_dist: 0896 |
+*************************** 10.row ***************************
+_block_dist: 1095 |
+*************************** 11.row ***************************
+_block_dist: 1294 |
+*************************** 12.row ***************************
+_block_dist: 1493 |
+*************************** 13.row ***************************
+_block_dist: 1692 |
+*************************** 14.row ***************************
+_block_dist: 1891 |
+*************************** 15.row ***************************
+_block_dist: 2090 |
+*************************** 16.row ***************************
+_block_dist: 2289 |
+*************************** 17.row ***************************
+_block_dist: 2488 |
+*************************** 18.row ***************************
+_block_dist: 2687 |
+*************************** 19.row ***************************
+_block_dist: 2886 |
+*************************** 20.row ***************************
+_block_dist: 3085 |
+*************************** 21.row ***************************
+_block_dist: 3284 |
+*************************** 22.row ***************************
+_block_dist: 3483 ||||||||||||||||| 1 (20.00%)
+*************************** 23.row ***************************
+_block_dist: 3682 |
+*************************** 24.row ***************************
+_block_dist: 3881 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 4 (80.00%)
+Query OK, 24 row(s) in set (0.002444s)
+
+ The above show the block distribution percentage according to the number of rows in each block. In the above example, `_block_dist: 3483 ||||||||||||||||| 1 (20.00%)` means there is one block whose rows is between 3,483 and 3,681. `_block_dist: 3881 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 4 (80.00%)` means there are 4 blocks whose rows is between 3,881 and 4,096. The number of blocks whose rows fall in other range is zero.
+
## SHOW TAGS
```sql
diff --git a/docs/en/20-third-party/11-kafka.md b/docs/en/20-third-party/11-kafka.md
index 6720af8bf8..3e8f7c295d 100644
--- a/docs/en/20-third-party/11-kafka.md
+++ b/docs/en/20-third-party/11-kafka.md
@@ -76,7 +76,7 @@ Development: false
### Install from source code
```
-git clone https://github.com:taosdata/kafka-connect-tdengine.git
+git clone https://github.com/taosdata/kafka-connect-tdengine.git
cd kafka-connect-tdengine
mvn clean package
unzip -d $CONFLUENT_HOME/share/java/ target/components/packages/taosdata-kafka-connect-tdengine-*.zip
diff --git a/docs/en/28-releases/01-tdengine.md b/docs/en/28-releases/01-tdengine.md
index e33970c407..bcfcaf9ffb 100644
--- a/docs/en/28-releases/01-tdengine.md
+++ b/docs/en/28-releases/01-tdengine.md
@@ -10,6 +10,10 @@ For TDengine 2.x installation packages by version, please visit [here](https://w
import Release from "/components/ReleaseV3";
+## 3.0.2.1
+
+
+
## 3.0.2.0
diff --git a/docs/en/28-releases/02-tools.md b/docs/en/28-releases/02-tools.md
index f2212bb2d4..6013aacc35 100644
--- a/docs/en/28-releases/02-tools.md
+++ b/docs/en/28-releases/02-tools.md
@@ -10,6 +10,10 @@ For other historical version installers, please visit [here](https://www.taosdat
import Release from "/components/ReleaseV3";
+## 2.3.3
+
+
+
## 2.3.2
diff --git a/docs/examples/go/sub/main.go b/docs/examples/go/sub/main.go
index 7721eed134..3aa2fed729 100644
--- a/docs/examples/go/sub/main.go
+++ b/docs/examples/go/sub/main.go
@@ -24,7 +24,7 @@ func main() {
if err != nil {
panic(err)
}
- _, err = db.Exec("create topic if not exists example_tmq_topic with meta as DATABASE example_tmq")
+ _, err = db.Exec("create topic if not exists example_tmq_topic as DATABASE example_tmq")
if err != nil {
panic(err)
}
diff --git a/docs/zh/08-connector/05-schemaless-api.mdx b/docs/zh/08-connector/05-schemaless-api.mdx
index f6d7e09212..8f0a9273b9 100644
--- a/docs/zh/08-connector/05-schemaless-api.mdx
+++ b/docs/zh/08-connector/05-schemaless-api.mdx
@@ -19,6 +19,7 @@ TDengine 提供了兼容 InfluxDB (v1) 和 OpenTSDB 行协议的 Schemaless API
- `precision` TDengine 使用的时间精度
- `u` TDengine 用户名
- `p` TDengine 密码
+- `ttl` 自动创建的子表生命周期,以子表的第一条数据的 TTL 参数为准,不可更新。更多信息请参考[创建表文档](taos-sql/table/#创建表)的 TTL 参数
注意: 目前不支持 InfluxDB 的 token 验证方式,仅支持 Basic 验证和查询参数验证。
diff --git a/docs/zh/12-taos-sql/04-stable.md b/docs/zh/12-taos-sql/04-stable.md
index bd32da68ae..c5933228de 100644
--- a/docs/zh/12-taos-sql/04-stable.md
+++ b/docs/zh/12-taos-sql/04-stable.md
@@ -139,10 +139,10 @@ alter_table_option: {
- ADD COLUMN:添加列。
- DROP COLUMN:删除列。
-- MODIFY COLUMN:修改列定义,如果数据列的类型是可变长类型,那么可以使用此指令修改其宽度,只能改大,不能改小。
+- MODIFY COLUMN:修改列的宽度,数据列的类型必须是 nchar 和 binary,使用此指令可以修改其宽度,只能改大,不能改小。
- ADD TAG:给超级表添加一个标签。
- DROP TAG:删除超级表的一个标签。从超级表删除某个标签后,该超级表下的所有子表也会自动删除该标签。
-- MODIFY TAG:修改超级表的一个标签的定义。如果标签的类型是可变长类型,那么可以使用此指令修改其宽度,只能改大,不能改小。
+- MODIFY TAG:修改超级表的一个标签的列宽度。标签的类型只能是 nchar 和 binary,使用此指令可以修改其宽度,只能改大,不能改小。
- RENAME TAG:修改超级表的一个标签的名称。从超级表修改某个标签名后,该超级表下的所有子表也会自动更新该标签名。
### 增加列
diff --git a/docs/zh/12-taos-sql/10-function.md b/docs/zh/12-taos-sql/10-function.md
index afe90b8a93..cb99c83cc5 100644
--- a/docs/zh/12-taos-sql/10-function.md
+++ b/docs/zh/12-taos-sql/10-function.md
@@ -880,6 +880,7 @@ INTERP(expr)
- INTERP 根据 FILL 字段来决定在每个符合输出条件的时刻如何进行插值。
- INTERP 只能在一个时间序列内进行插值,因此当作用于超级表时必须跟 partition by tbname 一起使用。
- INTERP 可以与伪列 _irowts 一起使用,返回插值点所对应的时间戳(3.0.1.4版本以后支持)。
+- INTERP 可以与伪列 _isfilled 一起使用,显示返回结果是否为原始记录或插值算法产生的数据(3.0.2.1版本以后支持)。
### LAST
diff --git a/docs/zh/12-taos-sql/14-stream.md b/docs/zh/12-taos-sql/14-stream.md
index 932ad30b1a..9e2fde526e 100644
--- a/docs/zh/12-taos-sql/14-stream.md
+++ b/docs/zh/12-taos-sql/14-stream.md
@@ -8,7 +8,7 @@ description: 流式计算的相关 SQL 的详细语法
## 创建流式计算
```sql
-CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name AS subquery
+CREATE STREAM [IF NOT EXISTS] stream_name [stream_options] INTO stb_name SUBTABLE(expression) AS subquery
stream_options: {
TRIGGER [AT_ONCE | WINDOW_CLOSE | MAX_DELAY time]
WATERMARK time
@@ -28,6 +28,9 @@ subquery: SELECT select_list
支持会话窗口、状态窗口与滑动窗口,其中,会话窗口与状态窗口搭配超级表时必须与partition by tbname一起使用
+
+subtable 子句定义了流式计算中创建的子表的命名规则,详见 流式计算的 partition 部分。
+
```sql
window_clause: {
SESSION(ts_col, tol_val)
@@ -49,11 +52,43 @@ SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname INTERVAL(
## 流式计算的 partition
-可以使用 PARTITION BY TBNAME 或 PARTITION BY tag,对一个流进行多分区的计算,每个分区的时间线与时间窗口是独立的,会各自聚合,并写入到目的表中的不同子表。
+可以使用 PARTITION BY TBNAME,tag,普通列或者表达式,对一个流进行多分区的计算,每个分区的时间线与时间窗口是独立的,会各自聚合,并写入到目的表中的不同子表。
-不带 PARTITION BY 选项时,所有的数据将写入到一张子表。
+不带 PARTITION BY 子句时,所有的数据将写入到一张子表。
-流式计算创建的超级表有唯一的 tag 列 groupId,每个 partition 会被分配唯一 groupId。与 schemaless 写入一致,我们通过 MD5 计算子表名,并自动创建它。
+在创建流时不使用 SUBTABLE 子句时,流式计算创建的超级表有唯一的 tag 列 groupId,每个 partition 会被分配唯一 groupId。与 schemaless 写入一致,我们通过 MD5 计算子表名,并自动创建它。
+
+若创建流的语句中包含 SUBTABLE 子句,用户可以为每个 partition 对应的子表生成自定义的表名,例如:
+
+```sql
+CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
+```
+
+PARTITION 子句中,为 tbname 定义了一个别名 tname, 在PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名。
+
+注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
+
+## 流式计算读取历史数据
+
+正常情况下,流式计算不会处理创建前已经写入源表中的数据,若要处理已经写入的数据,可以在创建流时设置 fill_history 1 选项,这样创建的流式计算会自动处理创建前、创建中、创建后写入的数据。例如:
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 interval(10s)
+```
+
+结合 fill_history 1 选项,可以实现只处理特定历史时间范围的数据,例如:只处理某历史时刻(2020年1月30日)之后的数据
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' interval(10s)
+```
+
+再如,仅处理某时间段内的数据,结束时间可以是未来时间
+
+```sql
+create stream if not exists s1 fill_history 1 into st1 as select count(*) from t1 where ts > '2020-01-30' and ts < '2023-01-01' interval(10s)
+```
+
+如果该流任务已经彻底过期,并且您不再想让它检测或处理数据,您可以手动删除它,被计算出的数据仍会被保留。
## 删除流式计算
@@ -79,7 +114,7 @@ SELECT * from information_schema.`ins_streams`;
在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。
-对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 3 种触发模式:
+对于非窗口计算,流式计算的触发是实时的;对于窗口计算,目前提供 3 种触发模式,默认为 AT_ONCE:
1. AT_ONCE:写入立即触发
diff --git a/docs/zh/12-taos-sql/24-show.md b/docs/zh/12-taos-sql/24-show.md
index 4bd1e52284..a65746e7f9 100644
--- a/docs/zh/12-taos-sql/24-show.md
+++ b/docs/zh/12-taos-sql/24-show.md
@@ -179,6 +179,75 @@ SHOW TABLE DISTRIBUTED table_name;
显示表的数据分布信息。
+示例说明:
+
+语句: show table distributed d0\G; 竖行显示表 d0 的 BLOCK 分布情况
+
+*************************** 1.row ***************************
+
+_block_dist: Total_Blocks=[5] Total_Size=[93.65 Kb] Average_size=[18.73 Kb] Compression_Ratio=[23.98 %]
+
+Total_Blocks : 表d0 占用的 block 个数为 5 个
+
+Total_Size. : 表 d0 所有 block 在文件中占用的大小为 93.65 KB
+
+Average_size: 平均每个 block 在文件中占用的空间大小为 18.73 KB
+
+Compression_Ratio: 数据压缩率为 23.98%
+
+
+*************************** 2.row ***************************
+
+_block_dist: Total_Rows=[20000] Inmem_Rows=[0] MinRows=[3616] MaxRows=[4096] Average_Rows=[4000]
+
+Total_Rows: 统计表 d0 的所有行数 为20000 行
+
+Inmem_Rows: 表示仍然还存放在内存中的行数,即没有落盘的行数,为 0行,表示没有
+
+MinRows: BLOCK 中最小的行数,为 3616 行
+
+MaxRows: BLOCK 中最大的行数,为 4096行
+
+Average_Rows: BLOCK 中的平均行数,为4000 行
+
+
+*************************** 3.row ***************************
+
+_block_dist: Total_Tables=[1] Total_Files=[2]
+
+Total_Tables: 表示子表的个数,这里为1
+
+Total_Files: 表数据保存在几个文件中,这里保存在 2 个文件中
+
+
+*************************** 5.row ***************************
+
+_block_dist: 0100 |
+
+*************************** 6.row ***************************
+
+_block_dist: 0299 |
+
+......
+
+*************************** 22.row ***************************
+
+_block_dist: 3483 ||||||||||||||||| 1 (20.00%)
+
+*************************** 23.row ***************************
+
+_block_dist: 3682 |
+
+*************************** 24.row ***************************
+
+_block_dist: 3881 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 4 (80.00%)
+
+Query OK, 24 row(s) in set (0.002444s)
+
+
+ 上面是块中包含数据行数的块儿分布情况图,这里的 0100 0299 0498 … 表示的是每个块中包含的数据行数,上面的意思就是这个表的 5 个块,分布在 3483 ~3681 行的块有 1 个,占整个块的 20%,分布在 3881 ~ 4096(最大行数)的块数为 4 个,占整个块的 80%, 其它区域内分布块数为 0。
+
+
## SHOW TAGS
```sql
diff --git a/docs/zh/20-third-party/11-kafka.md b/docs/zh/20-third-party/11-kafka.md
index 1172f4fbc5..cc2247f25e 100644
--- a/docs/zh/20-third-party/11-kafka.md
+++ b/docs/zh/20-third-party/11-kafka.md
@@ -79,7 +79,7 @@ Development: false
### 从源码安装
```
-git clone https://github.com:taosdata/kafka-connect-tdengine.git
+git clone https://github.com/taosdata/kafka-connect-tdengine.git
cd kafka-connect-tdengine
mvn clean package
unzip -d $CONFLUENT_HOME/share/java/ target/components/packages/taosdata-kafka-connect-tdengine-*.zip
diff --git a/docs/zh/28-releases/01-tdengine.md b/docs/zh/28-releases/01-tdengine.md
index 0ea34829a5..0fe6555162 100644
--- a/docs/zh/28-releases/01-tdengine.md
+++ b/docs/zh/28-releases/01-tdengine.md
@@ -10,6 +10,10 @@ TDengine 2.x 各版本安装包请访问[这里](https://www.taosdata.com/all-do
import Release from "/components/ReleaseV3";
+## 3.0.2.1
+
+
+
## 3.0.2.0
diff --git a/docs/zh/28-releases/02-tools.md b/docs/zh/28-releases/02-tools.md
index 6471826b50..331f6832c0 100644
--- a/docs/zh/28-releases/02-tools.md
+++ b/docs/zh/28-releases/02-tools.md
@@ -10,6 +10,10 @@ taosTools 各版本安装包下载链接如下:
import Release from "/components/ReleaseV3";
+## 2.3.3
+
+
+
## 2.3.2
diff --git a/examples/c/CMakeLists.txt b/examples/c/CMakeLists.txt
index 37edc739e4..e14c4e60d9 100644
--- a/examples/c/CMakeLists.txt
+++ b/examples/c/CMakeLists.txt
@@ -3,19 +3,13 @@ PROJECT(TDengine)
IF (TD_LINUX)
INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc)
AUX_SOURCE_DIRECTORY(. SRC)
- # ADD_EXECUTABLE(demo apitest.c)
- #TARGET_LINK_LIBRARIES(demo taos_static trpc tutil pthread )
- #ADD_EXECUTABLE(sml schemaless.c)
- #TARGET_LINK_LIBRARIES(sml taos_static trpc tutil pthread )
- #ADD_EXECUTABLE(subscribe subscribe.c)
- #TARGET_LINK_LIBRARIES(subscribe taos_static trpc tutil pthread )
- #ADD_EXECUTABLE(epoll epoll.c)
- #TARGET_LINK_LIBRARIES(epoll taos_static trpc tutil pthread lua)
add_executable(tmq "")
add_executable(stream_demo "")
- add_executable(demoapi "")
- add_executable(api_reqid "")
+ add_executable(schemaless "")
+ add_executable(prepare "")
+ add_executable(demo "")
+ add_executable(asyncdemo "")
target_sources(tmq
PRIVATE
@@ -27,16 +21,25 @@ IF (TD_LINUX)
"stream_demo.c"
)
- target_sources(demoapi
+ target_sources(schemaless
PRIVATE
- "demoapi.c"
+ "schemaless.c"
)
- target_sources(api_reqid
+ target_sources(prepare
PRIVATE
- "api_with_reqid_test.c"
+ "prepare.c"
)
+ target_sources(demo
+ PRIVATE
+ "demo.c"
+ )
+
+ target_sources(asyncdemo
+ PRIVATE
+ "asyncdemo.c"
+ )
target_link_libraries(tmq
taos_static
@@ -46,46 +49,30 @@ IF (TD_LINUX)
taos_static
)
- target_link_libraries(demoapi
+ target_link_libraries(schemaless
taos_static
)
- target_link_libraries(api_reqid
+ target_link_libraries(prepare
taos_static
)
-
- target_include_directories(tmq
- PUBLIC "${TD_SOURCE_DIR}/include/os"
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
+ target_link_libraries(demo
+ taos_static
)
- target_include_directories(stream_demo
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
- )
-
- target_include_directories(demoapi
- PUBLIC "${TD_SOURCE_DIR}/include/client"
- PUBLIC "${TD_SOURCE_DIR}/include/os"
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
- )
-
- target_include_directories(api_reqid
- PUBLIC "${TD_SOURCE_DIR}/include/client"
- PUBLIC "${TD_SOURCE_DIR}/include/os"
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc"
+ target_link_libraries(asyncdemo
+ taos_static
)
SET_TARGET_PROPERTIES(tmq PROPERTIES OUTPUT_NAME tmq)
SET_TARGET_PROPERTIES(stream_demo PROPERTIES OUTPUT_NAME stream_demo)
- SET_TARGET_PROPERTIES(demoapi PROPERTIES OUTPUT_NAME demoapi)
- SET_TARGET_PROPERTIES(api_reqid PROPERTIES OUTPUT_NAME api_reqid)
+ SET_TARGET_PROPERTIES(schemaless PROPERTIES OUTPUT_NAME schemaless)
+ SET_TARGET_PROPERTIES(prepare PROPERTIES OUTPUT_NAME prepare)
+ SET_TARGET_PROPERTIES(demo PROPERTIES OUTPUT_NAME demo)
+ SET_TARGET_PROPERTIES(asyncdemo PROPERTIES OUTPUT_NAME asyncdemo)
ENDIF ()
IF (TD_DARWIN)
INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc)
AUX_SOURCE_DIRECTORY(. SRC)
- #ADD_EXECUTABLE(demo demo.c)
- #TARGET_LINK_LIBRARIES(demo taos_static trpc tutil pthread lua)
- #ADD_EXECUTABLE(epoll epoll.c)
- #TARGET_LINK_LIBRARIES(epoll taos_static trpc tutil pthread lua)
ENDIF ()
diff --git a/examples/c/apitest.c b/examples/c/apitest.c
deleted file mode 100644
index c179acaf4e..0000000000
--- a/examples/c/apitest.c
+++ /dev/null
@@ -1,1948 +0,0 @@
-// sample code to verify all TDengine API
-// to compile: gcc -o apitest apitest.c -ltaos
-
-#include "cJSON.h"
-#include "taoserror.h"
-
-#include
-#include
-#include
-#include
-#include "../../../include/client/taos.h"
-
-static void prepare_data(TAOS* taos) {
- TAOS_RES* result;
- result = taos_query(taos, "drop database if exists test;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database test precision 'us';");
- taos_free_result(result);
- usleep(100000);
- taos_select_db(taos, "test");
-
- result = taos_query(taos, "create table meters(ts timestamp, a int) tags(area int);");
- taos_free_result(result);
-
- result = taos_query(taos, "create table t0 using meters tags(0);");
- taos_free_result(result);
- result = taos_query(taos, "create table t1 using meters tags(1);");
- taos_free_result(result);
- result = taos_query(taos, "create table t2 using meters tags(2);");
- taos_free_result(result);
- result = taos_query(taos, "create table t3 using meters tags(3);");
- taos_free_result(result);
- result = taos_query(taos, "create table t4 using meters tags(4);");
- taos_free_result(result);
- result = taos_query(taos, "create table t5 using meters tags(5);");
- taos_free_result(result);
- result = taos_query(taos, "create table t6 using meters tags(6);");
- taos_free_result(result);
- result = taos_query(taos, "create table t7 using meters tags(7);");
- taos_free_result(result);
- result = taos_query(taos, "create table t8 using meters tags(8);");
- taos_free_result(result);
- result = taos_query(taos, "create table t9 using meters tags(9);");
- taos_free_result(result);
-
- result = taos_query(taos,
- "insert into t0 values('2020-01-01 00:00:00.000', 0)"
- " ('2020-01-01 00:01:00.000', 0)"
- " ('2020-01-01 00:02:00.000', 0)"
- " t1 values('2020-01-01 00:00:00.000', 0)"
- " ('2020-01-01 00:01:00.000', 0)"
- " ('2020-01-01 00:02:00.000', 0)"
- " ('2020-01-01 00:03:00.000', 0)"
- " t2 values('2020-01-01 00:00:00.000', 0)"
- " ('2020-01-01 00:01:00.000', 0)"
- " ('2020-01-01 00:01:01.000', 0)"
- " ('2020-01-01 00:01:02.000', 0)"
- " t3 values('2020-01-01 00:01:02.000', 0)"
- " t4 values('2020-01-01 00:01:02.000', 0)"
- " t5 values('2020-01-01 00:01:02.000', 0)"
- " t6 values('2020-01-01 00:01:02.000', 0)"
- " t7 values('2020-01-01 00:01:02.000', 0)"
- " t8 values('2020-01-01 00:01:02.000', 0)"
- " t9 values('2020-01-01 00:01:02.000', 0)");
- int affected = taos_affected_rows(result);
- if (affected != 18) {
- printf("\033[31m%d rows affected by last insert statement, but it should be 18\033[0m\n", affected);
- }
- taos_free_result(result);
- // super tables subscription
- usleep(1000000);
-}
-
-static int print_result(TAOS_RES* res, int blockFetch) {
- TAOS_ROW row = NULL;
- int num_fields = taos_num_fields(res);
- TAOS_FIELD* fields = taos_fetch_fields(res);
- int nRows = 0;
-
- if (blockFetch) {
- int rows = 0;
- while ((rows = taos_fetch_block(res, &row))) {
- // for (int i = 0; i < rows; i++) {
- // char temp[256];
- // taos_print_row(temp, row + i, fields, num_fields);
- // puts(temp);
- // }
- nRows += rows;
- }
- } else {
- while ((row = taos_fetch_row(res))) {
- char temp[256] = {0};
- taos_print_row(temp, row, fields, num_fields);
- puts(temp);
- nRows++;
- }
- }
-
- printf("%d rows consumed.\n", nRows);
- return nRows;
-}
-
-static void check_row_count(int line, TAOS_RES* res, int expected) {
- int actual = print_result(res, expected % 2);
- if (actual != expected) {
- printf("\033[31mline %d: row count mismatch, expected: %d, actual: %d\033[0m\n", line, expected, actual);
- } else {
- printf("line %d: %d rows consumed as expected\n", line, actual);
- }
-}
-
-static void verify_query(TAOS* taos) {
- prepare_data(taos);
-
- int code = taos_load_table_info(taos, "t0,t1,t2,t3,t4,t5,t6,t7,t8,t9");
- if (code != 0) {
- printf("\033[31mfailed to load table info: 0x%08x\033[0m\n", code);
- }
-
- code = taos_validate_sql(taos, "select * from nonexisttable");
- if (code == 0) {
- printf("\033[31mimpossible, the table does not exists\033[0m\n");
- }
-
- code = taos_validate_sql(taos, "select * from meters");
- if (code != 0) {
- printf("\033[31mimpossible, the table does exists: 0x%08x\033[0m\n", code);
- }
-
- TAOS_RES* res = taos_query_with_reqid(taos, "select * from meters", genReqid());
- check_row_count(__LINE__, res, 18);
- printf("result precision is: %d\n", taos_result_precision(res));
- int c = taos_field_count(res);
- printf("field count is: %d\n", c);
- int* lengths = taos_fetch_lengths(res);
- for (int i = 0; i < c; i++) {
- printf("length of column %d is %d\n", i, lengths[i]);
- }
- taos_free_result(res);
-
- res = taos_query_with_reqid(taos, "select * from t0", genReqid());
- check_row_count(__LINE__, res, 3);
- taos_free_result(res);
-
- res = taos_query_with_reqid(taos, "select * from nonexisttable", genReqid());
- code = taos_errno(res);
- printf("code=%d, error msg=%s\n", code, taos_errstr(res));
- taos_free_result(res);
-
- res = taos_query_with_reqid(taos, "select * from meters", genReqid());
- taos_stop_query(res);
- taos_free_result(res);
-}
-
-void subscribe_callback(TAOS_SUB* tsub, TAOS_RES* res, void* param, int code) {
- int rows = print_result(res, *(int*)param);
- printf("%d rows consumed in subscribe_callback\n", rows);
-}
-
-static void verify_subscribe(TAOS* taos) {
- prepare_data(taos);
-
- TAOS_SUB* tsub = taos_subscribe(taos, 0, "test", "select * from meters;", NULL, NULL, 0);
- TAOS_RES* res = taos_consume(tsub);
- check_row_count(__LINE__, res, 18);
-
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 0);
-
- TAOS_RES* result;
- result = taos_query(taos, "insert into t0 values('2020-01-01 00:02:00.001', 0);");
- taos_free_result(result);
- result = taos_query(taos, "insert into t8 values('2020-01-01 00:01:03.000', 0);");
- taos_free_result(result);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 2);
-
- result = taos_query(taos, "insert into t2 values('2020-01-01 00:01:02.001', 0);");
- taos_free_result(result);
- result = taos_query(taos, "insert into t1 values('2020-01-01 00:03:00.001', 0);");
- taos_free_result(result);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 2);
-
- result = taos_query(taos, "insert into t1 values('2020-01-01 00:03:00.002', 0);");
- taos_free_result(result);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 1);
-
- // keep progress information and restart subscription
- taos_unsubscribe(tsub, 1);
- result = taos_query(taos, "insert into t0 values('2020-01-01 00:04:00.000', 0);");
- taos_free_result(result);
- tsub = taos_subscribe(taos, 1, "test", "select * from meters;", NULL, NULL, 0);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 24);
-
- // keep progress information and continue previous subscription
- taos_unsubscribe(tsub, 1);
- tsub = taos_subscribe(taos, 0, "test", "select * from meters;", NULL, NULL, 0);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 0);
-
- // don't keep progress information and continue previous subscription
- taos_unsubscribe(tsub, 0);
- tsub = taos_subscribe(taos, 0, "test", "select * from meters;", NULL, NULL, 0);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 24);
-
- // single meter subscription
-
- taos_unsubscribe(tsub, 0);
- tsub = taos_subscribe(taos, 0, "test", "select * from t0;", NULL, NULL, 0);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 5);
-
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 0);
-
- result = taos_query(taos, "insert into t0 values('2020-01-01 00:04:00.001', 0);");
- taos_free_result(result);
- res = taos_consume(tsub);
- check_row_count(__LINE__, res, 1);
-
- taos_unsubscribe(tsub, 0);
-
- int blockFetch = 0;
- tsub = taos_subscribe(taos, 1, "test", "select * from meters;", subscribe_callback, &blockFetch, 1000);
- usleep(2000000);
- result = taos_query(taos, "insert into t0 values('2020-01-01 00:05:00.001', 0);");
- taos_free_result(result);
- usleep(2000000);
- taos_unsubscribe(tsub, 0);
-}
-
-void verify_prepare(TAOS* taos) {
- TAOS_RES* result = taos_query(taos, "drop database if exists test;");
- taos_free_result(result);
-
- usleep(100000);
- result = taos_query(taos, "create database test;");
-
- int code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
-
- taos_free_result(result);
-
- usleep(100000);
- taos_select_db(taos, "test");
-
- // create table
- const char* sql =
- "create table m1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
- "binary(40), blob nchar(10))";
- result = taos_query_with_reqid(taos, sql, genReqid());
- code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
- taos_free_result(result);
-
- // insert 10 records
- struct {
- int64_t ts;
- int8_t b;
- int8_t v1;
- int16_t v2;
- int32_t v4;
- int64_t v8;
- float f4;
- double f8;
- char bin[40];
- char blob[80];
- } v = {0};
-
- TAOS_STMT* stmt = taos_stmt_init(taos);
- TAOS_BIND params[10];
- 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_BOOL;
- params[1].buffer_length = sizeof(v.b);
- params[1].buffer = &v.b;
- params[1].length = ¶ms[1].buffer_length;
- params[1].is_null = NULL;
-
- params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
- params[2].buffer_length = sizeof(v.v1);
- params[2].buffer = &v.v1;
- params[2].length = ¶ms[2].buffer_length;
- params[2].is_null = NULL;
-
- params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
- params[3].buffer_length = sizeof(v.v2);
- params[3].buffer = &v.v2;
- params[3].length = ¶ms[3].buffer_length;
- params[3].is_null = NULL;
-
- params[4].buffer_type = TSDB_DATA_TYPE_INT;
- params[4].buffer_length = sizeof(v.v4);
- params[4].buffer = &v.v4;
- params[4].length = ¶ms[4].buffer_length;
- params[4].is_null = NULL;
-
- params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
- params[5].buffer_length = sizeof(v.v8);
- params[5].buffer = &v.v8;
- params[5].length = ¶ms[5].buffer_length;
- params[5].is_null = NULL;
-
- params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
- params[6].buffer_length = sizeof(v.f4);
- params[6].buffer = &v.f4;
- params[6].length = ¶ms[6].buffer_length;
- params[6].is_null = NULL;
-
- params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
- params[7].buffer_length = sizeof(v.f8);
- params[7].buffer = &v.f8;
- params[7].length = ¶ms[7].buffer_length;
- params[7].is_null = NULL;
-
- params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
- params[8].buffer_length = sizeof(v.bin);
- params[8].buffer = v.bin;
- params[8].length = ¶ms[8].buffer_length;
- params[8].is_null = NULL;
-
- strcpy(v.blob, "一二三四五六七八九十");
- params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
- params[9].buffer_length = strlen(v.blob);
- params[9].buffer = v.blob;
- params[9].length = ¶ms[9].buffer_length;
- params[9].is_null = NULL;
-
- int is_null = 1;
-
- sql = "insert into m1 values(?,?,?,?,?,?,?,?,?,?)";
- code = taos_stmt_prepare(stmt, sql, 0);
- if (code != 0) {
- printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
- v.ts = 1591060628000;
- for (int i = 0; i < 10; ++i) {
- v.ts += 1;
- for (int j = 1; j < 10; ++j) {
- params[j].is_null = ((i == j) ? &is_null : 0);
- }
- v.b = (int8_t)i % 2;
- v.v1 = (int8_t)i;
- v.v2 = (int16_t)(i * 2);
- v.v4 = (int32_t)(i * 4);
- v.v8 = (int64_t)(i * 8);
- v.f4 = (float)(i * 40);
- v.f8 = (double)(i * 80);
- for (int j = 0; j < sizeof(v.bin); ++j) {
- v.bin[j] = (char)(i + '0');
- }
-
- taos_stmt_bind_param(stmt, params);
- taos_stmt_add_batch(stmt);
- }
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
- taos_stmt_close(stmt);
-
- // query the records
- stmt = taos_stmt_init(taos);
- taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
- v.v1 = 5;
- v.v2 = 15;
- taos_stmt_bind_param(stmt, params + 2);
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- result = taos_stmt_use_result(stmt);
-
- TAOS_ROW row;
- int rows = 0;
- int num_fields = taos_num_fields(result);
- TAOS_FIELD* fields = taos_fetch_fields(result);
-
- // fetch the records row by row
- while ((row = taos_fetch_row(result))) {
- char temp[256] = {0};
- rows++;
- taos_print_row(temp, row, fields, num_fields);
- printf("%s\n", temp);
- }
-
- taos_free_result(result);
- taos_stmt_close(stmt);
-}
-
-void verify_prepare2(TAOS* taos) {
- TAOS_RES* result = taos_query(taos, "drop database if exists test;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database test;");
-
- int code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
- taos_free_result(result);
-
- usleep(100000);
- taos_select_db(taos, "test");
-
- // create table
- const char* sql =
- "create table m1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
- "binary(40), blob nchar(10))";
- result = taos_query(taos, sql);
- code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
- taos_free_result(result);
-
- // insert 10 records
- struct {
- int64_t ts[10];
- int8_t b[10];
- int8_t v1[10];
- int16_t v2[10];
- int32_t v4[10];
- int64_t v8[10];
- float f4[10];
- double f8[10];
- char bin[10][40];
- char blob[10][80];
- } v;
-
- int32_t* t8_len = malloc(sizeof(int32_t) * 10);
- int32_t* t16_len = malloc(sizeof(int32_t) * 10);
- int32_t* t32_len = malloc(sizeof(int32_t) * 10);
- int32_t* t64_len = malloc(sizeof(int32_t) * 10);
- int32_t* float_len = malloc(sizeof(int32_t) * 10);
- int32_t* double_len = malloc(sizeof(int32_t) * 10);
- int32_t* bin_len = malloc(sizeof(int32_t) * 10);
- int32_t* blob_len = malloc(sizeof(int32_t) * 10);
-
- TAOS_STMT* stmt = taos_stmt_init(taos);
- TAOS_MULTI_BIND params[10];
- char is_null[10] = {0};
-
- params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
- params[0].buffer_length = sizeof(v.ts[0]);
- params[0].buffer = v.ts;
- params[0].length = t64_len;
- params[0].is_null = is_null;
- params[0].num = 10;
-
- params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
- params[1].buffer_length = sizeof(v.b[0]);
- params[1].buffer = v.b;
- params[1].length = t8_len;
- params[1].is_null = is_null;
- params[1].num = 10;
-
- params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
- params[2].buffer_length = sizeof(v.v1[0]);
- params[2].buffer = v.v1;
- params[2].length = t8_len;
- params[2].is_null = is_null;
- params[2].num = 10;
-
- params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
- params[3].buffer_length = sizeof(v.v2[0]);
- params[3].buffer = v.v2;
- params[3].length = t16_len;
- params[3].is_null = is_null;
- params[3].num = 10;
-
- params[4].buffer_type = TSDB_DATA_TYPE_INT;
- params[4].buffer_length = sizeof(v.v4[0]);
- params[4].buffer = v.v4;
- params[4].length = t32_len;
- params[4].is_null = is_null;
- params[4].num = 10;
-
- params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
- params[5].buffer_length = sizeof(v.v8[0]);
- params[5].buffer = v.v8;
- params[5].length = t64_len;
- params[5].is_null = is_null;
- params[5].num = 10;
-
- params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
- params[6].buffer_length = sizeof(v.f4[0]);
- params[6].buffer = v.f4;
- params[6].length = float_len;
- params[6].is_null = is_null;
- params[6].num = 10;
-
- params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
- params[7].buffer_length = sizeof(v.f8[0]);
- params[7].buffer = v.f8;
- params[7].length = double_len;
- params[7].is_null = is_null;
- params[7].num = 10;
-
- params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
- params[8].buffer_length = sizeof(v.bin[0]);
- params[8].buffer = v.bin;
- params[8].length = bin_len;
- params[8].is_null = is_null;
- params[8].num = 10;
-
- params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
- params[9].buffer_length = sizeof(v.blob[0]);
- params[9].buffer = v.blob;
- params[9].length = blob_len;
- params[9].is_null = is_null;
- params[9].num = 10;
-
- sql = "insert into ? (ts, b, v1, v2, v4, v8, f4, f8, bin, blob) values(?,?,?,?,?,?,?,?,?,?)";
- code = taos_stmt_prepare(stmt, sql, 0);
- if (code != 0) {
- printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- code = taos_stmt_set_tbname(stmt, "m1");
- if (code != 0) {
- printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- int64_t ts = 1591060628000;
- for (int i = 0; i < 10; ++i) {
- v.ts[i] = ts++;
- is_null[i] = 0;
-
- v.b[i] = (int8_t)i % 2;
- v.v1[i] = (int8_t)i;
- v.v2[i] = (int16_t)(i * 2);
- v.v4[i] = (int32_t)(i * 4);
- v.v8[i] = (int64_t)(i * 8);
- v.f4[i] = (float)(i * 40);
- v.f8[i] = (double)(i * 80);
- for (int j = 0; j < sizeof(v.bin[0]); ++j) {
- v.bin[i][j] = (char)(i + '0');
- }
- strcpy(v.blob[i], "一二三四五六七八九十");
-
- t8_len[i] = sizeof(int8_t);
- t16_len[i] = sizeof(int16_t);
- t32_len[i] = sizeof(int32_t);
- t64_len[i] = sizeof(int64_t);
- float_len[i] = sizeof(float);
- double_len[i] = sizeof(double);
- bin_len[i] = sizeof(v.bin[0]);
- blob_len[i] = (int32_t)strlen(v.blob[i]);
- }
-
- taos_stmt_bind_param_batch(stmt, params);
- taos_stmt_add_batch(stmt);
-
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- taos_stmt_close(stmt);
-
- // query the records
- stmt = taos_stmt_init(taos);
- taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
- TAOS_BIND qparams[2];
-
- int8_t v1 = 5;
- int16_t v2 = 15;
- qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
- qparams[0].buffer_length = sizeof(v1);
- qparams[0].buffer = &v1;
- qparams[0].length = &qparams[0].buffer_length;
- qparams[0].is_null = NULL;
-
- qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
- qparams[1].buffer_length = sizeof(v2);
- qparams[1].buffer = &v2;
- qparams[1].length = &qparams[1].buffer_length;
- qparams[1].is_null = NULL;
-
- taos_stmt_bind_param(stmt, qparams);
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- result = taos_stmt_use_result(stmt);
-
- TAOS_ROW row;
- int rows = 0;
- int num_fields = taos_num_fields(result);
- TAOS_FIELD* fields = taos_fetch_fields(result);
-
- // fetch the records row by row
- while ((row = taos_fetch_row(result))) {
- char temp[256] = {0};
- rows++;
- taos_print_row(temp, row, fields, num_fields);
- printf("%s\n", temp);
- }
-
- taos_free_result(result);
- taos_stmt_close(stmt);
-
- free(t8_len);
- free(t16_len);
- free(t32_len);
- free(t64_len);
- free(float_len);
- free(double_len);
- free(bin_len);
- free(blob_len);
-}
-
-void verify_prepare3(TAOS* taos) {
- TAOS_RES* result = taos_query(taos, "drop database if exists test;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database test;");
-
- int code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
- taos_free_result(result);
-
- usleep(100000);
- taos_select_db(taos, "test");
-
- // create table
- const char* sql =
- "create stable st1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
- "binary(40), blob nchar(10)) tags (id1 int, id2 binary(40))";
- result = taos_query(taos, sql);
- code = taos_errno(result);
- if (code != 0) {
- printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
- taos_free_result(result);
- return;
- }
- taos_free_result(result);
-
- TAOS_BIND tags[2];
-
- int32_t id1 = 1;
- char id2[40] = "abcdefghijklmnopqrstuvwxyz0123456789";
- uintptr_t id2_len = strlen(id2);
-
- tags[0].buffer_type = TSDB_DATA_TYPE_INT;
- tags[0].buffer_length = sizeof(int);
- tags[0].buffer = &id1;
- tags[0].length = NULL;
- tags[0].is_null = NULL;
-
- tags[1].buffer_type = TSDB_DATA_TYPE_BINARY;
- tags[1].buffer_length = sizeof(id2);
- tags[1].buffer = id2;
- tags[1].length = &id2_len;
- tags[1].is_null = NULL;
-
- // insert 10 records
- struct {
- int64_t ts[10];
- int8_t b[10];
- int8_t v1[10];
- int16_t v2[10];
- int32_t v4[10];
- int64_t v8[10];
- float f4[10];
- double f8[10];
- char bin[10][40];
- char blob[10][80];
- } v;
-
- int32_t* t8_len = malloc(sizeof(int32_t) * 10);
- int32_t* t16_len = malloc(sizeof(int32_t) * 10);
- int32_t* t32_len = malloc(sizeof(int32_t) * 10);
- int32_t* t64_len = malloc(sizeof(int32_t) * 10);
- int32_t* float_len = malloc(sizeof(int32_t) * 10);
- int32_t* double_len = malloc(sizeof(int32_t) * 10);
- int32_t* bin_len = malloc(sizeof(int32_t) * 10);
- int32_t* blob_len = malloc(sizeof(int32_t) * 10);
-
- TAOS_STMT* stmt = taos_stmt_init(taos);
- TAOS_MULTI_BIND params[10];
- char is_null[10] = {0};
-
- params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
- params[0].buffer_length = sizeof(v.ts[0]);
- params[0].buffer = v.ts;
- params[0].length = t64_len;
- params[0].is_null = is_null;
- params[0].num = 10;
-
- params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
- params[1].buffer_length = sizeof(v.b[0]);
- params[1].buffer = v.b;
- params[1].length = t8_len;
- params[1].is_null = is_null;
- params[1].num = 10;
-
- params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
- params[2].buffer_length = sizeof(v.v1[0]);
- params[2].buffer = v.v1;
- params[2].length = t8_len;
- params[2].is_null = is_null;
- params[2].num = 10;
-
- params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
- params[3].buffer_length = sizeof(v.v2[0]);
- params[3].buffer = v.v2;
- params[3].length = t16_len;
- params[3].is_null = is_null;
- params[3].num = 10;
-
- params[4].buffer_type = TSDB_DATA_TYPE_INT;
- params[4].buffer_length = sizeof(v.v4[0]);
- params[4].buffer = v.v4;
- params[4].length = t32_len;
- params[4].is_null = is_null;
- params[4].num = 10;
-
- params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
- params[5].buffer_length = sizeof(v.v8[0]);
- params[5].buffer = v.v8;
- params[5].length = t64_len;
- params[5].is_null = is_null;
- params[5].num = 10;
-
- params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
- params[6].buffer_length = sizeof(v.f4[0]);
- params[6].buffer = v.f4;
- params[6].length = float_len;
- params[6].is_null = is_null;
- params[6].num = 10;
-
- params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
- params[7].buffer_length = sizeof(v.f8[0]);
- params[7].buffer = v.f8;
- params[7].length = double_len;
- params[7].is_null = is_null;
- params[7].num = 10;
-
- params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
- params[8].buffer_length = sizeof(v.bin[0]);
- params[8].buffer = v.bin;
- params[8].length = bin_len;
- params[8].is_null = is_null;
- params[8].num = 10;
-
- params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
- params[9].buffer_length = sizeof(v.blob[0]);
- params[9].buffer = v.blob;
- params[9].length = blob_len;
- params[9].is_null = is_null;
- params[9].num = 10;
-
- sql = "insert into ? using st1 tags(?,?) values(?,?,?,?,?,?,?,?,?,?)";
- code = taos_stmt_prepare(stmt, sql, 0);
- if (code != 0) {
- printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- code = taos_stmt_set_tbname_tags(stmt, "m1", tags);
- if (code != 0) {
- printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- int64_t ts = 1591060628000;
- for (int i = 0; i < 10; ++i) {
- v.ts[i] = ts++;
- is_null[i] = 0;
-
- v.b[i] = (int8_t)i % 2;
- v.v1[i] = (int8_t)i;
- v.v2[i] = (int16_t)(i * 2);
- v.v4[i] = (int32_t)(i * 4);
- v.v8[i] = (int64_t)(i * 8);
- v.f4[i] = (float)(i * 40);
- v.f8[i] = (double)(i * 80);
- for (int j = 0; j < sizeof(v.bin[0]); ++j) {
- v.bin[i][j] = (char)(i + '0');
- }
- strcpy(v.blob[i], "一二三四五六七八九十");
-
- t8_len[i] = sizeof(int8_t);
- t16_len[i] = sizeof(int16_t);
- t32_len[i] = sizeof(int32_t);
- t64_len[i] = sizeof(int64_t);
- float_len[i] = sizeof(float);
- double_len[i] = sizeof(double);
- bin_len[i] = sizeof(v.bin[0]);
- blob_len[i] = (int32_t)strlen(v.blob[i]);
- }
-
- taos_stmt_bind_param_batch(stmt, params);
- taos_stmt_add_batch(stmt);
-
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
- taos_stmt_close(stmt);
-
- // query the records
- stmt = taos_stmt_init(taos);
- taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
-
- TAOS_BIND qparams[2];
-
- int8_t v1 = 5;
- int16_t v2 = 15;
- qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
- qparams[0].buffer_length = sizeof(v1);
- qparams[0].buffer = &v1;
- qparams[0].length = &qparams[0].buffer_length;
- qparams[0].is_null = NULL;
-
- qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
- qparams[1].buffer_length = sizeof(v2);
- qparams[1].buffer = &v2;
- qparams[1].length = &qparams[1].buffer_length;
- qparams[1].is_null = NULL;
-
- taos_stmt_bind_param(stmt, qparams);
- if (taos_stmt_execute(stmt) != 0) {
- printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
- taos_stmt_close(stmt);
- return;
- }
-
- result = taos_stmt_use_result(stmt);
-
- TAOS_ROW row;
- int rows = 0;
- int num_fields = taos_num_fields(result);
- TAOS_FIELD* fields = taos_fetch_fields(result);
-
- // fetch the records row by row
- while ((row = taos_fetch_row(result))) {
- char temp[256] = {0};
- rows++;
- taos_print_row(temp, row, fields, num_fields);
- printf("%s\n", temp);
- }
-
- taos_free_result(result);
- taos_stmt_close(stmt);
-
- free(t8_len);
- free(t16_len);
- free(t32_len);
- free(t64_len);
- free(float_len);
- free(double_len);
- free(bin_len);
- free(blob_len);
-}
-
-void retrieve_callback(void* param, TAOS_RES* tres, int numOfRows) {
- if (numOfRows > 0) {
- printf("%d rows async retrieved\n", numOfRows);
- taos_fetch_rows_a(tres, retrieve_callback, param);
- } else {
- if (numOfRows < 0) {
- printf("\033[31masync retrieve failed, code: %d\033[0m\n", numOfRows);
- } else {
- printf("async retrieve completed\n");
- }
- taos_free_result(tres);
- }
-}
-
-void select_callback(void* param, TAOS_RES* tres, int code) {
- if (code == 0 && tres) {
- taos_fetch_rows_a(tres, retrieve_callback, param);
- } else {
- printf("\033[31masync select failed, code: %d\033[0m\n", code);
- }
-}
-
-void verify_async(TAOS* taos) {
- prepare_data(taos);
- taos_query_a(taos, "select * from meters", select_callback, NULL);
- usleep(1000000);
-}
-
-void stream_callback(void* param, TAOS_RES* res, TAOS_ROW row) {
- if (res == NULL || row == NULL) {
- return;
- }
-
- int num_fields = taos_num_fields(res);
- TAOS_FIELD* fields = taos_fetch_fields(res);
-
- printf("got one row from stream_callback\n");
- char temp[256] = {0};
- taos_print_row(temp, row, fields, num_fields);
- puts(temp);
-}
-
-void verify_stream(TAOS* taos) {
- prepare_data(taos);
- TAOS_STREAM* strm =
- taos_open_stream(taos, "select count(*) from meters interval(1m)", stream_callback, 0, NULL, NULL);
- printf("waiting for stream data\n");
- usleep(100000);
- TAOS_RES* result = taos_query(taos, "insert into t0 values(now, 0)(now+5s,1)(now+10s, 2);");
- taos_free_result(result);
- usleep(200000000);
- taos_close_stream(strm);
-}
-
-int32_t verify_schema_less(TAOS* taos) {
- TAOS_RES* result;
- result = taos_query(taos, "drop database if exists test;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database test precision 'us' update 1;");
- taos_free_result(result);
- usleep(100000);
-
- taos_select_db(taos, "test");
- result = taos_query(taos, "create stable ste(ts timestamp, f int) tags(t1 bigint)");
- taos_free_result(result);
- usleep(100000);
-
- int code = 0;
-
- char* lines[] = {
- "st,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000ns",
- "st,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64 1626006833640000000ns",
- "ste,t2=5f64,t3=L\"ste\" c1=true,c2=4i64,c3=\"iam\" 1626056811823316532ns",
- "st,t1=4i64,t2=5f64,t3=\"t4\" c1=3i64,c3=L\"passitagain\",c2=true,c4=5f64 1626006833642000000ns",
- "ste,t2=5f64,t3=L\"ste2\" c3=\"iamszhou\",c4=false 1626056811843316532ns",
- "ste,t2=5f64,t3=L\"ste2\" c3=\"iamszhou\",c4=false,c5=32i8,c6=64i16,c7=32i32,c8=88.88f32 1626056812843316532ns",
- "st,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64,c6=7u64 "
- "1626006933640000000ns",
- "stf,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64,c6=7u64 "
- "1626006933640000000ns",
- "stf,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64 "
- "1626006933641000000ns"};
-
- code = taos_insert_lines(taos, lines, sizeof(lines) / sizeof(char*));
-
- char* lines2[] = {
- "stg,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000ns",
- "stg,t1=4i64,t3=\"t4\",t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin\",c2=true,c4=5f64,c5=5f64 1626006833640000000ns"};
- code = taos_insert_lines(taos, &lines2[0], 1);
- code = taos_insert_lines(taos, &lines2[1], 1);
-
- char* lines3[] = {
- "sth,t1=4i64,t2=5f64,t4=5f64,ID=\"childtable\" c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64 "
- "1626006933641ms",
- "sth,t1=4i64,t2=5f64,t4=5f64 c1=3i64,c3=L\"passitagin_stf\",c2=false,c5=5f64,c6=7u64 1626006933654ms"};
- code = taos_insert_lines(taos, lines3, 2);
-
- char* lines4[] = {"st123456,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000ns",
- "dgtyqodr,t2=5f64,t3=L\"ste\" c1=tRue,c2=4i64,c3=\"iam\" 1626056811823316532ns"};
- code = taos_insert_lines(taos, lines4, 2);
-
- char* lines5[] = {
- "zqlbgs,id=\"zqlbgs_39302_21680\",t0=f,t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=11."
- "12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\" "
- "c0=f,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22.123456789f64,c7="
- "\"binaryColValue\",c8=L\"ncharColValue\",c9=7u64 1626006833639000000ns",
- "zqlbgs,t9=f,id=\"zqlbgs_39302_21680\",t0=f,t1=127i8,t11=127i8,t2=32767i16,t3=2147483647i32,t4="
- "9223372036854775807i64,t5=11.12345f32,t6=22.123456789f64,t7=\"binaryTagValue\",t8=L\"ncharTagValue\",t10="
- "L\"ncharTagValue\" "
- "c10=f,c0=f,c1=127i8,c12=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=11.12345f32,c6=22."
- "123456789f64,c7=\"binaryColValue\",c8=L\"ncharColValue\",c9=7u64,c11=L\"ncharColValue\" 1626006833639000000ns"};
- code = taos_insert_lines(taos, &lines5[0], 1);
- code = taos_insert_lines(taos, &lines5[1], 1);
-
- char* lines6[] = {"st123456,t1=3i64,t2=4f64,t3=\"t3\" c1=3i64,c3=L\"passit\",c2=false,c4=4f64 1626006833639000000ns",
- "dgtyqodr,t2=5f64,t3=L\"ste\" c1=tRue,c2=4i64,c3=\"iam\" 1626056811823316532ns"};
- code = taos_insert_lines(taos, lines6, 2);
- return (code);
-}
-
-void verify_telnet_insert(TAOS* taos) {
- TAOS_RES* result;
-
- result = taos_query(taos, "drop database if exists db;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database db precision 'ms';");
- taos_free_result(result);
- usleep(100000);
-
- (void)taos_select_db(taos, "db");
- int32_t code = 0;
-
- /* metric */
- char* lines0[] = {
- "stb0_0 1626006833639000000ns 4i8 host=\"host0\",interface=\"eth0\"",
- "stb0_1 1626006833639000000ns 4i8 host=\"host0\",interface=\"eth0\"",
- "stb0_2 1626006833639000000ns 4i8 host=\"host0\",interface=\"eth0\"",
- };
- code = taos_insert_telnet_lines(taos, lines0, 3);
- if (code) {
- printf("lines0 code: %d, %s.\n", code, tstrerror(code));
- }
-
- /* timestamp */
- char* lines1[] = {
- "stb1 1626006833s 1i8 host=\"host0\"", "stb1 1626006833639000000ns 2i8 host=\"host0\"",
- "stb1 1626006833640000us 3i8 host=\"host0\"", "stb1 1626006833641123 4i8 host=\"host0\"",
- "stb1 1626006833651ms 5i8 host=\"host0\"", "stb1 0 6i8 host=\"host0\"",
- };
- code = taos_insert_telnet_lines(taos, lines1, 6);
- if (code) {
- printf("lines1 code: %d, %s.\n", code, tstrerror(code));
- }
-
- /* metric value */
- // tinyin
- char* lines2_0[] = {"stb2_0 1626006833651ms -127i8 host=\"host0\"", "stb2_0 1626006833652ms 127i8 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_0, 2);
- if (code) {
- printf("lines2_0 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // smallint
- char* lines2_1[] = {"stb2_1 1626006833651ms -32767i16 host=\"host0\"",
- "stb2_1 1626006833652ms 32767i16 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_1, 2);
- if (code) {
- printf("lines2_1 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // int
- char* lines2_2[] = {"stb2_2 1626006833651ms -2147483647i32 host=\"host0\"",
- "stb2_2 1626006833652ms 2147483647i32 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_2, 2);
- if (code) {
- printf("lines2_2 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // bigint
- char* lines2_3[] = {"stb2_3 1626006833651ms -9223372036854775807i64 host=\"host0\"",
- "stb2_3 1626006833652ms 9223372036854775807i64 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_3, 2);
- if (code) {
- printf("lines2_3 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // float
- char* lines2_4[] = {
- "stb2_4 1626006833610ms 3f32 host=\"host0\"", "stb2_4 1626006833620ms -3f32 host=\"host0\"",
- "stb2_4 1626006833630ms 3.4f32 host=\"host0\"", "stb2_4 1626006833640ms -3.4f32 host=\"host0\"",
- "stb2_4 1626006833650ms 3.4E10f32 host=\"host0\"", "stb2_4 1626006833660ms -3.4e10f32 host=\"host0\"",
- "stb2_4 1626006833670ms 3.4E+2f32 host=\"host0\"", "stb2_4 1626006833680ms -3.4e-2f32 host=\"host0\"",
- "stb2_4 1626006833690ms 3.15 host=\"host0\"", "stb2_4 1626006833700ms 3.4E38f32 host=\"host0\"",
- "stb2_4 1626006833710ms -3.4E38f32 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_4, 11);
- if (code) {
- printf("lines2_4 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // double
- char* lines2_5[] = {
- "stb2_5 1626006833610ms 3f64 host=\"host0\"", "stb2_5 1626006833620ms -3f64 host=\"host0\"",
- "stb2_5 1626006833630ms 3.4f64 host=\"host0\"", "stb2_5 1626006833640ms -3.4f64 host=\"host0\"",
- "stb2_5 1626006833650ms 3.4E10f64 host=\"host0\"", "stb2_5 1626006833660ms -3.4e10f64 host=\"host0\"",
- "stb2_5 1626006833670ms 3.4E+2f64 host=\"host0\"", "stb2_5 1626006833680ms -3.4e-2f64 host=\"host0\"",
- "stb2_5 1626006833690ms 1.7E308f64 host=\"host0\"", "stb2_5 1626006833700ms -1.7E308f64 host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_5, 10);
- if (code) {
- printf("lines2_5 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // bool
- char* lines2_6[] = {"stb2_6 1626006833610ms t host=\"host0\"", "stb2_6 1626006833620ms T host=\"host0\"",
- "stb2_6 1626006833630ms true host=\"host0\"", "stb2_6 1626006833640ms True host=\"host0\"",
- "stb2_6 1626006833650ms TRUE host=\"host0\"", "stb2_6 1626006833660ms f host=\"host0\"",
- "stb2_6 1626006833670ms F host=\"host0\"", "stb2_6 1626006833680ms false host=\"host0\"",
- "stb2_6 1626006833690ms False host=\"host0\"", "stb2_6 1626006833700ms FALSE host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_6, 10);
- if (code) {
- printf("lines2_6 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // binary
- char* lines2_7[] = {"stb2_7 1626006833610ms \"binary_val.!@#$%^&*\" host=\"host0\"",
- "stb2_7 1626006833620ms \"binary_val.:;,./?|+-=\" host=\"host0\"",
- "stb2_7 1626006833630ms \"binary_val.()[]{}<>\" host=\"host0\""};
- code = taos_insert_telnet_lines(taos, lines2_7, 3);
- if (code) {
- printf("lines2_7 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // nchar
- char* lines2_8[] = {
- "stb2_8 1626006833610ms L\"nchar_val数值一\" host=\"host0\"",
- "stb2_8 1626006833620ms L\"nchar_val数值二\" host=\"host0\"",
- };
- code = taos_insert_telnet_lines(taos, lines2_8, 2);
- if (code) {
- printf("lines2_8 code: %d, %s.\n", code, tstrerror(code));
- }
-
- /* tags */
- // tag value types
- char* lines3_0[] = {
- "stb3_0 1626006833610ms 1 "
- "t1=127i8,t2=32767i16,t3=2147483647i32,t4=9223372036854775807i64,t5=3.4E38f32,t6=1.7E308f64,t7=true,t8=\"binary_"
- "val_1\",t9=L\"标签值1\"",
- "stb3_0 1626006833610ms 2 "
- "t1=-127i8,t2=-32767i16,t3=-2147483647i32,t4=-9223372036854775807i64,t5=-3.4E38f32,t6=-1.7E308f64,t7=false,t8="
- "\"binary_val_2\",t9=L\"标签值2\""};
- code = taos_insert_telnet_lines(taos, lines3_0, 2);
- if (code) {
- printf("lines3_0 code: %d, %s.\n", code, tstrerror(code));
- }
-
- // tag ID as child table name
- char* lines3_1[] = {"stb3_1 1626006833610ms 1 id=\"child_table1\",host=\"host1\"",
- "stb3_1 1626006833610ms 2 host=\"host2\",iD=\"child_table2\"",
- "stb3_1 1626006833610ms 3 ID=\"child_table3\",host=\"host3\""};
- code = taos_insert_telnet_lines(taos, lines3_1, 3);
- if (code) {
- printf("lines3_1 code: %d, %s.\n", code, tstrerror(code));
- }
-
- return;
-}
-
-void verify_json_insert(TAOS* taos) {
- TAOS_RES* result;
-
- result = taos_query(taos, "drop database if exists db;");
- taos_free_result(result);
- usleep(100000);
- result = taos_query(taos, "create database db precision 'ms';");
- taos_free_result(result);
- usleep(100000);
-
- (void)taos_select_db(taos, "db");
- int32_t code = 0;
-
- char* message =
- "{ \
- \"metric\":\"cpu_load_0\", \
- \"timestamp\": 1626006833610123, \
- \"value\": 55.5, \
- \"tags\": \
- { \
- \"host\": \"ubuntu\", \
- \"interface1\": \"eth0\", \
- \"Id\": \"tb0\" \
- } \
- }";
-
- code = taos_insert_json_payload(taos, message);
- if (code) {
- printf("payload_0 code: %d, %s.\n", code, tstrerror(code));
- }
-
- char* message1 =
- "[ \
- { \
- \"metric\":\"cpu_load_1\", \
- \"timestamp\": 1626006833610123, \
- \"value\": 55.5, \
- \"tags\": \
- { \
- \"host\": \"ubuntu\", \
- \"interface\": \"eth1\", \
- \"Id\": \"tb1\" \
- } \
- }, \
- { \
- \"metric\":\"cpu_load_2\", \
- \"timestamp\": 1626006833610123, \
- \"value\": 55.5, \
- \"tags\": \
- { \
- \"host\": \"ubuntu\", \
- \"interface\": \"eth2\", \
- \"Id\": \"tb2\" \
- } \
- } \
- ]";
-
- code = taos_insert_json_payload(taos, message1);
- if (code) {
- printf("payload_1 code: %d, %s.\n", code, tstrerror(code));
- }
-
- char* message2 =
- "[ \
- { \
- \"metric\":\"cpu_load_3\", \
- \"timestamp\": \
- { \
- \"value\": 1626006833610123, \
- \"type\": \"us\" \
- }, \
- \"value\": \
- { \
- \"value\": 55, \
- \"type\": \"int\" \
- }, \
- \"tags\": \
- { \
- \"host\": \
- { \
- \"value\": \"ubuntu\", \
- \"type\": \"binary\" \
- }, \
- \"interface\": \
- { \
- \"value\": \"eth3\", \
- \"type\": \"nchar\" \
- }, \
- \"ID\": \"tb3\", \
- \"port\": \
- { \
- \"value\": 4040, \
- \"type\": \"int\" \
- } \
- } \
- }, \
- { \
- \"metric\":\"cpu_load_4\", \
- \"timestamp\": 1626006833610123, \
- \"value\": 66.6, \
- \"tags\": \
- { \
- \"host\": \"ubuntu\", \
- \"interface\": \"eth4\", \
- \"Id\": \"tb4\" \
- } \
- } \
- ]";
- code = taos_insert_json_payload(taos, message2);
- if (code) {
- printf("payload_2 code: %d, %s.\n", code, tstrerror(code));
- }
-
- cJSON *payload, *tags;
- char* payload_str;
-
- /* Default format */
- // number
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_0");
- cJSON_AddNumberToObject(payload, "timestamp", 1626006833610123);
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_0 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // true
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_1");
- cJSON_AddNumberToObject(payload, "timestamp", 1626006833610123);
- cJSON_AddTrueToObject(payload, "value");
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_1 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // false
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_2");
- cJSON_AddNumberToObject(payload, "timestamp", 1626006833610123);
- cJSON_AddFalseToObject(payload, "value");
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_2 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // string
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_3");
- cJSON_AddNumberToObject(payload, "timestamp", 1626006833610123);
- cJSON_AddStringToObject(payload, "value", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_3 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // timestamp 0 -> current time
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_4");
- cJSON_AddNumberToObject(payload, "timestamp", 0);
- cJSON_AddNumberToObject(payload, "value", 123);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_4 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // ID
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb0_5");
- cJSON_AddNumberToObject(payload, "timestamp", 0);
- cJSON_AddNumberToObject(payload, "value", 123);
- tags = cJSON_CreateObject();
- cJSON_AddStringToObject(tags, "ID", "tb0_5");
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddStringToObject(tags, "iD", "tb000");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddStringToObject(tags, "id", "tb555");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload0_5 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- /* Nested format */
- // timestamp
- cJSON* timestamp;
- // seconds
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb1_0");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload1_0 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // milleseconds
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb1_1");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833610);
- cJSON_AddStringToObject(timestamp, "type", "ms");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload1_1 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // microseconds
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb1_2");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833610123);
- cJSON_AddStringToObject(timestamp, "type", "us");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload1_2 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // nanoseconds
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb1_3");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833610123321);
- cJSON_AddStringToObject(timestamp, "type", "ns");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload1_3 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // now
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb1_4");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 0);
- cJSON_AddStringToObject(timestamp, "type", "ns");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- cJSON_AddNumberToObject(payload, "value", 10);
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload1_4 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // metric value
- cJSON* metric_val;
- // bool
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_0");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddTrueToObject(metric_val, "value");
- cJSON_AddStringToObject(metric_val, "type", "bool");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_0 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // tinyint
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_1");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 127);
- cJSON_AddStringToObject(metric_val, "type", "tinyint");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_1 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // smallint
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_2");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 32767);
- cJSON_AddStringToObject(metric_val, "type", "smallint");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_2 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // int
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_3");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 2147483647);
- cJSON_AddStringToObject(metric_val, "type", "int");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_3 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // bigint
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_4");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 9223372036854775807);
- cJSON_AddStringToObject(metric_val, "type", "bigint");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_4 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // float
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_5");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 11.12345);
- cJSON_AddStringToObject(metric_val, "type", "float");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_5 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // double
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_6");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddNumberToObject(metric_val, "value", 22.123456789);
- cJSON_AddStringToObject(metric_val, "type", "double");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_6 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // binary
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_7");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddStringToObject(metric_val, "value", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddStringToObject(metric_val, "type", "binary");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_7 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // nchar
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb2_8");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddStringToObject(metric_val, "value", "你好");
- cJSON_AddStringToObject(metric_val, "type", "nchar");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
- cJSON_AddTrueToObject(tags, "t1");
- cJSON_AddFalseToObject(tags, "t2");
- cJSON_AddNumberToObject(tags, "t3", 10);
- cJSON_AddStringToObject(tags, "t4", "123_abc_.!@#$%^&*:;,./?|+-=()[]{}<>");
- cJSON_AddItemToObject(payload, "tags", tags);
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload2_8 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-
- // tag value
- cJSON* tag;
-
- payload = cJSON_CreateObject();
- cJSON_AddStringToObject(payload, "metric", "stb3_0");
-
- timestamp = cJSON_CreateObject();
- cJSON_AddNumberToObject(timestamp, "value", 1626006833);
- cJSON_AddStringToObject(timestamp, "type", "s");
- cJSON_AddItemToObject(payload, "timestamp", timestamp);
-
- metric_val = cJSON_CreateObject();
- cJSON_AddStringToObject(metric_val, "value", "hello");
- cJSON_AddStringToObject(metric_val, "type", "nchar");
- cJSON_AddItemToObject(payload, "value", metric_val);
-
- tags = cJSON_CreateObject();
-
- tag = cJSON_CreateObject();
- cJSON_AddTrueToObject(tag, "value");
- cJSON_AddStringToObject(tag, "type", "bool");
- cJSON_AddItemToObject(tags, "t1", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddFalseToObject(tag, "value");
- cJSON_AddStringToObject(tag, "type", "bool");
- cJSON_AddItemToObject(tags, "t2", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 127);
- cJSON_AddStringToObject(tag, "type", "tinyint");
- cJSON_AddItemToObject(tags, "t3", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 32767);
- cJSON_AddStringToObject(tag, "type", "smallint");
- cJSON_AddItemToObject(tags, "t4", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 2147483647);
- cJSON_AddStringToObject(tag, "type", "int");
- cJSON_AddItemToObject(tags, "t5", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 9223372036854775807);
- cJSON_AddStringToObject(tag, "type", "bigint");
- cJSON_AddItemToObject(tags, "t6", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 11.12345);
- cJSON_AddStringToObject(tag, "type", "float");
- cJSON_AddItemToObject(tags, "t7", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddNumberToObject(tag, "value", 22.1234567890);
- cJSON_AddStringToObject(tag, "type", "double");
- cJSON_AddItemToObject(tags, "t8", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddStringToObject(tag, "value", "binary_val");
- cJSON_AddStringToObject(tag, "type", "binary");
- cJSON_AddItemToObject(tags, "t9", tag);
-
- tag = cJSON_CreateObject();
- cJSON_AddStringToObject(tag, "value", "你好");
- cJSON_AddStringToObject(tag, "type", "nchar");
- cJSON_AddItemToObject(tags, "t10", tag);
-
- cJSON_AddItemToObject(payload, "tags", tags);
-
- payload_str = cJSON_Print(payload);
- // printf("%s\n", payload_str);
-
- code = taos_insert_json_payload(taos, payload_str);
- if (code) {
- printf("payload3_0 code: %d, %s.\n", code, tstrerror(code));
- }
- free(payload_str);
- cJSON_Delete(payload);
-}
-
-int main(int argc, char* argv[]) {
- const char* host = "127.0.0.1";
- const char* user = "root";
- const char* passwd = "taosdata";
-
- taos_options(TSDB_OPTION_TIMEZONE, "GMT-8");
- TAOS* taos = taos_connect(host, user, passwd, "", 0);
- if (taos == NULL) {
- printf("\033[31mfailed to connect to db, reason:%s\033[0m\n", taos_errstr(taos));
- exit(1);
- }
-
- char* info = taos_get_server_info(taos);
- printf("server info: %s\n", info);
- info = taos_get_client_info(taos);
- printf("client info: %s\n", info);
-
- printf("************ verify schema-less *************\n");
- verify_schema_less(taos);
-
- printf("************ verify telnet-insert *************\n");
- verify_telnet_insert(taos);
-
- printf("************ verify json-insert *************\n");
- verify_json_insert(taos);
-
- printf("************ verify query *************\n");
- verify_query(taos);
-
- printf("********* verify async query **********\n");
- verify_async(taos);
-
- printf("*********** verify subscribe ************\n");
- verify_subscribe(taos);
-
- printf("************ verify prepare *************\n");
- verify_prepare(taos);
-
- printf("************ verify prepare2 *************\n");
- verify_prepare2(taos);
- printf("************ verify prepare3 *************\n");
- verify_prepare3(taos);
-
- printf("************ verify stream *************\n");
- verify_stream(taos);
- printf("done\n");
- taos_close(taos);
- taos_cleanup();
-}
diff --git a/examples/c/asyncdemo.c b/examples/c/asyncdemo.c
index 07e61b871e..c86cd44354 100644
--- a/examples/c/asyncdemo.c
+++ b/examples/c/asyncdemo.c
@@ -23,8 +23,8 @@
#include
#include
#include
-
-#include "../../../include/client/taos.h"
+#include
+#include "taos.h"
int points = 5;
int numOfTables = 3;
@@ -35,7 +35,7 @@ int64_t st, et;
typedef struct {
int id;
TAOS *taos;
- char name[16];
+ char name[32];
time_t timeStamp;
int value;
int rowsInserted;
@@ -230,7 +230,7 @@ void taos_insert_call_back(void *param, TAOS_RES *tres, int code)
if (tablesInsertProcessed >= numOfTables) {
gettimeofday(&systemTime, NULL);
et = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
- printf("%lld mseconds to insert %d data points\n", (et - st) / 1000, points*numOfTables);
+ printf("%" PRId64 " mseconds to insert %d data points\n", (et - st) / 1000, points*numOfTables);
}
}
@@ -267,7 +267,7 @@ void taos_retrieve_call_back(void *param, TAOS_RES *tres, int numOfRows)
if (tablesSelectProcessed >= numOfTables) {
gettimeofday(&systemTime, NULL);
et = systemTime.tv_sec * 1000000 + systemTime.tv_usec;
- printf("%lld mseconds to query %d data rows\n", (et - st) / 1000, points * numOfTables);
+ printf("%" PRId64 " mseconds to query %d data rows\n", (et - st) / 1000, points * numOfTables);
}
taos_free_result(tres);
diff --git a/examples/c/demo.c b/examples/c/demo.c
index c3d9a5e96a..2eda8cd811 100644
--- a/examples/c/demo.c
+++ b/examples/c/demo.c
@@ -20,7 +20,7 @@
#include
#include
#include
-#include "../../../include/client/taos.h" // TAOS header file
+#include "taos.h" // TAOS header file
static void queryDB(TAOS *taos, char *command) {
int i;
diff --git a/examples/c/epoll.c b/examples/c/epoll.c
deleted file mode 100644
index 284268ac43..0000000000
--- a/examples/c/epoll.c
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-// how to use to do a pressure-test upon eok
-// tester: cat /dev/urandom | nc -c
-// testee: ./debug/build/bin/epoll -l > /dev/null
-// compare against: nc -l > /dev/null
-// monitor and compare : glances
-
-#ifdef __APPLE__
-#include "osEok.h"
-#else // __APPLE__
-#include
-#endif // __APPLE__
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#define D(fmt, ...) fprintf(stderr, "%s[%d]%s(): " fmt "\n", basename(__FILE__), __LINE__, __func__, ##__VA_ARGS__)
-#define A(statement, fmt, ...) do { \
- if (statement) break; \
- fprintf(stderr, "%s[%d]%s(): assert [%s] failed: %d[%s]: " fmt "\n", \
- basename(__FILE__), __LINE__, __func__, \
- #statement, errno, strerror(errno), \
- ##__VA_ARGS__); \
- abort(); \
-} while (0)
-
-#define E(fmt, ...) do { \
- fprintf(stderr, "%s[%d]%s(): %d[%s]: " fmt "\n", \
- basename(__FILE__), __LINE__, __func__, \
- errno, strerror(errno), \
- ##__VA_ARGS__); \
-} while (0)
-
-#include "os.h"
-
-typedef struct ep_s ep_t;
-struct ep_s {
- int ep;
-
- pthread_mutex_t lock;
- int sv[2]; // 0 for read, 1 for write;
- pthread_t thread;
-
- volatile unsigned int stopping:1;
- volatile unsigned int waiting:1;
- volatile unsigned int wakenup:1;
-};
-
-static int ep_dummy = 0;
-
-static ep_t* ep_create(void);
-static void ep_destroy(ep_t *ep);
-static void* routine(void* arg);
-static int open_listen(unsigned short port);
-
-typedef struct fde_s fde_t;
-struct fde_s {
- int skt;
- void (*on_event)(ep_t *ep, struct epoll_event *events, fde_t *client);
-};
-
-static void listen_event(ep_t *ep, struct epoll_event *ev, fde_t *client);
-static void null_event(ep_t *ep, struct epoll_event *ev, fde_t *client);
-
-#define usage(arg0, fmt, ...) do { \
- if (fmt[0]) { \
- fprintf(stderr, "" fmt "\n", ##__VA_ARGS__); \
- } \
- fprintf(stderr, "usage:\n"); \
- fprintf(stderr, " %s -l : specify listenning port\n", arg0); \
-} while (0)
-
-int main(int argc, char *argv[]) {
- char *prg = basename(argv[0]);
- if (argc==1) {
- usage(prg, "");
- return 0;
- }
- ep_t* ep = ep_create();
- A(ep, "failed");
- for (int i=1; i=argc) {
- usage(prg, "expecting after -l, but got nothing");
- return 1; // confirmed potential leakage
- }
- arg = argv[i];
- int port = atoi(arg);
- int skt = open_listen(port);
- if (skt==-1) continue;
- fde_t *client = (fde_t*)calloc(1, sizeof(*client));
- if (!client) {
- E("out of memory");
- close(skt);
- continue;
- }
- client->skt = skt;
- client->on_event = listen_event;
- struct epoll_event ev = {0};
- ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
- ev.data.ptr = client;
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ev), "");
- continue;
- }
- usage(prg, "unknown argument: [%s]", arg);
- return 1;
- }
- char *line = NULL;
- size_t linecap = 0;
- ssize_t linelen;
- while ((linelen = getline(&line, &linecap, stdin)) > 0) {
- line[strlen(line)-1] = '\0';
- if (0==strcmp(line, "exit")) break;
- if (0==strcmp(line, "quit")) break;
- if (line==strstr(line, "close")) {
- int fd = 0;
- sscanf(line, "close %d", &fd);
- if (fd<=2) {
- fprintf(stderr, "fd [%d] invalid\n", fd);
- continue;
- }
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_DEL, fd, NULL), "");
- continue;
- }
- if (strlen(line)==0) continue;
- fprintf(stderr, "unknown cmd:[%s]\n", line);
- }
- ep_destroy(ep);
- D("");
- return 0;
-}
-
-ep_t* ep_create(void) {
- ep_t *ep = (ep_t*)calloc(1, sizeof(*ep));
- A(ep, "out of memory");
- A(-1!=(ep->ep = epoll_create(1)), "");
- ep->sv[0] = -1;
- ep->sv[1] = -1;
- A(0==socketpair(AF_LOCAL, SOCK_STREAM, 0, ep->sv), "");
- A(0==pthread_mutex_init(&ep->lock, NULL), "");
- A(0==pthread_mutex_lock(&ep->lock), "");
- struct epoll_event ev = {0};
- ev.events = EPOLLIN;
- ev.data.ptr = &ep_dummy;
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, ep->sv[0], &ev), "");
- A(0==pthread_create(&ep->thread, NULL, routine, ep), "");
- A(0==pthread_mutex_unlock(&ep->lock), "");
- return ep;
-}
-
-static void ep_destroy(ep_t *ep) {
- A(ep, "invalid argument");
- ep->stopping = 1;
- A(1==send(ep->sv[1], "1", 1, 0), "");
- A(0==pthread_join(ep->thread, NULL), "");
- A(0==pthread_mutex_destroy(&ep->lock), "");
- A(0==close(ep->sv[0]), "");
- A(0==close(ep->sv[1]), "");
- A(0==close(ep->ep), "");
- free(ep);
-}
-
-static void* routine(void* arg) {
- A(arg, "invalid argument");
- ep_t *ep = (ep_t*)arg;
-
- while (!ep->stopping) {
- struct epoll_event evs[10];
- memset(evs, 0, sizeof(evs));
-
- A(0==pthread_mutex_lock(&ep->lock), "");
- A(ep->waiting==0, "internal logic error");
- ep->waiting = 1;
- A(0==pthread_mutex_unlock(&ep->lock), "");
-
- int r = epoll_wait(ep->ep, evs, sizeof(evs)/sizeof(evs[0]), -1);
- A(r>0, "indefinite epoll_wait shall not timeout:[%d]", r);
-
- A(0==pthread_mutex_lock(&ep->lock), "");
- A(ep->waiting==1, "internal logic error");
- ep->waiting = 0;
- A(0==pthread_mutex_unlock(&ep->lock), "");
-
- for (int i=0; idata.ptr == &ep_dummy) {
- char c = '\0';
- A(1==recv(ep->sv[0], &c, 1, 0), "internal logic error");
- A(0==pthread_mutex_lock(&ep->lock), "");
- ep->wakenup = 0;
- A(0==pthread_mutex_unlock(&ep->lock), "");
- continue;
- }
- A(ev->data.ptr, "internal logic error");
- fde_t *client = (fde_t*)ev->data.ptr;
- client->on_event(ep, ev, client);
- continue;
- }
- }
- return NULL;
-}
-
-static int open_listen(unsigned short port) {
- int r = 0;
- int skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (skt==-1) {
- E("socket() failed");
- return -1;
- }
- do {
- struct sockaddr_in si = {0};
- si.sin_family = AF_INET;
- si.sin_addr.s_addr = inet_addr("0.0.0.0");
- si.sin_port = htons(port);
- r = bind(skt, (struct sockaddr*)&si, sizeof(si));
- if (r) {
- E("bind(%u) failed", port);
- break;
- }
- r = listen(skt, 100);
- if (r) {
- E("listen() failed");
- break;
- }
- memset(&si, 0, sizeof(si));
- socklen_t len = sizeof(si);
- r = getsockname(skt, (struct sockaddr *)&si, &len);
- if (r) {
- E("getsockname() failed");
- }
- A(len==sizeof(si), "internal logic error");
- D("listenning at: %d", ntohs(si.sin_port));
- return skt;
- } while (0);
- close(skt);
- return -1;
-}
-
-static void listen_event(ep_t *ep, struct epoll_event *ev, fde_t *client) {
- A(ev->events & EPOLLIN, "internal logic error");
- struct sockaddr_in si = {0};
- socklen_t silen = sizeof(si);
- int skt = accept(client->skt, (struct sockaddr*)&si, &silen);
- A(skt!=-1, "internal logic error");
- fde_t *server = (fde_t*)calloc(1, sizeof(*server));
- if (!server) {
- close(skt);
- return;
- }
- server->skt = skt;
- server->on_event = null_event;
- struct epoll_event ee = {0};
- ee.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
- ee.data.ptr = server;
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ee), "");
-}
-
-static void null_event(ep_t *ep, struct epoll_event *ev, fde_t *client) {
- if (ev->events & EPOLLIN) {
- char buf[8192];
- int n = recv(client->skt, buf, sizeof(buf), 0);
- A(n>=0 && n<=sizeof(buf), "internal logic error:[%d]", n);
- A(n==fwrite(buf, 1, n, stdout), "internal logic error");
- }
- if (ev->events & (EPOLLERR | EPOLLHUP | EPOLLRDHUP)) {
- A(0==pthread_mutex_lock(&ep->lock), "");
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_DEL, client->skt, NULL), "");
- A(0==pthread_mutex_unlock(&ep->lock), "");
- close(client->skt);
- client->skt = -1;
- client->on_event = NULL;
- free(client);
- }
-}
-
diff --git a/examples/c/makefile b/examples/c/makefile
index c85eb4adc5..244d13fad7 100644
--- a/examples/c/makefile
+++ b/examples/c/makefile
@@ -7,22 +7,21 @@ LFLAGS = '-Wl,-rpath,/usr/local/taos/driver/' -ltaos -lpthread -lm -lrt
CFLAGS = -O3 -g -Wall -Wno-deprecated -fPIC -Wno-unused-result -Wconversion \
-Wno-char-subscripts -D_REENTRANT -Wno-format -D_REENTRANT -DLINUX \
-Wno-unused-function -D_M_X64 -I/usr/local/taos/include -std=gnu99 \
- -I../../../deps/cJson/inc
+ -I/usr/local/include/cjson
all: $(TARGET)
exe:
gcc $(CFLAGS) ./asyncdemo.c -o $(ROOT)asyncdemo $(LFLAGS)
gcc $(CFLAGS) ./demo.c -o $(ROOT)demo $(LFLAGS)
gcc $(CFLAGS) ./prepare.c -o $(ROOT)prepare $(LFLAGS)
- gcc $(CFLAGS) ./stream.c -o $(ROOT)stream $(LFLAGS)
- gcc $(CFLAGS) ./subscribe.c -o $(ROOT)subscribe $(LFLAGS)
- gcc $(CFLAGS) ./apitest.c -o $(ROOT)apitest $(LFLAGS)
+ gcc $(CFLAGS) ./stream_demo.c -o $(ROOT)stream_demo $(LFLAGS)
+ gcc $(CFLAGS) ./tmq.c -o $(ROOT)tmq $(LFLAGS)
+ gcc $(CFLAGS) ./schemaless.c -o $(ROOT)schemaless $(LFLAGS)
clean:
rm $(ROOT)asyncdemo
rm $(ROOT)demo
rm $(ROOT)prepare
- rm $(ROOT)batchprepare
- rm $(ROOT)stream
- rm $(ROOT)subscribe
- rm $(ROOT)apitest
+ rm $(ROOT)stream_demo
+ rm $(ROOT)tmq
+ rm $(ROOT)schemaless
diff --git a/examples/c/prepare.c b/examples/c/prepare.c
index f0341cfe12..4f05b6fb4c 100644
--- a/examples/c/prepare.c
+++ b/examples/c/prepare.c
@@ -4,7 +4,7 @@
#include
#include
#include
-#include "../../../include/client/taos.h"
+#include "taos.h"
void taosMsleep(int mseconds);
@@ -70,70 +70,89 @@ int main(int argc, char *argv[])
char blob[80];
} v = {0};
+ int32_t boolLen = sizeof(int8_t);
+ int32_t sintLen = sizeof(int16_t);
+ int32_t intLen = sizeof(int32_t);
+ int32_t bintLen = sizeof(int64_t);
+ int32_t floatLen = sizeof(float);
+ int32_t doubleLen = sizeof(double);
+ int32_t binLen = sizeof(v.bin);
+ int32_t ncharLen = 30;
+
stmt = taos_stmt_init(taos);
- TAOS_BIND params[10];
+ TAOS_MULTI_BIND params[10];
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].length = &bintLen;
params[0].is_null = NULL;
+ params[0].num = 1;
params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
params[1].buffer_length = sizeof(v.b);
params[1].buffer = &v.b;
- params[1].length = ¶ms[1].buffer_length;
+ params[1].length = &boolLen;
params[1].is_null = NULL;
+ params[1].num = 1;
params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
params[2].buffer_length = sizeof(v.v1);
params[2].buffer = &v.v1;
- params[2].length = ¶ms[2].buffer_length;
+ params[2].length = &boolLen;
params[2].is_null = NULL;
+ params[2].num = 1;
params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
params[3].buffer_length = sizeof(v.v2);
params[3].buffer = &v.v2;
- params[3].length = ¶ms[3].buffer_length;
+ params[3].length = &sintLen;
params[3].is_null = NULL;
+ params[3].num = 1;
params[4].buffer_type = TSDB_DATA_TYPE_INT;
params[4].buffer_length = sizeof(v.v4);
params[4].buffer = &v.v4;
- params[4].length = ¶ms[4].buffer_length;
+ params[4].length = &intLen;
params[4].is_null = NULL;
+ params[4].num = 1;
params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
params[5].buffer_length = sizeof(v.v8);
params[5].buffer = &v.v8;
- params[5].length = ¶ms[5].buffer_length;
+ params[5].length = &bintLen;
params[5].is_null = NULL;
+ params[5].num = 1;
params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
params[6].buffer_length = sizeof(v.f4);
params[6].buffer = &v.f4;
- params[6].length = ¶ms[6].buffer_length;
+ params[6].length = &floatLen;
params[6].is_null = NULL;
+ params[6].num = 1;
params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
params[7].buffer_length = sizeof(v.f8);
params[7].buffer = &v.f8;
- params[7].length = ¶ms[7].buffer_length;
+ params[7].length = &doubleLen;
params[7].is_null = NULL;
+ params[7].num = 1;
params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
params[8].buffer_length = sizeof(v.bin);
params[8].buffer = v.bin;
- params[8].length = ¶ms[8].buffer_length;
+ params[8].length = &binLen;
params[8].is_null = NULL;
+ params[8].num = 1;
strcpy(v.blob, "一二三四五六七八九十");
params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
- params[9].buffer_length = strlen(v.blob);
+ params[9].buffer_length = sizeof(v.blob);
params[9].buffer = v.blob;
- params[9].length = ¶ms[9].buffer_length;
+ params[9].length = &ncharLen;
params[9].is_null = NULL;
+ params[9].num = 1;
- int is_null = 1;
+ char is_null = 1;
sql = "insert into m1 values(?,?,?,?,?,?,?,?,?,?)";
code = taos_stmt_prepare(stmt, sql, 0);
@@ -153,7 +172,7 @@ int main(int argc, char *argv[])
v.v8 = (int64_t)(i * 8);
v.f4 = (float)(i * 40);
v.f8 = (double)(i * 80);
- for (int j = 0; j < sizeof(v.bin) - 1; ++j) {
+ for (int j = 0; j < sizeof(v.bin); ++j) {
v.bin[j] = (char)(i + '0');
}
diff --git a/examples/c/schemaless.c b/examples/c/schemaless.c
index 99aa361b0a..328a663ae7 100644
--- a/examples/c/schemaless.c
+++ b/examples/c/schemaless.c
@@ -1,32 +1,17 @@
-#include "../../../include/client/taos.h"
-#include "os.h"
-#include "taoserror.h"
-
+#include "taos.h"
#include
#include
#include
#include
#include
+#include
+#include
+
int numSuperTables = 8;
int numChildTables = 4;
int numRowsPerChildTable = 2048;
-void shuffle(char**lines, size_t n)
-{
- if (n > 1)
- {
- size_t i;
- for (i = 0; i < n - 1; i++)
- {
- size_t j = i + taosRand() / (RAND_MAX / (n - i) + 1);
- char* t = lines[j];
- lines[j] = lines[i];
- lines[i] = t;
- }
- }
-}
-
static int64_t getTimeInUs() {
struct timeval systemTime;
gettimeofday(&systemTime, NULL);
@@ -46,7 +31,7 @@ int main(int argc, char* argv[]) {
exit(1);
}
- char* info = taos_get_server_info(taos);
+ const char* info = taos_get_server_info(taos);
printf("server info: %s\n", info);
info = taos_get_client_info(taos);
printf("client info: %s\n", info);
@@ -61,9 +46,10 @@ int main(int argc, char* argv[]) {
time_t ct = time(0);
int64_t ts = ct * 1000;
- char* lineFormat = "sta%d,t0=true,t1=127i8,t2=32767i16,t3=%di32,t4=9223372036854775807i64,t9=11.12345f32,t10=22.123456789f64,t11=\"binaryTagValue\",t12=L\"ncharTagValue\" c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=254u8,c6=32770u16,c7=2147483699u32,c8=9223372036854775899u64,c9=11.12345f32,c10=22.123456789f64,c11=\"binaryValue\",c12=L\"ncharValue\" %lldms";
+ char* lineFormat = "sta%d,t0=true,t1=127i8,t2=32767i16,t3=%di32,t4=9223372036854775807i64,t9=11.12345f32,t10=22.123456789f64,t11=\"binaryTagValue\",t12=L\"ncharTagValue\" c0=true,c1=127i8,c2=32767i16,c3=2147483647i32,c4=9223372036854775807i64,c5=254u8,c6=32770u16,c7=2147483699u32,c8=9223372036854775899u64,c9=11.12345f32,c10=22.123456789f64,c11=\"binaryValue\",c12=L\"ncharValue\" %" PRId64;
- char** lines = calloc(numSuperTables * numChildTables * numRowsPerChildTable, sizeof(char*));
+ int lineNum = numSuperTables * numChildTables * numRowsPerChildTable;
+ char** lines = calloc((size_t)lineNum, sizeof(char*));
int l = 0;
for (int i = 0; i < numSuperTables; ++i) {
for (int j = 0; j < numChildTables; ++j) {
@@ -75,13 +61,13 @@ int main(int argc, char* argv[]) {
}
}
}
- //shuffle(lines, numSuperTables * numChildTables * numRowsPerChildTable);
printf("%s\n", "begin taos_insert_lines");
int64_t begin = getTimeInUs();
- int32_t code = taos_insert_lines(taos, lines, numSuperTables * numChildTables * numRowsPerChildTable);
+ TAOS_RES *res = taos_schemaless_insert(taos, lines, lineNum, TSDB_SML_LINE_PROTOCOL, TSDB_SML_TIMESTAMP_MILLI_SECONDS);
int64_t end = getTimeInUs();
- printf("code: %d, %s. time used: %"PRId64"\n", code, tstrerror(code), end-begin);
+ printf("code: %s. time used: %" PRId64 "\n", taos_errstr(res), end-begin);
+ taos_free_result(res);
return 0;
}
diff --git a/examples/c/stream_demo.c b/examples/c/stream_demo.c
index 46c8297fba..46107c7e13 100644
--- a/examples/c/stream_demo.c
+++ b/examples/c/stream_demo.c
@@ -108,10 +108,13 @@ int32_t create_stream() {
}
int main(int argc, char* argv[]) {
- int code;
if (argc > 1) {
printf("env init\n");
- code = init_env();
+ int code = init_env();
+ if (code) {
+ return code;
+ }
+
}
create_stream();
}
diff --git a/examples/c/tmq.c b/examples/c/tmq.c
index 1147671ea1..eb41ad039a 100644
--- a/examples/c/tmq.c
+++ b/examples/c/tmq.c
@@ -20,10 +20,7 @@
#include
#include "taos.h"
-static int running = 1;
-static char dbName[64] = "tmqdb";
-static char stbName[64] = "stb";
-static char topicName[64] = "topicname";
+static int running = 1;
static int32_t msg_process(TAOS_RES* msg) {
char buf[1024];
@@ -43,8 +40,8 @@ static int32_t msg_process(TAOS_RES* msg) {
TAOS_FIELD* fields = taos_fetch_fields(msg);
int32_t numOfFields = taos_field_count(msg);
- int32_t* length = taos_fetch_lengths(msg);
- int32_t precision = taos_result_precision(msg);
+ // int32_t* length = taos_fetch_lengths(msg);
+ int32_t precision = taos_result_precision(msg);
rows++;
taos_print_row(buf, row, fields, numOfFields);
printf("precision: %d, row content: %s\n", precision, buf);
@@ -62,10 +59,15 @@ static int32_t init_env() {
TAOS_RES* pRes;
// drop database if exists
printf("create database\n");
+ pRes = taos_query(pConn, "drop topic topicname");
+ if (taos_errno(pRes) != 0) {
+ printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes));
+ }
+ taos_free_result(pRes);
+
pRes = taos_query(pConn, "drop database if exists tmqdb");
if (taos_errno(pRes) != 0) {
printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes));
- return -1;
}
taos_free_result(pRes);
@@ -73,7 +75,7 @@ static int32_t init_env() {
pRes = taos_query(pConn, "create database tmqdb precision 'ns'");
if (taos_errno(pRes) != 0) {
printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
@@ -83,7 +85,7 @@ static int32_t init_env() {
pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))");
if (taos_errno(pRes) != 0) {
printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
@@ -92,28 +94,28 @@ static int32_t init_env() {
pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')");
if (taos_errno(pRes) != 0) {
printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
@@ -122,33 +124,37 @@ static int32_t init_env() {
pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes));
- return -1;
+ goto END;
}
taos_free_result(pRes);
-
taos_close(pConn);
return 0;
+
+END:
+ taos_free_result(pRes);
+ taos_close(pConn);
+ return -1;
}
int32_t create_topic() {
@@ -249,7 +255,7 @@ int main(int argc, char* argv[]) {
tmq_t* tmq = build_consumer();
if (NULL == tmq) {
- fprintf(stderr, "%% build_consumer() fail!\n");
+ fprintf(stderr, "build_consumer() fail!\n");
return -1;
}
@@ -259,7 +265,7 @@ int main(int argc, char* argv[]) {
}
if ((code = tmq_subscribe(tmq, topic_list))) {
- fprintf(stderr, "%% Failed to tmq_subscribe(): %s\n", tmq_err2str(code));
+ fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code));
}
tmq_list_destroy(topic_list);
@@ -267,9 +273,9 @@ int main(int argc, char* argv[]) {
code = tmq_consumer_close(tmq);
if (code) {
- fprintf(stderr, "%% Failed to close consumer: %s\n", tmq_err2str(code));
+ fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code));
} else {
- fprintf(stderr, "%% Consumer closed\n");
+ fprintf(stderr, "Consumer closed\n");
}
return 0;
diff --git a/include/client/taos.h b/include/client/taos.h
index 379363c51d..647f906d4f 100644
--- a/include/client/taos.h
+++ b/include/client/taos.h
@@ -59,6 +59,7 @@ typedef enum {
TSDB_OPTION_TIMEZONE,
TSDB_OPTION_CONFIGDIR,
TSDB_OPTION_SHELL_ACTIVITY_TIMER,
+ TSDB_OPTION_USE_ADAPTER,
TSDB_MAX_OPTIONS
} TSDB_OPTION;
@@ -218,7 +219,7 @@ DLL_EXPORT const void *taos_get_raw_block(TAOS_RES *res);
DLL_EXPORT int taos_get_db_route_info(TAOS *taos, const char *db, TAOS_DB_ROUTE_INFO *dbInfo);
DLL_EXPORT int taos_get_table_vgId(TAOS *taos, const char *db, const char *table, int *vgId);
-DLL_EXPORT int taos_load_table_info(TAOS *taos, const char *tableNameList);
+DLL_EXPORT int taos_load_table_info(TAOS *taos, const char *tableNameList);
/* --------------------------schemaless INTERFACE------------------------------- */
@@ -229,13 +230,14 @@ DLL_EXPORT TAOS_RES *taos_schemaless_insert_raw(TAOS *taos, char *lines, int len
int precision);
DLL_EXPORT TAOS_RES *taos_schemaless_insert_raw_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows,
int protocol, int precision, int64_t reqid);
-DLL_EXPORT TAOS_RES *taos_schemaless_insert_ttl(TAOS *taos, char *lines[], int numLines, int protocol, int precision, int32_t ttl);
+DLL_EXPORT TAOS_RES *taos_schemaless_insert_ttl(TAOS *taos, char *lines[], int numLines, int protocol, int precision,
+ int32_t ttl);
DLL_EXPORT TAOS_RES *taos_schemaless_insert_ttl_with_reqid(TAOS *taos, char *lines[], int numLines, int protocol,
- int precision, int32_t ttl, int64_t reqid);
+ int precision, int32_t ttl, int64_t reqid);
DLL_EXPORT TAOS_RES *taos_schemaless_insert_raw_ttl(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol,
- int precision, int32_t ttl);
+ int precision, int32_t ttl);
DLL_EXPORT TAOS_RES *taos_schemaless_insert_raw_ttl_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows,
- int protocol, int precision, int32_t ttl, int64_t reqid);
+ int protocol, int precision, int32_t ttl, int64_t reqid);
/* --------------------------TMQ INTERFACE------------------------------- */
@@ -308,7 +310,8 @@ DLL_EXPORT tmq_res_t tmq_get_res_type(TAOS_RES *res);
DLL_EXPORT int32_t tmq_get_raw(TAOS_RES *res, tmq_raw_data *raw);
DLL_EXPORT int32_t tmq_write_raw(TAOS *taos, tmq_raw_data raw);
DLL_EXPORT int taos_write_raw_block(TAOS *taos, int numOfRows, char *pData, const char *tbname);
-DLL_EXPORT int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const char* tbname, TAOS_FIELD *fields, int numFields);
+DLL_EXPORT int taos_write_raw_block_with_fields(TAOS *taos, int rows, char *pData, const char *tbname,
+ TAOS_FIELD *fields, int numFields);
DLL_EXPORT void tmq_free_raw(tmq_raw_data raw);
// Returning null means error. Returned result need to be freed by tmq_free_json_meta
DLL_EXPORT char *tmq_get_json_meta(TAOS_RES *res);
diff --git a/include/common/tcommon.h b/include/common/tcommon.h
index 6ec3d5db10..aad69862f0 100644
--- a/include/common/tcommon.h
+++ b/include/common/tcommon.h
@@ -195,6 +195,7 @@ typedef struct SDataBlockInfo {
uint32_t capacity;
SBlockID id;
int16_t hasVarCol;
+ int16_t dataLoad; // denote if the data is loaded or not
// TODO: optimize and remove following
int64_t version; // used for stream, and need serialization
@@ -203,8 +204,9 @@ typedef struct SDataBlockInfo {
STimeWindow calWin; // used for stream, do not serialize
TSKEY watermark; // used for stream
- char parTbName[TSDB_TABLE_NAME_LEN]; // used for stream partition
- STag* pTag; // used for stream partition
+ char parTbName[TSDB_TABLE_NAME_LEN]; // used for stream partition
+ int32_t tagLen;
+ void* pTag; // used for stream partition
} SDataBlockInfo;
typedef struct SSDataBlock {
@@ -238,22 +240,22 @@ typedef struct SVarColAttr {
// pBlockAgg->numOfNull == info.rows, all data are null
// pBlockAgg->numOfNull == 0, no data are null.
typedef struct SColumnInfoData {
- char* pData; // the corresponding block data in memory
+ char* pData; // the corresponding block data in memory
union {
char* nullbitmap; // bitmap, one bit for each item in the list
SVarColAttr varmeta;
};
- SColumnInfo info; // column info
- bool hasNull; // if current column data has null value.
+ SColumnInfo info; // column info
+ bool hasNull; // if current column data has null value.
} SColumnInfoData;
typedef struct SQueryTableDataCond {
uint64_t suid;
- int32_t order; // desc|asc order to iterate the data block
+ int32_t order; // desc|asc order to iterate the data block
int32_t numOfCols;
SColumnInfo* colList;
- int32_t* pSlotList; // the column output destation slot, and it may be null
- int32_t type; // data block load type:
+ int32_t* pSlotList; // the column output destation slot, and it may be null
+ int32_t type; // data block load type:
STimeWindow twindows;
int64_t startVersion;
int64_t endVersion;
diff --git a/include/common/tglobal.h b/include/common/tglobal.h
index 92672311d0..9e8a139b31 100644
--- a/include/common/tglobal.h
+++ b/include/common/tglobal.h
@@ -101,6 +101,7 @@ extern int32_t tsRedirectPeriod;
extern int32_t tsRedirectFactor;
extern int32_t tsRedirectMaxPeriod;
extern int32_t tsMaxRetryWaitTime;
+extern bool tsUseAdapter;
// client
extern int32_t tsMinSlidingTime;
diff --git a/include/common/tmsg.h b/include/common/tmsg.h
index bb1addf1b6..ad6077db09 100644
--- a/include/common/tmsg.h
+++ b/include/common/tmsg.h
@@ -68,7 +68,7 @@ typedef uint16_t tmsg_t;
static inline bool vnodeIsMsgBlock(tmsg_t type) {
return (type == TDMT_VND_CREATE_TABLE) || (type == TDMT_VND_ALTER_TABLE) || (type == TDMT_VND_DROP_TABLE) ||
- (type == TDMT_VND_UPDATE_TAG_VAL);
+ (type == TDMT_VND_UPDATE_TAG_VAL) || (type == TDMT_VND_ALTER_CONFIRM);
}
static inline bool syncUtilUserCommit(tmsg_t msgType) {
diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h
index a09c87eea8..04970ccc34 100644
--- a/include/common/ttokendef.h
+++ b/include/common/ttokendef.h
@@ -16,329 +16,330 @@
#ifndef _TD_COMMON_TOKEN_H_
#define _TD_COMMON_TOKEN_H_
-#define TK_OR 1
-#define TK_AND 2
-#define TK_UNION 3
-#define TK_ALL 4
-#define TK_MINUS 5
-#define TK_EXCEPT 6
-#define TK_INTERSECT 7
-#define TK_NK_BITAND 8
-#define TK_NK_BITOR 9
-#define TK_NK_LSHIFT 10
-#define TK_NK_RSHIFT 11
-#define TK_NK_PLUS 12
-#define TK_NK_MINUS 13
-#define TK_NK_STAR 14
-#define TK_NK_SLASH 15
-#define TK_NK_REM 16
-#define TK_NK_CONCAT 17
-#define TK_CREATE 18
-#define TK_ACCOUNT 19
-#define TK_NK_ID 20
-#define TK_PASS 21
-#define TK_NK_STRING 22
-#define TK_ALTER 23
-#define TK_PPS 24
-#define TK_TSERIES 25
-#define TK_STORAGE 26
-#define TK_STREAMS 27
-#define TK_QTIME 28
-#define TK_DBS 29
-#define TK_USERS 30
-#define TK_CONNS 31
-#define TK_STATE 32
-#define TK_USER 33
-#define TK_ENABLE 34
-#define TK_NK_INTEGER 35
-#define TK_SYSINFO 36
-#define TK_DROP 37
-#define TK_GRANT 38
-#define TK_ON 39
-#define TK_TO 40
-#define TK_REVOKE 41
-#define TK_FROM 42
-#define TK_SUBSCRIBE 43
-#define TK_NK_COMMA 44
-#define TK_READ 45
-#define TK_WRITE 46
-#define TK_NK_DOT 47
-#define TK_DNODE 48
-#define TK_PORT 49
-#define TK_DNODES 50
-#define TK_NK_IPTOKEN 51
-#define TK_FORCE 52
-#define TK_LOCAL 53
-#define TK_QNODE 54
-#define TK_BNODE 55
-#define TK_SNODE 56
-#define TK_MNODE 57
-#define TK_DATABASE 58
-#define TK_USE 59
-#define TK_FLUSH 60
-#define TK_TRIM 61
-#define TK_IF 62
-#define TK_NOT 63
-#define TK_EXISTS 64
-#define TK_BUFFER 65
-#define TK_CACHEMODEL 66
-#define TK_CACHESIZE 67
-#define TK_COMP 68
-#define TK_DURATION 69
-#define TK_NK_VARIABLE 70
-#define TK_MAXROWS 71
-#define TK_MINROWS 72
-#define TK_KEEP 73
-#define TK_PAGES 74
-#define TK_PAGESIZE 75
-#define TK_TSDB_PAGESIZE 76
-#define TK_PRECISION 77
-#define TK_REPLICA 78
-#define TK_STRICT 79
-#define TK_VGROUPS 80
-#define TK_SINGLE_STABLE 81
-#define TK_RETENTIONS 82
-#define TK_SCHEMALESS 83
-#define TK_WAL_LEVEL 84
-#define TK_WAL_FSYNC_PERIOD 85
-#define TK_WAL_RETENTION_PERIOD 86
-#define TK_WAL_RETENTION_SIZE 87
-#define TK_WAL_ROLL_PERIOD 88
-#define TK_WAL_SEGMENT_SIZE 89
-#define TK_STT_TRIGGER 90
-#define TK_TABLE_PREFIX 91
-#define TK_TABLE_SUFFIX 92
-#define TK_NK_COLON 93
-#define TK_MAX_SPEED 94
-#define TK_TABLE 95
-#define TK_NK_LP 96
-#define TK_NK_RP 97
-#define TK_STABLE 98
-#define TK_ADD 99
-#define TK_COLUMN 100
-#define TK_MODIFY 101
-#define TK_RENAME 102
-#define TK_TAG 103
-#define TK_SET 104
-#define TK_NK_EQ 105
-#define TK_USING 106
-#define TK_TAGS 107
-#define TK_COMMENT 108
-#define TK_BOOL 109
-#define TK_TINYINT 110
-#define TK_SMALLINT 111
-#define TK_INT 112
-#define TK_INTEGER 113
-#define TK_BIGINT 114
-#define TK_FLOAT 115
-#define TK_DOUBLE 116
-#define TK_BINARY 117
-#define TK_TIMESTAMP 118
-#define TK_NCHAR 119
-#define TK_UNSIGNED 120
-#define TK_JSON 121
-#define TK_VARCHAR 122
-#define TK_MEDIUMBLOB 123
-#define TK_BLOB 124
-#define TK_VARBINARY 125
-#define TK_DECIMAL 126
-#define TK_MAX_DELAY 127
-#define TK_WATERMARK 128
-#define TK_ROLLUP 129
-#define TK_TTL 130
-#define TK_SMA 131
-#define TK_DELETE_MARK 132
-#define TK_FIRST 133
-#define TK_LAST 134
-#define TK_SHOW 135
-#define TK_PRIVILEGES 136
-#define TK_DATABASES 137
-#define TK_TABLES 138
-#define TK_STABLES 139
-#define TK_MNODES 140
-#define TK_QNODES 141
-#define TK_FUNCTIONS 142
-#define TK_INDEXES 143
-#define TK_ACCOUNTS 144
-#define TK_APPS 145
-#define TK_CONNECTIONS 146
-#define TK_LICENCES 147
-#define TK_GRANTS 148
-#define TK_QUERIES 149
-#define TK_SCORES 150
-#define TK_TOPICS 151
-#define TK_VARIABLES 152
-#define TK_CLUSTER 153
-#define TK_BNODES 154
-#define TK_SNODES 155
-#define TK_TRANSACTIONS 156
-#define TK_DISTRIBUTED 157
-#define TK_CONSUMERS 158
-#define TK_SUBSCRIPTIONS 159
-#define TK_VNODES 160
-#define TK_LIKE 161
-#define TK_TBNAME 162
-#define TK_QTAGS 163
-#define TK_AS 164
-#define TK_INDEX 165
-#define TK_FUNCTION 166
-#define TK_INTERVAL 167
-#define TK_TOPIC 168
-#define TK_WITH 169
-#define TK_META 170
-#define TK_CONSUMER 171
-#define TK_GROUP 172
-#define TK_DESC 173
-#define TK_DESCRIBE 174
-#define TK_RESET 175
-#define TK_QUERY 176
-#define TK_CACHE 177
-#define TK_EXPLAIN 178
-#define TK_ANALYZE 179
-#define TK_VERBOSE 180
-#define TK_NK_BOOL 181
-#define TK_RATIO 182
-#define TK_NK_FLOAT 183
-#define TK_OUTPUTTYPE 184
-#define TK_AGGREGATE 185
-#define TK_BUFSIZE 186
-#define TK_STREAM 187
-#define TK_INTO 188
-#define TK_TRIGGER 189
-#define TK_AT_ONCE 190
-#define TK_WINDOW_CLOSE 191
-#define TK_IGNORE 192
-#define TK_EXPIRED 193
-#define TK_FILL_HISTORY 194
-#define TK_SUBTABLE 195
-#define TK_KILL 196
-#define TK_CONNECTION 197
-#define TK_TRANSACTION 198
-#define TK_BALANCE 199
-#define TK_VGROUP 200
-#define TK_MERGE 201
-#define TK_REDISTRIBUTE 202
-#define TK_SPLIT 203
-#define TK_DELETE 204
-#define TK_INSERT 205
-#define TK_NULL 206
-#define TK_NK_QUESTION 207
-#define TK_NK_ARROW 208
-#define TK_ROWTS 209
-#define TK_QSTART 210
-#define TK_QEND 211
-#define TK_QDURATION 212
-#define TK_WSTART 213
-#define TK_WEND 214
-#define TK_WDURATION 215
-#define TK_IROWTS 216
-#define TK_CAST 217
-#define TK_NOW 218
-#define TK_TODAY 219
-#define TK_TIMEZONE 220
-#define TK_CLIENT_VERSION 221
-#define TK_SERVER_VERSION 222
-#define TK_SERVER_STATUS 223
-#define TK_CURRENT_USER 224
-#define TK_COUNT 225
-#define TK_LAST_ROW 226
-#define TK_CASE 227
-#define TK_END 228
-#define TK_WHEN 229
-#define TK_THEN 230
-#define TK_ELSE 231
-#define TK_BETWEEN 232
-#define TK_IS 233
-#define TK_NK_LT 234
-#define TK_NK_GT 235
-#define TK_NK_LE 236
-#define TK_NK_GE 237
-#define TK_NK_NE 238
-#define TK_MATCH 239
-#define TK_NMATCH 240
-#define TK_CONTAINS 241
-#define TK_IN 242
-#define TK_JOIN 243
-#define TK_INNER 244
-#define TK_SELECT 245
-#define TK_DISTINCT 246
-#define TK_WHERE 247
-#define TK_PARTITION 248
-#define TK_BY 249
-#define TK_SESSION 250
-#define TK_STATE_WINDOW 251
-#define TK_EVENT_WINDOW 252
-#define TK_START 253
-#define TK_SLIDING 254
-#define TK_FILL 255
-#define TK_VALUE 256
-#define TK_NONE 257
-#define TK_PREV 258
-#define TK_LINEAR 259
-#define TK_NEXT 260
-#define TK_HAVING 261
-#define TK_RANGE 262
-#define TK_EVERY 263
-#define TK_ORDER 264
-#define TK_SLIMIT 265
-#define TK_SOFFSET 266
-#define TK_LIMIT 267
-#define TK_OFFSET 268
-#define TK_ASC 269
-#define TK_NULLS 270
-#define TK_ABORT 271
-#define TK_AFTER 272
-#define TK_ATTACH 273
-#define TK_BEFORE 274
-#define TK_BEGIN 275
-#define TK_BITAND 276
-#define TK_BITNOT 277
-#define TK_BITOR 278
-#define TK_BLOCKS 279
-#define TK_CHANGE 280
-#define TK_COMMA 281
-#define TK_COMPACT 282
-#define TK_CONCAT 283
-#define TK_CONFLICT 284
-#define TK_COPY 285
-#define TK_DEFERRED 286
-#define TK_DELIMITERS 287
-#define TK_DETACH 288
-#define TK_DIVIDE 289
-#define TK_DOT 290
-#define TK_EACH 291
-#define TK_FAIL 292
-#define TK_FILE 293
-#define TK_FOR 294
-#define TK_GLOB 295
-#define TK_ID 296
-#define TK_IMMEDIATE 297
-#define TK_IMPORT 298
-#define TK_INITIALLY 299
-#define TK_INSTEAD 300
-#define TK_ISNULL 301
-#define TK_KEY 302
-#define TK_MODULES 303
-#define TK_NK_BITNOT 304
-#define TK_NK_SEMI 305
-#define TK_NOTNULL 306
-#define TK_OF 307
-#define TK_PLUS 308
-#define TK_PRIVILEGE 309
-#define TK_RAISE 310
-#define TK_REPLACE 311
-#define TK_RESTRICT 312
-#define TK_ROW 313
-#define TK_SEMI 314
-#define TK_STAR 315
-#define TK_STATEMENT 316
-#define TK_STRING 317
-#define TK_TIMES 318
-#define TK_UPDATE 319
-#define TK_VALUES 320
-#define TK_VARIABLE 321
-#define TK_VIEW 322
-#define TK_WAL 323
+#define TK_OR 1
+#define TK_AND 2
+#define TK_UNION 3
+#define TK_ALL 4
+#define TK_MINUS 5
+#define TK_EXCEPT 6
+#define TK_INTERSECT 7
+#define TK_NK_BITAND 8
+#define TK_NK_BITOR 9
+#define TK_NK_LSHIFT 10
+#define TK_NK_RSHIFT 11
+#define TK_NK_PLUS 12
+#define TK_NK_MINUS 13
+#define TK_NK_STAR 14
+#define TK_NK_SLASH 15
+#define TK_NK_REM 16
+#define TK_NK_CONCAT 17
+#define TK_CREATE 18
+#define TK_ACCOUNT 19
+#define TK_NK_ID 20
+#define TK_PASS 21
+#define TK_NK_STRING 22
+#define TK_ALTER 23
+#define TK_PPS 24
+#define TK_TSERIES 25
+#define TK_STORAGE 26
+#define TK_STREAMS 27
+#define TK_QTIME 28
+#define TK_DBS 29
+#define TK_USERS 30
+#define TK_CONNS 31
+#define TK_STATE 32
+#define TK_USER 33
+#define TK_ENABLE 34
+#define TK_NK_INTEGER 35
+#define TK_SYSINFO 36
+#define TK_DROP 37
+#define TK_GRANT 38
+#define TK_ON 39
+#define TK_TO 40
+#define TK_REVOKE 41
+#define TK_FROM 42
+#define TK_SUBSCRIBE 43
+#define TK_NK_COMMA 44
+#define TK_READ 45
+#define TK_WRITE 46
+#define TK_NK_DOT 47
+#define TK_DNODE 48
+#define TK_PORT 49
+#define TK_DNODES 50
+#define TK_NK_IPTOKEN 51
+#define TK_FORCE 52
+#define TK_LOCAL 53
+#define TK_QNODE 54
+#define TK_BNODE 55
+#define TK_SNODE 56
+#define TK_MNODE 57
+#define TK_DATABASE 58
+#define TK_USE 59
+#define TK_FLUSH 60
+#define TK_TRIM 61
+#define TK_IF 62
+#define TK_NOT 63
+#define TK_EXISTS 64
+#define TK_BUFFER 65
+#define TK_CACHEMODEL 66
+#define TK_CACHESIZE 67
+#define TK_COMP 68
+#define TK_DURATION 69
+#define TK_NK_VARIABLE 70
+#define TK_MAXROWS 71
+#define TK_MINROWS 72
+#define TK_KEEP 73
+#define TK_PAGES 74
+#define TK_PAGESIZE 75
+#define TK_TSDB_PAGESIZE 76
+#define TK_PRECISION 77
+#define TK_REPLICA 78
+#define TK_VGROUPS 79
+#define TK_SINGLE_STABLE 80
+#define TK_RETENTIONS 81
+#define TK_SCHEMALESS 82
+#define TK_WAL_LEVEL 83
+#define TK_WAL_FSYNC_PERIOD 84
+#define TK_WAL_RETENTION_PERIOD 85
+#define TK_WAL_RETENTION_SIZE 86
+#define TK_WAL_ROLL_PERIOD 87
+#define TK_WAL_SEGMENT_SIZE 88
+#define TK_STT_TRIGGER 89
+#define TK_TABLE_PREFIX 90
+#define TK_TABLE_SUFFIX 91
+#define TK_NK_COLON 92
+#define TK_MAX_SPEED 93
+#define TK_TABLE 94
+#define TK_NK_LP 95
+#define TK_NK_RP 96
+#define TK_STABLE 97
+#define TK_ADD 98
+#define TK_COLUMN 99
+#define TK_MODIFY 100
+#define TK_RENAME 101
+#define TK_TAG 102
+#define TK_SET 103
+#define TK_NK_EQ 104
+#define TK_USING 105
+#define TK_TAGS 106
+#define TK_COMMENT 107
+#define TK_BOOL 108
+#define TK_TINYINT 109
+#define TK_SMALLINT 110
+#define TK_INT 111
+#define TK_INTEGER 112
+#define TK_BIGINT 113
+#define TK_FLOAT 114
+#define TK_DOUBLE 115
+#define TK_BINARY 116
+#define TK_TIMESTAMP 117
+#define TK_NCHAR 118
+#define TK_UNSIGNED 119
+#define TK_JSON 120
+#define TK_VARCHAR 121
+#define TK_MEDIUMBLOB 122
+#define TK_BLOB 123
+#define TK_VARBINARY 124
+#define TK_DECIMAL 125
+#define TK_MAX_DELAY 126
+#define TK_WATERMARK 127
+#define TK_ROLLUP 128
+#define TK_TTL 129
+#define TK_SMA 130
+#define TK_DELETE_MARK 131
+#define TK_FIRST 132
+#define TK_LAST 133
+#define TK_SHOW 134
+#define TK_PRIVILEGES 135
+#define TK_DATABASES 136
+#define TK_TABLES 137
+#define TK_STABLES 138
+#define TK_MNODES 139
+#define TK_QNODES 140
+#define TK_FUNCTIONS 141
+#define TK_INDEXES 142
+#define TK_ACCOUNTS 143
+#define TK_APPS 144
+#define TK_CONNECTIONS 145
+#define TK_LICENCES 146
+#define TK_GRANTS 147
+#define TK_QUERIES 148
+#define TK_SCORES 149
+#define TK_TOPICS 150
+#define TK_VARIABLES 151
+#define TK_CLUSTER 152
+#define TK_BNODES 153
+#define TK_SNODES 154
+#define TK_TRANSACTIONS 155
+#define TK_DISTRIBUTED 156
+#define TK_CONSUMERS 157
+#define TK_SUBSCRIPTIONS 158
+#define TK_VNODES 159
+#define TK_LIKE 160
+#define TK_TBNAME 161
+#define TK_QTAGS 162
+#define TK_AS 163
+#define TK_INDEX 164
+#define TK_FUNCTION 165
+#define TK_INTERVAL 166
+#define TK_COUNT 167
+#define TK_LAST_ROW 168
+#define TK_TOPIC 169
+#define TK_WITH 170
+#define TK_META 171
+#define TK_CONSUMER 172
+#define TK_GROUP 173
+#define TK_DESC 174
+#define TK_DESCRIBE 175
+#define TK_RESET 176
+#define TK_QUERY 177
+#define TK_CACHE 178
+#define TK_EXPLAIN 179
+#define TK_ANALYZE 180
+#define TK_VERBOSE 181
+#define TK_NK_BOOL 182
+#define TK_RATIO 183
+#define TK_NK_FLOAT 184
+#define TK_OUTPUTTYPE 185
+#define TK_AGGREGATE 186
+#define TK_BUFSIZE 187
+#define TK_STREAM 188
+#define TK_INTO 189
+#define TK_TRIGGER 190
+#define TK_AT_ONCE 191
+#define TK_WINDOW_CLOSE 192
+#define TK_IGNORE 193
+#define TK_EXPIRED 194
+#define TK_FILL_HISTORY 195
+#define TK_SUBTABLE 196
+#define TK_KILL 197
+#define TK_CONNECTION 198
+#define TK_TRANSACTION 199
+#define TK_BALANCE 200
+#define TK_VGROUP 201
+#define TK_MERGE 202
+#define TK_REDISTRIBUTE 203
+#define TK_SPLIT 204
+#define TK_DELETE 205
+#define TK_INSERT 206
+#define TK_NULL 207
+#define TK_NK_QUESTION 208
+#define TK_NK_ARROW 209
+#define TK_ROWTS 210
+#define TK_QSTART 211
+#define TK_QEND 212
+#define TK_QDURATION 213
+#define TK_WSTART 214
+#define TK_WEND 215
+#define TK_WDURATION 216
+#define TK_IROWTS 217
+#define TK_ISFILLED 218
+#define TK_CAST 219
+#define TK_NOW 220
+#define TK_TODAY 221
+#define TK_TIMEZONE 222
+#define TK_CLIENT_VERSION 223
+#define TK_SERVER_VERSION 224
+#define TK_SERVER_STATUS 225
+#define TK_CURRENT_USER 226
+#define TK_CASE 227
+#define TK_END 228
+#define TK_WHEN 229
+#define TK_THEN 230
+#define TK_ELSE 231
+#define TK_BETWEEN 232
+#define TK_IS 233
+#define TK_NK_LT 234
+#define TK_NK_GT 235
+#define TK_NK_LE 236
+#define TK_NK_GE 237
+#define TK_NK_NE 238
+#define TK_MATCH 239
+#define TK_NMATCH 240
+#define TK_CONTAINS 241
+#define TK_IN 242
+#define TK_JOIN 243
+#define TK_INNER 244
+#define TK_SELECT 245
+#define TK_DISTINCT 246
+#define TK_WHERE 247
+#define TK_PARTITION 248
+#define TK_BY 249
+#define TK_SESSION 250
+#define TK_STATE_WINDOW 251
+#define TK_EVENT_WINDOW 252
+#define TK_START 253
+#define TK_SLIDING 254
+#define TK_FILL 255
+#define TK_VALUE 256
+#define TK_NONE 257
+#define TK_PREV 258
+#define TK_LINEAR 259
+#define TK_NEXT 260
+#define TK_HAVING 261
+#define TK_RANGE 262
+#define TK_EVERY 263
+#define TK_ORDER 264
+#define TK_SLIMIT 265
+#define TK_SOFFSET 266
+#define TK_LIMIT 267
+#define TK_OFFSET 268
+#define TK_ASC 269
+#define TK_NULLS 270
+#define TK_ABORT 271
+#define TK_AFTER 272
+#define TK_ATTACH 273
+#define TK_BEFORE 274
+#define TK_BEGIN 275
+#define TK_BITAND 276
+#define TK_BITNOT 277
+#define TK_BITOR 278
+#define TK_BLOCKS 279
+#define TK_CHANGE 280
+#define TK_COMMA 281
+#define TK_COMPACT 282
+#define TK_CONCAT 283
+#define TK_CONFLICT 284
+#define TK_COPY 285
+#define TK_DEFERRED 286
+#define TK_DELIMITERS 287
+#define TK_DETACH 288
+#define TK_DIVIDE 289
+#define TK_DOT 290
+#define TK_EACH 291
+#define TK_FAIL 292
+#define TK_FILE 293
+#define TK_FOR 294
+#define TK_GLOB 295
+#define TK_ID 296
+#define TK_IMMEDIATE 297
+#define TK_IMPORT 298
+#define TK_INITIALLY 299
+#define TK_INSTEAD 300
+#define TK_ISNULL 301
+#define TK_KEY 302
+#define TK_MODULES 303
+#define TK_NK_BITNOT 304
+#define TK_NK_SEMI 305
+#define TK_NOTNULL 306
+#define TK_OF 307
+#define TK_PLUS 308
+#define TK_PRIVILEGE 309
+#define TK_RAISE 310
+#define TK_REPLACE 311
+#define TK_RESTRICT 312
+#define TK_ROW 313
+#define TK_SEMI 314
+#define TK_STAR 315
+#define TK_STATEMENT 316
+#define TK_STRICT 317
+#define TK_STRING 318
+#define TK_TIMES 319
+#define TK_UPDATE 320
+#define TK_VALUES 321
+#define TK_VARIABLE 322
+#define TK_VIEW 323
+#define TK_WAL 324
#define TK_NK_SPACE 600
#define TK_NK_COMMENT 601
diff --git a/include/common/ttypes.h b/include/common/ttypes.h
index 6350057c1f..d0f72fbfe5 100644
--- a/include/common/ttypes.h
+++ b/include/common/ttypes.h
@@ -266,6 +266,7 @@ typedef struct {
#define IS_FLOAT_TYPE(_t) ((_t) == TSDB_DATA_TYPE_FLOAT || (_t) == TSDB_DATA_TYPE_DOUBLE)
#define IS_INTEGER_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)))
#define IS_TIMESTAMP_TYPE(_t) ((_t) == TSDB_DATA_TYPE_TIMESTAMP)
+#define IS_BOOLEAN_TYPE(_t) ((_t) == TSDB_DATA_TYPE_BOOL)
#define IS_NUMERIC_TYPE(_t) ((IS_SIGNED_NUMERIC_TYPE(_t)) || (IS_UNSIGNED_NUMERIC_TYPE(_t)) || (IS_FLOAT_TYPE(_t)))
#define IS_MATHABLE_TYPE(_t) \
diff --git a/include/libs/function/functionMgt.h b/include/libs/function/functionMgt.h
index 9ca6a7a9fa..e98e341f15 100644
--- a/include/libs/function/functionMgt.h
+++ b/include/libs/function/functionMgt.h
@@ -120,6 +120,7 @@ typedef enum EFunctionType {
FUNCTION_TYPE_WEND,
FUNCTION_TYPE_WDURATION,
FUNCTION_TYPE_IROWTS,
+ FUNCTION_TYPE_ISFILLED,
FUNCTION_TYPE_TAGS,
// internal function
diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h
index b1054e7b85..66988ff135 100644
--- a/include/libs/nodes/cmdnodes.h
+++ b/include/libs/nodes/cmdnodes.h
@@ -171,10 +171,10 @@ typedef struct SCreateSubTableClause {
STableOptions* pOptions;
} SCreateSubTableClause;
-typedef struct SCreateMultiTableStmt {
+typedef struct SCreateMultiTablesStmt {
ENodeType type;
SNodeList* pSubTables;
-} SCreateMultiTableStmt;
+} SCreateMultiTablesStmt;
typedef struct SDropTableClause {
ENodeType type;
@@ -209,14 +209,14 @@ typedef struct SAlterTableStmt {
typedef struct SCreateUserStmt {
ENodeType type;
- char useName[TSDB_USER_LEN];
+ char userName[TSDB_USER_LEN];
char password[TSDB_USET_PASSWORD_LEN];
int8_t sysinfo;
} SCreateUserStmt;
typedef struct SAlterUserStmt {
ENodeType type;
- char useName[TSDB_USER_LEN];
+ char userName[TSDB_USER_LEN];
int8_t alterType;
char password[TSDB_USET_PASSWORD_LEN];
int8_t enable;
@@ -225,7 +225,7 @@ typedef struct SAlterUserStmt {
typedef struct SDropUserStmt {
ENodeType type;
- char useName[TSDB_USER_LEN];
+ char userName[TSDB_USER_LEN];
} SDropUserStmt;
typedef struct SCreateDnodeStmt {
diff --git a/include/libs/nodes/nodes.h b/include/libs/nodes/nodes.h
index 1f266cd0ef..e111f36077 100644
--- a/include/libs/nodes/nodes.h
+++ b/include/libs/nodes/nodes.h
@@ -117,7 +117,7 @@ typedef enum ENodeType {
// Statement nodes are used in parser and planner module.
QUERY_NODE_SET_OPERATOR = 100,
QUERY_NODE_SELECT_STMT,
- QUERY_NODE_VNODE_MODIF_STMT,
+ QUERY_NODE_VNODE_MODIFY_STMT,
QUERY_NODE_CREATE_DATABASE_STMT,
QUERY_NODE_DROP_DATABASE_STMT,
QUERY_NODE_ALTER_DATABASE_STMT,
@@ -125,7 +125,7 @@ typedef enum ENodeType {
QUERY_NODE_TRIM_DATABASE_STMT,
QUERY_NODE_CREATE_TABLE_STMT,
QUERY_NODE_CREATE_SUBTABLE_CLAUSE,
- QUERY_NODE_CREATE_MULTI_TABLE_STMT,
+ QUERY_NODE_CREATE_MULTI_TABLES_STMT,
QUERY_NODE_DROP_TABLE_CLAUSE,
QUERY_NODE_DROP_TABLE_STMT,
QUERY_NODE_DROP_SUPER_TABLE_STMT,
diff --git a/include/libs/nodes/querynodes.h b/include/libs/nodes/querynodes.h
index 5805f4968b..ff3e708e77 100644
--- a/include/libs/nodes/querynodes.h
+++ b/include/libs/nodes/querynodes.h
@@ -364,7 +364,7 @@ typedef struct SVgDataBlocks {
typedef void (*FFreeDataBlockHash)(SHashObj*);
typedef void (*FFreeDataBlockArray)(SArray*);
-typedef struct SVnodeModifOpStmt {
+typedef struct SVnodeModifyOpStmt {
ENodeType nodeType;
ENodeType sqlNodeType;
SArray* pDataBlocks; // data block for each vgroup, SArray.
@@ -388,7 +388,7 @@ typedef struct SVnodeModifOpStmt {
FFreeDataBlockArray freeArrayFunc;
bool usingTableProcessing;
bool fileProcessing;
-} SVnodeModifOpStmt;
+} SVnodeModifyOpStmt;
typedef struct SExplainOptions {
ENodeType type;
diff --git a/include/libs/qcom/query.h b/include/libs/qcom/query.h
index 91ec5f52e5..3f11d2a218 100644
--- a/include/libs/qcom/query.h
+++ b/include/libs/qcom/query.h
@@ -58,8 +58,7 @@ typedef enum {
#define QUERY_RSP_POLICY_QUICK 1
#define QUERY_MSG_MASK_SHOW_REWRITE() (1 << 0)
-#define TEST_SHOW_REWRITE_MASK(m) (((m) & QUERY_MSG_MASK_SHOW_REWRITE()) != 0)
-
+#define TEST_SHOW_REWRITE_MASK(m) (((m)&QUERY_MSG_MASK_SHOW_REWRITE()) != 0)
typedef struct STableComInfo {
uint8_t numOfTags; // the number of tags in schema
@@ -128,7 +127,7 @@ typedef struct SDBVgInfo {
int8_t hashMethod;
int32_t numOfTable; // DB's table num, unit is TSDB_TABLE_NUM_UNIT
int64_t stateTs;
- SHashObj* vgHash; // key:vgId, value:SVgroupInfo
+ SHashObj* vgHash; // key:vgId, value:SVgroupInfo
SArray* vgArray;
} SDBVgInfo;
@@ -262,23 +261,26 @@ extern int32_t (*queryProcessMsgRsp[TDMT_MAX])(void* output, char* msg, int32_t
(NEED_CLIENT_RM_TBLMETA_ERROR(_code) || NEED_CLIENT_REFRESH_VG_ERROR(_code) || \
NEED_CLIENT_REFRESH_TBLMETA_ERROR(_code))
-#define SYNC_UNKNOWN_LEADER_REDIRECT_ERROR(_code) ((_code) == TSDB_CODE_SYN_NOT_LEADER || (_code) == TSDB_CODE_SYN_INTERNAL_ERROR || (_code) == TSDB_CODE_VND_STOPPED || (_code) == TSDB_CODE_APP_IS_STARTING || (_code) == TSDB_CODE_APP_IS_STOPPING)
-#define SYNC_SELF_LEADER_REDIRECT_ERROR(_code) ((_code) == TSDB_CODE_SYN_NOT_LEADER || (_code) == TSDB_CODE_SYN_RESTORING || (_code) == TSDB_CODE_SYN_INTERNAL_ERROR)
-#define SYNC_OTHER_LEADER_REDIRECT_ERROR(_code) ((_code) == TSDB_CODE_MNODE_NOT_FOUND)
+#define SYNC_UNKNOWN_LEADER_REDIRECT_ERROR(_code) \
+ ((_code) == TSDB_CODE_SYN_NOT_LEADER || (_code) == TSDB_CODE_SYN_INTERNAL_ERROR || \
+ (_code) == TSDB_CODE_VND_STOPPED || (_code) == TSDB_CODE_APP_IS_STARTING || (_code) == TSDB_CODE_APP_IS_STOPPING)
+#define SYNC_SELF_LEADER_REDIRECT_ERROR(_code) \
+ ((_code) == TSDB_CODE_SYN_NOT_LEADER || (_code) == TSDB_CODE_SYN_RESTORING || (_code) == TSDB_CODE_SYN_INTERNAL_ERROR)
+#define SYNC_OTHER_LEADER_REDIRECT_ERROR(_code) ((_code) == TSDB_CODE_MNODE_NOT_FOUND)
#define NO_RET_REDIRECT_ERROR(_code) ((_code) == TSDB_CODE_RPC_BROKEN_LINK || (_code) == TSDB_CODE_RPC_NETWORK_UNAVAIL)
-#define NEED_REDIRECT_ERROR(_code) \
+#define NEED_REDIRECT_ERROR(_code) \
(NO_RET_REDIRECT_ERROR(_code) || SYNC_UNKNOWN_LEADER_REDIRECT_ERROR(_code) || \
SYNC_SELF_LEADER_REDIRECT_ERROR(_code) || SYNC_OTHER_LEADER_REDIRECT_ERROR(_code))
-
#define NEED_CLIENT_RM_TBLMETA_REQ(_type) \
((_type) == TDMT_VND_CREATE_TABLE || (_type) == TDMT_MND_CREATE_STB || (_type) == TDMT_VND_DROP_TABLE || \
(_type) == TDMT_MND_DROP_STB)
-#define NEED_SCHEDULER_REDIRECT_ERROR(_code) \
- (SYNC_UNKNOWN_LEADER_REDIRECT_ERROR(_code) || SYNC_SELF_LEADER_REDIRECT_ERROR(_code) || SYNC_OTHER_LEADER_REDIRECT_ERROR(_code))
+#define NEED_SCHEDULER_REDIRECT_ERROR(_code) \
+ (SYNC_UNKNOWN_LEADER_REDIRECT_ERROR(_code) || SYNC_SELF_LEADER_REDIRECT_ERROR(_code) || \
+ SYNC_OTHER_LEADER_REDIRECT_ERROR(_code))
#define REQUEST_TOTAL_EXEC_TIMES 2
diff --git a/include/libs/stream/streamState.h b/include/libs/stream/streamState.h
index 8fdac0da7f..d7bc151ecc 100644
--- a/include/libs/stream/streamState.h
+++ b/include/libs/stream/streamState.h
@@ -35,6 +35,7 @@ typedef struct STdbState {
TTB* pFillStateDb; // todo refactor
TTB* pSessionStateDb;
TTB* pParNameDb;
+ TTB* pParTagDb;
TXN* txn;
} STdbState;
@@ -108,6 +109,9 @@ int32_t streamStateCurPrev(SStreamState* pState, SStreamStateCur* pCur);
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char* tbname);
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal);
+int32_t streamStatePutParTag(SStreamState* pState, int64_t groupId, const void* tag, int32_t tagLen);
+int32_t streamStateGetParTag(SStreamState* pState, int64_t groupId, void** tagVal, int32_t* tagLen);
+
#if 0
char* streamStateSessionDump(SStreamState* pState);
#endif
diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h
index 4cf4800472..a13d203889 100644
--- a/include/libs/sync/sync.h
+++ b/include/libs/sync/sync.h
@@ -230,7 +230,7 @@ int64_t syncOpen(SSyncInfo* pSyncInfo);
int32_t syncStart(int64_t rid);
void syncStop(int64_t rid);
void syncPreStop(int64_t rid);
-int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak);
+int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak, int64_t* seq);
int32_t syncProcessMsg(int64_t rid, SRpcMsg* pMsg);
int32_t syncReconfig(int64_t rid, SSyncCfg* pCfg);
int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex);
@@ -240,6 +240,7 @@ int32_t syncStepDown(int64_t rid, SyncTerm newTerm);
bool syncIsReadyForRead(int64_t rid);
bool syncSnapshotSending(int64_t rid);
bool syncSnapshotRecving(int64_t rid);
+int32_t syncSendTimeoutRsp(int64_t rid, int64_t seq);
SSyncState syncGetState(int64_t rid);
void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet);
diff --git a/include/libs/transport/trpc.h b/include/libs/transport/trpc.h
index 87f753e6aa..de3c2a9f52 100644
--- a/include/libs/transport/trpc.h
+++ b/include/libs/transport/trpc.h
@@ -77,14 +77,12 @@ typedef void (*RpcDfp)(void *ahandle);
typedef struct SRpcInit {
char localFqdn[TSDB_FQDN_LEN];
- uint16_t localPort; // local port
- char *label; // for debug purpose
- int32_t numOfThreads; // number of threads to handle connections
- int32_t sessions; // number of sessions allowed
- int8_t connType; // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
- int32_t idleTime; // milliseconds, 0 means idle timer is disabled
- int32_t retryLimit; // retry limit
- int32_t retryInterval; // retry interval ms
+ uint16_t localPort; // local port
+ char *label; // for debug purpose
+ int32_t numOfThreads; // number of threads to handle connections
+ int32_t sessions; // number of sessions allowed
+ int8_t connType; // TAOS_CONN_UDP, TAOS_CONN_TCPC, TAOS_CONN_TCPS
+ int32_t idleTime; // milliseconds, 0 means idle timer is disabled
int32_t retryMinInterval; // retry init interval
int32_t retryStepFactor; // retry interval factor
diff --git a/include/os/osEnv.h b/include/os/osEnv.h
index a3bd209693..533d989ffc 100644
--- a/include/os/osEnv.h
+++ b/include/os/osEnv.h
@@ -36,7 +36,7 @@ extern int64_t tsStreamMax;
extern float tsNumOfCores;
extern int64_t tsTotalMemoryKB;
extern char *tsProcPath;
-extern char tsSIMDEnable;
+extern char tsSIMDBuiltins;
extern char tsSSE42Enable;
extern char tsAVXEnable;
extern char tsAVX2Enable;
diff --git a/include/util/taoserror.h b/include/util/taoserror.h
index e352cfb569..52221bdd44 100644
--- a/include/util/taoserror.h
+++ b/include/util/taoserror.h
@@ -342,6 +342,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MND_INVALID_STREAM_OPTION TAOS_DEF_ERROR_CODE(0, 0x03F2)
#define TSDB_CODE_MND_STREAM_MUST_BE_DELETED TAOS_DEF_ERROR_CODE(0, 0x03F3)
#define TSDB_CODE_MND_STREAM_TASK_DROPPED TAOS_DEF_ERROR_CODE(0, 0x03F4)
+#define TSDB_CODE_MND_MULTI_REPLICA_SOURCE_DB TAOS_DEF_ERROR_CODE(0, 0x03F5)
// mnode-sma
#define TSDB_CODE_MND_SMA_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0480)
diff --git a/include/util/tdef.h b/include/util/tdef.h
index e0089014aa..e1d421a399 100644
--- a/include/util/tdef.h
+++ b/include/util/tdef.h
@@ -337,7 +337,7 @@ typedef enum ELogicConditionType {
#define TSDB_DB_STRICT_ON_STR "on"
#define TSDB_DB_STRICT_OFF 0
#define TSDB_DB_STRICT_ON 1
-#define TSDB_DEFAULT_DB_STRICT TSDB_DB_STRICT_OFF
+#define TSDB_DEFAULT_DB_STRICT TSDB_DB_STRICT_ON
#define TSDB_CACHE_MODEL_STR_LEN sizeof(TSDB_CACHE_MODEL_LAST_VALUE_STR)
#define TSDB_CACHE_MODEL_NONE_STR "none"
#define TSDB_CACHE_MODEL_LAST_ROW_STR "last_row"
@@ -497,6 +497,9 @@ enum {
// sort page size by default
#define DEFAULT_PAGESIZE 4096
+#define VNODE_TIMEOUT_SEC 60
+#define MNODE_TIMEOUT_SEC 10
+
#ifdef __cplusplus
}
#endif
diff --git a/packaging/release.sh b/packaging/release.sh
index a3334e734d..7a8a08352f 100755
--- a/packaging/release.sh
+++ b/packaging/release.sh
@@ -3,7 +3,7 @@
# Generate the deb package for ubuntu, or rpm package for centos, or tar.gz package for other linux os
set -e
-#set -x
+# set -x
# release.sh -v [cluster | edge]
# -c [aarch32 | aarch64 | x64 | x86 | mips64 | loongarch64...]
@@ -96,6 +96,8 @@ while getopts "hv:V:c:o:l:s:d:a:n:m:H:" arg; do
esac
done
+osType=$(uname)
+
echo "verMode=${verMode} verType=${verType} cpuType=${cpuType} osType=${osType} pagMode=${pagMode} soMode=${soMode} dbName=${dbName} allocator=${allocator} verNumber=${verNumber} verNumberComp=${verNumberComp} httpdBuild=${httpdBuild}"
curr_dir=$(pwd)
@@ -233,7 +235,12 @@ else
exit 1
fi
-CORES=$(grep -c ^processor /proc/cpuinfo)
+ostype=`uname`
+if [ "${ostype}" == "Darwin" ]; then
+ CORES=$(sysctl -n hw.ncpu)
+else
+ CORES=$(grep -c ^processor /proc/cpuinfo)
+fi
if [[ "$allocator" == "jemalloc" ]]; then
# jemalloc need compile first, so disable parallel build
@@ -306,7 +313,7 @@ if [ "$osType" != "Darwin" ]; then
${csudo}./makeclient.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${dbName}
else
- # only make client for Darwin
cd ${script_dir}/tools
+ ./makepkg.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${verNumberComp} ${dbName}
./makeclient.sh ${compile_dir} ${verNumber} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode} ${dbName}
fi
diff --git a/packaging/tools/makeclient.sh b/packaging/tools/makeclient.sh
index edec338c55..db28de8dec 100755
--- a/packaging/tools/makeclient.sh
+++ b/packaging/tools/makeclient.sh
@@ -2,7 +2,7 @@
#
# Generate tar.gz package for linux client in all os system
set -e
-#set -x
+# set -x
curr_dir=$(pwd)
compile_dir=$1
@@ -249,9 +249,9 @@ if [ "$osType" != "Darwin" ]; then
tar -zcv -f "$(basename ${pkg_name}).tar.gz" $(basename ${install_dir}) --remove-files || :
else
tar -zcv -f "$(basename ${pkg_name}).tar.gz" $(basename ${install_dir}) || :
- mv "$(basename ${pkg_name}).tar.gz" ..
- rm -rf ./*
- mv ../"$(basename ${pkg_name}).tar.gz" .
+# mv "$(basename ${pkg_name}).tar.gz" ..
+ rm -rf ${install_dir} ||:
+# mv ../"$(basename ${pkg_name}).tar.gz" .
fi
cd ${curr_dir}
diff --git a/packaging/tools/makepkg.sh b/packaging/tools/makepkg.sh
index 4169bed3eb..f30a8a637e 100755
--- a/packaging/tools/makepkg.sh
+++ b/packaging/tools/makepkg.sh
@@ -3,7 +3,7 @@
# Generate tar.gz package for all os system
set -e
-#set -x
+# set -x
curr_dir=$(pwd)
compile_dir=$1
@@ -74,14 +74,16 @@ else
tdinsight_caches=""
cd ${build_dir}/bin/ && \
chmod +x TDinsight.sh
- tdinsight_caches=$(./TDinsight.sh --download-only | xargs -i printf "${build_dir}/bin/{} ")
+ ./TDinsight.sh --download-only ||:
+# tdinsight_caches=$(./TDinsight.sh --download-only | xargs -I printf "${build_dir}/bin/{} ")
cd $orig_pwd
echo "TDinsight caches: $tdinsight_caches"
taostools_bin_files=" ${build_dir}/bin/taosdump \
${build_dir}/bin/taosBenchmark \
${build_dir}/bin/TDinsight.sh \
- $tdinsight_caches"
+ ${build_dir}/bin/tdengine-datasource.zip \
+ ${build_dir}/bin/tdengine-datasource.zip.md5sum"
[ -f ${build_dir}/bin/taosx ] && taosx_bin="${build_dir}/bin/taosx"
bin_files="${build_dir}/bin/${serverName} \
@@ -96,8 +98,13 @@ else
${script_dir}/taosd-dump-cfg.gdb"
fi
-lib_files="${build_dir}/lib/libtaos.so.${version}"
-wslib_files="${build_dir}/lib/libtaosws.so"
+if [ "$osType" == "Darwin" ]; then
+ lib_files="${build_dir}/lib/libtaos.${version}.dylib"
+ wslib_files="${build_dir}/lib/libtaosws.dylib"
+else
+ lib_files="${build_dir}/lib/libtaos.so.${version}"
+ wslib_files="${build_dir}/lib/libtaosws.so"
+fi
header_files="${code_dir}/include/client/taos.h ${code_dir}/include/common/taosdef.h ${code_dir}/include/util/taoserror.h ${code_dir}/include/libs/function/taosudf.h"
wsheader_files="${build_dir}/include/taosws.h"
@@ -226,7 +233,12 @@ if [ "$verMode" == "cloud" ]; then
fi
cd ${install_dir}
-tar -zcv -f ${tarName} * --remove-files || :
+if [ "$osType" != "Darwin" ]; then
+ tar -zcv -f ${tarName} * --remove-files || :
+else
+ tar -zcv -f ${tarName} * || :
+fi
+
exitcode=$?
if [ "$exitcode" != "0" ]; then
echo "tar ${tarName} error !!!"
@@ -288,7 +300,7 @@ if [[ $dbName == "taos" ]]; then
if [ "$verMode" == "cluster" ] || [ "$verMode" == "cloud" ]; then
if [ -d "${web_dir}/admin" ] ; then
mkdir -p ${install_dir}/share/
- cp ${web_dir}/admin ${install_dir}/share/ -r
+ cp -Rfap ${web_dir}/admin ${install_dir}/share/
cp ${web_dir}/png/taos.png ${install_dir}/share/admin/images/taos.png
else
echo "directory not found for enterprise release: ${web_dir}/admin"
@@ -362,7 +374,15 @@ if [ "$pagMode" == "lite" ]; then
pkg_name=${pkg_name}-Lite
fi
-tar -zcv -f "$(basename ${pkg_name}).tar.gz" "$(basename ${install_dir})" --remove-files || :
+
+if [ "$osType" != "Darwin" ]; then
+ tar -zcv -f "$(basename ${pkg_name}).tar.gz" "$(basename ${install_dir})" --remove-files || :
+else
+ tar -zcv -f "$(basename ${pkg_name}).tar.gz" "$(basename ${install_dir})" || :
+ rm -rf ${install_dir} ||:
+ ([ -d build-taoskeeper ] && rm -rf build-taoskeeper ) ||:
+fi
+
exitcode=$?
if [ "$exitcode" != "0" ]; then
echo "tar ${pkg_name}.tar.gz error !!!"
@@ -371,7 +391,12 @@ fi
if [ -n "${taostools_bin_files}" ]; then
wget https://github.com/taosdata/grafanaplugin/releases/latest/download/TDinsight.sh -O ${taostools_install_dir}/bin/TDinsight.sh && echo "TDinsight.sh downloaded!"|| echo "failed to download TDinsight.sh"
- tar -zcv -f "$(basename ${taostools_pkg_name}).tar.gz" "$(basename ${taostools_install_dir})" --remove-files || :
+ if [ "$osType" != "Darwin" ]; then
+ tar -zcv -f "$(basename ${taostools_pkg_name}).tar.gz" "$(basename ${taostools_install_dir})" --remove-files || :
+ else
+ tar -zcv -f "$(basename ${taostools_pkg_name}).tar.gz" "$(basename ${taostools_install_dir})" || :
+ rm -rf ${taostools_install_dir} ||:
+ fi
exitcode=$?
if [ "$exitcode" != "0" ]; then
echo "tar ${taostools_pkg_name}.tar.gz error !!!"
diff --git a/source/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h b/source/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h
index 3b728a3142..a88bf0f7a6 100644
--- a/source/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h
+++ b/source/client/jni/com_taosdata_jdbc_TSDBJNIConnector.h
@@ -260,6 +260,14 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_insertLinesImp(JN
JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_schemalessInsertImp(JNIEnv *, jobject, jobjectArray,
jlong, jint, jint);
+/**
+ * Class: com_taosdata_jdbc_TSDBJNIConnector
+ * Method: getTableVgID
+ * Signature: (Ljava/lang/String;Ljava/lang/String)Lcom/taosdata/jdbc/VGroupIDResp
+ */
+JNIEXPORT jobject JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getTableVgID(JNIEnv *, jobject, jlong, jstring,
+ jstring, jobject);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c
index c694a6c1a0..75a72647bd 100644
--- a/source/client/src/clientEnv.c
+++ b/source/client/src/clientEnv.c
@@ -76,7 +76,7 @@ static void deregisterRequest(SRequestObj *pRequest) {
"current:%d, app current:%d",
pRequest->self, pTscObj->id, pRequest->requestId, duration / 1000.0, num, currentInst);
- if (QUERY_NODE_VNODE_MODIF_STMT == pRequest->stmtType) {
+ if (QUERY_NODE_VNODE_MODIFY_STMT == pRequest->stmtType) {
// tscPerf("insert duration %" PRId64 "us: syntax:%" PRId64 "us, ctg:%" PRId64 "us, semantic:%" PRId64
// "us, exec:%" PRId64 "us",
// duration, pRequest->metric.syntaxEnd - pRequest->metric.syntaxStart,
@@ -146,8 +146,7 @@ void *openTransporter(const char *user, const char *auth, int32_t numOfThread) {
rpcInit.idleTime = tsShellActivityTimer * 1000;
rpcInit.compressSize = tsCompressMsgSize;
rpcInit.dfp = destroyAhandle;
- rpcInit.retryLimit = tsRpcRetryLimit;
- rpcInit.retryInterval = tsRpcRetryInterval;
+
rpcInit.retryMinInterval = tsRedirectPeriod;
rpcInit.retryStepFactor = tsRedirectFactor;
rpcInit.retryMaxInterval = tsRedirectMaxPeriod;
@@ -232,7 +231,7 @@ void destroyTscObj(void *pObj) {
pTscObj->pAppInfo->numOfConns);
// In any cases, we should not free app inst here. Or an race condition rises.
- /*int64_t connNum = */atomic_sub_fetch_64(&pTscObj->pAppInfo->numOfConns, 1);
+ /*int64_t connNum = */ atomic_sub_fetch_64(&pTscObj->pAppInfo->numOfConns, 1);
taosThreadMutexDestroy(&pTscObj->mutex);
taosMemoryFree(pTscObj);
@@ -470,6 +469,9 @@ int taos_options_imp(TSDB_OPTION option, const char *str) {
case TSDB_OPTION_TIMEZONE:
pItem = cfgGetItem(pCfg, "timezone");
break;
+ case TSDB_OPTION_USE_ADAPTER:
+ pItem = cfgGetItem(pCfg, "useAdapter");
+ break;
default:
break;
}
diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c
index e26512d065..15a276062f 100644
--- a/source/client/src/clientImpl.c
+++ b/source/client/src/clientImpl.c
@@ -190,8 +190,8 @@ int32_t buildRequest(uint64_t connId, const char* sql, int sqlLen, void* param,
(*pRequest)->body.param = param;
STscObj* pTscObj = (*pRequest)->pTscObj;
- int32_t err = taosHashPut(pTscObj->pRequests, &(*pRequest)->self, sizeof((*pRequest)->self), &(*pRequest)->self,
- sizeof((*pRequest)->self));
+ int32_t err = taosHashPut(pTscObj->pRequests, &(*pRequest)->self, sizeof((*pRequest)->self), &(*pRequest)->self,
+ sizeof((*pRequest)->self));
if (err) {
tscError("%" PRId64 " failed to add to request container, reqId:0x%" PRIx64 ", conn:%" PRId64 ", %s",
(*pRequest)->self, (*pRequest)->requestId, pTscObj->id, sql);
@@ -739,6 +739,7 @@ int32_t handleSubmitExecRes(SRequestObj* pRequest, void* res, SCatalog* pCatalog
SArray* pArray = NULL;
SSubmitRsp* pRsp = (SSubmitRsp*)res;
if (pRsp->nBlocks <= 0) {
+ taosMemoryFreeClear(pRsp->pBlocks);
return TSDB_CODE_SUCCESS;
}
@@ -875,7 +876,7 @@ int32_t handleQueryExecRsp(SRequestObj* pRequest) {
}
static bool incompletaFileParsing(SNode* pStmt) {
- return QUERY_NODE_VNODE_MODIF_STMT != nodeType(pStmt) ? false : ((SVnodeModifOpStmt*)pStmt)->fileProcessing;
+ return QUERY_NODE_VNODE_MODIFY_STMT != nodeType(pStmt) ? false : ((SVnodeModifyOpStmt*)pStmt)->fileProcessing;
}
// todo refacto the error code mgmt
@@ -954,7 +955,7 @@ SRequestObj* launchQueryImpl(SRequestObj* pRequest, SQuery* pQuery, bool keepQue
if (pQuery->pRoot && !pRequest->inRetry) {
STscObj* pTscObj = pRequest->pTscObj;
SAppClusterSummary* pActivity = &pTscObj->pAppInfo->summary;
- if (QUERY_NODE_VNODE_MODIF_STMT == pQuery->pRoot->type) {
+ if (QUERY_NODE_VNODE_MODIFY_STMT == pQuery->pRoot->type) {
atomic_add_fetch_64((int64_t*)&pActivity->numOfInsertsReq, 1);
} else if (QUERY_NODE_SELECT_STMT == pQuery->pRoot->type) {
atomic_add_fetch_64((int64_t*)&pActivity->numOfQueryReq, 1);
@@ -1059,7 +1060,7 @@ static int32_t asyncExecSchQuery(SRequestObj* pRequest, SQuery* pQuery, SMetaDat
}
if (TSDB_CODE_SUCCESS == code && !pRequest->validateOnly) {
SArray* pNodeList = NULL;
- if (QUERY_NODE_VNODE_MODIF_STMT != nodeType(pQuery->pRoot)) {
+ if (QUERY_NODE_VNODE_MODIFY_STMT != nodeType(pQuery->pRoot)) {
buildAsyncExecNodeList(pRequest, &pNodeList, pMnodeList, pResultMeta);
}
@@ -1646,7 +1647,8 @@ int32_t getVersion1BlockMetaSize(const char* p, int32_t numOfCols) {
static int32_t estimateJsonLen(SReqResultInfo* pResultInfo, int32_t numOfCols, int32_t numOfRows) {
char* p = (char*)pResultInfo->pData;
- // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column length |
+ // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column
+ // length |
int32_t len = getVersion1BlockMetaSize(p, numOfCols);
int32_t* colLength = (int32_t*)(p + len);
len += sizeof(int32_t) * numOfCols;
@@ -1972,8 +1974,6 @@ TSDB_SERVER_STATUS taos_check_server_status(const char* fqdn, int port, char* de
rpcInit.idleTime = tsShellActivityTimer * 1000;
rpcInit.compressSize = tsCompressMsgSize;
rpcInit.user = "_dnd";
- rpcInit.retryLimit = tsRpcRetryLimit;
- rpcInit.retryInterval = tsRpcRetryInterval;
clientRpc = rpcOpen(&rpcInit);
if (clientRpc == NULL) {
@@ -2295,14 +2295,14 @@ TAOS_RES* taosQueryImpl(TAOS* taos, const char* sql, bool validateOnly) {
taosAsyncQueryImpl(*(int64_t*)taos, sql, syncQueryFn, param, validateOnly);
tsem_wait(¶m->sem);
- SRequestObj *pRequest = NULL;
+ SRequestObj* pRequest = NULL;
if (param->pRequest != NULL) {
param->pRequest->syncQuery = true;
pRequest = param->pRequest;
} else {
taosMemoryFree(param);
}
-
+
return pRequest;
}
@@ -2318,13 +2318,13 @@ TAOS_RES* taosQueryImplWithReqid(TAOS* taos, const char* sql, bool validateOnly,
taosAsyncQueryImplWithReqid(*(int64_t*)taos, sql, syncQueryFn, param, validateOnly, reqid);
tsem_wait(¶m->sem);
- SRequestObj *pRequest = NULL;
+ SRequestObj* pRequest = NULL;
if (param->pRequest != NULL) {
param->pRequest->syncQuery = true;
pRequest = param->pRequest;
} else {
taosMemoryFree(param);
}
-
+
return pRequest;
}
diff --git a/source/client/src/clientJniConnector.c b/source/client/src/clientJniConnector.c
index 34fc480432..859d4ec80f 100644
--- a/source/client/src/clientJniConnector.c
+++ b/source/client/src/clientJniConnector.c
@@ -488,7 +488,8 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchRowImp(JNIEn
numOfFields);
return JNI_FETCH_END;
} else {
- jniDebug("jobj:%p, conn:%p, interrupted query. fetch row error code: %d, msg:%s", jobj, tscon, code, taos_errstr(result));
+ jniDebug("jobj:%p, conn:%p, interrupted query. fetch row error code: %d, msg:%s", jobj, tscon, code,
+ taos_errstr(result));
return JNI_RESULT_SET_NULL;
}
}
@@ -583,7 +584,8 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchBlockImp(JNI
jniDebug("jobj:%p, conn:%p, resultset:%p, no data to retrieve", jobj, tscon, (void *)res);
return JNI_FETCH_END;
} else {
- jniError("jobj:%p, conn:%p, query interrupted. fetch block error code:%d, msg:%s", jobj, tscon, error_code, taos_errstr(tres));
+ jniError("jobj:%p, conn:%p, query interrupted. fetch block error code:%d, msg:%s", jobj, tscon, error_code,
+ taos_errstr(tres));
return JNI_RESULT_SET_NULL;
}
}
@@ -1028,3 +1030,62 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_schemalessInsert
}
return (jlong)tres;
}
+
+// TABLE_VG_ID_FID_CACHE cache resp object for getTableVgID
+typedef struct TABLE_VG_ID_FIELD_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID codeField;
+ jfieldID vgIDField;
+} TABLE_VG_ID_FIELD_CACHE;
+
+TABLE_VG_ID_FIELD_CACHE tableVgIdFieldCache;
+
+void cacheTableVgIDField(JNIEnv *env, jobject jobj) {
+ if (tableVgIdFieldCache.cached) {
+ return;
+ }
+
+ tableVgIdFieldCache.clazz = (*env)->GetObjectClass(env, jobj);
+ tableVgIdFieldCache.codeField = (*env)->GetFieldID(env, tableVgIdFieldCache.clazz, "code", "I");
+ tableVgIdFieldCache.vgIDField = (*env)->GetFieldID(env, tableVgIdFieldCache.clazz, "vgID", "I");
+ tableVgIdFieldCache.cached = 1;
+}
+
+JNIEXPORT jobject JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getTableVgID(JNIEnv *env, jobject jobj, jlong conn,
+ jstring jdb, jstring jtable,
+ jobject resp) {
+ if (!tableVgIdFieldCache.cached) {
+ cacheTableVgIDField(env, resp);
+ }
+
+ TAOS *taos = (TAOS *)conn;
+ if (taos == NULL) {
+ jniError("jobj:%p, connection already closed", jobj);
+ (*env)->SetIntField(env, resp, tableVgIdFieldCache.codeField, JNI_CONNECTION_NULL);
+ return resp;
+ }
+
+ const char *db = NULL;
+ const char *table = NULL;
+ int vgID = 0;
+
+ if (jdb != NULL) {
+ db = (*env)->GetStringUTFChars(env, jdb, NULL);
+ }
+ if (jtable != NULL) {
+ table = (*env)->GetStringUTFChars(env, jtable, NULL);
+ }
+
+ int code = taos_get_table_vgId(taos, db, table, &vgID);
+ if (db != NULL) {
+ (*env)->ReleaseStringUTFChars(env, jdb, db);
+ }
+ if (table != NULL) {
+ (*env)->ReleaseStringUTFChars(env, jtable, table);
+ }
+
+ (*env)->SetIntField(env, resp, tableVgIdFieldCache.codeField, code);
+ (*env)->SetIntField(env, resp, tableVgIdFieldCache.vgIDField, vgID);
+ return resp;
+}
diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c
index 150194aa27..0b5f670c15 100644
--- a/source/client/src/clientRawBlockWrite.c
+++ b/source/client/src/clientRawBlockWrite.c
@@ -1211,7 +1211,8 @@ static void destroyVgHash(void* data) {
taosMemoryFreeClear(vgData->data);
}
-int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const char* tbname, TAOS_FIELD *fields, int numFields){
+int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const char* tbname, TAOS_FIELD* fields,
+ int numFields) {
int32_t code = TSDB_CODE_SUCCESS;
STableMeta* pTableMeta = NULL;
SQuery* pQuery = NULL;
@@ -1267,14 +1268,14 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
uint16_t fLen = 0;
int32_t rowSize = 0;
int16_t nVar = 0;
- for (int i = 0; i < pTableMeta->tableInfo.numOfColumns; i++) {
- SSchema* schema = pTableMeta->schema + i;
- fLen += TYPE_BYTES[schema->type];
- rowSize += schema->bytes;
- if (IS_VAR_DATA_TYPE(schema->type)) {
- nVar++;
- }
+ for (int i = 0; i < pTableMeta->tableInfo.numOfColumns; i++) {
+ SSchema* schema = pTableMeta->schema + i;
+ fLen += TYPE_BYTES[schema->type];
+ rowSize += schema->bytes;
+ if (IS_VAR_DATA_TYPE(schema->type)) {
+ nVar++;
}
+ }
fLen -= sizeof(TSKEY);
@@ -1294,7 +1295,8 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
tdSRowSetTpInfo(&rb, numOfCols, fLen);
int32_t dataLen = 0;
- // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column length |
+ // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column
+ // length |
char* pStart = pData + getVersion1BlockMetaSize(pData, numFields);
int32_t* colLength = (int32_t*)pStart;
pStart += sizeof(int32_t) * numFields;
@@ -1326,9 +1328,9 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
for (int32_t k = 0; k < numOfCols; k++) {
const SSchema* pColumn = &pTableMeta->schema[k];
int32_t* index = taosHashGet(schemaHash, pColumn->name, strlen(pColumn->name));
- if (!index) { // add none
+ if (!index) { // add none
tdAppendColValToRow(&rb, pColumn->colId, pColumn->type, TD_VTYPE_NONE, NULL, false, offset, k);
- }else{
+ } else {
if (IS_VAR_DATA_TYPE(pColumn->type)) {
if (pCol[*index].offset[j] != -1) {
char* data = pCol[*index].pData + pCol[*index].offset[j];
@@ -1377,13 +1379,13 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
pQuery->haveResultSet = false;
pQuery->msgType = TDMT_VND_SUBMIT;
- pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == pQuery->pRoot) {
uError("create pQuery->pRoot error");
code = TSDB_CODE_OUT_OF_MEMORY;
goto end;
}
- SVnodeModifOpStmt* nodeStmt = (SVnodeModifOpStmt*)(pQuery->pRoot);
+ SVnodeModifyOpStmt* nodeStmt = (SVnodeModifyOpStmt*)(pQuery->pRoot);
nodeStmt->pDataBlocks = taosArrayInit(1, POINTER_BYTES);
SVgDataBlocks* dst = taosMemoryCalloc(1, sizeof(SVgDataBlocks));
@@ -1406,7 +1408,7 @@ int taos_write_raw_block_with_fields(TAOS* taos, int rows, char* pData, const ch
launchQueryImpl(pRequest, pQuery, true, NULL);
code = pRequest->code;
- end:
+end:
taosMemoryFreeClear(pTableMeta);
qDestroyQuery(pQuery);
taosMemoryFree(subReq);
@@ -1495,7 +1497,8 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
tdSRowSetTpInfo(&rb, numOfCols, fLen);
int32_t dataLen = 0;
- // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column length |
+ // | version | total length | total rows | total columns | flag seg| block group id | column schema | each column
+ // length |
char* pStart = pData + getVersion1BlockMetaSize(pData, numOfCols);
int32_t* colLength = (int32_t*)pStart;
pStart += sizeof(int32_t) * numOfCols;
@@ -1568,13 +1571,13 @@ int taos_write_raw_block(TAOS* taos, int rows, char* pData, const char* tbname)
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
pQuery->haveResultSet = false;
pQuery->msgType = TDMT_VND_SUBMIT;
- pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == pQuery->pRoot) {
uError("create pQuery->pRoot error");
code = TSDB_CODE_OUT_OF_MEMORY;
goto end;
}
- SVnodeModifOpStmt* nodeStmt = (SVnodeModifOpStmt*)(pQuery->pRoot);
+ SVnodeModifyOpStmt* nodeStmt = (SVnodeModifyOpStmt*)(pQuery->pRoot);
nodeStmt->pDataBlocks = taosArrayInit(1, POINTER_BYTES);
SVgDataBlocks* dst = taosMemoryCalloc(1, sizeof(SVgDataBlocks));
@@ -1825,13 +1828,13 @@ static int32_t tmqWriteRawDataImpl(TAOS* taos, void* data, int32_t dataLen) {
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
pQuery->haveResultSet = false;
pQuery->msgType = TDMT_VND_SUBMIT;
- pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == pQuery->pRoot) {
uError("create pQuery->pRoot error");
code = TSDB_CODE_OUT_OF_MEMORY;
goto end;
}
- SVnodeModifOpStmt* nodeStmt = (SVnodeModifOpStmt*)(pQuery->pRoot);
+ SVnodeModifyOpStmt* nodeStmt = (SVnodeModifyOpStmt*)(pQuery->pRoot);
int32_t numOfVg = taosHashGetSize(pVgHash);
nodeStmt->pDataBlocks = taosArrayInit(numOfVg, POINTER_BYTES);
@@ -1873,7 +1876,6 @@ end:
return code;
}
-
static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen) {
int32_t code = TSDB_CODE_SUCCESS;
SHashObj* pVgHash = NULL;
@@ -2131,13 +2133,13 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
pQuery->haveResultSet = false;
pQuery->msgType = TDMT_VND_SUBMIT;
- pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ pQuery->pRoot = (SNode*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == pQuery->pRoot) {
uError("create pQuery->pRoot error");
code = TSDB_CODE_OUT_OF_MEMORY;
goto end;
}
- SVnodeModifOpStmt* nodeStmt = (SVnodeModifOpStmt*)(pQuery->pRoot);
+ SVnodeModifyOpStmt* nodeStmt = (SVnodeModifyOpStmt*)(pQuery->pRoot);
int32_t numOfVg = taosHashGetSize(pVgHash);
nodeStmt->pDataBlocks = taosArrayInit(numOfVg, POINTER_BYTES);
@@ -2167,7 +2169,7 @@ static int32_t tmqWriteRawMetaDataImpl(TAOS* taos, void* data, int32_t dataLen)
launchQueryImpl(pRequest, pQuery, true, NULL);
code = pRequest->code;
- end:
+end:
tDeleteSTaosxRsp(&rspObj.rsp);
rspObj.resInfo.pRspMsg = NULL;
doFreeReqResultInfo(&rspObj.resInfo);
diff --git a/source/client/src/clientSml.c b/source/client/src/clientSml.c
index a4e943da32..8c77ef664a 100644
--- a/source/client/src/clientSml.c
+++ b/source/client/src/clientSml.c
@@ -163,9 +163,9 @@ typedef struct {
SMLProtocolType protocol;
int8_t precision;
- bool dataFormat; // true means that the name and order of keys in each line are the same(only for influx protocol)
- bool isRawLine;
- int32_t ttl;
+ bool dataFormat; // true means that the name and order of keys in each line are the same(only for influx protocol)
+ bool isRawLine;
+ int32_t ttl;
SHashObj *childTables;
SHashObj *superTables;
@@ -183,20 +183,20 @@ typedef struct {
SHashObj *dumplicateKey; // for dumplicate key
SArray *colsContainer; // for cols parse, if dataFormat == false
- cJSON *root; // for parse json
+ cJSON *root; // for parse json
} SSmlHandle;
//=================================================================================================
//=================================================================================================
static volatile int64_t linesSmlHandleId = 0;
static int64_t smlGenId() {
- int64_t id;
+ int64_t id;
- do {
- id = atomic_add_fetch_64(&linesSmlHandleId, 1);
+ do {
+ id = atomic_add_fetch_64(&linesSmlHandleId, 1);
} while (id == 0);
- return id;
+ return id;
}
static inline bool smlDoubleToInt64OverFlow(double num) {
@@ -606,7 +606,7 @@ static int32_t smlModifyDBSchemas(SSmlHandle *info) {
end:
taosHashCleanup(hashTmp);
taosMemoryFreeClear(pTableMeta);
-// catalogRefreshTableMeta(info->pCatalog, &conn, &pName, 1);
+ // catalogRefreshTableMeta(info->pCatalog, &conn, &pName, 1);
return code;
}
@@ -1534,7 +1534,7 @@ static SSmlHandle *smlBuildSmlInfo(STscObj *pTscObj, SRequestObj *request, SMLPr
info->pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
info->pQuery->haveResultSet = false;
info->pQuery->msgType = TDMT_VND_SUBMIT;
- info->pQuery->pRoot = (SNode *)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ info->pQuery->pRoot = (SNode *)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == info->pQuery->pRoot) {
uError("SML:0x%" PRIx64 " create info->pQuery->pRoot error", info->id);
goto cleanup;
@@ -2079,7 +2079,8 @@ static int32_t smlParseJSONString(SSmlHandle *info, cJSON *root, SSmlTableInfo *
static int32_t smlParseInfluxLine(SSmlHandle *info, const char *sql, const int len) {
SSmlLineInfo elements = {0};
- uDebug("SML:0x%" PRIx64 " smlParseInfluxLine raw:%d, len:%d, sql:%s", info->id, info->isRawLine, len, (info->isRawLine ? "rawdata" : sql));
+ uDebug("SML:0x%" PRIx64 " smlParseInfluxLine raw:%d, len:%d, sql:%s", info->id, info->isRawLine, len,
+ (info->isRawLine ? "rawdata" : sql));
int ret = smlParseInfluxString(sql, sql + len, &elements, &info->msgBuf);
if (ret != TSDB_CODE_SUCCESS) {
@@ -2371,15 +2372,16 @@ static int32_t smlInsertData(SSmlHandle *info) {
}
static void smlPrintStatisticInfo(SSmlHandle *info) {
- uError("SML:0x%" PRIx64
- " smlInsertLines result, code:%d,lineNum:%d,stable num:%d,ctable num:%d,create stable num:%d,alter stable tag num:%d,alter stable col num:%d \
+ uError(
+ "SML:0x%" PRIx64
+ " smlInsertLines result, code:%d,lineNum:%d,stable num:%d,ctable num:%d,create stable num:%d,alter stable tag num:%d,alter stable col num:%d \
parse cost:%" PRId64 ",schema cost:%" PRId64 ",bind cost:%" PRId64 ",rpc cost:%" PRId64 ",total cost:%" PRId64
- "",
- info->id, info->cost.code, info->cost.lineNum, info->cost.numOfSTables, info->cost.numOfCTables,
- info->cost.numOfCreateSTables, info->cost.numOfAlterTagSTables, info->cost.numOfAlterColSTables,
- info->cost.schemaTime - info->cost.parseTime,
- info->cost.insertBindTime - info->cost.schemaTime, info->cost.insertRpcTime - info->cost.insertBindTime,
- info->cost.endTime - info->cost.insertRpcTime, info->cost.endTime - info->cost.parseTime);
+ "",
+ info->id, info->cost.code, info->cost.lineNum, info->cost.numOfSTables, info->cost.numOfCTables,
+ info->cost.numOfCreateSTables, info->cost.numOfAlterTagSTables, info->cost.numOfAlterColSTables,
+ info->cost.schemaTime - info->cost.parseTime, info->cost.insertBindTime - info->cost.schemaTime,
+ info->cost.insertRpcTime - info->cost.insertBindTime, info->cost.endTime - info->cost.insertRpcTime,
+ info->cost.endTime - info->cost.parseTime);
}
static int32_t smlParseLine(SSmlHandle *info, char *lines[], char *rawLine, char *rawLineEnd, int numLines) {
@@ -2593,7 +2595,7 @@ TAOS_RES *taos_schemaless_insert_inner(SRequestObj *request, char *lines[], char
}
info->isRawLine = (rawLine == NULL);
- info->ttl = ttl;
+ info->ttl = ttl;
int32_t perBatch = tsSmlBatchSize;
@@ -2684,16 +2686,19 @@ TAOS_RES *taos_schemaless_insert(TAOS *taos, char *lines[], int numLines, int pr
return taos_schemaless_insert_ttl_with_reqid(taos, lines, numLines, protocol, precision, TSDB_DEFAULT_TABLE_TTL, 0);
}
-TAOS_RES *taos_schemaless_insert_ttl(TAOS *taos, char *lines[], int numLines, int protocol, int precision, int32_t ttl) {
+TAOS_RES *taos_schemaless_insert_ttl(TAOS *taos, char *lines[], int numLines, int protocol, int precision,
+ int32_t ttl) {
return taos_schemaless_insert_ttl_with_reqid(taos, lines, numLines, protocol, precision, ttl, 0);
}
-TAOS_RES *taos_schemaless_insert_with_reqid(TAOS *taos, char *lines[], int numLines, int protocol, int precision, int64_t reqid) {
- return taos_schemaless_insert_ttl_with_reqid(taos, lines, numLines, protocol, precision, TSDB_DEFAULT_TABLE_TTL, reqid);
+TAOS_RES *taos_schemaless_insert_with_reqid(TAOS *taos, char *lines[], int numLines, int protocol, int precision,
+ int64_t reqid) {
+ return taos_schemaless_insert_ttl_with_reqid(taos, lines, numLines, protocol, precision, TSDB_DEFAULT_TABLE_TTL,
+ reqid);
}
TAOS_RES *taos_schemaless_insert_raw_ttl_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol,
- int precision, int32_t ttl, int64_t reqid) {
+ int precision, int32_t ttl, int64_t reqid) {
if (NULL == taos) {
terrno = TSDB_CODE_TSC_DISCONNECTED;
return NULL;
@@ -2727,13 +2732,18 @@ TAOS_RES *taos_schemaless_insert_raw_ttl_with_reqid(TAOS *taos, char *lines, int
return taos_schemaless_insert_inner(request, NULL, lines, lines + len, numLines, protocol, precision, ttl);
}
-TAOS_RES *taos_schemaless_insert_raw_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol, int precision, int64_t reqid) {
- return taos_schemaless_insert_raw_ttl_with_reqid(taos, lines, len, totalRows, protocol, precision, TSDB_DEFAULT_TABLE_TTL, reqid);
+TAOS_RES *taos_schemaless_insert_raw_with_reqid(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol,
+ int precision, int64_t reqid) {
+ return taos_schemaless_insert_raw_ttl_with_reqid(taos, lines, len, totalRows, protocol, precision,
+ TSDB_DEFAULT_TABLE_TTL, reqid);
}
-TAOS_RES *taos_schemaless_insert_raw_ttl(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol, int precision, int32_t ttl) {
+TAOS_RES *taos_schemaless_insert_raw_ttl(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol,
+ int precision, int32_t ttl) {
return taos_schemaless_insert_raw_ttl_with_reqid(taos, lines, len, totalRows, protocol, precision, ttl, 0);
}
-TAOS_RES *taos_schemaless_insert_raw(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol, int precision) {
- return taos_schemaless_insert_raw_ttl_with_reqid(taos, lines, len, totalRows, protocol, precision, TSDB_DEFAULT_TABLE_TTL, 0);
+TAOS_RES *taos_schemaless_insert_raw(TAOS *taos, char *lines, int len, int32_t *totalRows, int protocol,
+ int precision) {
+ return taos_schemaless_insert_raw_ttl_with_reqid(taos, lines, len, totalRows, protocol, precision,
+ TSDB_DEFAULT_TABLE_TTL, 0);
}
diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c
index 939acd2b6e..1dd8117c1e 100644
--- a/source/client/src/clientTmq.c
+++ b/source/client/src/clientTmq.c
@@ -438,6 +438,7 @@ int32_t tmqCommitCb(void* param, SDataBuf* pBuf, int32_t code) {
taosMemoryFree(pParam->pOffset);
taosMemoryFree(pBuf->pData);
+ taosMemoryFree(pBuf->pEpSet);
/*tscDebug("receive offset commit cb of %s on vgId:%d, offset is %" PRId64, pParam->pOffset->subKey, pParam->->vgId,
* pOffset->version);*/
@@ -529,7 +530,6 @@ static int32_t tmqSendCommitReq(tmq_t* tmq, SMqClientVg* pVg, SMqClientTopic* pT
int32_t tmqCommitMsgImpl(tmq_t* tmq, const TAOS_RES* msg, int8_t async, tmq_commit_cb* userCb, void* userParam) {
char* topic;
int32_t vgId;
- ASSERT(msg != NULL);
if (TD_RES_TMQ(msg)) {
SMqRspObj* pRspObj = (SMqRspObj*)msg;
topic = pRspObj->topic;
@@ -724,7 +724,10 @@ void tmqAssignDelayedReportTask(void* param, void* tmrId) {
}
int32_t tmqHbCb(void* param, SDataBuf* pMsg, int32_t code) {
- if (pMsg && pMsg->pData) taosMemoryFree(pMsg->pData);
+ if (pMsg) {
+ taosMemoryFree(pMsg->pData);
+ taosMemoryFree(pMsg->pEpSet);
+ }
return 0;
}
@@ -805,8 +808,6 @@ int32_t tmqHandleAllDelayedTask(tmq_t* tmq) {
taosTmrReset(tmqAssignDelayedCommitTask, tmq->autoCommitInterval, pRefId, tmqMgmt.timer, &tmq->commitTimer);
} else if (*pTaskType == TMQ_DELAYED_TASK__REPORT) {
- } else {
- ASSERT(0);
}
taosFreeQitem(pTaskType);
}
@@ -869,6 +870,8 @@ void tmqClearUnhandleMsg(tmq_t* tmq) {
int32_t tmqSubscribeCb(void* param, SDataBuf* pMsg, int32_t code) {
SMqSubscribeCbParam* pParam = (SMqSubscribeCbParam*)param;
pParam->rspErr = code;
+
+ taosMemoryFree(pMsg->pEpSet);
tsem_post(&pParam->rspSem);
return 0;
}
@@ -947,10 +950,6 @@ tmq_t* tmq_consumer_new(tmq_conf_t* conf, char* errstr, int32_t errstrLen) {
const char* user = conf->user == NULL ? TSDB_DEFAULT_USER : conf->user;
const char* pass = conf->pass == NULL ? TSDB_DEFAULT_PASS : conf->pass;
- ASSERT(user);
- ASSERT(pass);
- ASSERT(conf->groupId[0]);
-
pTmq->clientTopics = taosArrayInit(0, sizeof(SMqClientTopic));
pTmq->mqueue = taosOpenQueue();
pTmq->qall = taosAllocateQall();
@@ -1035,7 +1034,7 @@ int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) {
SCMSubscribeReq req = {0};
int32_t code = -1;
- tscDebug("call tmq subscribe, consumer: %" PRId64 ", topic num %d", tmq->consumerId, sz);
+ tscDebug("tmq subscribe, consumer: %" PRId64 ", topic num %d", tmq->consumerId, sz);
req.consumerId = tmq->consumerId;
tstrncpy(req.clientId, tmq->clientId, 256);
@@ -1043,7 +1042,7 @@ int32_t tmq_subscribe(tmq_t* tmq, const tmq_list_t* topic_list) {
req.topicNames = taosArrayInit(sz, sizeof(void*));
if (req.topicNames == NULL) goto FAIL;
- tscDebug("call tmq subscribe, consumer: %" PRId64 ", topic num %d", tmq->consumerId, sz);
+ tscDebug("tmq subscribe, consumer: %" PRId64 ", topic num %d", tmq->consumerId, sz);
for (int32_t i = 0; i < sz; i++) {
char* topic = taosArrayGetP(container, i);
@@ -1166,6 +1165,8 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) {
if (code != 0) {
tscWarn("msg discard from vgId:%d, epoch %d, since %s", vgId, epoch, terrstr());
if (pMsg->pData) taosMemoryFree(pMsg->pData);
+ if (pMsg->pEpSet) taosMemoryFree(pMsg->pEpSet);
+
if (code == TSDB_CODE_TMQ_CONSUMER_MISMATCH) {
atomic_store_8(&tmq->status, TMQ_CONSUMER_STATUS__RECOVER);
goto CREATE_MSG_FAIL;
@@ -1239,8 +1240,6 @@ int32_t tmqPollCb(void* param, SDataBuf* pMsg, int32_t code) {
tDecodeSTaosxRsp(&decoder, &pRspWrapper->taosxRsp);
tDecoderClear(&decoder);
memcpy(&pRspWrapper->taosxRsp, pMsg->pData, sizeof(SMqRspHead));
- } else {
- ASSERT(0);
}
taosMemoryFree(pMsg->pData);
@@ -1365,6 +1364,7 @@ int32_t tmqAskEpCb(void* param, SDataBuf* pMsg, int32_t code) {
taosMemoryFree(pParam);
}
taosMemoryFree(pMsg->pData);
+ taosMemoryFree(pMsg->pEpSet);
terrno = TSDB_CODE_TMQ_CONSUMER_CLOSED;
return -1;
}
@@ -1416,6 +1416,8 @@ END:
} else {
taosMemoryFree(pParam);
}
+
+ taosMemoryFree(pMsg->pEpSet);
taosMemoryFree(pMsg->pData);
return code;
}
@@ -1570,7 +1572,6 @@ SMqTaosxRspObj* tmqBuildTaosxRspFromWrapper(SMqPollRspWrapper* pWrapper) {
}
int32_t tmqPollImpl(tmq_t* tmq, int64_t timeout) {
- /*tscDebug("call poll");*/
for (int i = 0; i < taosArrayGetSize(tmq->clientTopics); i++) {
SMqClientTopic* pTopic = taosArrayGet(tmq->clientTopics, i);
for (int j = 0; j < taosArrayGetSize(pTopic->vgs); j++) {
@@ -1794,7 +1795,6 @@ void* tmqHandleAllRsp(tmq_t* tmq, int64_t timeout, bool pollIfReset) {
}
TAOS_RES* tmq_consumer_poll(tmq_t* tmq, int64_t timeout) {
- /*tscDebug("call poll1");*/
void* rspObj;
int64_t startTime = taosGetTimestampMs();
diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c
index 4f726ab194..2b43229b83 100644
--- a/source/common/src/tdatablock.c
+++ b/source/common/src/tdatablock.c
@@ -358,7 +358,11 @@ size_t blockDataGetNumOfCols(const SSDataBlock* pBlock) { return taosArrayGetSiz
size_t blockDataGetNumOfRows(const SSDataBlock* pBlock) { return pBlock->info.rows; }
int32_t blockDataUpdateTsWindow(SSDataBlock* pDataBlock, int32_t tsColumnIndex) {
- if (pDataBlock == NULL || pDataBlock->info.rows <= 0) {
+ if (pDataBlock->info.rows > 0) {
+// ASSERT(pDataBlock->info.dataLoad == 1);
+ }
+
+ if (pDataBlock == NULL || pDataBlock->info.rows <= 0 || pDataBlock->info.dataLoad == 0) {
return 0;
}
@@ -1157,13 +1161,14 @@ void blockDataEmpty(SSDataBlock* pDataBlock) {
}
pInfo->rows = 0;
+ pInfo->dataLoad = 0;
pInfo->window.ekey = 0;
pInfo->window.skey = 0;
}
// todo temporarily disable it
static int32_t doEnsureCapacity(SColumnInfoData* pColumn, const SDataBlockInfo* pBlockInfo, uint32_t numOfRows, bool clearPayload) {
- ASSERT(numOfRows > 0 /*&& pBlockInfo->capacity >= pBlockInfo->rows*/);
+ ASSERT(numOfRows > 0);
if (numOfRows <= pBlockInfo->capacity) {
return TSDB_CODE_SUCCESS;
}
@@ -1220,7 +1225,7 @@ static int32_t doEnsureCapacity(SColumnInfoData* pColumn, const SDataBlockInfo*
return TSDB_CODE_SUCCESS;
}
-void colInfoDataCleanup(SColumnInfoData* pColumn, uint32_t numOfRows) {
+void colInfoDataCleanup(SColumnInfoData* pColumn, uint32_t numOfRows) {
pColumn->hasNull = false;
if (IS_VAR_DATA_TYPE(pColumn->info.type)) {
@@ -2427,6 +2432,7 @@ const char* blockDecode(SSDataBlock* pBlock, const char* pData) {
pStart += colLen[i];
}
+ pBlock->info.dataLoad = 1;
pBlock->info.rows = numOfRows;
ASSERT(pStart - pData == dataLen);
return pStart;
diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c
index 7e9b28939b..9caf0cc33e 100644
--- a/source/common/src/tglobal.c
+++ b/source/common/src/tglobal.c
@@ -96,6 +96,7 @@ int32_t tsRedirectPeriod = 10;
int32_t tsRedirectFactor = 2;
int32_t tsRedirectMaxPeriod = 1000;
int32_t tsMaxRetryWaitTime = 10000;
+bool tsUseAdapter = false;
/*
* denote if the server needs to compress response message at the application layer to client, including query rsp,
@@ -180,8 +181,6 @@ int32_t tsUptimeInterval = 300; // seconds
char tsUdfdResFuncs[512] = ""; // udfd resident funcs that teardown when udfd exits
char tsUdfdLdLibPath[512] = "";
-int32_t tsRpcRetryLimit = 100;
-int32_t tsRpcRetryInterval = 15;
#ifndef _STORAGE
int32_t taosSetTfsCfg(SConfig *pCfg) {
SConfigItem *pItem = cfgGetItem(pCfg, "dataDir");
@@ -313,9 +312,8 @@ static int32_t taosAddClientCfg(SConfig *pCfg) {
if (cfgAddBool(pCfg, "smlDataFormat", tsSmlDataFormat, 1) != 0) return -1;
if (cfgAddInt32(pCfg, "smlBatchSize", tsSmlBatchSize, 1, INT32_MAX, true) != 0) return -1;
if (cfgAddInt32(pCfg, "maxMemUsedByInsert", tsMaxMemUsedByInsert, 1, INT32_MAX, true) != 0) return -1;
- if (cfgAddInt32(pCfg, "rpcRetryLimit", tsRpcRetryLimit, 1, 100000, 0) != 0) return -1;
- if (cfgAddInt32(pCfg, "rpcRetryInterval", tsRpcRetryInterval, 1, 100000, 0) != 0) return -1;
if (cfgAddInt32(pCfg, "maxRetryWaitTime", tsMaxRetryWaitTime, 0, 86400000, 0) != 0) return -1;
+ if (cfgAddBool(pCfg, "useAdapter", tsUseAdapter, true) != 0) return -1;
tsNumOfTaskQueueThreads = tsNumOfCores / 2;
tsNumOfTaskQueueThreads = TMAX(tsNumOfTaskQueueThreads, 4);
@@ -341,7 +339,7 @@ static int32_t taosAddSystemCfg(SConfig *pCfg) {
if (cfgAddBool(pCfg, "AVX", tsAVXEnable, 0) != 0) return -1;
if (cfgAddBool(pCfg, "AVX2", tsAVX2Enable, 0) != 0) return -1;
if (cfgAddBool(pCfg, "FMA", tsFMAEnable, 0) != 0) return -1;
- if (cfgAddBool(pCfg, "SIMD-Supported", tsSIMDEnable, 0) != 0) return -1;
+ if (cfgAddBool(pCfg, "SIMD-builtins", tsSIMDBuiltins, 0) != 0) return -1;
if (cfgAddInt64(pCfg, "openMax", tsOpenMax, 0, INT64_MAX, 1) != 0) return -1;
if (cfgAddInt64(pCfg, "streamMax", tsStreamMax, 0, INT64_MAX, 1) != 0) return -1;
@@ -457,9 +455,6 @@ static int32_t taosAddServerCfg(SConfig *pCfg) {
if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1;
if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1;
- if (cfgAddInt32(pCfg, "rpcRetryLimit", tsRpcRetryLimit, 1, 100000, 0) != 0) return -1;
- if (cfgAddInt32(pCfg, "rpcRetryInterval", tsRpcRetryInterval, 1, 100000, 0) != 0) return -1;
-
GRANT_CFG_ADD;
return 0;
}
@@ -673,9 +668,8 @@ static int32_t taosSetClientCfg(SConfig *pCfg) {
tsQueryNodeChunkSize = cfgGetItem(pCfg, "queryNodeChunkSize")->i32;
tsQueryUseNodeAllocator = cfgGetItem(pCfg, "queryUseNodeAllocator")->bval;
tsKeepColumnName = cfgGetItem(pCfg, "keepColumnName")->bval;
+ tsUseAdapter = cfgGetItem(pCfg, "useAdapter")->bval;
- tsRpcRetryLimit = cfgGetItem(pCfg, "rpcRetryLimit")->i32;
- tsRpcRetryInterval = cfgGetItem(pCfg, "rpcRetryInterval")->i32;
tsMaxRetryWaitTime = cfgGetItem(pCfg, "maxRetryWaitTime")->i32;
return 0;
}
@@ -738,10 +732,6 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
tstrncpy(tsTelemServer, cfgGetItem(pCfg, "telemetryServer")->str, TSDB_FQDN_LEN);
tsTelemPort = (uint16_t)cfgGetItem(pCfg, "telemetryPort")->i32;
- tsElectInterval = cfgGetItem(pCfg, "syncElectInterval")->i32;
- tsHeartbeatInterval = cfgGetItem(pCfg, "syncHeartbeatInterval")->i32;
- tsHeartbeatTimeout = cfgGetItem(pCfg, "syncHeartbeatTimeout")->i32;
-
tsTransPullupInterval = cfgGetItem(pCfg, "transPullupInterval")->i32;
tsMqRebalanceInterval = cfgGetItem(pCfg, "mqRebalanceInterval")->i32;
tsTtlUnit = cfgGetItem(pCfg, "ttlUnit")->i32;
@@ -761,9 +751,6 @@ static int32_t taosSetServerCfg(SConfig *pCfg) {
if (tsQueryBufferSize >= 0) {
tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL;
}
-
- tsRpcRetryLimit = cfgGetItem(pCfg, "rpcRetryLimit")->i32;
- tsRpcRetryInterval = cfgGetItem(pCfg, "rpcRetryInterval")->i32;
GRANT_CFG_GET;
return 0;
}
diff --git a/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h b/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
index b38dc19361..b5c554e0ca 100644
--- a/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
+++ b/source/dnode/mgmt/mgmt_vnode/inc/vmInt.h
@@ -38,6 +38,8 @@ typedef struct SVnodeMgmt {
TdThreadRwlock lock;
SVnodesStat state;
STfs *pTfs;
+ TdThread thread;
+ bool stop;
} SVnodeMgmt;
typedef struct {
diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
index 07ebd72379..313a88fc5c 100644
--- a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
+++ b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
@@ -334,6 +334,62 @@ static void vmCleanup(SVnodeMgmt *pMgmt) {
taosMemoryFree(pMgmt);
}
+static void vmCheckSyncTimeout(SVnodeMgmt *pMgmt) {
+ int32_t numOfVnodes = 0;
+ SVnodeObj **ppVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes);
+
+ for (int32_t i = 0; i < numOfVnodes; ++i) {
+ SVnodeObj *pVnode = ppVnodes[i];
+ vnodeSyncCheckTimeout(pVnode->pImpl);
+ vmReleaseVnode(pMgmt, pVnode);
+ }
+
+ if (ppVnodes != NULL) {
+ taosMemoryFree(ppVnodes);
+ }
+}
+
+static void *vmThreadFp(void *param) {
+ SVnodeMgmt *pMgmt = param;
+ int64_t lastTime = 0;
+ setThreadName("vnode-timer");
+
+ while (1) {
+ lastTime++;
+ taosMsleep(100);
+ if (pMgmt->stop) break;
+ if (lastTime % 10 != 0) continue;
+
+ int64_t sec = lastTime / 10;
+ if (sec % (VNODE_TIMEOUT_SEC / 2) == 0) {
+ vmCheckSyncTimeout(pMgmt);
+ }
+ }
+
+ return NULL;
+}
+
+static int32_t vmInitTimer(SVnodeMgmt *pMgmt) {
+ TdThreadAttr thAttr;
+ taosThreadAttrInit(&thAttr);
+ taosThreadAttrSetDetachState(&thAttr, PTHREAD_CREATE_JOINABLE);
+ if (taosThreadCreate(&pMgmt->thread, &thAttr, vmThreadFp, pMgmt) != 0) {
+ dError("failed to create vnode timer thread since %s", strerror(errno));
+ return -1;
+ }
+
+ taosThreadAttrDestroy(&thAttr);
+ return 0;
+}
+
+static void vmCleanupTimer(SVnodeMgmt *pMgmt) {
+ pMgmt->stop = true;
+ if (taosCheckPthreadValid(pMgmt->thread)) {
+ taosThreadJoin(pMgmt->thread, NULL);
+ taosThreadClear(&pMgmt->thread);
+ }
+}
+
static int32_t vmInit(SMgmtInputOpt *pInput, SMgmtOutputOpt *pOutput) {
int32_t code = -1;
@@ -510,12 +566,10 @@ static int32_t vmStartVnodes(SVnodeMgmt *pMgmt) {
taosMemoryFree(ppVnodes);
}
- return 0;
+ return vmInitTimer(pMgmt);
}
-static void vmStop(SVnodeMgmt *pMgmt) {
- // process inside the vnode
-}
+static void vmStop(SVnodeMgmt *pMgmt) { vmCleanupTimer(pMgmt); }
SMgmtFunc vmGetMgmtFunc() {
SMgmtFunc mgmtFunc = {0};
diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
index 02a268afda..b6cce249ea 100644
--- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
+++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
@@ -214,6 +214,9 @@ int32_t dmMarkWrapper(SMgmtWrapper *pWrapper) {
case SNODE:
terrno = TSDB_CODE_SNODE_NOT_FOUND;
break;
+ case VNODE:
+ terrno = TSDB_CODE_VND_STOPPED;
+ break;
default:
terrno = TSDB_CODE_APP_IS_STOPPING;
break;
diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c
index 4fa09a46b7..5e1dcc6353 100644
--- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c
+++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c
@@ -145,7 +145,8 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
if (pMsg == NULL) goto _OVER;
memcpy(pMsg, pRpc, sizeof(SRpcMsg));
- dGTrace("msg:%p, is created, type:%s handle:%p len:%d", pMsg, TMSG_INFO(pRpc->msgType), pMsg->info.handle, pRpc->contLen);
+ dGTrace("msg:%p, is created, type:%s handle:%p len:%d", pMsg, TMSG_INFO(pRpc->msgType), pMsg->info.handle,
+ pRpc->contLen);
code = dmProcessNodeMsg(pWrapper, pMsg);
@@ -258,8 +259,6 @@ int32_t dmInitClient(SDnode *pDnode) {
rpcInit.rfp = rpcRfp;
rpcInit.compressSize = tsCompressMsgSize;
- rpcInit.retryLimit = tsRpcRetryLimit;
- rpcInit.retryInterval = tsRpcRetryInterval;
rpcInit.retryMinInterval = tsRedirectPeriod;
rpcInit.retryStepFactor = tsRedirectFactor;
rpcInit.retryMaxInterval = tsRedirectMaxPeriod;
diff --git a/source/dnode/mnode/impl/inc/mndDef.h b/source/dnode/mnode/impl/inc/mndDef.h
index 3c42f7b832..4e93a1d96e 100644
--- a/source/dnode/mnode/impl/inc/mndDef.h
+++ b/source/dnode/mnode/impl/inc/mndDef.h
@@ -174,6 +174,7 @@ typedef struct {
void* param;
char opername[TSDB_TRANS_OPER_LEN];
SArray* pRpcArray;
+ SRWLatch lockRpcArray;
} STrans;
typedef struct {
diff --git a/source/dnode/mnode/impl/inc/mndInt.h b/source/dnode/mnode/impl/inc/mndInt.h
index a0f3c98f83..785ecc2bf5 100644
--- a/source/dnode/mnode/impl/inc/mndInt.h
+++ b/source/dnode/mnode/impl/inc/mndInt.h
@@ -84,14 +84,16 @@ typedef struct {
} STelemMgmt;
typedef struct {
- tsem_t syncSem;
- int64_t sync;
- int32_t errCode;
- int32_t transId;
- SRWLatch lock;
- int8_t selfIndex;
- int8_t numOfReplicas;
- SReplica replicas[TSDB_MAX_REPLICA];
+ tsem_t syncSem;
+ int64_t sync;
+ int32_t errCode;
+ int32_t transId;
+ int32_t transSec;
+ int64_t transSeq;
+ TdThreadMutex lock;
+ int8_t selfIndex;
+ int8_t numOfReplicas;
+ SReplica replicas[TSDB_MAX_REPLICA];
} SSyncMgmt;
typedef struct {
diff --git a/source/dnode/mnode/impl/inc/mndSync.h b/source/dnode/mnode/impl/inc/mndSync.h
index 993efbcd08..1f9a698a8a 100644
--- a/source/dnode/mnode/impl/inc/mndSync.h
+++ b/source/dnode/mnode/impl/inc/mndSync.h
@@ -26,6 +26,7 @@ int32_t mndInitSync(SMnode *pMnode);
void mndCleanupSync(SMnode *pMnode);
bool mndIsLeader(SMnode *pMnode);
int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw, int32_t transId);
+void mndSyncCheckTimeout(SMnode *pMnode);
void mndSyncStart(SMnode *pMnode);
void mndSyncStop(SMnode *pMnode);
diff --git a/source/dnode/mnode/impl/inc/mndTrans.h b/source/dnode/mnode/impl/inc/mndTrans.h
index 2372fa30e5..07066d2251 100644
--- a/source/dnode/mnode/impl/inc/mndTrans.h
+++ b/source/dnode/mnode/impl/inc/mndTrans.h
@@ -75,6 +75,7 @@ void mndTransSetCb(STrans *pTrans, ETrnFunc startFunc, ETrnFunc stopFunc, voi
void mndTransSetDbName(STrans *pTrans, const char *dbname, const char *stbname);
void mndTransSetSerial(STrans *pTrans);
void mndTransSetOper(STrans *pTrans, EOperType oper);
+int32_t mndTrancCheckConflict(SMnode *pMnode, STrans *pTrans);
int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans);
int32_t mndTransProcessRsp(SRpcMsg *pRsp);
diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c
index 37e2c35225..cf2386348e 100644
--- a/source/dnode/mnode/impl/src/mndConsumer.c
+++ b/source/dnode/mnode/impl/src/mndConsumer.c
@@ -133,7 +133,10 @@ static int32_t mndProcessConsumerRecoverMsg(SRpcMsg *pMsg) {
SMnode *pMnode = pMsg->info.node;
SMqConsumerRecoverMsg *pRecoverMsg = pMsg->pCont;
SMqConsumerObj *pConsumer = mndAcquireConsumer(pMnode, pRecoverMsg->consumerId);
- ASSERT(pConsumer);
+ if (pConsumer == NULL) {
+ mError("cannot find consumer %" PRId64 " when processing consumer recover msg", pRecoverMsg->consumerId);
+ return -1;
+ }
mInfo("receive consumer recover msg, consumer id %" PRId64 ", status %s", pRecoverMsg->consumerId,
mndConsumerStatusName(pConsumer->status));
@@ -381,8 +384,6 @@ static int32_t mndProcessAskEpReq(SRpcMsg *pMsg) {
return -1;
}
- ASSERT(strcmp(req.cgroup, pConsumer->cgroup) == 0);
-
atomic_store_32(&pConsumer->hbStatus, 0);
// 1. check consumer status
@@ -428,9 +429,8 @@ static int32_t mndProcessAskEpReq(SRpcMsg *pMsg) {
for (int32_t i = 0; i < numOfTopics; i++) {
char *topic = taosArrayGetP(pConsumer->currentTopics, i);
SMqSubscribeObj *pSub = mndAcquireSubscribe(pMnode, pConsumer->cgroup, topic);
-
// txn guarantees pSub is created
- ASSERT(pSub);
+
taosRLockLatch(&pSub->lock);
SMqSubTopicEp topicEp = {0};
@@ -438,7 +438,6 @@ static int32_t mndProcessAskEpReq(SRpcMsg *pMsg) {
// 2.1 fetch topic schema
SMqTopicObj *pTopic = mndAcquireTopic(pMnode, topic);
- ASSERT(pTopic);
taosRLockLatch(&pTopic->lock);
tstrncpy(topicEp.db, pTopic->db, TSDB_DB_FNAME_LEN);
topicEp.schema.nCols = pTopic->schema.nCols;
@@ -775,8 +774,8 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
taosWLockLatch(&pOldConsumer->lock);
if (pNewConsumer->updateType == CONSUMER_UPDATE__MODIFY) {
- ASSERT(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);
- ASSERT(taosArrayGetSize(pOldConsumer->rebRemovedTopics) == 0);
+ /*A(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);*/
+ /*A(taosArrayGetSize(pOldConsumer->rebRemovedTopics) == 0);*/
if (taosArrayGetSize(pNewConsumer->rebNewTopics) == 0 && taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 0) {
pOldConsumer->status = MQ_CONSUMER_STATUS__READY;
@@ -798,8 +797,8 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
pOldConsumer->status = MQ_CONSUMER_STATUS__MODIFY;
}
} else if (pNewConsumer->updateType == CONSUMER_UPDATE__LOST) {
- ASSERT(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);
- ASSERT(taosArrayGetSize(pOldConsumer->rebRemovedTopics) == 0);
+ /*A(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);*/
+ /*A(taosArrayGetSize(pOldConsumer->rebRemovedTopics) == 0);*/
int32_t sz = taosArrayGetSize(pOldConsumer->currentTopics);
/*pOldConsumer->rebRemovedTopics = taosArrayInit(sz, sizeof(void *));*/
@@ -812,8 +811,8 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
pOldConsumer->status = MQ_CONSUMER_STATUS__LOST;
} else if (pNewConsumer->updateType == CONSUMER_UPDATE__RECOVER) {
- ASSERT(taosArrayGetSize(pOldConsumer->currentTopics) == 0);
- ASSERT(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);
+ /*A(taosArrayGetSize(pOldConsumer->currentTopics) == 0);*/
+ /*A(taosArrayGetSize(pOldConsumer->rebNewTopics) == 0);*/
int32_t sz = taosArrayGetSize(pOldConsumer->assignedTopics);
for (int32_t i = 0; i < sz; i++) {
@@ -830,15 +829,15 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
pOldConsumer->rebalanceTime = pNewConsumer->upTime;
} else if (pNewConsumer->updateType == CONSUMER_UPDATE__ADD) {
- ASSERT(taosArrayGetSize(pNewConsumer->rebNewTopics) == 1);
- ASSERT(taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 0);
+ /*A(taosArrayGetSize(pNewConsumer->rebNewTopics) == 1);*/
+ /*A(taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 0);*/
char *addedTopic = strdup(taosArrayGetP(pNewConsumer->rebNewTopics, 0));
// not exist in current topic
-#if 1
+#if 0
for (int32_t i = 0; i < taosArrayGetSize(pOldConsumer->currentTopics); i++) {
char *topic = taosArrayGetP(pOldConsumer->currentTopics, i);
- ASSERT(strcmp(topic, addedTopic) != 0);
+ A(strcmp(topic, addedTopic) != 0);
}
#endif
@@ -879,15 +878,15 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
atomic_add_fetch_32(&pOldConsumer->epoch, 1);
} else if (pNewConsumer->updateType == CONSUMER_UPDATE__REMOVE) {
- ASSERT(taosArrayGetSize(pNewConsumer->rebNewTopics) == 0);
- ASSERT(taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 1);
+ /*A(taosArrayGetSize(pNewConsumer->rebNewTopics) == 0);*/
+ /*A(taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 1);*/
char *removedTopic = taosArrayGetP(pNewConsumer->rebRemovedTopics, 0);
// not exist in new topic
-#if 1
+#if 0
for (int32_t i = 0; i < taosArrayGetSize(pOldConsumer->rebNewTopics); i++) {
char *topic = taosArrayGetP(pOldConsumer->rebNewTopics, i);
- ASSERT(strcmp(topic, removedTopic) != 0);
+ A(strcmp(topic, removedTopic) != 0);
}
#endif
@@ -913,7 +912,7 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
}
}
// must find the topic
- ASSERT(i < sz);
+ /*A(i < sz);*/
// set status
if (taosArrayGetSize(pOldConsumer->rebNewTopics) == 0 && taosArrayGetSize(pOldConsumer->rebRemovedTopics) == 0) {
diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c
index 43155124c1..0715556da2 100644
--- a/source/dnode/mnode/impl/src/mndDb.c
+++ b/source/dnode/mnode/impl/src/mndDb.c
@@ -776,6 +776,8 @@ static int32_t mndAlterDb(SMnode *pMnode, SRpcMsg *pReq, SDbObj *pOld, SDbObj *p
int32_t code = -1;
mndTransSetDbName(pTrans, pOld->name, NULL);
+ if (mndTrancCheckConflict(pMnode, pTrans) != 0) return -1;
+
if (mndSetAlterDbRedoLogs(pMnode, pTrans, pOld, pNew) != 0) goto _OVER;
if (mndSetAlterDbCommitLogs(pMnode, pTrans, pOld, pNew) != 0) goto _OVER;
if (mndSetAlterDbRedoActions(pMnode, pTrans, pOld, pNew) != 0) goto _OVER;
@@ -835,12 +837,14 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) {
_OVER:
if (code != 0 && code != TSDB_CODE_ACTION_IN_PROGRESS) {
+ if (terrno != 0) code = terrno;
mError("db:%s, failed to alter since %s", alterReq.db, terrstr());
}
mndReleaseDb(pMnode, pDb);
taosArrayDestroy(dbObj.cfg.pRetensions);
+ terrno = code;
return code;
}
@@ -1183,7 +1187,8 @@ int32_t mndExtractDbInfo(SMnode *pMnode, SDbObj *pDb, SUseDbRsp *pRsp, const SUs
int32_t numOfTable = mndGetDBTableNum(pDb, pMnode);
- if (pReq == NULL || pReq->vgVersion < pDb->vgVersion || pReq->dbId != pDb->uid || numOfTable != pReq->numOfTable || pReq->stateTs < pDb->stateTs) {
+ if (pReq == NULL || pReq->vgVersion < pDb->vgVersion || pReq->dbId != pDb->uid || numOfTable != pReq->numOfTable ||
+ pReq->stateTs < pDb->stateTs) {
mndBuildDBVgroupInfo(pDb, pMnode, pRsp->pVgroupInfos);
}
@@ -1298,21 +1303,22 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbVgVersion *pDbs, int32_t numOfDbs,
SUseDbRsp usedbRsp = {0};
- if ((0 == strcasecmp(pDbVgVersion->dbFName, TSDB_INFORMATION_SCHEMA_DB) || (0 == strcasecmp(pDbVgVersion->dbFName, TSDB_PERFORMANCE_SCHEMA_DB)))) {
+ if ((0 == strcasecmp(pDbVgVersion->dbFName, TSDB_INFORMATION_SCHEMA_DB) ||
+ (0 == strcasecmp(pDbVgVersion->dbFName, TSDB_PERFORMANCE_SCHEMA_DB)))) {
memcpy(usedbRsp.db, pDbVgVersion->dbFName, TSDB_DB_FNAME_LEN);
int32_t vgVersion = mndGetGlobalVgroupVersion(pMnode);
if (pDbVgVersion->vgVersion < vgVersion) {
usedbRsp.pVgroupInfos = taosArrayInit(10, sizeof(SVgroupInfo));
-
+
mndBuildDBVgroupInfo(NULL, pMnode, usedbRsp.pVgroupInfos);
usedbRsp.vgVersion = vgVersion++;
} else {
usedbRsp.vgVersion = pDbVgVersion->vgVersion;
}
usedbRsp.vgNum = taosArrayGetSize(usedbRsp.pVgroupInfos);
-
+
taosArrayPush(batchUseRsp.pArray, &usedbRsp);
-
+
continue;
}
@@ -1328,7 +1334,7 @@ int32_t mndValidateDbInfo(SMnode *pMnode, SDbVgVersion *pDbs, int32_t numOfDbs,
int32_t numOfTable = mndGetDBTableNum(pDb, pMnode);
- if (pDbVgVersion->vgVersion >= pDb->vgVersion && numOfTable == pDbVgVersion->numOfTable &&
+ if (pDbVgVersion->vgVersion >= pDb->vgVersion && numOfTable == pDbVgVersion->numOfTable &&
pDbVgVersion->stateTs == pDb->stateTs) {
mTrace("db:%s, valid dbinfo, vgVersion:%d stateTs:%" PRId64
" numOfTables:%d, not changed vgVersion:%d stateTs:%" PRId64 " numOfTables:%d",
diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c
index 0538d70101..5772864ba8 100644
--- a/source/dnode/mnode/impl/src/mndDnode.c
+++ b/source/dnode/mnode/impl/src/mndDnode.c
@@ -672,6 +672,7 @@ static int32_t mndProcessCreateDnodeReq(SRpcMsg *pReq) {
snprintf(ep, TSDB_EP_LEN, "%s:%d", createReq.fqdn, createReq.port);
pDnode = mndAcquireDnodeByEp(pMnode, ep);
if (pDnode != NULL) {
+ terrno = TSDB_CODE_MND_DNODE_ALREADY_EXIST;
goto _OVER;
}
diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c
index eb6742a564..854535c82f 100644
--- a/source/dnode/mnode/impl/src/mndMain.c
+++ b/source/dnode/mnode/impl/src/mndMain.c
@@ -101,6 +101,7 @@ static void *mndBuildCheckpointTickMsg(int32_t *pContLen, int64_t sec) {
}
static void mndPullupTrans(SMnode *pMnode) {
+ mTrace("pullup trans msg");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
if (pReq != NULL) {
@@ -110,6 +111,7 @@ static void mndPullupTrans(SMnode *pMnode) {
}
static void mndPullupTtl(SMnode *pMnode) {
+ mTrace("pullup ttl");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
SRpcMsg rpcMsg = {.msgType = TDMT_MND_TTL_TIMER, .pCont = pReq, .contLen = contLen};
@@ -117,6 +119,7 @@ static void mndPullupTtl(SMnode *pMnode) {
}
static void mndCalMqRebalance(SMnode *pMnode) {
+ mTrace("calc mq rebalance");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
if (pReq != NULL) {
@@ -143,6 +146,7 @@ static void mndStreamCheckpointTick(SMnode *pMnode, int64_t sec) {
}
static void mndPullupTelem(SMnode *pMnode) {
+ mTrace("pullup telem msg");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
if (pReq != NULL) {
@@ -152,6 +156,7 @@ static void mndPullupTelem(SMnode *pMnode) {
}
static void mndPullupGrant(SMnode *pMnode) {
+ mTrace("pullup grant msg");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
if (pReq != NULL) {
@@ -162,6 +167,7 @@ static void mndPullupGrant(SMnode *pMnode) {
}
static void mndIncreaseUpTime(SMnode *pMnode) {
+ mTrace("increate uptime");
int32_t contLen = 0;
void *pReq = mndBuildTimerMsg(&contLen);
if (pReq != NULL) {
@@ -213,6 +219,9 @@ static void mndSetVgroupOffline(SMnode *pMnode, int32_t dnodeId, int64_t curMs)
}
static void mndCheckDnodeOffline(SMnode *pMnode) {
+ mTrace("check dnode offline");
+ if (mndAcquireRpc(pMnode) != 0) return;
+
SSdb *pSdb = pMnode->pSdb;
int64_t curMs = taosGetTimestampMs();
@@ -230,6 +239,8 @@ static void mndCheckDnodeOffline(SMnode *pMnode) {
sdbRelease(pSdb, pDnode);
}
+
+ mndReleaseRpc(pMnode);
}
static void *mndThreadFp(void *param) {
@@ -277,6 +288,10 @@ static void *mndThreadFp(void *param) {
if (sec % (tsStatusInterval * 5) == 0) {
mndCheckDnodeOffline(pMnode);
}
+
+ if (sec % (MNODE_TIMEOUT_SEC / 2) == 0) {
+ mndSyncCheckTimeout(pMnode);
+ }
}
return NULL;
@@ -648,7 +663,9 @@ _OVER:
const STraceId *trace = &pMsg->info.traceId;
SEpSet epSet = {0};
+ int32_t tmpCode = terrno;
mndGetMnodeEpSet(pMnode, &epSet);
+ terrno = tmpCode;
mGDebug(
"msg:%p, type:%s failed to process since %s, mnode restored:%d stopped:%d, sync restored:%d "
diff --git a/source/dnode/mnode/impl/src/mndScheduler.c b/source/dnode/mnode/impl/src/mndScheduler.c
index af1a29def0..bdef8000bd 100644
--- a/source/dnode/mnode/impl/src/mndScheduler.c
+++ b/source/dnode/mnode/impl/src/mndScheduler.c
@@ -115,13 +115,11 @@ int32_t mndAddDispatcherToInnerTask(SMnode* pMnode, SStreamObj* pStream, SStream
if (pStream->fixedSinkVgId == 0) {
SDbObj* pDb = mndAcquireDb(pMnode, pStream->targetDb);
- ASSERT(pDb);
if (pDb->cfg.numOfVgroups > 1) {
isShuffle = true;
pTask->outputType = TASK_OUTPUT__SHUFFLE_DISPATCH;
pTask->dispatchMsgType = TDMT_STREAM_TASK_DISPATCH;
if (mndExtractDbInfo(pMnode, pDb, &pTask->shuffleDispatcher.dbInfo, NULL) < 0) {
- ASSERT(0);
return -1;
}
}
@@ -140,9 +138,7 @@ int32_t mndAddDispatcherToInnerTask(SMnode* pMnode, SStreamObj* pStream, SStream
for (int32_t j = 0; j < sinkLvSize; j++) {
SStreamTask* pLastLevelTask = taosArrayGetP(sinkLv, j);
if (pLastLevelTask->nodeId == pVgInfo->vgId) {
- ASSERT(pVgInfo->vgId > 0);
pVgInfo->taskId = pLastLevelTask->taskId;
- ASSERT(pVgInfo->taskId != 0);
break;
}
}
@@ -152,7 +148,6 @@ int32_t mndAddDispatcherToInnerTask(SMnode* pMnode, SStreamObj* pStream, SStream
pTask->dispatchMsgType = TDMT_STREAM_TASK_DISPATCH;
SArray* pArray = taosArrayGetP(pStream->tasks, 0);
// one sink only
- ASSERT(taosArrayGetSize(pArray) == 1);
SStreamTask* lastLevelTask = taosArrayGetP(pArray, 0);
pTask->fixedEpDispatcher.taskId = lastLevelTask->taskId;
pTask->fixedEpDispatcher.nodeId = lastLevelTask->nodeId;
@@ -170,7 +165,6 @@ int32_t mndAssignTaskToVg(SMnode* pMnode, SStreamTask* pTask, SSubplan* plan, co
plan->execNode.epSet = pTask->epSet;
if (qSubPlanToString(plan, &pTask->exec.qmsg, &msgLen) < 0) {
- ASSERT(0);
terrno = TSDB_CODE_QRY_INVALID_INPUT;
return -1;
}
@@ -195,7 +189,6 @@ int32_t mndAssignTaskToSnode(SMnode* pMnode, SStreamTask* pTask, SSubplan* plan,
plan->execNode.epSet = pTask->epSet;
if (qSubPlanToString(plan, &pTask->exec.qmsg, &msgLen) < 0) {
- ASSERT(0);
terrno = TSDB_CODE_QRY_INVALID_INPUT;
return -1;
}
@@ -222,8 +215,6 @@ int32_t mndAddShuffleSinkTasksToStream(SMnode* pMnode, SStreamObj* pStream) {
void* pIter = NULL;
SArray* tasks = taosArrayGetP(pStream->tasks, 0);
- ASSERT(taosArrayGetSize(pStream->tasks) == 1);
-
while (1) {
SVgObj* pVgroup = NULL;
pIter = sdbFetch(pSdb, SDB_VGROUP, pIter, (void**)&pVgroup);
@@ -257,7 +248,10 @@ int32_t mndAddShuffleSinkTasksToStream(SMnode* pMnode, SStreamObj* pStream) {
pTask->tbSink.stbUid = pStream->targetStbUid;
memcpy(pTask->tbSink.stbFullName, pStream->targetSTbName, TSDB_TABLE_FNAME_LEN);
pTask->tbSink.pSchemaWrapper = tCloneSSchemaWrapper(&pStream->outputSchema);
- ASSERT(pTask->tbSink.pSchemaWrapper);
+ if (pTask->tbSink.pSchemaWrapper == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return -1;
+ }
}
sdbRelease(pSdb, pVgroup);
}
@@ -265,7 +259,6 @@ int32_t mndAddShuffleSinkTasksToStream(SMnode* pMnode, SStreamObj* pStream) {
}
int32_t mndAddFixedSinkTaskToStream(SMnode* pMnode, SStreamObj* pStream) {
- ASSERT(pStream->fixedSinkVgId != 0);
SArray* tasks = taosArrayGetP(pStream->tasks, 0);
SStreamTask* pTask = tNewSStreamTask(pStream->uid);
if (pTask == NULL) {
@@ -275,8 +268,6 @@ int32_t mndAddFixedSinkTaskToStream(SMnode* pMnode, SStreamObj* pStream) {
pTask->fillHistory = pStream->fillHistory;
mndAddTaskToTaskSet(tasks, pTask);
- ASSERT(pStream->fixedSinkVg.vgId == pStream->fixedSinkVgId);
-
pTask->nodeId = pStream->fixedSinkVgId;
#if 0
SVgObj* pVgroup = mndAcquireVgroup(pMnode, pStream->fixedSinkVgId);
@@ -311,13 +302,16 @@ int32_t mndScheduleStream(SMnode* pMnode, SStreamObj* pStream) {
return -1;
}
int32_t planTotLevel = LIST_LENGTH(pPlan->pSubplans);
- ASSERT(planTotLevel <= 2);
+
pStream->tasks = taosArrayInit(planTotLevel, sizeof(void*));
bool hasExtraSink = false;
bool externalTargetDB = strcmp(pStream->sourceDb, pStream->targetDb) != 0;
SDbObj* pDbObj = mndAcquireDb(pMnode, pStream->targetDb);
- ASSERT(pDbObj != NULL);
+ if (pDbObj == NULL) {
+ terrno = TSDB_CODE_QRY_INVALID_INPUT;
+ return -1;
+ }
bool multiTarget = pDbObj->cfg.numOfVgroups > 1;
sdbRelease(pSdb, pDbObj);
@@ -351,7 +345,10 @@ int32_t mndScheduleStream(SMnode* pMnode, SStreamObj* pStream) {
SNodeListNode* inner = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 0);
SSubplan* plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0);
- ASSERT(plan->subplanType == SUBPLAN_TYPE_MERGE);
+ if (plan->subplanType != SUBPLAN_TYPE_MERGE) {
+ terrno = TSDB_CODE_QRY_INVALID_INPUT;
+ return -1;
+ }
pInnerTask = tNewSStreamTask(pStream->uid);
if (pInnerTask == NULL) {
@@ -409,7 +406,10 @@ int32_t mndScheduleStream(SMnode* pMnode, SStreamObj* pStream) {
SNodeListNode* inner = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 1);
SSubplan* plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0);
- ASSERT(plan->subplanType == SUBPLAN_TYPE_SCAN);
+ if (plan->subplanType != SUBPLAN_TYPE_SCAN) {
+ terrno = TSDB_CODE_QRY_INVALID_INPUT;
+ return -1;
+ }
void* pIter = NULL;
while (1) {
@@ -471,9 +471,15 @@ int32_t mndScheduleStream(SMnode* pMnode, SStreamObj* pStream) {
taosArrayPush(pStream->tasks, &taskOneLevel);
SNodeListNode* inner = (SNodeListNode*)nodesListGetNode(pPlan->pSubplans, 0);
- ASSERT(LIST_LENGTH(inner->pNodeList) == 1);
+ if (LIST_LENGTH(inner->pNodeList) != 1) {
+ terrno = TSDB_CODE_QRY_INVALID_INPUT;
+ return -1;
+ }
SSubplan* plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0);
- ASSERT(plan->subplanType == SUBPLAN_TYPE_SCAN);
+ if (plan->subplanType != SUBPLAN_TYPE_SCAN) {
+ terrno = TSDB_CODE_QRY_INVALID_INPUT;
+ return -1;
+ }
void* pIter = NULL;
while (1) {
@@ -550,9 +556,6 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib
plan = (SSubplan*)nodesListGetNode(inner->pNodeList, 0);
}
- ASSERT(pSub->unassignedVgs);
- ASSERT(taosHashGetSize(pSub->consumerHash) == 0);
-
void* pIter = NULL;
while (1) {
pIter = sdbFetch(pSdb, SDB_VGROUP, pIter, (void**)&pVgroup);
@@ -590,10 +593,6 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib
sdbRelease(pSdb, pVgroup);
}
- ASSERT(pSub->unassignedVgs->size > 0);
-
- ASSERT(taosHashGetSize(pSub->consumerHash) == 0);
-
qDestroyQueryPlan(pPlan);
return 0;
diff --git a/source/dnode/mnode/impl/src/mndStream.c b/source/dnode/mnode/impl/src/mndStream.c
index 7ee688d220..10ecd56280 100644
--- a/source/dnode/mnode/impl/src/mndStream.c
+++ b/source/dnode/mnode/impl/src/mndStream.c
@@ -164,7 +164,8 @@ SSdbRow *mndStreamActionDecode(SSdbRaw *pRaw) {
STREAM_DECODE_OVER:
taosMemoryFreeClear(buf);
if (terrno != TSDB_CODE_SUCCESS) {
- mError("stream:%s, failed to decode from raw:%p since %s", pStream == NULL ? "null" : pStream->name, pRaw, terrstr());
+ mError("stream:%s, failed to decode from raw:%p since %s", pStream == NULL ? "null" : pStream->name, pRaw,
+ terrstr());
taosMemoryFreeClear(pRow);
return NULL;
}
@@ -325,13 +326,11 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj,
// deserialize ast
if (nodesStringToNode(pObj->ast, &pAst) < 0) {
- /*ASSERT(0);*/
goto FAIL;
}
// extract output schema from ast
if (qExtractResultSchema(pAst, (int32_t *)&pObj->outputSchema.nCols, &pObj->outputSchema.pSchema) != 0) {
- /*ASSERT(0);*/
goto FAIL;
}
@@ -346,13 +345,11 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj,
// using ast and param to build physical plan
if (qCreateQueryPlan(&cxt, &pPlan, NULL) < 0) {
- /*ASSERT(0);*/
goto FAIL;
}
// save physcial plan
if (nodesNodeToString((SNode *)pPlan, false, &pObj->physicalPlan, NULL) != 0) {
- /*ASSERT(0);*/
goto FAIL;
}
@@ -360,7 +357,7 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj,
if (pCreate->numOfTags) {
pObj->tagSchema.pSchema = taosMemoryCalloc(pCreate->numOfTags, sizeof(SSchema));
}
- ASSERT(pCreate->numOfTags == taosArrayGetSize(pCreate->pTags));
+ /*A(pCreate->numOfTags == taosArrayGetSize(pCreate->pTags));*/
for (int32_t i = 0; i < pCreate->numOfTags; i++) {
SField *pField = taosArrayGet(pCreate->pTags, i);
pObj->tagSchema.pSchema[i].colId = pObj->outputSchema.nCols + i + 1;
@@ -377,9 +374,6 @@ FAIL:
}
int32_t mndPersistTaskDeployReq(STrans *pTrans, const SStreamTask *pTask) {
- if (pTask->taskLevel == TASK_LEVEL__AGG) {
- ASSERT(taosArrayGetSize(pTask->childEpInfo) != 0);
- }
SEncoder encoder;
tEncoderInit(&encoder, NULL, 0);
tEncodeSStreamTask(&encoder, pTask);
@@ -544,8 +538,6 @@ _OVER:
}
static int32_t mndPersistTaskDropReq(STrans *pTrans, SStreamTask *pTask) {
- ASSERT(pTask->nodeId != 0);
-
// vnode
/*if (pTask->nodeId > 0) {*/
SVDropStreamTaskReq *pReq = taosMemoryCalloc(1, sizeof(SVDropStreamTaskReq));
@@ -624,6 +616,16 @@ static int32_t mndProcessCreateStreamReq(SRpcMsg *pReq) {
goto _OVER;
}
+ pDb = mndAcquireDb(pMnode, streamObj.sourceDb);
+ if (pDb->cfg.replications != 1) {
+ mError("stream source db must have only 1 replica, but %s has %d", pDb->name, pDb->cfg.replications);
+ terrno = TSDB_CODE_MND_MULTI_REPLICA_SOURCE_DB;
+ mndReleaseDb(pMnode, pDb);
+ pDb = NULL;
+ goto _OVER;
+ }
+ mndReleaseDb(pMnode, pDb);
+
STrans *pTrans = mndTransCreate(pMnode, TRN_POLICY_ROLLBACK, TRN_CONFLICT_DB_INSIDE, pReq, "create-stream");
if (pTrans == NULL) {
mError("stream:%s, failed to create since %s", createStreamReq.name, terrstr());
@@ -680,7 +682,6 @@ _OVER:
}
mndReleaseStream(pMnode, pStream);
- mndReleaseDb(pMnode, pDb);
tFreeSCMCreateStreamReq(&createStreamReq);
tFreeStreamObj(&streamObj);
@@ -790,10 +791,9 @@ static int32_t mndProcessStreamDoCheckpoint(SRpcMsg *pReq) {
int32_t sz = taosArrayGetSize(pLevel);
for (int32_t j = 0; j < sz; j++) {
SStreamTask *pTask = taosArrayGetP(pLevel, j);
- ASSERT(pTask->nodeId > 0);
+ /*A(pTask->nodeId > 0);*/
SVgObj *pVgObj = mndAcquireVgroup(pMnode, pTask->nodeId);
if (pVgObj == NULL) {
- ASSERT(0);
taosRUnLockLatch(&pStream->lock);
mndReleaseStream(pMnode, pStream);
mndTransDrop(pTrans);
@@ -853,7 +853,6 @@ static int32_t mndProcessDropStreamReq(SRpcMsg *pReq) {
SMDropStreamReq dropReq = {0};
if (tDeserializeSMDropStreamReq(pReq->pCont, pReq->contLen, &dropReq) < 0) {
- ASSERT(0);
terrno = TSDB_CODE_INVALID_MSG;
return -1;
}
diff --git a/source/dnode/mnode/impl/src/mndSync.c b/source/dnode/mnode/impl/src/mndSync.c
index 10b1e36496..c96faddc4c 100644
--- a/source/dnode/mnode/impl/src/mndSync.c
+++ b/source/dnode/mnode/impl/src/mndSync.c
@@ -78,35 +78,38 @@ int32_t mndProcessWriteMsg(const SSyncFSM *pFsm, SRpcMsg *pMsg, const SFsmCbMeta
SSdbRaw *pRaw = pMsg->pCont;
int32_t transId = sdbGetIdFromRaw(pMnode->pSdb, pRaw);
- pMgmt->errCode = pMeta->code;
mInfo("trans:%d, is proposed, saved:%d code:0x%x, apply index:%" PRId64 " term:%" PRIu64 " config:%" PRId64
- " role:%s raw:%p",
+ " role:%s raw:%p sec:%d seq:%" PRId64,
transId, pMgmt->transId, pMeta->code, pMeta->index, pMeta->term, pMeta->lastConfigIndex, syncStr(pMeta->state),
- pRaw);
+ pRaw, pMgmt->transSec, pMgmt->transSeq);
- if (pMgmt->errCode == 0) {
+ if (pMeta->code == 0) {
sdbWriteWithoutFree(pMnode->pSdb, pRaw);
sdbSetApplyInfo(pMnode->pSdb, pMeta->index, pMeta->term, pMeta->lastConfigIndex);
}
- taosWLockLatch(&pMgmt->lock);
+ taosThreadMutexLock(&pMgmt->lock);
+ pMgmt->errCode = pMeta->code;
+
if (transId <= 0) {
- taosWUnLockLatch(&pMgmt->lock);
- mError("trans:%d, invalid commit msg", transId);
+ taosThreadMutexUnlock(&pMgmt->lock);
+ mError("trans:%d, invalid commit msg, cache transId:%d seq:%" PRId64, transId, pMgmt->transId, pMgmt->transSeq);
} else if (transId == pMgmt->transId) {
if (pMgmt->errCode != 0) {
mError("trans:%d, failed to propose since %s, post sem", transId, tstrerror(pMgmt->errCode));
} else {
- mInfo("trans:%d, is proposed and post sem", transId);
+ mInfo("trans:%d, is proposed and post sem, seq:%" PRId64, transId, pMgmt->transSeq);
}
pMgmt->transId = 0;
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
tsem_post(&pMgmt->syncSem);
- taosWUnLockLatch(&pMgmt->lock);
+ taosThreadMutexUnlock(&pMgmt->lock);
} else {
- taosWUnLockLatch(&pMgmt->lock);
+ taosThreadMutexUnlock(&pMgmt->lock);
STrans *pTrans = mndAcquireTrans(pMnode, transId);
if (pTrans != NULL) {
- mInfo("trans:%d, execute in mnode which not leader", transId);
+ mInfo("trans:%d, execute in mnode which not leader or sync timeout", transId);
mndTransExecute(pMnode, pTrans);
mndReleaseTrans(pMnode, pTrans);
// sdbWriteFile(pMnode->pSdb, SDB_WRITE_DELTA);
@@ -198,18 +201,20 @@ int32_t mndSnapshotDoWrite(const SSyncFSM *pFsm, void *pWriter, void *pBuf, int3
}
static void mndBecomeFollower(const SSyncFSM *pFsm) {
- SMnode *pMnode = pFsm->data;
+ SMnode *pMnode = pFsm->data;
+ SSyncMgmt *pMgmt = &pMnode->syncMgmt;
mInfo("vgId:1, become follower");
- taosWLockLatch(&pMnode->syncMgmt.lock);
- if (pMnode->syncMgmt.transId != 0) {
- mInfo("vgId:1, become follower and post sem, trans:%d, failed to propose since not leader",
- pMnode->syncMgmt.transId);
- pMnode->syncMgmt.transId = 0;
- pMnode->syncMgmt.errCode = TSDB_CODE_SYN_NOT_LEADER;
- tsem_post(&pMnode->syncMgmt.syncSem);
+ taosThreadMutexLock(&pMgmt->lock);
+ if (pMgmt->transId != 0) {
+ mInfo("vgId:1, become follower and post sem, trans:%d, failed to propose since not leader", pMgmt->transId);
+ pMgmt->transId = 0;
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
+ pMgmt->errCode = TSDB_CODE_SYN_NOT_LEADER;
+ tsem_post(&pMgmt->syncSem);
}
- taosWUnLockLatch(&pMnode->syncMgmt.lock);
+ taosThreadMutexUnlock(&pMgmt->lock);
}
static void mndBecomeLeader(const SSyncFSM *pFsm) {
@@ -265,8 +270,10 @@ SSyncFSM *mndSyncMakeFsm(SMnode *pMnode) {
int32_t mndInitSync(SMnode *pMnode) {
SSyncMgmt *pMgmt = &pMnode->syncMgmt;
- taosInitRWLatch(&pMgmt->lock);
+ taosThreadMutexInit(&pMgmt->lock, NULL);
pMgmt->transId = 0;
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
SSyncInfo syncInfo = {
.snapshotStrategy = SYNC_STRATEGY_STANDARD_SNAPSHOT,
@@ -313,12 +320,38 @@ void mndCleanupSync(SMnode *pMnode) {
mInfo("mnode-sync is stopped, id:%" PRId64, pMgmt->sync);
tsem_destroy(&pMgmt->syncSem);
+ taosThreadMutexDestroy(&pMgmt->lock);
memset(pMgmt, 0, sizeof(SSyncMgmt));
}
+void mndSyncCheckTimeout(SMnode *pMnode) {
+ mTrace("check sync timeout");
+ SSyncMgmt *pMgmt = &pMnode->syncMgmt;
+ taosThreadMutexLock(&pMgmt->lock);
+ if (pMgmt->transId != 0) {
+ int32_t curSec = taosGetTimestampSec();
+ int32_t delta = curSec - pMgmt->transSec;
+ if (delta > MNODE_TIMEOUT_SEC) {
+ mError("trans:%d, failed to propose since timeout, start:%d cur:%d delta:%d seq:%" PRId64, pMgmt->transId,
+ pMgmt->transSec, curSec, delta, pMgmt->transSeq);
+ pMgmt->transId = 0;
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
+ terrno = TSDB_CODE_SYN_TIMEOUT;
+ pMgmt->errCode = TSDB_CODE_SYN_TIMEOUT;
+ tsem_post(&pMgmt->syncSem);
+ } else {
+ mDebug("trans:%d, waiting for sync confirm, start:%d cur:%d delta:%d seq:%" PRId64, pMgmt->transId,
+ pMgmt->transSec, curSec, curSec - pMgmt->transSec, pMgmt->transSeq);
+ }
+ } else {
+ // mTrace("check sync timeout msg, no trans waiting for confirm");
+ }
+ taosThreadMutexUnlock(&pMgmt->lock);
+}
+
int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw, int32_t transId) {
SSyncMgmt *pMgmt = &pMnode->syncMgmt;
- pMgmt->errCode = 0;
SRpcMsg req = {.msgType = TDMT_MND_APPLY_MSG, .contLen = sdbGetRawTotalSize(pRaw)};
if (req.contLen <= 0) return -1;
@@ -327,35 +360,42 @@ int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw, int32_t transId) {
if (req.pCont == NULL) return -1;
memcpy(req.pCont, pRaw, req.contLen);
- taosWLockLatch(&pMgmt->lock);
+ taosThreadMutexLock(&pMgmt->lock);
+ pMgmt->errCode = 0;
+
if (pMgmt->transId != 0) {
mError("trans:%d, can't be proposed since trans:%d already waiting for confirm", transId, pMgmt->transId);
- taosWUnLockLatch(&pMgmt->lock);
+ taosThreadMutexUnlock(&pMgmt->lock);
terrno = TSDB_CODE_MND_LAST_TRANS_NOT_FINISHED;
- return -1;
+ return terrno;
}
mInfo("trans:%d, will be proposed", transId);
pMgmt->transId = transId;
- taosWUnLockLatch(&pMgmt->lock);
+ pMgmt->transSec = taosGetTimestampSec();
- int32_t code = syncPropose(pMgmt->sync, &req, false);
+ int64_t seq = 0;
+ int32_t code = syncPropose(pMgmt->sync, &req, false, &seq);
if (code == 0) {
- mInfo("trans:%d, is proposing and wait sem", pMgmt->transId);
+ mInfo("trans:%d, is proposing and wait sem, seq:%" PRId64, transId, seq);
+ pMgmt->transSeq = seq;
+ taosThreadMutexUnlock(&pMgmt->lock);
tsem_wait(&pMgmt->syncSem);
} else if (code > 0) {
mInfo("trans:%d, confirm at once since replica is 1, continue execute", transId);
- taosWLockLatch(&pMgmt->lock);
pMgmt->transId = 0;
- taosWUnLockLatch(&pMgmt->lock);
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
+ taosThreadMutexUnlock(&pMgmt->lock);
sdbWriteWithoutFree(pMnode->pSdb, pRaw);
sdbSetApplyInfo(pMnode->pSdb, req.info.conn.applyIndex, req.info.conn.applyTerm, SYNC_INDEX_INVALID);
code = 0;
} else {
mError("trans:%d, failed to proposed since %s", transId, terrstr());
- taosWLockLatch(&pMgmt->lock);
pMgmt->transId = 0;
- taosWUnLockLatch(&pMgmt->lock);
+ pMgmt->transSec = 0;
+ pMgmt->transSeq = 0;
+ taosThreadMutexUnlock(&pMgmt->lock);
if (terrno == 0) {
terrno = TSDB_CODE_APP_ERROR;
}
@@ -369,7 +409,7 @@ int32_t mndSyncPropose(SMnode *pMnode, SSdbRaw *pRaw, int32_t transId) {
}
terrno = pMgmt->errCode;
- return pMgmt->errCode;
+ return terrno;
}
void mndSyncStart(SMnode *pMnode) {
@@ -382,13 +422,17 @@ void mndSyncStart(SMnode *pMnode) {
}
void mndSyncStop(SMnode *pMnode) {
- taosWLockLatch(&pMnode->syncMgmt.lock);
- if (pMnode->syncMgmt.transId != 0) {
- mInfo("vgId:1, is stopped and post sem, trans:%d", pMnode->syncMgmt.transId);
- pMnode->syncMgmt.transId = 0;
- tsem_post(&pMnode->syncMgmt.syncSem);
+ SSyncMgmt *pMgmt = &pMnode->syncMgmt;
+
+ taosThreadMutexLock(&pMgmt->lock);
+ if (pMgmt->transId != 0) {
+ mInfo("vgId:1, is stopped and post sem, trans:%d", pMgmt->transId);
+ pMgmt->transId = 0;
+ pMgmt->transSec = 0;
+ pMgmt->errCode = TSDB_CODE_APP_IS_STOPPING;
+ tsem_post(&pMgmt->syncSem);
}
- taosWUnLockLatch(&pMnode->syncMgmt.lock);
+ taosThreadMutexUnlock(&pMgmt->lock);
}
bool mndIsLeader(SMnode *pMnode) {
diff --git a/source/dnode/mnode/impl/src/mndTrans.c b/source/dnode/mnode/impl/src/mndTrans.c
index 4b11884050..b92be19741 100644
--- a/source/dnode/mnode/impl/src/mndTrans.c
+++ b/source/dnode/mnode/impl/src/mndTrans.c
@@ -628,6 +628,7 @@ STrans *mndTransCreate(SMnode *pMnode, ETrnPolicy policy, ETrnConflct conflict,
pTrans->undoActions = taosArrayInit(TRANS_ARRAY_SIZE, sizeof(STransAction));
pTrans->commitActions = taosArrayInit(TRANS_ARRAY_SIZE, sizeof(STransAction));
pTrans->pRpcArray = taosArrayInit(1, sizeof(SRpcHandleInfo));
+ taosInitRWLatch(&pTrans->lockRpcArray);
if (pTrans->redoActions == NULL || pTrans->undoActions == NULL || pTrans->commitActions == NULL ||
pTrans->pRpcArray == NULL) {
@@ -737,12 +738,14 @@ int32_t mndSetRpcInfoForDbTrans(SMnode *pMnode, SRpcMsg *pMsg, EOperType oper, c
if (pTrans->oper == oper) {
if (strcasecmp(dbname, pTrans->dbname) == 0) {
mInfo("trans:%d, db:%s oper:%d matched with input", pTrans->id, dbname, oper);
+ taosWLockLatch(&pTrans->lockRpcArray);
if (pTrans->pRpcArray == NULL) {
- pTrans->pRpcArray = taosArrayInit(1, sizeof(SRpcHandleInfo));
+ pTrans->pRpcArray = taosArrayInit(4, sizeof(SRpcHandleInfo));
}
if (pTrans->pRpcArray != NULL && taosArrayPush(pTrans->pRpcArray, &pMsg->info) != NULL) {
code = 0;
}
+ taosWUnLockLatch(&pTrans->lockRpcArray);
sdbRelease(pMnode->pSdb, pTrans);
break;
@@ -838,7 +841,7 @@ static bool mndCheckTransConflict(SMnode *pMnode, STrans *pNew) {
return conflict;
}
-int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
+int32_t mndTrancCheckConflict(SMnode *pMnode, STrans *pTrans) {
if (pTrans->conflict == TRN_CONFLICT_DB || pTrans->conflict == TRN_CONFLICT_DB_INSIDE) {
if (strlen(pTrans->dbname) == 0 && strlen(pTrans->stbname) == 0) {
terrno = TSDB_CODE_MND_TRANS_CONFLICT;
@@ -853,6 +856,14 @@ int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
return -1;
}
+ return 0;
+}
+
+int32_t mndTransPrepare(SMnode *pMnode, STrans *pTrans) {
+ if (mndTrancCheckConflict(pMnode, pTrans) != 0) {
+ return -1;
+ }
+
if (taosArrayGetSize(pTrans->commitActions) <= 0) {
terrno = TSDB_CODE_MND_TRANS_CLOG_IS_NULL;
mError("trans:%d, failed to prepare since %s", pTrans->id, terrstr());
@@ -919,7 +930,8 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) {
}
} else {
if (pTrans->stage == TRN_STAGE_REDO_ACTION) {
- if (code == TSDB_CODE_SYN_NOT_LEADER || code == TSDB_CODE_SYN_RESTORING || code == TSDB_CODE_APP_IS_STARTING) {
+ if (code == TSDB_CODE_SYN_NOT_LEADER || code == TSDB_CODE_SYN_RESTORING || code == TSDB_CODE_APP_IS_STARTING ||
+ code == TSDB_CODE_SYN_PROPOSE_NOT_READY) {
if (pTrans->failedTimes > 60) sendRsp = true;
} else {
if (pTrans->failedTimes > 6) sendRsp = true;
@@ -935,8 +947,12 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) {
pTrans->failedTimes, code);
}
+ taosWLockLatch(&pTrans->lockRpcArray);
int32_t size = taosArrayGetSize(pTrans->pRpcArray);
- if (size <= 0) return;
+ if (size <= 0) {
+ taosWUnLockLatch(&pTrans->lockRpcArray);
+ return;
+ }
for (int32_t i = 0; i < size; ++i) {
SRpcHandleInfo *pInfo = taosArrayGet(pTrans->pRpcArray, i);
@@ -988,6 +1004,7 @@ static void mndTransSendRpcRsp(SMnode *pMnode, STrans *pTrans) {
}
}
taosArrayClear(pTrans->pRpcArray);
+ taosWUnLockLatch(&pTrans->lockRpcArray);
}
int32_t mndTransProcessRsp(SRpcMsg *pRsp) {
@@ -1027,6 +1044,7 @@ int32_t mndTransProcessRsp(SRpcMsg *pRsp) {
if (pAction != NULL) {
pAction->msgReceived = 1;
pAction->errCode = pRsp->code;
+ pTrans->lastErrorNo = pRsp->code;
}
mInfo("trans:%d, %s:%d response is received, code:0x%x, accept:0x%x retry:0x%x", transId, mndTransStr(pAction->stage),
@@ -1238,7 +1256,7 @@ static int32_t mndTransExecuteRedoActionsSerial(SMnode *pMnode, STrans *pTrans)
if (numOfActions == 0) return code;
if (pTrans->redoActionPos >= numOfActions) return code;
- mInfo("trans:%d, execute %d actions serial", pTrans->id, numOfActions);
+ mInfo("trans:%d, execute %d actions serial, current redoAction:%d", pTrans->id, numOfActions, pTrans->redoActionPos);
for (int32_t action = pTrans->redoActionPos; action < numOfActions; ++action) {
STransAction *pAction = taosArrayGet(pTrans->redoActions, pTrans->redoActionPos);
@@ -1289,13 +1307,16 @@ static int32_t mndTransExecuteRedoActionsSerial(SMnode *pMnode, STrans *pTrans)
} else if (code == TSDB_CODE_ACTION_IN_PROGRESS) {
mInfo("trans:%d, %s:%d is in progress and wait it finish", pTrans->id, mndTransStr(pAction->stage), pAction->id);
break;
- } else if (code == pAction->retryCode) {
+ } else if (code == pAction->retryCode || code == TSDB_CODE_SYN_PROPOSE_NOT_READY ||
+ code == TSDB_CODE_SYN_RESTORING || code == TSDB_CODE_SYN_NOT_LEADER) {
mInfo("trans:%d, %s:%d receive code:0x%x and retry", pTrans->id, mndTransStr(pAction->stage), pAction->id, code);
+ pTrans->lastErrorNo = code;
taosMsleep(300);
action--;
continue;
} else {
terrno = code;
+ pTrans->lastErrorNo = code;
pTrans->code = code;
mInfo("trans:%d, %s:%d receive code:0x%x and wait another schedule, failedTimes:%d", pTrans->id,
mndTransStr(pAction->stage), pAction->id, code, pTrans->failedTimes);
@@ -1324,6 +1345,7 @@ static bool mndTransPerformRedoActionStage(SMnode *pMnode, STrans *pTrans) {
}
if (mndCannotExecuteTransAction(pMnode)) return false;
+ terrno = code;
if (code == 0) {
pTrans->code = 0;
diff --git a/source/dnode/mnode/impl/src/mndUser.c b/source/dnode/mnode/impl/src/mndUser.c
index 806ba0c98e..efce6255fb 100644
--- a/source/dnode/mnode/impl/src/mndUser.c
+++ b/source/dnode/mnode/impl/src/mndUser.c
@@ -838,9 +838,9 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
if (pUser->superUser) {
cols = 0;
- SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
- char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
+ char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes);
+ SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
colDataAppend(pColInfo, numOfRows, (const char *)userName, false);
char privilege[20] = {0};
@@ -859,9 +859,9 @@ static int32_t mndRetrievePrivileges(SRpcMsg *pReq, SShowObj *pShow, SSDataBlock
char *db = taosHashIterate(pUser->readDbs, NULL);
while (db != NULL) {
cols = 0;
- SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
- char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
+ char userName[TSDB_USER_LEN + VARSTR_HEADER_SIZE] = {0};
STR_WITH_MAXSIZE_TO_VARSTR(userName, pUser->user, pShow->pMeta->pSchemas[cols].bytes);
+ SColumnInfoData *pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
colDataAppend(pColInfo, numOfRows, (const char *)userName, false);
char privilege[20] = {0};
diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c
index 4a6f0d14da..31ab1f3259 100644
--- a/source/dnode/mnode/impl/src/mndVgroup.c
+++ b/source/dnode/mnode/impl/src/mndVgroup.c
@@ -1126,8 +1126,12 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb,
}
if (!force) {
+#if 1
+ {
+#else
if (newVg.replica == 1) {
- mInfo("vgId:%d, will add 1 vnode, replca:1", pVgroup->vgId);
+#endif
+ mInfo("vgId:%d, will add 1 vnode, replca:%d", pVgroup->vgId, newVg.replica);
if (mndAddVnodeToVgroup(pMnode, pTrans, &newVg, pArray) != 0) return -1;
for (int32_t i = 0; i < newVg.replica - 1; ++i) {
if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1;
@@ -1155,6 +1159,9 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb,
if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1;
}
if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1;
+#if 1
+ }
+#else
} else { // new replica == 3
mInfo("vgId:%d, will add 1 vnode, replca:3", pVgroup->vgId);
if (mndAddVnodeToVgroup(pMnode, pTrans, &newVg, pArray) != 0) return -1;
@@ -1181,6 +1188,7 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb,
if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[vnIndex]) != 0) return -1;
if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1;
}
+#endif
} else {
mInfo("vgId:%d, will add 1 vnode and force remove 1 vnode", pVgroup->vgId);
if (mndAddVnodeToVgroup(pMnode, pTrans, &newVg, pArray) != 0) return -1;
diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h
index 99260ffefd..540f0c3127 100644
--- a/source/dnode/vnode/inc/vnode.h
+++ b/source/dnode/vnode/inc/vnode.h
@@ -54,6 +54,7 @@ int32_t vnodeAlter(const char *path, SAlterVnodeReplicaReq *pReq, STfs *pTfs);
void vnodeDestroy(const char *path, STfs *pTfs);
SVnode *vnodeOpen(const char *path, STfs *pTfs, SMsgCb msgCb);
void vnodePreClose(SVnode *pVnode);
+void vnodeSyncCheckTimeout(SVnode* pVnode);
void vnodeClose(SVnode *pVnode);
int32_t vnodeStart(SVnode *pVnode);
diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h
index 6788213669..7adb18b2dc 100644
--- a/source/dnode/vnode/src/inc/vnodeInt.h
+++ b/source/dnode/vnode/src/inc/vnodeInt.h
@@ -87,17 +87,24 @@ typedef struct SCommitInfo SCommitInfo;
#define VNODE_RSMA1_DIR "rsma1"
#define VNODE_RSMA2_DIR "rsma2"
+#define VND_INFO_FNAME "vnode.json"
+
// vnd.h
void* vnodeBufPoolMalloc(SVBufPool* pPool, int size);
void vnodeBufPoolFree(SVBufPool* pPool, void* p);
void vnodeBufPoolRef(SVBufPool* pPool);
void vnodeBufPoolUnRef(SVBufPool* pPool);
+int vnodeDecodeInfo(uint8_t* pData, SVnodeInfo* pInfo);
// meta
typedef struct SMCtbCursor SMCtbCursor;
typedef struct SMStbCursor SMStbCursor;
typedef struct STbUidStore STbUidStore;
+#define META_BEGIN_HEAP_BUFFERPOOL 0
+#define META_BEGIN_HEAP_OS 1
+#define META_BEGIN_HEAP_NIL 2
+
int metaOpen(SVnode* pVnode, SMeta** ppMeta, int8_t rollback);
int metaClose(SMeta* pMeta);
int metaBegin(SMeta* pMeta, int8_t fromSys);
@@ -105,6 +112,7 @@ TXN* metaGetTxn(SMeta* pMeta);
int metaCommit(SMeta* pMeta, TXN* txn);
int metaFinishCommit(SMeta* pMeta, TXN* txn);
int metaPrepareAsyncCommit(SMeta* pMeta);
+int metaAbort(SMeta* pMeta);
int metaCreateSTable(SMeta* pMeta, int64_t version, SVCreateStbReq* pReq);
int metaAlterSTable(SMeta* pMeta, int64_t version, SVCreateStbReq* pReq);
int metaDropSTable(SMeta* pMeta, int64_t verison, SVDropStbReq* pReq, SArray* tbUidList);
@@ -234,6 +242,7 @@ int32_t tsdbSnapRead(STsdbSnapReader* pReader, uint8_t** ppData);
// STsdbSnapWriter ========================================
int32_t tsdbSnapWriterOpen(STsdb* pTsdb, int64_t sver, int64_t ever, STsdbSnapWriter** ppWriter);
int32_t tsdbSnapWrite(STsdbSnapWriter* pWriter, uint8_t* pData, uint32_t nData);
+int32_t tsdbSnapWriterPrepareClose(STsdbSnapWriter* pWriter);
int32_t tsdbSnapWriterClose(STsdbSnapWriter** ppWriter, int8_t rollback);
// STqSnapshotReader ==
int32_t tqSnapReaderOpen(STQ* pTq, int64_t sver, int64_t ever, STqSnapReader** ppReader);
@@ -340,7 +349,12 @@ struct SVnode {
bool blocked;
bool restored;
tsem_t syncSem;
+ int32_t blockSec;
+ int64_t blockSeq;
SQHandle* pQuery;
+#if 0
+ SRpcHandleInfo blockInfo;
+#endif
};
#define TD_VID(PVNODE) ((PVNODE)->config.vgId)
diff --git a/source/dnode/vnode/src/meta/metaCommit.c b/source/dnode/vnode/src/meta/metaCommit.c
index 5eb27679bb..ac8d99ccf0 100644
--- a/source/dnode/vnode/src/meta/metaCommit.c
+++ b/source/dnode/vnode/src/meta/metaCommit.c
@@ -19,19 +19,21 @@ static FORCE_INLINE void *metaMalloc(void *pPool, size_t size) { return vnodeBuf
static FORCE_INLINE void metaFree(void *pPool, void *p) { vnodeBufPoolFree((SVBufPool *)pPool, p); }
// begin a meta txn
-int metaBegin(SMeta *pMeta, int8_t fromSys) {
- void *(*xMalloc)(void *, size_t);
- void (*xFree)(void *, void *);
+int metaBegin(SMeta *pMeta, int8_t heap) {
+ void *(*xMalloc)(void *, size_t) = NULL;
+ void (*xFree)(void *, void *) = NULL;
void *xArg = NULL;
- if (fromSys) {
+ // default heap to META_BEGIN_HEAP_NIL
+ if (heap == META_BEGIN_HEAP_OS) {
xMalloc = tdbDefaultMalloc;
xFree = tdbDefaultFree;
- } else {
+ } else if (heap == META_BEGIN_HEAP_BUFFERPOOL) {
xMalloc = metaMalloc;
xFree = metaFree;
xArg = pMeta->pVnode->inUse;
}
+
if (tdbBegin(pMeta->pEnv, &pMeta->txn, xMalloc, xFree, xArg, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED) < 0) {
return -1;
}
diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c
index 6a4dcf6ead..054e785980 100644
--- a/source/dnode/vnode/src/meta/metaSnapshot.c
+++ b/source/dnode/vnode/src/meta/metaSnapshot.c
@@ -145,7 +145,7 @@ int32_t metaSnapWriterOpen(SMeta* pMeta, int64_t sver, int64_t ever, SMetaSnapWr
pWriter->sver = sver;
pWriter->ever = ever;
- metaBegin(pMeta, 1);
+ metaBegin(pMeta, META_BEGIN_HEAP_NIL);
*ppWriter = pWriter;
return code;
@@ -161,7 +161,11 @@ int32_t metaSnapWriterClose(SMetaSnapWriter** ppWriter, int8_t rollback) {
SMetaSnapWriter* pWriter = *ppWriter;
if (rollback) {
- ASSERT(0);
+ metaInfo("vgId:%d, meta snapshot writer close and rollback start ", TD_VID(pWriter->pMeta->pVnode));
+ code = metaAbort(pWriter->pMeta);
+ metaInfo("vgId:%d, meta snapshot writer close and rollback finished, code:0x%x", TD_VID(pWriter->pMeta->pVnode),
+ code);
+ if (code) goto _err;
} else {
code = metaCommit(pWriter->pMeta, pWriter->pMeta->txn);
if (code) goto _err;
diff --git a/source/dnode/vnode/src/meta/metaTable.c b/source/dnode/vnode/src/meta/metaTable.c
index 722a93137c..dc295ae5e7 100644
--- a/source/dnode/vnode/src/meta/metaTable.c
+++ b/source/dnode/vnode/src/meta/metaTable.c
@@ -710,6 +710,9 @@ int metaUpdateCtimeIdx(SMeta *pMeta, const SMetaEntry *pME) {
if (metaBuildCtimeIdxKey(&ctimeKey, pME) < 0) {
return 0;
}
+ metaDebug("vgId:%d, start to save ctime:%" PRId64 " uid:%" PRId64 " ct:%" PRId64, TD_VID(pMeta->pVnode), pME->version,
+ pME->uid, ctimeKey.ctime);
+
return tdbTbInsert(pMeta->pCtimeIdx, &ctimeKey, sizeof(ctimeKey), NULL, 0, pMeta->txn);
}
diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c
index 09717c823e..222339d387 100644
--- a/source/dnode/vnode/src/tq/tq.c
+++ b/source/dnode/vnode/src/tq/tq.c
@@ -92,21 +92,21 @@ STQ* tqOpen(const char* path, SVnode* pVnode) {
taosHashSetFreeFp(pTq->pCheckInfo, (FDelete)tDeleteSTqCheckInfo);
if (tqMetaOpen(pTq) < 0) {
- ASSERT(0);
+ return NULL;
}
pTq->pOffsetStore = tqOffsetOpen(pTq);
if (pTq->pOffsetStore == NULL) {
- ASSERT(0);
+ return NULL;
}
pTq->pStreamMeta = streamMetaOpen(path, pTq, (FTaskExpand*)tqExpandTask, pTq->pVnode->config.vgId);
if (pTq->pStreamMeta == NULL) {
- ASSERT(0);
+ return NULL;
}
if (streamLoadTasks(pTq->pStreamMeta) < 0) {
- ASSERT(0);
+ return NULL;
}
return pTq;
@@ -166,19 +166,17 @@ int32_t tqSendMetaPollRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq,
int32_t tqPushDataRsp(STQ* pTq, STqPushEntry* pPushEntry) {
SMqDataRsp* pRsp = &pPushEntry->dataRsp;
- ASSERT(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
- ASSERT(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
+#if 0
+ A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
+ A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
- ASSERT(!pRsp->withSchema);
- ASSERT(taosArrayGetSize(pRsp->blockSchema) == 0);
+ A(!pRsp->withSchema);
+ A(taosArrayGetSize(pRsp->blockSchema) == 0);
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
- /*if (pRsp->blockNum > 0) {*/
- /*ASSERT(pRsp->rspOffset.version > pRsp->reqOffset.version);*/
- /*} else {*/
- ASSERT(pRsp->rspOffset.version > pRsp->reqOffset.version);
- /*}*/
+ A(pRsp->rspOffset.version > pRsp->reqOffset.version);
}
+#endif
int32_t len = 0;
int32_t code = 0;
@@ -223,19 +221,21 @@ int32_t tqPushDataRsp(STQ* pTq, STqPushEntry* pPushEntry) {
}
int32_t tqSendDataRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const SMqDataRsp* pRsp) {
- ASSERT(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
- ASSERT(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
+#if 0
+ A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
+ A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
- ASSERT(!pRsp->withSchema);
- ASSERT(taosArrayGetSize(pRsp->blockSchema) == 0);
+ A(!pRsp->withSchema);
+ A(taosArrayGetSize(pRsp->blockSchema) == 0);
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
if (pRsp->blockNum > 0) {
- ASSERT(pRsp->rspOffset.version > pRsp->reqOffset.version);
+ A(pRsp->rspOffset.version > pRsp->reqOffset.version);
} else {
- ASSERT(pRsp->rspOffset.version >= pRsp->reqOffset.version);
+ A(pRsp->rspOffset.version >= pRsp->reqOffset.version);
}
}
+#endif
int32_t len = 0;
int32_t code = 0;
@@ -279,22 +279,24 @@ int32_t tqSendDataRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, con
}
int32_t tqSendTaosxRsp(STQ* pTq, const SRpcMsg* pMsg, const SMqPollReq* pReq, const STaosxRsp* pRsp) {
- ASSERT(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
- ASSERT(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
+#if 0
+ A(taosArrayGetSize(pRsp->blockData) == pRsp->blockNum);
+ A(taosArrayGetSize(pRsp->blockDataLen) == pRsp->blockNum);
if (pRsp->withSchema) {
- ASSERT(taosArrayGetSize(pRsp->blockSchema) == pRsp->blockNum);
+ A(taosArrayGetSize(pRsp->blockSchema) == pRsp->blockNum);
} else {
- ASSERT(taosArrayGetSize(pRsp->blockSchema) == 0);
+ A(taosArrayGetSize(pRsp->blockSchema) == 0);
}
if (pRsp->reqOffset.type == TMQ_OFFSET__LOG) {
if (pRsp->blockNum > 0) {
- ASSERT(pRsp->rspOffset.version > pRsp->reqOffset.version);
+ A(pRsp->rspOffset.version > pRsp->reqOffset.version);
} else {
- ASSERT(pRsp->rspOffset.version >= pRsp->reqOffset.version);
+ A(pRsp->rspOffset.version >= pRsp->reqOffset.version);
}
}
+#endif
int32_t len = 0;
int32_t code = 0;
@@ -348,7 +350,6 @@ int32_t tqProcessOffsetCommitReq(STQ* pTq, int64_t version, char* msg, int32_t m
SDecoder decoder;
tDecoderInit(&decoder, msg, msgLen);
if (tDecodeSTqOffset(&decoder, &offset) < 0) {
- ASSERT(0);
return -1;
}
tDecoderClear(&decoder);
@@ -362,8 +363,8 @@ int32_t tqProcessOffsetCommitReq(STQ* pTq, int64_t version, char* msg, int32_t m
if (offset.val.version + 1 == version) {
offset.val.version += 1;
}
- } else {
- ASSERT(0);
+ /*} else {*/
+ /*A(0);*/
}
STqOffset* pOffset = tqOffsetRead(pTq->pOffsetStore, offset.subKey);
if (pOffset != NULL && tqOffsetLessOrEqual(&offset, pOffset)) {
@@ -371,7 +372,6 @@ int32_t tqProcessOffsetCommitReq(STQ* pTq, int64_t version, char* msg, int32_t m
}
if (tqOffsetWrite(pTq->pOffsetStore, &offset) < 0) {
- ASSERT(0);
return -1;
}
@@ -434,7 +434,7 @@ static int32_t tqInitDataRsp(SMqDataRsp* pRsp, const SMqPollReq* pReq, int8_t su
}
#endif
- ASSERT(subType == TOPIC_SUB_TYPE__COLUMN);
+ /*A(subType == TOPIC_SUB_TYPE__COLUMN);*/
pRsp->withSchema = false;
return 0;
@@ -473,7 +473,6 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
// 1.find handle
STqHandle* pHandle = taosHashGet(pTq->pHandle, req.subKey, strlen(req.subKey));
- /*ASSERT(pHandle);*/
if (pHandle == NULL) {
tqError("tmq poll: no consumer handle for consumer:%" PRId64 ", in vgId:%d, subkey %s", consumerId,
TD_VID(pTq->pVnode), req.subKey);
@@ -560,7 +559,9 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
tqInitDataRsp(&dataRsp, &req, pHandle->execHandle.subType);
// lock
taosWLockLatch(&pTq->pushLock);
- tqScanData(pTq, pHandle, &dataRsp, &fetchOffsetNew);
+ if (tqScanData(pTq, pHandle, &dataRsp, &fetchOffsetNew) < 0) {
+ return -1;
+ }
#if 1
if (dataRsp.blockNum == 0 && dataRsp.reqOffset.type == TMQ_OFFSET__LOG &&
@@ -599,7 +600,7 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
}
// for taosx
- ASSERT(pHandle->execHandle.subType != TOPIC_SUB_TYPE__COLUMN);
+ /*A(pHandle->execHandle.subType != TOPIC_SUB_TYPE__COLUMN);*/
SMqMetaRsp metaRsp = {0};
@@ -607,7 +608,9 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
tqInitTaosxRsp(&taosxRsp, &req);
if (fetchOffsetNew.type != TMQ_OFFSET__LOG) {
- tqScanTaosx(pTq, pHandle, &taosxRsp, &metaRsp, &fetchOffsetNew);
+ if (tqScanTaosx(pTq, pHandle, &taosxRsp, &metaRsp, &fetchOffsetNew) < 0) {
+ return -1;
+ }
if (metaRsp.metaRspLen > 0) {
if (tqSendMetaPollRsp(pTq, pMsg, &req, &metaRsp) < 0) {
@@ -690,8 +693,8 @@ int32_t tqProcessPollReq(STQ* pTq, SRpcMsg* pMsg) {
}
} else {
- ASSERT(pHandle->fetchMeta);
- ASSERT(IS_META_MSG(pHead->msgType));
+ /*A(pHandle->fetchMeta);*/
+ /*A(IS_META_MSG(pHead->msgType));*/
tqDebug("fetch meta msg, ver:%" PRId64 ", type:%d", pHead->version, pHead->msgType);
tqOffsetResetToLog(&metaRsp.rspOffset, fetchVer);
metaRsp.resMsgType = pHead->msgType;
@@ -738,7 +741,7 @@ int32_t tqProcessDeleteSubReq(STQ* pTq, int64_t version, char* msg, int32_t msgL
code = tqOffsetDelete(pTq->pOffsetStore, pReq->subKey);
if (code != 0) {
- tqError("cannot process tq delete req %s, since no such offset", pReq->subKey);
+ tqError("cannot process tq delete req %s, since no such offset in cache", pReq->subKey);
}
if (tqMetaDeleteHandle(pTq, pReq->subKey) < 0) {
@@ -808,7 +811,6 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t version, char* msg, int32_t msgL
// TODO version should be assigned and refed during preprocess
SWalRef* pRef = walRefCommittedVer(pTq->pVnode->pWal);
if (pRef == NULL) {
- ASSERT(0);
return -1;
}
int64_t ver = pRef->refVer;
@@ -829,12 +831,12 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t version, char* msg, int32_t msgL
pHandle->execHandle.task =
qCreateQueueExecTaskInfo(pHandle->execHandle.execCol.qmsg, &handle, &pHandle->execHandle.numOfCols, NULL);
- ASSERT(pHandle->execHandle.task);
+ /*A(pHandle->execHandle.task);*/
void* scanner = NULL;
qExtractStreamScanner(pHandle->execHandle.task, &scanner);
- ASSERT(scanner);
+ /*A(scanner);*/
pHandle->execHandle.pExecReader = qExtractReaderFromStreamScanner(scanner);
- ASSERT(pHandle->execHandle.pExecReader);
+ /*A(pHandle->execHandle.pExecReader);*/
} else if (pHandle->execHandle.subType == TOPIC_SUB_TYPE__DB) {
pHandle->pWalReader = walOpenReader(pTq->pVnode->pWal, NULL);
pHandle->execHandle.pExecReader = tqOpenReader(pTq->pVnode);
@@ -867,19 +869,14 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t version, char* msg, int32_t msgL
taosHashPut(pTq->pHandle, req.subKey, strlen(req.subKey), pHandle, sizeof(STqHandle));
tqDebug("try to persist handle %s consumer %" PRId64, req.subKey, pHandle->consumerId);
if (tqMetaSaveHandle(pTq, req.subKey, pHandle) < 0) {
- // TODO
- ASSERT(0);
}
} else {
- /*ASSERT(pExec->consumerId == req.oldConsumerId);*/
// TODO handle qmsg and exec modification
atomic_store_32(&pHandle->epoch, -1);
atomic_store_64(&pHandle->consumerId, req.newConsumerId);
atomic_add_fetch_32(&pHandle->epoch, 1);
taosMemoryFree(req.qmsg);
if (tqMetaSaveHandle(pTq, req.subKey, pHandle) < 0) {
- // TODO
- ASSERT(0);
}
// close handle
}
@@ -888,9 +885,11 @@ int32_t tqProcessSubscribeReq(STQ* pTq, int64_t version, char* msg, int32_t msgL
}
int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
+#if 0
if (pTask->taskLevel == TASK_LEVEL__AGG) {
- ASSERT(taosArrayGetSize(pTask->childEpInfo) != 0);
+ A(taosArrayGetSize(pTask->childEpInfo) != 0);
}
+#endif
pTask->refCnt = 1;
pTask->schedStatus = TASK_SCHED_STATUS__INACTIVE;
@@ -927,7 +926,9 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
.pStateBackend = pTask->pState,
};
pTask->exec.executor = qCreateStreamExecTaskInfo(pTask->exec.qmsg, &handle);
- ASSERT(pTask->exec.executor);
+ if (pTask->exec.executor == NULL) {
+ return -1;
+ }
} else if (pTask->taskLevel == TASK_LEVEL__AGG) {
pTask->pState = streamStateOpen(pTq->pStreamMeta->path, pTask, false, -1, -1);
@@ -940,7 +941,9 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
.pStateBackend = pTask->pState,
};
pTask->exec.executor = qCreateStreamExecTaskInfo(pTask->exec.qmsg, &mgHandle);
- ASSERT(pTask->exec.executor);
+ if (pTask->exec.executor == NULL) {
+ return -1;
+ }
}
// sink
@@ -952,12 +955,12 @@ int32_t tqExpandTask(STQ* pTq, SStreamTask* pTask, int64_t ver) {
pTask->tbSink.vnode = pTq->pVnode;
pTask->tbSink.tbSinkFunc = tqSinkToTablePipeline;
- ASSERT(pTask->tbSink.pSchemaWrapper);
- ASSERT(pTask->tbSink.pSchemaWrapper->pSchema);
+ /*A(pTask->tbSink.pSchemaWrapper);*/
+ /*A(pTask->tbSink.pSchemaWrapper->pSchema);*/
pTask->tbSink.pTSchema =
tdGetSTSChemaFromSSChema(pTask->tbSink.pSchemaWrapper->pSchema, pTask->tbSink.pSchemaWrapper->nCols, 1);
- ASSERT(pTask->tbSink.pTSchema);
+ /*A(pTask->tbSink.pTSchema);*/
}
streamSetupTrigger(pTask);
@@ -1003,7 +1006,8 @@ int32_t tqProcessStreamTaskCheckReq(STQ* pTq, SRpcMsg* pMsg) {
int32_t len;
tEncodeSize(tEncodeSStreamTaskCheckRsp, &rsp, len, code);
if (code < 0) {
- ASSERT(0);
+ tqError("unable to encode rsp %d", __LINE__);
+ return -1;
}
void* buf = rpcMallocCont(sizeof(SMsgHead) + len);
((SMsgHead*)buf)->vgId = htonl(req.upstreamNodeId);
@@ -1096,12 +1100,10 @@ int32_t tqProcessTaskRecover1Req(STQ* pTq, SRpcMsg* pMsg) {
if (pTask == NULL) {
return -1;
}
- ASSERT(pReq->taskId == pTask->taskId);
// check param
int64_t fillVer1 = pTask->startVer;
if (fillVer1 <= 0) {
- ASSERT(0);
streamMetaReleaseTask(pTq->pStreamMeta, pTask);
return -1;
}
@@ -1296,7 +1298,7 @@ int32_t tqProcessDelReq(STQ* pTq, void* pReq, int32_t len, int64_t ver) {
}
int32_t ref = atomic_sub_fetch_32(pRef, 1);
- ASSERT(ref >= 0);
+ /*A(ref >= 0);*/
if (ref == 0) {
blockDataDestroy(pDelBlock);
taosMemoryFree(pRef);
diff --git a/source/dnode/vnode/src/tq/tqExec.c b/source/dnode/vnode/src/tq/tqExec.c
index 093186ebbb..426fceb7ed 100644
--- a/source/dnode/vnode/src/tq/tqExec.c
+++ b/source/dnode/vnode/src/tq/tqExec.c
@@ -29,7 +29,6 @@ int32_t tqAddBlockDataToRsp(const SSDataBlock* pBlock, SMqDataRsp* pRsp, int32_t
int32_t actualLen = blockEncode(pBlock, pRetrieve->data, numOfCols);
actualLen += sizeof(SRetrieveTableRsp);
- ASSERT(actualLen <= dataStrLen);
taosArrayPush(pRsp->blockDataLen, &actualLen);
taosArrayPush(pRsp->blockData, &buf);
return 0;
@@ -62,7 +61,6 @@ static int32_t tqAddTbNameToRsp(const STQ* pTq, int64_t uid, SMqDataRsp* pRsp, i
int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffsetVal* pOffset) {
const STqExecHandle* pExec = &pHandle->execHandle;
- ASSERT(pExec->subType == TOPIC_SUB_TYPE__COLUMN);
qTaskInfo_t task = pExec->task;
@@ -87,7 +85,8 @@ int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffs
uint64_t ts = 0;
tqDebug("vgId:%d, tmq task start to execute", pTq->pVnode->config.vgId);
if (qExecTask(task, &pDataBlock, &ts) < 0) {
- ASSERT(0);
+ tqError("vgId:%d task exec error since %s", pTq->pVnode->config.vgId, terrstr());
+ return -1;
}
tqDebug("vgId:%d, tmq task executed, get %p", pTq->pVnode->config.vgId, pDataBlock);
@@ -105,10 +104,14 @@ int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffs
}
if (qStreamExtractOffset(task, &pRsp->rspOffset) < 0) {
- ASSERT(0);
return -1;
}
- ASSERT(pRsp->rspOffset.type != 0);
+
+ if (pRsp->rspOffset.type == 0) {
+ tqError("expected rsp offset: type %d %" PRId64 " %" PRId64 " %" PRId64, pRsp->rspOffset.type, pRsp->rspOffset.ts,
+ pRsp->rspOffset.uid, pRsp->rspOffset.version);
+ return -1;
+ }
if (pRsp->withTbName) {
if (pRsp->rspOffset.type == TMQ_OFFSET__LOG) {
@@ -118,7 +121,6 @@ int32_t tqScanData(STQ* pTq, const STqHandle* pHandle, SMqDataRsp* pRsp, STqOffs
pRsp->withTbName = false;
}
}
- ASSERT(pRsp->withSchema == false);
return 0;
}
@@ -148,7 +150,8 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqMeta
uint64_t ts = 0;
tqDebug("tmqsnap task start to execute");
if (qExecTask(task, &pDataBlock, &ts) < 0) {
- ASSERT(0);
+ tqError("vgId:%d task exec error since %s", pTq->pVnode->config.vgId, terrstr());
+ return -1;
}
tqDebug("tmqsnap task execute end, get %p", pDataBlock);
@@ -215,17 +218,20 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqMeta
break;
}
- if (qStreamExtractOffset(task, &pRsp->rspOffset) < 0) {
- ASSERT(0);
+ qStreamExtractOffset(task, &pRsp->rspOffset);
+
+ if (pRsp->rspOffset.type == 0) {
+ tqError("expected rsp offset: type %d %" PRId64 " %" PRId64 " %" PRId64, pRsp->rspOffset.type, pRsp->rspOffset.ts,
+ pRsp->rspOffset.uid, pRsp->rspOffset.version);
+ return -1;
}
- ASSERT(pRsp->rspOffset.type != 0);
return 0;
}
int32_t tqTaosxScanLog(STQ* pTq, STqHandle* pHandle, SSubmitReq* pReq, STaosxRsp* pRsp) {
STqExecHandle* pExec = &pHandle->execHandle;
- ASSERT(pExec->subType != TOPIC_SUB_TYPE__COLUMN);
+ /*A(pExec->subType != TOPIC_SUB_TYPE__COLUMN);*/
SArray* pBlocks = taosArrayInit(0, sizeof(SSDataBlock));
SArray* pSchemas = taosArrayInit(0, sizeof(void*));
diff --git a/source/dnode/vnode/src/tq/tqMeta.c b/source/dnode/vnode/src/tq/tqMeta.c
index f476f58b56..05ed8d7348 100644
--- a/source/dnode/vnode/src/tq/tqMeta.c
+++ b/source/dnode/vnode/src/tq/tqMeta.c
@@ -71,17 +71,14 @@ int32_t tDecodeSTqHandle(SDecoder* pDecoder, STqHandle* pHandle) {
int32_t tqMetaOpen(STQ* pTq) {
if (tdbOpen(pTq->path, 16 * 1024, 1, &pTq->pMetaDB, 0) < 0) {
- ASSERT(0);
return -1;
}
if (tdbTbOpen("tq.db", -1, -1, NULL, pTq->pMetaDB, &pTq->pExecStore, 0) < 0) {
- ASSERT(0);
return -1;
}
if (tdbTbOpen("tq.check.db", -1, -1, NULL, pTq->pMetaDB, &pTq->pCheckStore, 0) < 0) {
- ASSERT(0);
return -1;
}
@@ -135,19 +132,19 @@ int32_t tqMetaDeleteCheckInfo(STQ* pTq, const char* key) {
if (tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED) <
0) {
- ASSERT(0);
+ return -1;
}
if (tdbTbDelete(pTq->pCheckStore, key, (int)strlen(key), txn) < 0) {
- /*ASSERT(0);*/
+ tqWarn("vgId:%d, tq try delete checkinfo failed %s", pTq->pVnode->config.vgId, key);
}
if (tdbCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
if (tdbPostCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
return 0;
@@ -156,7 +153,6 @@ int32_t tqMetaDeleteCheckInfo(STQ* pTq, const char* key) {
int32_t tqMetaRestoreCheckInfo(STQ* pTq) {
TBC* pCur = NULL;
if (tdbTbcOpen(pTq->pCheckStore, &pCur, NULL) < 0) {
- ASSERT(0);
return -1;
}
@@ -197,40 +193,42 @@ int32_t tqMetaSaveHandle(STQ* pTq, const char* key, const STqHandle* pHandle) {
int32_t code;
int32_t vlen;
tEncodeSize(tEncodeSTqHandle, pHandle, vlen, code);
- ASSERT(code == 0);
+ if (code < 0) {
+ return -1;
+ }
tqDebug("tq save %s(%d) consumer %" PRId64 " vgId:%d", pHandle->subKey, (int32_t)strlen(pHandle->subKey),
pHandle->consumerId, TD_VID(pTq->pVnode));
void* buf = taosMemoryCalloc(1, vlen);
if (buf == NULL) {
- ASSERT(0);
+ return -1;
}
SEncoder encoder;
tEncoderInit(&encoder, buf, vlen);
if (tEncodeSTqHandle(&encoder, pHandle) < 0) {
- ASSERT(0);
+ return -1;
}
TXN* txn;
if (tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED) <
0) {
- ASSERT(0);
+ return -1;
}
if (tdbTbUpsert(pTq->pExecStore, key, (int)strlen(key), buf, vlen, txn) < 0) {
- ASSERT(0);
+ return -1;
}
if (tdbCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
if (tdbPostCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
tEncoderClear(&encoder);
@@ -243,19 +241,18 @@ int32_t tqMetaDeleteHandle(STQ* pTq, const char* key) {
if (tdbBegin(pTq->pMetaDB, &txn, tdbDefaultMalloc, tdbDefaultFree, NULL, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED) <
0) {
- ASSERT(0);
+ return -1;
}
if (tdbTbDelete(pTq->pExecStore, key, (int)strlen(key), txn) < 0) {
- /*ASSERT(0);*/
}
if (tdbCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
if (tdbPostCommit(pTq->pMetaDB, txn) < 0) {
- ASSERT(0);
+ return -1;
}
return 0;
@@ -264,7 +261,6 @@ int32_t tqMetaDeleteHandle(STQ* pTq, const char* key) {
int32_t tqMetaRestoreHandle(STQ* pTq) {
TBC* pCur = NULL;
if (tdbTbcOpen(pTq->pExecStore, &pCur, NULL) < 0) {
- ASSERT(0);
return -1;
}
@@ -284,7 +280,6 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
handle.pRef = walOpenRef(pTq->pVnode->pWal);
if (handle.pRef == NULL) {
- ASSERT(0);
return -1;
}
walRefVer(handle.pRef, handle.snapshotVer);
@@ -300,12 +295,19 @@ int32_t tqMetaRestoreHandle(STQ* pTq) {
if (handle.execHandle.subType == TOPIC_SUB_TYPE__COLUMN) {
handle.execHandle.task =
qCreateQueueExecTaskInfo(handle.execHandle.execCol.qmsg, &reader, &handle.execHandle.numOfCols, NULL);
- ASSERT(handle.execHandle.task);
+ if (handle.execHandle.task == NULL) {
+ tqError("cannot create exec task for %s", handle.subKey);
+ return -1;
+ }
void* scanner = NULL;
qExtractStreamScanner(handle.execHandle.task, &scanner);
- ASSERT(scanner);
+ if (scanner == NULL) {
+ tqError("cannot extract stream scanner for %s", handle.subKey);
+ }
handle.execHandle.pExecReader = qExtractReaderFromStreamScanner(scanner);
- ASSERT(handle.execHandle.pExecReader);
+ if (handle.execHandle.pExecReader == NULL) {
+ tqError("cannot extract exec reader for %s", handle.subKey);
+ }
} else if (handle.execHandle.subType == TOPIC_SUB_TYPE__DB) {
handle.pWalReader = walOpenReader(pTq->pVnode->pWal, NULL);
handle.execHandle.pExecReader = tqOpenReader(pTq->pVnode);
diff --git a/source/dnode/vnode/src/tq/tqOffset.c b/source/dnode/vnode/src/tq/tqOffset.c
index dd56c165fd..5a4d414ab7 100644
--- a/source/dnode/vnode/src/tq/tqOffset.c
+++ b/source/dnode/vnode/src/tq/tqOffset.c
@@ -40,26 +40,23 @@ int32_t tqOffsetRestoreFromFile(STqOffsetStore* pStore, const char* fname) {
if (code == 0) {
break;
} else {
- ASSERT(0);
- // TODO handle error
+ return -1;
}
}
int32_t size = htonl(head.size);
void* memBuf = taosMemoryCalloc(1, size);
if ((code = taosReadFile(pFile, memBuf, size)) != size) {
- ASSERT(0);
- // TODO handle error
+ return -1;
}
STqOffset offset;
SDecoder decoder;
tDecoderInit(&decoder, memBuf, size);
if (tDecodeSTqOffset(&decoder, &offset) < 0) {
- ASSERT(0);
+ return -1;
}
tDecoderClear(&decoder);
if (taosHashPut(pStore->pHash, offset.subKey, strlen(offset.subKey), &offset, sizeof(STqOffset)) < 0) {
- ASSERT(0);
- // TODO
+ return -1;
}
taosMemoryFree(memBuf);
}
@@ -85,7 +82,9 @@ STqOffsetStore* tqOffsetOpen(STQ* pTq) {
}
char* fname = tqOffsetBuildFName(pStore->pTq->path, 0);
if (tqOffsetRestoreFromFile(pStore, fname) < 0) {
- ASSERT(0);
+ taosMemoryFree(fname);
+ taosMemoryFree(pStore);
+ return NULL;
}
taosMemoryFree(fname);
return pStore;
@@ -124,7 +123,6 @@ int32_t tqOffsetCommitFile(STqOffsetStore* pStore) {
const char* sysErrStr = strerror(errno);
tqError("vgId:%d, cannot open file %s when commit offset since %s", pStore->pTq->pVnode->config.vgId, fname,
sysErrStr);
- ASSERT(0);
return -1;
}
taosMemoryFree(fname);
@@ -136,9 +134,7 @@ int32_t tqOffsetCommitFile(STqOffsetStore* pStore) {
int32_t bodyLen;
int32_t code;
tEncodeSize(tEncodeSTqOffset, pOffset, bodyLen, code);
- ASSERT(code == 0);
if (code < 0) {
- ASSERT(0);
taosHashCancelIterate(pStore->pHash, pIter);
return -1;
}
@@ -154,7 +150,6 @@ int32_t tqOffsetCommitFile(STqOffsetStore* pStore) {
// write file
int64_t writeLen;
if ((writeLen = taosWriteFile(pFile, buf, totLen)) != totLen) {
- ASSERT(0);
tqError("write offset incomplete, len %d, write len %" PRId64, bodyLen, writeLen);
taosHashCancelIterate(pStore->pHash, pIter);
taosMemoryFree(buf);
diff --git a/source/dnode/vnode/src/tq/tqOffsetSnapshot.c b/source/dnode/vnode/src/tq/tqOffsetSnapshot.c
index b63ff8af1d..2413a792c6 100644
--- a/source/dnode/vnode/src/tq/tqOffsetSnapshot.c
+++ b/source/dnode/vnode/src/tq/tqOffsetSnapshot.c
@@ -56,24 +56,28 @@ int32_t tqOffsetSnapRead(STqOffsetReader* pReader, uint8_t** ppData) {
TdFilePtr pFile = taosOpenFile(fname, TD_FILE_READ);
if (pFile == NULL) {
taosMemoryFree(fname);
- return 0;
+ return -1;
}
int64_t sz = 0;
if (taosStatFile(fname, &sz, NULL) < 0) {
- ASSERT(0);
+ taosCloseFile(&pFile);
+ taosMemoryFree(fname);
+ return -1;
}
taosMemoryFree(fname);
SSnapDataHdr* buf = taosMemoryCalloc(1, sz + sizeof(SSnapDataHdr));
if (buf == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
+ taosCloseFile(&pFile);
return terrno;
}
void* abuf = POINTER_SHIFT(buf, sizeof(SSnapDataHdr));
int64_t contLen = taosReadFile(pFile, abuf, sz);
if (contLen != sz) {
- ASSERT(0);
+ taosCloseFile(&pFile);
+ taosMemoryFree(buf);
return -1;
}
buf->size = sz;
@@ -122,14 +126,17 @@ int32_t tqOffsetWriterClose(STqOffsetWriter** ppWriter, int8_t rollback) {
if (rollback) {
if (taosRemoveFile(pWriter->fname) < 0) {
- ASSERT(0);
+ taosMemoryFree(fname);
+ return -1;
}
} else {
if (taosRenameFile(pWriter->fname, fname) < 0) {
- ASSERT(0);
+ taosMemoryFree(fname);
+ return -1;
}
if (tqOffsetRestoreFromFile(pTq->pOffsetStore, fname) < 0) {
- ASSERT(0);
+ taosMemoryFree(fname);
+ return -1;
}
}
taosMemoryFree(fname);
@@ -146,14 +153,13 @@ int32_t tqOffsetSnapWrite(STqOffsetWriter* pWriter, uint8_t* pData, uint32_t nDa
TdFilePtr pFile = taosOpenFile(pWriter->fname, TD_FILE_CREATE | TD_FILE_WRITE);
SSnapDataHdr* pHdr = (SSnapDataHdr*)pData;
int64_t size = pHdr->size;
- ASSERT(size == nData - sizeof(SSnapDataHdr));
if (pFile) {
int64_t contLen = taosWriteFile(pFile, pHdr->data, size);
if (contLen != size) {
- ASSERT(0);
+ taosCloseFile(&pFile);
+ return -1;
}
} else {
- ASSERT(0);
return -1;
}
return 0;
diff --git a/source/dnode/vnode/src/tq/tqPush.c b/source/dnode/vnode/src/tq/tqPush.c
index f89bc20362..63c3c25218 100644
--- a/source/dnode/vnode/src/tq/tqPush.c
+++ b/source/dnode/vnode/src/tq/tqPush.c
@@ -25,9 +25,7 @@ void tqTmrRspFunc(void* param, void* tmrId) {
static int32_t tqLoopExecFromQueue(STQ* pTq, STqHandle* pHandle, SStreamDataSubmit** ppSubmit, SMqDataRsp* pRsp) {
SStreamDataSubmit* pSubmit = *ppSubmit;
while (pSubmit != NULL) {
- ASSERT(pSubmit->ver == pHandle->pushHandle.processedVer + 1);
if (tqLogScanExec(pTq, &pHandle->execHandle, pSubmit->data, pRsp, 0) < 0) {
- /*ASSERT(0);*/
}
// update processed
atomic_store_64(&pHandle->pushHandle.processedVer, pSubmit->ver);
@@ -160,8 +158,7 @@ int32_t tqPushMsgNew(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_
if (msgType == TDMT_VND_SUBMIT) {
tqLogScanExec(pTq, &pHandle->execHandle, pReq, &rsp, workerId);
} else {
- // TODO
- ASSERT(0);
+ tqError("tq push unexpected msg type %d", msgType);
}
if (rsp.blockNum == 0) {
@@ -169,9 +166,6 @@ int32_t tqPushMsgNew(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_
continue;
}
- ASSERT(taosArrayGetSize(rsp.blockData) == rsp.blockNum);
- ASSERT(taosArrayGetSize(rsp.blockDataLen) == rsp.blockNum);
-
rsp.rspOffset = fetchOffset;
int32_t tlen = sizeof(SMqRspHead) + tEncodeSMqDataBlkRsp(NULL, &rsp);
@@ -263,7 +257,7 @@ int tqPushMsg(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_t ver)
SSDataBlock* pDataBlock = NULL;
uint64_t ts = 0;
if (qExecTask(task, &pDataBlock, &ts) < 0) {
- ASSERT(0);
+ tqDebug("vgId:%d, tq exec error since %s", pTq->pVnode->config.vgId, terrstr());
}
if (pDataBlock == NULL) {
@@ -282,7 +276,7 @@ int tqPushMsg(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_t ver)
// remove from hash
size_t kLen;
void* key = taosHashGetKey(pIter, &kLen);
- void* keyCopy = taosMemoryMalloc(kLen);
+ void* keyCopy = taosMemoryCalloc(1, kLen + 1);
memcpy(keyCopy, key, kLen);
taosArrayPush(cachedKeys, &keyCopy);
@@ -296,7 +290,7 @@ int tqPushMsg(STQ* pTq, void* msg, int32_t msgLen, tmsg_t msgType, int64_t ver)
void* key = taosArrayGetP(cachedKeys, i);
size_t kLen = *(size_t*)taosArrayGet(cachedKeyLens, i);
if (taosHashRemove(pTq->pPushMgr, key, kLen) != 0) {
- ASSERT(0);
+ tqError("vgId:%d, tq push hash remove key error, key: %s", pTq->pVnode->config.vgId, (char*)key);
}
}
taosArrayDestroyP(cachedKeys, (FDelete)taosMemoryFree);
diff --git a/source/dnode/vnode/src/tq/tqRead.c b/source/dnode/vnode/src/tq/tqRead.c
index c3a4cefc66..e5392bbd02 100644
--- a/source/dnode/vnode/src/tq/tqRead.c
+++ b/source/dnode/vnode/src/tq/tqRead.c
@@ -176,8 +176,6 @@ bool isValValidForTable(STqHandle* pHandle, SWalCont* pHead) {
goto end;
}
realTbSuid = req.suid;
- } else {
- ASSERT(0);
}
end:
@@ -206,7 +204,6 @@ int64_t tqFetchLog(STQ* pTq, STqHandle* pHandle, int64_t* fetchOffset, SWalCkHea
code = walFetchBody(pHandle->pWalReader, ppCkHead);
if (code < 0) {
- ASSERT(0);
*fetchOffset = offset;
code = -1;
goto END;
@@ -220,7 +217,6 @@ int64_t tqFetchLog(STQ* pTq, STqHandle* pHandle, int64_t* fetchOffset, SWalCkHea
if (IS_META_MSG(pHead->msgType)) {
code = walFetchBody(pHandle->pWalReader, ppCkHead);
if (code < 0) {
- ASSERT(0);
*fetchOffset = offset;
code = -1;
goto END;
@@ -238,7 +234,6 @@ int64_t tqFetchLog(STQ* pTq, STqHandle* pHandle, int64_t* fetchOffset, SWalCkHea
}
code = walSkipFetchBody(pHandle->pWalReader, *ppCkHead);
if (code < 0) {
- ASSERT(0);
*fetchOffset = offset;
code = -1;
goto END;
@@ -297,11 +292,8 @@ void tqCloseReader(STqReader* pReader) {
int32_t tqSeekVer(STqReader* pReader, int64_t ver) {
if (walReadSeekVer(pReader->pWalReader, ver) < 0) {
- ASSERT(pReader->pWalReader->curInvalid);
- ASSERT(pReader->pWalReader->curVersion == ver);
return -1;
}
- ASSERT(pReader->pWalReader->curVersion == ver);
return 0;
}
@@ -317,7 +309,6 @@ int32_t tqNextBlock(STqReader* pReader, SFetchRet* ret) {
ret->offset.version = pReader->ver;
ret->fetchType = FETCH_TYPE__NONE;
tqDebug("return offset %" PRId64 ", no more valid", ret->offset.version);
- ASSERT(ret->offset.version >= 0);
return -1;
}
void* body = pReader->pWalReader->pHead->head.body;
@@ -340,7 +331,6 @@ int32_t tqNextBlock(STqReader* pReader, SFetchRet* ret) {
memset(&ret->data, 0, sizeof(SSDataBlock));
int32_t code = tqRetrieveDataBlock(&ret->data, pReader);
if (code != 0 || ret->data.info.rows == 0) {
- ASSERT(0);
continue;
}
ret->fetchType = FETCH_TYPE__DATA;
@@ -351,7 +341,6 @@ int32_t tqNextBlock(STqReader* pReader, SFetchRet* ret) {
if (fromProcessedMsg) {
ret->offset.type = TMQ_OFFSET__LOG;
ret->offset.version = pReader->ver;
- ASSERT(pReader->ver >= 0);
ret->fetchType = FETCH_TYPE__SEP;
tqDebug("return offset %" PRId64 ", processed finish", ret->offset.version);
return 0;
@@ -434,7 +423,6 @@ bool tqNextDataBlockFilterOut(STqReader* pHandle, SHashObj* filterOutUids) {
}
if (pHandle->pBlock == NULL) return false;
- ASSERT(pHandle->tbIdHash == NULL);
void* ret = taosHashGet(filterOutUids, &pHandle->msgIter.uid, sizeof(int64_t));
if (ret == NULL) {
return true;
@@ -453,7 +441,6 @@ int32_t tqRetrieveDataBlock(SSDataBlock* pBlock, STqReader* pReader) {
if (pReader->pSchema == NULL) {
tqWarn("cannot found tsschema for table: uid:%" PRId64 " (suid:%" PRId64 "), version %d, possibly dropped table",
pReader->msgIter.uid, pReader->msgIter.suid, pReader->cachedSchemaVer);
- /*ASSERT(0);*/
pReader->cachedSchemaSuid = 0;
terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND;
return -1;
@@ -464,7 +451,6 @@ int32_t tqRetrieveDataBlock(SSDataBlock* pBlock, STqReader* pReader) {
if (pReader->pSchemaWrapper == NULL) {
tqWarn("cannot found schema wrapper for table: suid:%" PRId64 ", version %d, possibly dropped table",
pReader->msgIter.uid, pReader->cachedSchemaVer);
- /*ASSERT(0);*/
pReader->cachedSchemaSuid = 0;
terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND;
return -1;
@@ -533,6 +519,7 @@ int32_t tqRetrieveDataBlock(SSDataBlock* pBlock, STqReader* pReader) {
pBlock->info.id.uid = pReader->msgIter.uid;
pBlock->info.rows = pReader->msgIter.numOfRows;
pBlock->info.version = pReader->pMsg->version;
+ pBlock->info.dataLoad = 1;
while ((row = tGetSubmitBlkNext(&pReader->blkIter)) != NULL) {
tdSTSRowIterReset(&iter, row);
@@ -566,7 +553,6 @@ int32_t tqRetrieveTaosxBlock(STqReader* pReader, SArray* blocks, SArray* schemas
if (pReader->pSchema == NULL) {
tqWarn("cannot found tsschema for table: uid:%" PRId64 " (suid:%" PRId64 "), version %d, possibly dropped table",
pReader->msgIter.uid, pReader->msgIter.suid, pReader->cachedSchemaVer);
- /*ASSERT(0);*/
pReader->cachedSchemaSuid = 0;
terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND;
return -1;
@@ -577,7 +563,6 @@ int32_t tqRetrieveTaosxBlock(STqReader* pReader, SArray* blocks, SArray* schemas
if (pReader->pSchemaWrapper == NULL) {
tqWarn("cannot found schema wrapper for table: suid:%" PRId64 ", version %d, possibly dropped table",
pReader->msgIter.uid, pReader->cachedSchemaVer);
- /*ASSERT(0);*/
pReader->cachedSchemaSuid = 0;
terrno = TSDB_CODE_TQ_TABLE_SCHEMA_NOT_FOUND;
return -1;
@@ -670,8 +655,6 @@ int32_t tqRetrieveTaosxBlock(STqReader* pReader, SArray* blocks, SArray* schemas
break;
}
- ASSERT(sVal.valType != TD_VTYPE_NONE);
-
if (colDataAppend(pColData, curRow, sVal.val, sVal.valType == TD_VTYPE_NULL) < 0) {
goto FAIL;
}
@@ -731,8 +714,6 @@ int tqReaderAddTbUidList(STqReader* pReader, const SArray* tbUidList) {
}
int tqReaderRemoveTbUidList(STqReader* pReader, const SArray* tbUidList) {
- ASSERT(pReader->tbIdHash != NULL);
-
for (int32_t i = 0; i < taosArrayGetSize(tbUidList); i++) {
int64_t* pKey = (int64_t*)taosArrayGet(tbUidList, i);
taosHashRemove(pReader->tbIdHash, pKey, sizeof(int64_t));
@@ -749,7 +730,10 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) {
STqHandle* pExec = (STqHandle*)pIter;
if (pExec->execHandle.subType == TOPIC_SUB_TYPE__COLUMN) {
int32_t code = qUpdateQualifiedTableId(pExec->execHandle.task, tbUidList, isAdd);
- ASSERT(code == 0);
+ if (code != 0) {
+ tqError("update qualified table error for %s", pExec->subKey);
+ continue;
+ }
} else if (pExec->execHandle.subType == TOPIC_SUB_TYPE__DB) {
if (!isAdd) {
int32_t sz = taosArrayGetSize(tbUidList);
@@ -768,7 +752,7 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) {
int32_t code = metaGetTableEntryByUidCache(&mr, *id);
if (code != TSDB_CODE_SUCCESS) {
- qError("failed to get table meta, uid:%" PRIu64 " code:%s", *id, tstrerror(terrno));
+ tqError("failed to get table meta, uid:%" PRIu64 " code:%s", *id, tstrerror(terrno));
continue;
}
@@ -789,8 +773,6 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) {
} else {
// TODO handle delete table from stb
}
- } else {
- ASSERT(0);
}
}
while (1) {
@@ -799,7 +781,10 @@ int32_t tqUpdateTbUidList(STQ* pTq, const SArray* tbUidList, bool isAdd) {
SStreamTask* pTask = *(SStreamTask**)pIter;
if (pTask->taskLevel == TASK_LEVEL__SOURCE) {
int32_t code = qUpdateQualifiedTableId(pTask->exec.executor, tbUidList, isAdd);
- ASSERT(code == 0);
+ if (code != 0) {
+ tqError("update qualified table error for stream task %d", pTask->taskId);
+ continue;
+ }
}
}
return 0;
diff --git a/source/dnode/vnode/src/tq/tqSink.c b/source/dnode/vnode/src/tq/tqSink.c
index 5907be576a..078b50db68 100644
--- a/source/dnode/vnode/src/tq/tqSink.c
+++ b/source/dnode/vnode/src/tq/tqSink.c
@@ -19,7 +19,6 @@
int32_t tqBuildDeleteReq(SVnode* pVnode, const char* stbFullName, const SSDataBlock* pDataBlock,
SBatchDeleteReq* deleteReq) {
- ASSERT(pDataBlock->info.type == STREAM_DELETE_RESULT);
int32_t totRow = pDataBlock->info.rows;
SColumnInfoData* pStartTsCol = taosArrayGet(pDataBlock->pDataBlock, START_TS_COLUMN_INDEX);
SColumnInfoData* pEndTsCol = taosArrayGet(pDataBlock->pDataBlock, END_TS_COLUMN_INDEX);
@@ -334,8 +333,8 @@ void tqSinkToTablePipeline(SStreamTask* pTask, void* vnode, int64_t ver, void* d
int32_t code;
tEncodeSize(tEncodeSBatchDeleteReq, &deleteReq, len, code);
if (code < 0) {
- //
- ASSERT(0);
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
+ return;
}
SEncoder encoder;
void* serializedDeleteReq = rpcMallocCont(len + sizeof(SMsgHead));
@@ -559,7 +558,6 @@ void tqSinkToTableMerge(SStreamTask* pTask, void* vnode, int64_t ver, void* data
tqDebug("vgId:%d, task %d write into table, block num: %d", TD_VID(pVnode), pTask->taskId, (int32_t)pRes->size);
- ASSERT(pTask->tbSink.pTSchema);
deleteReq.deleteReqs = taosArrayInit(0, sizeof(SSingleDeleteReq));
SSubmitReq* submitReq = tqBlockToSubmit(pVnode, pRes, pTask->tbSink.pTSchema, pTask->tbSink.pSchemaWrapper, true,
pTask->tbSink.stbUid, pTask->tbSink.stbFullName, &deleteReq);
@@ -570,10 +568,6 @@ void tqSinkToTableMerge(SStreamTask* pTask, void* vnode, int64_t ver, void* data
int32_t code;
int32_t len;
tEncodeSize(tEncodeSBatchDeleteReq, &deleteReq, len, code);
- if (code < 0) {
- //
- ASSERT(0);
- }
SEncoder encoder;
void* serializedDeleteReq = rpcMallocCont(len + sizeof(SMsgHead));
void* abuf = POINTER_SHIFT(serializedDeleteReq, sizeof(SMsgHead));
diff --git a/source/dnode/vnode/src/tq/tqSnapshot.c b/source/dnode/vnode/src/tq/tqSnapshot.c
index d811d943ed..ab7093a701 100644
--- a/source/dnode/vnode/src/tq/tqSnapshot.c
+++ b/source/dnode/vnode/src/tq/tqSnapshot.c
@@ -100,8 +100,6 @@ int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData) {
}
}
- ASSERT(pVal && vLen);
-
*ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + vLen);
if (*ppData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
diff --git a/source/dnode/vnode/src/tq/tqStreamStateSnap.c b/source/dnode/vnode/src/tq/tqStreamStateSnap.c
index b1f00bdf74..ab7093a701 100644
--- a/source/dnode/vnode/src/tq/tqStreamStateSnap.c
+++ b/source/dnode/vnode/src/tq/tqStreamStateSnap.c
@@ -100,8 +100,6 @@ int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData) {
}
}
- ASSERT(pVal && vLen);
-
*ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + vLen);
if (*ppData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
@@ -168,7 +166,6 @@ int32_t tqSnapWriterClose(STqSnapWriter** ppWriter, int8_t rollback) {
if (rollback) {
tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn);
- ASSERT(0);
} else {
code = tdbCommit(pWriter->pTq->pMetaDB, pWriter->txn);
if (code) goto _err;
diff --git a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c
index 305378bc93..ab7093a701 100644
--- a/source/dnode/vnode/src/tq/tqStreamTaskSnap.c
+++ b/source/dnode/vnode/src/tq/tqStreamTaskSnap.c
@@ -100,8 +100,6 @@ int32_t tqSnapRead(STqSnapReader* pReader, uint8_t** ppData) {
}
}
- ASSERT(pVal && vLen);
-
*ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + vLen);
if (*ppData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
@@ -146,7 +144,7 @@ int32_t tqSnapWriterOpen(STQ* pTq, int64_t sver, int64_t ever, STqSnapWriter** p
pWriter->sver = sver;
pWriter->ever = ever;
- if (tdbBegin(pTq->pMetaStore, &pWriter->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) {
+ if (tdbBegin(pTq->pMetaDB, &pWriter->txn, tdbDefaultMalloc, tdbDefaultFree, NULL, 0) < 0) {
code = -1;
taosMemoryFree(pWriter);
goto _err;
@@ -167,12 +165,11 @@ int32_t tqSnapWriterClose(STqSnapWriter** ppWriter, int8_t rollback) {
STQ* pTq = pWriter->pTq;
if (rollback) {
- tdbAbort(pWriter->pTq->pMetaStore, pWriter->txn);
- ASSERT(0);
+ tdbAbort(pWriter->pTq->pMetaDB, pWriter->txn);
} else {
- code = tdbCommit(pWriter->pTq->pMetaStore, pWriter->txn);
+ code = tdbCommit(pWriter->pTq->pMetaDB, pWriter->txn);
if (code) goto _err;
- code = tdbPostCommit(pWriter->pTq->pMetaStore, pWriter->txn);
+ code = tdbPostCommit(pWriter->pTq->pMetaDB, pWriter->txn);
if (code) goto _err;
}
diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c
index 67e030ec42..f4a0851215 100644
--- a/source/dnode/vnode/src/tsdb/tsdbRead.c
+++ b/source/dnode/vnode/src/tsdb/tsdbRead.c
@@ -1143,6 +1143,7 @@ static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanIn
i += 1;
}
+ pResBlock->info.dataLoad = 1;
pResBlock->info.rows = dumpedRows;
pDumpInfo->rowIndex += step * dumpedRows;
@@ -2538,6 +2539,7 @@ static int32_t buildComposedDataBlock(STsdbReader* pReader) {
_end:
pResBlock->info.id.uid = (pBlockScanInfo != NULL) ? pBlockScanInfo->uid : 0;
+ pResBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pResBlock, pReader->suppInfo.slotId[0]);
setComposedBlockFlag(pReader, true);
@@ -3622,6 +3624,7 @@ int32_t doAppendRowFromTSRow(SSDataBlock* pBlock, STsdbReader* pReader, STSRow*
i += 1;
}
+ pBlock->info.dataLoad = 1;
pBlock->info.rows += 1;
pScanInfo->lastKey = pTSRow->ts;
return TSDB_CODE_SUCCESS;
@@ -3669,6 +3672,7 @@ int32_t doAppendRowFromFileBlock(SSDataBlock* pResBlock, STsdbReader* pReader, S
i += 1;
}
+ pResBlock->info.dataLoad = 1;
pResBlock->info.rows += 1;
return TSDB_CODE_SUCCESS;
}
diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c
index 8be4904349..266fdde2df 100644
--- a/source/dnode/vnode/src/tsdb/tsdbSnapshot.c
+++ b/source/dnode/vnode/src/tsdb/tsdbSnapshot.c
@@ -1109,7 +1109,7 @@ static int32_t tsdbSnapWriteData(STsdbSnapWriter* pWriter, uint8_t* pData, uint3
if (pWriter->dWriter.pWriter == NULL || pWriter->fid != fid) {
if (pWriter->dWriter.pWriter) {
- ASSERT(fid > pWriter->fid);
+ // ASSERT(fid > pWriter->fid);
code = tsdbSnapWriteCloseFile(pWriter);
if (code) goto _err;
@@ -1376,27 +1376,34 @@ _exit:
return code;
}
+int32_t tsdbSnapWriterPrepareClose(STsdbSnapWriter* pWriter) {
+ int32_t code = 0;
+ if (pWriter->dWriter.pWriter) {
+ code = tsdbSnapWriteCloseFile(pWriter);
+ if (code) goto _exit;
+ }
+
+ code = tsdbSnapWriteDelEnd(pWriter);
+ if (code) goto _exit;
+
+ code = tsdbFSPrepareCommit(pWriter->pTsdb, &pWriter->fs);
+ if (code) goto _exit;
+
+_exit:
+ if (code) {
+ tsdbError("vgId:%d %s failed since %s", TD_VID(pWriter->pTsdb->pVnode), __func__, tstrerror(code));
+ }
+ return code;
+}
+
int32_t tsdbSnapWriterClose(STsdbSnapWriter** ppWriter, int8_t rollback) {
int32_t code = 0;
STsdbSnapWriter* pWriter = *ppWriter;
STsdb* pTsdb = pWriter->pTsdb;
if (rollback) {
- ASSERT(0);
- // code = tsdbFSRollback(pWriter->pTsdb->pFS);
- // if (code) goto _err;
+ tsdbRollbackCommit(pWriter->pTsdb);
} else {
- if (pWriter->dWriter.pWriter) {
- code = tsdbSnapWriteCloseFile(pWriter);
- if (code) goto _err;
- }
-
- code = tsdbSnapWriteDelEnd(pWriter);
- if (code) goto _err;
-
- code = tsdbFSPrepareCommit(pWriter->pTsdb, &pWriter->fs);
- if (code) goto _err;
-
// lock
taosThreadRwlockWrlock(&pTsdb->rwLock);
diff --git a/source/dnode/vnode/src/vnd/vnodeCfg.c b/source/dnode/vnode/src/vnd/vnodeCfg.c
index 5adb2eb359..782cc69d30 100644
--- a/source/dnode/vnode/src/vnd/vnodeCfg.c
+++ b/source/dnode/vnode/src/vnd/vnodeCfg.c
@@ -115,7 +115,6 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
if (tjsonAddIntegerToObject(pJson, "hashMethod", pCfg->hashMethod) < 0) return -1;
if (tjsonAddIntegerToObject(pJson, "hashPrefix", pCfg->hashPrefix) < 0) return -1;
if (tjsonAddIntegerToObject(pJson, "hashSuffix", pCfg->hashSuffix) < 0) return -1;
- if (tjsonAddIntegerToObject(pJson, "tsdbPageSize", pCfg->tsdbPageSize) < 0) return -1;
if (tjsonAddIntegerToObject(pJson, "syncCfg.replicaNum", pCfg->syncCfg.replicaNum) < 0) return -1;
if (tjsonAddIntegerToObject(pJson, "syncCfg.myIndex", pCfg->syncCfg.myIndex) < 0) return -1;
@@ -135,9 +134,6 @@ int vnodeEncodeConfig(const void *pObj, SJson *pJson) {
tjsonAddItemToArray(pNodeInfoArr, pNodeInfo);
}
- // add tsdb page size config
- if (tjsonAddIntegerToObject(pJson, "tsdbPageSize", pCfg->tsdbPageSize) < 0) return -1;
-
return 0;
}
@@ -256,7 +252,9 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) {
}
tjsonGetNumberValue(pJson, "tsdbPageSize", pCfg->tsdbPageSize, code);
- if (code < 0) pCfg->tsdbPageSize = TSDB_DEFAULT_TSDB_PAGESIZE * 1024;
+ if (code < 0 || pCfg->tsdbPageSize < TSDB_MIN_PAGESIZE_PER_VNODE * 1024) {
+ pCfg->tsdbPageSize = TSDB_DEFAULT_TSDB_PAGESIZE * 1024;
+ }
return 0;
}
diff --git a/source/dnode/vnode/src/vnd/vnodeCommit.c b/source/dnode/vnode/src/vnd/vnodeCommit.c
index cd56468371..4daab074b5 100644
--- a/source/dnode/vnode/src/vnd/vnodeCommit.c
+++ b/source/dnode/vnode/src/vnd/vnodeCommit.c
@@ -16,11 +16,9 @@
#include "vnd.h"
#include "vnodeInt.h"
-#define VND_INFO_FNAME "vnode.json"
#define VND_INFO_FNAME_TMP "vnode_tmp.json"
static int vnodeEncodeInfo(const SVnodeInfo *pInfo, char **ppData);
-static int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo);
static int vnodeCommitImpl(SCommitInfo *pInfo);
int vnodeBegin(SVnode *pVnode) {
@@ -40,7 +38,7 @@ int vnodeBegin(SVnode *pVnode) {
pVnode->state.commitID++;
// begin meta
- if (metaBegin(pVnode->pMeta, 0) < 0) {
+ if (metaBegin(pVnode->pMeta, META_BEGIN_HEAP_BUFFERPOOL) < 0) {
vError("vgId:%d, failed to begin meta since %s", TD_VID(pVnode), tstrerror(terrno));
return -1;
}
@@ -407,7 +405,7 @@ _err:
return -1;
}
-static int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo) {
+int vnodeDecodeInfo(uint8_t *pData, SVnodeInfo *pInfo) {
SJson *pJson = NULL;
pJson = tjsonParse(pData);
diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c
index a34744a1da..40705e553b 100644
--- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c
+++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c
@@ -21,6 +21,8 @@ struct SVSnapReader {
int64_t sver;
int64_t ever;
int64_t index;
+ // config
+ int8_t cfgDone;
// meta
int8_t metaDone;
SMetaSnapReader *pMetaReader;
@@ -88,6 +90,53 @@ int32_t vnodeSnapReaderClose(SVSnapReader *pReader) {
int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) {
int32_t code = 0;
+ // CONFIG ==============
+ // FIXME: if commit multiple times and the config changed?
+ if (!pReader->cfgDone) {
+ char fName[TSDB_FILENAME_LEN];
+ if (pReader->pVnode->pTfs) {
+ snprintf(fName, TSDB_FILENAME_LEN, "%s%s%s%s%s", tfsGetPrimaryPath(pReader->pVnode->pTfs), TD_DIRSEP,
+ pReader->pVnode->path, TD_DIRSEP, VND_INFO_FNAME);
+ } else {
+ snprintf(fName, TSDB_FILENAME_LEN, "%s%s%s", pReader->pVnode->path, TD_DIRSEP, VND_INFO_FNAME);
+ }
+
+ TdFilePtr pFile = taosOpenFile(fName, TD_FILE_READ);
+ if (NULL == pFile) {
+ code = TAOS_SYSTEM_ERROR(errno);
+ goto _err;
+ }
+
+ int64_t size;
+ if (taosFStatFile(pFile, &size, NULL) < 0) {
+ code = TAOS_SYSTEM_ERROR(errno);
+ taosCloseFile(&pFile);
+ goto _err;
+ }
+
+ *ppData = taosMemoryMalloc(sizeof(SSnapDataHdr) + size + 1);
+ if (*ppData == NULL) {
+ code = TSDB_CODE_OUT_OF_MEMORY;
+ taosCloseFile(&pFile);
+ goto _err;
+ }
+ ((SSnapDataHdr *)(*ppData))->type = SNAP_DATA_CFG;
+ ((SSnapDataHdr *)(*ppData))->size = size + 1;
+ ((SSnapDataHdr *)(*ppData))->data[size] = '\0';
+
+ if (taosReadFile(pFile, ((SSnapDataHdr *)(*ppData))->data, size) < 0) {
+ code = TAOS_SYSTEM_ERROR(errno);
+ taosMemoryFree(*ppData);
+ taosCloseFile(&pFile);
+ goto _err;
+ }
+
+ taosCloseFile(&pFile);
+
+ pReader->cfgDone = 1;
+ goto _exit;
+ }
+
// META ==============
if (!pReader->metaDone) {
// open reader if not
@@ -230,6 +279,8 @@ struct SVSnapWriter {
int64_t ever;
int64_t commitID;
int64_t index;
+ // config
+ SVnodeInfo info;
// meta
SMetaSnapWriter *pMetaSnapWriter;
// tsdb
@@ -248,6 +299,10 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, int64_t sver, int64_t ever, SVSnapWr
int32_t code = 0;
SVSnapWriter *pWriter = NULL;
+ // commit memory data
+ vnodeAsyncCommit(pVnode);
+ tsem_wait(&pVnode->canCommit);
+
// alloc
pWriter = (SVSnapWriter *)taosMemoryCalloc(1, sizeof(*pWriter));
if (pWriter == NULL) {
@@ -258,16 +313,8 @@ int32_t vnodeSnapWriterOpen(SVnode *pVnode, int64_t sver, int64_t ever, SVSnapWr
pWriter->sver = sver;
pWriter->ever = ever;
- // commit it
- code = vnodeSyncCommit(pVnode);
- if (code) {
- taosMemoryFree(pWriter);
- goto _err;
- }
-
// inc commit ID
- pVnode->state.commitID++;
- pWriter->commitID = pVnode->state.commitID;
+ pWriter->commitID = ++pVnode->state.commitID;
vInfo("vgId:%d, vnode snapshot writer opened, sver:%" PRId64 " ever:%" PRId64 " commit id:%" PRId64, TD_VID(pVnode),
sver, ever, pWriter->commitID);
@@ -284,53 +331,89 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot *
int32_t code = 0;
SVnode *pVnode = pWriter->pVnode;
+ // prepare
+ if (pWriter->pTsdbSnapWriter) {
+ tsdbSnapWriterPrepareClose(pWriter->pTsdbSnapWriter);
+ }
+
+ // commit json
+ if (!rollback) {
+ pVnode->config = pWriter->info.config;
+ pVnode->state = (SVState){.committed = pWriter->info.state.committed,
+ .applied = pWriter->info.state.committed,
+ .commitID = pWriter->commitID,
+ .commitTerm = pWriter->info.state.commitTerm,
+ .applyTerm = pWriter->info.state.commitTerm};
+ pVnode->statis = pWriter->info.statis;
+ char dir[TSDB_FILENAME_LEN] = {0};
+ if (pWriter->pVnode->pTfs) {
+ snprintf(dir, TSDB_FILENAME_LEN, "%s%s%s", tfsGetPrimaryPath(pVnode->pTfs), TD_DIRSEP, pVnode->path);
+ } else {
+ snprintf(dir, TSDB_FILENAME_LEN, "%s", pWriter->pVnode->path);
+ }
+
+ vnodeCommitInfo(dir, &pWriter->info);
+ } else {
+ vnodeRollback(pWriter->pVnode);
+ }
+
+ // commit/rollback sub-system
if (pWriter->pMetaSnapWriter) {
code = metaSnapWriterClose(&pWriter->pMetaSnapWriter, rollback);
- if (code) goto _err;
+ if (code) goto _exit;
}
if (pWriter->pTsdbSnapWriter) {
code = tsdbSnapWriterClose(&pWriter->pTsdbSnapWriter, rollback);
- if (code) goto _err;
+ if (code) goto _exit;
}
if (pWriter->pRsmaSnapWriter) {
code = rsmaSnapWriterClose(&pWriter->pRsmaSnapWriter, rollback);
- if (code) goto _err;
+ if (code) goto _exit;
}
- if (!rollback) {
- SVnodeInfo info = {0};
- char dir[TSDB_FILENAME_LEN];
+ vnodeBegin(pVnode);
- pVnode->state.committed = pWriter->ever;
- pVnode->state.applied = pWriter->ever;
- pVnode->state.applyTerm = pSnapshot->lastApplyTerm;
- pVnode->state.commitTerm = pSnapshot->lastApplyTerm;
-
- info.config = pVnode->config;
- info.state.committed = pVnode->state.applied;
- info.state.commitTerm = pVnode->state.applyTerm;
- info.state.commitID = pVnode->state.commitID;
- snprintf(dir, TSDB_FILENAME_LEN, "%s%s%s", tfsGetPrimaryPath(pVnode->pTfs), TD_DIRSEP, pVnode->path);
- code = vnodeSaveInfo(dir, &info);
- if (code) goto _err;
-
- code = vnodeCommitInfo(dir, &info);
- if (code) goto _err;
-
- vnodeBegin(pVnode);
+_exit:
+ if (code) {
+ vError("vgId:%d, vnode snapshot writer close failed since %s", TD_VID(pWriter->pVnode), tstrerror(code));
} else {
- ASSERT(0);
+ vInfo("vgId:%d, vnode snapshot writer closed, rollback:%d", TD_VID(pVnode), rollback);
+ taosMemoryFree(pWriter);
+ }
+ tsem_post(&pVnode->canCommit);
+ return code;
+}
+
+static int32_t vnodeSnapWriteInfo(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) {
+ int32_t code = 0;
+
+ SSnapDataHdr *pHdr = (SSnapDataHdr *)pData;
+
+ // decode info
+ if (vnodeDecodeInfo(pHdr->data, &pWriter->info) < 0) {
+ code = TSDB_CODE_INVALID_MSG;
+ goto _exit;
+ }
+
+ // change some value
+ pWriter->info.state.commitID = pWriter->commitID;
+
+ // modify info as needed
+ char dir[TSDB_FILENAME_LEN] = {0};
+ if (pWriter->pVnode->pTfs) {
+ snprintf(dir, TSDB_FILENAME_LEN, "%s%s%s", tfsGetPrimaryPath(pWriter->pVnode->pTfs), TD_DIRSEP,
+ pWriter->pVnode->path);
+ } else {
+ snprintf(dir, TSDB_FILENAME_LEN, "%s", pWriter->pVnode->path);
+ }
+ if (vnodeSaveInfo(dir, &pWriter->info) < 0) {
+ code = terrno;
+ goto _exit;
}
_exit:
- vInfo("vgId:%d, vnode snapshot writer closed, rollback:%d", TD_VID(pVnode), rollback);
- taosMemoryFree(pWriter);
- return code;
-
-_err:
- vError("vgId:%d, vnode snapshot writer close failed since %s", TD_VID(pWriter->pVnode), tstrerror(code));
return code;
}
@@ -347,6 +430,10 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) {
pHdr->type, nData);
switch (pHdr->type) {
+ case SNAP_DATA_CFG: {
+ code = vnodeSnapWriteInfo(pWriter, pData, nData);
+ if (code) goto _err;
+ } break;
case SNAP_DATA_META: {
// meta
if (pWriter->pMetaSnapWriter == NULL) {
diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c
index 0fc42f3744..6092888136 100644
--- a/source/dnode/vnode/src/vnd/vnodeSvr.c
+++ b/source/dnode/vnode/src/vnd/vnodeSvr.c
@@ -317,11 +317,7 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp
// commit if need
if (vnodeShouldCommit(pVnode)) {
vInfo("vgId:%d, commit at version %" PRId64, TD_VID(pVnode), version);
-#if 0
- vnodeSyncCommit(pVnode);
-#else
vnodeAsyncCommit(pVnode);
-#endif
// start a new one
if (vnodeBegin(pVnode) < 0) {
diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c
index aa215a852f..2c23646db1 100644
--- a/source/dnode/vnode/src/vnd/vnodeSync.c
+++ b/source/dnode/vnode/src/vnd/vnodeSync.c
@@ -22,32 +22,21 @@ static inline bool vnodeIsMsgWeak(tmsg_t type) { return false; }
static inline void vnodeWaitBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) {
const STraceId *trace = &pMsg->info.traceId;
- vGTrace("vgId:%d, msg:%p wait block, type:%s", pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType));
+ vGTrace("vgId:%d, msg:%p wait block, type:%s sec:%d seq:%" PRId64, pVnode->config.vgId, pMsg,
+ TMSG_INFO(pMsg->msgType), pVnode->blockSec, pVnode->blockSeq);
tsem_wait(&pVnode->syncSem);
}
-static inline void vnodeWaitBlockMsgOld(SVnode *pVnode, const SRpcMsg *pMsg) {
- if (vnodeIsMsgBlock(pMsg->msgType)) {
- const STraceId *trace = &pMsg->info.traceId;
- taosThreadMutexLock(&pVnode->lock);
- if (!pVnode->blocked) {
- vGTrace("vgId:%d, msg:%p wait block, type:%s", pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType));
- pVnode->blocked = true;
- taosThreadMutexUnlock(&pVnode->lock);
- tsem_wait(&pVnode->syncSem);
- } else {
- taosThreadMutexUnlock(&pVnode->lock);
- }
- }
-}
-
static inline void vnodePostBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) {
if (vnodeIsMsgBlock(pMsg->msgType)) {
const STraceId *trace = &pMsg->info.traceId;
taosThreadMutexLock(&pVnode->lock);
if (pVnode->blocked) {
- vGTrace("vgId:%d, msg:%p post block, type:%s", pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType));
+ vGTrace("vgId:%d, msg:%p post block, type:%s sec:%d seq:%" PRId64, pVnode->config.vgId, pMsg,
+ TMSG_INFO(pMsg->msgType), pVnode->blockSec, pVnode->blockSeq);
pVnode->blocked = false;
+ pVnode->blockSec = 0;
+ pVnode->blockSeq = 0;
tsem_post(&pVnode->syncSem);
}
taosThreadMutexUnlock(&pVnode->lock);
@@ -217,12 +206,19 @@ void vnodeProposeWriteMsg(SQueueInfo *pInfo, STaosQall *qall, int32_t numOfMsgs)
#else
static int32_t inline vnodeProposeMsg(SVnode *pVnode, SRpcMsg *pMsg, bool isWeak) {
+ int64_t seq = 0;
+
taosThreadMutexLock(&pVnode->lock);
- int32_t code = syncPropose(pVnode->sync, pMsg, isWeak);
+ int32_t code = syncPropose(pVnode->sync, pMsg, isWeak, &seq);
bool wait = (code == 0 && vnodeIsMsgBlock(pMsg->msgType));
if (wait) {
ASSERT(!pVnode->blocked);
pVnode->blocked = true;
+ pVnode->blockSec = taosGetTimestampSec();
+ pVnode->blockSeq = seq;
+#if 0
+ pVnode->blockInfo = pMsg->info;
+#endif
}
taosThreadMutexUnlock(&pVnode->lock);
@@ -289,12 +285,15 @@ void vnodeApplyWriteMsg(SQueueInfo *pInfo, STaosQall *qall, int32_t numOfMsgs) {
for (int32_t i = 0; i < numOfMsgs; ++i) {
if (taosGetQitem(qall, (void **)&pMsg) == 0) continue;
const STraceId *trace = &pMsg->info.traceId;
- vGTrace("vgId:%d, msg:%p get from vnode-apply queue, type:%s handle:%p index:%" PRId64, vgId, pMsg,
- TMSG_INFO(pMsg->msgType), pMsg->info.handle, pMsg->info.conn.applyIndex);
if (vnodeIsMsgBlock(pMsg->msgType)) {
- vTrace("vgId:%d, blocking msg obtained from apply-queue. index:%" PRId64 ", term: %" PRId64 ", type: %s", vgId,
- pMsg->info.conn.applyIndex, pMsg->info.conn.applyTerm, TMSG_INFO(pMsg->msgType));
+ vGTrace("vgId:%d, msg:%p get from vnode-apply queue, type:%s handle:%p index:%" PRId64
+ ", blocking msg obtained sec:%d seq:%" PRId64,
+ vgId, pMsg, TMSG_INFO(pMsg->msgType), pMsg->info.handle, pMsg->info.conn.applyIndex, pVnode->blockSec,
+ pVnode->blockSeq);
+ } else {
+ vGTrace("vgId:%d, msg:%p get from vnode-apply queue, type:%s handle:%p index:%" PRId64, vgId, pMsg,
+ TMSG_INFO(pMsg->msgType), pMsg->info.handle, pMsg->info.conn.applyIndex);
}
SRpcMsg rsp = {.code = pMsg->code, .info = pMsg->info};
@@ -621,6 +620,32 @@ void vnodeSyncClose(SVnode *pVnode) {
syncStop(pVnode->sync);
}
+void vnodeSyncCheckTimeout(SVnode *pVnode) {
+ vTrace("vgId:%d, check sync timeout msg", pVnode->config.vgId);
+ taosThreadMutexLock(&pVnode->lock);
+ if (pVnode->blocked) {
+ int32_t curSec = taosGetTimestampSec();
+ int32_t delta = curSec - pVnode->blockSec;
+ if (delta > VNODE_TIMEOUT_SEC) {
+ vError("vgId:%d, failed to propose since timeout and post block, start:%d cur:%d delta:%d seq:%" PRId64,
+ pVnode->config.vgId, pVnode->blockSec, curSec, delta, pVnode->blockSeq);
+ if (syncSendTimeoutRsp(pVnode->sync, pVnode->blockSeq) != 0) {
+#if 0
+ SRpcMsg rpcMsg = {.code = TSDB_CODE_SYN_TIMEOUT, .info = pVnode->blockInfo};
+ vError("send timeout response since its applyed, seq:%" PRId64 " handle:%p ahandle:%p", pVnode->blockSeq,
+ rpcMsg.info.handle, rpcMsg.info.ahandle);
+ rpcSendResponse(&rpcMsg);
+#endif
+ }
+ pVnode->blocked = false;
+ pVnode->blockSec = 0;
+ pVnode->blockSeq = 0;
+ tsem_post(&pVnode->syncSem);
+ }
+ }
+ taosThreadMutexUnlock(&pVnode->lock);
+}
+
bool vnodeIsRoleLeader(SVnode *pVnode) {
SSyncState state = syncGetState(pVnode->sync);
return state.state == TAOS_SYNC_STATE_LEADER;
diff --git a/source/libs/catalog/src/ctgCache.c b/source/libs/catalog/src/ctgCache.c
index 47cb0ef559..94ee295fe4 100644
--- a/source/libs/catalog/src/ctgCache.c
+++ b/source/libs/catalog/src/ctgCache.c
@@ -1728,7 +1728,7 @@ int32_t ctgOpUpdateVgroup(SCtgCacheOperation *operation) {
}
if (dbInfo->vgVersion < 0 || taosHashGetSize(dbInfo->vgHash) <= 0) {
- ctgError("invalid db vgInfo, dbFName:%s, vgHash:%p, vgVersion:%d, vgHashSize:%d", dbFName, dbInfo->vgHash,
+ ctgDebug("invalid db vgInfo, dbFName:%s, vgHash:%p, vgVersion:%d, vgHashSize:%d", dbFName, dbInfo->vgHash,
dbInfo->vgVersion, taosHashGetSize(dbInfo->vgHash));
CTG_ERR_JRET(TSDB_CODE_APP_ERROR);
}
diff --git a/source/libs/command/src/command.c b/source/libs/command/src/command.c
index 5f1b87a138..a179ec24f9 100644
--- a/source/libs/command/src/command.c
+++ b/source/libs/command/src/command.c
@@ -231,10 +231,6 @@ static const char* cacheModelStr(int8_t cacheModel) {
return TSDB_CACHE_MODEL_NONE_STR;
}
-static const char* strictStr(int8_t strict) {
- return TSDB_DB_STRICT_ON == strict ? TSDB_DB_STRICT_ON_STR : TSDB_DB_STRICT_OFF_STR;
-}
-
static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbFName, SDbCfgInfo* pCfg) {
blockDataEnsureCapacity(pBlock, 1);
pBlock->info.rows = 1;
@@ -269,11 +265,11 @@ static void setCreateDBResultIntoDataBlock(SSDataBlock* pBlock, char* dbFName, S
buf2 + VARSTR_HEADER_SIZE,
"CREATE DATABASE `%s` BUFFER %d CACHESIZE %d CACHEMODEL '%s' COMP %d DURATION %dm "
"WAL_FSYNC_PERIOD %d MAXROWS %d MINROWS %d KEEP %dm,%dm,%dm PAGES %d PAGESIZE %d PRECISION '%s' REPLICA %d "
- "STRICT '%s' WAL_LEVEL %d VGROUPS %d SINGLE_STABLE %d",
+ "WAL_LEVEL %d VGROUPS %d SINGLE_STABLE %d",
dbFName, pCfg->buffer, pCfg->cacheSize, cacheModelStr(pCfg->cacheLast), pCfg->compression, pCfg->daysPerFile,
pCfg->walFsyncPeriod, pCfg->maxRows, pCfg->minRows, pCfg->daysToKeep0, pCfg->daysToKeep1, pCfg->daysToKeep2,
- pCfg->pages, pCfg->pageSize, prec, pCfg->replications, strictStr(pCfg->strict), pCfg->walLevel,
- pCfg->numOfVgroups, 1 == pCfg->numOfStables);
+ pCfg->pages, pCfg->pageSize, prec, pCfg->replications, pCfg->walLevel, pCfg->numOfVgroups,
+ 1 == pCfg->numOfStables);
if (retentions) {
len += sprintf(buf2 + VARSTR_HEADER_SIZE + len, " RETENTIONS %s", retentions);
diff --git a/source/libs/executor/src/exchangeoperator.c b/source/libs/executor/src/exchangeoperator.c
index 8423b77906..4103ca82dc 100644
--- a/source/libs/executor/src/exchangeoperator.c
+++ b/source/libs/executor/src/exchangeoperator.c
@@ -510,6 +510,7 @@ int32_t extractDataBlockFromFetchRsp(SSDataBlock* pRes, char* pData, SArray* pCo
blockDataEnsureCapacity(pRes, pBlock->info.rows);
// data from mnode
+ pRes->info.dataLoad = 1;
pRes->info.rows = pBlock->info.rows;
relocateColumnData(pRes, pColList, pBlock->pDataBlock, false);
blockDataDestroy(pBlock);
diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c
index 043cc396b5..1c80eff685 100644
--- a/source/libs/executor/src/executorimpl.c
+++ b/source/libs/executor/src/executorimpl.c
@@ -1080,7 +1080,7 @@ int32_t doCopyToSDataBlock(SExecTaskInfo* pTaskInfo, SSDataBlock* pBlock, SExprS
qDebug("%s result generated, rows:%d, groupId:%" PRIu64, GET_TASKID(pTaskInfo), pBlock->info.rows,
pBlock->info.id.groupId);
-
+ pBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pBlock, 0);
return 0;
}
@@ -2546,6 +2546,7 @@ int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pStat
pBlock->info.rows += pRow->numOfRows;
releaseOutputBuf(pState, &key, pRow);
}
+ pBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pBlock, 0);
return TSDB_CODE_SUCCESS;
}
@@ -2635,6 +2636,7 @@ int32_t buildSessionResultDataBlock(SOperatorInfo* pOperator, SStreamState* pSta
}
}
+ pBlock->info.dataLoad = 1;
pBlock->info.rows += pRow->numOfRows;
// saveSessionDiscBuf(pState, pKey, pVal, size);
releaseOutputBuf(pState, NULL, pRow);
diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c
index 1a43ddecdd..59266dad7e 100644
--- a/source/libs/executor/src/groupoperator.c
+++ b/source/libs/executor/src/groupoperator.c
@@ -698,6 +698,7 @@ static SSDataBlock* buildPartitionResult(SOperatorInfo* pOperator) {
pInfo->pageIndex += 1;
releaseBufPage(pInfo->pBuf, page);
+ pInfo->binfo.pRes->info.dataLoad = 1;
blockDataUpdateTsWindow(pInfo->binfo.pRes, 0);
pInfo->binfo.pRes->info.id.groupId = pGroupInfo->groupId;
@@ -960,6 +961,8 @@ static SSDataBlock* buildStreamPartitionResult(SOperatorInfo* pOperator) {
}
taosArrayDestroy(pParInfo->rowIds);
pParInfo->rowIds = NULL;
+ pDest->info.dataLoad = 1;
+
blockDataUpdateTsWindow(pDest, pInfo->tsColIndex);
pDest->info.id.groupId = pParInfo->groupId;
pOperator->resultInfo.totalRows += pDest->info.rows;
diff --git a/source/libs/executor/src/joinoperator.c b/source/libs/executor/src/joinoperator.c
index d460af971c..8a097a23ce 100644
--- a/source/libs/executor/src/joinoperator.c
+++ b/source/libs/executor/src/joinoperator.c
@@ -87,11 +87,11 @@ SOperatorInfo* createMergeJoinOperatorInfo(SOperatorInfo** pDownstream, int32_t
}
int32_t numOfCols = 0;
- SSDataBlock* pResBlock = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc);
+ pInfo->pRes = createDataBlockFromDescNode(pJoinNode->node.pOutputDataBlockDesc);
+
SExprInfo* pExprInfo = createExprInfo(pJoinNode->pTargets, NULL, &numOfCols);
initResultSizeInfo(&pOperator->resultInfo, 4096);
-
- pInfo->pRes = pResBlock;
+ blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
setOperatorInfo(pOperator, "MergeJoinOperator", QUERY_NODE_PHYSICAL_PLAN_MERGE_JOIN, false, OP_NOT_OPENED, pInfo, pTaskInfo);
pOperator->exprSupp.pExprInfo = pExprInfo;
@@ -401,6 +401,7 @@ static void doMergeJoinImpl(struct SOperatorInfo* pOperator, SSDataBlock* pRes)
// the pDataBlock are always the same one, no need to call this again
pRes->info.rows = nrows;
+ pRes->info.dataLoad = 1;
if (pRes->info.rows >= pOperator->resultInfo.threshold) {
break;
}
@@ -412,7 +413,7 @@ SSDataBlock* doMergeJoin(struct SOperatorInfo* pOperator) {
SSDataBlock* pRes = pJoinInfo->pRes;
blockDataCleanup(pRes);
- blockDataEnsureCapacity(pRes, 4096);
+
while (true) {
int32_t numOfRowsBefore = pRes->info.rows;
doMergeJoinImpl(pOperator, pRes);
diff --git a/source/libs/executor/src/projectoperator.c b/source/libs/executor/src/projectoperator.c
index 65bb40b195..8e81a00098 100644
--- a/source/libs/executor/src/projectoperator.c
+++ b/source/libs/executor/src/projectoperator.c
@@ -654,6 +654,7 @@ static void setPseudoOutputColInfo(SSDataBlock* pResult, SqlFunctionCtx* pCtx, S
int32_t projectApplyFunctions(SExprInfo* pExpr, SSDataBlock* pResult, SSDataBlock* pSrcBlock, SqlFunctionCtx* pCtx,
int32_t numOfOutput, SArray* pPseudoList) {
setPseudoOutputColInfo(pResult, pCtx, pPseudoList);
+ pResult->info.dataLoad = 1;
if (pSrcBlock == NULL) {
for (int32_t k = 0; k < numOfOutput; ++k) {
diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c
index eae2ff3c72..1414d3b4ab 100644
--- a/source/libs/executor/src/scanoperator.c
+++ b/source/libs/executor/src/scanoperator.c
@@ -110,9 +110,9 @@ static bool overlapWithTimeWindow(SInterval* pInterval, SDataBlockInfo* pBlockIn
if (order == TSDB_ORDER_ASC) {
w = getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.skey);
- assert(w.ekey >= pBlockInfo->window.skey);
+ ASSERT(w.ekey >= pBlockInfo->window.skey);
- if (TMAX(w.skey, pBlockInfo->window.skey) <= TMIN(w.ekey, pBlockInfo->window.ekey)) {
+ if (w.ekey < pBlockInfo->window.ekey) {
return true;
}
@@ -122,16 +122,16 @@ static bool overlapWithTimeWindow(SInterval* pInterval, SDataBlockInfo* pBlockIn
break;
}
- assert(w.ekey > pBlockInfo->window.ekey);
+ ASSERT(w.ekey > pBlockInfo->window.ekey);
if (TMAX(w.skey, pBlockInfo->window.skey) <= pBlockInfo->window.ekey) {
return true;
}
}
} else {
w = getAlignQueryTimeWindow(pInterval, pInterval->precision, pBlockInfo->window.ekey);
- assert(w.skey <= pBlockInfo->window.ekey);
+ ASSERT(w.skey <= pBlockInfo->window.ekey);
- if (TMAX(w.skey, pBlockInfo->window.skey) <= TMIN(w.ekey, pBlockInfo->window.ekey)) {
+ if (w.skey > pBlockInfo->window.skey) {
return true;
}
@@ -768,8 +768,8 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) {
tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num);
ASSERT(pInfo->base.dataReader == NULL);
- int32_t code = tsdbReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num,
- pInfo->pResBlock, (STsdbReader**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo));
+ int32_t code = tsdbReaderOpen(pInfo->base.readHandle.vnode, &pInfo->base.cond, pList, num, pInfo->pResBlock,
+ (STsdbReader**)&pInfo->base.dataReader, GET_TASKID(pTaskInfo));
if (code != TSDB_CODE_SUCCESS) {
T_LONG_JMP(pTaskInfo->env, code);
}
@@ -986,8 +986,8 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU
SSDataBlock* pBlock = pTableScanInfo->pResBlock;
STsdbReader* pReader = NULL;
- int32_t code = tsdbReaderOpen(pTableScanInfo->base.readHandle.vnode, &cond, &tblInfo, 1, pBlock, (STsdbReader**)&pReader,
- GET_TASKID(pTaskInfo));
+ int32_t code = tsdbReaderOpen(pTableScanInfo->base.readHandle.vnode, &cond, &tblInfo, 1, pBlock,
+ (STsdbReader**)&pReader, GET_TASKID(pTaskInfo));
if (code != TSDB_CODE_SUCCESS) {
terrno = code;
T_LONG_JMP(pTaskInfo->env, code);
@@ -995,7 +995,7 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU
}
if (tsdbNextDataBlock(pReader)) {
- /*SSDataBlock* p = */tsdbRetrieveDataBlock(pReader, NULL);
+ /*SSDataBlock* p = */ tsdbRetrieveDataBlock(pReader, NULL);
doSetTagColumnData(&pTableScanInfo->base, pBlock, pTaskInfo, pBlock->info.rows);
pBlock->info.id.groupId = getTableGroupId(pTaskInfo->pTableInfoList, pBlock->info.id.uid);
}
@@ -1224,7 +1224,7 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS
SColumnInfoData* pSrcUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX);
SColumnInfoData* pSrcGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX);
- uint64_t* srcUidData = (uint64_t*)pSrcUidCol->pData;
+ uint64_t* srcUidData = (uint64_t*)pSrcUidCol->pData;
ASSERT(pSrcStartTsCol->info.type == TSDB_DATA_TYPE_TIMESTAMP);
TSKEY* srcStartTsCol = (TSKEY*)pSrcStartTsCol->pData;
TSKEY* srcEndTsCol = (TSKEY*)pSrcEndTsCol->pData;
@@ -1342,10 +1342,41 @@ static int32_t generateScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock,
}
pDestBlock->info.type = STREAM_CLEAR;
pDestBlock->info.version = pSrcBlock->info.version;
+ pDestBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pDestBlock, 0);
return code;
}
+#if 0
+void calBlockTag(SStreamScanInfo* pInfo, SSDataBlock* pBlock) {
+ SExprSupp* pTagCalSup = &pInfo->tagCalSup;
+ SStreamState* pState = pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState;
+ if (pTagCalSup == NULL || pTagCalSup->numOfExprs == 0) return;
+ if (pBlock == NULL || pBlock->info.rows == 0) return;
+
+ void* tag = NULL;
+ int32_t tagLen = 0;
+ if (streamStateGetParTag(pState, pBlock->info.id.groupId, &tag, &tagLen) == 0) {
+ pBlock->info.tagLen = tagLen;
+ void* pTag = taosMemoryRealloc(pBlock->info.pTag, tagLen);
+ if (pTag == NULL) {
+ tdbFree(tag);
+ taosMemoryFree(pBlock->info.pTag);
+ pBlock->info.pTag = NULL;
+ pBlock->info.tagLen = 0;
+ return;
+ }
+ pBlock->info.pTag = pTag;
+ memcpy(pBlock->info.pTag, tag, tagLen);
+ tdbFree(tag);
+ return;
+ } else {
+ pBlock->info.pTag = NULL;
+ }
+ tdbFree(tag);
+}
+#endif
+
void calBlockTbName(SStreamScanInfo* pInfo, SSDataBlock* pBlock) {
SExprSupp* pTbNameCalSup = &pInfo->tbnameCalSup;
SStreamState* pState = pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState;
@@ -1353,10 +1384,12 @@ void calBlockTbName(SStreamScanInfo* pInfo, SSDataBlock* pBlock) {
if (pBlock == NULL || pBlock->info.rows == 0) return;
void* tbname = NULL;
- if (streamStateGetParName(pInfo->pStreamScanOp->pTaskInfo->streamInfo.pState, pBlock->info.id.groupId, &tbname) < 0) {
- pBlock->info.parTbName[0] = 0;
- } else {
+ if (streamStateGetParName(pState, pBlock->info.id.groupId, &tbname) == 0) {
memcpy(pBlock->info.parTbName, tbname, TSDB_TABLE_NAME_LEN);
+ tdbFree(tbname);
+ return;
+ } else {
+ pBlock->info.parTbName[0] = 0;
}
tdbFree(tbname);
@@ -1450,6 +1483,7 @@ static void checkUpdateData(SStreamScanInfo* pInfo, bool invertible, SSDataBlock
}
if (out && pInfo->pUpdateDataRes->info.rows > 0) {
pInfo->pUpdateDataRes->info.version = pBlock->info.version;
+ pInfo->pUpdateDataRes->info.dataLoad = 1;
blockDataUpdateTsWindow(pInfo->pUpdateDataRes, 0);
pInfo->pUpdateDataRes->info.type = pInfo->partitionSup.needCalc ? STREAM_DELETE_DATA : STREAM_CLEAR;
}
@@ -1512,6 +1546,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
}
+ pInfo->pRes->info.dataLoad = 1;
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
blockDataFreeRes((SSDataBlock*)pBlock);
@@ -1793,6 +1828,7 @@ FETCH_NEXT_BLOCK:
// TODO move into scan
pBlock->info.calWin.skey = INT64_MIN;
pBlock->info.calWin.ekey = INT64_MAX;
+ pBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pBlock, 0);
switch (pBlock->info.type) {
case STREAM_NORMAL:
@@ -1970,6 +2006,7 @@ FETCH_NEXT_BLOCK:
}
doFilter(pInfo->pRes, pOperator->exprSupp.pFilterInfo, NULL);
+ pInfo->pRes->info.dataLoad = 1;
blockDataUpdateTsWindow(pInfo->pRes, pInfo->primaryTsIndex);
if (pBlockInfo->rows > 0 || pInfo->pUpdateDataRes->info.rows > 0) {
@@ -2280,7 +2317,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
if (pHandle->initTableReader) {
pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER;
pTSInfo->base.dataReader = NULL;
- code = tsdbReaderOpen(pHandle->vnode, &pTSInfo->base.cond, pList, num, pTSInfo->pResBlock, &pTSInfo->base.dataReader, NULL);
+ code = tsdbReaderOpen(pHandle->vnode, &pTSInfo->base.cond, pList, num, pTSInfo->pResBlock,
+ &pTSInfo->base.dataReader, NULL);
if (code != 0) {
terrno = code;
destroyTableScanOperatorInfo(pTableScanOp);
@@ -2350,7 +2388,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys
pOperator->exprSupp.numOfExprs = taosArrayGetSize(pInfo->pRes->pDataBlock);
__optr_fn_t nextFn = pTaskInfo->execModel == OPTR_EXEC_MODEL_STREAM ? doStreamScan : doQueueScan;
- pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, nextFn, NULL, destroyStreamScanOperatorInfo, optrDefaultBufFn, NULL);
+ pOperator->fpSet =
+ createOperatorFpSet(optrDummyOpenFn, nextFn, NULL, destroyStreamScanOperatorInfo, optrDefaultBufFn, NULL);
return pOperator;
@@ -2487,7 +2526,8 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi
initResultSizeInfo(&pOperator->resultInfo, 4096);
blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity);
- pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTagScan, NULL, destroyTagScanOperatorInfo, optrDefaultBufFn, NULL);
+ pOperator->fpSet =
+ createOperatorFpSet(optrDummyOpenFn, doTagScan, NULL, destroyTagScanOperatorInfo, optrDefaultBufFn, NULL);
return pOperator;
@@ -2508,11 +2548,12 @@ static SSDataBlock* getTableDataBlockImpl(void* param) {
SQueryTableDataCond* pQueryCond = taosArrayGet(pInfo->queryConds, readIdx);
- int64_t st = taosGetTimestampUs();
- void* p = tableListGetInfo(pTaskInfo->pTableInfoList, readIdx + pInfo->tableStartIndex);
+ int64_t st = taosGetTimestampUs();
+ void* p = tableListGetInfo(pTaskInfo->pTableInfoList, readIdx + pInfo->tableStartIndex);
SReadHandle* pHandle = &pInfo->base.readHandle;
- int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, pBlock, &pInfo->base.dataReader, GET_TASKID(pTaskInfo));
+ int32_t code =
+ tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, pBlock, &pInfo->base.dataReader, GET_TASKID(pTaskInfo));
if (code != 0) {
T_LONG_JMP(pTaskInfo->env, code);
}
@@ -2910,8 +2951,8 @@ static void buildVnodeGroupedNtbTableCount(STableCountScanOperatorInfo*
SSDataBlock* pRes, char* dbName);
static void buildVnodeFilteredTbCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo,
STableCountScanSupp* pSupp, SSDataBlock* pRes, char* dbName);
-static void buildVnodeGroupedTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo,
- STableCountScanSupp* pSupp, SSDataBlock* pRes, int32_t vgId, char* dbName);
+static void buildVnodeGroupedTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo,
+ STableCountScanSupp* pSupp, SSDataBlock* pRes, int32_t vgId, char* dbName);
static SSDataBlock* buildVnodeDbTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo,
STableCountScanSupp* pSupp, SSDataBlock* pRes);
static void buildSysDbGroupedTableCount(SOperatorInfo* pOperator, STableCountScanOperatorInfo* pInfo,
@@ -3036,8 +3077,8 @@ SOperatorInfo* createTableCountScanOperatorInfo(SReadHandle* readHandle, STableC
setOperatorInfo(pOperator, "TableCountScanOperator", QUERY_NODE_PHYSICAL_PLAN_TABLE_COUNT_SCAN, false, OP_NOT_OPENED,
pInfo, pTaskInfo);
- pOperator->fpSet =
- createOperatorFpSet(optrDummyOpenFn, doTableCountScan, NULL, destoryTableCountScanOperator, optrDefaultBufFn, NULL);
+ pOperator->fpSet = createOperatorFpSet(optrDummyOpenFn, doTableCountScan, NULL, destoryTableCountScanOperator,
+ optrDefaultBufFn, NULL);
return pOperator;
_error:
diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c
index 005b794f0b..7ac007b7cb 100644
--- a/source/libs/executor/src/sortoperator.c
+++ b/source/libs/executor/src/sortoperator.c
@@ -105,6 +105,7 @@ void appendOneRowToDataBlock(SSDataBlock* pBlock, STupleHandle* pTupleHandle) {
}
}
+ pBlock->info.dataLoad = 1;
pBlock->info.rows += 1;
}
@@ -698,6 +699,7 @@ SSDataBlock* getMultiwaySortedBlockData(SSortHandle* pHandle, SSDataBlock* pData
pInfo->limitInfo.numOfOutputRows += p->info.rows;
pDataBlock->info.rows = p->info.rows;
pDataBlock->info.id.groupId = pInfo->groupId;
+ pDataBlock->info.dataLoad = 1;
}
qDebug("%s get sorted block, groupId:0x%" PRIx64 " rows:%d", GET_TASKID(pTaskInfo), pDataBlock->info.id.groupId,
diff --git a/source/libs/executor/src/timesliceoperator.c b/source/libs/executor/src/timesliceoperator.c
index a82dc13318..8db03f99c5 100644
--- a/source/libs/executor/src/timesliceoperator.c
+++ b/source/libs/executor/src/timesliceoperator.c
@@ -163,6 +163,10 @@ static bool genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) {
colDataAppend(pDst, rows, (char*)&pSliceInfo->current, false);
continue;
+ } else if (IS_BOOLEAN_TYPE(pExprInfo->base.resSchema.type)) {
+ bool isFilled = true;
+ colDataAppend(pDst, pResBlock->info.rows, (char*)&isFilled, false);
+ continue;
}
int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId;
@@ -274,6 +278,9 @@ static void addCurrentRowToResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp*
if (IS_TIMESTAMP_TYPE(pExprInfo->base.resSchema.type)) {
colDataAppend(pDst, pResBlock->info.rows, (char*)&pSliceInfo->current, false);
+ } else if (IS_BOOLEAN_TYPE(pExprInfo->base.resSchema.type)) {
+ bool isFilled = false;
+ colDataAppend(pDst, pResBlock->info.rows, (char*)&isFilled, false);
} else {
int32_t srcSlot = pExprInfo->base.pParam[0].pCol->slotId;
SColumnInfoData* pSrc = taosArrayGet(pSrcBlock->pDataBlock, srcSlot);
diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c
index 2af551b832..ca64fd135e 100644
--- a/source/libs/executor/src/timewindowoperator.c
+++ b/source/libs/executor/src/timewindowoperator.c
@@ -1037,9 +1037,10 @@ SResultRowPosition addToOpenWindowList(SResultRowInfo* pResultRowInfo, const SRe
int64_t* extractTsCol(SSDataBlock* pBlock, const SIntervalAggOperatorInfo* pInfo) {
TSKEY* tsCols = NULL;
- if (pBlock->pDataBlock != NULL) {
+ if (pBlock->pDataBlock != NULL && pBlock->info.dataLoad == 1) {
SColumnInfoData* pColDataInfo = taosArrayGet(pBlock->pDataBlock, pInfo->primaryTsIndex);
tsCols = (int64_t*)pColDataInfo->pData;
+ ASSERT(tsCols[0] != 0);
// no data in primary ts
if (tsCols[0] == 0 && tsCols[pBlock->info.rows - 1] == 0) {
@@ -1083,8 +1084,6 @@ static int32_t doOpenIntervalAgg(SOperatorInfo* pOperator) {
// the pDataBlock are always the same one, no need to call this again
setInputDataBlock(pSup, pBlock, pInfo->inputOrder, scanFlag, true);
- blockDataUpdateTsWindow(pBlock, pInfo->primaryTsIndex);
-
hashIntervalAgg(pOperator, &pInfo->binfo.resultRowInfo, pBlock, scanFlag);
}
diff --git a/source/libs/executor/test/executorTests.cpp b/source/libs/executor/test/executorTests.cpp
index 1c42163349..2efd06f440 100644
--- a/source/libs/executor/test/executorTests.cpp
+++ b/source/libs/executor/test/executorTests.cpp
@@ -166,6 +166,7 @@ SSDataBlock* get2ColsDummyBlock(SOperatorInfo* pOperator) {
pInfo->current += 1;
+ pBlock->info.dataLoad = 1;
blockDataUpdateTsWindow(pBlock, 0);
return pBlock;
}
diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c
index 07e480ee1d..06406d158f 100644
--- a/source/libs/function/src/builtins.c
+++ b/source/libs/function/src/builtins.c
@@ -466,7 +466,7 @@ static int32_t translateStddevMerge(SFunctionNode* pFunc, char* pErrBuf, int32_t
static int32_t translateWduration(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
// pseudo column do not need to check parameters
- pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_BIGINT};
+ pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_BIGINT].bytes, .type = TSDB_DATA_TYPE_BIGINT};
return TSDB_CODE_SUCCESS;
}
@@ -480,14 +480,21 @@ static int32_t translateNowToday(SFunctionNode* pFunc, char* pErrBuf, int32_t le
return code;
}
- pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_TIMESTAMP};
+ pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes, .type = TSDB_DATA_TYPE_TIMESTAMP};
return TSDB_CODE_SUCCESS;
}
static int32_t translateTimePseudoColumn(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
// pseudo column do not need to check parameters
- pFunc->node.resType = (SDataType){.bytes = sizeof(int64_t), .type = TSDB_DATA_TYPE_TIMESTAMP};
+ pFunc->node.resType = (SDataType){.bytes =tDataTypes[TSDB_DATA_TYPE_TIMESTAMP].bytes, .type = TSDB_DATA_TYPE_TIMESTAMP};
+ return TSDB_CODE_SUCCESS;
+}
+
+static int32_t translateIsFilledPseudoColumn(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
+ // pseudo column do not need to check parameters
+
+ pFunc->node.resType = (SDataType){.bytes = tDataTypes[TSDB_DATA_TYPE_BOOL].bytes, .type = TSDB_DATA_TYPE_BOOL};
return TSDB_CODE_SUCCESS;
}
@@ -3254,6 +3261,16 @@ const SBuiltinFuncDefinition funcMgtBuiltins[] = {
.sprocessFunc = NULL,
.finalizeFunc = NULL
},
+ {
+ .name = "_isfilled",
+ .type = FUNCTION_TYPE_ISFILLED,
+ .classification = FUNC_MGT_PSEUDO_COLUMN_FUNC | FUNC_MGT_INTERP_PC_FUNC,
+ .translateFunc = translateIsFilledPseudoColumn,
+ .getEnvFunc = NULL,
+ .initFunc = NULL,
+ .sprocessFunc = NULL,
+ .finalizeFunc = NULL
+ },
{
.name = "_tags",
.type = FUNCTION_TYPE_TAGS,
diff --git a/source/libs/function/src/detail/tavgfunction.c b/source/libs/function/src/detail/tavgfunction.c
index 1c74d22a82..60bf30d8ed 100644
--- a/source/libs/function/src/detail/tavgfunction.c
+++ b/source/libs/function/src/detail/tavgfunction.c
@@ -514,7 +514,7 @@ int32_t avgFunction(SqlFunctionCtx* pCtx) {
numOfElem = pInput->numOfRows;
pAvgRes->count += pInput->numOfRows;
- bool simdAvailable = tsAVXEnable && tsSIMDEnable && (numOfRows > THRESHOLD_SIZE);
+ bool simdAvailable = tsAVXEnable && tsSIMDBuiltins && (numOfRows > THRESHOLD_SIZE);
switch(type) {
case TSDB_DATA_TYPE_UTINYINT:
diff --git a/source/libs/function/src/detail/tminmax.c b/source/libs/function/src/detail/tminmax.c
index b2cb36cba0..cb5cea3cc8 100644
--- a/source/libs/function/src/detail/tminmax.c
+++ b/source/libs/function/src/detail/tminmax.c
@@ -369,7 +369,7 @@ static int32_t findFirstValPosition(const SColumnInfoData* pCol, int32_t start,
static void handleInt8Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
bool signVal) {
// AVX2 version to speedup the loop
- if (tsAVX2Enable && tsSIMDEnable) {
+ if (tsAVX2Enable && tsSIMDBuiltins) {
pBuf->v = i8VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
} else {
if (!pBuf->assign) {
@@ -403,7 +403,7 @@ static void handleInt8Col(const void* data, int32_t start, int32_t numOfRows, SM
static void handleInt16Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
bool signVal) {
// AVX2 version to speedup the loop
- if (tsAVX2Enable && tsSIMDEnable) {
+ if (tsAVX2Enable && tsSIMDBuiltins) {
pBuf->v = i16VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
} else {
if (!pBuf->assign) {
@@ -437,7 +437,7 @@ static void handleInt16Col(const void* data, int32_t start, int32_t numOfRows, S
static void handleInt32Col(const void* data, int32_t start, int32_t numOfRows, SMinmaxResInfo* pBuf, bool isMinFunc,
bool signVal) {
// AVX2 version to speedup the loop
- if (tsAVX2Enable && tsSIMDEnable) {
+ if (tsAVX2Enable && tsSIMDBuiltins) {
pBuf->v = i32VectorCmpAVX2(data, numOfRows, isMinFunc, signVal);
} else {
if (!pBuf->assign) {
@@ -500,7 +500,7 @@ static void handleFloatCol(SColumnInfoData* pCol, int32_t start, int32_t numOfRo
float* val = (float*)&pBuf->v;
// AVX version to speedup the loop
- if (tsAVXEnable && tsSIMDEnable) {
+ if (tsAVXEnable && tsSIMDBuiltins) {
*val = floatVectorCmpAVX(pData, numOfRows, isMinFunc);
} else {
if (!pBuf->assign) {
@@ -530,7 +530,7 @@ static void handleDoubleCol(SColumnInfoData* pCol, int32_t start, int32_t numOfR
double* val = (double*)&pBuf->v;
// AVX version to speedup the loop
- if (tsAVXEnable && tsSIMDEnable) {
+ if (tsAVXEnable && tsSIMDBuiltins) {
*val = (double)doubleVectorCmpAVX(pData, numOfRows, isMinFunc);
} else {
if (!pBuf->assign) {
diff --git a/source/libs/function/src/tpercentile.c b/source/libs/function/src/tpercentile.c
index 9c3e1f5604..157ee08f15 100644
--- a/source/libs/function/src/tpercentile.c
+++ b/source/libs/function/src/tpercentile.c
@@ -364,6 +364,7 @@ int32_t tMemBucketPut(tMemBucket *pBucket, const void *data, size_t size) {
assert(pSlot->info.data->num >= pBucket->elemPerPage && pSlot->info.size > 0);
// keep the pointer in memory
+ setBufPageDirty(pSlot->info.data, true);
releaseBufPage(pBucket->pBuffer, pSlot->info.data);
pSlot->info.data = NULL;
}
@@ -497,15 +498,16 @@ double getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction)
resetSlotInfo(pMemBucket);
int32_t groupId = getGroupId(pMemBucket->numOfSlots, i, pMemBucket->times - 1);
- SArray* list = taosHashGet(pMemBucket->groupPagesMap, &groupId, sizeof(groupId));
+ SArray* list = *(SArray **)taosHashGet(pMemBucket->groupPagesMap, &groupId, sizeof(groupId));
ASSERT(list != NULL && list->size > 0);
for (int32_t f = 0; f < list->size; ++f) {
- SPageInfo *pgInfo = *(SPageInfo **)taosArrayGet(list, f);
- SFilePage *pg = getBufPage(pMemBucket->pBuffer, getPageId(pgInfo));
+ int32_t *pageId = taosArrayGet(list, f);
+ SFilePage *pg = getBufPage(pMemBucket->pBuffer, *pageId);
tMemBucketPut(pMemBucket, pg->data, (int32_t)pg->num);
- releaseBufPageInfo(pMemBucket->pBuffer, pgInfo);
+ setBufPageDirty(pg, true);
+ releaseBufPage(pMemBucket->pBuffer, pg);
}
return getPercentileImpl(pMemBucket, count - num, fraction);
diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c
index 32e57565d4..0b309bc8f5 100644
--- a/source/libs/function/src/tudf.c
+++ b/source/libs/function/src/tudf.c
@@ -837,9 +837,34 @@ int32_t convertUdfColumnToDataBlock(SUdfColumn *udfCol, SSDataBlock *block) {
}
int32_t convertScalarParamToDataBlock(SScalarParam *input, int32_t numOfCols, SSDataBlock *output) {
- output->info.rows = input->numOfRows;
+ int32_t numOfRows = 0;
+ for (int32_t i = 0; i < numOfCols; ++i) {
+ numOfRows = (input[i].numOfRows > numOfRows) ? input[i].numOfRows : numOfRows;
+ }
+ output->info.rows = numOfRows;
output->pDataBlock = taosArrayInit(numOfCols, sizeof(SColumnInfoData));
for (int32_t i = 0; i < numOfCols; ++i) {
+ if ((input+i)->numOfRows < numOfRows) {
+ SColumnInfoData* pColInfoData = (input+i)->columnData;
+ int32_t startRow = (input+i)->numOfRows;
+ int32_t expandRows = numOfRows - startRow;
+ colInfoDataEnsureCapacity(pColInfoData, numOfRows, false);
+ bool isNull = colDataIsNull_s(pColInfoData, (input+i)->numOfRows - 1);
+ if (isNull) {
+ colDataAppendNNULL(pColInfoData, startRow, expandRows);
+ } else {
+ char* src = colDataGetData(pColInfoData, (input + i)->numOfRows - 1);
+ int32_t bytes = pColInfoData->info.bytes;
+ char* data = taosMemoryMalloc(bytes);
+ memcpy(data, src, bytes);
+ for (int j = 0; j < expandRows; ++j) {
+ colDataAppend(pColInfoData, startRow+j, data, false);
+ }
+ //colDataAppendNItems(pColInfoData, startRow, data, expandRows);
+ taosMemoryFree(data);
+ }
+ }
+
taosArrayPush(output->pDataBlock, (input + i)->columnData);
if (IS_VAR_DATA_TYPE((input + i)->columnData->info.type)) {
diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c
index 2f3db636c8..40c75ce6ba 100644
--- a/source/libs/function/src/udfd.c
+++ b/source/libs/function/src/udfd.c
@@ -28,39 +28,46 @@
#include "tmsg.h"
#include "trpc.h"
#include "tmisce.h"
-// clang-foramt on
+// clang-format on
typedef struct SUdfdContext {
- uv_loop_t * loop;
+ uv_loop_t *loop;
uv_pipe_t ctrlPipe;
uv_signal_t intrSignal;
char listenPipeName[PATH_MAX + UDF_LISTEN_PIPE_NAME_LEN + 2];
uv_pipe_t listeningPipe;
- void * clientRpc;
+ void *clientRpc;
SCorEpSet mgmtEp;
uv_mutex_t udfsMutex;
- SHashObj * udfsHash;
+ SHashObj *udfsHash;
- SArray* residentFuncs;
+ SArray *residentFuncs;
bool printVersion;
} SUdfdContext;
SUdfdContext global;
+struct SUdfdUvConn;
+struct SUvUdfWork;
+
typedef struct SUdfdUvConn {
uv_stream_t *client;
- char * inputBuf;
+ char *inputBuf;
int32_t inputLen;
int32_t inputCap;
int32_t inputTotal;
+
+ struct SUvUdfWork *pWorkList; // head of work list
} SUdfdUvConn;
typedef struct SUvUdfWork {
- uv_stream_t *client;
+ SUdfdUvConn *conn;
uv_buf_t input;
uv_buf_t output;
+
+ struct SUvUdfWork *pWorkNext;
} SUvUdfWork;
typedef enum { UDF_STATE_INIT = 0, UDF_STATE_LOADING, UDF_STATE_READY, UDF_STATE_UNLOADING } EUdfState;
@@ -70,7 +77,7 @@ typedef struct SUdf {
EUdfState state;
uv_mutex_t lock;
uv_cond_t condReady;
- bool resident;
+ bool resident;
char name[TSDB_FUNC_NAME_LEN + 1];
int8_t funcType;
@@ -107,7 +114,7 @@ typedef enum EUdfdRpcReqRspType {
typedef struct SUdfdRpcSendRecvInfo {
EUdfdRpcReqRspType rpcType;
int32_t code;
- void * param;
+ void *param;
uv_sem_t resultSem;
} SUdfdRpcSendRecvInfo;
@@ -178,7 +185,7 @@ void udfdProcessSetupRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
fnInfo("setup request. seq num: %" PRId64 ", udf name: %s", request->seqNum, request->setup.udfName);
SUdfSetupRequest *setup = &request->setup;
int32_t code = TSDB_CODE_SUCCESS;
- SUdf * udf = NULL;
+ SUdf *udf = NULL;
uv_mutex_lock(&global.udfsMutex);
SUdf **udfInHash = taosHashGet(global.udfsHash, request->setup.udfName, strlen(request->setup.udfName));
if (udfInHash) {
@@ -193,7 +200,7 @@ void udfdProcessSetupRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
uv_cond_init(&udfNew->condReady);
udf = udfNew;
- SUdf** pUdf = &udf;
+ SUdf **pUdf = &udf;
taosHashPut(global.udfsHash, request->setup.udfName, strlen(request->setup.udfName), pUdf, POINTER_BYTES);
uv_mutex_unlock(&global.udfsMutex);
}
@@ -207,7 +214,7 @@ void udfdProcessSetupRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
}
udf->resident = false;
for (int32_t i = 0; i < taosArrayGetSize(global.residentFuncs); ++i) {
- char* funcName = taosArrayGet(global.residentFuncs, i);
+ char *funcName = taosArrayGet(global.residentFuncs, i);
if (strcmp(setup->udfName, funcName) == 0) {
udf->resident = true;
break;
@@ -248,11 +255,12 @@ void udfdProcessSetupRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
void udfdProcessCallRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
SUdfCallRequest *call = &request->call;
- fnDebug("call request. call type %d, handle: %" PRIx64 ", seq num %" PRId64 , call->callType, call->udfHandle, request->seqNum);
- SUdfcFuncHandle * handle = (SUdfcFuncHandle *)(call->udfHandle);
- SUdf * udf = handle->udf;
+ fnDebug("call request. call type %d, handle: %" PRIx64 ", seq num %" PRId64, call->callType, call->udfHandle,
+ request->seqNum);
+ SUdfcFuncHandle *handle = (SUdfcFuncHandle *)(call->udfHandle);
+ SUdf *udf = handle->udf;
SUdfResponse response = {0};
- SUdfResponse * rsp = &response;
+ SUdfResponse *rsp = &response;
SUdfCallResponse *subRsp = &rsp->callRsp;
int32_t code = TSDB_CODE_SUCCESS;
@@ -352,7 +360,7 @@ void udfdProcessTeardownRequest(SUvUdfWork *uvUdf, SUdfRequest *request) {
SUdfTeardownRequest *teardown = &request->teardown;
fnInfo("teardown. seq number: %" PRId64 ", handle:%" PRIx64, request->seqNum, teardown->udfHandle);
SUdfcFuncHandle *handle = (SUdfcFuncHandle *)(teardown->udfHandle);
- SUdf * udf = handle->udf;
+ SUdf *udf = handle->udf;
bool unloadUdf = false;
int32_t code = TSDB_CODE_SUCCESS;
@@ -409,15 +417,14 @@ void udfdProcessRpcRsp(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
if (msgInfo->rpcType == UDFD_RPC_MNODE_CONNECT) {
SConnectRsp connectRsp = {0};
tDeserializeSConnectRsp(pMsg->pCont, pMsg->contLen, &connectRsp);
-
+
int32_t now = taosGetTimestampSec();
int32_t delta = abs(now - connectRsp.svrTimestamp);
if (delta > 900) {
msgInfo->code = TSDB_CODE_TIME_UNSYNCED;
goto _return;
}
-
-
+
if (connectRsp.epSet.numOfEps == 0) {
msgInfo->code = TSDB_CODE_APP_ERROR;
goto _return;
@@ -434,7 +441,7 @@ void udfdProcessRpcRsp(void *parent, SRpcMsg *pMsg, SEpSet *pEpSet) {
goto _return;
}
SFuncInfo *pFuncInfo = (SFuncInfo *)taosArrayGet(retrieveRsp.pFuncInfos, 0);
- SUdf * udf = msgInfo->param;
+ SUdf *udf = msgInfo->param;
udf->funcType = pFuncInfo->funcType;
udf->scriptType = pFuncInfo->scriptType;
udf->outputType = pFuncInfo->outputType;
@@ -487,7 +494,7 @@ int32_t udfdFillUdfInfoFromMNode(void *clientRpc, char *udfName, SUdf *udf) {
taosArrayPush(retrieveReq.pFuncNames, udfName);
int32_t contLen = tSerializeSRetrieveFuncReq(NULL, 0, &retrieveReq);
- void * pReq = rpcMallocCont(contLen);
+ void *pReq = rpcMallocCont(contLen);
tSerializeSRetrieveFuncReq(pReq, contLen, &retrieveReq);
taosArrayDestroy(retrieveReq.pFuncNames);
@@ -522,7 +529,7 @@ int32_t udfdConnectToMnode() {
connReq.startTime = taosGetTimestampMs();
int32_t contLen = tSerializeSConnectReq(NULL, 0, &connReq);
- void * pReq = rpcMallocCont(contLen);
+ void *pReq = rpcMallocCont(contLen);
tSerializeSConnectReq(pReq, contLen, &connReq);
SUdfdRpcSendRecvInfo *msgInfo = taosMemoryCalloc(1, sizeof(SUdfdRpcSendRecvInfo));
@@ -589,7 +596,7 @@ int32_t udfdLoadUdf(char *udfName, SUdf *udf) {
strncpy(finishFuncName, processFuncName, sizeof(finishFuncName));
strncat(finishFuncName, finishSuffix, strlen(finishSuffix));
uv_dlsym(&udf->lib, finishFuncName, (void **)(&udf->aggFinishFunc));
- char mergeFuncName[TSDB_FUNC_NAME_LEN + 6] = {0};
+ char mergeFuncName[TSDB_FUNC_NAME_LEN + 6] = {0};
char *mergeSuffix = "_merge";
strncpy(mergeFuncName, processFuncName, sizeof(mergeFuncName));
strncat(mergeFuncName, mergeSuffix, strlen(mergeSuffix));
@@ -601,9 +608,10 @@ static bool udfdRpcRfp(int32_t code, tmsg_t msgType) {
if (code == TSDB_CODE_RPC_NETWORK_UNAVAIL || code == TSDB_CODE_RPC_BROKEN_LINK || code == TSDB_CODE_SYN_NOT_LEADER ||
code == TSDB_CODE_SYN_RESTORING || code == TSDB_CODE_MNODE_NOT_FOUND || code == TSDB_CODE_APP_IS_STARTING ||
code == TSDB_CODE_APP_IS_STOPPING) {
- if (msgType == TDMT_SCH_QUERY || msgType == TDMT_SCH_MERGE_QUERY || msgType == TDMT_SCH_FETCH || msgType == TDMT_SCH_MERGE_FETCH) {
+ if (msgType == TDMT_SCH_QUERY || msgType == TDMT_SCH_MERGE_QUERY || msgType == TDMT_SCH_FETCH ||
+ msgType == TDMT_SCH_MERGE_FETCH) {
return false;
- }
+ }
return true;
} else {
return false;
@@ -663,7 +671,7 @@ int32_t udfdOpenClientRpc() {
rpcInit.parent = &global;
rpcInit.rfp = udfdRpcRfp;
rpcInit.compressSize = tsCompressMsgSize;
-
+
global.clientRpc = rpcOpen(&rpcInit);
if (global.clientRpc == NULL) {
fnError("failed to init dnode rpc client");
@@ -684,6 +692,17 @@ void udfdOnWrite(uv_write_t *req, int status) {
if (status < 0) {
fnError("udfd send response error, length: %zu code: %s", work->output.len, uv_err_name(status));
}
+ // remove work from the connection work list
+ if (work->conn != NULL) {
+ SUvUdfWork **ppWork;
+ for (ppWork = &work->conn->pWorkList; *ppWork && (*ppWork != work); ppWork = &((*ppWork)->pWorkNext)) {
+ }
+ if (*ppWork == work) {
+ *ppWork = work->pWorkNext;
+ } else {
+ fnError("work not in conn any more");
+ }
+ }
taosMemoryFree(work->output.base);
taosMemoryFree(work);
taosMemoryFree(req);
@@ -692,10 +711,11 @@ void udfdOnWrite(uv_write_t *req, int status) {
void udfdSendResponse(uv_work_t *work, int status) {
SUvUdfWork *udfWork = (SUvUdfWork *)(work->data);
- uv_write_t *write_req = taosMemoryMalloc(sizeof(uv_write_t));
- write_req->data = udfWork;
- uv_write(write_req, udfWork->client, &udfWork->output, 1, udfdOnWrite);
-
+ if (udfWork->conn != NULL) {
+ uv_write_t *write_req = taosMemoryMalloc(sizeof(uv_write_t));
+ write_req->data = udfWork;
+ uv_write(write_req, udfWork->conn->client, &udfWork->output, 1, udfdOnWrite);
+ }
taosMemoryFree(work);
}
@@ -716,8 +736,8 @@ void udfdAllocBuffer(uv_handle_t *handle, size_t suggestedSize, uv_buf_t *buf) {
buf->len = 0;
}
} else if (ctx->inputTotal == -1 && ctx->inputLen < msgHeadSize) {
- buf->base = ctx->inputBuf + ctx->inputLen;
- buf->len = msgHeadSize - ctx->inputLen;
+ buf->base = ctx->inputBuf + ctx->inputLen;
+ buf->len = msgHeadSize - ctx->inputLen;
} else {
ctx->inputCap = ctx->inputTotal > ctx->inputCap ? ctx->inputTotal : ctx->inputCap;
void *inputBuf = taosMemoryRealloc(ctx->inputBuf, ctx->inputCap);
@@ -744,10 +764,15 @@ bool isUdfdUvMsgComplete(SUdfdUvConn *pipe) {
}
void udfdHandleRequest(SUdfdUvConn *conn) {
- uv_work_t * work = taosMemoryMalloc(sizeof(uv_work_t));
+ char *inputBuf = conn->inputBuf;
+ int32_t inputLen = conn->inputLen;
+
+ uv_work_t *work = taosMemoryMalloc(sizeof(uv_work_t));
SUvUdfWork *udfWork = taosMemoryMalloc(sizeof(SUvUdfWork));
- udfWork->client = conn->client;
- udfWork->input = uv_buf_init(conn->inputBuf, conn->inputLen);
+ udfWork->conn = conn;
+ udfWork->pWorkNext = conn->pWorkList;
+ conn->pWorkList = udfWork;
+ udfWork->input = uv_buf_init(inputBuf, inputLen);
conn->inputBuf = NULL;
conn->inputLen = 0;
conn->inputCap = 0;
@@ -758,13 +783,19 @@ void udfdHandleRequest(SUdfdUvConn *conn) {
void udfdPipeCloseCb(uv_handle_t *pipe) {
SUdfdUvConn *conn = pipe->data;
+ SUvUdfWork* pWork = conn->pWorkList;
+ while (pWork != NULL) {
+ pWork->conn = NULL;
+ pWork = pWork->pWorkNext;
+ }
+
taosMemoryFree(conn->client);
taosMemoryFree(conn->inputBuf);
taosMemoryFree(conn);
}
void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
- fnDebug("udf read %zd bytes from client", nread);
+ fnDebug("udfd read %zd bytes from client", nread);
if (nread == 0) return;
SUdfdUvConn *conn = client->data;
@@ -780,10 +811,10 @@ void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
}
if (nread < 0) {
- fnError("Receive error %s", uv_err_name(nread));
if (nread == UV_EOF) {
- // TODO check more when close
+ fnInfo("udfd pipe read EOF");
} else {
+ fnError("Receive error %s", uv_err_name(nread));
}
udfdUvHandleError(conn);
}
@@ -799,6 +830,7 @@ void udfdOnNewConnection(uv_stream_t *server, int status) {
uv_pipe_init(global.loop, client, 0);
if (uv_accept(server, (uv_stream_t *)client) == 0) {
SUdfdUvConn *ctx = taosMemoryMalloc(sizeof(SUdfdUvConn));
+ ctx->pWorkList = NULL;
ctx->client = (uv_stream_t *)client;
ctx->inputBuf = 0;
ctx->inputLen = 0;
@@ -891,7 +923,7 @@ static int32_t udfdUvInit() {
}
global.loop = loop;
- if (tsStartUdfd) { // udfd is started by taosd, which shall exit when taosd exit
+ if (tsStartUdfd) { // udfd is started by taosd, which shall exit when taosd exit
uv_pipe_init(global.loop, &global.ctrlPipe, 1);
uv_pipe_open(&global.ctrlPipe, 0);
uv_read_start((uv_stream_t *)&global.ctrlPipe, udfdCtrlAllocBufCb, udfdCtrlReadCb);
@@ -966,10 +998,10 @@ int32_t udfdInitResidentFuncs() {
}
global.residentFuncs = taosArrayInit(2, TSDB_FUNC_NAME_LEN);
- char* pSave = tsUdfdResFuncs;
- char* token;
+ char *pSave = tsUdfdResFuncs;
+ char *token;
while ((token = strtok_r(pSave, ",", &pSave)) != NULL) {
- char func[TSDB_FUNC_NAME_LEN+1] = {0};
+ char func[TSDB_FUNC_NAME_LEN + 1] = {0};
strncpy(func, token, TSDB_FUNC_NAME_LEN);
fnInfo("udfd add resident function %s", func);
taosArrayPush(global.residentFuncs, func);
@@ -980,10 +1012,10 @@ int32_t udfdInitResidentFuncs() {
int32_t udfdDeinitResidentFuncs() {
for (int32_t i = 0; i < taosArrayGetSize(global.residentFuncs); ++i) {
- char* funcName = taosArrayGet(global.residentFuncs, i);
- SUdf** udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName));
+ char *funcName = taosArrayGet(global.residentFuncs, i);
+ SUdf **udfInHash = taosHashGet(global.udfsHash, funcName, strlen(funcName));
if (udfInHash) {
- SUdf* udf = *udfInHash;
+ SUdf *udf = *udfInHash;
if (udf->destroyFunc) {
(udf->destroyFunc)();
}
diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c
index 38884a37e0..45d65d5ea1 100644
--- a/source/libs/nodes/src/nodesCodeFuncs.c
+++ b/source/libs/nodes/src/nodesCodeFuncs.c
@@ -79,6 +79,10 @@ const char* nodesNodeName(ENodeType type) {
return "TableOptions";
case QUERY_NODE_INDEX_OPTIONS:
return "IndexOptions";
+ case QUERY_NODE_EXPLAIN_OPTIONS:
+ return "ExplainOptions";
+ case QUERY_NODE_STREAM_OPTIONS:
+ return "StreamOptions";
case QUERY_NODE_LEFT_VALUE:
return "LeftValue";
case QUERY_NODE_WHEN_THEN:
@@ -91,7 +95,7 @@ const char* nodesNodeName(ENodeType type) {
return "SetOperator";
case QUERY_NODE_SELECT_STMT:
return "SelectStmt";
- case QUERY_NODE_VNODE_MODIF_STMT:
+ case QUERY_NODE_VNODE_MODIFY_STMT:
return "VnodeModifStmt";
case QUERY_NODE_CREATE_DATABASE_STMT:
return "CreateDatabaseStmt";
@@ -99,11 +103,15 @@ const char* nodesNodeName(ENodeType type) {
return "DropDatabaseStmt";
case QUERY_NODE_ALTER_DATABASE_STMT:
return "AlterDatabaseStmt";
+ case QUERY_NODE_FLUSH_DATABASE_STMT:
+ return "FlushDatabaseStmt";
+ case QUERY_NODE_TRIM_DATABASE_STMT:
+ return "TrimDatabaseStmt";
case QUERY_NODE_CREATE_TABLE_STMT:
return "CreateTableStmt";
case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
return "CreateSubtableClause";
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
return "CreateMultiTableStmt";
case QUERY_NODE_DROP_TABLE_CLAUSE:
return "DropTableClause";
@@ -137,12 +145,42 @@ const char* nodesNodeName(ENodeType type) {
return "CreateQnodeStmt";
case QUERY_NODE_DROP_QNODE_STMT:
return "DropQnodeStmt";
+ case QUERY_NODE_CREATE_SNODE_STMT:
+ return "CreateSnodeStmt";
+ case QUERY_NODE_DROP_SNODE_STMT:
+ return "DropSnodeStmt";
+ case QUERY_NODE_CREATE_MNODE_STMT:
+ return "CreateMnodeStmt";
+ case QUERY_NODE_DROP_MNODE_STMT:
+ return "DropMnodeStmt";
case QUERY_NODE_CREATE_TOPIC_STMT:
return "CreateTopicStmt";
case QUERY_NODE_DROP_TOPIC_STMT:
return "DropTopicStmt";
+ case QUERY_NODE_DROP_CGROUP_STMT:
+ return "DropConsumerGroupStmt";
case QUERY_NODE_ALTER_LOCAL_STMT:
return "AlterLocalStmt";
+ case QUERY_NODE_EXPLAIN_STMT:
+ return "ExplainStmt";
+ case QUERY_NODE_DESCRIBE_STMT:
+ return "DescribeStmt";
+ case QUERY_NODE_CREATE_STREAM_STMT:
+ return "CreateStreamStmt";
+ case QUERY_NODE_DROP_STREAM_STMT:
+ return "DropStreamStmt";
+ case QUERY_NODE_BALANCE_VGROUP_STMT:
+ return "BalanceVgroupStmt";
+ case QUERY_NODE_MERGE_VGROUP_STMT:
+ return "MergeVgroupStmt";
+ case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
+ return "RedistributeVgroupStmt";
+ case QUERY_NODE_SPLIT_VGROUP_STMT:
+ return "SplitVgroupStmt";
+ case QUERY_NODE_GRANT_STMT:
+ return "GrantStmt";
+ case QUERY_NODE_REVOKE_STMT:
+ return "RevokeStmt";
case QUERY_NODE_SHOW_DNODES_STMT:
return "ShowDnodesStmt";
case QUERY_NODE_SHOW_MNODES_STMT:
@@ -155,6 +193,8 @@ const char* nodesNodeName(ENodeType type) {
return "ShowSnodesStmt";
case QUERY_NODE_SHOW_BNODES_STMT:
return "ShowBnodesStmt";
+ case QUERY_NODE_SHOW_CLUSTER_STMT:
+ return "ShowClusterStmt";
case QUERY_NODE_SHOW_DATABASES_STMT:
return "ShowDatabaseStmt";
case QUERY_NODE_SHOW_FUNCTIONS_STMT:
@@ -181,8 +221,30 @@ const char* nodesNodeName(ENodeType type) {
return "ShowConsumersStmt";
case QUERY_NODE_SHOW_QUERIES_STMT:
return "ShowQueriesStmt";
+ case QUERY_NODE_SHOW_VARIABLES_STMT:
+ return "ShowVariablesStmt";
+ case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
+ return "ShowDnodeVariablesStmt";
+ case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
+ return "ShowTransactionsStmt";
+ case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
+ return "ShowSubscriptionsStmt";
case QUERY_NODE_SHOW_VNODES_STMT:
return "ShowVnodeStmt";
+ case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
+ return "ShowUserPrivilegesStmt";
+ case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
+ return "ShowCreateDatabasesStmt";
+ case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
+ return "ShowCreateTablesStmt";
+ case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
+ return "ShowCreateStablesStmt";
+ case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
+ return "ShowTableDistributedStmt";
+ case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
+ return "ShowLocalVariablesStmt";
+ case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
+ return "ShowTableTagsStmt";
case QUERY_NODE_DELETE_STMT:
return "DeleteStmt";
case QUERY_NODE_INSERT_STMT:
@@ -1364,6 +1426,23 @@ static int32_t logicJoinNodeToJson(const void* pObj, SJson* pJson) {
return code;
}
+static int32_t jsonToLogicJoinNode(const SJson* pJson, void* pObj) {
+ SJoinLogicNode* pNode = (SJoinLogicNode*)pObj;
+
+ int32_t code = jsonToLogicPlanNode(pJson, pObj);
+ if (TSDB_CODE_SUCCESS == code) {
+ tjsonGetNumberValue(pJson, jkJoinLogicPlanJoinType, pNode->joinType, code);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkJoinLogicPlanMergeCondition, &pNode->pMergeCondition);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkJoinLogicPlanOnConditions, &pNode->pOnConditions);
+ }
+
+ return code;
+}
+
static const char* jkPhysiPlanOutputDataBlockDesc = "OutputDataBlockDesc";
static const char* jkPhysiPlanConditions = "Conditions";
static const char* jkPhysiPlanChildren = "Children";
@@ -3569,6 +3648,51 @@ static int32_t jsonToTempTableNode(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkJoinTableJoinType = "JoinType";
+static const char* jkJoinTableLeft = "Left";
+static const char* jkJoinTableRight = "Right";
+static const char* jkJoinTableOnCond = "OnCond";
+
+static int32_t joinTableNodeToJson(const void* pObj, SJson* pJson) {
+ const SJoinTableNode* pNode = (const SJoinTableNode*)pObj;
+
+ int32_t code = tableNodeToJson(pObj, pJson);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkJoinTableJoinType, pNode->joinType);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkJoinTableLeft, nodeToJson, pNode->pLeft);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkJoinTableRight, nodeToJson, pNode->pRight);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkJoinTableOnCond, nodeToJson, pNode->pOnCond);
+ }
+
+ return code;
+}
+
+static int32_t jsonToJoinTableNode(const SJson* pJson, void* pObj) {
+ SJoinTableNode* pNode = (SJoinTableNode*)pObj;
+
+ int32_t code = jsonToTableNode(pJson, pObj);
+ if (TSDB_CODE_SUCCESS == code) {
+ tjsonGetNumberValue(pJson, jkJoinTableJoinType, pNode->joinType, code);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkJoinTableLeft, &pNode->pLeft);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkJoinTableRight, &pNode->pRight);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkJoinTableOnCond, &pNode->pOnCond);
+ }
+
+ return code;
+}
+
static const char* jkGroupingSetType = "GroupingSetType";
static const char* jkGroupingSetParameter = "Parameters";
@@ -3923,6 +4047,45 @@ static int32_t jsonToSlotDescNode(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkColumnDefColName = "ColName";
+static const char* jkColumnDefDataType = "DataType";
+static const char* jkColumnDefComments = "Comments";
+static const char* jkColumnDefSma = "Sma";
+
+static int32_t columnDefNodeToJson(const void* pObj, SJson* pJson) {
+ const SColumnDefNode* pNode = (const SColumnDefNode*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkColumnDefColName, pNode->colName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkColumnDefDataType, dataTypeToJson, &pNode->dataType);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkColumnDefComments, pNode->comments);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkColumnDefSma, pNode->sma);
+ }
+
+ return code;
+}
+
+static int32_t jsonToColumnDefNode(const SJson* pJson, void* pObj) {
+ SColumnDefNode* pNode = (SColumnDefNode*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkColumnDefColName, pNode->colName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonToObject(pJson, jkColumnDefDataType, jsonToDataType, &pNode->dataType);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkColumnDefComments, pNode->comments);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkColumnDefSma, &pNode->sma);
+ }
+
+ return code;
+}
+
static const char* jkDownstreamSourceAddr = "Addr";
static const char* jkDownstreamSourceTaskId = "TaskId";
static const char* jkDownstreamSourceSchedId = "SchedId";
@@ -4113,6 +4276,190 @@ static int32_t jsonToDatabaseOptions(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkTableOptionsComment = "Comment";
+static const char* jkTableOptionsMaxDelay = "MaxDelay";
+static const char* jkTableOptionsWatermark = "Watermark";
+static const char* jkTableOptionsDeleteMark = "DeleteMark";
+static const char* jkTableOptionsRollupFuncs = "RollupFuncs";
+static const char* jkTableOptionsTtl = "Ttl";
+static const char* jkTableOptionsSma = "Sma";
+
+static int32_t tableOptionsToJson(const void* pObj, SJson* pJson) {
+ const STableOptions* pNode = (const STableOptions*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkTableOptionsComment, pNode->comment);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkTableOptionsMaxDelay, pNode->pMaxDelay);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkTableOptionsWatermark, pNode->pWatermark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkTableOptionsDeleteMark, pNode->pDeleteMark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkTableOptionsRollupFuncs, pNode->pRollupFuncs);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkTableOptionsTtl, pNode->ttl);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkTableOptionsSma, pNode->pSma);
+ }
+
+ return code;
+}
+
+static int32_t jsonToTableOptions(const SJson* pJson, void* pObj) {
+ STableOptions* pNode = (STableOptions*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkTableOptionsComment, pNode->comment);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkTableOptionsMaxDelay, &pNode->pMaxDelay);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkTableOptionsWatermark, &pNode->pWatermark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkTableOptionsDeleteMark, &pNode->pDeleteMark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkTableOptionsRollupFuncs, &pNode->pRollupFuncs);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkTableOptionsTtl, &pNode->ttl);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkTableOptionsSma, &pNode->pSma);
+ }
+
+ return code;
+}
+
+static const char* jkIndexOptionsFuncs = "Funcs";
+static const char* jkIndexOptionsInterval = "Interval";
+static const char* jkIndexOptionsOffset = "Offset";
+static const char* jkIndexOptionsSliding = "Sliding";
+static const char* jkIndexOptionsStreamOptions = "StreamOptions";
+
+static int32_t indexOptionsToJson(const void* pObj, SJson* pJson) {
+ const SIndexOptions* pNode = (const SIndexOptions*)pObj;
+
+ int32_t code = nodeListToJson(pJson, jkIndexOptionsFuncs, pNode->pFuncs);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkIndexOptionsInterval, nodeToJson, pNode->pInterval);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkIndexOptionsOffset, nodeToJson, pNode->pOffset);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkIndexOptionsSliding, nodeToJson, pNode->pSliding);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkIndexOptionsStreamOptions, nodeToJson, pNode->pStreamOptions);
+ }
+
+ return code;
+}
+
+static int32_t jsonToIndexOptions(const SJson* pJson, void* pObj) {
+ SIndexOptions* pNode = (SIndexOptions*)pObj;
+
+ int32_t code = jsonToNodeList(pJson, jkIndexOptionsFuncs, &pNode->pFuncs);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkIndexOptionsInterval, &pNode->pInterval);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkIndexOptionsOffset, &pNode->pOffset);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkIndexOptionsSliding, &pNode->pSliding);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkIndexOptionsStreamOptions, &pNode->pStreamOptions);
+ }
+
+ return code;
+}
+
+static const char* jkExplainOptionsVerbose = "Verbose";
+static const char* jkExplainOptionsRatio = "Ratio";
+
+static int32_t explainOptionsToJson(const void* pObj, SJson* pJson) {
+ const SExplainOptions* pNode = (const SExplainOptions*)pObj;
+
+ int32_t code = tjsonAddBoolToObject(pJson, jkExplainOptionsVerbose, pNode->verbose);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddDoubleToObject(pJson, jkExplainOptionsRatio, pNode->ratio);
+ }
+
+ return code;
+}
+
+static int32_t jsonToExplainOptions(const SJson* pJson, void* pObj) {
+ SExplainOptions* pNode = (SExplainOptions*)pObj;
+
+ int32_t code = tjsonGetBoolValue(pJson, jkExplainOptionsVerbose, &pNode->verbose);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetDoubleValue(pJson, jkExplainOptionsRatio, &pNode->ratio);
+ }
+
+ return code;
+}
+
+static const char* jkStreamOptionsTriggerType = "TriggerType";
+static const char* jkStreamOptionsDelay = "Delay";
+static const char* jkStreamOptionsWatermark = "Watermark";
+static const char* jkStreamOptionsDeleteMark = "DeleteMark";
+static const char* jkStreamOptionsFillHistory = "FillHistory";
+static const char* jkStreamOptionsIgnoreExpired = "IgnoreExpired";
+
+static int32_t streamOptionsToJson(const void* pObj, SJson* pJson) {
+ const SStreamOptions* pNode = (const SStreamOptions*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkStreamOptionsTriggerType, pNode->triggerType);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkStreamOptionsDelay, nodeToJson, pNode->pDelay);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkStreamOptionsWatermark, nodeToJson, pNode->pWatermark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkStreamOptionsDeleteMark, nodeToJson, pNode->pDeleteMark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkStreamOptionsFillHistory, pNode->fillHistory);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkStreamOptionsIgnoreExpired, pNode->ignoreExpired);
+ }
+
+ return code;
+}
+
+static int32_t jsonToStreamOptions(const SJson* pJson, void* pObj) {
+ SStreamOptions* pNode = (SStreamOptions*)pObj;
+
+ int32_t code = tjsonGetTinyIntValue(pJson, jkStreamOptionsTriggerType, &pNode->triggerType);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkStreamOptionsDelay, &pNode->pDelay);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkStreamOptionsWatermark, &pNode->pWatermark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkStreamOptionsDeleteMark, &pNode->pDeleteMark);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkStreamOptionsFillHistory, &pNode->fillHistory);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkStreamOptionsIgnoreExpired, &pNode->ignoreExpired);
+ }
+
+ return code;
+}
+
static const char* jkWhenThenWhen = "When";
static const char* jkWhenThenThen = "Then";
@@ -4398,6 +4745,71 @@ static int32_t jsonToSelectStmt(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkVnodeModifyOpStmtSqlNodeType = "SqlNodeType";
+static const char* jkVnodeModifyOpStmtTotalRowsNum = "TotalRowsNum";
+static const char* jkVnodeModifyOpStmtTotalTbNum = "TotalTbNum";
+
+static int32_t vnodeModifyStmtToJson(const void* pObj, SJson* pJson) {
+ const SVnodeModifyOpStmt* pNode = (const SVnodeModifyOpStmt*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkVnodeModifyOpStmtSqlNodeType, pNode->sqlNodeType);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkVnodeModifyOpStmtTotalRowsNum, pNode->totalRowsNum);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkVnodeModifyOpStmtTotalTbNum, pNode->totalTbNum);
+ }
+
+ return code;
+}
+
+static int32_t jsonToVnodeModifyStmt(const SJson* pJson, void* pObj) {
+ SVnodeModifyOpStmt* pNode = (SVnodeModifyOpStmt*)pObj;
+
+ int32_t code = TSDB_CODE_SUCCESS;
+ tjsonGetNumberValue(pJson, jkVnodeModifyOpStmtSqlNodeType, pNode->sqlNodeType, code);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkVnodeModifyOpStmtTotalRowsNum, &pNode->totalRowsNum);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkVnodeModifyOpStmtTotalTbNum, &pNode->totalTbNum);
+ }
+
+ return code;
+}
+
+static const char* jkCreateDatabaseStmtDbName = "DbName";
+static const char* jkCreateDatabaseStmtIgnoreExists = "IgnoreExists";
+static const char* jkCreateDatabaseStmtOptions = "Options";
+
+static int32_t createDatabaseStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateDatabaseStmt* pNode = (const SCreateDatabaseStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateDatabaseStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkCreateDatabaseStmtIgnoreExists, pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateDatabaseStmtOptions, nodeToJson, pNode->pOptions);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateDatabaseStmt(const SJson* pJson, void* pObj) {
+ SCreateDatabaseStmt* pNode = (SCreateDatabaseStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateDatabaseStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkCreateDatabaseStmtIgnoreExists, &pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateDatabaseStmtOptions, (SNode**)&pNode->pOptions);
+ }
+
+ return code;
+}
+
static const char* jkAlterDatabaseStmtDbName = "DbName";
static const char* jkAlterDatabaseStmtOptions = "Options";
@@ -4423,6 +4835,239 @@ static int32_t jsonToAlterDatabaseStmt(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkTrimDatabaseStmtDbName = "DbName";
+static const char* jkTrimDatabaseStmtMaxSpeed = "MaxSpeed";
+
+static int32_t trimDatabaseStmtToJson(const void* pObj, SJson* pJson) {
+ const STrimDatabaseStmt* pNode = (const STrimDatabaseStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkTrimDatabaseStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkTrimDatabaseStmtMaxSpeed, pNode->maxSpeed);
+ }
+
+ return code;
+}
+
+static int32_t jsonToTrimDatabaseStmt(const SJson* pJson, void* pObj) {
+ STrimDatabaseStmt* pNode = (STrimDatabaseStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkTrimDatabaseStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkTrimDatabaseStmtMaxSpeed, &pNode->maxSpeed);
+ }
+
+ return code;
+}
+
+static const char* jkCreateTableStmtDbName = "DbName";
+static const char* jkCreateTableStmtTableName = "TableName";
+static const char* jkCreateTableStmtIgnoreExists = "IgnoreExists";
+static const char* jkCreateTableStmtCols = "Cols";
+static const char* jkCreateTableStmtTags = "Tags";
+static const char* jkCreateTableStmtOptions = "Options";
+
+static int32_t createTableStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateTableStmt* pNode = (const SCreateTableStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateTableStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkCreateTableStmtIgnoreExists, pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateTableStmtCols, pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateTableStmtTags, pNode->pTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateTableStmtOptions, nodeToJson, pNode->pOptions);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateTableStmt(const SJson* pJson, void* pObj) {
+ SCreateTableStmt* pNode = (SCreateTableStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateTableStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkCreateTableStmtIgnoreExists, &pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateTableStmtCols, &pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateTableStmtTags, &pNode->pTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateTableStmtOptions, (SNode**)&pNode->pOptions);
+ }
+
+ return code;
+}
+
+static const char* jkCreateSubTableClauseDbName = "DbName";
+static const char* jkCreateSubTableClauseTableName = "TableName";
+static const char* jkCreateSubTableClauseUseDbName = "UseDbName";
+static const char* jkCreateSubTableClauseUseTableName = "UseTableName";
+static const char* jkCreateSubTableClauseIgnoreExists = "IgnoreExists";
+static const char* jkCreateSubTableClauseSpecificTags = "SpecificTags";
+static const char* jkCreateSubTableClauseValsOfTags = "ValsOfTags";
+static const char* jkCreateSubTableClauseOptions = "Options";
+
+static int32_t createSubTableClauseToJson(const void* pObj, SJson* pJson) {
+ const SCreateSubTableClause* pNode = (const SCreateSubTableClause*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateSubTableClauseDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateSubTableClauseTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateSubTableClauseUseDbName, pNode->useDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateSubTableClauseUseTableName, pNode->useTableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkCreateSubTableClauseIgnoreExists, pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateSubTableClauseSpecificTags, pNode->pSpecificTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateSubTableClauseValsOfTags, pNode->pValsOfTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateSubTableClauseOptions, nodeToJson, pNode->pOptions);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateSubTableClause(const SJson* pJson, void* pObj) {
+ SCreateSubTableClause* pNode = (SCreateSubTableClause*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateSubTableClauseDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateSubTableClauseTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateSubTableClauseUseDbName, pNode->useDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateSubTableClauseUseTableName, pNode->useTableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkCreateSubTableClauseIgnoreExists, &pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateSubTableClauseSpecificTags, &pNode->pSpecificTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateSubTableClauseValsOfTags, &pNode->pValsOfTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateSubTableClauseOptions, (SNode**)&pNode->pOptions);
+ }
+
+ return code;
+}
+
+static const char* jkCreateMultiTablesStmtSubTables = "SubTables";
+
+static int32_t createMultiTablesStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateMultiTablesStmt* pNode = (const SCreateMultiTablesStmt*)pObj;
+ return nodeListToJson(pJson, jkCreateMultiTablesStmtSubTables, pNode->pSubTables);
+}
+
+static int32_t jsonToCreateMultiTablesStmt(const SJson* pJson, void* pObj) {
+ SCreateMultiTablesStmt* pNode = (SCreateMultiTablesStmt*)pObj;
+ return jsonToNodeList(pJson, jkCreateMultiTablesStmtSubTables, &pNode->pSubTables);
+}
+
+static const char* jkDropTableClauseDbName = "DbName";
+static const char* jkDropTableClauseTableName = "TableName";
+static const char* jkDropTableClauseIgnoreNotExists = "IgnoreNotExists";
+
+static int32_t dropTableClauseToJson(const void* pObj, SJson* pJson) {
+ const SDropTableClause* pNode = (const SDropTableClause*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDropTableClauseDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropTableClauseTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropTableClauseIgnoreNotExists, pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropTableClause(const SJson* pJson, void* pObj) {
+ SDropTableClause* pNode = (SDropTableClause*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDropTableClauseDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropTableClauseTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropTableClauseIgnoreNotExists, &pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static const char* jkDropTableStmtTables = "Tables";
+
+static int32_t dropTableStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropTableStmt* pNode = (const SDropTableStmt*)pObj;
+ return nodeListToJson(pJson, jkDropTableStmtTables, pNode->pTables);
+}
+
+static int32_t jsonToDropTableStmt(const SJson* pJson, void* pObj) {
+ SDropTableStmt* pNode = (SDropTableStmt*)pObj;
+ return jsonToNodeList(pJson, jkDropTableStmtTables, &pNode->pTables);
+}
+
+static const char* jkDropSuperTableStmtDbName = "DbName";
+static const char* jkDropSuperTableStmtTableName = "TableName";
+static const char* jkDropSuperTableStmtIgnoreNotExists = "IgnoreNotExists";
+
+static int32_t dropStableStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropSuperTableStmt* pNode = (const SDropSuperTableStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDropSuperTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropSuperTableStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropSuperTableStmtIgnoreNotExists, pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropStableStmt(const SJson* pJson, void* pObj) {
+ SDropSuperTableStmt* pNode = (SDropSuperTableStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDropSuperTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropSuperTableStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropSuperTableStmtIgnoreNotExists, &pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
static const char* jkAlterTableStmtDbName = "DbName";
static const char* jkAlterTableStmtTableName = "TableName";
static const char* jkAlterTableStmtAlterType = "AlterType";
@@ -4490,6 +5135,137 @@ static int32_t jsonToAlterTableStmt(const SJson* pJson, void* pObj) {
return code;
}
+static int32_t alterStableStmtToJson(const void* pObj, SJson* pJson) { return alterTableStmtToJson(pObj, pJson); }
+
+static int32_t jsonToAlterStableStmt(const SJson* pJson, void* pObj) { return jsonToAlterTableStmt(pJson, pObj); }
+
+static const char* jkCreateUserStmtUserName = "UserName";
+static const char* jkCreateUserStmtPassword = "Password";
+static const char* jkCreateUserStmtSysinfo = "Sysinfo";
+
+static int32_t createUserStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateUserStmt* pNode = (const SCreateUserStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateUserStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateUserStmtPassword, pNode->password);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkCreateUserStmtSysinfo, pNode->sysinfo);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateUserStmt(const SJson* pJson, void* pObj) {
+ SCreateUserStmt* pNode = (SCreateUserStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateUserStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateUserStmtPassword, pNode->password);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkCreateUserStmtSysinfo, &pNode->sysinfo);
+ }
+
+ return code;
+}
+
+static const char* jkAlterUserStmtUserName = "UserName";
+static const char* jkAlterUserStmtAlterType = "AlterType";
+static const char* jkAlterUserStmtPassword = "Password";
+static const char* jkAlterUserStmtEnable = "Enable";
+static const char* jkAlterUserStmtSysinfo = "Sysinfo";
+
+static int32_t alterUserStmtToJson(const void* pObj, SJson* pJson) {
+ const SAlterUserStmt* pNode = (const SAlterUserStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkAlterUserStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkAlterUserStmtAlterType, pNode->alterType);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkAlterUserStmtPassword, pNode->password);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkAlterUserStmtEnable, pNode->enable);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkAlterUserStmtSysinfo, pNode->sysinfo);
+ }
+
+ return code;
+}
+
+static int32_t jsonToAlterUserStmt(const SJson* pJson, void* pObj) {
+ SAlterUserStmt* pNode = (SAlterUserStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkAlterUserStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkAlterUserStmtAlterType, &pNode->alterType);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkAlterUserStmtPassword, pNode->password);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkAlterUserStmtEnable, &pNode->enable);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetTinyIntValue(pJson, jkAlterUserStmtSysinfo, &pNode->sysinfo);
+ }
+
+ return code;
+}
+
+static const char* jkDropUserStmtUserName = "UserName";
+
+static int32_t dropUserStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropUserStmt* pNode = (const SDropUserStmt*)pObj;
+ return tjsonAddStringToObject(pJson, jkDropUserStmtUserName, pNode->userName);
+}
+
+static int32_t jsonToDropUserStmt(const SJson* pJson, void* pObj) {
+ SDropUserStmt* pNode = (SDropUserStmt*)pObj;
+ return tjsonGetStringValue(pJson, jkDropUserStmtUserName, pNode->userName);
+}
+
+static const char* jkUseDatabaseStmtDbName = "DbName";
+
+static int32_t useDatabaseStmtToJson(const void* pObj, SJson* pJson) {
+ const SUseDatabaseStmt* pNode = (const SUseDatabaseStmt*)pObj;
+ return tjsonAddStringToObject(pJson, jkUseDatabaseStmtDbName, pNode->dbName);
+}
+
+static int32_t jsonToUseDatabaseStmt(const SJson* pJson, void* pObj) {
+ SUseDatabaseStmt* pNode = (SUseDatabaseStmt*)pObj;
+ return tjsonGetStringValue(pJson, jkUseDatabaseStmtDbName, pNode->dbName);
+}
+
+static const char* jkCreateDnodeStmtFqdn = "Fqdn";
+static const char* jkCreateDnodeStmtPort = "Port";
+
+static int32_t createDnodeStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateDnodeStmt* pNode = (const SCreateDnodeStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateDnodeStmtFqdn, pNode->fqdn);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkCreateDnodeStmtPort, pNode->port);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateDnodeStmt(const SJson* pJson, void* pObj) {
+ SCreateDnodeStmt* pNode = (SCreateDnodeStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateDnodeStmtFqdn, pNode->fqdn);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkCreateDnodeStmtPort, &pNode->port);
+ }
+
+ return code;
+}
+
static const char* jkAlterDnodeStmtDnodeId = "DnodeId";
static const char* jkAlterDnodeStmtConfig = "Config";
static const char* jkAlterDnodeStmtValue = "Value";
@@ -4522,6 +5298,205 @@ static int32_t jsonToAlterDnodeStmt(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkCreateIndexStmtIndexType = "IndexType";
+static const char* jkCreateIndexStmtIgnoreExists = "IgnoreExists";
+static const char* jkCreateIndexStmtIndexDbName = "IndexDbName";
+static const char* jkCreateIndexStmtIndexName = "indexName";
+static const char* jkCreateIndexStmtDbName = "DbName";
+static const char* jkCreateIndexStmtTableName = "TableName";
+static const char* jkCreateIndexStmtCols = "Cols";
+static const char* jkCreateIndexStmtOptions = "Options";
+
+static int32_t createIndexStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateIndexStmt* pNode = (const SCreateIndexStmt*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkCreateIndexStmtIndexType, pNode->indexType);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkCreateIndexStmtIgnoreExists, pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateIndexStmtIndexDbName, pNode->indexDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateIndexStmtIndexName, pNode->indexName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateIndexStmtDbName, pNode->dbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateIndexStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateIndexStmtCols, pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateIndexStmtOptions, nodeToJson, pNode->pOptions);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateIndexStmt(const SJson* pJson, void* pObj) {
+ SCreateIndexStmt* pNode = (SCreateIndexStmt*)pObj;
+
+ int32_t code = TSDB_CODE_SUCCESS;
+ tjsonGetNumberValue(pJson, jkCreateIndexStmtIndexType, pNode->indexType, code);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkCreateIndexStmtIgnoreExists, &pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateIndexStmtIndexDbName, pNode->indexDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateIndexStmtIndexName, pNode->indexName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateIndexStmtDbName, pNode->dbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateIndexStmtTableName, pNode->tableName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateIndexStmtCols, &pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateIndexStmtOptions, (SNode**)&pNode->pOptions);
+ }
+
+ return code;
+}
+
+static const char* jkDropIndexStmtIgnoreNotExists = "IgnoreNotExists";
+static const char* jkDropIndexStmtIndexDbName = "IndexDbName";
+static const char* jkDropIndexStmtIndexName = "IndexName";
+
+static int32_t dropIndexStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropIndexStmt* pNode = (const SDropIndexStmt*)pObj;
+
+ int32_t code = tjsonAddBoolToObject(pJson, jkDropIndexStmtIgnoreNotExists, pNode->ignoreNotExists);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropIndexStmtIndexDbName, pNode->indexDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropIndexStmtIndexName, pNode->indexName);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropIndexStmt(const SJson* pJson, void* pObj) {
+ SDropIndexStmt* pNode = (SDropIndexStmt*)pObj;
+
+ int32_t code = tjsonGetBoolValue(pJson, jkDropIndexStmtIgnoreNotExists, &pNode->ignoreNotExists);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropIndexStmtIndexDbName, pNode->indexDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropIndexStmtIndexName, pNode->indexName);
+ }
+
+ return code;
+}
+
+static const char* jkCreateComponentNodeStmtDnodeId = "DnodeId";
+
+static int32_t createComponentNodeStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateComponentNodeStmt* pNode = (const SCreateComponentNodeStmt*)pObj;
+ return tjsonAddIntegerToObject(pJson, jkCreateComponentNodeStmtDnodeId, pNode->dnodeId);
+}
+
+static int32_t jsonToCreateComponentNodeStmt(const SJson* pJson, void* pObj) {
+ SCreateComponentNodeStmt* pNode = (SCreateComponentNodeStmt*)pObj;
+ return tjsonGetIntValue(pJson, jkCreateComponentNodeStmtDnodeId, &pNode->dnodeId);
+}
+
+static const char* jkDropComponentNodeStmtDnodeId = "DnodeId";
+
+static int32_t dropComponentNodeStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropComponentNodeStmt* pNode = (const SDropComponentNodeStmt*)pObj;
+ return tjsonAddIntegerToObject(pJson, jkDropComponentNodeStmtDnodeId, pNode->dnodeId);
+}
+
+static int32_t jsonToDropComponentNodeStmt(const SJson* pJson, void* pObj) {
+ SDropComponentNodeStmt* pNode = (SDropComponentNodeStmt*)pObj;
+ return tjsonGetIntValue(pJson, jkDropComponentNodeStmtDnodeId, &pNode->dnodeId);
+}
+
+static int32_t createQnodeStmtToJson(const void* pObj, SJson* pJson) {
+ return createComponentNodeStmtToJson(pObj, pJson);
+}
+
+static int32_t jsonToCreateQnodeStmt(const SJson* pJson, void* pObj) {
+ return jsonToCreateComponentNodeStmt(pJson, pObj);
+}
+
+static int32_t dropQnodeStmtToJson(const void* pObj, SJson* pJson) { return dropComponentNodeStmtToJson(pObj, pJson); }
+
+static int32_t jsonToDropQnodeStmt(const SJson* pJson, void* pObj) { return jsonToDropComponentNodeStmt(pJson, pObj); }
+
+static int32_t createSnodeStmtToJson(const void* pObj, SJson* pJson) {
+ return createComponentNodeStmtToJson(pObj, pJson);
+}
+
+static int32_t jsonToCreateSnodeStmt(const SJson* pJson, void* pObj) {
+ return jsonToCreateComponentNodeStmt(pJson, pObj);
+}
+
+static int32_t dropSnodeStmtToJson(const void* pObj, SJson* pJson) { return dropComponentNodeStmtToJson(pObj, pJson); }
+
+static int32_t jsonToDropSnodeStmt(const SJson* pJson, void* pObj) { return jsonToDropComponentNodeStmt(pJson, pObj); }
+
+static int32_t createMnodeStmtToJson(const void* pObj, SJson* pJson) {
+ return createComponentNodeStmtToJson(pObj, pJson);
+}
+
+static int32_t jsonToCreateMnodeStmt(const SJson* pJson, void* pObj) {
+ return jsonToCreateComponentNodeStmt(pJson, pObj);
+}
+
+static int32_t dropMnodeStmtToJson(const void* pObj, SJson* pJson) { return dropComponentNodeStmtToJson(pObj, pJson); }
+
+static int32_t jsonToDropMnodeStmt(const SJson* pJson, void* pObj) { return jsonToDropComponentNodeStmt(pJson, pObj); }
+
+static const char* jkDropDnodeStmtDnodeId = "DnodeId";
+static const char* jkDropDnodeStmtFqdn = "Fqdn";
+static const char* jkDropDnodeStmtPort = "Port";
+static const char* jkDropDnodeStmtForce = "Force";
+
+static int32_t dropDnodeStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropDnodeStmt* pNode = (const SDropDnodeStmt*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkDropDnodeStmtDnodeId, pNode->dnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropDnodeStmtFqdn, pNode->fqdn);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkDropDnodeStmtPort, pNode->port);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropDnodeStmtForce, pNode->force);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropDnodeStmt(const SJson* pJson, void* pObj) {
+ SDropDnodeStmt* pNode = (SDropDnodeStmt*)pObj;
+
+ int32_t code = tjsonGetIntValue(pJson, jkDropDnodeStmtDnodeId, &pNode->dnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropDnodeStmtFqdn, pNode->fqdn);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkDropDnodeStmtPort, &pNode->port);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropDnodeStmtForce, &pNode->force);
+ }
+
+ return code;
+}
+
static const char* jkCreateTopicStmtTopicName = "TopicName";
static const char* jkCreateTopicStmtSubscribeDbName = "SubscribeDbName";
static const char* jkCreateTopicStmtIgnoreExists = "IgnoreExists";
@@ -4561,6 +5536,616 @@ static int32_t jsonToCreateTopicStmt(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkDropTopicStmtTopicName = "TopicName";
+static const char* jkDropTopicStmtIgnoreNotExists = "IgnoreNotExists";
+
+static int32_t dropTopicStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropTopicStmt* pNode = (const SDropTopicStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDropTopicStmtTopicName, pNode->topicName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropTopicStmtIgnoreNotExists, pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropTopicStmt(const SJson* pJson, void* pObj) {
+ SDropTopicStmt* pNode = (SDropTopicStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDropTopicStmtTopicName, pNode->topicName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropTopicStmtIgnoreNotExists, &pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static const char* jkDropCGroupStmtTopicName = "TopicName";
+static const char* jkDropCGroupStmtConsumerGroup = "ConsumerGroup";
+static const char* jkDropCGroupStmtIgnoreNotExists = "IgnoreNotExists";
+
+static int32_t dropConsumerGroupStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropCGroupStmt* pNode = (const SDropCGroupStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDropCGroupStmtTopicName, pNode->topicName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDropCGroupStmtConsumerGroup, pNode->cgroup);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropCGroupStmtIgnoreNotExists, pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropConsumerGroupStmt(const SJson* pJson, void* pObj) {
+ SDropCGroupStmt* pNode = (SDropCGroupStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDropCGroupStmtTopicName, pNode->topicName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDropCGroupStmtConsumerGroup, pNode->cgroup);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropCGroupStmtIgnoreNotExists, &pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static const char* jkAlterLocalStmtConfig = "Config";
+static const char* jkAlterLocalStmtValue = "Value";
+
+static int32_t alterLocalStmtToJson(const void* pObj, SJson* pJson) {
+ const SAlterLocalStmt* pNode = (const SAlterLocalStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkAlterLocalStmtConfig, pNode->config);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkAlterLocalStmtValue, pNode->value);
+ }
+
+ return code;
+}
+
+static int32_t jsonToAlterLocalStmt(const SJson* pJson, void* pObj) {
+ SAlterLocalStmt* pNode = (SAlterLocalStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkAlterLocalStmtConfig, pNode->config);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkAlterLocalStmtValue, pNode->value);
+ }
+
+ return code;
+}
+
+static const char* jkExplainStmtAnalyze = "Analyze";
+static const char* jkExplainStmtOptions = "Options";
+static const char* jkExplainStmtQuery = "Query";
+
+static int32_t explainStmtToJson(const void* pObj, SJson* pJson) {
+ const SExplainStmt* pNode = (const SExplainStmt*)pObj;
+
+ int32_t code = tjsonAddBoolToObject(pJson, jkExplainStmtAnalyze, pNode->analyze);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkExplainStmtOptions, nodeToJson, pNode->pOptions);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkExplainStmtQuery, nodeToJson, pNode->pQuery);
+ }
+
+ return code;
+}
+
+static int32_t jsonToExplainStmt(const SJson* pJson, void* pObj) {
+ SExplainStmt* pNode = (SExplainStmt*)pObj;
+
+ int32_t code = tjsonGetBoolValue(pJson, jkExplainStmtAnalyze, &pNode->analyze);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkExplainStmtOptions, (SNode**)&pNode->pOptions);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkExplainStmtQuery, &pNode->pQuery);
+ }
+
+ return code;
+}
+
+static const char* jkDescribeStmtDbName = "DbName";
+static const char* jkDescribeStmtTableName = "TableName";
+
+static int32_t describeStmtToJson(const void* pObj, SJson* pJson) {
+ const SDescribeStmt* pNode = (const SDescribeStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDescribeStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkDescribeStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDescribeStmt(const SJson* pJson, void* pObj) {
+ SDescribeStmt* pNode = (SDescribeStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDescribeStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkDescribeStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static const char* jkCreateStreamStmtStreamName = "StreamName";
+static const char* jkCreateStreamStmtTargetDbName = "TargetDbName";
+static const char* jkCreateStreamStmtTargetTabName = "TargetTabName";
+static const char* jkCreateStreamStmtIgnoreExists = "IgnoreExists";
+static const char* jkCreateStreamStmtOptions = "Options";
+static const char* jkCreateStreamStmtQuery = "Query";
+static const char* jkCreateStreamStmtTags = "Tags";
+static const char* jkCreateStreamStmtSubtable = "Subtable";
+
+static int32_t createStreamStmtToJson(const void* pObj, SJson* pJson) {
+ const SCreateStreamStmt* pNode = (const SCreateStreamStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkCreateStreamStmtStreamName, pNode->streamName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateStreamStmtTargetDbName, pNode->targetDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkCreateStreamStmtTargetTabName, pNode->targetTabName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkCreateStreamStmtIgnoreExists, pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateStreamStmtOptions, nodeToJson, pNode->pOptions);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateStreamStmtQuery, nodeToJson, pNode->pQuery);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkCreateStreamStmtTags, pNode->pTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkCreateStreamStmtSubtable, nodeToJson, pNode->pSubtable);
+ }
+
+ return code;
+}
+
+static int32_t jsonToCreateStreamStmt(const SJson* pJson, void* pObj) {
+ SCreateStreamStmt* pNode = (SCreateStreamStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkCreateStreamStmtStreamName, pNode->streamName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateStreamStmtTargetDbName, pNode->targetDbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkCreateStreamStmtTargetTabName, pNode->targetTabName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkCreateStreamStmtIgnoreExists, &pNode->ignoreExists);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateStreamStmtOptions, (SNode**)&pNode->pOptions);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateStreamStmtQuery, &pNode->pQuery);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkCreateStreamStmtTags, &pNode->pTags);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkCreateStreamStmtSubtable, &pNode->pSubtable);
+ }
+
+ return code;
+}
+
+static const char* jkDropStreamStmtStreamName = "StreamName";
+static const char* jkDropStreamStmtIgnoreNotExists = "IgnoreNotExists";
+
+static int32_t dropStreamStmtToJson(const void* pObj, SJson* pJson) {
+ const SDropStreamStmt* pNode = (const SDropStreamStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkDropStreamStmtStreamName, pNode->streamName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddBoolToObject(pJson, jkDropStreamStmtIgnoreNotExists, pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static int32_t jsonToDropStreamStmt(const SJson* pJson, void* pObj) {
+ SDropStreamStmt* pNode = (SDropStreamStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkDropStreamStmtStreamName, pNode->streamName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBoolValue(pJson, jkDropStreamStmtIgnoreNotExists, &pNode->ignoreNotExists);
+ }
+
+ return code;
+}
+
+static const char* jkMergeVgroupStmtVgroupId1 = "VgroupId1";
+static const char* jkMergeVgroupStmtVgroupId2 = "VgroupId2";
+
+static int32_t mergeVgroupStmtToJson(const void* pObj, SJson* pJson) {
+ const SMergeVgroupStmt* pNode = (const SMergeVgroupStmt*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkMergeVgroupStmtVgroupId1, pNode->vgId1);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkMergeVgroupStmtVgroupId2, pNode->vgId2);
+ }
+
+ return code;
+}
+
+static int32_t jsonToMergeVgroupStmt(const SJson* pJson, void* pObj) {
+ SMergeVgroupStmt* pNode = (SMergeVgroupStmt*)pObj;
+
+ int32_t code = tjsonGetIntValue(pJson, jkMergeVgroupStmtVgroupId1, &pNode->vgId1);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkMergeVgroupStmtVgroupId2, &pNode->vgId2);
+ }
+
+ return code;
+}
+
+static const char* jkRedistributeVgroupStmtVgroupId = "VgroupId";
+static const char* jkRedistributeVgroupStmtDnodeId1 = "DnodeId1";
+static const char* jkRedistributeVgroupStmtDnodeId2 = "DnodeId2";
+static const char* jkRedistributeVgroupStmtDnodeId3 = "DnodeId3";
+static const char* jkRedistributeVgroupStmtDnodes = "Dnodes";
+
+static int32_t redistributeVgroupStmtToJson(const void* pObj, SJson* pJson) {
+ const SRedistributeVgroupStmt* pNode = (const SRedistributeVgroupStmt*)pObj;
+
+ int32_t code = tjsonAddIntegerToObject(pJson, jkRedistributeVgroupStmtVgroupId, pNode->vgId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkRedistributeVgroupStmtDnodeId1, pNode->dnodeId1);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkRedistributeVgroupStmtDnodeId2, pNode->dnodeId2);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkRedistributeVgroupStmtDnodeId3, pNode->dnodeId3);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkRedistributeVgroupStmtDnodes, pNode->pDnodes);
+ }
+
+ return code;
+}
+
+static int32_t jsonToRedistributeVgroupStmt(const SJson* pJson, void* pObj) {
+ SRedistributeVgroupStmt* pNode = (SRedistributeVgroupStmt*)pObj;
+
+ int32_t code = tjsonGetIntValue(pJson, jkRedistributeVgroupStmtVgroupId, &pNode->vgId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkRedistributeVgroupStmtDnodeId1, &pNode->dnodeId1);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkRedistributeVgroupStmtDnodeId2, &pNode->dnodeId2);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetIntValue(pJson, jkRedistributeVgroupStmtDnodeId3, &pNode->dnodeId3);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkRedistributeVgroupStmtDnodes, &pNode->pDnodes);
+ }
+
+ return code;
+}
+
+static const char* jkSplitVgroupStmtVgroupId = "VgroupId";
+
+static int32_t splitVgroupStmtToJson(const void* pObj, SJson* pJson) {
+ const SSplitVgroupStmt* pNode = (const SSplitVgroupStmt*)pObj;
+ return tjsonAddIntegerToObject(pJson, jkSplitVgroupStmtVgroupId, pNode->vgId);
+}
+
+static int32_t jsonToSplitVgroupStmt(const SJson* pJson, void* pObj) {
+ SSplitVgroupStmt* pNode = (SSplitVgroupStmt*)pObj;
+ return tjsonGetIntValue(pJson, jkSplitVgroupStmtVgroupId, &pNode->vgId);
+}
+
+static const char* jkGrantStmtUserName = "UserName";
+static const char* jkGrantStmtObjName = "ObjName";
+static const char* jkGrantStmtPrivileges = "Privileges";
+
+static int32_t grantStmtToJson(const void* pObj, SJson* pJson) {
+ const SGrantStmt* pNode = (const SGrantStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkGrantStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkGrantStmtObjName, pNode->objName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkGrantStmtPrivileges, pNode->privileges);
+ }
+
+ return code;
+}
+
+static int32_t jsonToGrantStmt(const SJson* pJson, void* pObj) {
+ SGrantStmt* pNode = (SGrantStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkGrantStmtUserName, pNode->userName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkGrantStmtObjName, pNode->objName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetBigIntValue(pJson, jkGrantStmtPrivileges, &pNode->privileges);
+ }
+
+ return code;
+}
+
+static int32_t revokeStmtToJson(const void* pObj, SJson* pJson) { return grantStmtToJson(pObj, pJson); }
+
+static int32_t jsonToRevokeStmt(const SJson* pJson, void* pObj) { return jsonToGrantStmt(pJson, pObj); }
+
+static const char* jkShowStmtDbName = "DbName";
+static const char* jkShowStmtTbName = "TbName";
+static const char* jkShowStmtTableCondType = "TableCondType";
+
+static int32_t showStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowStmt* pNode = (const SShowStmt*)pObj;
+
+ int32_t code = tjsonAddObject(pJson, jkShowStmtDbName, nodeToJson, pNode->pDbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkShowStmtTbName, nodeToJson, pNode->pTbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkShowStmtTableCondType, pNode->tableCondType);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowStmt(const SJson* pJson, void* pObj) {
+ SShowStmt* pNode = (SShowStmt*)pObj;
+
+ int32_t code = jsonToNodeObject(pJson, jkShowStmtDbName, &pNode->pDbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkShowStmtTbName, &pNode->pTbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ tjsonGetNumberValue(pJson, jkShowStmtTableCondType, pNode->tableCondType, code);
+ }
+
+ return code;
+}
+
+static int32_t showDnodesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowDnodesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showMnodesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowMnodesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showQnodesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowQnodesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showClusterStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowClusterStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showDatabasesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowDatabasesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showFunctionsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowFunctionsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showIndexesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowIndexesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showStablesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowStablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showStreamsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowStreamsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showTablesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowTablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showTagsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowTagsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showUsersStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowUsersStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showVgroupsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowVgroupsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showConsumersStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowConsumersStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showVariablesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowVariablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static const char* jkShowDnodeVariablesStmtDnodeId = "DnodeId";
+static const char* jkShowDnodeVariablesStmtLikePattern = "LikePattern";
+
+static int32_t showDnodeVariablesStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowDnodeVariablesStmt* pNode = (const SShowDnodeVariablesStmt*)pObj;
+
+ int32_t code = tjsonAddObject(pJson, jkShowDnodeVariablesStmtDnodeId, nodeToJson, pNode->pDnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkShowDnodeVariablesStmtLikePattern, nodeToJson, pNode->pLikePattern);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowDnodeVariablesStmt(const SJson* pJson, void* pObj) {
+ SShowDnodeVariablesStmt* pNode = (SShowDnodeVariablesStmt*)pObj;
+
+ int32_t code = jsonToNodeObject(pJson, jkShowDnodeVariablesStmtDnodeId, &pNode->pDnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkShowDnodeVariablesStmtLikePattern, &pNode->pLikePattern);
+ }
+
+ return code;
+}
+
+static int32_t showTransactionsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowTransactionsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static int32_t showSubscriptionsStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowSubscriptionsStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static const char* jkShowVnodesStmtDnodeId = "DnodeId";
+static const char* jkShowVnodesStmtDnodeEndpoint = "DnodeEndpoint";
+
+static int32_t showVnodesStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowVnodesStmt* pNode = (const SShowVnodesStmt*)pObj;
+
+ int32_t code = tjsonAddObject(pJson, jkShowVnodesStmtDnodeId, nodeToJson, pNode->pDnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkShowVnodesStmtDnodeEndpoint, nodeToJson, pNode->pDnodeEndpoint);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowVnodesStmt(const SJson* pJson, void* pObj) {
+ SShowVnodesStmt* pNode = (SShowVnodesStmt*)pObj;
+
+ int32_t code = jsonToNodeObject(pJson, jkShowVnodesStmtDnodeId, &pNode->pDnodeId);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkShowVnodesStmtDnodeEndpoint, &pNode->pDnodeEndpoint);
+ }
+
+ return code;
+}
+
+static int32_t showUserPrivilegesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowUserPrivilegesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static const char* jkShowCreateDatabaseStmtDbName = "DbName";
+
+static int32_t showCreateDatabaseStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowCreateDatabaseStmt* pNode = (const SShowCreateDatabaseStmt*)pObj;
+ return tjsonAddStringToObject(pJson, jkShowCreateDatabaseStmtDbName, pNode->dbName);
+}
+
+static int32_t jsonToShowCreateDatabaseStmt(const SJson* pJson, void* pObj) {
+ SShowCreateDatabaseStmt* pNode = (SShowCreateDatabaseStmt*)pObj;
+ return tjsonGetStringValue(pJson, jkShowCreateDatabaseStmtDbName, pNode->dbName);
+}
+
+static const char* jkShowCreateTableStmtDbName = "DbName";
+static const char* jkShowCreateTableStmtTableName = "TableName";
+
+static int32_t showCreateTableStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowCreateTableStmt* pNode = (const SShowCreateTableStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkShowCreateTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkShowCreateTableStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowCreateTableStmt(const SJson* pJson, void* pObj) {
+ SShowCreateTableStmt* pNode = (SShowCreateTableStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkShowCreateTableStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkShowCreateTableStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static int32_t showCreateStableStmtToJson(const void* pObj, SJson* pJson) {
+ return showCreateTableStmtToJson(pObj, pJson);
+}
+
+static int32_t jsonToShowCreateStableStmt(const SJson* pJson, void* pObj) {
+ return jsonToShowCreateTableStmt(pJson, pObj);
+}
+
+static const char* jkShowTableDistributedStmtDbName = "DbName";
+static const char* jkShowTableDistributedStmtTableName = "TableName";
+
+static int32_t showTableDistributedStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowTableDistributedStmt* pNode = (const SShowTableDistributedStmt*)pObj;
+
+ int32_t code = tjsonAddStringToObject(pJson, jkShowTableDistributedStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddStringToObject(pJson, jkShowTableDistributedStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowTableDistributedStmt(const SJson* pJson, void* pObj) {
+ SShowTableDistributedStmt* pNode = (SShowTableDistributedStmt*)pObj;
+
+ int32_t code = tjsonGetStringValue(pJson, jkShowTableDistributedStmtDbName, pNode->dbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetStringValue(pJson, jkShowTableDistributedStmtTableName, pNode->tableName);
+ }
+
+ return code;
+}
+
+static int32_t showLocalVariablesStmtToJson(const void* pObj, SJson* pJson) { return showStmtToJson(pObj, pJson); }
+
+static int32_t jsonToShowLocalVariablesStmt(const SJson* pJson, void* pObj) { return jsonToShowStmt(pJson, pObj); }
+
+static const char* jkShowTableTagsStmtDbName = "DbName";
+static const char* jkShowTableTagsStmtTbName = "TbName";
+static const char* jkShowTableTagsStmtTags = "Tags";
+
+static int32_t showTableTagsStmtToJson(const void* pObj, SJson* pJson) {
+ const SShowTableTagsStmt* pNode = (const SShowTableTagsStmt*)pObj;
+
+ int32_t code = tjsonAddObject(pJson, jkShowTableTagsStmtDbName, nodeToJson, pNode->pDbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkShowTableTagsStmtTbName, nodeToJson, pNode->pTbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkShowTableTagsStmtTags, pNode->pTags);
+ }
+
+ return code;
+}
+
+static int32_t jsonToShowTableTagsStmt(const SJson* pJson, void* pObj) {
+ SShowTableTagsStmt* pNode = (SShowTableTagsStmt*)pObj;
+
+ int32_t code = jsonToNodeObject(pJson, jkShowTableTagsStmtDbName, &pNode->pDbName);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkShowTableTagsStmtTbName, &pNode->pTbName);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkShowTableTagsStmtTags, &pNode->pTags);
+ }
+
+ return code;
+}
+
static const char* jkDeleteStmtFromTable = "FromTable";
static const char* jkDeleteStmtWhere = "Where";
static const char* jkDeleteStmtCountFunc = "CountFunc";
@@ -4628,6 +6213,45 @@ static int32_t jsonToDeleteStmt(const SJson* pJson, void* pObj) {
return code;
}
+static const char* jkInsertStmtTable = "Table";
+static const char* jkInsertStmtCols = "Cols";
+static const char* jkInsertStmtQuery = "Query";
+static const char* jkInsertStmtPrecision = "Precision";
+
+static int32_t insertStmtToJson(const void* pObj, SJson* pJson) {
+ const SInsertStmt* pNode = (const SInsertStmt*)pObj;
+
+ int32_t code = tjsonAddObject(pJson, jkInsertStmtTable, nodeToJson, pNode->pTable);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = nodeListToJson(pJson, jkInsertStmtCols, pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddObject(pJson, jkInsertStmtQuery, nodeToJson, pNode->pQuery);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonAddIntegerToObject(pJson, jkInsertStmtPrecision, pNode->precision);
+ }
+
+ return code;
+}
+
+static int32_t jsonToInsertStmt(const SJson* pJson, void* pObj) {
+ SInsertStmt* pNode = (SInsertStmt*)pObj;
+
+ int32_t code = jsonToNodeObject(pJson, jkInsertStmtTable, &pNode->pTable);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeList(pJson, jkInsertStmtCols, &pNode->pCols);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = jsonToNodeObject(pJson, jkInsertStmtQuery, &pNode->pQuery);
+ }
+ if (TSDB_CODE_SUCCESS == code) {
+ code = tjsonGetUTinyIntValue(pJson, jkInsertStmtPrecision, &pNode->precision);
+ }
+
+ return code;
+}
+
static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
switch (nodeType(pObj)) {
case QUERY_NODE_COLUMN:
@@ -4645,7 +6269,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
case QUERY_NODE_TEMP_TABLE:
return tempTableNodeToJson(pObj, pJson);
case QUERY_NODE_JOIN_TABLE:
- break;
+ return joinTableNodeToJson(pObj, pJson);
case QUERY_NODE_GROUPING_SET:
return groupingSetNodeToJson(pObj, pJson);
case QUERY_NODE_ORDER_BY_EXPR:
@@ -4671,11 +6295,19 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
case QUERY_NODE_SLOT_DESC:
return slotDescNodeToJson(pObj, pJson);
case QUERY_NODE_COLUMN_DEF:
- break;
+ return columnDefNodeToJson(pObj, pJson);
case QUERY_NODE_DOWNSTREAM_SOURCE:
return downstreamSourceNodeToJson(pObj, pJson);
case QUERY_NODE_DATABASE_OPTIONS:
return databaseOptionsToJson(pObj, pJson);
+ case QUERY_NODE_TABLE_OPTIONS:
+ return tableOptionsToJson(pObj, pJson);
+ case QUERY_NODE_INDEX_OPTIONS:
+ return indexOptionsToJson(pObj, pJson);
+ case QUERY_NODE_EXPLAIN_OPTIONS:
+ return explainOptionsToJson(pObj, pJson);
+ case QUERY_NODE_STREAM_OPTIONS:
+ return streamOptionsToJson(pObj, pJson);
case QUERY_NODE_LEFT_VALUE:
return TSDB_CODE_SUCCESS; // SLeftValueNode has no fields to serialize.
case QUERY_NODE_WHEN_THEN:
@@ -4688,27 +6320,144 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
return setOperatorToJson(pObj, pJson);
case QUERY_NODE_SELECT_STMT:
return selectStmtToJson(pObj, pJson);
- case QUERY_NODE_VNODE_MODIF_STMT:
+ case QUERY_NODE_VNODE_MODIFY_STMT:
+ return vnodeModifyStmtToJson(pObj, pJson);
case QUERY_NODE_CREATE_DATABASE_STMT:
- break;
+ return createDatabaseStmtToJson(pObj, pJson);
case QUERY_NODE_ALTER_DATABASE_STMT:
return alterDatabaseStmtToJson(pObj, pJson);
+ case QUERY_NODE_TRIM_DATABASE_STMT:
+ return trimDatabaseStmtToJson(pObj, pJson);
case QUERY_NODE_CREATE_TABLE_STMT:
- break;
+ return createTableStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
+ return createSubTableClauseToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ return createMultiTablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_TABLE_CLAUSE:
+ return dropTableClauseToJson(pObj, pJson);
+ case QUERY_NODE_DROP_TABLE_STMT:
+ return dropTableStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_SUPER_TABLE_STMT:
+ return dropStableStmtToJson(pObj, pJson);
case QUERY_NODE_ALTER_TABLE_STMT:
return alterTableStmtToJson(pObj, pJson);
+ case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
+ return alterStableStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_USER_STMT:
+ return createUserStmtToJson(pObj, pJson);
+ case QUERY_NODE_ALTER_USER_STMT:
+ return alterUserStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_USER_STMT:
+ return dropUserStmtToJson(pObj, pJson);
case QUERY_NODE_USE_DATABASE_STMT:
- break;
+ return useDatabaseStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_DNODE_STMT:
+ return createDnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_DNODE_STMT:
+ return dropDnodeStmtToJson(pObj, pJson);
case QUERY_NODE_ALTER_DNODE_STMT:
return alterDnodeStmtToJson(pObj, pJson);
- case QUERY_NODE_SHOW_DATABASES_STMT:
- case QUERY_NODE_SHOW_TABLES_STMT:
- case QUERY_NODE_SHOW_TAGS_STMT:
- break;
+ case QUERY_NODE_CREATE_INDEX_STMT:
+ return createIndexStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_INDEX_STMT:
+ return dropIndexStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_QNODE_STMT:
+ return createQnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_QNODE_STMT:
+ return dropQnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_SNODE_STMT:
+ return createSnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_SNODE_STMT:
+ return dropSnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_MNODE_STMT:
+ return createMnodeStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_MNODE_STMT:
+ return dropMnodeStmtToJson(pObj, pJson);
case QUERY_NODE_CREATE_TOPIC_STMT:
return createTopicStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_TOPIC_STMT:
+ return dropTopicStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_CGROUP_STMT:
+ return dropConsumerGroupStmtToJson(pObj, pJson);
+ case QUERY_NODE_ALTER_LOCAL_STMT:
+ return alterLocalStmtToJson(pObj, pJson);
+ case QUERY_NODE_EXPLAIN_STMT:
+ return explainStmtToJson(pObj, pJson);
+ case QUERY_NODE_DESCRIBE_STMT:
+ return describeStmtToJson(pObj, pJson);
+ case QUERY_NODE_CREATE_STREAM_STMT:
+ return createStreamStmtToJson(pObj, pJson);
+ case QUERY_NODE_DROP_STREAM_STMT:
+ return dropStreamStmtToJson(pObj, pJson);
+ case QUERY_NODE_BALANCE_VGROUP_STMT:
+ return TSDB_CODE_SUCCESS; // SBalanceVgroupStmt has no fields to serialize.
+ case QUERY_NODE_MERGE_VGROUP_STMT:
+ return mergeVgroupStmtToJson(pObj, pJson);
+ case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
+ return redistributeVgroupStmtToJson(pObj, pJson);
+ case QUERY_NODE_SPLIT_VGROUP_STMT:
+ return splitVgroupStmtToJson(pObj, pJson);
+ case QUERY_NODE_GRANT_STMT:
+ return grantStmtToJson(pObj, pJson);
+ case QUERY_NODE_REVOKE_STMT:
+ return revokeStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_DNODES_STMT:
+ return showDnodesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_MNODES_STMT:
+ return showMnodesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_QNODES_STMT:
+ return showQnodesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_CLUSTER_STMT:
+ return showClusterStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_DATABASES_STMT:
+ return showDatabasesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_FUNCTIONS_STMT:
+ return showFunctionsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_INDEXES_STMT:
+ return showIndexesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_STABLES_STMT:
+ return showStablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_STREAMS_STMT:
+ return showStreamsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_TABLES_STMT:
+ return showTablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_TAGS_STMT:
+ return showTagsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_USERS_STMT:
+ return showUsersStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_VGROUPS_STMT:
+ return showVgroupsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_CONSUMERS_STMT:
+ return showConsumersStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_VARIABLES_STMT:
+ return showVariablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
+ return showDnodeVariablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
+ return showTransactionsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
+ return showSubscriptionsStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_VNODES_STMT:
+ return showVnodesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
+ return showUserPrivilegesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
+ return showCreateDatabaseStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
+ return showCreateTableStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
+ return showCreateStableStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
+ return showTableDistributedStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
+ return showLocalVariablesStmtToJson(pObj, pJson);
+ case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
+ return showTableTagsStmtToJson(pObj, pJson);
case QUERY_NODE_DELETE_STMT:
return deleteStmtToJson(pObj, pJson);
+ case QUERY_NODE_INSERT_STMT:
+ return insertStmtToJson(pObj, pJson);
case QUERY_NODE_LOGIC_PLAN_SCAN:
return logicScanNodeToJson(pObj, pJson);
case QUERY_NODE_LOGIC_PLAN_JOIN:
@@ -4827,6 +6576,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
return jsonToRealTableNode(pJson, pObj);
case QUERY_NODE_TEMP_TABLE:
return jsonToTempTableNode(pJson, pObj);
+ case QUERY_NODE_JOIN_TABLE:
+ return jsonToJoinTableNode(pJson, pObj);
case QUERY_NODE_GROUPING_SET:
return jsonToGroupingSetNode(pJson, pObj);
case QUERY_NODE_ORDER_BY_EXPR:
@@ -4849,10 +6600,20 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
return jsonToDataBlockDescNode(pJson, pObj);
case QUERY_NODE_SLOT_DESC:
return jsonToSlotDescNode(pJson, pObj);
+ case QUERY_NODE_COLUMN_DEF:
+ return jsonToColumnDefNode(pJson, pObj);
case QUERY_NODE_DOWNSTREAM_SOURCE:
return jsonToDownstreamSourceNode(pJson, pObj);
case QUERY_NODE_DATABASE_OPTIONS:
return jsonToDatabaseOptions(pJson, pObj);
+ case QUERY_NODE_TABLE_OPTIONS:
+ return jsonToTableOptions(pJson, pObj);
+ case QUERY_NODE_INDEX_OPTIONS:
+ return jsonToIndexOptions(pJson, pObj);
+ case QUERY_NODE_EXPLAIN_OPTIONS:
+ return jsonToExplainOptions(pJson, pObj);
+ case QUERY_NODE_STREAM_OPTIONS:
+ return jsonToStreamOptions(pJson, pObj);
case QUERY_NODE_LEFT_VALUE:
return TSDB_CODE_SUCCESS; // SLeftValueNode has no fields to deserialize.
case QUERY_NODE_WHEN_THEN:
@@ -4865,18 +6626,148 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
return jsonToSetOperator(pJson, pObj);
case QUERY_NODE_SELECT_STMT:
return jsonToSelectStmt(pJson, pObj);
+ case QUERY_NODE_VNODE_MODIFY_STMT:
+ return jsonToVnodeModifyStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_DATABASE_STMT:
+ return jsonToCreateDatabaseStmt(pJson, pObj);
case QUERY_NODE_ALTER_DATABASE_STMT:
return jsonToAlterDatabaseStmt(pJson, pObj);
+ case QUERY_NODE_TRIM_DATABASE_STMT:
+ return jsonToTrimDatabaseStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_TABLE_STMT:
+ return jsonToCreateTableStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
+ return jsonToCreateSubTableClause(pJson, pObj);
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ return jsonToCreateMultiTablesStmt(pJson, pObj);
+ case QUERY_NODE_DROP_TABLE_CLAUSE:
+ return jsonToDropTableClause(pJson, pObj);
+ case QUERY_NODE_DROP_TABLE_STMT:
+ return jsonToDropTableStmt(pJson, pObj);
+ case QUERY_NODE_DROP_SUPER_TABLE_STMT:
+ return jsonToDropStableStmt(pJson, pObj);
case QUERY_NODE_ALTER_TABLE_STMT:
return jsonToAlterTableStmt(pJson, pObj);
+ case QUERY_NODE_ALTER_SUPER_TABLE_STMT:
+ return jsonToAlterStableStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_USER_STMT:
+ return jsonToCreateUserStmt(pJson, pObj);
+ case QUERY_NODE_ALTER_USER_STMT:
+ return jsonToAlterUserStmt(pJson, pObj);
+ case QUERY_NODE_DROP_USER_STMT:
+ return jsonToDropUserStmt(pJson, pObj);
+ case QUERY_NODE_USE_DATABASE_STMT:
+ return jsonToUseDatabaseStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_DNODE_STMT:
+ return jsonToCreateDnodeStmt(pJson, pObj);
+ case QUERY_NODE_DROP_DNODE_STMT:
+ return jsonToDropDnodeStmt(pJson, pObj);
case QUERY_NODE_ALTER_DNODE_STMT:
return jsonToAlterDnodeStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_INDEX_STMT:
+ return jsonToCreateIndexStmt(pJson, pObj);
+ case QUERY_NODE_DROP_INDEX_STMT:
+ return jsonToDropIndexStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_QNODE_STMT:
+ return jsonToCreateQnodeStmt(pJson, pObj);
+ case QUERY_NODE_DROP_QNODE_STMT:
+ return jsonToDropQnodeStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_SNODE_STMT:
+ return jsonToCreateSnodeStmt(pJson, pObj);
+ case QUERY_NODE_DROP_SNODE_STMT:
+ return jsonToDropSnodeStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_MNODE_STMT:
+ return jsonToCreateMnodeStmt(pJson, pObj);
+ case QUERY_NODE_DROP_MNODE_STMT:
+ return jsonToDropMnodeStmt(pJson, pObj);
case QUERY_NODE_CREATE_TOPIC_STMT:
return jsonToCreateTopicStmt(pJson, pObj);
+ case QUERY_NODE_DROP_TOPIC_STMT:
+ return jsonToDropTopicStmt(pJson, pObj);
+ case QUERY_NODE_DROP_CGROUP_STMT:
+ return jsonToDropConsumerGroupStmt(pJson, pObj);
+ case QUERY_NODE_ALTER_LOCAL_STMT:
+ return jsonToAlterLocalStmt(pJson, pObj);
+ case QUERY_NODE_EXPLAIN_STMT:
+ return jsonToExplainStmt(pJson, pObj);
+ case QUERY_NODE_DESCRIBE_STMT:
+ return jsonToDescribeStmt(pJson, pObj);
+ case QUERY_NODE_CREATE_STREAM_STMT:
+ return jsonToCreateStreamStmt(pJson, pObj);
+ case QUERY_NODE_DROP_STREAM_STMT:
+ return jsonToDropStreamStmt(pJson, pObj);
+ case QUERY_NODE_BALANCE_VGROUP_STMT:
+ return TSDB_CODE_SUCCESS; // SBalanceVgroupStmt has no fields to deserialize.
+ case QUERY_NODE_MERGE_VGROUP_STMT:
+ return jsonToMergeVgroupStmt(pJson, pObj);
+ case QUERY_NODE_REDISTRIBUTE_VGROUP_STMT:
+ return jsonToRedistributeVgroupStmt(pJson, pObj);
+ case QUERY_NODE_SPLIT_VGROUP_STMT:
+ return jsonToSplitVgroupStmt(pJson, pObj);
+ case QUERY_NODE_GRANT_STMT:
+ return jsonToGrantStmt(pJson, pObj);
+ case QUERY_NODE_REVOKE_STMT:
+ return jsonToRevokeStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_DNODES_STMT:
+ return jsonToShowDnodesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_MNODES_STMT:
+ return jsonToShowMnodesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_QNODES_STMT:
+ return jsonToShowQnodesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_CLUSTER_STMT:
+ return jsonToShowClusterStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_DATABASES_STMT:
+ return jsonToShowDatabasesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_FUNCTIONS_STMT:
+ return jsonToShowFunctionsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_INDEXES_STMT:
+ return jsonToShowIndexesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_STABLES_STMT:
+ return jsonToShowStablesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_STREAMS_STMT:
+ return jsonToShowStreamsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_TABLES_STMT:
+ return jsonToShowTablesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_TAGS_STMT:
+ return jsonToShowTagsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_USERS_STMT:
+ return jsonToShowUsersStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_VGROUPS_STMT:
+ return jsonToShowVgroupsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_CONSUMERS_STMT:
+ return jsonToShowConsumersStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_VARIABLES_STMT:
+ return jsonToShowVariablesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_DNODE_VARIABLES_STMT:
+ return jsonToShowDnodeVariablesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_TRANSACTIONS_STMT:
+ return jsonToShowTransactionsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT:
+ return jsonToShowSubscriptionsStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_VNODES_STMT:
+ return jsonToShowVnodesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT:
+ return jsonToShowUserPrivilegesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
+ return jsonToShowCreateDatabaseStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_CREATE_TABLE_STMT:
+ return jsonToShowCreateTableStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_CREATE_STABLE_STMT:
+ return jsonToShowCreateStableStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_TABLE_DISTRIBUTED_STMT:
+ return jsonToShowTableDistributedStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT:
+ return jsonToShowLocalVariablesStmt(pJson, pObj);
+ case QUERY_NODE_SHOW_TABLE_TAGS_STMT:
+ return jsonToShowTableTagsStmt(pJson, pObj);
case QUERY_NODE_DELETE_STMT:
return jsonToDeleteStmt(pJson, pObj);
+ case QUERY_NODE_INSERT_STMT:
+ return jsonToInsertStmt(pJson, pObj);
case QUERY_NODE_LOGIC_PLAN_SCAN:
return jsonToLogicScanNode(pJson, pObj);
+ case QUERY_NODE_LOGIC_PLAN_JOIN:
+ return jsonToLogicJoinNode(pJson, pObj);
case QUERY_NODE_LOGIC_PLAN_AGG:
return jsonToLogicAggNode(pJson, pObj);
case QUERY_NODE_LOGIC_PLAN_PROJECT:
diff --git a/source/libs/nodes/src/nodesUtilFuncs.c b/source/libs/nodes/src/nodesUtilFuncs.c
index 7980c58dcf..38203e61b0 100644
--- a/source/libs/nodes/src/nodesUtilFuncs.c
+++ b/source/libs/nodes/src/nodesUtilFuncs.c
@@ -305,8 +305,8 @@ SNode* nodesMakeNode(ENodeType type) {
return makeNode(type, sizeof(SSetOperator));
case QUERY_NODE_SELECT_STMT:
return makeNode(type, sizeof(SSelectStmt));
- case QUERY_NODE_VNODE_MODIF_STMT:
- return makeNode(type, sizeof(SVnodeModifOpStmt));
+ case QUERY_NODE_VNODE_MODIFY_STMT:
+ return makeNode(type, sizeof(SVnodeModifyOpStmt));
case QUERY_NODE_CREATE_DATABASE_STMT:
return makeNode(type, sizeof(SCreateDatabaseStmt));
case QUERY_NODE_DROP_DATABASE_STMT:
@@ -321,8 +321,8 @@ SNode* nodesMakeNode(ENodeType type) {
return makeNode(type, sizeof(SCreateTableStmt));
case QUERY_NODE_CREATE_SUBTABLE_CLAUSE:
return makeNode(type, sizeof(SCreateSubTableClause));
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
- return makeNode(type, sizeof(SCreateMultiTableStmt));
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ return makeNode(type, sizeof(SCreateMultiTablesStmt));
case QUERY_NODE_DROP_TABLE_CLAUSE:
return makeNode(type, sizeof(SDropTableClause));
case QUERY_NODE_DROP_TABLE_STMT:
@@ -818,8 +818,8 @@ void nodesDestroyNode(SNode* pNode) {
nodesDestroyNode((SNode*)pStmt->pSlimit);
break;
}
- case QUERY_NODE_VNODE_MODIF_STMT: {
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)pNode;
+ case QUERY_NODE_VNODE_MODIFY_STMT: {
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pNode;
destroyVgDataBlockArray(pStmt->pDataBlocks);
taosMemoryFreeClear(pStmt->pTableMeta);
taosHashCleanup(pStmt->pVgroupsHashObj);
@@ -861,8 +861,8 @@ void nodesDestroyNode(SNode* pNode) {
nodesDestroyNode((SNode*)pStmt->pOptions);
break;
}
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
- nodesDestroyList(((SCreateMultiTableStmt*)pNode)->pSubTables);
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ nodesDestroyList(((SCreateMultiTablesStmt*)pNode)->pSubTables);
break;
case QUERY_NODE_DROP_TABLE_CLAUSE: // no pointer field
break;
diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y
index 343dd855e6..cd1260584e 100644
--- a/source/libs/parser/inc/sql.y
+++ b/source/libs/parser/inc/sql.y
@@ -194,7 +194,7 @@ db_options(A) ::= db_options(B) PAGESIZE NK_INTEGER(C).
db_options(A) ::= db_options(B) TSDB_PAGESIZE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_TSDB_PAGESIZE, &C); }
db_options(A) ::= db_options(B) PRECISION NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_PRECISION, &C); }
db_options(A) ::= db_options(B) REPLICA NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_REPLICA, &C); }
-db_options(A) ::= db_options(B) STRICT NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
+//db_options(A) ::= db_options(B) STRICT NK_STRING(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_STRICT, &C); }
db_options(A) ::= db_options(B) VGROUPS NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_VGROUPS, &C); }
db_options(A) ::= db_options(B) SINGLE_STABLE NK_INTEGER(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_SINGLE_STABLE, &C); }
db_options(A) ::= db_options(B) RETENTIONS retention_list(C). { A = setDatabaseOption(pCxt, B, DB_OPTION_RETENTIONS, C); }
@@ -473,7 +473,15 @@ index_options(A) ::= FUNCTION NK_LP func_list(B) NK_RP INTERVAL
func_list(A) ::= func(B). { A = createNodeList(pCxt, B); }
func_list(A) ::= func_list(B) NK_COMMA func(C). { A = addNodeToList(pCxt, B, C); }
-func(A) ::= function_name(B) NK_LP expression_list(C) NK_RP. { A = createFunctionNode(pCxt, &B, C); }
+func(A) ::= sma_func_name(B) NK_LP expression_list(C) NK_RP. { A = createFunctionNode(pCxt, &B, C); }
+
+%type sma_func_name { SToken }
+%destructor sma_func_name { }
+sma_func_name(A) ::= function_name(B). { A = B; }
+sma_func_name(A) ::= COUNT(B). { A = B; }
+sma_func_name(A) ::= FIRST(B). { A = B; }
+sma_func_name(A) ::= LAST(B). { A = B; }
+sma_func_name(A) ::= LAST_ROW(B). { A = B; }
sma_stream_opt(A) ::= . { A = createStreamOptions(pCxt); }
sma_stream_opt(A) ::= sma_stream_opt(B) WATERMARK duration_literal(C). { ((SStreamOptions*)B)->pWatermark = releaseRawExprNode(pCxt, C); A = B; }
@@ -733,6 +741,7 @@ pseudo_column(A) ::= WSTART(B).
pseudo_column(A) ::= WEND(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= WDURATION(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= IROWTS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
+pseudo_column(A) ::= ISFILLED(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
pseudo_column(A) ::= QTAGS(B). { A = createRawExprNode(pCxt, &B, createFunctionNode(pCxt, &B, NULL)); }
function_expression(A) ::= function_name(B) NK_LP expression_list(C) NK_RP(D). { A = createRawExprNodeExt(pCxt, &B, &D, createFunctionNode(pCxt, &B, C)); }
@@ -1069,5 +1078,5 @@ null_ordering_opt(A) ::= NULLS FIRST.
null_ordering_opt(A) ::= NULLS LAST. { A = NULL_ORDER_LAST; }
%fallback ABORT AFTER ATTACH BEFORE BEGIN BITAND BITNOT BITOR BLOCKS CHANGE COMMA COMPACT CONCAT CONFLICT COPY DEFERRED DELIMITERS DETACH DIVIDE DOT EACH END FAIL
- FILE FOR GLOB ID IMMEDIATE IMPORT INITIALLY INSTEAD ISNULL KEY MODULES NK_BITNOT NK_SEMI NOTNULL OF PLUS PRIVILEGE RAISE REPLACE RESTRICT ROW SEMI STAR STATEMENT STRING
- TIMES UPDATE VALUES VARIABLE VIEW WAL.
+ FILE FOR GLOB ID IMMEDIATE IMPORT INITIALLY INSTEAD ISNULL KEY MODULES NK_BITNOT NK_SEMI NOTNULL OF PLUS PRIVILEGE RAISE REPLACE RESTRICT ROW SEMI STAR STATEMENT
+ STRICT STRING TIMES UPDATE VALUES VARIABLE VIEW WAL.
diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c
index 446f758ed7..6e6fdd64b2 100644
--- a/source/libs/parser/src/parAstCreater.c
+++ b/source/libs/parser/src/parAstCreater.c
@@ -1208,7 +1208,7 @@ SNode* createCreateSubTableClause(SAstCreateContext* pCxt, bool ignoreExists, SN
SNode* createCreateMultiTableStmt(SAstCreateContext* pCxt, SNodeList* pSubTables) {
CHECK_PARSER_STATUS(pCxt);
- SCreateMultiTableStmt* pStmt = (SCreateMultiTableStmt*)nodesMakeNode(QUERY_NODE_CREATE_MULTI_TABLE_STMT);
+ SCreateMultiTablesStmt* pStmt = (SCreateMultiTablesStmt*)nodesMakeNode(QUERY_NODE_CREATE_MULTI_TABLES_STMT);
CHECK_OUT_OF_MEM(pStmt);
pStmt->pSubTables = pSubTables;
return (SNode*)pStmt;
@@ -1430,7 +1430,7 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST
}
SCreateUserStmt* pStmt = (SCreateUserStmt*)nodesMakeNode(QUERY_NODE_CREATE_USER_STMT);
CHECK_OUT_OF_MEM(pStmt);
- COPY_STRING_FORM_ID_TOKEN(pStmt->useName, pUserName);
+ COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName);
strcpy(pStmt->password, password);
pStmt->sysinfo = sysinfo;
return (SNode*)pStmt;
@@ -1443,7 +1443,7 @@ SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t al
}
SAlterUserStmt* pStmt = (SAlterUserStmt*)nodesMakeNode(QUERY_NODE_ALTER_USER_STMT);
CHECK_OUT_OF_MEM(pStmt);
- COPY_STRING_FORM_ID_TOKEN(pStmt->useName, pUserName);
+ COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName);
pStmt->alterType = alterType;
switch (alterType) {
case TSDB_ALTER_USER_PASSWD: {
@@ -1474,7 +1474,7 @@ SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName) {
}
SDropUserStmt* pStmt = (SDropUserStmt*)nodesMakeNode(QUERY_NODE_DROP_USER_STMT);
CHECK_OUT_OF_MEM(pStmt);
- COPY_STRING_FORM_ID_TOKEN(pStmt->useName, pUserName);
+ COPY_STRING_FORM_ID_TOKEN(pStmt->userName, pUserName);
return (SNode*)pStmt;
}
diff --git a/source/libs/parser/src/parAstParser.c b/source/libs/parser/src/parAstParser.c
index f90a42add3..b57690f9b1 100644
--- a/source/libs/parser/src/parAstParser.c
+++ b/source/libs/parser/src/parAstParser.c
@@ -245,10 +245,14 @@ static int32_t collectMetaKeyFromCreateTable(SCollectMetaKeyCxt* pCxt, SCreateTa
if (TSDB_CODE_SUCCESS == code && NULL == pStmt->pTags) {
code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache);
}
+ if (TSDB_CODE_SUCCESS == code) {
+ code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, AUTH_TYPE_WRITE,
+ pCxt->pMetaCache);
+ }
return code;
}
-static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCreateMultiTableStmt* pStmt) {
+static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCreateMultiTablesStmt* pStmt) {
int32_t code = TSDB_CODE_SUCCESS;
SNode* pNode = NULL;
FOREACH(pNode, pStmt->pSubTables) {
@@ -261,6 +265,10 @@ static int32_t collectMetaKeyFromCreateMultiTable(SCollectMetaKeyCxt* pCxt, SCre
if (TSDB_CODE_SUCCESS == code) {
code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pClause->dbName, pClause->tableName, pCxt->pMetaCache);
}
+ if (TSDB_CODE_SUCCESS == code) {
+ code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pClause->dbName, AUTH_TYPE_WRITE,
+ pCxt->pMetaCache);
+ }
if (TSDB_CODE_SUCCESS != code) {
break;
}
@@ -351,38 +359,59 @@ static int32_t collectMetaKeyFromCreateStream(SCollectMetaKeyCxt* pCxt, SCreateS
}
static int32_t collectMetaKeyFromShowDnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_DNODES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowMnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MNODES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowModules(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_MODULES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowQnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_QNODES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowSnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SNODES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_SNODES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowBnodes(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_BNODES,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_BNODES,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowCluster(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
- return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER,
- pCxt->pMetaCache);
+ if (pCxt->pParseCxt->enableSysInfo) {
+ return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_CLUSTER,
+ pCxt->pMetaCache);
+ }
+ return TSDB_CODE_SUCCESS;
}
static int32_t collectMetaKeyFromShowDatabases(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) {
@@ -584,8 +613,8 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) {
return collectMetaKeyFromFlushDatabase(pCxt, (SFlushDatabaseStmt*)pStmt);
case QUERY_NODE_CREATE_TABLE_STMT:
return collectMetaKeyFromCreateTable(pCxt, (SCreateTableStmt*)pStmt);
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
- return collectMetaKeyFromCreateMultiTable(pCxt, (SCreateMultiTableStmt*)pStmt);
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ return collectMetaKeyFromCreateMultiTable(pCxt, (SCreateMultiTablesStmt*)pStmt);
case QUERY_NODE_DROP_TABLE_STMT:
return collectMetaKeyFromDropTable(pCxt, (SDropTableStmt*)pStmt);
case QUERY_NODE_ALTER_TABLE_STMT:
diff --git a/source/libs/parser/src/parAuthenticator.c b/source/libs/parser/src/parAuthenticator.c
index f7ab4fccbe..fe82ce8706 100644
--- a/source/libs/parser/src/parAuthenticator.c
+++ b/source/libs/parser/src/parAuthenticator.c
@@ -78,7 +78,7 @@ static int32_t authSetOperator(SAuthCxt* pCxt, SSetOperator* pSetOper) {
}
static int32_t authDropUser(SAuthCxt* pCxt, SDropUserStmt* pStmt) {
- if (!pCxt->pParseCxt->isSuperUser || 0 == strcmp(pStmt->useName, TSDB_DEFAULT_USER)) {
+ if (!pCxt->pParseCxt->isSuperUser || 0 == strcmp(pStmt->userName, TSDB_DEFAULT_USER)) {
return TSDB_CODE_PAR_PERMISSION_DENIED;
}
return TSDB_CODE_SUCCESS;
@@ -104,6 +104,22 @@ static int32_t authShowCreateTable(SAuthCxt* pCxt, SShowCreateTableStmt* pStmt)
return checkAuth(pCxt, pStmt->dbName, AUTH_TYPE_READ);
}
+static int32_t authCreateTable(SAuthCxt* pCxt, SCreateTableStmt* pStmt) {
+ return checkAuth(pCxt, pStmt->dbName, AUTH_TYPE_WRITE);
+}
+
+static int32_t authCreateMultiTable(SAuthCxt* pCxt, SCreateMultiTablesStmt* pStmt) {
+ int32_t code = TSDB_CODE_SUCCESS;
+ SNode* pNode = NULL;
+ FOREACH(pNode, pStmt->pSubTables) {
+ code = checkAuth(pCxt, ((SCreateSubTableClause*)pNode)->dbName, AUTH_TYPE_WRITE);
+ if (TSDB_CODE_SUCCESS != code) {
+ break;
+ }
+ }
+ return code;
+}
+
static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
switch (nodeType(pStmt)) {
case QUERY_NODE_SET_OPERATOR:
@@ -116,6 +132,10 @@ static int32_t authQuery(SAuthCxt* pCxt, SNode* pStmt) {
return authDelete(pCxt, (SDeleteStmt*)pStmt);
case QUERY_NODE_INSERT_STMT:
return authInsert(pCxt, (SInsertStmt*)pStmt);
+ case QUERY_NODE_CREATE_TABLE_STMT:
+ return authCreateTable(pCxt, (SCreateTableStmt*)pStmt);
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
+ return authCreateMultiTable(pCxt, (SCreateMultiTablesStmt*)pStmt);
case QUERY_NODE_SHOW_DNODES_STMT:
case QUERY_NODE_SHOW_MNODES_STMT:
case QUERY_NODE_SHOW_MODULES_STMT:
diff --git a/source/libs/parser/src/parInsertSql.c b/source/libs/parser/src/parInsertSql.c
index 36420599b3..f7415b9ba8 100644
--- a/source/libs/parser/src/parInsertSql.c
+++ b/source/libs/parser/src/parInsertSql.c
@@ -155,7 +155,7 @@ static int32_t ignoreUsingClause(SInsertParseContext* pCxt, const char** pSql) {
return code;
}
-static int32_t parseDuplicateUsingClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, bool* pDuplicate) {
+static int32_t parseDuplicateUsingClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, bool* pDuplicate) {
*pDuplicate = false;
char tbFName[TSDB_TABLE_FNAME_LEN];
@@ -518,7 +518,7 @@ static int32_t parseTagToken(const char** end, SToken* pToken, SSchema* pSchema,
// input pStmt->pSql: [(tag1_name, ...)] TAGS (tag1_value, ...) ...
// output pStmt->pSql: TAGS (tag1_value, ...) ...
-static int32_t parseBoundTagsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseBoundTagsClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SSchema* pTagsSchema = getTableTagSchema(pStmt->pTableMeta);
insSetBoundColumnInfo(&pCxt->tags, pTagsSchema, getNumOfTags(pStmt->pTableMeta));
@@ -533,7 +533,7 @@ static int32_t parseBoundTagsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt
return parseBoundColumns(pCxt, &pStmt->pSql, true, &pCxt->tags, pTagsSchema);
}
-static int32_t parseTagValue(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SSchema* pTagSchema, SToken* pToken,
+static int32_t parseTagValue(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SSchema* pTagSchema, SToken* pToken,
SArray* pTagName, SArray* pTagVals, STag** pTag) {
if (!isNullValue(pTagSchema->type, pToken)) {
taosArrayPush(pTagName, pTagSchema->name);
@@ -561,7 +561,7 @@ static int32_t parseTagValue(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt
return code;
}
-static void buildCreateTbReq(SVnodeModifOpStmt* pStmt, STag* pTag, SArray* pTagName) {
+static void buildCreateTbReq(SVnodeModifyOpStmt* pStmt, STag* pTag, SArray* pTagName) {
insBuildCreateTbReq(&pStmt->createTblReq, pStmt->targetTableName.tname, pTag, pStmt->pTableMeta->suid,
pStmt->usingTableName.tname, pTagName, pStmt->pTableMeta->tableInfo.numOfTags,
TSDB_DEFAULT_TABLE_TTL);
@@ -591,7 +591,7 @@ static int32_t checkAndTrimValue(SToken* pToken, char* tmpTokenBuf, SMsgBuf* pMs
}
// pSql -> tag1_value, ...)
-static int32_t parseTagsClauseImpl(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseTagsClauseImpl(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
int32_t code = TSDB_CODE_SUCCESS;
SSchema* pSchema = getTableTagSchema(pStmt->pTableMeta);
SArray* pTagVals = taosArrayInit(pCxt->tags.numOfBound, sizeof(STagVal));
@@ -649,7 +649,7 @@ static int32_t parseTagsClauseImpl(SInsertParseContext* pCxt, SVnodeModifOpStmt*
// input pStmt->pSql: TAGS (tag1_value, ...) [table_options] ...
// output pStmt->pSql: [table_options] ...
-static int32_t parseTagsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseTagsClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SToken token;
NEXT_TOKEN(pStmt->pSql, token);
if (TK_TAGS != token.type) {
@@ -673,7 +673,7 @@ static int32_t parseTagsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pSt
return code;
}
-static int32_t storeTableMeta(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t storeTableMeta(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
pStmt->pTableMeta->suid = pStmt->pTableMeta->uid;
pStmt->pTableMeta->uid = pStmt->totalTbNum;
pStmt->pTableMeta->tableType = TSDB_CHILD_TABLE;
@@ -688,7 +688,7 @@ static int32_t storeTableMeta(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStm
return taosHashPut(pStmt->pSubTableHashObj, tbFName, strlen(tbFName), &pBackup, POINTER_BYTES);
}
-static int32_t parseTableOptions(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseTableOptions(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
do {
int32_t index = 0;
SToken token;
@@ -731,7 +731,7 @@ static int32_t parseTableOptions(SInsertParseContext* pCxt, SVnodeModifOpStmt* p
// output pStmt->pSql:
// 1. [(field1_name, ...)]
// 2. VALUES ... | FILE ...
-static int32_t parseUsingClauseBottom(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseUsingClauseBottom(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
if (!pStmt->usingTableProcessing || pCxt->usingDuplicateTable) {
return TSDB_CODE_SUCCESS;
}
@@ -805,7 +805,7 @@ static int32_t getTableMeta(SInsertParseContext* pCxt, SName* pTbName, bool isSt
return code;
}
-static int32_t getTableVgroup(SParseContext* pCxt, SVnodeModifOpStmt* pStmt, bool isStb, bool* pMissCache) {
+static int32_t getTableVgroup(SParseContext* pCxt, SVnodeModifyOpStmt* pStmt, bool isStb, bool* pMissCache) {
int32_t code = TSDB_CODE_SUCCESS;
SVgroupInfo vg;
bool exists = true;
@@ -830,7 +830,7 @@ static int32_t getTableVgroup(SParseContext* pCxt, SVnodeModifOpStmt* pStmt, boo
return code;
}
-static int32_t getTableMetaAndVgroupImpl(SParseContext* pCxt, SVnodeModifOpStmt* pStmt, bool* pMissCache) {
+static int32_t getTableMetaAndVgroupImpl(SParseContext* pCxt, SVnodeModifyOpStmt* pStmt, bool* pMissCache) {
SVgroupInfo vg;
int32_t code = catalogGetCachedTableVgMeta(pCxt->pCatalog, &pStmt->targetTableName, &vg, &pStmt->pTableMeta);
if (TSDB_CODE_SUCCESS == code) {
@@ -842,7 +842,7 @@ static int32_t getTableMetaAndVgroupImpl(SParseContext* pCxt, SVnodeModifOpStmt*
return code;
}
-static int32_t getTableMetaAndVgroup(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, bool* pMissCache) {
+static int32_t getTableMetaAndVgroup(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, bool* pMissCache) {
SParseContext* pComCxt = pCxt->pComCxt;
int32_t code = TSDB_CODE_SUCCESS;
if (pComCxt->async) {
@@ -868,25 +868,16 @@ static int32_t collectUseDatabase(const SName* pName, SHashObj* pDbs) {
return taosHashPut(pDbs, dbFName, strlen(dbFName), dbFName, sizeof(dbFName));
}
-static int32_t getTargetTableSchema(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t getTargetTableSchema(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
if (pCxt->forceUpdate) {
pCxt->missCache = true;
return TSDB_CODE_SUCCESS;
}
int32_t code = checkAuth(pCxt->pComCxt, &pStmt->targetTableName, &pCxt->missCache);
-#if 0
- if (TSDB_CODE_SUCCESS == code && !pCxt->missCache) {
- code = getTableMeta(pCxt, &pStmt->targetTableName, false, &pStmt->pTableMeta, &pCxt->missCache);
- }
- if (TSDB_CODE_SUCCESS == code && !pCxt->missCache) {
- code = getTableVgroup(pCxt->pComCxt, pStmt, false, &pCxt->missCache);
- }
-#else
if (TSDB_CODE_SUCCESS == code && !pCxt->missCache) {
code = getTableMetaAndVgroup(pCxt, pStmt, &pCxt->missCache);
}
-#endif
if (TSDB_CODE_SUCCESS == code && !pCxt->pComCxt->async) {
code = collectUseDatabase(&pStmt->targetTableName, pStmt->pDbFNameHashObj);
if (TSDB_CODE_SUCCESS == code) {
@@ -896,11 +887,11 @@ static int32_t getTargetTableSchema(SInsertParseContext* pCxt, SVnodeModifOpStmt
return code;
}
-static int32_t preParseUsingTableName(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pTbName) {
+static int32_t preParseUsingTableName(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pTbName) {
return insCreateSName(&pStmt->usingTableName, pTbName, pCxt->pComCxt->acctId, pCxt->pComCxt->db, &pCxt->msg);
}
-static int32_t getUsingTableSchema(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t getUsingTableSchema(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
if (pCxt->forceUpdate) {
pCxt->missCache = true;
return TSDB_CODE_SUCCESS;
@@ -922,7 +913,7 @@ static int32_t getUsingTableSchema(SInsertParseContext* pCxt, SVnodeModifOpStmt*
return code;
}
-static int32_t parseUsingTableNameImpl(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseUsingTableNameImpl(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SToken token;
NEXT_TOKEN(pStmt->pSql, token);
int32_t code = preParseUsingTableName(pCxt, pStmt, &token);
@@ -941,7 +932,7 @@ static int32_t parseUsingTableNameImpl(SInsertParseContext* pCxt, SVnodeModifOpS
// output pStmt->pSql:
// 1. [(tag1_name, ...)] TAGS (tag1_value, ...) [table_options]] ...
// 2. VALUES ... | FILE ...
-static int32_t parseUsingTableName(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseUsingTableName(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SToken token;
int32_t index = 0;
NEXT_TOKEN_KEEP_SQL(pStmt->pSql, token, index);
@@ -959,7 +950,7 @@ static int32_t parseUsingTableName(SInsertParseContext* pCxt, SVnodeModifOpStmt*
return code;
}
-static int32_t preParseTargetTableName(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pTbName) {
+static int32_t preParseTargetTableName(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pTbName) {
return insCreateSName(&pStmt->targetTableName, pTbName, pCxt->pComCxt->acctId, pCxt->pComCxt->db, &pCxt->msg);
}
@@ -970,7 +961,7 @@ static int32_t preParseTargetTableName(SInsertParseContext* pCxt, SVnodeModifOpS
// output pStmt->pSql:
// 1. [ USING ... ] ...
// 2. VALUES ... | FILE ...
-static int32_t preParseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t preParseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SToken token;
int32_t index = 0;
NEXT_TOKEN_KEEP_SQL(pStmt->pSql, token, index);
@@ -984,7 +975,7 @@ static int32_t preParseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModif
return skipParentheses(pCxt, &pStmt->pSql);
}
-static int32_t getTableDataBlocks(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks** pDataBuf) {
+static int32_t getTableDataBlocks(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks** pDataBuf) {
if (pCxt->pComCxt->async) {
uint64_t uid = pStmt->pTableMeta->uid;
if (pStmt->usingTableProcessing) {
@@ -1002,7 +993,7 @@ static int32_t getTableDataBlocks(SInsertParseContext* pCxt, SVnodeModifOpStmt*
pDataBuf, NULL, &pStmt->createTblReq);
}
-static int32_t parseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
+static int32_t parseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt,
STableDataBlocks* pDataBuf) {
SToken token;
int32_t index = 0;
@@ -1029,7 +1020,7 @@ static int32_t parseBoundColumnsClause(SInsertParseContext* pCxt, SVnodeModifOpS
// 1. [(tag1_name, ...)] ...
// 2. VALUES ... | FILE ...
// output pStmt->pSql: VALUES ... | FILE ...
-static int32_t parseSchemaClauseBottom(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
+static int32_t parseSchemaClauseBottom(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt,
STableDataBlocks** pDataBuf) {
int32_t code = parseUsingClauseBottom(pCxt, pStmt);
if (TSDB_CODE_SUCCESS == code) {
@@ -1045,7 +1036,7 @@ static int32_t parseSchemaClauseBottom(SInsertParseContext* pCxt, SVnodeModifOpS
// output pStmt->pSql:
// 1. [(tag1_name, ...)] ...
// 2. VALUES ... | FILE ...
-static int32_t parseSchemaClauseTop(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pTbName) {
+static int32_t parseSchemaClauseTop(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pTbName) {
int32_t code = preParseTargetTableName(pCxt, pStmt, pTbName);
if (TSDB_CODE_SUCCESS == code) {
// option: [(field1_name, ...)]
@@ -1337,7 +1328,7 @@ static int32_t allocateMemIfNeed(STableDataBlocks* pDataBlock, int32_t rowSize,
}
// pSql -> (field1_value, ...) [(field1_value2, ...) ...]
-static int32_t parseValues(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf,
+static int32_t parseValues(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf,
int32_t maxRows, int32_t* pNumOfRows, SToken* pToken) {
int32_t code = insInitRowBuilder(&pDataBuf->rowBuilder, pDataBuf->pTableMeta->sversion, &pDataBuf->boundColumnInfo);
@@ -1383,7 +1374,7 @@ static int32_t parseValues(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
}
// VALUES (field1_value, ...) [(field1_value2, ...) ...]
-static int32_t parseValuesClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf,
+static int32_t parseValuesClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf,
SToken* pToken) {
int32_t maxNumOfRows = 0;
int32_t numOfRows = 0;
@@ -1403,7 +1394,7 @@ static int32_t parseValuesClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* p
return code;
}
-static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf,
+static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf,
int maxRows, int32_t* pNumOfRows) {
int32_t code = insInitRowBuilder(&pDataBuf->rowBuilder, pDataBuf->pTableMeta->sversion, &pDataBuf->boundColumnInfo);
@@ -1411,6 +1402,7 @@ static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
(*pNumOfRows) = 0;
char* pLine = NULL;
int64_t readLen = 0;
+ bool firstLine = (pStmt->fileProcessing == false);
pStmt->fileProcessing = false;
while (TSDB_CODE_SUCCESS == code && (readLen = taosGetLineFile(pStmt->fp, &pLine)) != -1) {
if (('\r' == pLine[readLen - 1]) || ('\n' == pLine[readLen - 1])) {
@@ -1418,6 +1410,7 @@ static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
}
if (readLen == 0) {
+ firstLine = false;
continue;
}
@@ -1431,6 +1424,11 @@ static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
strtolower(pLine, pLine);
const char* pRow = pLine;
code = parseOneRow(pCxt, (const char**)&pRow, pDataBuf, &gotRow, &token);
+ if (code && firstLine) {
+ firstLine = false;
+ code = 0;
+ continue;
+ }
}
if (TSDB_CODE_SUCCESS == code && gotRow) {
@@ -1442,6 +1440,8 @@ static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
pStmt->fileProcessing = true;
break;
}
+
+ firstLine = false;
}
taosMemoryFree(pLine);
@@ -1452,7 +1452,7 @@ static int32_t parseCsvFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt,
return code;
}
-static int32_t parseDataFromFileImpl(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf) {
+static int32_t parseDataFromFileImpl(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf) {
int32_t maxNumOfRows = 0;
int32_t numOfRows = 0;
int32_t code = allocateMemIfNeed(pDataBuf, insGetExtendedRowSize(pDataBuf), &maxNumOfRows);
@@ -1476,7 +1476,7 @@ static int32_t parseDataFromFileImpl(SInsertParseContext* pCxt, SVnodeModifOpStm
return code;
}
-static int32_t parseDataFromFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pFilePath,
+static int32_t parseDataFromFile(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pFilePath,
STableDataBlocks* pDataBuf) {
char filePathStr[TSDB_FILENAME_LEN] = {0};
if (TK_NK_STRING == pFilePath->type) {
@@ -1492,8 +1492,12 @@ static int32_t parseDataFromFile(SInsertParseContext* pCxt, SVnodeModifOpStmt* p
return parseDataFromFileImpl(pCxt, pStmt, pDataBuf);
}
-static int32_t parseFileClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf,
+static int32_t parseFileClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf,
SToken* pToken) {
+ if (tsUseAdapter) {
+ return buildInvalidOperationMsg(&pCxt->msg, "proxy mode does not support csv loading");
+ }
+
NEXT_TOKEN(pStmt->pSql, *pToken);
if (0 == pToken->n || (TK_NK_STRING != pToken->type && TK_NK_ID != pToken->type)) {
return buildSyntaxErrMsg(&pCxt->msg, "file path is required following keyword FILE", pToken->z);
@@ -1502,7 +1506,7 @@ static int32_t parseFileClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pSt
}
// VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path
-static int32_t parseDataClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, STableDataBlocks* pDataBuf) {
+static int32_t parseDataClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, STableDataBlocks* pDataBuf) {
SToken token;
NEXT_TOKEN(pStmt->pSql, token);
switch (token.type) {
@@ -1519,7 +1523,7 @@ static int32_t parseDataClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pSt
// input pStmt->pSql:
// 1. [(tag1_name, ...)] ...
// 2. VALUES ... | FILE ...
-static int32_t parseInsertTableClauseBottom(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertTableClauseBottom(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
STableDataBlocks* pDataBuf = NULL;
int32_t code = parseSchemaClauseBottom(pCxt, pStmt, &pDataBuf);
if (TSDB_CODE_SUCCESS == code) {
@@ -1528,7 +1532,7 @@ static int32_t parseInsertTableClauseBottom(SInsertParseContext* pCxt, SVnodeMod
return code;
}
-static void resetEnvPreTable(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static void resetEnvPreTable(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
destroyBoundColumnInfo(&pCxt->tags);
taosMemoryFreeClear(pStmt->pTableMeta);
tdDestroySVCreateTbReq(&pStmt->createTblReq);
@@ -1540,7 +1544,7 @@ static void resetEnvPreTable(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt
}
// input pStmt->pSql: [(field1_name, ...)] [ USING ... ] VALUES ... | FILE ...
-static int32_t parseInsertTableClause(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pTbName) {
+static int32_t parseInsertTableClause(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pTbName) {
resetEnvPreTable(pCxt, pStmt);
int32_t code = parseSchemaClauseTop(pCxt, pStmt, pTbName);
if (TSDB_CODE_SUCCESS == code && !pCxt->missCache) {
@@ -1549,7 +1553,7 @@ static int32_t parseInsertTableClause(SInsertParseContext* pCxt, SVnodeModifOpSt
return code;
}
-static int32_t checkTableClauseFirstToken(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SToken* pTbName,
+static int32_t checkTableClauseFirstToken(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SToken* pTbName,
bool* pHasData) {
// no data in the sql string anymore.
if (0 == pTbName->n) {
@@ -1588,7 +1592,7 @@ static int32_t checkTableClauseFirstToken(SInsertParseContext* pCxt, SVnodeModif
return TSDB_CODE_SUCCESS;
}
-static int32_t setStmtInfo(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t setStmtInfo(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SParsedDataColInfo* tags = taosMemoryMalloc(sizeof(pCxt->tags));
if (NULL == tags) {
return TSDB_CODE_OUT_OF_MEMORY;
@@ -1606,7 +1610,7 @@ static int32_t setStmtInfo(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt)
return code;
}
-static int32_t parseInsertBodyBottom(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertBodyBottom(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
if (TSDB_QUERY_HAS_TYPE(pStmt->insertType, TSDB_QUERY_TYPE_STMT_INSERT)) {
return setStmtInfo(pCxt, pStmt);
}
@@ -1627,7 +1631,7 @@ static int32_t parseInsertBodyBottom(SInsertParseContext* pCxt, SVnodeModifOpStm
// [(field1_name, ...)]
// VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path
// [...];
-static int32_t parseInsertBody(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertBody(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
SToken token;
int32_t code = TSDB_CODE_SUCCESS;
bool hasData = true;
@@ -1650,7 +1654,7 @@ static int32_t parseInsertBody(SInsertParseContext* pCxt, SVnodeModifOpStmt* pSt
static void destroySubTableHashElem(void* p) { taosMemoryFree(*(STableMeta**)p); }
static int32_t createVnodeModifOpStmt(SInsertParseContext* pCxt, bool reentry, SNode** pOutput) {
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (NULL == pStmt) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -1717,6 +1721,8 @@ static int32_t getTableMetaFromMetaData(const SArray* pTables, STableMeta** pMet
if (1 != taosArrayGetSize(pTables)) {
return TSDB_CODE_FAILED;
}
+
+ taosMemoryFreeClear(*pMeta);
SMetaRes* pRes = taosArrayGet(pTables, 0);
if (TSDB_CODE_SUCCESS == pRes->code) {
*pMeta = tableMetaDup((const STableMeta*)pRes->pRes);
@@ -1727,7 +1733,7 @@ static int32_t getTableMetaFromMetaData(const SArray* pTables, STableMeta** pMet
return pRes->code;
}
-static int32_t getTableVgroupFromMetaData(const SArray* pTables, SVnodeModifOpStmt* pStmt, bool isStb) {
+static int32_t getTableVgroupFromMetaData(const SArray* pTables, SVnodeModifyOpStmt* pStmt, bool isStb) {
if (1 != taosArrayGetSize(pTables)) {
return TSDB_CODE_FAILED;
}
@@ -1746,7 +1752,7 @@ static int32_t getTableVgroupFromMetaData(const SArray* pTables, SVnodeModifOpSt
}
static int32_t getTableSchemaFromMetaData(SInsertParseContext* pCxt, const SMetaData* pMetaData,
- SVnodeModifOpStmt* pStmt, bool isStb) {
+ SVnodeModifyOpStmt* pStmt, bool isStb) {
int32_t code = checkAuthFromMetaData(pMetaData->pUser);
if (TSDB_CODE_SUCCESS == code) {
code = getTableMetaFromMetaData(pMetaData->pTableMeta, &pStmt->pTableMeta);
@@ -1779,7 +1785,7 @@ static void clearCatalogReq(SCatalogReq* pCatalogReq) {
}
static int32_t setVnodeModifOpStmt(SInsertParseContext* pCxt, SCatalogReq* pCatalogReq, const SMetaData* pMetaData,
- SVnodeModifOpStmt* pStmt) {
+ SVnodeModifyOpStmt* pStmt) {
clearCatalogReq(pCatalogReq);
if (pStmt->usingTableProcessing) {
@@ -1793,7 +1799,7 @@ static int32_t resetVnodeModifOpStmt(SInsertParseContext* pCxt, SQuery* pQuery)
int32_t code = createVnodeModifOpStmt(pCxt, true, &pQuery->pRoot);
if (TSDB_CODE_SUCCESS == code) {
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)pQuery->pRoot;
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pQuery->pRoot;
(*pCxt->pComCxt->pStmtCb->getExecInfoFn)(pCxt->pComCxt->pStmtCb->pStmt, &pStmt->pVgroupsHashObj,
&pStmt->pTableBlockHashObj);
@@ -1822,7 +1828,7 @@ static int32_t initInsertQuery(SInsertParseContext* pCxt, SCatalogReq* pCatalogR
return resetVnodeModifOpStmt(pCxt, *pQuery);
}
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)(*pQuery)->pRoot;
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)(*pQuery)->pRoot;
if (!pStmt->fileProcessing) {
return setVnodeModifOpStmt(pCxt, pCatalogReq, pMetaData, pStmt);
@@ -1832,7 +1838,7 @@ static int32_t initInsertQuery(SInsertParseContext* pCxt, SCatalogReq* pCatalogR
}
static int32_t setRefreshMate(SQuery* pQuery) {
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)pQuery->pRoot;
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pQuery->pRoot;
if (taosHashGetSize(pStmt->pTableNameHashObj) > 0) {
taosArrayDestroy(pQuery->pTableList);
@@ -1863,7 +1869,7 @@ static int32_t setRefreshMate(SQuery* pQuery) {
// [(field1_name, ...)]
// VALUES (field1_value, ...) [(field1_value2, ...) ...] | FILE csv_file_path
// [...];
-static int32_t parseInsertSqlFromStart(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertSqlFromStart(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
int32_t code = skipInsertInto(&pStmt->pSql, &pCxt->msg);
if (TSDB_CODE_SUCCESS == code) {
code = parseInsertBody(pCxt, pStmt);
@@ -1871,7 +1877,7 @@ static int32_t parseInsertSqlFromStart(SInsertParseContext* pCxt, SVnodeModifOpS
return code;
}
-static int32_t parseInsertSqlFromCsv(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertSqlFromCsv(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
STableDataBlocks* pDataBuf = NULL;
int32_t code = getTableDataBlocks(pCxt, pStmt, &pDataBuf);
if (TSDB_CODE_SUCCESS == code) {
@@ -1889,7 +1895,7 @@ static int32_t parseInsertSqlFromCsv(SInsertParseContext* pCxt, SVnodeModifOpStm
return code;
}
-static int32_t parseInsertSqlFromTable(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertSqlFromTable(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
int32_t code = parseInsertTableClauseBottom(pCxt, pStmt);
if (TSDB_CODE_SUCCESS == code) {
code = parseInsertBody(pCxt, pStmt);
@@ -1897,7 +1903,7 @@ static int32_t parseInsertSqlFromTable(SInsertParseContext* pCxt, SVnodeModifOpS
return code;
}
-static int32_t parseInsertSqlImpl(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt) {
+static int32_t parseInsertSqlImpl(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt) {
if (pStmt->pSql == pCxt->pComCxt->pSql || NULL != pCxt->pComCxt->pStmtCb) {
return parseInsertSqlFromStart(pCxt, pStmt);
}
@@ -1949,7 +1955,7 @@ static int32_t buildInsertUserAuthReq(const char* pUser, SName* pName, SArray**
return TSDB_CODE_SUCCESS;
}
-static int32_t buildInsertCatalogReq(SInsertParseContext* pCxt, SVnodeModifOpStmt* pStmt, SCatalogReq* pCatalogReq) {
+static int32_t buildInsertCatalogReq(SInsertParseContext* pCxt, SVnodeModifyOpStmt* pStmt, SCatalogReq* pCatalogReq) {
int32_t code = buildInsertUserAuthReq(pCxt->pComCxt->pUser, &pStmt->targetTableName, &pCatalogReq->pUser);
if (TSDB_CODE_SUCCESS == code) {
if (0 == pStmt->usingTableName.type) {
@@ -1965,7 +1971,7 @@ static int32_t buildInsertCatalogReq(SInsertParseContext* pCxt, SVnodeModifOpStm
}
static int32_t setNextStageInfo(SInsertParseContext* pCxt, SQuery* pQuery, SCatalogReq* pCatalogReq) {
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)pQuery->pRoot;
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pQuery->pRoot;
if (pCxt->missCache) {
parserDebug("0x%" PRIx64 " %d rows of %d tables have been inserted before cache miss", pCxt->pComCxt->requestId,
pStmt->totalRowsNum, pStmt->totalTbNum);
@@ -1990,7 +1996,7 @@ int32_t parseInsertSql(SParseContext* pCxt, SQuery** pQuery, SCatalogReq* pCatal
int32_t code = initInsertQuery(&context, pCatalogReq, pMetaData, pQuery);
if (TSDB_CODE_SUCCESS == code) {
- code = parseInsertSqlImpl(&context, (SVnodeModifOpStmt*)(*pQuery)->pRoot);
+ code = parseInsertSqlImpl(&context, (SVnodeModifyOpStmt*)(*pQuery)->pRoot);
}
if (TSDB_CODE_SUCCESS == code) {
code = setNextStageInfo(&context, *pQuery, pCatalogReq);
diff --git a/source/libs/parser/src/parInsertStmt.c b/source/libs/parser/src/parInsertStmt.c
index 4ed72e6c14..e10b195d34 100644
--- a/source/libs/parser/src/parInsertStmt.c
+++ b/source/libs/parser/src/parInsertStmt.c
@@ -37,7 +37,7 @@ int32_t qBuildStmtOutput(SQuery* pQuery, SHashObj* pVgHash, SHashObj* pBlockHash
code = insMergeTableDataBlocks(pBlockHash, &pVgDataBlocks);
}
if (TSDB_CODE_SUCCESS == code) {
- code = insBuildOutput(pVgHash, pVgDataBlocks, &((SVnodeModifOpStmt*)pQuery->pRoot)->pDataBlocks);
+ code = insBuildOutput(pVgHash, pVgDataBlocks, &((SVnodeModifyOpStmt*)pQuery->pRoot)->pDataBlocks);
}
insDestroyBlockArrayList(pVgDataBlocks);
return code;
@@ -47,7 +47,7 @@ int32_t qBindStmtTagsValue(void* pBlock, void* boundTags, int64_t suid, const ch
TAOS_MULTI_BIND* bind, char* msgBuf, int32_t msgBufLen) {
STableDataBlocks* pDataBlock = (STableDataBlocks*)pBlock;
SMsgBuf pBuf = {.buf = msgBuf, .len = msgBufLen};
- int32_t code = TSDB_CODE_SUCCESS;
+ int32_t code = TSDB_CODE_SUCCESS;
SParsedDataColInfo* tags = (SParsedDataColInfo*)boundTags;
if (NULL == tags) {
return TSDB_CODE_APP_ERROR;
@@ -137,7 +137,8 @@ int32_t qBindStmtTagsValue(void* pBlock, void* boundTags, int64_t suid, const ch
}
SVCreateTbReq tbReq = {0};
- insBuildCreateTbReq(&tbReq, tName, pTag, suid, sTableName, tagName, pDataBlock->pTableMeta->tableInfo.numOfTags, TSDB_DEFAULT_TABLE_TTL);
+ insBuildCreateTbReq(&tbReq, tName, pTag, suid, sTableName, tagName, pDataBlock->pTableMeta->tableInfo.numOfTags,
+ TSDB_DEFAULT_TABLE_TTL);
code = insBuildCreateTbMsg(pDataBlock, &tbReq);
tdDestroySVCreateTbReq(&tbReq);
diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c
index 1f9e4e9ab1..94b32a3de2 100644
--- a/source/libs/parser/src/parTokenizer.c
+++ b/source/libs/parser/src/parTokenizer.c
@@ -260,6 +260,7 @@ static SKeyword keywordTable[] = {
{"WRITE", TK_WRITE},
{"_C0", TK_ROWTS},
{"_IROWTS", TK_IROWTS},
+ {"_ISFILLED", TK_ISFILLED},
{"_QDURATION", TK_QDURATION},
{"_QEND", TK_QEND},
{"_QSTART", TK_QSTART},
diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c
index d805c76d77..a5bb660c37 100644
--- a/source/libs/parser/src/parTranslater.c
+++ b/source/libs/parser/src/parTranslater.c
@@ -352,7 +352,7 @@ static int32_t getTableMetaImpl(STranslateContext* pCxt, const SName* pName, STa
code = catalogGetTableMeta(pParCxt->pCatalog, &conn, pName, pMeta);
}
}
- if (TSDB_CODE_SUCCESS != code) {
+ if (TSDB_CODE_SUCCESS != code && TSDB_CODE_TSC_INVALID_TABLE_NAME != code) {
parserError("0x%" PRIx64 " catalogGetTableMeta error, code:%s, dbName:%s, tbName:%s", pCxt->pParseCxt->requestId,
tstrerror(code), pName->dbname, pName->tname);
}
@@ -2837,7 +2837,7 @@ static int32_t rewriteProjectAlias(SNodeList* pProjectionList) {
return TSDB_CODE_SUCCESS;
}
-static int32_t checkProjectAlias(STranslateContext* pCxt, SNodeList* pProjectionList) {
+static int32_t checkProjectAlias(STranslateContext* pCxt, SNodeList* pProjectionList, SHashObj** pOutput) {
SHashObj* pUserAliasSet = taosHashInit(LIST_LENGTH(pProjectionList),
taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
SNode* pProject = NULL;
@@ -2849,13 +2849,17 @@ static int32_t checkProjectAlias(STranslateContext* pCxt, SNodeList* pProjection
}
taosHashPut(pUserAliasSet, pExpr->userAlias, strlen(pExpr->userAlias), &pExpr, POINTER_BYTES);
}
- taosHashCleanup(pUserAliasSet);
+ if (NULL == pOutput) {
+ taosHashCleanup(pUserAliasSet);
+ } else {
+ *pOutput = pUserAliasSet;
+ }
return TSDB_CODE_SUCCESS;
}
static int32_t translateProjectionList(STranslateContext* pCxt, SSelectStmt* pSelect) {
if (pSelect->isSubquery) {
- return checkProjectAlias(pCxt, pSelect->pProjectionList);
+ return checkProjectAlias(pCxt, pSelect->pProjectionList, NULL);
}
return rewriteProjectAlias(pSelect->pProjectionList);
}
@@ -3899,8 +3903,7 @@ static int32_t checkDbKeepOption(STranslateContext* pCxt, SDatabaseOptions* pOpt
pOptions->keep[0] > tsdbMaxKeep || pOptions->keep[1] > tsdbMaxKeep || pOptions->keep[2] > tsdbMaxKeep) {
return generateSyntaxErrMsgExt(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_DB_OPTION,
"Invalid option keep: %" PRId64 ", %" PRId64 ", %" PRId64 " valid range: [%dm, %dm]",
- pOptions->keep[0], pOptions->keep[1], pOptions->keep[2], TSDB_MIN_KEEP,
- tsdbMaxKeep);
+ pOptions->keep[0], pOptions->keep[1], pOptions->keep[2], TSDB_MIN_KEEP, tsdbMaxKeep);
}
if (!((pOptions->keep[0] <= pOptions->keep[1]) && (pOptions->keep[1] <= pOptions->keep[2]))) {
@@ -4055,7 +4058,7 @@ static int32_t checkDatabaseOptions(STranslateContext* pCxt, const char* pDbName
code = checkDbPrecisionOption(pCxt, pOptions);
}
if (TSDB_CODE_SUCCESS == code) {
- code = checkDbKeepOption(pCxt, pOptions); // use precision
+ code = checkDbKeepOption(pCxt, pOptions); // use precision
}
if (TSDB_CODE_SUCCESS == code) {
code = checkDbRangeOption(pCxt, "pages", pOptions->pages, TSDB_MIN_PAGES_PER_VNODE, TSDB_MAX_PAGES_PER_VNODE);
@@ -5080,7 +5083,7 @@ static int32_t translateUseDatabase(STranslateContext* pCxt, SUseDatabaseStmt* p
static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pStmt) {
SCreateUserReq createReq = {0};
- strcpy(createReq.user, pStmt->useName);
+ strcpy(createReq.user, pStmt->userName);
createReq.createType = 0;
createReq.superUser = 0;
createReq.sysInfo = pStmt->sysinfo;
@@ -5092,7 +5095,7 @@ static int32_t translateCreateUser(STranslateContext* pCxt, SCreateUserStmt* pSt
static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt) {
SAlterUserReq alterReq = {0};
- strcpy(alterReq.user, pStmt->useName);
+ strcpy(alterReq.user, pStmt->userName);
alterReq.alterType = pStmt->alterType;
alterReq.superUser = 0;
alterReq.enable = pStmt->enable;
@@ -5107,7 +5110,7 @@ static int32_t translateAlterUser(STranslateContext* pCxt, SAlterUserStmt* pStmt
static int32_t translateDropUser(STranslateContext* pCxt, SDropUserStmt* pStmt) {
SDropUserReq dropReq = {0};
- strcpy(dropReq.user, pStmt->useName);
+ strcpy(dropReq.user, pStmt->userName);
return buildCmdMsg(pCxt, TDMT_MND_DROP_USER, (FSerializeFunc)tSerializeSDropUserReq, &dropReq);
}
@@ -5515,9 +5518,24 @@ static void getSourceDatabase(SNode* pStmt, int32_t acctId, char* pDbFName) {
tNameGetFullDbName(&name, pDbFName);
}
-static int32_t addWstartTsToCreateStreamQuery(SNode* pStmt) {
- SSelectStmt* pSelect = (SSelectStmt*)pStmt;
- SNode* pProj = nodesListGetNode(pSelect->pProjectionList, 0);
+static void getStreamQueryFirstProjectAliasName(SHashObj* pUserAliasSet, char* aliasName, int32_t len) {
+ if (NULL == taosHashGet(pUserAliasSet, "_wstart", strlen("_wstart"))) {
+ snprintf(aliasName, len, "%s", "_wstart");
+ return;
+ }
+ if (NULL == taosHashGet(pUserAliasSet, "ts", strlen("ts"))) {
+ snprintf(aliasName, len, "%s", "ts");
+ return;
+ }
+ do {
+ taosRandStr(aliasName, len - 1);
+ aliasName[len - 1] = '\0';
+ } while (NULL != taosHashGet(pUserAliasSet, aliasName, strlen(aliasName)));
+ return;
+}
+
+static int32_t addWstartTsToCreateStreamQueryImpl(SSelectStmt* pSelect, SHashObj* pUserAliasSet) {
+ SNode* pProj = nodesListGetNode(pSelect->pProjectionList, 0);
if (NULL == pSelect->pWindow ||
(QUERY_NODE_FUNCTION == nodeType(pProj) && 0 == strcmp("_wstart", ((SFunctionNode*)pProj)->functionName))) {
return TSDB_CODE_SUCCESS;
@@ -5527,7 +5545,7 @@ static int32_t addWstartTsToCreateStreamQuery(SNode* pStmt) {
return TSDB_CODE_OUT_OF_MEMORY;
}
strcpy(pFunc->functionName, "_wstart");
- strcpy(pFunc->node.aliasName, pFunc->functionName);
+ getStreamQueryFirstProjectAliasName(pUserAliasSet, pFunc->node.aliasName, sizeof(pFunc->node.aliasName));
int32_t code = nodesListPushFront(pSelect->pProjectionList, (SNode*)pFunc);
if (TSDB_CODE_SUCCESS != code) {
nodesDestroyNode((SNode*)pFunc);
@@ -5535,6 +5553,17 @@ static int32_t addWstartTsToCreateStreamQuery(SNode* pStmt) {
return code;
}
+static int32_t addWstartTsToCreateStreamQuery(STranslateContext* pCxt, SNode* pStmt) {
+ SSelectStmt* pSelect = (SSelectStmt*)pStmt;
+ SHashObj* pUserAliasSet = NULL;
+ int32_t code = checkProjectAlias(pCxt, pSelect->pProjectionList, &pUserAliasSet);
+ if (TSDB_CODE_SUCCESS == code) {
+ code = addWstartTsToCreateStreamQueryImpl(pSelect, pUserAliasSet);
+ }
+ taosHashCleanup(pUserAliasSet);
+ return code;
+}
+
static int32_t addTagsToCreateStreamQuery(STranslateContext* pCxt, SCreateStreamStmt* pStmt, SSelectStmt* pSelect) {
if (NULL == pStmt->pTags) {
return TSDB_CODE_SUCCESS;
@@ -5637,7 +5666,7 @@ static int32_t checkStreamQuery(STranslateContext* pCxt, SSelectStmt* pSelect) {
static int32_t buildCreateStreamQuery(STranslateContext* pCxt, SCreateStreamStmt* pStmt, SCMCreateStreamReq* pReq) {
pCxt->createStream = true;
- int32_t code = addWstartTsToCreateStreamQuery(pStmt->pQuery);
+ int32_t code = addWstartTsToCreateStreamQuery(pCxt, pStmt->pQuery);
if (TSDB_CODE_SUCCESS == code) {
code = addSubtableInfoToCreateStreamQuery(pCxt, pStmt);
}
@@ -6616,7 +6645,7 @@ static void destroyCreateTbReqBatch(void* data) {
}
int32_t rewriteToVnodeModifyOpStmt(SQuery* pQuery, SArray* pBufArray) {
- SVnodeModifOpStmt* pNewStmt = (SVnodeModifOpStmt*)nodesMakeNode(QUERY_NODE_VNODE_MODIF_STMT);
+ SVnodeModifyOpStmt* pNewStmt = (SVnodeModifyOpStmt*)nodesMakeNode(QUERY_NODE_VNODE_MODIFY_STMT);
if (pNewStmt == NULL) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7000,7 +7029,7 @@ SArray* serializeVgroupsCreateTableBatch(SHashObj* pVgroupHashmap) {
}
static int32_t rewriteCreateMultiTable(STranslateContext* pCxt, SQuery* pQuery) {
- SCreateMultiTableStmt* pStmt = (SCreateMultiTableStmt*)pQuery->pRoot;
+ SCreateMultiTablesStmt* pStmt = (SCreateMultiTablesStmt*)pQuery->pRoot;
SHashObj* pVgroupHashmap = taosHashInit(4, taosGetDefaultHashFunction(TSDB_DATA_TYPE_INT), false, HASH_NO_LOCK);
if (NULL == pVgroupHashmap) {
@@ -7608,7 +7637,7 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) {
code = rewriteCreateTable(pCxt, pQuery);
}
break;
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
code = rewriteCreateMultiTable(pCxt, pQuery);
break;
case QUERY_NODE_DROP_TABLE_STMT:
@@ -7705,9 +7734,9 @@ static int32_t setQuery(STranslateContext* pCxt, SQuery* pQuery) {
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
pQuery->msgType = TDMT_VND_SUBMIT;
break;
- case QUERY_NODE_VNODE_MODIF_STMT:
+ case QUERY_NODE_VNODE_MODIFY_STMT:
pQuery->execMode = QUERY_EXEC_MODE_SCHEDULE;
- pQuery->msgType = toMsgType(((SVnodeModifOpStmt*)pQuery->pRoot)->sqlNodeType);
+ pQuery->msgType = toMsgType(((SVnodeModifyOpStmt*)pQuery->pRoot)->sqlNodeType);
break;
case QUERY_NODE_DESCRIBE_STMT:
case QUERY_NODE_SHOW_CREATE_DATABASE_STMT:
diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c
index c9dec76a0a..1021aab6f0 100644
--- a/source/libs/parser/src/sql.c
+++ b/source/libs/parser/src/sql.c
@@ -104,26 +104,26 @@
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 459
+#define YYNOCODE 461
#define YYACTIONTYPE unsigned short int
#define ParseTOKENTYPE SToken
typedef union {
int yyinit;
ParseTOKENTYPE yy0;
- EOperatorType yy20;
- SNode* yy74;
- ENullOrder yy109;
- SToken yy317;
- EOrder yy326;
- bool yy335;
- int8_t yy449;
- int64_t yy531;
- EJoinType yy630;
- SAlterOption yy767;
- EFillMode yy828;
- int32_t yy856;
- SNodeList* yy874;
- SDataType yy898;
+ EOrder yy32;
+ SToken yy77;
+ int32_t yy248;
+ int8_t yy287;
+ ENullOrder yy385;
+ EJoinType yy560;
+ SNode* yy600;
+ SNodeList* yy601;
+ SAlterOption yy661;
+ EOperatorType yy666;
+ int64_t yy717;
+ EFillMode yy798;
+ bool yy841;
+ SDataType yy888;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -139,17 +139,18 @@ typedef union {
#define ParseCTX_FETCH
#define ParseCTX_STORE
#define YYFALLBACK 1
-#define YYNSTATE 715
-#define YYNRULE 540
-#define YYNTOKEN 324
-#define YY_MAX_SHIFT 714
-#define YY_MIN_SHIFTREDUCE 1057
-#define YY_MAX_SHIFTREDUCE 1596
-#define YY_ERROR_ACTION 1597
-#define YY_ACCEPT_ACTION 1598
-#define YY_NO_ACTION 1599
-#define YY_MIN_REDUCE 1600
-#define YY_MAX_REDUCE 2139
+#define YYNSTATE 714
+#define YYNRULE 545
+#define YYNRULE_WITH_ACTION 545
+#define YYNTOKEN 325
+#define YY_MAX_SHIFT 713
+#define YY_MIN_SHIFTREDUCE 1061
+#define YY_MAX_SHIFTREDUCE 1605
+#define YY_ERROR_ACTION 1606
+#define YY_ACCEPT_ACTION 1607
+#define YY_NO_ACTION 1608
+#define YY_MIN_REDUCE 1609
+#define YY_MAX_REDUCE 2153
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -216,714 +217,843 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (2586)
+#define YY_ACTTAB_COUNT (3069)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 1954, 460, 1743, 461, 1636, 571, 590, 35, 276, 2110,
- /* 10 */ 160, 1807, 45, 43, 1526, 1708, 353, 2115, 331, 1865,
- /* 20 */ 362, 2110, 1377, 1600, 570, 175, 603, 1805, 354, 2111,
- /* 30 */ 572, 1972, 159, 1456, 1612, 1375, 157, 2114, 1403, 586,
- /* 40 */ 54, 2111, 2113, 401, 1923, 1756, 619, 124, 123, 122,
- /* 50 */ 121, 120, 119, 118, 117, 116, 466, 1754, 1451, 602,
- /* 60 */ 38, 37, 462, 18, 44, 42, 41, 40, 39, 1953,
- /* 70 */ 1383, 171, 469, 1988, 461, 1636, 102, 1955, 623, 1957,
- /* 80 */ 1958, 618, 571, 613, 1794, 547, 2110, 2056, 172, 2110,
- /* 90 */ 2041, 1523, 1745, 169, 356, 2037, 14, 60, 603, 1954,
- /* 100 */ 1941, 570, 175, 1937, 2116, 175, 2111, 572, 177, 2111,
- /* 110 */ 572, 1937, 125, 2053, 334, 1854, 2067, 115, 711, 499,
- /* 120 */ 114, 113, 112, 111, 110, 109, 108, 107, 106, 1754,
- /* 130 */ 1972, 1933, 1939, 1458, 1459, 48, 1598, 1807, 620, 1933,
- /* 140 */ 1939, 345, 613, 1923, 355, 619, 45, 43, 1910, 1563,
- /* 150 */ 613, 1260, 1261, 1805, 362, 1731, 1377, 367, 1807, 1954,
- /* 160 */ 1800, 1802, 1432, 1441, 1109, 366, 1108, 1456, 1953, 1375,
- /* 170 */ 603, 1109, 1988, 1108, 1805, 102, 1955, 623, 1957, 1958,
- /* 180 */ 618, 1378, 613, 1376, 180, 136, 212, 143, 2012, 2041,
- /* 190 */ 1972, 260, 1451, 356, 2037, 1110, 384, 18, 586, 377,
- /* 200 */ 602, 1754, 1110, 1923, 1383, 619, 1381, 1382, 602, 1431,
- /* 210 */ 1434, 1435, 1436, 1437, 1438, 1439, 1440, 615, 611, 1449,
- /* 220 */ 1450, 1452, 1453, 1454, 1455, 1457, 1460, 2, 1953, 60,
- /* 230 */ 14, 87, 1988, 1954, 227, 102, 1955, 623, 1957, 1958,
- /* 240 */ 618, 547, 613, 1402, 648, 2110, 178, 172, 82, 2041,
- /* 250 */ 1090, 561, 711, 356, 2037, 44, 42, 41, 40, 39,
- /* 260 */ 2116, 175, 129, 655, 1972, 2111, 572, 1458, 1459, 267,
- /* 270 */ 268, 1749, 620, 64, 266, 2068, 48, 1923, 1402, 619,
- /* 280 */ 45, 43, 148, 147, 652, 651, 650, 145, 362, 1092,
- /* 290 */ 1377, 1095, 1096, 1954, 84, 322, 1432, 1441, 532, 583,
- /* 300 */ 530, 1456, 1953, 1375, 459, 528, 1988, 464, 1642, 102,
- /* 310 */ 1955, 623, 1957, 1958, 618, 1378, 613, 1376, 526, 60,
- /* 320 */ 524, 2016, 1732, 2041, 1972, 1729, 1451, 356, 2037, 590,
- /* 330 */ 133, 18, 620, 1522, 567, 562, 556, 1923, 1383, 619,
- /* 340 */ 1381, 1382, 1866, 1431, 1434, 1435, 1436, 1437, 1438, 1439,
- /* 350 */ 1440, 615, 611, 1449, 1450, 1452, 1453, 1454, 1455, 1457,
- /* 360 */ 1460, 2, 1953, 11, 14, 60, 1988, 1801, 1802, 102,
- /* 370 */ 1955, 623, 1957, 1958, 618, 2115, 613, 60, 178, 2110,
- /* 380 */ 1807, 2130, 49, 2041, 478, 1623, 711, 356, 2037, 257,
- /* 390 */ 2049, 582, 407, 126, 581, 2114, 1806, 2110, 2075, 2111,
- /* 400 */ 2112, 1458, 1459, 38, 37, 603, 228, 44, 42, 41,
- /* 410 */ 40, 39, 570, 175, 45, 43, 1461, 2111, 572, 125,
- /* 420 */ 1313, 1314, 362, 478, 1377, 178, 504, 1954, 1530, 1923,
- /* 430 */ 1432, 1441, 320, 655, 1402, 1456, 1754, 1375, 2056, 468,
- /* 440 */ 38, 37, 464, 1642, 44, 42, 41, 40, 39, 1378,
- /* 450 */ 566, 1376, 148, 147, 652, 651, 650, 145, 1972, 1466,
- /* 460 */ 1451, 400, 187, 399, 2052, 1402, 620, 589, 178, 1354,
- /* 470 */ 1355, 1923, 1383, 619, 1381, 1382, 27, 1431, 1434, 1435,
- /* 480 */ 1436, 1437, 1438, 1439, 1440, 615, 611, 1449, 1450, 1452,
- /* 490 */ 1453, 1454, 1455, 1457, 1460, 2, 1953, 169, 46, 79,
- /* 500 */ 1988, 1403, 78, 102, 1955, 623, 1957, 1958, 618, 547,
- /* 510 */ 613, 510, 509, 2110, 178, 2130, 1972, 2041, 655, 1855,
- /* 520 */ 711, 356, 2037, 1622, 565, 1402, 178, 82, 2116, 175,
- /* 530 */ 213, 178, 2088, 2111, 572, 1458, 1459, 148, 147, 652,
- /* 540 */ 651, 650, 145, 13, 12, 164, 603, 1621, 45, 43,
- /* 550 */ 1750, 495, 491, 487, 483, 210, 362, 1837, 1377, 603,
- /* 560 */ 405, 682, 680, 564, 1432, 1441, 396, 1923, 1593, 1456,
- /* 570 */ 1404, 1375, 1601, 406, 38, 37, 1433, 1754, 44, 42,
- /* 580 */ 41, 40, 39, 1378, 2056, 1376, 1405, 398, 394, 443,
- /* 590 */ 1754, 1923, 83, 115, 1451, 208, 114, 113, 112, 111,
- /* 600 */ 110, 109, 108, 107, 106, 1553, 1383, 1433, 1381, 1382,
- /* 610 */ 2051, 1431, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 615,
- /* 620 */ 611, 1449, 1450, 1452, 1453, 1454, 1455, 1457, 1460, 2,
- /* 630 */ 359, 358, 46, 2115, 1401, 603, 1177, 38, 37, 1499,
- /* 640 */ 1391, 44, 42, 41, 40, 39, 657, 191, 190, 415,
- /* 650 */ 1404, 1456, 157, 1384, 711, 558, 1551, 1552, 1554, 1555,
- /* 660 */ 1620, 1757, 207, 201, 1592, 206, 1754, 31, 474, 1458,
- /* 670 */ 1459, 1179, 1619, 38, 37, 99, 1451, 44, 42, 41,
- /* 680 */ 40, 39, 45, 43, 199, 41, 40, 39, 1383, 134,
- /* 690 */ 362, 11, 1377, 514, 513, 512, 714, 1746, 1432, 1441,
- /* 700 */ 1405, 130, 508, 1456, 1923, 1375, 507, 603, 603, 424,
- /* 710 */ 283, 1730, 506, 511, 259, 1487, 1923, 1378, 505, 1376,
- /* 720 */ 1618, 429, 430, 1617, 408, 168, 1542, 1586, 1451, 1405,
- /* 730 */ 237, 704, 700, 696, 692, 281, 609, 409, 1754, 1754,
- /* 740 */ 1383, 135, 1381, 1382, 2012, 1431, 1434, 1435, 1436, 1437,
- /* 750 */ 1438, 1439, 1440, 615, 611, 1449, 1450, 1452, 1453, 1454,
- /* 760 */ 1455, 1457, 1460, 2, 1923, 1616, 14, 1923, 1739, 603,
- /* 770 */ 365, 603, 100, 657, 1383, 274, 368, 11, 157, 9,
- /* 780 */ 319, 1669, 1400, 476, 157, 477, 32, 1756, 711, 437,
- /* 790 */ 1615, 1614, 450, 1756, 259, 449, 1492, 1095, 1096, 1392,
- /* 800 */ 1754, 1387, 1754, 1458, 1459, 1611, 1610, 33, 599, 1923,
- /* 810 */ 421, 669, 451, 38, 37, 423, 1609, 44, 42, 41,
- /* 820 */ 40, 39, 38, 37, 1395, 1397, 44, 42, 41, 40,
- /* 830 */ 39, 1608, 1432, 1441, 1923, 1923, 611, 1449, 1450, 1452,
- /* 840 */ 1453, 1454, 1455, 8, 184, 262, 514, 513, 512, 1923,
- /* 850 */ 1923, 1378, 93, 1376, 130, 508, 1607, 335, 1666, 507,
- /* 860 */ 1923, 605, 1348, 2013, 231, 506, 511, 1850, 607, 411,
- /* 870 */ 2013, 505, 2114, 236, 1747, 1923, 1381, 1382, 183, 1431,
- /* 880 */ 1434, 1435, 1436, 1437, 1438, 1439, 1440, 615, 611, 1449,
- /* 890 */ 1450, 1452, 1453, 1454, 1455, 1457, 1460, 2, 229, 447,
- /* 900 */ 1923, 1784, 442, 441, 440, 439, 436, 435, 434, 433,
- /* 910 */ 432, 428, 427, 426, 425, 336, 418, 417, 416, 1944,
- /* 920 */ 413, 412, 333, 688, 687, 686, 685, 372, 583, 684,
- /* 930 */ 683, 137, 678, 677, 676, 675, 674, 673, 672, 671,
- /* 940 */ 150, 667, 666, 665, 371, 370, 662, 661, 660, 659,
- /* 950 */ 658, 158, 1606, 1605, 1402, 235, 296, 38, 37, 133,
- /* 960 */ 1377, 44, 42, 41, 40, 39, 1942, 603, 1946, 503,
- /* 970 */ 294, 68, 649, 1375, 67, 1798, 603, 1937, 156, 38,
- /* 980 */ 37, 1751, 1954, 44, 42, 41, 40, 39, 1850, 1850,
- /* 990 */ 141, 502, 195, 456, 454, 85, 1923, 1923, 1754, 185,
- /* 1000 */ 189, 653, 339, 575, 1798, 1933, 1939, 1754, 1383, 1604,
- /* 1010 */ 603, 654, 327, 1972, 1798, 1741, 613, 585, 173, 2049,
- /* 1020 */ 2050, 620, 131, 2054, 543, 670, 1923, 1724, 619, 60,
- /* 1030 */ 1217, 645, 644, 643, 1221, 642, 1223, 1224, 641, 1226,
- /* 1040 */ 638, 1754, 1232, 635, 1234, 1235, 632, 629, 1519, 290,
- /* 1050 */ 1603, 1953, 1784, 1923, 1485, 1988, 711, 603, 102, 1955,
- /* 1060 */ 623, 1957, 1958, 618, 340, 613, 338, 337, 101, 501,
- /* 1070 */ 2130, 587, 2041, 503, 1954, 1386, 356, 2037, 603, 2061,
- /* 1080 */ 1519, 583, 1656, 603, 603, 603, 603, 554, 1754, 50,
- /* 1090 */ 69, 3, 271, 146, 1923, 502, 1433, 598, 600, 601,
- /* 1100 */ 277, 139, 610, 127, 515, 1972, 76, 75, 404, 1754,
- /* 1110 */ 1486, 182, 133, 620, 1754, 1754, 1754, 1754, 1923, 1378,
- /* 1120 */ 619, 1376, 1385, 218, 220, 583, 216, 219, 603, 318,
- /* 1130 */ 1595, 1596, 392, 574, 390, 386, 382, 379, 376, 578,
- /* 1140 */ 77, 62, 369, 1953, 1381, 1382, 53, 1988, 241, 542,
- /* 1150 */ 102, 1955, 623, 1957, 1958, 618, 133, 613, 1649, 1754,
- /* 1160 */ 375, 1954, 2130, 222, 2041, 47, 221, 224, 356, 2037,
- /* 1170 */ 223, 174, 2049, 2050, 1647, 131, 2054, 1737, 178, 2104,
- /* 1180 */ 517, 34, 360, 1480, 1481, 1482, 1483, 1484, 1488, 1489,
- /* 1190 */ 1490, 1491, 1972, 52, 1550, 1613, 520, 232, 546, 264,
- /* 1200 */ 620, 243, 547, 614, 1954, 1923, 2110, 619, 142, 144,
- /* 1210 */ 647, 146, 62, 13, 12, 176, 2049, 2050, 1324, 131,
- /* 1220 */ 2054, 2116, 175, 1389, 2081, 576, 2111, 572, 1709, 254,
- /* 1230 */ 1953, 663, 1954, 47, 1988, 1972, 47, 102, 1955, 623,
- /* 1240 */ 1957, 1958, 618, 620, 613, 1477, 664, 1643, 1923, 2130,
- /* 1250 */ 619, 2041, 269, 1158, 627, 356, 2037, 98, 1138, 559,
- /* 1260 */ 211, 595, 273, 1972, 1210, 1493, 2060, 95, 1156, 248,
- /* 1270 */ 1388, 620, 144, 1953, 1973, 1954, 1923, 1988, 619, 146,
- /* 1280 */ 102, 1955, 623, 1957, 1958, 618, 1442, 613, 128, 289,
- /* 1290 */ 144, 373, 2014, 1139, 2041, 1859, 706, 1637, 356, 2037,
- /* 1300 */ 374, 1953, 1795, 2071, 584, 1988, 1972, 1238, 102, 1955,
- /* 1310 */ 623, 1957, 1958, 618, 620, 613, 256, 253, 1, 1923,
- /* 1320 */ 606, 619, 2041, 4, 378, 1242, 356, 2037, 383, 1341,
- /* 1330 */ 535, 284, 1249, 332, 188, 410, 1405, 1860, 414, 445,
- /* 1340 */ 1954, 1247, 547, 149, 1953, 419, 2110, 1400, 1988, 431,
- /* 1350 */ 1852, 103, 1955, 623, 1957, 1958, 618, 438, 613, 452,
- /* 1360 */ 444, 2116, 175, 579, 1954, 2041, 2111, 572, 446, 2040,
- /* 1370 */ 2037, 1972, 547, 453, 1406, 458, 2110, 192, 455, 620,
- /* 1380 */ 457, 467, 1408, 1954, 1923, 198, 619, 470, 1407, 471,
- /* 1390 */ 472, 2116, 175, 1409, 200, 1972, 2111, 572, 473, 203,
- /* 1400 */ 475, 205, 80, 620, 479, 1112, 81, 209, 1923, 1953,
- /* 1410 */ 619, 496, 497, 1988, 1972, 498, 103, 1955, 623, 1957,
- /* 1420 */ 1958, 618, 620, 613, 105, 534, 500, 1923, 1744, 619,
- /* 1430 */ 2041, 321, 2072, 1953, 608, 2037, 1954, 1988, 215, 1740,
- /* 1440 */ 162, 1955, 623, 1957, 1958, 618, 217, 613, 151, 152,
- /* 1450 */ 1742, 1738, 621, 230, 153, 1900, 1988, 1954, 154, 103,
- /* 1460 */ 1955, 623, 1957, 1958, 618, 1899, 613, 1972, 537, 538,
- /* 1470 */ 536, 285, 541, 2041, 233, 617, 544, 326, 2037, 2082,
- /* 1480 */ 1923, 551, 619, 557, 560, 593, 346, 2087, 1972, 239,
- /* 1490 */ 242, 563, 573, 2131, 2086, 7, 620, 569, 549, 2063,
- /* 1500 */ 552, 1923, 550, 619, 577, 1953, 252, 1519, 250, 1988,
- /* 1510 */ 1954, 1941, 312, 1955, 623, 1957, 1958, 618, 616, 613,
- /* 1520 */ 604, 2006, 1937, 249, 247, 347, 1953, 580, 132, 1404,
- /* 1530 */ 1988, 2109, 588, 161, 1955, 623, 1957, 1958, 618, 2057,
- /* 1540 */ 613, 1972, 165, 251, 350, 261, 591, 286, 592, 620,
- /* 1550 */ 1933, 1939, 357, 1871, 1923, 1870, 619, 1869, 352, 2133,
- /* 1560 */ 287, 613, 255, 1954, 596, 90, 92, 597, 288, 1755,
- /* 1570 */ 59, 94, 2022, 625, 548, 2078, 1799, 291, 707, 1953,
- /* 1580 */ 1725, 708, 280, 1988, 1954, 710, 103, 1955, 623, 1957,
- /* 1590 */ 1958, 618, 51, 613, 1972, 315, 295, 300, 323, 293,
- /* 1600 */ 2041, 324, 620, 1917, 314, 2038, 1954, 1923, 1916, 619,
- /* 1610 */ 304, 73, 1915, 1914, 74, 1972, 1911, 380, 381, 1369,
- /* 1620 */ 1370, 181, 385, 620, 1909, 387, 388, 389, 1923, 1908,
- /* 1630 */ 619, 391, 1953, 1907, 393, 1906, 1988, 1972, 1905, 161,
- /* 1640 */ 1955, 623, 1957, 1958, 618, 620, 613, 395, 1344, 397,
- /* 1650 */ 1923, 1343, 619, 1953, 1882, 1881, 403, 1988, 402, 1880,
- /* 1660 */ 306, 1955, 623, 1957, 1958, 618, 1879, 613, 1304, 1845,
- /* 1670 */ 1844, 1842, 1954, 138, 1841, 1953, 1840, 1843, 1839, 1988,
- /* 1680 */ 186, 2079, 162, 1955, 623, 1957, 1958, 618, 1838, 613,
- /* 1690 */ 519, 1836, 1954, 1835, 1834, 420, 1833, 422, 1832, 1831,
- /* 1700 */ 1830, 1829, 1828, 1972, 568, 529, 1827, 1826, 351, 1825,
- /* 1710 */ 1824, 620, 1823, 1822, 1821, 1820, 1923, 1819, 619, 226,
- /* 1720 */ 1818, 140, 1817, 1972, 1816, 1815, 1814, 1813, 1812, 1811,
- /* 1730 */ 1306, 617, 1810, 448, 522, 2132, 1923, 1809, 619, 516,
- /* 1740 */ 1808, 1953, 1671, 193, 225, 1988, 1185, 1954, 313, 1955,
- /* 1750 */ 623, 1957, 1958, 618, 1670, 613, 1668, 1632, 71, 1098,
- /* 1760 */ 196, 1953, 1097, 1954, 1631, 1988, 1895, 170, 312, 1955,
- /* 1770 */ 623, 1957, 1958, 618, 194, 613, 197, 2007, 1972, 1889,
- /* 1780 */ 1943, 66, 463, 361, 65, 465, 620, 1878, 72, 202,
- /* 1790 */ 204, 1923, 1877, 619, 1972, 1862, 1733, 1667, 1131, 363,
- /* 1800 */ 1665, 481, 620, 480, 482, 1663, 1954, 1923, 484, 619,
- /* 1810 */ 486, 485, 1661, 490, 1659, 488, 1953, 489, 492, 1646,
- /* 1820 */ 1988, 494, 1645, 313, 1955, 623, 1957, 1958, 618, 493,
- /* 1830 */ 613, 1628, 1953, 1735, 214, 61, 1988, 1972, 1254, 313,
- /* 1840 */ 1955, 623, 1957, 1958, 618, 620, 613, 1253, 1734, 1954,
- /* 1850 */ 1923, 1176, 619, 1175, 679, 1174, 1168, 681, 1173, 1170,
- /* 1860 */ 1657, 1169, 1167, 341, 1650, 1954, 342, 518, 1648, 343,
- /* 1870 */ 521, 1627, 1626, 523, 525, 533, 1625, 527, 104, 1988,
- /* 1880 */ 1972, 1359, 308, 1955, 623, 1957, 1958, 618, 620, 613,
- /* 1890 */ 531, 1358, 1894, 1923, 26, 619, 1972, 1350, 1361, 1888,
- /* 1900 */ 539, 1876, 1874, 55, 620, 155, 2115, 540, 1565, 1923,
- /* 1910 */ 234, 619, 16, 19, 58, 344, 1954, 545, 1953, 245,
- /* 1920 */ 553, 5, 1988, 30, 28, 297, 1955, 623, 1957, 1958,
- /* 1930 */ 618, 246, 613, 1954, 1953, 555, 238, 1944, 1988, 6,
- /* 1940 */ 240, 298, 1955, 623, 1957, 1958, 618, 1972, 613, 1549,
- /* 1950 */ 163, 63, 20, 244, 21, 620, 1541, 29, 1580, 86,
- /* 1960 */ 1923, 1579, 619, 1585, 1972, 348, 1584, 1583, 349, 258,
- /* 1970 */ 1586, 1516, 620, 57, 1515, 166, 1875, 1923, 1873, 619,
- /* 1980 */ 1872, 22, 594, 263, 1547, 1953, 1861, 265, 1954, 1988,
- /* 1990 */ 17, 270, 299, 1955, 623, 1957, 1958, 618, 56, 613,
- /* 2000 */ 88, 89, 1953, 91, 95, 275, 1988, 1954, 23, 305,
- /* 2010 */ 1955, 623, 1957, 1958, 618, 272, 613, 1468, 10, 1972,
- /* 2020 */ 12, 1467, 1393, 1991, 167, 1424, 179, 620, 624, 626,
- /* 2030 */ 612, 1954, 1923, 1446, 619, 1478, 364, 1444, 1972, 36,
- /* 2040 */ 622, 1443, 15, 24, 630, 25, 620, 1416, 1239, 628,
- /* 2050 */ 631, 1923, 1236, 619, 1233, 633, 634, 1953, 1227, 636,
- /* 2060 */ 1225, 1988, 1972, 637, 309, 1955, 623, 1957, 1958, 618,
- /* 2070 */ 620, 613, 639, 1216, 646, 1923, 1953, 619, 640, 1231,
- /* 2080 */ 1988, 96, 278, 301, 1955, 623, 1957, 1958, 618, 1954,
- /* 2090 */ 613, 1230, 1229, 1228, 97, 1248, 1244, 656, 70, 1129,
- /* 2100 */ 1953, 1164, 1163, 1162, 1988, 1954, 1161, 310, 1955, 623,
- /* 2110 */ 1957, 1958, 618, 1160, 613, 1159, 1157, 1155, 1154, 1153,
- /* 2120 */ 1972, 668, 1183, 279, 1149, 1151, 1150, 1148, 620, 1147,
- /* 2130 */ 1146, 1145, 1144, 1923, 1180, 619, 1972, 1135, 1178, 1141,
- /* 2140 */ 1664, 1140, 690, 1137, 620, 1136, 1134, 689, 1954, 1923,
- /* 2150 */ 1662, 619, 691, 693, 1660, 695, 697, 694, 1953, 699,
- /* 2160 */ 1658, 701, 1988, 703, 1954, 302, 1955, 623, 1957, 1958,
- /* 2170 */ 618, 698, 613, 702, 1953, 282, 705, 1087, 1988, 1972,
- /* 2180 */ 1644, 311, 1955, 623, 1957, 1958, 618, 620, 613, 1624,
- /* 2190 */ 709, 712, 1923, 1379, 619, 1972, 292, 713, 1599, 1599,
- /* 2200 */ 1599, 1599, 1599, 620, 1599, 1599, 1599, 1954, 1923, 1599,
- /* 2210 */ 619, 1599, 1599, 1599, 1599, 1599, 1599, 1953, 1599, 1599,
- /* 2220 */ 1599, 1988, 1599, 1954, 303, 1955, 623, 1957, 1958, 618,
- /* 2230 */ 1599, 613, 1599, 1953, 1599, 1599, 1599, 1988, 1972, 1599,
- /* 2240 */ 316, 1955, 623, 1957, 1958, 618, 620, 613, 1599, 1599,
- /* 2250 */ 1599, 1923, 1599, 619, 1972, 1599, 1599, 1599, 1599, 1599,
- /* 2260 */ 1599, 1599, 620, 1599, 1599, 1599, 1954, 1923, 1599, 619,
- /* 2270 */ 1599, 1599, 1599, 1599, 1599, 1599, 1953, 1599, 1599, 1599,
- /* 2280 */ 1988, 1599, 1599, 317, 1955, 623, 1957, 1958, 618, 1599,
- /* 2290 */ 613, 1599, 1953, 1599, 1599, 1599, 1988, 1972, 1599, 1966,
- /* 2300 */ 1955, 623, 1957, 1958, 618, 620, 613, 1599, 1599, 1599,
- /* 2310 */ 1923, 1599, 619, 1599, 1599, 1599, 1599, 1954, 1599, 1599,
- /* 2320 */ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599,
- /* 2330 */ 1599, 1599, 1599, 1599, 1954, 1953, 1599, 1599, 1599, 1988,
- /* 2340 */ 1599, 1599, 1965, 1955, 623, 1957, 1958, 618, 1972, 613,
- /* 2350 */ 1599, 1599, 1599, 1599, 1599, 1599, 620, 1599, 1599, 1599,
- /* 2360 */ 1954, 1923, 1599, 619, 1599, 1972, 1599, 1599, 1599, 1599,
- /* 2370 */ 1599, 1599, 1599, 620, 1599, 1599, 1599, 1599, 1923, 1599,
- /* 2380 */ 619, 1599, 1599, 1599, 1599, 1599, 1953, 1599, 1599, 1599,
- /* 2390 */ 1988, 1972, 1599, 1964, 1955, 623, 1957, 1958, 618, 620,
- /* 2400 */ 613, 1599, 1599, 1953, 1923, 1599, 619, 1988, 1599, 1599,
- /* 2410 */ 328, 1955, 623, 1957, 1958, 618, 1954, 613, 1599, 1599,
- /* 2420 */ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1953,
- /* 2430 */ 1599, 1599, 1954, 1988, 1599, 1599, 329, 1955, 623, 1957,
- /* 2440 */ 1958, 618, 1599, 613, 1599, 1599, 1599, 1972, 1599, 1599,
- /* 2450 */ 1599, 1599, 1599, 1599, 1599, 620, 1599, 1599, 1599, 1599,
- /* 2460 */ 1923, 1599, 619, 1972, 1599, 1599, 1599, 1599, 1599, 1599,
- /* 2470 */ 1599, 620, 1599, 1599, 1599, 1599, 1923, 1599, 619, 1599,
- /* 2480 */ 1599, 1599, 1599, 1599, 1599, 1953, 1954, 1599, 1599, 1988,
- /* 2490 */ 1599, 1599, 325, 1955, 623, 1957, 1958, 618, 1599, 613,
- /* 2500 */ 1599, 1953, 1954, 1599, 1599, 1988, 1599, 1599, 330, 1955,
- /* 2510 */ 623, 1957, 1958, 618, 1599, 613, 1599, 1972, 1599, 1599,
- /* 2520 */ 1599, 1599, 1599, 1599, 1599, 620, 1599, 1599, 1599, 1599,
- /* 2530 */ 1923, 1599, 619, 1972, 1599, 1599, 1599, 1599, 1599, 1599,
- /* 2540 */ 1599, 620, 1599, 1599, 1599, 1599, 1923, 1599, 619, 1599,
- /* 2550 */ 1599, 1599, 1599, 1599, 1599, 621, 1599, 1599, 1599, 1988,
- /* 2560 */ 1599, 1599, 308, 1955, 623, 1957, 1958, 618, 1599, 613,
- /* 2570 */ 1599, 1953, 1599, 1599, 1599, 1988, 1599, 1599, 307, 1955,
- /* 2580 */ 623, 1957, 1958, 618, 1599, 613,
+ /* 0 */ 35, 276, 460, 1876, 461, 1645, 469, 367, 461, 1645,
+ /* 10 */ 1808, 1810, 45, 43, 1535, 1954, 1874, 590, 1751, 466,
+ /* 20 */ 362, 407, 1385, 38, 37, 462, 1950, 44, 42, 41,
+ /* 30 */ 40, 39, 169, 1465, 459, 1383, 229, 464, 1651, 1792,
+ /* 40 */ 571, 602, 38, 37, 2124, 602, 44, 42, 41, 40,
+ /* 50 */ 39, 8, 602, 334, 1862, 1946, 1952, 345, 1460, 570,
+ /* 60 */ 175, 320, 187, 18, 2125, 572, 613, 38, 37, 1967,
+ /* 70 */ 1391, 44, 42, 41, 40, 39, 468, 1411, 583, 464,
+ /* 80 */ 1651, 38, 37, 45, 43, 44, 42, 41, 40, 39,
+ /* 90 */ 2129, 362, 171, 1385, 1609, 14, 136, 327, 81, 2026,
+ /* 100 */ 1985, 80, 60, 27, 1465, 1802, 1383, 1412, 586, 134,
+ /* 110 */ 159, 1572, 1621, 1936, 603, 619, 48, 710, 125, 124,
+ /* 120 */ 123, 122, 121, 120, 119, 118, 117, 48, 126, 1460,
+ /* 130 */ 100, 160, 1467, 1468, 18, 499, 1716, 443, 1494, 1966,
+ /* 140 */ 64, 1391, 478, 2002, 135, 1762, 103, 1968, 623, 1970,
+ /* 150 */ 1971, 618, 1754, 613, 1410, 2129, 1815, 146, 172, 2124,
+ /* 160 */ 2055, 1440, 1450, 355, 356, 2051, 14, 1466, 1469, 257,
+ /* 170 */ 2063, 582, 1813, 127, 581, 2128, 566, 2124, 177, 2125,
+ /* 180 */ 2127, 2129, 1386, 1595, 1384, 2124, 2081, 528, 710, 1263,
+ /* 190 */ 1264, 260, 570, 175, 1495, 191, 190, 2125, 572, 49,
+ /* 200 */ 526, 2128, 524, 1467, 1468, 2125, 2126, 1389, 1390, 53,
+ /* 210 */ 1439, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 615,
+ /* 220 */ 611, 1458, 1459, 1461, 1462, 1463, 1464, 2, 60, 60,
+ /* 230 */ 89, 60, 1440, 1450, 2070, 1410, 156, 116, 1466, 1469,
+ /* 240 */ 115, 114, 113, 112, 111, 110, 109, 108, 107, 648,
+ /* 250 */ 259, 227, 178, 1386, 2070, 1384, 1528, 38, 37, 1632,
+ /* 260 */ 2067, 44, 42, 41, 40, 39, 34, 360, 1489, 1490,
+ /* 270 */ 1491, 1492, 1493, 1497, 1498, 1499, 1500, 178, 1389, 1390,
+ /* 280 */ 2066, 1439, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449,
+ /* 290 */ 615, 611, 1458, 1459, 1461, 1462, 1463, 1464, 2, 396,
+ /* 300 */ 11, 45, 43, 1936, 1954, 1385, 1539, 1631, 1985, 362,
+ /* 310 */ 408, 1385, 1410, 86, 322, 1950, 565, 532, 1383, 530,
+ /* 320 */ 398, 394, 1465, 409, 1383, 1220, 645, 644, 643, 1224,
+ /* 330 */ 642, 1226, 1227, 641, 1229, 638, 1678, 1235, 635, 1237,
+ /* 340 */ 1238, 632, 629, 213, 1946, 1952, 357, 1460, 1180, 178,
+ /* 350 */ 401, 1936, 18, 1391, 1815, 613, 564, 1532, 164, 1391,
+ /* 360 */ 1113, 366, 1112, 1410, 495, 491, 487, 483, 210, 1630,
+ /* 370 */ 1813, 1629, 45, 43, 1470, 212, 1316, 1317, 178, 178,
+ /* 380 */ 362, 178, 1385, 1182, 14, 44, 42, 41, 40, 39,
+ /* 390 */ 657, 1114, 547, 1465, 1409, 1383, 2124, 1113, 1628, 1112,
+ /* 400 */ 710, 514, 513, 512, 85, 1094, 710, 208, 1610, 131,
+ /* 410 */ 508, 2130, 175, 1936, 507, 1936, 2125, 572, 1460, 506,
+ /* 420 */ 511, 1467, 1468, 1602, 1627, 505, 267, 268, 1114, 116,
+ /* 430 */ 1391, 266, 115, 114, 113, 112, 111, 110, 109, 108,
+ /* 440 */ 107, 583, 1936, 1411, 1096, 1626, 1099, 1100, 1391, 1876,
+ /* 450 */ 1440, 1450, 603, 1441, 1815, 46, 1466, 1469, 11, 353,
+ /* 460 */ 9, 331, 1873, 590, 603, 1386, 54, 1384, 1936, 575,
+ /* 470 */ 1813, 1386, 134, 1384, 207, 201, 1625, 710, 180, 206,
+ /* 480 */ 38, 37, 474, 1762, 44, 42, 41, 40, 39, 1936,
+ /* 490 */ 1389, 1390, 1467, 1468, 84, 1762, 1389, 1390, 199, 1439,
+ /* 500 */ 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 615, 611,
+ /* 510 */ 1458, 1459, 1461, 1462, 1463, 1464, 2, 1758, 1601, 1412,
+ /* 520 */ 1936, 1440, 1450, 583, 1142, 1624, 571, 1466, 1469, 603,
+ /* 530 */ 2124, 585, 173, 2063, 2064, 603, 132, 2068, 1413, 514,
+ /* 540 */ 513, 512, 1386, 405, 1384, 570, 175, 131, 508, 406,
+ /* 550 */ 2125, 572, 507, 1623, 134, 1330, 1331, 506, 511, 1143,
+ /* 560 */ 1762, 1967, 1620, 505, 1809, 1810, 1762, 1389, 1390, 1936,
+ /* 570 */ 1439, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 615,
+ /* 580 */ 611, 1458, 1459, 1461, 1462, 1463, 1464, 2, 45, 43,
+ /* 590 */ 1329, 1332, 1985, 1740, 84, 354, 362, 1936, 1385, 1531,
+ /* 600 */ 620, 1607, 605, 157, 2027, 1936, 1936, 619, 130, 1465,
+ /* 610 */ 228, 1383, 1764, 11, 174, 2063, 2064, 1757, 132, 2068,
+ /* 620 */ 38, 37, 1967, 2070, 44, 42, 41, 40, 39, 519,
+ /* 630 */ 561, 1966, 1413, 603, 1460, 2002, 669, 1562, 103, 1968,
+ /* 640 */ 623, 1970, 1971, 618, 529, 613, 1391, 126, 137, 2065,
+ /* 650 */ 143, 2026, 2055, 1985, 504, 478, 356, 2051, 226, 45,
+ /* 660 */ 43, 620, 259, 603, 1762, 377, 1936, 362, 619, 1385,
+ /* 670 */ 607, 46, 2027, 522, 1619, 1362, 1363, 415, 516, 1618,
+ /* 680 */ 1465, 184, 1383, 225, 1753, 60, 558, 1560, 1561, 1563,
+ /* 690 */ 1564, 576, 1966, 710, 1762, 1950, 2002, 510, 509, 161,
+ /* 700 */ 1968, 623, 1970, 1971, 618, 1460, 613, 547, 1467, 1468,
+ /* 710 */ 1738, 2124, 542, 368, 567, 562, 556, 1391, 1936, 67,
+ /* 720 */ 1739, 157, 66, 1936, 1946, 1952, 2130, 175, 1475, 1747,
+ /* 730 */ 1764, 2125, 572, 1617, 1410, 613, 649, 1440, 1450, 1806,
+ /* 740 */ 548, 2092, 14, 1466, 1469, 603, 38, 37, 1496, 1749,
+ /* 750 */ 44, 42, 41, 40, 39, 31, 169, 2128, 1386, 429,
+ /* 760 */ 1384, 38, 37, 503, 710, 44, 42, 41, 40, 39,
+ /* 770 */ 1745, 400, 657, 399, 1616, 237, 1762, 1936, 1863, 1467,
+ /* 780 */ 1468, 1737, 1615, 1389, 1390, 502, 1439, 1442, 1443, 1444,
+ /* 790 */ 1445, 1446, 1447, 1448, 1449, 615, 611, 1458, 1459, 1461,
+ /* 800 */ 1462, 1463, 1464, 2, 41, 40, 39, 603, 1440, 1450,
+ /* 810 */ 319, 50, 1408, 3, 1466, 1469, 365, 94, 1936, 437,
+ /* 820 */ 32, 430, 450, 232, 157, 449, 1936, 655, 614, 1386,
+ /* 830 */ 1501, 1384, 1614, 1764, 1551, 178, 681, 679, 1762, 1755,
+ /* 840 */ 421, 1955, 451, 647, 157, 423, 148, 147, 652, 651,
+ /* 850 */ 650, 145, 1950, 1765, 1389, 1390, 1410, 1439, 1442, 1443,
+ /* 860 */ 1444, 1445, 1446, 1447, 1448, 1449, 615, 611, 1458, 1459,
+ /* 870 */ 1461, 1462, 1463, 1464, 2, 1441, 1936, 670, 1413, 1732,
+ /* 880 */ 158, 1946, 1952, 33, 1845, 296, 335, 1675, 655, 38,
+ /* 890 */ 37, 1858, 613, 44, 42, 41, 40, 39, 411, 294,
+ /* 900 */ 70, 1815, 183, 69, 1858, 1858, 1622, 148, 147, 652,
+ /* 910 */ 651, 650, 145, 13, 12, 185, 189, 1814, 1099, 1100,
+ /* 920 */ 99, 195, 456, 454, 653, 2095, 654, 1806, 447, 1806,
+ /* 930 */ 96, 442, 441, 440, 439, 436, 435, 434, 433, 432,
+ /* 940 */ 428, 427, 426, 425, 336, 418, 417, 416, 589, 413,
+ /* 950 */ 412, 333, 687, 686, 685, 684, 372, 60, 683, 682,
+ /* 960 */ 138, 677, 676, 675, 674, 673, 672, 671, 150, 667,
+ /* 970 */ 666, 665, 371, 370, 662, 661, 660, 659, 658, 1613,
+ /* 980 */ 254, 603, 655, 1612, 290, 603, 375, 1792, 374, 578,
+ /* 990 */ 547, 2075, 1528, 603, 2124, 476, 102, 1441, 1717, 477,
+ /* 1000 */ 1967, 148, 147, 652, 651, 650, 145, 1759, 1508, 2130,
+ /* 1010 */ 175, 140, 1762, 128, 2125, 572, 1762, 218, 574, 71,
+ /* 1020 */ 216, 236, 220, 1936, 1762, 219, 52, 1936, 547, 603,
+ /* 1030 */ 547, 1985, 2124, 546, 2124, 424, 78, 77, 404, 586,
+ /* 1040 */ 583, 182, 603, 142, 1936, 1394, 619, 2130, 175, 2130,
+ /* 1050 */ 175, 559, 2125, 572, 2125, 572, 543, 1923, 535, 318,
+ /* 1060 */ 1762, 603, 392, 235, 390, 386, 382, 379, 376, 79,
+ /* 1070 */ 1966, 134, 1967, 1762, 2002, 587, 1393, 103, 1968, 623,
+ /* 1080 */ 1970, 1971, 618, 603, 613, 222, 62, 224, 221, 172,
+ /* 1090 */ 223, 2055, 1762, 1665, 211, 356, 2051, 271, 603, 603,
+ /* 1100 */ 547, 1658, 87, 1985, 2124, 384, 1656, 178, 603, 610,
+ /* 1110 */ 339, 620, 598, 600, 1762, 515, 1936, 2082, 619, 2130,
+ /* 1120 */ 175, 1957, 601, 517, 2125, 572, 1967, 603, 520, 1762,
+ /* 1130 */ 1762, 176, 2063, 2064, 241, 132, 2068, 248, 1559, 1762,
+ /* 1140 */ 47, 277, 1966, 1604, 1605, 1986, 2002, 264, 373, 103,
+ /* 1150 */ 1968, 623, 1970, 1971, 618, 663, 613, 1985, 1762, 68,
+ /* 1160 */ 144, 2144, 1867, 2055, 146, 620, 1646, 356, 2051, 1959,
+ /* 1170 */ 1936, 340, 619, 338, 337, 62, 501, 1161, 2089, 664,
+ /* 1180 */ 503, 1652, 1803, 603, 47, 47, 243, 1967, 13, 12,
+ /* 1190 */ 2085, 627, 1327, 584, 1397, 144, 1966, 369, 256, 269,
+ /* 1200 */ 2002, 1159, 502, 103, 1968, 623, 1970, 1971, 618, 253,
+ /* 1210 */ 613, 595, 273, 579, 1762, 2144, 1213, 2055, 1985, 1,
+ /* 1220 */ 146, 356, 2051, 129, 4, 1396, 620, 1502, 359, 358,
+ /* 1230 */ 705, 1936, 2102, 619, 378, 1349, 1451, 289, 1399, 144,
+ /* 1240 */ 383, 332, 284, 1241, 188, 410, 1413, 1245, 414, 1465,
+ /* 1250 */ 1967, 1392, 1868, 1486, 445, 419, 1408, 1966, 438, 444,
+ /* 1260 */ 431, 2002, 1860, 446, 103, 1968, 623, 1970, 1971, 618,
+ /* 1270 */ 1967, 613, 1252, 452, 1460, 1250, 2144, 453, 2055, 192,
+ /* 1280 */ 455, 1985, 356, 2051, 457, 1414, 1391, 458, 467, 620,
+ /* 1290 */ 1416, 149, 470, 554, 1936, 198, 619, 200, 1411, 471,
+ /* 1300 */ 1415, 1985, 472, 1417, 473, 203, 205, 475, 82, 620,
+ /* 1310 */ 83, 479, 1116, 209, 1936, 496, 619, 497, 500, 498,
+ /* 1320 */ 1966, 1752, 321, 106, 2002, 534, 215, 103, 1968, 623,
+ /* 1330 */ 1970, 1971, 618, 609, 613, 536, 285, 230, 1748, 2144,
+ /* 1340 */ 1966, 2055, 217, 151, 2002, 356, 2051, 103, 1968, 623,
+ /* 1350 */ 1970, 1971, 618, 152, 613, 1750, 2118, 1746, 153, 2144,
+ /* 1360 */ 154, 2055, 1913, 1912, 537, 356, 2051, 538, 233, 541,
+ /* 1370 */ 713, 544, 560, 1967, 551, 2086, 2074, 2101, 593, 557,
+ /* 1380 */ 2100, 346, 2096, 7, 283, 563, 569, 249, 239, 242,
+ /* 1390 */ 2077, 165, 247, 552, 550, 250, 549, 347, 1400, 168,
+ /* 1400 */ 1395, 580, 577, 1528, 1985, 703, 699, 695, 691, 281,
+ /* 1410 */ 251, 2147, 620, 255, 252, 2123, 133, 1936, 1412, 619,
+ /* 1420 */ 2071, 588, 261, 1403, 1405, 350, 591, 596, 286, 287,
+ /* 1430 */ 592, 1884, 1967, 1883, 1882, 352, 611, 1458, 1459, 1461,
+ /* 1440 */ 1462, 1463, 1464, 1966, 288, 101, 1763, 2002, 274, 597,
+ /* 1450 */ 103, 1968, 623, 1970, 1971, 618, 59, 613, 91, 93,
+ /* 1460 */ 2036, 95, 2030, 1985, 2055, 625, 280, 1807, 356, 2051,
+ /* 1470 */ 1733, 620, 291, 706, 707, 709, 1936, 315, 619, 51,
+ /* 1480 */ 295, 599, 1930, 323, 324, 293, 1967, 1929, 300, 75,
+ /* 1490 */ 1928, 314, 304, 1927, 76, 1924, 380, 381, 1377, 1378,
+ /* 1500 */ 181, 1922, 1966, 385, 387, 388, 2002, 389, 1921, 103,
+ /* 1510 */ 1968, 623, 1970, 1971, 618, 391, 613, 1985, 1920, 393,
+ /* 1520 */ 262, 2028, 1919, 2055, 395, 620, 397, 356, 2051, 1918,
+ /* 1530 */ 1936, 1352, 619, 1895, 1351, 1894, 402, 1356, 1893, 231,
+ /* 1540 */ 403, 1892, 1853, 1307, 1852, 1850, 139, 1967, 1849, 1848,
+ /* 1550 */ 1851, 1847, 1846, 1844, 1843, 1842, 1966, 186, 420, 1841,
+ /* 1560 */ 2002, 422, 1840, 103, 1968, 623, 1970, 1971, 618, 1839,
+ /* 1570 */ 613, 1838, 1837, 1836, 1835, 606, 1834, 2055, 1985, 1833,
+ /* 1580 */ 1832, 356, 2051, 1831, 1830, 1829, 620, 1828, 1827, 1826,
+ /* 1590 */ 1825, 1936, 1824, 619, 448, 1817, 1816, 1309, 141, 1823,
+ /* 1600 */ 1822, 1821, 1820, 1819, 1818, 1967, 1680, 1679, 1677, 1641,
+ /* 1610 */ 196, 170, 1188, 1956, 1640, 193, 194, 1966, 1908, 1102,
+ /* 1620 */ 73, 2002, 197, 1902, 104, 1968, 623, 1970, 1971, 618,
+ /* 1630 */ 1101, 613, 1891, 463, 1890, 204, 1985, 74, 2055, 1870,
+ /* 1640 */ 465, 1741, 2054, 2051, 620, 1676, 1674, 480, 1672, 1936,
+ /* 1650 */ 202, 619, 482, 1670, 484, 1135, 486, 488, 481, 1967,
+ /* 1660 */ 490, 1668, 492, 485, 494, 1655, 1654, 1637, 489, 1743,
+ /* 1670 */ 1257, 1256, 493, 1742, 61, 1966, 1171, 1179, 1178, 2002,
+ /* 1680 */ 678, 680, 104, 1968, 623, 1970, 1971, 618, 1967, 613,
+ /* 1690 */ 1985, 1177, 1176, 1173, 1172, 1170, 2055, 1666, 620, 214,
+ /* 1700 */ 608, 2051, 341, 1936, 1659, 619, 342, 1657, 343, 521,
+ /* 1710 */ 1636, 523, 518, 1635, 525, 1634, 527, 1367, 105, 1985,
+ /* 1720 */ 1366, 531, 1369, 26, 1907, 1358, 55, 617, 1901, 621,
+ /* 1730 */ 539, 155, 1936, 2002, 619, 1889, 104, 1968, 623, 1970,
+ /* 1740 */ 1971, 618, 1887, 613, 2129, 28, 1967, 19, 16, 553,
+ /* 1750 */ 2055, 1574, 246, 555, 326, 2051, 58, 63, 1966, 238,
+ /* 1760 */ 245, 1957, 2002, 30, 240, 312, 1968, 623, 1970, 1971,
+ /* 1770 */ 618, 616, 613, 604, 2020, 21, 163, 1985, 1589, 20,
+ /* 1780 */ 17, 1588, 348, 1558, 244, 620, 29, 1593, 1550, 1594,
+ /* 1790 */ 1936, 88, 619, 540, 234, 1595, 344, 1592, 349, 1888,
+ /* 1800 */ 1967, 57, 545, 258, 56, 1525, 166, 1524, 5, 1886,
+ /* 1810 */ 6, 1885, 22, 594, 263, 265, 1966, 1556, 270, 1869,
+ /* 1820 */ 2002, 65, 90, 162, 1968, 623, 1970, 1971, 618, 92,
+ /* 1830 */ 613, 1985, 96, 275, 272, 23, 12, 1401, 1432, 620,
+ /* 1840 */ 2005, 167, 179, 612, 1936, 1455, 619, 1453, 36, 626,
+ /* 1850 */ 624, 1234, 364, 15, 1967, 630, 1452, 1424, 1487, 24,
+ /* 1860 */ 25, 622, 1242, 628, 633, 1239, 631, 636, 639, 1236,
+ /* 1870 */ 1966, 634, 1477, 1230, 2002, 573, 2145, 104, 1968, 623,
+ /* 1880 */ 1970, 1971, 618, 637, 613, 1985, 1228, 640, 1219, 1233,
+ /* 1890 */ 278, 2055, 646, 620, 1232, 97, 2052, 1231, 1936, 98,
+ /* 1900 */ 619, 10, 1251, 1476, 1247, 72, 1967, 1133, 656, 1167,
+ /* 1910 */ 1166, 1165, 1164, 1163, 1162, 1160, 1158, 1186, 1157, 1156,
+ /* 1920 */ 668, 1154, 1967, 1153, 1966, 1152, 1151, 1183, 2002, 279,
+ /* 1930 */ 1150, 161, 1968, 623, 1970, 1971, 618, 1985, 613, 1139,
+ /* 1940 */ 1149, 1148, 1181, 1145, 1144, 620, 1141, 1140, 1138, 1673,
+ /* 1950 */ 1936, 688, 619, 1985, 690, 1671, 692, 694, 689, 1669,
+ /* 1960 */ 696, 620, 693, 698, 1667, 700, 1936, 697, 619, 1653,
+ /* 1970 */ 701, 702, 704, 2093, 1091, 1633, 1966, 712, 282, 708,
+ /* 1980 */ 2002, 1608, 1387, 306, 1968, 623, 1970, 1971, 618, 711,
+ /* 1990 */ 613, 1608, 1966, 292, 1608, 1608, 2002, 1608, 1608, 162,
+ /* 2000 */ 1968, 623, 1970, 1971, 618, 1608, 613, 1608, 1608, 1608,
+ /* 2010 */ 1608, 1967, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2020 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 568, 1608, 1967,
+ /* 2030 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2040 */ 1608, 1608, 1985, 1608, 1608, 1608, 1608, 351, 1608, 1608,
+ /* 2050 */ 620, 1608, 2146, 1608, 1608, 1936, 1608, 619, 1608, 1608,
+ /* 2060 */ 1985, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 617, 1608,
+ /* 2070 */ 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608,
+ /* 2080 */ 1608, 1966, 1608, 1967, 1608, 2002, 1608, 1608, 313, 1968,
+ /* 2090 */ 623, 1970, 1971, 618, 1608, 613, 1608, 1608, 1608, 1966,
+ /* 2100 */ 1967, 1608, 1608, 2002, 1608, 1608, 312, 1968, 623, 1970,
+ /* 2110 */ 1971, 618, 1608, 613, 1985, 2021, 1608, 1608, 1608, 361,
+ /* 2120 */ 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619,
+ /* 2130 */ 1608, 1985, 1608, 1608, 1608, 1608, 363, 1608, 1608, 620,
+ /* 2140 */ 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608,
+ /* 2150 */ 1608, 1608, 1967, 1966, 1608, 1608, 1608, 2002, 1608, 1608,
+ /* 2160 */ 313, 1968, 623, 1970, 1971, 618, 1608, 613, 1967, 1608,
+ /* 2170 */ 1966, 1608, 1608, 1608, 2002, 1608, 1608, 313, 1968, 623,
+ /* 2180 */ 1970, 1971, 618, 1985, 613, 1608, 1608, 1608, 1608, 1608,
+ /* 2190 */ 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619, 1985,
+ /* 2200 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608, 1608,
+ /* 2210 */ 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608, 1608,
+ /* 2220 */ 1967, 1608, 533, 1608, 1608, 1608, 2002, 1608, 1608, 308,
+ /* 2230 */ 1968, 623, 1970, 1971, 618, 1608, 613, 1608, 1966, 1608,
+ /* 2240 */ 1608, 1608, 2002, 1608, 1608, 297, 1968, 623, 1970, 1971,
+ /* 2250 */ 618, 1985, 613, 1608, 1608, 1608, 1608, 1608, 1608, 620,
+ /* 2260 */ 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608,
+ /* 2270 */ 1608, 1608, 1608, 1608, 1967, 1608, 1608, 1608, 1608, 1608,
+ /* 2280 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2290 */ 1966, 1608, 1608, 1608, 2002, 1967, 1608, 298, 1968, 623,
+ /* 2300 */ 1970, 1971, 618, 1608, 613, 1985, 1608, 1608, 1608, 1608,
+ /* 2310 */ 1608, 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608,
+ /* 2320 */ 619, 1608, 1608, 1608, 1608, 1608, 1985, 1608, 1608, 1608,
+ /* 2330 */ 1608, 1608, 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936,
+ /* 2340 */ 1608, 619, 1608, 1608, 1966, 1608, 1608, 1608, 2002, 1608,
+ /* 2350 */ 1608, 299, 1968, 623, 1970, 1971, 618, 1608, 613, 1608,
+ /* 2360 */ 1608, 1608, 1608, 1608, 1608, 1966, 1608, 1608, 1608, 2002,
+ /* 2370 */ 1608, 1967, 305, 1968, 623, 1970, 1971, 618, 1608, 613,
+ /* 2380 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1967,
+ /* 2390 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2400 */ 1608, 1608, 1985, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2410 */ 620, 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608,
+ /* 2420 */ 1985, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608,
+ /* 2430 */ 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608,
+ /* 2440 */ 1608, 1966, 1608, 1967, 1608, 2002, 1608, 1608, 309, 1968,
+ /* 2450 */ 623, 1970, 1971, 618, 1608, 613, 1608, 1608, 1608, 1966,
+ /* 2460 */ 1967, 1608, 1608, 2002, 1608, 1608, 301, 1968, 623, 1970,
+ /* 2470 */ 1971, 618, 1608, 613, 1985, 1608, 1608, 1608, 1608, 1608,
+ /* 2480 */ 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619,
+ /* 2490 */ 1608, 1985, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620,
+ /* 2500 */ 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608,
+ /* 2510 */ 1608, 1608, 1967, 1966, 1608, 1608, 1608, 2002, 1608, 1608,
+ /* 2520 */ 310, 1968, 623, 1970, 1971, 618, 1608, 613, 1967, 1608,
+ /* 2530 */ 1966, 1608, 1608, 1608, 2002, 1608, 1608, 302, 1968, 623,
+ /* 2540 */ 1970, 1971, 618, 1985, 613, 1608, 1608, 1608, 1608, 1608,
+ /* 2550 */ 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619, 1985,
+ /* 2560 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608, 1608,
+ /* 2570 */ 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608, 1608,
+ /* 2580 */ 1967, 1608, 1966, 1608, 1608, 1608, 2002, 1608, 1608, 311,
+ /* 2590 */ 1968, 623, 1970, 1971, 618, 1608, 613, 1608, 1966, 1608,
+ /* 2600 */ 1608, 1608, 2002, 1967, 1608, 303, 1968, 623, 1970, 1971,
+ /* 2610 */ 618, 1985, 613, 1608, 1608, 1608, 1608, 1608, 1608, 620,
+ /* 2620 */ 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608,
+ /* 2630 */ 1608, 1608, 1608, 1608, 1985, 1608, 1608, 1608, 1608, 1608,
+ /* 2640 */ 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619,
+ /* 2650 */ 1966, 1608, 1608, 1608, 2002, 1967, 1608, 316, 1968, 623,
+ /* 2660 */ 1970, 1971, 618, 1608, 613, 1608, 1608, 1608, 1608, 1608,
+ /* 2670 */ 1608, 1608, 1608, 1966, 1608, 1608, 1608, 2002, 1608, 1608,
+ /* 2680 */ 317, 1968, 623, 1970, 1971, 618, 1985, 613, 1608, 1608,
+ /* 2690 */ 1608, 1608, 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936,
+ /* 2700 */ 1608, 619, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2710 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1967, 1608,
+ /* 2720 */ 1608, 1608, 1608, 1608, 1608, 1966, 1608, 1608, 1608, 2002,
+ /* 2730 */ 1608, 1608, 1979, 1968, 623, 1970, 1971, 618, 1608, 613,
+ /* 2740 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1985,
+ /* 2750 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608, 1608,
+ /* 2760 */ 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608, 1608,
+ /* 2770 */ 1967, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2780 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1966, 1967,
+ /* 2790 */ 1608, 1608, 2002, 1608, 1608, 1978, 1968, 623, 1970, 1971,
+ /* 2800 */ 618, 1985, 613, 1608, 1608, 1608, 1608, 1608, 1608, 620,
+ /* 2810 */ 1608, 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608,
+ /* 2820 */ 1985, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608,
+ /* 2830 */ 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608,
+ /* 2840 */ 1966, 1967, 1608, 1608, 2002, 1608, 1608, 1977, 1968, 623,
+ /* 2850 */ 1970, 1971, 618, 1608, 613, 1608, 1608, 1967, 1608, 1966,
+ /* 2860 */ 1608, 1608, 1608, 2002, 1608, 1608, 328, 1968, 623, 1970,
+ /* 2870 */ 1971, 618, 1985, 613, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2880 */ 620, 1608, 1608, 1608, 1608, 1936, 1608, 619, 1985, 1608,
+ /* 2890 */ 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608, 1608, 1608,
+ /* 2900 */ 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608, 1608, 1967,
+ /* 2910 */ 1608, 1966, 1608, 1608, 1608, 2002, 1608, 1608, 329, 1968,
+ /* 2920 */ 623, 1970, 1971, 618, 1608, 613, 1608, 1966, 1608, 1608,
+ /* 2930 */ 1608, 2002, 1967, 1608, 325, 1968, 623, 1970, 1971, 618,
+ /* 2940 */ 1985, 613, 1608, 1608, 1608, 1608, 1608, 1608, 620, 1608,
+ /* 2950 */ 1608, 1608, 1608, 1936, 1608, 619, 1608, 1608, 1608, 1608,
+ /* 2960 */ 1608, 1608, 1608, 1985, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 2970 */ 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608, 619, 1966,
+ /* 2980 */ 1608, 1608, 1608, 2002, 1967, 1608, 330, 1968, 623, 1970,
+ /* 2990 */ 1971, 618, 1608, 613, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 3000 */ 1608, 1608, 621, 1608, 1608, 1608, 2002, 1608, 1608, 308,
+ /* 3010 */ 1968, 623, 1970, 1971, 618, 1985, 613, 1608, 1608, 1608,
+ /* 3020 */ 1608, 1608, 1608, 620, 1608, 1608, 1608, 1608, 1936, 1608,
+ /* 3030 */ 619, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 3040 */ 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608,
+ /* 3050 */ 1608, 1608, 1608, 1608, 1966, 1608, 1608, 1608, 2002, 1608,
+ /* 3060 */ 1608, 307, 1968, 623, 1970, 1971, 618, 1608, 613,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 327, 331, 359, 333, 334, 429, 373, 418, 419, 433,
- /* 10 */ 342, 358, 12, 13, 14, 347, 383, 429, 365, 386,
- /* 20 */ 20, 433, 22, 0, 448, 449, 335, 374, 350, 453,
- /* 30 */ 454, 358, 326, 33, 328, 35, 358, 449, 20, 366,
- /* 40 */ 349, 453, 454, 387, 371, 367, 373, 24, 25, 26,
- /* 50 */ 27, 28, 29, 30, 31, 32, 14, 366, 58, 20,
- /* 60 */ 8, 9, 20, 63, 12, 13, 14, 15, 16, 396,
- /* 70 */ 70, 357, 331, 400, 333, 334, 403, 404, 405, 406,
- /* 80 */ 407, 408, 429, 410, 370, 429, 433, 402, 415, 433,
- /* 90 */ 417, 4, 360, 358, 421, 422, 96, 96, 335, 327,
- /* 100 */ 360, 448, 449, 371, 448, 449, 453, 454, 435, 453,
- /* 110 */ 454, 371, 349, 428, 379, 380, 443, 21, 118, 356,
- /* 120 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 366,
- /* 130 */ 358, 399, 400, 133, 134, 96, 324, 358, 366, 399,
- /* 140 */ 400, 401, 410, 371, 365, 373, 12, 13, 0, 97,
- /* 150 */ 410, 133, 134, 374, 20, 0, 22, 369, 358, 327,
- /* 160 */ 372, 373, 162, 163, 20, 365, 22, 33, 396, 35,
- /* 170 */ 335, 20, 400, 22, 374, 403, 404, 405, 406, 407,
- /* 180 */ 408, 181, 410, 183, 349, 413, 35, 415, 416, 417,
- /* 190 */ 358, 58, 58, 421, 422, 51, 48, 63, 366, 387,
- /* 200 */ 20, 366, 51, 371, 70, 373, 206, 207, 20, 209,
+ /* 0 */ 420, 421, 332, 374, 334, 335, 332, 370, 334, 335,
+ /* 10 */ 373, 374, 12, 13, 14, 361, 387, 388, 360, 14,
+ /* 20 */ 20, 336, 22, 8, 9, 20, 372, 12, 13, 14,
+ /* 30 */ 15, 16, 359, 33, 333, 35, 352, 336, 337, 355,
+ /* 40 */ 431, 20, 8, 9, 435, 20, 12, 13, 14, 15,
+ /* 50 */ 16, 39, 20, 380, 381, 401, 402, 403, 58, 450,
+ /* 60 */ 451, 376, 58, 63, 455, 456, 412, 8, 9, 328,
+ /* 70 */ 70, 12, 13, 14, 15, 16, 333, 20, 336, 336,
+ /* 80 */ 337, 8, 9, 12, 13, 12, 13, 14, 15, 16,
+ /* 90 */ 3, 20, 358, 22, 0, 95, 415, 63, 94, 418,
+ /* 100 */ 359, 97, 95, 44, 33, 371, 35, 20, 367, 367,
+ /* 110 */ 327, 96, 329, 372, 336, 374, 95, 117, 24, 25,
+ /* 120 */ 26, 27, 28, 29, 30, 31, 32, 95, 350, 58,
+ /* 130 */ 340, 343, 132, 133, 63, 357, 348, 79, 104, 398,
+ /* 140 */ 4, 70, 62, 402, 354, 367, 405, 406, 407, 408,
+ /* 150 */ 409, 410, 362, 412, 20, 431, 359, 44, 417, 435,
+ /* 160 */ 419, 161, 162, 366, 423, 424, 95, 167, 168, 427,
+ /* 170 */ 428, 429, 375, 431, 432, 451, 20, 435, 437, 455,
+ /* 180 */ 456, 431, 182, 96, 184, 435, 445, 21, 117, 132,
+ /* 190 */ 133, 58, 450, 451, 160, 137, 138, 455, 456, 95,
+ /* 200 */ 34, 451, 36, 132, 133, 455, 456, 207, 208, 96,
/* 210 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- /* 220 */ 220, 221, 222, 223, 224, 225, 226, 227, 396, 96,
- /* 230 */ 96, 98, 400, 327, 128, 403, 404, 405, 406, 407,
- /* 240 */ 408, 429, 410, 20, 107, 433, 245, 415, 341, 417,
- /* 250 */ 4, 167, 118, 421, 422, 12, 13, 14, 15, 16,
- /* 260 */ 448, 449, 355, 108, 358, 453, 454, 133, 134, 127,
- /* 270 */ 128, 364, 366, 4, 132, 443, 96, 371, 20, 373,
- /* 280 */ 12, 13, 127, 128, 129, 130, 131, 132, 20, 43,
- /* 290 */ 22, 45, 46, 327, 188, 189, 162, 163, 192, 335,
- /* 300 */ 194, 33, 396, 35, 332, 21, 400, 335, 336, 403,
- /* 310 */ 404, 405, 406, 407, 408, 181, 410, 183, 34, 96,
- /* 320 */ 36, 415, 0, 417, 358, 0, 58, 421, 422, 373,
- /* 330 */ 366, 63, 366, 246, 250, 251, 252, 371, 70, 373,
- /* 340 */ 206, 207, 386, 209, 210, 211, 212, 213, 214, 215,
- /* 350 */ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
- /* 360 */ 226, 227, 396, 229, 96, 96, 400, 372, 373, 403,
- /* 370 */ 404, 405, 406, 407, 408, 429, 410, 96, 245, 433,
- /* 380 */ 358, 415, 96, 417, 62, 327, 118, 421, 422, 425,
- /* 390 */ 426, 427, 335, 429, 430, 449, 374, 433, 432, 453,
- /* 400 */ 454, 133, 134, 8, 9, 335, 127, 12, 13, 14,
- /* 410 */ 15, 16, 448, 449, 12, 13, 14, 453, 454, 349,
- /* 420 */ 162, 163, 20, 62, 22, 245, 356, 327, 14, 371,
- /* 430 */ 162, 163, 375, 108, 20, 33, 366, 35, 402, 332,
- /* 440 */ 8, 9, 335, 336, 12, 13, 14, 15, 16, 181,
- /* 450 */ 20, 183, 127, 128, 129, 130, 131, 132, 358, 14,
- /* 460 */ 58, 180, 58, 182, 428, 20, 366, 387, 245, 190,
- /* 470 */ 191, 371, 70, 373, 206, 207, 44, 209, 210, 211,
- /* 480 */ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
- /* 490 */ 222, 223, 224, 225, 226, 227, 396, 358, 96, 95,
- /* 500 */ 400, 20, 98, 403, 404, 405, 406, 407, 408, 429,
- /* 510 */ 410, 344, 345, 433, 245, 415, 358, 417, 108, 380,
- /* 520 */ 118, 421, 422, 327, 366, 20, 245, 341, 448, 449,
- /* 530 */ 33, 245, 432, 453, 454, 133, 134, 127, 128, 129,
- /* 540 */ 130, 131, 132, 1, 2, 48, 335, 327, 12, 13,
- /* 550 */ 364, 54, 55, 56, 57, 58, 20, 0, 22, 335,
- /* 560 */ 349, 344, 345, 405, 162, 163, 176, 371, 173, 33,
- /* 570 */ 20, 35, 0, 349, 8, 9, 162, 366, 12, 13,
- /* 580 */ 14, 15, 16, 181, 402, 183, 20, 197, 198, 80,
- /* 590 */ 366, 371, 95, 21, 58, 98, 24, 25, 26, 27,
- /* 600 */ 28, 29, 30, 31, 32, 206, 70, 162, 206, 207,
- /* 610 */ 428, 209, 210, 211, 212, 213, 214, 215, 216, 217,
- /* 620 */ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
- /* 630 */ 12, 13, 96, 3, 20, 335, 35, 8, 9, 97,
- /* 640 */ 22, 12, 13, 14, 15, 16, 62, 138, 139, 349,
- /* 650 */ 20, 33, 358, 35, 118, 256, 257, 258, 259, 260,
- /* 660 */ 327, 367, 165, 166, 269, 168, 366, 2, 171, 133,
- /* 670 */ 134, 70, 327, 8, 9, 339, 58, 12, 13, 14,
- /* 680 */ 15, 16, 12, 13, 187, 14, 15, 16, 70, 353,
- /* 690 */ 20, 229, 22, 65, 66, 67, 19, 361, 162, 163,
- /* 700 */ 20, 73, 74, 33, 371, 35, 78, 335, 335, 152,
- /* 710 */ 33, 0, 84, 85, 164, 161, 371, 181, 90, 183,
- /* 720 */ 327, 349, 349, 327, 22, 48, 97, 97, 58, 20,
- /* 730 */ 164, 54, 55, 56, 57, 58, 118, 35, 366, 366,
- /* 740 */ 70, 413, 206, 207, 416, 209, 210, 211, 212, 213,
- /* 750 */ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- /* 760 */ 224, 225, 226, 227, 371, 327, 96, 371, 359, 335,
- /* 770 */ 350, 335, 95, 62, 70, 98, 350, 229, 358, 231,
- /* 780 */ 18, 0, 20, 349, 358, 349, 232, 367, 118, 27,
- /* 790 */ 327, 327, 30, 367, 164, 33, 242, 45, 46, 181,
- /* 800 */ 366, 183, 366, 133, 134, 327, 327, 2, 131, 371,
- /* 810 */ 48, 70, 50, 8, 9, 53, 327, 12, 13, 14,
- /* 820 */ 15, 16, 8, 9, 206, 207, 12, 13, 14, 15,
- /* 830 */ 16, 327, 162, 163, 371, 371, 218, 219, 220, 221,
- /* 840 */ 222, 223, 224, 39, 164, 168, 65, 66, 67, 371,
- /* 850 */ 371, 181, 339, 183, 73, 74, 327, 95, 0, 78,
- /* 860 */ 371, 414, 185, 416, 187, 84, 85, 366, 414, 107,
- /* 870 */ 416, 90, 3, 164, 361, 371, 206, 207, 377, 209,
- /* 880 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- /* 890 */ 220, 221, 222, 223, 224, 225, 226, 227, 351, 137,
- /* 900 */ 371, 354, 140, 141, 142, 143, 144, 145, 146, 147,
- /* 910 */ 148, 149, 150, 151, 152, 153, 154, 155, 156, 47,
- /* 920 */ 158, 159, 160, 65, 66, 67, 68, 69, 335, 71,
- /* 930 */ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
- /* 940 */ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
- /* 950 */ 92, 18, 327, 327, 20, 58, 23, 8, 9, 366,
- /* 960 */ 22, 12, 13, 14, 15, 16, 360, 335, 96, 108,
- /* 970 */ 37, 38, 368, 35, 41, 371, 335, 371, 164, 8,
- /* 980 */ 9, 349, 327, 12, 13, 14, 15, 16, 366, 366,
- /* 990 */ 349, 130, 59, 60, 61, 98, 371, 371, 366, 377,
- /* 1000 */ 377, 368, 37, 44, 371, 399, 400, 366, 70, 327,
- /* 1010 */ 335, 368, 63, 358, 371, 359, 410, 424, 425, 426,
- /* 1020 */ 427, 366, 429, 430, 349, 346, 371, 348, 373, 96,
- /* 1030 */ 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- /* 1040 */ 119, 366, 121, 122, 123, 124, 125, 126, 244, 351,
- /* 1050 */ 327, 396, 354, 371, 105, 400, 118, 335, 403, 404,
- /* 1060 */ 405, 406, 407, 408, 99, 410, 101, 102, 135, 104,
- /* 1070 */ 415, 349, 417, 108, 327, 35, 421, 422, 335, 243,
- /* 1080 */ 244, 335, 0, 335, 335, 335, 335, 432, 366, 42,
- /* 1090 */ 107, 44, 349, 44, 371, 130, 162, 349, 349, 349,
- /* 1100 */ 349, 42, 63, 44, 22, 358, 173, 174, 175, 366,
- /* 1110 */ 161, 178, 366, 366, 366, 366, 366, 366, 371, 181,
- /* 1120 */ 373, 183, 35, 100, 100, 335, 103, 103, 335, 196,
- /* 1130 */ 133, 134, 199, 264, 201, 202, 203, 204, 205, 44,
- /* 1140 */ 157, 44, 349, 396, 206, 207, 97, 400, 44, 391,
- /* 1150 */ 403, 404, 405, 406, 407, 408, 366, 410, 0, 366,
- /* 1160 */ 387, 327, 415, 100, 417, 44, 103, 100, 421, 422,
- /* 1170 */ 103, 425, 426, 427, 0, 429, 430, 359, 245, 432,
- /* 1180 */ 22, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- /* 1190 */ 241, 242, 358, 164, 97, 328, 22, 359, 169, 44,
- /* 1200 */ 366, 97, 429, 359, 327, 371, 433, 373, 44, 44,
- /* 1210 */ 359, 44, 44, 1, 2, 425, 426, 427, 97, 429,
- /* 1220 */ 430, 448, 449, 183, 381, 266, 453, 454, 347, 457,
- /* 1230 */ 396, 13, 327, 44, 400, 358, 44, 403, 404, 405,
- /* 1240 */ 406, 407, 408, 366, 410, 206, 13, 0, 371, 415,
- /* 1250 */ 373, 417, 97, 35, 44, 421, 422, 96, 35, 446,
- /* 1260 */ 337, 97, 97, 358, 97, 97, 432, 106, 35, 440,
- /* 1270 */ 183, 366, 44, 396, 358, 327, 371, 400, 373, 44,
- /* 1280 */ 403, 404, 405, 406, 407, 408, 97, 410, 44, 97,
- /* 1290 */ 44, 337, 415, 70, 417, 381, 49, 334, 421, 422,
- /* 1300 */ 387, 396, 370, 381, 431, 400, 358, 97, 403, 404,
- /* 1310 */ 405, 406, 407, 408, 366, 410, 450, 423, 434, 371,
- /* 1320 */ 415, 373, 417, 247, 398, 97, 421, 422, 48, 179,
- /* 1330 */ 387, 389, 97, 397, 42, 378, 20, 381, 378, 161,
- /* 1340 */ 327, 97, 429, 97, 396, 376, 433, 20, 400, 335,
- /* 1350 */ 335, 403, 404, 405, 406, 407, 408, 378, 410, 94,
- /* 1360 */ 376, 448, 449, 268, 327, 417, 453, 454, 376, 421,
- /* 1370 */ 422, 358, 429, 343, 20, 329, 433, 335, 335, 366,
- /* 1380 */ 335, 329, 20, 327, 371, 341, 373, 393, 20, 373,
- /* 1390 */ 336, 448, 449, 20, 341, 358, 453, 454, 388, 341,
- /* 1400 */ 336, 341, 341, 366, 335, 52, 341, 341, 371, 396,
- /* 1410 */ 373, 338, 338, 400, 358, 329, 403, 404, 405, 406,
- /* 1420 */ 407, 408, 366, 410, 335, 195, 358, 371, 358, 373,
- /* 1430 */ 417, 329, 381, 396, 421, 422, 327, 400, 358, 358,
- /* 1440 */ 403, 404, 405, 406, 407, 408, 358, 410, 358, 358,
- /* 1450 */ 358, 358, 396, 339, 358, 371, 400, 327, 358, 403,
- /* 1460 */ 404, 405, 406, 407, 408, 371, 410, 358, 186, 392,
- /* 1470 */ 395, 393, 373, 417, 339, 366, 335, 421, 422, 381,
- /* 1480 */ 371, 371, 373, 371, 255, 254, 371, 439, 358, 384,
- /* 1490 */ 384, 371, 455, 456, 439, 261, 366, 172, 248, 442,
- /* 1500 */ 263, 371, 262, 373, 265, 396, 398, 244, 437, 400,
- /* 1510 */ 327, 360, 403, 404, 405, 406, 407, 408, 409, 410,
- /* 1520 */ 411, 412, 371, 438, 441, 270, 396, 267, 366, 20,
- /* 1530 */ 400, 452, 335, 403, 404, 405, 406, 407, 408, 402,
- /* 1540 */ 410, 358, 439, 436, 336, 339, 371, 384, 371, 366,
- /* 1550 */ 399, 400, 401, 371, 371, 371, 373, 371, 371, 458,
- /* 1560 */ 384, 410, 451, 327, 166, 339, 339, 382, 354, 366,
- /* 1570 */ 96, 96, 420, 362, 444, 445, 371, 335, 36, 396,
- /* 1580 */ 348, 330, 339, 400, 327, 329, 403, 404, 405, 406,
- /* 1590 */ 407, 408, 390, 410, 358, 394, 325, 352, 385, 340,
- /* 1600 */ 417, 385, 366, 0, 352, 422, 327, 371, 0, 373,
- /* 1610 */ 352, 188, 0, 0, 42, 358, 0, 35, 200, 35,
- /* 1620 */ 35, 35, 200, 366, 0, 35, 35, 200, 371, 0,
- /* 1630 */ 373, 200, 396, 0, 35, 0, 400, 358, 0, 403,
- /* 1640 */ 404, 405, 406, 407, 408, 366, 410, 22, 183, 35,
- /* 1650 */ 371, 181, 373, 396, 0, 0, 176, 400, 177, 0,
- /* 1660 */ 403, 404, 405, 406, 407, 408, 0, 410, 47, 0,
- /* 1670 */ 0, 0, 327, 42, 0, 396, 0, 0, 0, 400,
- /* 1680 */ 152, 445, 403, 404, 405, 406, 407, 408, 0, 410,
- /* 1690 */ 4, 0, 327, 0, 0, 35, 0, 152, 0, 0,
- /* 1700 */ 0, 0, 0, 358, 447, 19, 0, 0, 363, 0,
- /* 1710 */ 0, 366, 0, 0, 0, 0, 371, 0, 373, 33,
- /* 1720 */ 0, 42, 0, 358, 0, 0, 0, 0, 0, 0,
- /* 1730 */ 22, 366, 0, 136, 48, 456, 371, 0, 373, 53,
- /* 1740 */ 0, 396, 0, 58, 58, 400, 35, 327, 403, 404,
- /* 1750 */ 405, 406, 407, 408, 0, 410, 0, 0, 39, 14,
- /* 1760 */ 42, 396, 14, 327, 0, 400, 0, 44, 403, 404,
- /* 1770 */ 405, 406, 407, 408, 58, 410, 40, 412, 358, 0,
- /* 1780 */ 47, 95, 47, 363, 98, 47, 366, 0, 39, 39,
- /* 1790 */ 172, 371, 0, 373, 358, 0, 0, 0, 64, 363,
- /* 1800 */ 0, 48, 366, 35, 39, 0, 327, 371, 35, 373,
- /* 1810 */ 39, 48, 0, 39, 0, 35, 396, 48, 35, 0,
- /* 1820 */ 400, 39, 0, 403, 404, 405, 406, 407, 408, 48,
- /* 1830 */ 410, 0, 396, 0, 103, 105, 400, 358, 35, 403,
- /* 1840 */ 404, 405, 406, 407, 408, 366, 410, 22, 0, 327,
- /* 1850 */ 371, 35, 373, 35, 44, 35, 22, 44, 35, 35,
- /* 1860 */ 0, 35, 35, 22, 0, 327, 22, 50, 0, 22,
- /* 1870 */ 35, 0, 0, 35, 35, 396, 0, 22, 20, 400,
- /* 1880 */ 358, 35, 403, 404, 405, 406, 407, 408, 366, 410,
- /* 1890 */ 193, 35, 0, 371, 96, 373, 358, 35, 97, 0,
- /* 1900 */ 22, 0, 0, 164, 366, 184, 3, 164, 97, 371,
- /* 1910 */ 166, 373, 249, 44, 44, 164, 327, 170, 396, 44,
- /* 1920 */ 228, 169, 400, 44, 96, 403, 404, 405, 406, 407,
- /* 1930 */ 408, 47, 410, 327, 396, 253, 96, 47, 400, 169,
- /* 1940 */ 97, 403, 404, 405, 406, 407, 408, 358, 410, 97,
- /* 1950 */ 96, 3, 249, 96, 44, 366, 97, 96, 35, 96,
- /* 1960 */ 371, 35, 373, 97, 358, 35, 35, 35, 35, 47,
- /* 1970 */ 97, 97, 366, 44, 97, 47, 0, 371, 0, 373,
- /* 1980 */ 0, 96, 167, 97, 97, 396, 0, 96, 327, 400,
- /* 1990 */ 249, 96, 403, 404, 405, 406, 407, 408, 243, 410,
- /* 2000 */ 96, 39, 396, 96, 106, 47, 400, 327, 44, 403,
- /* 2010 */ 404, 405, 406, 407, 408, 165, 410, 228, 230, 358,
- /* 2020 */ 2, 228, 22, 96, 47, 22, 47, 366, 107, 35,
- /* 2030 */ 96, 327, 371, 97, 373, 206, 35, 97, 358, 96,
- /* 2040 */ 208, 97, 96, 96, 35, 96, 366, 97, 97, 96,
- /* 2050 */ 96, 371, 97, 373, 97, 35, 96, 396, 97, 35,
- /* 2060 */ 97, 400, 358, 96, 403, 404, 405, 406, 407, 408,
- /* 2070 */ 366, 410, 35, 22, 108, 371, 396, 373, 96, 120,
- /* 2080 */ 400, 96, 44, 403, 404, 405, 406, 407, 408, 327,
- /* 2090 */ 410, 120, 120, 120, 96, 35, 22, 63, 96, 64,
- /* 2100 */ 396, 35, 35, 35, 400, 327, 35, 403, 404, 405,
- /* 2110 */ 406, 407, 408, 35, 410, 35, 35, 35, 35, 35,
- /* 2120 */ 358, 93, 70, 44, 22, 35, 35, 35, 366, 22,
- /* 2130 */ 35, 35, 35, 371, 70, 373, 358, 22, 35, 35,
- /* 2140 */ 0, 35, 48, 35, 366, 35, 35, 35, 327, 371,
- /* 2150 */ 0, 373, 39, 35, 0, 39, 35, 48, 396, 39,
- /* 2160 */ 0, 35, 400, 39, 327, 403, 404, 405, 406, 407,
- /* 2170 */ 408, 48, 410, 48, 396, 22, 35, 35, 400, 358,
- /* 2180 */ 0, 403, 404, 405, 406, 407, 408, 366, 410, 0,
- /* 2190 */ 21, 21, 371, 22, 373, 358, 22, 20, 459, 459,
- /* 2200 */ 459, 459, 459, 366, 459, 459, 459, 327, 371, 459,
- /* 2210 */ 373, 459, 459, 459, 459, 459, 459, 396, 459, 459,
- /* 2220 */ 459, 400, 459, 327, 403, 404, 405, 406, 407, 408,
- /* 2230 */ 459, 410, 459, 396, 459, 459, 459, 400, 358, 459,
- /* 2240 */ 403, 404, 405, 406, 407, 408, 366, 410, 459, 459,
- /* 2250 */ 459, 371, 459, 373, 358, 459, 459, 459, 459, 459,
- /* 2260 */ 459, 459, 366, 459, 459, 459, 327, 371, 459, 373,
- /* 2270 */ 459, 459, 459, 459, 459, 459, 396, 459, 459, 459,
- /* 2280 */ 400, 459, 459, 403, 404, 405, 406, 407, 408, 459,
- /* 2290 */ 410, 459, 396, 459, 459, 459, 400, 358, 459, 403,
- /* 2300 */ 404, 405, 406, 407, 408, 366, 410, 459, 459, 459,
- /* 2310 */ 371, 459, 373, 459, 459, 459, 459, 327, 459, 459,
- /* 2320 */ 459, 459, 459, 459, 459, 459, 459, 459, 459, 459,
- /* 2330 */ 459, 459, 459, 459, 327, 396, 459, 459, 459, 400,
- /* 2340 */ 459, 459, 403, 404, 405, 406, 407, 408, 358, 410,
- /* 2350 */ 459, 459, 459, 459, 459, 459, 366, 459, 459, 459,
- /* 2360 */ 327, 371, 459, 373, 459, 358, 459, 459, 459, 459,
- /* 2370 */ 459, 459, 459, 366, 459, 459, 459, 459, 371, 459,
- /* 2380 */ 373, 459, 459, 459, 459, 459, 396, 459, 459, 459,
- /* 2390 */ 400, 358, 459, 403, 404, 405, 406, 407, 408, 366,
- /* 2400 */ 410, 459, 459, 396, 371, 459, 373, 400, 459, 459,
- /* 2410 */ 403, 404, 405, 406, 407, 408, 327, 410, 459, 459,
- /* 2420 */ 459, 459, 459, 459, 459, 459, 459, 459, 459, 396,
- /* 2430 */ 459, 459, 327, 400, 459, 459, 403, 404, 405, 406,
- /* 2440 */ 407, 408, 459, 410, 459, 459, 459, 358, 459, 459,
- /* 2450 */ 459, 459, 459, 459, 459, 366, 459, 459, 459, 459,
- /* 2460 */ 371, 459, 373, 358, 459, 459, 459, 459, 459, 459,
- /* 2470 */ 459, 366, 459, 459, 459, 459, 371, 459, 373, 459,
- /* 2480 */ 459, 459, 459, 459, 459, 396, 327, 459, 459, 400,
- /* 2490 */ 459, 459, 403, 404, 405, 406, 407, 408, 459, 410,
- /* 2500 */ 459, 396, 327, 459, 459, 400, 459, 459, 403, 404,
- /* 2510 */ 405, 406, 407, 408, 459, 410, 459, 358, 459, 459,
- /* 2520 */ 459, 459, 459, 459, 459, 366, 459, 459, 459, 459,
- /* 2530 */ 371, 459, 373, 358, 459, 459, 459, 459, 459, 459,
- /* 2540 */ 459, 366, 459, 459, 459, 459, 371, 459, 373, 459,
- /* 2550 */ 459, 459, 459, 459, 459, 396, 459, 459, 459, 400,
- /* 2560 */ 459, 459, 403, 404, 405, 406, 407, 408, 459, 410,
- /* 2570 */ 459, 396, 459, 459, 459, 400, 459, 459, 403, 404,
- /* 2580 */ 405, 406, 407, 408, 459, 410,
+ /* 220 */ 220, 221, 222, 223, 224, 225, 226, 227, 95, 95,
+ /* 230 */ 97, 95, 161, 162, 404, 20, 163, 21, 167, 168,
+ /* 240 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 106,
+ /* 250 */ 163, 127, 245, 182, 404, 184, 244, 8, 9, 328,
+ /* 260 */ 430, 12, 13, 14, 15, 16, 232, 233, 234, 235,
+ /* 270 */ 236, 237, 238, 239, 240, 241, 242, 245, 207, 208,
+ /* 280 */ 430, 210, 211, 212, 213, 214, 215, 216, 217, 218,
+ /* 290 */ 219, 220, 221, 222, 223, 224, 225, 226, 227, 177,
+ /* 300 */ 229, 12, 13, 372, 361, 22, 14, 328, 359, 20,
+ /* 310 */ 22, 22, 20, 189, 190, 372, 367, 193, 35, 195,
+ /* 320 */ 198, 199, 33, 35, 35, 108, 109, 110, 111, 112,
+ /* 330 */ 113, 114, 115, 116, 117, 118, 0, 120, 121, 122,
+ /* 340 */ 123, 124, 125, 33, 401, 402, 403, 58, 35, 245,
+ /* 350 */ 389, 372, 63, 70, 359, 412, 407, 4, 48, 70,
+ /* 360 */ 20, 366, 22, 20, 54, 55, 56, 57, 58, 328,
+ /* 370 */ 375, 328, 12, 13, 14, 35, 161, 162, 245, 245,
+ /* 380 */ 20, 245, 22, 70, 95, 12, 13, 14, 15, 16,
+ /* 390 */ 62, 51, 431, 33, 20, 35, 435, 20, 328, 22,
+ /* 400 */ 117, 65, 66, 67, 94, 4, 117, 97, 0, 73,
+ /* 410 */ 74, 450, 451, 372, 78, 372, 455, 456, 58, 83,
+ /* 420 */ 84, 132, 133, 174, 328, 89, 126, 127, 51, 21,
+ /* 430 */ 70, 131, 24, 25, 26, 27, 28, 29, 30, 31,
+ /* 440 */ 32, 336, 372, 20, 43, 328, 45, 46, 70, 374,
+ /* 450 */ 161, 162, 336, 161, 359, 95, 167, 168, 229, 384,
+ /* 460 */ 231, 366, 387, 388, 336, 182, 350, 184, 372, 44,
+ /* 470 */ 375, 182, 367, 184, 164, 165, 328, 117, 350, 169,
+ /* 480 */ 8, 9, 172, 367, 12, 13, 14, 15, 16, 372,
+ /* 490 */ 207, 208, 132, 133, 342, 367, 207, 208, 188, 210,
+ /* 500 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
+ /* 510 */ 221, 222, 223, 224, 225, 226, 227, 365, 269, 20,
+ /* 520 */ 372, 161, 162, 336, 35, 328, 431, 167, 168, 336,
+ /* 530 */ 435, 426, 427, 428, 429, 336, 431, 432, 20, 65,
+ /* 540 */ 66, 67, 182, 350, 184, 450, 451, 73, 74, 350,
+ /* 550 */ 455, 456, 78, 328, 367, 132, 133, 83, 84, 70,
+ /* 560 */ 367, 328, 328, 89, 373, 374, 367, 207, 208, 372,
+ /* 570 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ /* 580 */ 220, 221, 222, 223, 224, 225, 226, 227, 12, 13,
+ /* 590 */ 167, 168, 359, 0, 342, 351, 20, 372, 22, 246,
+ /* 600 */ 367, 325, 416, 359, 418, 372, 372, 374, 356, 33,
+ /* 610 */ 126, 35, 368, 229, 427, 428, 429, 365, 431, 432,
+ /* 620 */ 8, 9, 328, 404, 12, 13, 14, 15, 16, 4,
+ /* 630 */ 166, 398, 20, 336, 58, 402, 70, 207, 405, 406,
+ /* 640 */ 407, 408, 409, 410, 19, 412, 70, 350, 415, 430,
+ /* 650 */ 417, 418, 419, 359, 357, 62, 423, 424, 33, 12,
+ /* 660 */ 13, 367, 163, 336, 367, 389, 372, 20, 374, 22,
+ /* 670 */ 416, 95, 418, 48, 328, 191, 192, 350, 53, 328,
+ /* 680 */ 33, 163, 35, 58, 361, 95, 256, 257, 258, 259,
+ /* 690 */ 260, 266, 398, 117, 367, 372, 402, 345, 346, 405,
+ /* 700 */ 406, 407, 408, 409, 410, 58, 412, 431, 132, 133,
+ /* 710 */ 0, 435, 393, 351, 250, 251, 252, 70, 372, 94,
+ /* 720 */ 0, 359, 97, 372, 401, 402, 450, 451, 14, 360,
+ /* 730 */ 368, 455, 456, 328, 20, 412, 369, 161, 162, 372,
+ /* 740 */ 446, 447, 95, 167, 168, 336, 8, 9, 160, 360,
+ /* 750 */ 12, 13, 14, 15, 16, 2, 359, 3, 182, 350,
+ /* 760 */ 184, 8, 9, 107, 117, 12, 13, 14, 15, 16,
+ /* 770 */ 360, 181, 62, 183, 328, 163, 367, 372, 381, 132,
+ /* 780 */ 133, 0, 328, 207, 208, 129, 210, 211, 212, 213,
+ /* 790 */ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ /* 800 */ 224, 225, 226, 227, 14, 15, 16, 336, 161, 162,
+ /* 810 */ 18, 42, 20, 44, 167, 168, 351, 340, 372, 27,
+ /* 820 */ 232, 350, 30, 360, 359, 33, 372, 107, 360, 182,
+ /* 830 */ 242, 184, 328, 368, 96, 245, 345, 346, 367, 362,
+ /* 840 */ 48, 361, 50, 360, 359, 53, 126, 127, 128, 129,
+ /* 850 */ 130, 131, 372, 368, 207, 208, 20, 210, 211, 212,
+ /* 860 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ /* 870 */ 223, 224, 225, 226, 227, 161, 372, 347, 20, 349,
+ /* 880 */ 18, 401, 402, 2, 0, 23, 94, 0, 107, 8,
+ /* 890 */ 9, 367, 412, 12, 13, 14, 15, 16, 106, 37,
+ /* 900 */ 38, 359, 378, 41, 367, 367, 329, 126, 127, 128,
+ /* 910 */ 129, 130, 131, 1, 2, 378, 378, 375, 45, 46,
+ /* 920 */ 95, 59, 60, 61, 369, 382, 369, 372, 136, 372,
+ /* 930 */ 105, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ /* 940 */ 148, 149, 150, 151, 152, 153, 154, 155, 389, 157,
+ /* 950 */ 158, 159, 65, 66, 67, 68, 69, 95, 71, 72,
+ /* 960 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ /* 970 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 328,
+ /* 980 */ 459, 336, 107, 328, 352, 336, 389, 355, 389, 44,
+ /* 990 */ 431, 243, 244, 336, 435, 350, 134, 161, 348, 350,
+ /* 1000 */ 328, 126, 127, 128, 129, 130, 131, 350, 96, 450,
+ /* 1010 */ 451, 42, 367, 44, 455, 456, 367, 99, 264, 106,
+ /* 1020 */ 102, 163, 99, 372, 367, 102, 163, 372, 431, 336,
+ /* 1030 */ 431, 359, 435, 170, 435, 151, 174, 175, 176, 367,
+ /* 1040 */ 336, 179, 336, 350, 372, 35, 374, 450, 451, 450,
+ /* 1050 */ 451, 448, 455, 456, 455, 456, 350, 0, 389, 197,
+ /* 1060 */ 367, 336, 200, 58, 202, 203, 204, 205, 206, 156,
+ /* 1070 */ 398, 367, 328, 367, 402, 350, 35, 405, 406, 407,
+ /* 1080 */ 408, 409, 410, 336, 412, 99, 44, 99, 102, 417,
+ /* 1090 */ 102, 419, 367, 0, 338, 423, 424, 350, 336, 336,
+ /* 1100 */ 431, 0, 97, 359, 435, 48, 0, 245, 336, 63,
+ /* 1110 */ 37, 367, 350, 350, 367, 22, 372, 445, 374, 450,
+ /* 1120 */ 451, 47, 350, 22, 455, 456, 328, 336, 22, 367,
+ /* 1130 */ 367, 427, 428, 429, 44, 431, 432, 442, 96, 367,
+ /* 1140 */ 44, 350, 398, 132, 133, 359, 402, 44, 338, 405,
+ /* 1150 */ 406, 407, 408, 409, 410, 13, 412, 359, 367, 44,
+ /* 1160 */ 44, 417, 382, 419, 44, 367, 335, 423, 424, 95,
+ /* 1170 */ 372, 98, 374, 100, 101, 44, 103, 35, 434, 13,
+ /* 1180 */ 107, 0, 371, 336, 44, 44, 96, 328, 1, 2,
+ /* 1190 */ 382, 44, 96, 433, 184, 44, 398, 350, 452, 96,
+ /* 1200 */ 402, 35, 129, 405, 406, 407, 408, 409, 410, 425,
+ /* 1210 */ 412, 96, 96, 268, 367, 417, 96, 419, 359, 436,
+ /* 1220 */ 44, 423, 424, 44, 247, 184, 367, 96, 12, 13,
+ /* 1230 */ 49, 372, 434, 374, 400, 180, 96, 96, 22, 44,
+ /* 1240 */ 48, 399, 391, 96, 42, 379, 20, 96, 379, 33,
+ /* 1250 */ 328, 35, 382, 207, 160, 377, 20, 398, 379, 377,
+ /* 1260 */ 336, 402, 336, 377, 405, 406, 407, 408, 409, 410,
+ /* 1270 */ 328, 412, 96, 93, 58, 96, 417, 344, 419, 336,
+ /* 1280 */ 336, 359, 423, 424, 336, 20, 70, 330, 330, 367,
+ /* 1290 */ 20, 96, 395, 434, 372, 342, 374, 342, 20, 374,
+ /* 1300 */ 20, 359, 337, 20, 390, 342, 342, 337, 342, 367,
+ /* 1310 */ 342, 336, 52, 342, 372, 339, 374, 339, 359, 330,
+ /* 1320 */ 398, 359, 330, 336, 402, 196, 359, 405, 406, 407,
+ /* 1330 */ 408, 409, 410, 117, 412, 397, 395, 340, 359, 417,
+ /* 1340 */ 398, 419, 359, 359, 402, 423, 424, 405, 406, 407,
+ /* 1350 */ 408, 409, 410, 359, 412, 359, 434, 359, 359, 417,
+ /* 1360 */ 359, 419, 372, 372, 187, 423, 424, 394, 340, 374,
+ /* 1370 */ 19, 336, 255, 328, 372, 382, 434, 441, 254, 372,
+ /* 1380 */ 441, 372, 382, 261, 33, 372, 173, 440, 385, 385,
+ /* 1390 */ 444, 441, 443, 263, 262, 439, 248, 270, 182, 48,
+ /* 1400 */ 184, 267, 265, 244, 359, 54, 55, 56, 57, 58,
+ /* 1410 */ 438, 460, 367, 453, 400, 454, 367, 372, 20, 374,
+ /* 1420 */ 404, 336, 340, 207, 208, 337, 372, 165, 385, 385,
+ /* 1430 */ 372, 372, 328, 372, 372, 372, 220, 221, 222, 223,
+ /* 1440 */ 224, 225, 226, 398, 355, 94, 367, 402, 97, 383,
+ /* 1450 */ 405, 406, 407, 408, 409, 410, 95, 412, 340, 340,
+ /* 1460 */ 422, 95, 417, 359, 419, 363, 340, 372, 423, 424,
+ /* 1470 */ 349, 367, 336, 36, 331, 330, 372, 396, 374, 392,
+ /* 1480 */ 326, 130, 0, 386, 386, 341, 328, 0, 353, 189,
+ /* 1490 */ 0, 353, 353, 0, 42, 0, 35, 201, 35, 35,
+ /* 1500 */ 35, 0, 398, 201, 35, 35, 402, 201, 0, 405,
+ /* 1510 */ 406, 407, 408, 409, 410, 201, 412, 359, 0, 35,
+ /* 1520 */ 169, 417, 0, 419, 22, 367, 35, 423, 424, 0,
+ /* 1530 */ 372, 184, 374, 0, 182, 0, 178, 186, 0, 188,
+ /* 1540 */ 177, 0, 0, 47, 0, 0, 42, 328, 0, 0,
+ /* 1550 */ 0, 0, 0, 0, 0, 0, 398, 151, 35, 0,
+ /* 1560 */ 402, 151, 0, 405, 406, 407, 408, 409, 410, 0,
+ /* 1570 */ 412, 0, 0, 0, 0, 417, 0, 419, 359, 0,
+ /* 1580 */ 0, 423, 424, 0, 0, 0, 367, 0, 0, 0,
+ /* 1590 */ 0, 372, 0, 374, 135, 0, 0, 22, 42, 0,
+ /* 1600 */ 0, 0, 0, 0, 0, 328, 0, 0, 0, 0,
+ /* 1610 */ 42, 44, 35, 47, 0, 58, 58, 398, 0, 14,
+ /* 1620 */ 39, 402, 40, 0, 405, 406, 407, 408, 409, 410,
+ /* 1630 */ 14, 412, 0, 47, 0, 173, 359, 39, 419, 0,
+ /* 1640 */ 47, 0, 423, 424, 367, 0, 0, 35, 0, 372,
+ /* 1650 */ 39, 374, 39, 0, 35, 64, 39, 35, 48, 328,
+ /* 1660 */ 39, 0, 35, 48, 39, 0, 0, 0, 48, 0,
+ /* 1670 */ 35, 22, 48, 0, 104, 398, 22, 35, 35, 402,
+ /* 1680 */ 44, 44, 405, 406, 407, 408, 409, 410, 328, 412,
+ /* 1690 */ 359, 35, 35, 35, 35, 35, 419, 0, 367, 102,
+ /* 1700 */ 423, 424, 22, 372, 0, 374, 22, 0, 22, 35,
+ /* 1710 */ 0, 35, 50, 0, 35, 0, 22, 35, 20, 359,
+ /* 1720 */ 35, 194, 96, 95, 0, 35, 163, 367, 0, 398,
+ /* 1730 */ 22, 185, 372, 402, 374, 0, 405, 406, 407, 408,
+ /* 1740 */ 409, 410, 0, 412, 3, 95, 328, 44, 249, 228,
+ /* 1750 */ 419, 96, 47, 253, 423, 424, 44, 3, 398, 95,
+ /* 1760 */ 44, 47, 402, 44, 96, 405, 406, 407, 408, 409,
+ /* 1770 */ 410, 411, 412, 413, 414, 44, 95, 359, 35, 249,
+ /* 1780 */ 249, 35, 35, 96, 95, 367, 95, 35, 96, 96,
+ /* 1790 */ 372, 95, 374, 163, 165, 96, 163, 35, 35, 0,
+ /* 1800 */ 328, 44, 171, 47, 243, 96, 47, 96, 170, 0,
+ /* 1810 */ 170, 0, 95, 166, 96, 95, 398, 96, 95, 0,
+ /* 1820 */ 402, 95, 39, 405, 406, 407, 408, 409, 410, 95,
+ /* 1830 */ 412, 359, 105, 47, 164, 44, 2, 22, 22, 367,
+ /* 1840 */ 95, 47, 47, 95, 372, 96, 374, 96, 95, 35,
+ /* 1850 */ 106, 119, 35, 95, 328, 35, 96, 96, 207, 95,
+ /* 1860 */ 95, 209, 96, 95, 35, 96, 95, 35, 35, 96,
+ /* 1870 */ 398, 95, 228, 96, 402, 457, 458, 405, 406, 407,
+ /* 1880 */ 408, 409, 410, 95, 412, 359, 96, 95, 22, 119,
+ /* 1890 */ 44, 419, 107, 367, 119, 95, 424, 119, 372, 95,
+ /* 1900 */ 374, 230, 35, 228, 22, 95, 328, 64, 63, 35,
+ /* 1910 */ 35, 35, 35, 35, 35, 35, 35, 70, 35, 35,
+ /* 1920 */ 92, 35, 328, 35, 398, 35, 22, 70, 402, 44,
+ /* 1930 */ 35, 405, 406, 407, 408, 409, 410, 359, 412, 22,
+ /* 1940 */ 35, 35, 35, 35, 35, 367, 35, 35, 35, 0,
+ /* 1950 */ 372, 35, 374, 359, 39, 0, 35, 39, 48, 0,
+ /* 1960 */ 35, 367, 48, 39, 0, 35, 372, 48, 374, 0,
+ /* 1970 */ 48, 39, 35, 447, 35, 0, 398, 20, 22, 21,
+ /* 1980 */ 402, 461, 22, 405, 406, 407, 408, 409, 410, 21,
+ /* 1990 */ 412, 461, 398, 22, 461, 461, 402, 461, 461, 405,
+ /* 2000 */ 406, 407, 408, 409, 410, 461, 412, 461, 461, 461,
+ /* 2010 */ 461, 328, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2020 */ 461, 461, 461, 461, 461, 461, 461, 449, 461, 328,
+ /* 2030 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2040 */ 461, 461, 359, 461, 461, 461, 461, 364, 461, 461,
+ /* 2050 */ 367, 461, 458, 461, 461, 372, 461, 374, 461, 461,
+ /* 2060 */ 359, 461, 461, 461, 461, 461, 461, 461, 367, 461,
+ /* 2070 */ 461, 461, 461, 372, 461, 374, 461, 461, 461, 461,
+ /* 2080 */ 461, 398, 461, 328, 461, 402, 461, 461, 405, 406,
+ /* 2090 */ 407, 408, 409, 410, 461, 412, 461, 461, 461, 398,
+ /* 2100 */ 328, 461, 461, 402, 461, 461, 405, 406, 407, 408,
+ /* 2110 */ 409, 410, 461, 412, 359, 414, 461, 461, 461, 364,
+ /* 2120 */ 461, 461, 367, 461, 461, 461, 461, 372, 461, 374,
+ /* 2130 */ 461, 359, 461, 461, 461, 461, 364, 461, 461, 367,
+ /* 2140 */ 461, 461, 461, 461, 372, 461, 374, 461, 461, 461,
+ /* 2150 */ 461, 461, 328, 398, 461, 461, 461, 402, 461, 461,
+ /* 2160 */ 405, 406, 407, 408, 409, 410, 461, 412, 328, 461,
+ /* 2170 */ 398, 461, 461, 461, 402, 461, 461, 405, 406, 407,
+ /* 2180 */ 408, 409, 410, 359, 412, 461, 461, 461, 461, 461,
+ /* 2190 */ 461, 367, 461, 461, 461, 461, 372, 461, 374, 359,
+ /* 2200 */ 461, 461, 461, 461, 461, 461, 461, 367, 461, 461,
+ /* 2210 */ 461, 461, 372, 461, 374, 461, 461, 461, 461, 461,
+ /* 2220 */ 328, 461, 398, 461, 461, 461, 402, 461, 461, 405,
+ /* 2230 */ 406, 407, 408, 409, 410, 461, 412, 461, 398, 461,
+ /* 2240 */ 461, 461, 402, 461, 461, 405, 406, 407, 408, 409,
+ /* 2250 */ 410, 359, 412, 461, 461, 461, 461, 461, 461, 367,
+ /* 2260 */ 461, 461, 461, 461, 372, 461, 374, 461, 461, 461,
+ /* 2270 */ 461, 461, 461, 461, 328, 461, 461, 461, 461, 461,
+ /* 2280 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2290 */ 398, 461, 461, 461, 402, 328, 461, 405, 406, 407,
+ /* 2300 */ 408, 409, 410, 461, 412, 359, 461, 461, 461, 461,
+ /* 2310 */ 461, 461, 461, 367, 461, 461, 461, 461, 372, 461,
+ /* 2320 */ 374, 461, 461, 461, 461, 461, 359, 461, 461, 461,
+ /* 2330 */ 461, 461, 461, 461, 367, 461, 461, 461, 461, 372,
+ /* 2340 */ 461, 374, 461, 461, 398, 461, 461, 461, 402, 461,
+ /* 2350 */ 461, 405, 406, 407, 408, 409, 410, 461, 412, 461,
+ /* 2360 */ 461, 461, 461, 461, 461, 398, 461, 461, 461, 402,
+ /* 2370 */ 461, 328, 405, 406, 407, 408, 409, 410, 461, 412,
+ /* 2380 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 328,
+ /* 2390 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2400 */ 461, 461, 359, 461, 461, 461, 461, 461, 461, 461,
+ /* 2410 */ 367, 461, 461, 461, 461, 372, 461, 374, 461, 461,
+ /* 2420 */ 359, 461, 461, 461, 461, 461, 461, 461, 367, 461,
+ /* 2430 */ 461, 461, 461, 372, 461, 374, 461, 461, 461, 461,
+ /* 2440 */ 461, 398, 461, 328, 461, 402, 461, 461, 405, 406,
+ /* 2450 */ 407, 408, 409, 410, 461, 412, 461, 461, 461, 398,
+ /* 2460 */ 328, 461, 461, 402, 461, 461, 405, 406, 407, 408,
+ /* 2470 */ 409, 410, 461, 412, 359, 461, 461, 461, 461, 461,
+ /* 2480 */ 461, 461, 367, 461, 461, 461, 461, 372, 461, 374,
+ /* 2490 */ 461, 359, 461, 461, 461, 461, 461, 461, 461, 367,
+ /* 2500 */ 461, 461, 461, 461, 372, 461, 374, 461, 461, 461,
+ /* 2510 */ 461, 461, 328, 398, 461, 461, 461, 402, 461, 461,
+ /* 2520 */ 405, 406, 407, 408, 409, 410, 461, 412, 328, 461,
+ /* 2530 */ 398, 461, 461, 461, 402, 461, 461, 405, 406, 407,
+ /* 2540 */ 408, 409, 410, 359, 412, 461, 461, 461, 461, 461,
+ /* 2550 */ 461, 367, 461, 461, 461, 461, 372, 461, 374, 359,
+ /* 2560 */ 461, 461, 461, 461, 461, 461, 461, 367, 461, 461,
+ /* 2570 */ 461, 461, 372, 461, 374, 461, 461, 461, 461, 461,
+ /* 2580 */ 328, 461, 398, 461, 461, 461, 402, 461, 461, 405,
+ /* 2590 */ 406, 407, 408, 409, 410, 461, 412, 461, 398, 461,
+ /* 2600 */ 461, 461, 402, 328, 461, 405, 406, 407, 408, 409,
+ /* 2610 */ 410, 359, 412, 461, 461, 461, 461, 461, 461, 367,
+ /* 2620 */ 461, 461, 461, 461, 372, 461, 374, 461, 461, 461,
+ /* 2630 */ 461, 461, 461, 461, 359, 461, 461, 461, 461, 461,
+ /* 2640 */ 461, 461, 367, 461, 461, 461, 461, 372, 461, 374,
+ /* 2650 */ 398, 461, 461, 461, 402, 328, 461, 405, 406, 407,
+ /* 2660 */ 408, 409, 410, 461, 412, 461, 461, 461, 461, 461,
+ /* 2670 */ 461, 461, 461, 398, 461, 461, 461, 402, 461, 461,
+ /* 2680 */ 405, 406, 407, 408, 409, 410, 359, 412, 461, 461,
+ /* 2690 */ 461, 461, 461, 461, 367, 461, 461, 461, 461, 372,
+ /* 2700 */ 461, 374, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2710 */ 461, 461, 461, 461, 461, 461, 461, 461, 328, 461,
+ /* 2720 */ 461, 461, 461, 461, 461, 398, 461, 461, 461, 402,
+ /* 2730 */ 461, 461, 405, 406, 407, 408, 409, 410, 461, 412,
+ /* 2740 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 359,
+ /* 2750 */ 461, 461, 461, 461, 461, 461, 461, 367, 461, 461,
+ /* 2760 */ 461, 461, 372, 461, 374, 461, 461, 461, 461, 461,
+ /* 2770 */ 328, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 2780 */ 461, 461, 461, 461, 461, 461, 461, 461, 398, 328,
+ /* 2790 */ 461, 461, 402, 461, 461, 405, 406, 407, 408, 409,
+ /* 2800 */ 410, 359, 412, 461, 461, 461, 461, 461, 461, 367,
+ /* 2810 */ 461, 461, 461, 461, 372, 461, 374, 461, 461, 461,
+ /* 2820 */ 359, 461, 461, 461, 461, 461, 461, 461, 367, 461,
+ /* 2830 */ 461, 461, 461, 372, 461, 374, 461, 461, 461, 461,
+ /* 2840 */ 398, 328, 461, 461, 402, 461, 461, 405, 406, 407,
+ /* 2850 */ 408, 409, 410, 461, 412, 461, 461, 328, 461, 398,
+ /* 2860 */ 461, 461, 461, 402, 461, 461, 405, 406, 407, 408,
+ /* 2870 */ 409, 410, 359, 412, 461, 461, 461, 461, 461, 461,
+ /* 2880 */ 367, 461, 461, 461, 461, 372, 461, 374, 359, 461,
+ /* 2890 */ 461, 461, 461, 461, 461, 461, 367, 461, 461, 461,
+ /* 2900 */ 461, 372, 461, 374, 461, 461, 461, 461, 461, 328,
+ /* 2910 */ 461, 398, 461, 461, 461, 402, 461, 461, 405, 406,
+ /* 2920 */ 407, 408, 409, 410, 461, 412, 461, 398, 461, 461,
+ /* 2930 */ 461, 402, 328, 461, 405, 406, 407, 408, 409, 410,
+ /* 2940 */ 359, 412, 461, 461, 461, 461, 461, 461, 367, 461,
+ /* 2950 */ 461, 461, 461, 372, 461, 374, 461, 461, 461, 461,
+ /* 2960 */ 461, 461, 461, 359, 461, 461, 461, 461, 461, 461,
+ /* 2970 */ 461, 367, 461, 461, 461, 461, 372, 461, 374, 398,
+ /* 2980 */ 461, 461, 461, 402, 328, 461, 405, 406, 407, 408,
+ /* 2990 */ 409, 410, 461, 412, 461, 461, 461, 461, 461, 461,
+ /* 3000 */ 461, 461, 398, 461, 461, 461, 402, 461, 461, 405,
+ /* 3010 */ 406, 407, 408, 409, 410, 359, 412, 461, 461, 461,
+ /* 3020 */ 461, 461, 461, 367, 461, 461, 461, 461, 372, 461,
+ /* 3030 */ 374, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 3040 */ 461, 461, 461, 461, 461, 461, 461, 461, 461, 461,
+ /* 3050 */ 461, 461, 461, 461, 398, 461, 461, 461, 402, 461,
+ /* 3060 */ 461, 405, 406, 407, 408, 409, 410, 461, 412, 325,
+ /* 3070 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3080 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3090 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3100 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3110 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3120 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3130 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3140 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3150 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3160 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3170 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3180 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3190 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3200 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3210 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3220 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3230 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3240 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3250 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3260 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3270 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3280 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3290 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3300 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3310 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3320 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3330 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3340 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3350 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3360 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3370 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3380 */ 325, 325, 325, 325, 325, 325, 325, 325, 325, 325,
+ /* 3390 */ 325, 325, 325, 325,
};
-#define YY_SHIFT_COUNT (714)
+#define YY_SHIFT_COUNT (713)
#define YY_SHIFT_MIN (0)
-#define YY_SHIFT_MAX (2189)
+#define YY_SHIFT_MAX (1975)
static const unsigned short int yy_shift_ofst[] = {
- /* 0 */ 933, 0, 134, 0, 268, 268, 268, 268, 268, 268,
- /* 10 */ 268, 268, 268, 268, 268, 402, 536, 536, 670, 536,
- /* 20 */ 536, 536, 536, 536, 536, 536, 536, 536, 536, 536,
- /* 30 */ 536, 536, 536, 536, 536, 536, 536, 536, 536, 536,
- /* 40 */ 536, 536, 536, 536, 536, 536, 536, 536, 180, 223,
- /* 50 */ 39, 281, 133, 1, 286, 1, 39, 39, 618, 618,
- /* 60 */ 1, 618, 618, 269, 1, 188, 188, 246, 246, 258,
- /* 70 */ 18, 42, 42, 188, 188, 188, 188, 188, 188, 188,
- /* 80 */ 188, 188, 188, 361, 188, 188, 430, 188, 481, 188,
- /* 90 */ 188, 505, 188, 188, 505, 188, 505, 505, 505, 188,
- /* 100 */ 584, 762, 949, 949, 96, 628, 938, 938, 938, 938,
- /* 110 */ 938, 938, 938, 938, 938, 938, 938, 938, 938, 938,
- /* 120 */ 938, 938, 938, 938, 938, 965, 630, 258, 18, 322,
- /* 130 */ 601, 550, 550, 550, 711, 548, 548, 601, 614, 614,
- /* 140 */ 614, 137, 481, 462, 505, 704, 505, 704, 704, 137,
- /* 150 */ 741, 921, 921, 921, 921, 921, 921, 921, 677, 572,
- /* 160 */ 781, 566, 395, 399, 151, 84, 414, 445, 144, 680,
- /* 170 */ 752, 861, 709, 836, 804, 869, 836, 1047, 87, 934,
- /* 180 */ 1076, 1280, 1150, 1292, 1316, 1292, 1178, 1327, 1327, 1292,
- /* 190 */ 1178, 1178, 1265, 1327, 1327, 1327, 1354, 1354, 1362, 361,
- /* 200 */ 481, 361, 1368, 1373, 361, 1368, 361, 361, 361, 1327,
- /* 210 */ 361, 1353, 1353, 1354, 505, 505, 505, 505, 505, 505,
- /* 220 */ 505, 505, 505, 505, 505, 1327, 1354, 704, 704, 1230,
- /* 230 */ 1362, 584, 1282, 481, 584, 1327, 1316, 1316, 704, 1229,
- /* 240 */ 1231, 704, 1229, 1231, 704, 704, 505, 1234, 1325, 1229,
- /* 250 */ 1237, 1240, 1250, 1076, 1255, 1260, 1239, 1263, 614, 1509,
- /* 260 */ 1327, 1368, 584, 1231, 704, 704, 704, 704, 704, 1231,
- /* 270 */ 704, 1398, 584, 137, 584, 614, 1474, 1475, 704, 741,
- /* 280 */ 1327, 584, 1542, 1354, 2586, 2586, 2586, 2586, 2586, 2586,
- /* 290 */ 2586, 2586, 2586, 858, 497, 23, 1686, 52, 432, 629,
- /* 300 */ 155, 665, 805, 814, 325, 971, 971, 971, 971, 971,
- /* 310 */ 971, 971, 971, 971, 410, 106, 243, 243, 390, 404,
- /* 320 */ 509, 284, 279, 142, 142, 671, 542, 554, 671, 671,
- /* 330 */ 671, 1049, 148, 702, 1059, 983, 557, 1023, 1024, 1063,
- /* 340 */ 1067, 1082, 1158, 1174, 897, 1097, 1104, 997, 959, 1095,
- /* 350 */ 1029, 1121, 1155, 1164, 1165, 1167, 1212, 1168, 1040, 1087,
- /* 360 */ 1039, 1189, 872, 1192, 1210, 1228, 1235, 1244, 1246, 1161,
- /* 370 */ 1218, 1233, 1223, 1247, 1603, 1608, 1423, 1612, 1613, 1572,
- /* 380 */ 1616, 1582, 1418, 1584, 1585, 1586, 1422, 1624, 1590, 1591,
- /* 390 */ 1427, 1629, 1431, 1633, 1599, 1635, 1625, 1638, 1614, 1465,
- /* 400 */ 1470, 1654, 1655, 1481, 1480, 1659, 1666, 1621, 1669, 1670,
- /* 410 */ 1671, 1631, 1674, 1676, 1677, 1678, 1688, 1691, 1693, 1694,
- /* 420 */ 1528, 1660, 1696, 1545, 1698, 1699, 1700, 1701, 1702, 1706,
- /* 430 */ 1707, 1709, 1710, 1712, 1713, 1714, 1715, 1717, 1720, 1679,
- /* 440 */ 1722, 1724, 1725, 1726, 1727, 1708, 1728, 1729, 1732, 1597,
- /* 450 */ 1737, 1740, 1711, 1742, 1685, 1754, 1716, 1756, 1757, 1718,
- /* 460 */ 1719, 1723, 1733, 1745, 1735, 1748, 1738, 1764, 1736, 1749,
- /* 470 */ 1766, 1779, 1787, 1750, 1618, 1792, 1795, 1796, 1734, 1797,
- /* 480 */ 1800, 1768, 1753, 1765, 1805, 1773, 1763, 1771, 1812, 1780,
- /* 490 */ 1769, 1774, 1814, 1783, 1781, 1782, 1819, 1822, 1831, 1833,
- /* 500 */ 1730, 1731, 1803, 1825, 1848, 1816, 1818, 1820, 1823, 1810,
- /* 510 */ 1813, 1824, 1826, 1834, 1827, 1860, 1841, 1864, 1844, 1817,
- /* 520 */ 1868, 1847, 1835, 1871, 1838, 1872, 1839, 1876, 1855, 1858,
- /* 530 */ 1846, 1856, 1697, 1801, 1798, 1892, 1739, 1862, 1899, 1721,
- /* 540 */ 1878, 1743, 1744, 1901, 1902, 1751, 1747, 1903, 1869, 1663,
- /* 550 */ 1828, 1811, 1840, 1752, 1692, 1770, 1682, 1843, 1870, 1852,
- /* 560 */ 1854, 1857, 1861, 1859, 1875, 1884, 1890, 1863, 1879, 1703,
- /* 570 */ 1866, 1873, 1948, 1910, 1741, 1923, 1926, 1930, 1931, 1932,
- /* 580 */ 1933, 1874, 1877, 1922, 1755, 1929, 1928, 1976, 1978, 1980,
- /* 590 */ 1885, 1886, 1887, 1891, 1895, 1815, 1904, 1986, 1962, 1850,
- /* 600 */ 1907, 1898, 1733, 1958, 1964, 1789, 1788, 1793, 2018, 2000,
- /* 610 */ 1829, 1927, 1936, 1934, 1940, 1943, 1944, 1977, 1946, 1947,
- /* 620 */ 1979, 1950, 2003, 1832, 1949, 1921, 1951, 1994, 2001, 1953,
- /* 630 */ 1955, 2009, 1954, 1957, 2020, 1960, 1961, 2024, 1967, 1963,
- /* 640 */ 2037, 1982, 1959, 1971, 1972, 1973, 2051, 1966, 1985, 2038,
- /* 650 */ 1998, 2060, 2002, 2038, 2038, 2074, 2035, 2034, 2066, 2067,
- /* 660 */ 2068, 2071, 2078, 2080, 2081, 2082, 2083, 2084, 2052, 2028,
- /* 670 */ 2079, 2090, 2091, 2102, 2092, 2107, 2095, 2096, 2097, 2064,
- /* 680 */ 1810, 2103, 1813, 2104, 2106, 2108, 2110, 2115, 2111, 2140,
- /* 690 */ 2112, 2094, 2113, 2150, 2118, 2109, 2116, 2154, 2121, 2123,
- /* 700 */ 2120, 2160, 2126, 2125, 2124, 2180, 2141, 2142, 2189, 2153,
- /* 710 */ 2169, 2171, 2174, 2170, 2177,
+ /* 0 */ 862, 0, 71, 0, 289, 289, 289, 289, 289, 289,
+ /* 10 */ 289, 289, 289, 289, 289, 360, 576, 576, 647, 576,
+ /* 20 */ 576, 576, 576, 576, 576, 576, 576, 576, 576, 576,
+ /* 30 */ 576, 576, 576, 576, 576, 576, 576, 576, 576, 576,
+ /* 40 */ 576, 576, 576, 576, 576, 576, 576, 576, 32, 134,
+ /* 50 */ 21, 590, 133, 7, 104, 7, 21, 21, 1216, 1216,
+ /* 60 */ 7, 1216, 1216, 136, 7, 423, 25, 25, 423, 401,
+ /* 70 */ 401, 215, 57, 5, 5, 25, 25, 25, 25, 25,
+ /* 80 */ 25, 25, 25, 25, 25, 80, 25, 25, 156, 25,
+ /* 90 */ 25, 25, 343, 25, 25, 343, 25, 343, 343, 343,
+ /* 100 */ 25, 328, 792, 34, 34, 216, 474, 283, 283, 283,
+ /* 110 */ 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
+ /* 120 */ 283, 283, 283, 283, 283, 283, 1073, 87, 215, 57,
+ /* 130 */ 593, 313, 499, 499, 499, 710, 229, 229, 313, 374,
+ /* 140 */ 374, 374, 143, 384, 343, 378, 343, 378, 378, 143,
+ /* 150 */ 566, 217, 217, 217, 217, 217, 217, 217, 1351, 408,
+ /* 160 */ 336, 612, 249, 430, 340, 464, 292, 714, 377, 518,
+ /* 170 */ 873, 656, 858, 748, 12, 754, 748, 769, 353, 836,
+ /* 180 */ 977, 1192, 1055, 1202, 1226, 1202, 1094, 1236, 1236, 1202,
+ /* 190 */ 1094, 1094, 1180, 1236, 1236, 1236, 1265, 1265, 1270, 80,
+ /* 200 */ 1278, 80, 1280, 1283, 80, 1280, 80, 80, 80, 1236,
+ /* 210 */ 80, 1260, 1260, 1265, 343, 343, 343, 343, 343, 343,
+ /* 220 */ 343, 343, 343, 343, 343, 1236, 1265, 378, 378, 1129,
+ /* 230 */ 1270, 328, 1177, 1278, 328, 1236, 1226, 1226, 378, 1117,
+ /* 240 */ 1124, 378, 1117, 1124, 378, 378, 343, 1122, 1213, 1117,
+ /* 250 */ 1130, 1132, 1148, 977, 1127, 1134, 1137, 1159, 374, 1398,
+ /* 260 */ 1236, 1280, 328, 1124, 378, 378, 378, 378, 378, 1124,
+ /* 270 */ 378, 1262, 328, 143, 328, 374, 1361, 1366, 378, 566,
+ /* 280 */ 1236, 328, 1437, 1265, 3069, 3069, 3069, 3069, 3069, 3069,
+ /* 290 */ 3069, 3069, 3069, 887, 310, 94, 625, 15, 59, 738,
+ /* 300 */ 720, 753, 881, 73, 781, 472, 472, 472, 472, 472,
+ /* 310 */ 472, 472, 472, 472, 875, 124, 373, 373, 122, 4,
+ /* 320 */ 58, 166, 484, 300, 300, 790, 912, 588, 790, 790,
+ /* 330 */ 790, 113, 1057, 288, 969, 913, 884, 918, 923, 986,
+ /* 340 */ 988, 1093, 1101, 1106, 1005, 1042, 1090, 1011, 425, 945,
+ /* 350 */ 863, 1096, 1103, 1115, 1116, 1120, 1187, 1131, 1010, 1041,
+ /* 360 */ 1046, 1140, 1074, 1141, 1147, 1151, 1176, 1179, 1195, 825,
+ /* 370 */ 1142, 1166, 489, 1181, 1482, 1487, 1300, 1490, 1493, 1452,
+ /* 380 */ 1495, 1461, 1296, 1463, 1464, 1465, 1302, 1501, 1469, 1470,
+ /* 390 */ 1306, 1508, 1314, 1518, 1484, 1522, 1502, 1529, 1491, 1347,
+ /* 400 */ 1352, 1533, 1535, 1358, 1363, 1538, 1541, 1496, 1542, 1544,
+ /* 410 */ 1545, 1504, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555,
+ /* 420 */ 1406, 1523, 1559, 1410, 1562, 1569, 1571, 1572, 1573, 1574,
+ /* 430 */ 1576, 1579, 1580, 1583, 1584, 1585, 1587, 1588, 1589, 1556,
+ /* 440 */ 1590, 1592, 1599, 1600, 1601, 1575, 1602, 1603, 1604, 1459,
+ /* 450 */ 1595, 1596, 1577, 1606, 1557, 1607, 1558, 1608, 1609, 1568,
+ /* 460 */ 1581, 1567, 1566, 1605, 1586, 1616, 1593, 1614, 1582, 1598,
+ /* 470 */ 1618, 1623, 1632, 1611, 1462, 1634, 1639, 1641, 1591, 1645,
+ /* 480 */ 1646, 1612, 1610, 1613, 1648, 1619, 1615, 1617, 1653, 1622,
+ /* 490 */ 1620, 1621, 1661, 1627, 1624, 1625, 1665, 1666, 1667, 1669,
+ /* 500 */ 1570, 1597, 1635, 1649, 1673, 1642, 1643, 1656, 1657, 1636,
+ /* 510 */ 1637, 1658, 1659, 1654, 1660, 1697, 1680, 1704, 1684, 1662,
+ /* 520 */ 1707, 1686, 1674, 1710, 1676, 1713, 1679, 1715, 1694, 1698,
+ /* 530 */ 1682, 1685, 1527, 1626, 1628, 1724, 1563, 1690, 1728, 1546,
+ /* 540 */ 1708, 1630, 1629, 1735, 1742, 1633, 1631, 1741, 1703, 1499,
+ /* 550 */ 1650, 1655, 1664, 1638, 1521, 1640, 1500, 1668, 1712, 1687,
+ /* 560 */ 1681, 1689, 1691, 1692, 1716, 1705, 1714, 1696, 1719, 1530,
+ /* 570 */ 1693, 1699, 1754, 1731, 1531, 1743, 1746, 1747, 1752, 1762,
+ /* 580 */ 1763, 1709, 1711, 1756, 1561, 1757, 1759, 1799, 1809, 1811,
+ /* 590 */ 1717, 1718, 1721, 1720, 1723, 1647, 1726, 1819, 1783, 1670,
+ /* 600 */ 1734, 1727, 1566, 1786, 1791, 1644, 1671, 1675, 1834, 1815,
+ /* 610 */ 1651, 1745, 1749, 1748, 1751, 1753, 1760, 1794, 1758, 1764,
+ /* 620 */ 1795, 1761, 1816, 1652, 1765, 1744, 1766, 1814, 1817, 1768,
+ /* 630 */ 1769, 1820, 1771, 1773, 1829, 1776, 1777, 1832, 1788, 1790,
+ /* 640 */ 1833, 1792, 1732, 1770, 1775, 1778, 1866, 1785, 1800, 1846,
+ /* 650 */ 1804, 1867, 1810, 1846, 1846, 1882, 1843, 1845, 1874, 1875,
+ /* 660 */ 1876, 1877, 1878, 1879, 1880, 1881, 1883, 1884, 1847, 1828,
+ /* 670 */ 1885, 1886, 1888, 1890, 1904, 1895, 1905, 1906, 1857, 1636,
+ /* 680 */ 1907, 1637, 1908, 1909, 1911, 1912, 1917, 1913, 1949, 1916,
+ /* 690 */ 1910, 1915, 1955, 1921, 1914, 1918, 1959, 1925, 1919, 1924,
+ /* 700 */ 1964, 1930, 1922, 1932, 1969, 1937, 1939, 1975, 1956, 1958,
+ /* 710 */ 1960, 1971, 1968, 1957,
};
#define YY_REDUCE_COUNT (292)
-#define YY_REDUCE_MIN (-424)
-#define YY_REDUCE_MAX (2175)
+#define YY_REDUCE_MIN (-420)
+#define YY_REDUCE_MAX (2656)
static const short yy_reduce_ofst[] = {
- /* 0 */ -188, -327, -228, -168, -34, 100, 655, 747, 834, -94,
- /* 10 */ 877, 905, 948, 1013, 1056, 1109, 1130, 1037, 1183, 1236,
- /* 20 */ 1257, 1279, 1345, 1365, 1420, 1436, 1479, 1522, 1538, 1589,
- /* 30 */ 1606, 1661, 1680, 1704, 1762, 1778, 1821, 1837, 1880, 1896,
- /* 40 */ 1939, 1990, 2007, 2033, 2089, 2105, 2159, 2175, -36, -347,
- /* 50 */ 593, -344, 80, 773, 913, 943, 746, 790, -260, 1151,
- /* 60 */ -424, -268, 606, -412, -54, -237, 70, -330, -259, -265,
- /* 70 */ -212, -28, 107, -309, -165, 211, 224, 300, 372, 373,
- /* 80 */ 434, 436, 632, -93, 641, 675, 158, 722, -367, 743,
- /* 90 */ 748, -322, 749, 750, -221, 751, 420, -200, 426, 793,
- /* 100 */ 336, 57, -411, -411, -294, -332, 58, 196, 220, 333,
- /* 110 */ 345, 393, 396, 438, 463, 464, 478, 479, 489, 504,
- /* 120 */ 529, 625, 626, 682, 723, -286, -315, 139, -5, 186,
- /* 130 */ 167, -315, 36, 182, 513, 447, 454, 217, 501, 622,
- /* 140 */ 623, 547, -44, 328, 294, 604, 22, 633, 643, 698,
- /* 150 */ 679, -357, 409, 656, 818, 838, 844, 851, 758, 867,
- /* 160 */ 881, 843, 772, 813, 923, 829, 916, 916, 954, 914,
- /* 170 */ 963, 932, 922, 873, 873, 866, 873, 894, 884, 916,
- /* 180 */ 926, 936, 942, 957, 956, 960, 969, 1014, 1015, 979,
- /* 190 */ 984, 992, 1030, 1042, 1043, 1045, 1046, 1052, 994, 1044,
- /* 200 */ 1016, 1053, 1054, 1010, 1058, 1064, 1060, 1061, 1065, 1069,
- /* 210 */ 1066, 1073, 1074, 1086, 1068, 1070, 1080, 1081, 1088, 1090,
- /* 220 */ 1091, 1092, 1093, 1096, 1100, 1089, 1102, 1084, 1094, 1075,
- /* 230 */ 1078, 1114, 1077, 1099, 1135, 1141, 1051, 1098, 1110, 1048,
- /* 240 */ 1105, 1112, 1055, 1106, 1115, 1120, 916, 1057, 1083, 1103,
- /* 250 */ 1085, 1071, 1107, 1108, 1101, 1079, 1111, 873, 1162, 1137,
- /* 260 */ 1197, 1208, 1206, 1163, 1175, 1177, 1182, 1184, 1186, 1176,
- /* 270 */ 1187, 1185, 1226, 1214, 1227, 1203, 1152, 1211, 1205, 1232,
- /* 280 */ 1242, 1243, 1251, 1256, 1202, 1201, 1213, 1216, 1245, 1252,
- /* 290 */ 1258, 1259, 1271,
+ /* 0 */ 276, -259, 233, 672, 744, 798, 859, 922, 942, 1045,
+ /* 10 */ 1104, 1158, 1219, 1277, 1331, 1360, 294, 1418, 1472, 1526,
+ /* 20 */ 1578, 1594, 1683, 1701, 1755, 1772, 1824, 1840, 1892, 1946,
+ /* 30 */ 1967, 2043, 2061, 2115, 2132, 2184, 2200, 2252, 2275, 2327,
+ /* 40 */ 2390, 2442, 2461, 2513, 2529, 2581, 2604, 2656, -258, 95,
+ /* 50 */ 105, -39, 559, 597, 599, 669, 187, 704, -346, -57,
+ /* 60 */ -391, 323, 480, -276, -250, 75, -222, 297, -371, -330,
+ /* 70 */ -326, -327, -363, -299, -257, 116, 128, 193, 199, 327,
+ /* 80 */ 409, 471, 645, 649, 657, 252, 693, 706, -51, 725,
+ /* 90 */ 747, 762, 244, 763, 772, -203, 791, 465, -5, 362,
+ /* 100 */ 847, -210, -315, -420, -420, -217, -212, -69, -21, 41,
+ /* 110 */ 43, 70, 96, 117, 148, 197, 225, 234, 346, 351,
+ /* 120 */ 405, 446, 454, 504, 651, 655, -266, -170, 397, 191,
+ /* 130 */ 152, 352, -170, -150, 219, 477, 186, 254, 491, 524,
+ /* 140 */ 537, 538, -316, -319, 485, 367, 542, 555, 557, 632,
+ /* 150 */ 530, -342, 369, 389, 410, 463, 468, 483, 319, 577,
+ /* 160 */ 650, 543, 521, 603, 756, 695, 786, 786, 810, 780,
+ /* 170 */ 831, 811, 808, 760, 760, 746, 760, 784, 783, 786,
+ /* 180 */ 834, 842, 851, 866, 870, 869, 878, 924, 926, 879,
+ /* 190 */ 882, 886, 933, 943, 944, 948, 957, 958, 897, 953,
+ /* 200 */ 925, 955, 965, 914, 963, 970, 964, 966, 968, 975,
+ /* 210 */ 971, 976, 978, 989, 959, 962, 967, 979, 983, 984,
+ /* 220 */ 994, 996, 998, 999, 1001, 987, 992, 990, 991, 938,
+ /* 230 */ 941, 997, 973, 995, 1028, 1035, 993, 1000, 1002, 936,
+ /* 240 */ 1003, 1007, 939, 1004, 1009, 1013, 786, 946, 949, 950,
+ /* 250 */ 947, 956, 972, 1014, 951, 961, 960, 760, 1049, 1016,
+ /* 260 */ 1085, 1088, 1082, 1043, 1054, 1058, 1059, 1061, 1062, 1044,
+ /* 270 */ 1063, 1066, 1118, 1089, 1119, 1079, 1038, 1102, 1095, 1121,
+ /* 280 */ 1136, 1126, 1143, 1145, 1087, 1081, 1097, 1098, 1135, 1138,
+ /* 290 */ 1139, 1144, 1154,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 10 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 20 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 30 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 40 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 50 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 60 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1853,
- /* 70 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 80 */ 1597, 1597, 1597, 1675, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 90 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 100 */ 1673, 1846, 2043, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 110 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 120 */ 1597, 1597, 1597, 1597, 1597, 1597, 2055, 1597, 1597, 1675,
- /* 130 */ 1597, 2055, 2055, 2055, 1673, 2015, 2015, 1597, 1597, 1597,
- /* 140 */ 1597, 1783, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1783,
- /* 150 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1890, 1597,
- /* 160 */ 1597, 2080, 2134, 1597, 1597, 2083, 1597, 1597, 1597, 1858,
- /* 170 */ 1597, 1736, 2070, 2047, 2061, 2118, 2048, 2045, 2064, 1597,
- /* 180 */ 2074, 1597, 1883, 1851, 1597, 1851, 1848, 1597, 1597, 1851,
- /* 190 */ 1848, 1848, 1727, 1597, 1597, 1597, 1597, 1597, 1597, 1675,
- /* 200 */ 1597, 1675, 1597, 1597, 1675, 1597, 1675, 1675, 1675, 1597,
- /* 210 */ 1675, 1654, 1654, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 220 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1903,
- /* 230 */ 1597, 1673, 1892, 1597, 1673, 1597, 1597, 1597, 1597, 2091,
- /* 240 */ 2089, 1597, 2091, 2089, 1597, 1597, 1597, 2103, 2099, 2091,
- /* 250 */ 2107, 2105, 2076, 2074, 2137, 2124, 2120, 2061, 1597, 1597,
- /* 260 */ 1597, 1597, 1673, 2089, 1597, 1597, 1597, 1597, 1597, 2089,
- /* 270 */ 1597, 1597, 1673, 1597, 1673, 1597, 1597, 1752, 1597, 1597,
- /* 280 */ 1597, 1673, 1629, 1597, 1885, 1896, 1868, 1868, 1786, 1786,
- /* 290 */ 1786, 1676, 1602, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 300 */ 1597, 1597, 1597, 1597, 1597, 2102, 2101, 1971, 1597, 2019,
- /* 310 */ 2018, 2017, 2008, 1970, 1748, 1597, 1969, 1968, 1597, 1597,
- /* 320 */ 1597, 1597, 1597, 1864, 1863, 1962, 1597, 1597, 1963, 1961,
- /* 330 */ 1960, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 340 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 2121, 2125,
- /* 350 */ 1597, 1597, 1597, 1597, 1597, 1597, 2044, 1597, 1597, 1597,
- /* 360 */ 1597, 1597, 1945, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 370 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 380 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 390 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 400 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 410 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 420 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 430 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 440 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 450 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 460 */ 1597, 1634, 1950, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 470 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 480 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 490 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 500 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1715,
- /* 510 */ 1714, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 520 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 530 */ 1597, 1597, 1597, 1953, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 540 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 2117, 2077, 1597,
- /* 550 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 560 */ 1597, 1597, 1597, 1597, 1597, 1597, 1945, 1597, 2100, 1597,
- /* 570 */ 1597, 2115, 1597, 2119, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 580 */ 1597, 2054, 2050, 1597, 1597, 2046, 1597, 1597, 1597, 1597,
- /* 590 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 600 */ 1597, 1597, 1944, 1597, 2005, 1597, 1597, 1597, 2039, 1597,
- /* 610 */ 1597, 1990, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 620 */ 1597, 1953, 1597, 1956, 1597, 1597, 1597, 1597, 1597, 1780,
- /* 630 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 640 */ 1597, 1597, 1765, 1763, 1762, 1761, 1597, 1758, 1597, 1793,
- /* 650 */ 1597, 1597, 1597, 1789, 1788, 1597, 1597, 1597, 1597, 1597,
- /* 660 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 670 */ 1695, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 680 */ 1686, 1597, 1685, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 690 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 700 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597,
- /* 710 */ 1597, 1597, 1597, 1597, 1597,
+ /* 0 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 10 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 20 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 30 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 40 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 50 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 60 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 70 */ 1606, 1861, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 80 */ 1606, 1606, 1606, 1606, 1606, 1684, 1606, 1606, 1606, 1606,
+ /* 90 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 100 */ 1606, 1682, 1854, 2057, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 110 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 120 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 2069, 1606, 1606,
+ /* 130 */ 1684, 1606, 2069, 2069, 2069, 1682, 2029, 2029, 1606, 1606,
+ /* 140 */ 1606, 1606, 1791, 1606, 1606, 1606, 1606, 1606, 1606, 1791,
+ /* 150 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1903, 1606,
+ /* 160 */ 1606, 2094, 2148, 1606, 1606, 2097, 1606, 1606, 1606, 1866,
+ /* 170 */ 1606, 1744, 2084, 2061, 2075, 2132, 2062, 2059, 2078, 1606,
+ /* 180 */ 2088, 1606, 1896, 1859, 1606, 1859, 1856, 1606, 1606, 1859,
+ /* 190 */ 1856, 1856, 1735, 1606, 1606, 1606, 1606, 1606, 1606, 1684,
+ /* 200 */ 1606, 1684, 1606, 1606, 1684, 1606, 1684, 1684, 1684, 1606,
+ /* 210 */ 1684, 1663, 1663, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 220 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1916,
+ /* 230 */ 1606, 1682, 1905, 1606, 1682, 1606, 1606, 1606, 1606, 2105,
+ /* 240 */ 2103, 1606, 2105, 2103, 1606, 1606, 1606, 2117, 2113, 2105,
+ /* 250 */ 2121, 2119, 2090, 2088, 2151, 2138, 2134, 2075, 1606, 1606,
+ /* 260 */ 1606, 1606, 1682, 2103, 1606, 1606, 1606, 1606, 1606, 2103,
+ /* 270 */ 1606, 1606, 1682, 1606, 1682, 1606, 1606, 1760, 1606, 1606,
+ /* 280 */ 1606, 1682, 1638, 1606, 1898, 1909, 1881, 1881, 1794, 1794,
+ /* 290 */ 1794, 1685, 1611, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 300 */ 1606, 1606, 1606, 1606, 1606, 2116, 2115, 1984, 1606, 2033,
+ /* 310 */ 2032, 2031, 2022, 1983, 1756, 1606, 1982, 1981, 1606, 1606,
+ /* 320 */ 1606, 1606, 1606, 1872, 1871, 1975, 1606, 1606, 1976, 1974,
+ /* 330 */ 1973, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 340 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 2135, 2139,
+ /* 350 */ 1606, 1606, 1606, 1606, 1606, 1606, 2058, 1606, 1606, 1606,
+ /* 360 */ 1606, 1606, 1958, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 370 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 380 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 390 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 400 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 410 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 420 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 430 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 440 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 450 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 460 */ 1606, 1643, 1963, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 470 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 480 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 490 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 500 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1723,
+ /* 510 */ 1722, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 520 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 530 */ 1606, 1606, 1606, 1966, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 540 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 2131, 2091, 1606,
+ /* 550 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 560 */ 1606, 1606, 1606, 1606, 1606, 1606, 1958, 1606, 2114, 1606,
+ /* 570 */ 1606, 2129, 1606, 2133, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 580 */ 1606, 2068, 2064, 1606, 1606, 2060, 1606, 1606, 1606, 1606,
+ /* 590 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 600 */ 1606, 1606, 1957, 1606, 2019, 1606, 1606, 1606, 2053, 1606,
+ /* 610 */ 1606, 2004, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 620 */ 1606, 1966, 1606, 1969, 1606, 1606, 1606, 1606, 1606, 1788,
+ /* 630 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 640 */ 1606, 1606, 1773, 1771, 1770, 1769, 1606, 1766, 1606, 1801,
+ /* 650 */ 1606, 1606, 1606, 1797, 1796, 1606, 1606, 1606, 1606, 1606,
+ /* 660 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 670 */ 1703, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1695,
+ /* 680 */ 1606, 1694, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 690 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 700 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606,
+ /* 710 */ 1606, 1606, 1606, 1606,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -1022,7 +1152,6 @@ static const YYCODETYPE yyFallback[] = {
0, /* TSDB_PAGESIZE => nothing */
0, /* PRECISION => nothing */
0, /* REPLICA => nothing */
- 0, /* STRICT => nothing */
0, /* VGROUPS => nothing */
0, /* SINGLE_STABLE => nothing */
0, /* RETENTIONS => nothing */
@@ -1111,6 +1240,8 @@ static const YYCODETYPE yyFallback[] = {
0, /* INDEX => nothing */
0, /* FUNCTION => nothing */
0, /* INTERVAL => nothing */
+ 0, /* COUNT => nothing */
+ 0, /* LAST_ROW => nothing */
0, /* TOPIC => nothing */
0, /* WITH => nothing */
0, /* META => nothing */
@@ -1160,6 +1291,7 @@ static const YYCODETYPE yyFallback[] = {
0, /* WEND => nothing */
0, /* WDURATION => nothing */
0, /* IROWTS => nothing */
+ 0, /* ISFILLED => nothing */
0, /* CAST => nothing */
0, /* NOW => nothing */
0, /* TODAY => nothing */
@@ -1168,8 +1300,6 @@ static const YYCODETYPE yyFallback[] = {
0, /* SERVER_VERSION => nothing */
0, /* SERVER_STATUS => nothing */
0, /* CURRENT_USER => nothing */
- 0, /* COUNT => nothing */
- 0, /* LAST_ROW => nothing */
0, /* CASE => nothing */
271, /* END => ABORT */
0, /* WHEN => nothing */
@@ -1260,6 +1390,7 @@ static const YYCODETYPE yyFallback[] = {
271, /* SEMI => ABORT */
271, /* STAR => ABORT */
271, /* STATEMENT => ABORT */
+ 271, /* STRICT => ABORT */
271, /* STRING => ABORT */
271, /* TIMES => ABORT */
271, /* UPDATE => ABORT */
@@ -1433,154 +1564,154 @@ static const char *const yyTokenName[] = {
/* 76 */ "TSDB_PAGESIZE",
/* 77 */ "PRECISION",
/* 78 */ "REPLICA",
- /* 79 */ "STRICT",
- /* 80 */ "VGROUPS",
- /* 81 */ "SINGLE_STABLE",
- /* 82 */ "RETENTIONS",
- /* 83 */ "SCHEMALESS",
- /* 84 */ "WAL_LEVEL",
- /* 85 */ "WAL_FSYNC_PERIOD",
- /* 86 */ "WAL_RETENTION_PERIOD",
- /* 87 */ "WAL_RETENTION_SIZE",
- /* 88 */ "WAL_ROLL_PERIOD",
- /* 89 */ "WAL_SEGMENT_SIZE",
- /* 90 */ "STT_TRIGGER",
- /* 91 */ "TABLE_PREFIX",
- /* 92 */ "TABLE_SUFFIX",
- /* 93 */ "NK_COLON",
- /* 94 */ "MAX_SPEED",
- /* 95 */ "TABLE",
- /* 96 */ "NK_LP",
- /* 97 */ "NK_RP",
- /* 98 */ "STABLE",
- /* 99 */ "ADD",
- /* 100 */ "COLUMN",
- /* 101 */ "MODIFY",
- /* 102 */ "RENAME",
- /* 103 */ "TAG",
- /* 104 */ "SET",
- /* 105 */ "NK_EQ",
- /* 106 */ "USING",
- /* 107 */ "TAGS",
- /* 108 */ "COMMENT",
- /* 109 */ "BOOL",
- /* 110 */ "TINYINT",
- /* 111 */ "SMALLINT",
- /* 112 */ "INT",
- /* 113 */ "INTEGER",
- /* 114 */ "BIGINT",
- /* 115 */ "FLOAT",
- /* 116 */ "DOUBLE",
- /* 117 */ "BINARY",
- /* 118 */ "TIMESTAMP",
- /* 119 */ "NCHAR",
- /* 120 */ "UNSIGNED",
- /* 121 */ "JSON",
- /* 122 */ "VARCHAR",
- /* 123 */ "MEDIUMBLOB",
- /* 124 */ "BLOB",
- /* 125 */ "VARBINARY",
- /* 126 */ "DECIMAL",
- /* 127 */ "MAX_DELAY",
- /* 128 */ "WATERMARK",
- /* 129 */ "ROLLUP",
- /* 130 */ "TTL",
- /* 131 */ "SMA",
- /* 132 */ "DELETE_MARK",
- /* 133 */ "FIRST",
- /* 134 */ "LAST",
- /* 135 */ "SHOW",
- /* 136 */ "PRIVILEGES",
- /* 137 */ "DATABASES",
- /* 138 */ "TABLES",
- /* 139 */ "STABLES",
- /* 140 */ "MNODES",
- /* 141 */ "QNODES",
- /* 142 */ "FUNCTIONS",
- /* 143 */ "INDEXES",
- /* 144 */ "ACCOUNTS",
- /* 145 */ "APPS",
- /* 146 */ "CONNECTIONS",
- /* 147 */ "LICENCES",
- /* 148 */ "GRANTS",
- /* 149 */ "QUERIES",
- /* 150 */ "SCORES",
- /* 151 */ "TOPICS",
- /* 152 */ "VARIABLES",
- /* 153 */ "CLUSTER",
- /* 154 */ "BNODES",
- /* 155 */ "SNODES",
- /* 156 */ "TRANSACTIONS",
- /* 157 */ "DISTRIBUTED",
- /* 158 */ "CONSUMERS",
- /* 159 */ "SUBSCRIPTIONS",
- /* 160 */ "VNODES",
- /* 161 */ "LIKE",
- /* 162 */ "TBNAME",
- /* 163 */ "QTAGS",
- /* 164 */ "AS",
- /* 165 */ "INDEX",
- /* 166 */ "FUNCTION",
- /* 167 */ "INTERVAL",
- /* 168 */ "TOPIC",
- /* 169 */ "WITH",
- /* 170 */ "META",
- /* 171 */ "CONSUMER",
- /* 172 */ "GROUP",
- /* 173 */ "DESC",
- /* 174 */ "DESCRIBE",
- /* 175 */ "RESET",
- /* 176 */ "QUERY",
- /* 177 */ "CACHE",
- /* 178 */ "EXPLAIN",
- /* 179 */ "ANALYZE",
- /* 180 */ "VERBOSE",
- /* 181 */ "NK_BOOL",
- /* 182 */ "RATIO",
- /* 183 */ "NK_FLOAT",
- /* 184 */ "OUTPUTTYPE",
- /* 185 */ "AGGREGATE",
- /* 186 */ "BUFSIZE",
- /* 187 */ "STREAM",
- /* 188 */ "INTO",
- /* 189 */ "TRIGGER",
- /* 190 */ "AT_ONCE",
- /* 191 */ "WINDOW_CLOSE",
- /* 192 */ "IGNORE",
- /* 193 */ "EXPIRED",
- /* 194 */ "FILL_HISTORY",
- /* 195 */ "SUBTABLE",
- /* 196 */ "KILL",
- /* 197 */ "CONNECTION",
- /* 198 */ "TRANSACTION",
- /* 199 */ "BALANCE",
- /* 200 */ "VGROUP",
- /* 201 */ "MERGE",
- /* 202 */ "REDISTRIBUTE",
- /* 203 */ "SPLIT",
- /* 204 */ "DELETE",
- /* 205 */ "INSERT",
- /* 206 */ "NULL",
- /* 207 */ "NK_QUESTION",
- /* 208 */ "NK_ARROW",
- /* 209 */ "ROWTS",
- /* 210 */ "QSTART",
- /* 211 */ "QEND",
- /* 212 */ "QDURATION",
- /* 213 */ "WSTART",
- /* 214 */ "WEND",
- /* 215 */ "WDURATION",
- /* 216 */ "IROWTS",
- /* 217 */ "CAST",
- /* 218 */ "NOW",
- /* 219 */ "TODAY",
- /* 220 */ "TIMEZONE",
- /* 221 */ "CLIENT_VERSION",
- /* 222 */ "SERVER_VERSION",
- /* 223 */ "SERVER_STATUS",
- /* 224 */ "CURRENT_USER",
- /* 225 */ "COUNT",
- /* 226 */ "LAST_ROW",
+ /* 79 */ "VGROUPS",
+ /* 80 */ "SINGLE_STABLE",
+ /* 81 */ "RETENTIONS",
+ /* 82 */ "SCHEMALESS",
+ /* 83 */ "WAL_LEVEL",
+ /* 84 */ "WAL_FSYNC_PERIOD",
+ /* 85 */ "WAL_RETENTION_PERIOD",
+ /* 86 */ "WAL_RETENTION_SIZE",
+ /* 87 */ "WAL_ROLL_PERIOD",
+ /* 88 */ "WAL_SEGMENT_SIZE",
+ /* 89 */ "STT_TRIGGER",
+ /* 90 */ "TABLE_PREFIX",
+ /* 91 */ "TABLE_SUFFIX",
+ /* 92 */ "NK_COLON",
+ /* 93 */ "MAX_SPEED",
+ /* 94 */ "TABLE",
+ /* 95 */ "NK_LP",
+ /* 96 */ "NK_RP",
+ /* 97 */ "STABLE",
+ /* 98 */ "ADD",
+ /* 99 */ "COLUMN",
+ /* 100 */ "MODIFY",
+ /* 101 */ "RENAME",
+ /* 102 */ "TAG",
+ /* 103 */ "SET",
+ /* 104 */ "NK_EQ",
+ /* 105 */ "USING",
+ /* 106 */ "TAGS",
+ /* 107 */ "COMMENT",
+ /* 108 */ "BOOL",
+ /* 109 */ "TINYINT",
+ /* 110 */ "SMALLINT",
+ /* 111 */ "INT",
+ /* 112 */ "INTEGER",
+ /* 113 */ "BIGINT",
+ /* 114 */ "FLOAT",
+ /* 115 */ "DOUBLE",
+ /* 116 */ "BINARY",
+ /* 117 */ "TIMESTAMP",
+ /* 118 */ "NCHAR",
+ /* 119 */ "UNSIGNED",
+ /* 120 */ "JSON",
+ /* 121 */ "VARCHAR",
+ /* 122 */ "MEDIUMBLOB",
+ /* 123 */ "BLOB",
+ /* 124 */ "VARBINARY",
+ /* 125 */ "DECIMAL",
+ /* 126 */ "MAX_DELAY",
+ /* 127 */ "WATERMARK",
+ /* 128 */ "ROLLUP",
+ /* 129 */ "TTL",
+ /* 130 */ "SMA",
+ /* 131 */ "DELETE_MARK",
+ /* 132 */ "FIRST",
+ /* 133 */ "LAST",
+ /* 134 */ "SHOW",
+ /* 135 */ "PRIVILEGES",
+ /* 136 */ "DATABASES",
+ /* 137 */ "TABLES",
+ /* 138 */ "STABLES",
+ /* 139 */ "MNODES",
+ /* 140 */ "QNODES",
+ /* 141 */ "FUNCTIONS",
+ /* 142 */ "INDEXES",
+ /* 143 */ "ACCOUNTS",
+ /* 144 */ "APPS",
+ /* 145 */ "CONNECTIONS",
+ /* 146 */ "LICENCES",
+ /* 147 */ "GRANTS",
+ /* 148 */ "QUERIES",
+ /* 149 */ "SCORES",
+ /* 150 */ "TOPICS",
+ /* 151 */ "VARIABLES",
+ /* 152 */ "CLUSTER",
+ /* 153 */ "BNODES",
+ /* 154 */ "SNODES",
+ /* 155 */ "TRANSACTIONS",
+ /* 156 */ "DISTRIBUTED",
+ /* 157 */ "CONSUMERS",
+ /* 158 */ "SUBSCRIPTIONS",
+ /* 159 */ "VNODES",
+ /* 160 */ "LIKE",
+ /* 161 */ "TBNAME",
+ /* 162 */ "QTAGS",
+ /* 163 */ "AS",
+ /* 164 */ "INDEX",
+ /* 165 */ "FUNCTION",
+ /* 166 */ "INTERVAL",
+ /* 167 */ "COUNT",
+ /* 168 */ "LAST_ROW",
+ /* 169 */ "TOPIC",
+ /* 170 */ "WITH",
+ /* 171 */ "META",
+ /* 172 */ "CONSUMER",
+ /* 173 */ "GROUP",
+ /* 174 */ "DESC",
+ /* 175 */ "DESCRIBE",
+ /* 176 */ "RESET",
+ /* 177 */ "QUERY",
+ /* 178 */ "CACHE",
+ /* 179 */ "EXPLAIN",
+ /* 180 */ "ANALYZE",
+ /* 181 */ "VERBOSE",
+ /* 182 */ "NK_BOOL",
+ /* 183 */ "RATIO",
+ /* 184 */ "NK_FLOAT",
+ /* 185 */ "OUTPUTTYPE",
+ /* 186 */ "AGGREGATE",
+ /* 187 */ "BUFSIZE",
+ /* 188 */ "STREAM",
+ /* 189 */ "INTO",
+ /* 190 */ "TRIGGER",
+ /* 191 */ "AT_ONCE",
+ /* 192 */ "WINDOW_CLOSE",
+ /* 193 */ "IGNORE",
+ /* 194 */ "EXPIRED",
+ /* 195 */ "FILL_HISTORY",
+ /* 196 */ "SUBTABLE",
+ /* 197 */ "KILL",
+ /* 198 */ "CONNECTION",
+ /* 199 */ "TRANSACTION",
+ /* 200 */ "BALANCE",
+ /* 201 */ "VGROUP",
+ /* 202 */ "MERGE",
+ /* 203 */ "REDISTRIBUTE",
+ /* 204 */ "SPLIT",
+ /* 205 */ "DELETE",
+ /* 206 */ "INSERT",
+ /* 207 */ "NULL",
+ /* 208 */ "NK_QUESTION",
+ /* 209 */ "NK_ARROW",
+ /* 210 */ "ROWTS",
+ /* 211 */ "QSTART",
+ /* 212 */ "QEND",
+ /* 213 */ "QDURATION",
+ /* 214 */ "WSTART",
+ /* 215 */ "WEND",
+ /* 216 */ "WDURATION",
+ /* 217 */ "IROWTS",
+ /* 218 */ "ISFILLED",
+ /* 219 */ "CAST",
+ /* 220 */ "NOW",
+ /* 221 */ "TODAY",
+ /* 222 */ "TIMEZONE",
+ /* 223 */ "CLIENT_VERSION",
+ /* 224 */ "SERVER_VERSION",
+ /* 225 */ "SERVER_STATUS",
+ /* 226 */ "CURRENT_USER",
/* 227 */ "CASE",
/* 228 */ "END",
/* 229 */ "WHEN",
@@ -1671,148 +1802,150 @@ static const char *const yyTokenName[] = {
/* 314 */ "SEMI",
/* 315 */ "STAR",
/* 316 */ "STATEMENT",
- /* 317 */ "STRING",
- /* 318 */ "TIMES",
- /* 319 */ "UPDATE",
- /* 320 */ "VALUES",
- /* 321 */ "VARIABLE",
- /* 322 */ "VIEW",
- /* 323 */ "WAL",
- /* 324 */ "cmd",
- /* 325 */ "account_options",
- /* 326 */ "alter_account_options",
- /* 327 */ "literal",
- /* 328 */ "alter_account_option",
- /* 329 */ "user_name",
- /* 330 */ "sysinfo_opt",
- /* 331 */ "privileges",
- /* 332 */ "priv_level",
- /* 333 */ "priv_type_list",
- /* 334 */ "priv_type",
- /* 335 */ "db_name",
- /* 336 */ "topic_name",
- /* 337 */ "dnode_endpoint",
- /* 338 */ "force_opt",
- /* 339 */ "not_exists_opt",
- /* 340 */ "db_options",
- /* 341 */ "exists_opt",
- /* 342 */ "alter_db_options",
- /* 343 */ "speed_opt",
- /* 344 */ "integer_list",
- /* 345 */ "variable_list",
- /* 346 */ "retention_list",
- /* 347 */ "alter_db_option",
- /* 348 */ "retention",
- /* 349 */ "full_table_name",
- /* 350 */ "column_def_list",
- /* 351 */ "tags_def_opt",
- /* 352 */ "table_options",
- /* 353 */ "multi_create_clause",
- /* 354 */ "tags_def",
- /* 355 */ "multi_drop_clause",
- /* 356 */ "alter_table_clause",
- /* 357 */ "alter_table_options",
- /* 358 */ "column_name",
- /* 359 */ "type_name",
- /* 360 */ "signed_literal",
- /* 361 */ "create_subtable_clause",
- /* 362 */ "specific_cols_opt",
- /* 363 */ "expression_list",
- /* 364 */ "drop_table_clause",
- /* 365 */ "col_name_list",
- /* 366 */ "table_name",
- /* 367 */ "column_def",
- /* 368 */ "duration_list",
- /* 369 */ "rollup_func_list",
- /* 370 */ "alter_table_option",
- /* 371 */ "duration_literal",
- /* 372 */ "rollup_func_name",
- /* 373 */ "function_name",
- /* 374 */ "col_name",
- /* 375 */ "db_name_cond_opt",
- /* 376 */ "like_pattern_opt",
- /* 377 */ "table_name_cond",
- /* 378 */ "from_db_opt",
- /* 379 */ "tag_list_opt",
- /* 380 */ "tag_item",
- /* 381 */ "column_alias",
- /* 382 */ "index_options",
- /* 383 */ "func_list",
- /* 384 */ "sliding_opt",
- /* 385 */ "sma_stream_opt",
- /* 386 */ "func",
- /* 387 */ "query_or_subquery",
- /* 388 */ "cgroup_name",
- /* 389 */ "analyze_opt",
- /* 390 */ "explain_options",
- /* 391 */ "agg_func_opt",
- /* 392 */ "bufsize_opt",
- /* 393 */ "stream_name",
- /* 394 */ "stream_options",
- /* 395 */ "subtable_opt",
- /* 396 */ "expression",
- /* 397 */ "dnode_list",
- /* 398 */ "where_clause_opt",
- /* 399 */ "signed",
- /* 400 */ "literal_func",
- /* 401 */ "literal_list",
- /* 402 */ "table_alias",
- /* 403 */ "expr_or_subquery",
- /* 404 */ "pseudo_column",
- /* 405 */ "column_reference",
- /* 406 */ "function_expression",
- /* 407 */ "case_when_expression",
- /* 408 */ "star_func",
- /* 409 */ "star_func_para_list",
- /* 410 */ "noarg_func",
- /* 411 */ "other_para_list",
- /* 412 */ "star_func_para",
- /* 413 */ "when_then_list",
- /* 414 */ "case_when_else_opt",
- /* 415 */ "common_expression",
- /* 416 */ "when_then_expr",
- /* 417 */ "predicate",
- /* 418 */ "compare_op",
- /* 419 */ "in_op",
- /* 420 */ "in_predicate_value",
- /* 421 */ "boolean_value_expression",
- /* 422 */ "boolean_primary",
- /* 423 */ "from_clause_opt",
- /* 424 */ "table_reference_list",
- /* 425 */ "table_reference",
- /* 426 */ "table_primary",
- /* 427 */ "joined_table",
- /* 428 */ "alias_opt",
- /* 429 */ "subquery",
- /* 430 */ "parenthesized_joined_table",
- /* 431 */ "join_type",
- /* 432 */ "search_condition",
- /* 433 */ "query_specification",
- /* 434 */ "set_quantifier_opt",
- /* 435 */ "select_list",
- /* 436 */ "partition_by_clause_opt",
- /* 437 */ "range_opt",
- /* 438 */ "every_opt",
- /* 439 */ "fill_opt",
- /* 440 */ "twindow_clause_opt",
- /* 441 */ "group_by_clause_opt",
- /* 442 */ "having_clause_opt",
- /* 443 */ "select_item",
- /* 444 */ "partition_list",
- /* 445 */ "partition_item",
- /* 446 */ "fill_mode",
- /* 447 */ "group_by_list",
- /* 448 */ "query_expression",
- /* 449 */ "query_simple",
- /* 450 */ "order_by_clause_opt",
- /* 451 */ "slimit_clause_opt",
- /* 452 */ "limit_clause_opt",
- /* 453 */ "union_query_expression",
- /* 454 */ "query_simple_or_subquery",
- /* 455 */ "sort_specification_list",
- /* 456 */ "sort_specification",
- /* 457 */ "ordering_specification_opt",
- /* 458 */ "null_ordering_opt",
+ /* 317 */ "STRICT",
+ /* 318 */ "STRING",
+ /* 319 */ "TIMES",
+ /* 320 */ "UPDATE",
+ /* 321 */ "VALUES",
+ /* 322 */ "VARIABLE",
+ /* 323 */ "VIEW",
+ /* 324 */ "WAL",
+ /* 325 */ "cmd",
+ /* 326 */ "account_options",
+ /* 327 */ "alter_account_options",
+ /* 328 */ "literal",
+ /* 329 */ "alter_account_option",
+ /* 330 */ "user_name",
+ /* 331 */ "sysinfo_opt",
+ /* 332 */ "privileges",
+ /* 333 */ "priv_level",
+ /* 334 */ "priv_type_list",
+ /* 335 */ "priv_type",
+ /* 336 */ "db_name",
+ /* 337 */ "topic_name",
+ /* 338 */ "dnode_endpoint",
+ /* 339 */ "force_opt",
+ /* 340 */ "not_exists_opt",
+ /* 341 */ "db_options",
+ /* 342 */ "exists_opt",
+ /* 343 */ "alter_db_options",
+ /* 344 */ "speed_opt",
+ /* 345 */ "integer_list",
+ /* 346 */ "variable_list",
+ /* 347 */ "retention_list",
+ /* 348 */ "alter_db_option",
+ /* 349 */ "retention",
+ /* 350 */ "full_table_name",
+ /* 351 */ "column_def_list",
+ /* 352 */ "tags_def_opt",
+ /* 353 */ "table_options",
+ /* 354 */ "multi_create_clause",
+ /* 355 */ "tags_def",
+ /* 356 */ "multi_drop_clause",
+ /* 357 */ "alter_table_clause",
+ /* 358 */ "alter_table_options",
+ /* 359 */ "column_name",
+ /* 360 */ "type_name",
+ /* 361 */ "signed_literal",
+ /* 362 */ "create_subtable_clause",
+ /* 363 */ "specific_cols_opt",
+ /* 364 */ "expression_list",
+ /* 365 */ "drop_table_clause",
+ /* 366 */ "col_name_list",
+ /* 367 */ "table_name",
+ /* 368 */ "column_def",
+ /* 369 */ "duration_list",
+ /* 370 */ "rollup_func_list",
+ /* 371 */ "alter_table_option",
+ /* 372 */ "duration_literal",
+ /* 373 */ "rollup_func_name",
+ /* 374 */ "function_name",
+ /* 375 */ "col_name",
+ /* 376 */ "db_name_cond_opt",
+ /* 377 */ "like_pattern_opt",
+ /* 378 */ "table_name_cond",
+ /* 379 */ "from_db_opt",
+ /* 380 */ "tag_list_opt",
+ /* 381 */ "tag_item",
+ /* 382 */ "column_alias",
+ /* 383 */ "index_options",
+ /* 384 */ "func_list",
+ /* 385 */ "sliding_opt",
+ /* 386 */ "sma_stream_opt",
+ /* 387 */ "func",
+ /* 388 */ "sma_func_name",
+ /* 389 */ "query_or_subquery",
+ /* 390 */ "cgroup_name",
+ /* 391 */ "analyze_opt",
+ /* 392 */ "explain_options",
+ /* 393 */ "agg_func_opt",
+ /* 394 */ "bufsize_opt",
+ /* 395 */ "stream_name",
+ /* 396 */ "stream_options",
+ /* 397 */ "subtable_opt",
+ /* 398 */ "expression",
+ /* 399 */ "dnode_list",
+ /* 400 */ "where_clause_opt",
+ /* 401 */ "signed",
+ /* 402 */ "literal_func",
+ /* 403 */ "literal_list",
+ /* 404 */ "table_alias",
+ /* 405 */ "expr_or_subquery",
+ /* 406 */ "pseudo_column",
+ /* 407 */ "column_reference",
+ /* 408 */ "function_expression",
+ /* 409 */ "case_when_expression",
+ /* 410 */ "star_func",
+ /* 411 */ "star_func_para_list",
+ /* 412 */ "noarg_func",
+ /* 413 */ "other_para_list",
+ /* 414 */ "star_func_para",
+ /* 415 */ "when_then_list",
+ /* 416 */ "case_when_else_opt",
+ /* 417 */ "common_expression",
+ /* 418 */ "when_then_expr",
+ /* 419 */ "predicate",
+ /* 420 */ "compare_op",
+ /* 421 */ "in_op",
+ /* 422 */ "in_predicate_value",
+ /* 423 */ "boolean_value_expression",
+ /* 424 */ "boolean_primary",
+ /* 425 */ "from_clause_opt",
+ /* 426 */ "table_reference_list",
+ /* 427 */ "table_reference",
+ /* 428 */ "table_primary",
+ /* 429 */ "joined_table",
+ /* 430 */ "alias_opt",
+ /* 431 */ "subquery",
+ /* 432 */ "parenthesized_joined_table",
+ /* 433 */ "join_type",
+ /* 434 */ "search_condition",
+ /* 435 */ "query_specification",
+ /* 436 */ "set_quantifier_opt",
+ /* 437 */ "select_list",
+ /* 438 */ "partition_by_clause_opt",
+ /* 439 */ "range_opt",
+ /* 440 */ "every_opt",
+ /* 441 */ "fill_opt",
+ /* 442 */ "twindow_clause_opt",
+ /* 443 */ "group_by_clause_opt",
+ /* 444 */ "having_clause_opt",
+ /* 445 */ "select_item",
+ /* 446 */ "partition_list",
+ /* 447 */ "partition_item",
+ /* 448 */ "fill_mode",
+ /* 449 */ "group_by_list",
+ /* 450 */ "query_expression",
+ /* 451 */ "query_simple",
+ /* 452 */ "order_by_clause_opt",
+ /* 453 */ "slimit_clause_opt",
+ /* 454 */ "limit_clause_opt",
+ /* 455 */ "union_query_expression",
+ /* 456 */ "query_simple_or_subquery",
+ /* 457 */ "sort_specification_list",
+ /* 458 */ "sort_specification",
+ /* 459 */ "ordering_specification_opt",
+ /* 460 */ "null_ordering_opt",
};
#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
@@ -1912,454 +2045,459 @@ static const char *const yyRuleName[] = {
/* 89 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER",
/* 90 */ "db_options ::= db_options PRECISION NK_STRING",
/* 91 */ "db_options ::= db_options REPLICA NK_INTEGER",
- /* 92 */ "db_options ::= db_options STRICT NK_STRING",
- /* 93 */ "db_options ::= db_options VGROUPS NK_INTEGER",
- /* 94 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER",
- /* 95 */ "db_options ::= db_options RETENTIONS retention_list",
- /* 96 */ "db_options ::= db_options SCHEMALESS NK_INTEGER",
- /* 97 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER",
- /* 98 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER",
- /* 99 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER",
- /* 100 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER",
- /* 101 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER",
- /* 102 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER",
- /* 103 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER",
- /* 104 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER",
- /* 105 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER",
- /* 106 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER",
- /* 107 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER",
- /* 108 */ "alter_db_options ::= alter_db_option",
- /* 109 */ "alter_db_options ::= alter_db_options alter_db_option",
- /* 110 */ "alter_db_option ::= BUFFER NK_INTEGER",
- /* 111 */ "alter_db_option ::= CACHEMODEL NK_STRING",
- /* 112 */ "alter_db_option ::= CACHESIZE NK_INTEGER",
- /* 113 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER",
- /* 114 */ "alter_db_option ::= KEEP integer_list",
- /* 115 */ "alter_db_option ::= KEEP variable_list",
- /* 116 */ "alter_db_option ::= PAGES NK_INTEGER",
- /* 117 */ "alter_db_option ::= REPLICA NK_INTEGER",
- /* 118 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER",
- /* 119 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER",
- /* 120 */ "integer_list ::= NK_INTEGER",
- /* 121 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER",
- /* 122 */ "variable_list ::= NK_VARIABLE",
- /* 123 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE",
- /* 124 */ "retention_list ::= retention",
- /* 125 */ "retention_list ::= retention_list NK_COMMA retention",
- /* 126 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE",
- /* 127 */ "speed_opt ::=",
- /* 128 */ "speed_opt ::= MAX_SPEED NK_INTEGER",
- /* 129 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options",
- /* 130 */ "cmd ::= CREATE TABLE multi_create_clause",
- /* 131 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options",
- /* 132 */ "cmd ::= DROP TABLE multi_drop_clause",
- /* 133 */ "cmd ::= DROP STABLE exists_opt full_table_name",
- /* 134 */ "cmd ::= ALTER TABLE alter_table_clause",
- /* 135 */ "cmd ::= ALTER STABLE alter_table_clause",
- /* 136 */ "alter_table_clause ::= full_table_name alter_table_options",
- /* 137 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name",
- /* 138 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name",
- /* 139 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name",
- /* 140 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name",
- /* 141 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name",
- /* 142 */ "alter_table_clause ::= full_table_name DROP TAG column_name",
- /* 143 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name",
- /* 144 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name",
- /* 145 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal",
- /* 146 */ "multi_create_clause ::= create_subtable_clause",
- /* 147 */ "multi_create_clause ::= multi_create_clause create_subtable_clause",
- /* 148 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options",
- /* 149 */ "multi_drop_clause ::= drop_table_clause",
- /* 150 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause",
- /* 151 */ "drop_table_clause ::= exists_opt full_table_name",
- /* 152 */ "specific_cols_opt ::=",
- /* 153 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP",
- /* 154 */ "full_table_name ::= table_name",
- /* 155 */ "full_table_name ::= db_name NK_DOT table_name",
- /* 156 */ "column_def_list ::= column_def",
- /* 157 */ "column_def_list ::= column_def_list NK_COMMA column_def",
- /* 158 */ "column_def ::= column_name type_name",
- /* 159 */ "column_def ::= column_name type_name COMMENT NK_STRING",
- /* 160 */ "type_name ::= BOOL",
- /* 161 */ "type_name ::= TINYINT",
- /* 162 */ "type_name ::= SMALLINT",
- /* 163 */ "type_name ::= INT",
- /* 164 */ "type_name ::= INTEGER",
- /* 165 */ "type_name ::= BIGINT",
- /* 166 */ "type_name ::= FLOAT",
- /* 167 */ "type_name ::= DOUBLE",
- /* 168 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP",
- /* 169 */ "type_name ::= TIMESTAMP",
- /* 170 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP",
- /* 171 */ "type_name ::= TINYINT UNSIGNED",
- /* 172 */ "type_name ::= SMALLINT UNSIGNED",
- /* 173 */ "type_name ::= INT UNSIGNED",
- /* 174 */ "type_name ::= BIGINT UNSIGNED",
- /* 175 */ "type_name ::= JSON",
- /* 176 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP",
- /* 177 */ "type_name ::= MEDIUMBLOB",
- /* 178 */ "type_name ::= BLOB",
- /* 179 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP",
- /* 180 */ "type_name ::= DECIMAL",
- /* 181 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP",
- /* 182 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP",
- /* 183 */ "tags_def_opt ::=",
- /* 184 */ "tags_def_opt ::= tags_def",
- /* 185 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP",
- /* 186 */ "table_options ::=",
- /* 187 */ "table_options ::= table_options COMMENT NK_STRING",
- /* 188 */ "table_options ::= table_options MAX_DELAY duration_list",
- /* 189 */ "table_options ::= table_options WATERMARK duration_list",
- /* 190 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP",
- /* 191 */ "table_options ::= table_options TTL NK_INTEGER",
- /* 192 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP",
- /* 193 */ "table_options ::= table_options DELETE_MARK duration_list",
- /* 194 */ "alter_table_options ::= alter_table_option",
- /* 195 */ "alter_table_options ::= alter_table_options alter_table_option",
- /* 196 */ "alter_table_option ::= COMMENT NK_STRING",
- /* 197 */ "alter_table_option ::= TTL NK_INTEGER",
- /* 198 */ "duration_list ::= duration_literal",
- /* 199 */ "duration_list ::= duration_list NK_COMMA duration_literal",
- /* 200 */ "rollup_func_list ::= rollup_func_name",
- /* 201 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name",
- /* 202 */ "rollup_func_name ::= function_name",
- /* 203 */ "rollup_func_name ::= FIRST",
- /* 204 */ "rollup_func_name ::= LAST",
- /* 205 */ "col_name_list ::= col_name",
- /* 206 */ "col_name_list ::= col_name_list NK_COMMA col_name",
- /* 207 */ "col_name ::= column_name",
- /* 208 */ "cmd ::= SHOW DNODES",
- /* 209 */ "cmd ::= SHOW USERS",
- /* 210 */ "cmd ::= SHOW USER PRIVILEGES",
- /* 211 */ "cmd ::= SHOW DATABASES",
- /* 212 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt",
- /* 213 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt",
- /* 214 */ "cmd ::= SHOW db_name_cond_opt VGROUPS",
- /* 215 */ "cmd ::= SHOW MNODES",
- /* 216 */ "cmd ::= SHOW QNODES",
- /* 217 */ "cmd ::= SHOW FUNCTIONS",
- /* 218 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt",
- /* 219 */ "cmd ::= SHOW STREAMS",
- /* 220 */ "cmd ::= SHOW ACCOUNTS",
- /* 221 */ "cmd ::= SHOW APPS",
- /* 222 */ "cmd ::= SHOW CONNECTIONS",
- /* 223 */ "cmd ::= SHOW LICENCES",
- /* 224 */ "cmd ::= SHOW GRANTS",
- /* 225 */ "cmd ::= SHOW CREATE DATABASE db_name",
- /* 226 */ "cmd ::= SHOW CREATE TABLE full_table_name",
- /* 227 */ "cmd ::= SHOW CREATE STABLE full_table_name",
- /* 228 */ "cmd ::= SHOW QUERIES",
- /* 229 */ "cmd ::= SHOW SCORES",
- /* 230 */ "cmd ::= SHOW TOPICS",
- /* 231 */ "cmd ::= SHOW VARIABLES",
- /* 232 */ "cmd ::= SHOW CLUSTER VARIABLES",
- /* 233 */ "cmd ::= SHOW LOCAL VARIABLES",
- /* 234 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt",
- /* 235 */ "cmd ::= SHOW BNODES",
- /* 236 */ "cmd ::= SHOW SNODES",
- /* 237 */ "cmd ::= SHOW CLUSTER",
- /* 238 */ "cmd ::= SHOW TRANSACTIONS",
- /* 239 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name",
- /* 240 */ "cmd ::= SHOW CONSUMERS",
- /* 241 */ "cmd ::= SHOW SUBSCRIPTIONS",
- /* 242 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt",
- /* 243 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt",
- /* 244 */ "cmd ::= SHOW VNODES NK_INTEGER",
- /* 245 */ "cmd ::= SHOW VNODES NK_STRING",
- /* 246 */ "db_name_cond_opt ::=",
- /* 247 */ "db_name_cond_opt ::= db_name NK_DOT",
- /* 248 */ "like_pattern_opt ::=",
- /* 249 */ "like_pattern_opt ::= LIKE NK_STRING",
- /* 250 */ "table_name_cond ::= table_name",
- /* 251 */ "from_db_opt ::=",
- /* 252 */ "from_db_opt ::= FROM db_name",
- /* 253 */ "tag_list_opt ::=",
- /* 254 */ "tag_list_opt ::= tag_item",
- /* 255 */ "tag_list_opt ::= tag_list_opt NK_COMMA tag_item",
- /* 256 */ "tag_item ::= TBNAME",
- /* 257 */ "tag_item ::= QTAGS",
- /* 258 */ "tag_item ::= column_name",
- /* 259 */ "tag_item ::= column_name column_alias",
- /* 260 */ "tag_item ::= column_name AS column_alias",
- /* 261 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options",
- /* 262 */ "cmd ::= DROP INDEX exists_opt full_table_name",
- /* 263 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt",
- /* 264 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt",
- /* 265 */ "func_list ::= func",
- /* 266 */ "func_list ::= func_list NK_COMMA func",
- /* 267 */ "func ::= function_name NK_LP expression_list NK_RP",
- /* 268 */ "sma_stream_opt ::=",
- /* 269 */ "sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal",
- /* 270 */ "sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal",
- /* 271 */ "sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal",
- /* 272 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery",
- /* 273 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name",
- /* 274 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name",
- /* 275 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name",
- /* 276 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name",
- /* 277 */ "cmd ::= DROP TOPIC exists_opt topic_name",
- /* 278 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name",
- /* 279 */ "cmd ::= DESC full_table_name",
- /* 280 */ "cmd ::= DESCRIBE full_table_name",
- /* 281 */ "cmd ::= RESET QUERY CACHE",
- /* 282 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery",
- /* 283 */ "analyze_opt ::=",
- /* 284 */ "analyze_opt ::= ANALYZE",
- /* 285 */ "explain_options ::=",
- /* 286 */ "explain_options ::= explain_options VERBOSE NK_BOOL",
- /* 287 */ "explain_options ::= explain_options RATIO NK_FLOAT",
- /* 288 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt",
- /* 289 */ "cmd ::= DROP FUNCTION exists_opt function_name",
- /* 290 */ "agg_func_opt ::=",
- /* 291 */ "agg_func_opt ::= AGGREGATE",
- /* 292 */ "bufsize_opt ::=",
- /* 293 */ "bufsize_opt ::= BUFSIZE NK_INTEGER",
- /* 294 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery",
- /* 295 */ "cmd ::= DROP STREAM exists_opt stream_name",
- /* 296 */ "stream_options ::=",
- /* 297 */ "stream_options ::= stream_options TRIGGER AT_ONCE",
- /* 298 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE",
- /* 299 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal",
- /* 300 */ "stream_options ::= stream_options WATERMARK duration_literal",
- /* 301 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER",
- /* 302 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER",
- /* 303 */ "subtable_opt ::=",
- /* 304 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP",
- /* 305 */ "cmd ::= KILL CONNECTION NK_INTEGER",
- /* 306 */ "cmd ::= KILL QUERY NK_STRING",
- /* 307 */ "cmd ::= KILL TRANSACTION NK_INTEGER",
- /* 308 */ "cmd ::= BALANCE VGROUP",
- /* 309 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER",
- /* 310 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list",
- /* 311 */ "cmd ::= SPLIT VGROUP NK_INTEGER",
- /* 312 */ "dnode_list ::= DNODE NK_INTEGER",
- /* 313 */ "dnode_list ::= dnode_list DNODE NK_INTEGER",
- /* 314 */ "cmd ::= DELETE FROM full_table_name where_clause_opt",
- /* 315 */ "cmd ::= query_or_subquery",
- /* 316 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery",
- /* 317 */ "cmd ::= INSERT INTO full_table_name query_or_subquery",
- /* 318 */ "literal ::= NK_INTEGER",
- /* 319 */ "literal ::= NK_FLOAT",
- /* 320 */ "literal ::= NK_STRING",
- /* 321 */ "literal ::= NK_BOOL",
- /* 322 */ "literal ::= TIMESTAMP NK_STRING",
- /* 323 */ "literal ::= duration_literal",
- /* 324 */ "literal ::= NULL",
- /* 325 */ "literal ::= NK_QUESTION",
- /* 326 */ "duration_literal ::= NK_VARIABLE",
- /* 327 */ "signed ::= NK_INTEGER",
- /* 328 */ "signed ::= NK_PLUS NK_INTEGER",
- /* 329 */ "signed ::= NK_MINUS NK_INTEGER",
- /* 330 */ "signed ::= NK_FLOAT",
- /* 331 */ "signed ::= NK_PLUS NK_FLOAT",
- /* 332 */ "signed ::= NK_MINUS NK_FLOAT",
- /* 333 */ "signed_literal ::= signed",
- /* 334 */ "signed_literal ::= NK_STRING",
- /* 335 */ "signed_literal ::= NK_BOOL",
- /* 336 */ "signed_literal ::= TIMESTAMP NK_STRING",
- /* 337 */ "signed_literal ::= duration_literal",
- /* 338 */ "signed_literal ::= NULL",
- /* 339 */ "signed_literal ::= literal_func",
- /* 340 */ "signed_literal ::= NK_QUESTION",
- /* 341 */ "literal_list ::= signed_literal",
- /* 342 */ "literal_list ::= literal_list NK_COMMA signed_literal",
- /* 343 */ "db_name ::= NK_ID",
- /* 344 */ "table_name ::= NK_ID",
- /* 345 */ "column_name ::= NK_ID",
- /* 346 */ "function_name ::= NK_ID",
- /* 347 */ "table_alias ::= NK_ID",
- /* 348 */ "column_alias ::= NK_ID",
- /* 349 */ "user_name ::= NK_ID",
- /* 350 */ "topic_name ::= NK_ID",
- /* 351 */ "stream_name ::= NK_ID",
- /* 352 */ "cgroup_name ::= NK_ID",
- /* 353 */ "expr_or_subquery ::= expression",
- /* 354 */ "expression ::= literal",
- /* 355 */ "expression ::= pseudo_column",
- /* 356 */ "expression ::= column_reference",
- /* 357 */ "expression ::= function_expression",
- /* 358 */ "expression ::= case_when_expression",
- /* 359 */ "expression ::= NK_LP expression NK_RP",
- /* 360 */ "expression ::= NK_PLUS expr_or_subquery",
- /* 361 */ "expression ::= NK_MINUS expr_or_subquery",
- /* 362 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery",
- /* 363 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery",
- /* 364 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery",
- /* 365 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery",
- /* 366 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery",
- /* 367 */ "expression ::= column_reference NK_ARROW NK_STRING",
- /* 368 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery",
- /* 369 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery",
- /* 370 */ "expression_list ::= expr_or_subquery",
- /* 371 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery",
- /* 372 */ "column_reference ::= column_name",
- /* 373 */ "column_reference ::= table_name NK_DOT column_name",
- /* 374 */ "pseudo_column ::= ROWTS",
- /* 375 */ "pseudo_column ::= TBNAME",
- /* 376 */ "pseudo_column ::= table_name NK_DOT TBNAME",
- /* 377 */ "pseudo_column ::= QSTART",
- /* 378 */ "pseudo_column ::= QEND",
- /* 379 */ "pseudo_column ::= QDURATION",
- /* 380 */ "pseudo_column ::= WSTART",
- /* 381 */ "pseudo_column ::= WEND",
- /* 382 */ "pseudo_column ::= WDURATION",
- /* 383 */ "pseudo_column ::= IROWTS",
- /* 384 */ "pseudo_column ::= QTAGS",
- /* 385 */ "function_expression ::= function_name NK_LP expression_list NK_RP",
- /* 386 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP",
- /* 387 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP",
- /* 388 */ "function_expression ::= literal_func",
- /* 389 */ "literal_func ::= noarg_func NK_LP NK_RP",
- /* 390 */ "literal_func ::= NOW",
- /* 391 */ "noarg_func ::= NOW",
- /* 392 */ "noarg_func ::= TODAY",
- /* 393 */ "noarg_func ::= TIMEZONE",
- /* 394 */ "noarg_func ::= DATABASE",
- /* 395 */ "noarg_func ::= CLIENT_VERSION",
- /* 396 */ "noarg_func ::= SERVER_VERSION",
- /* 397 */ "noarg_func ::= SERVER_STATUS",
- /* 398 */ "noarg_func ::= CURRENT_USER",
- /* 399 */ "noarg_func ::= USER",
- /* 400 */ "star_func ::= COUNT",
- /* 401 */ "star_func ::= FIRST",
- /* 402 */ "star_func ::= LAST",
- /* 403 */ "star_func ::= LAST_ROW",
- /* 404 */ "star_func_para_list ::= NK_STAR",
- /* 405 */ "star_func_para_list ::= other_para_list",
- /* 406 */ "other_para_list ::= star_func_para",
- /* 407 */ "other_para_list ::= other_para_list NK_COMMA star_func_para",
- /* 408 */ "star_func_para ::= expr_or_subquery",
- /* 409 */ "star_func_para ::= table_name NK_DOT NK_STAR",
- /* 410 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END",
- /* 411 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END",
- /* 412 */ "when_then_list ::= when_then_expr",
- /* 413 */ "when_then_list ::= when_then_list when_then_expr",
- /* 414 */ "when_then_expr ::= WHEN common_expression THEN common_expression",
- /* 415 */ "case_when_else_opt ::=",
- /* 416 */ "case_when_else_opt ::= ELSE common_expression",
- /* 417 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery",
- /* 418 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery",
- /* 419 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery",
- /* 420 */ "predicate ::= expr_or_subquery IS NULL",
- /* 421 */ "predicate ::= expr_or_subquery IS NOT NULL",
- /* 422 */ "predicate ::= expr_or_subquery in_op in_predicate_value",
- /* 423 */ "compare_op ::= NK_LT",
- /* 424 */ "compare_op ::= NK_GT",
- /* 425 */ "compare_op ::= NK_LE",
- /* 426 */ "compare_op ::= NK_GE",
- /* 427 */ "compare_op ::= NK_NE",
- /* 428 */ "compare_op ::= NK_EQ",
- /* 429 */ "compare_op ::= LIKE",
- /* 430 */ "compare_op ::= NOT LIKE",
- /* 431 */ "compare_op ::= MATCH",
- /* 432 */ "compare_op ::= NMATCH",
- /* 433 */ "compare_op ::= CONTAINS",
- /* 434 */ "in_op ::= IN",
- /* 435 */ "in_op ::= NOT IN",
- /* 436 */ "in_predicate_value ::= NK_LP literal_list NK_RP",
- /* 437 */ "boolean_value_expression ::= boolean_primary",
- /* 438 */ "boolean_value_expression ::= NOT boolean_primary",
- /* 439 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression",
- /* 440 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression",
- /* 441 */ "boolean_primary ::= predicate",
- /* 442 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP",
- /* 443 */ "common_expression ::= expr_or_subquery",
- /* 444 */ "common_expression ::= boolean_value_expression",
- /* 445 */ "from_clause_opt ::=",
- /* 446 */ "from_clause_opt ::= FROM table_reference_list",
- /* 447 */ "table_reference_list ::= table_reference",
- /* 448 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference",
- /* 449 */ "table_reference ::= table_primary",
- /* 450 */ "table_reference ::= joined_table",
- /* 451 */ "table_primary ::= table_name alias_opt",
- /* 452 */ "table_primary ::= db_name NK_DOT table_name alias_opt",
- /* 453 */ "table_primary ::= subquery alias_opt",
- /* 454 */ "table_primary ::= parenthesized_joined_table",
- /* 455 */ "alias_opt ::=",
- /* 456 */ "alias_opt ::= table_alias",
- /* 457 */ "alias_opt ::= AS table_alias",
- /* 458 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP",
- /* 459 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP",
- /* 460 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition",
- /* 461 */ "join_type ::=",
- /* 462 */ "join_type ::= INNER",
- /* 463 */ "query_specification ::= SELECT set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt",
- /* 464 */ "set_quantifier_opt ::=",
- /* 465 */ "set_quantifier_opt ::= DISTINCT",
- /* 466 */ "set_quantifier_opt ::= ALL",
- /* 467 */ "select_list ::= select_item",
- /* 468 */ "select_list ::= select_list NK_COMMA select_item",
- /* 469 */ "select_item ::= NK_STAR",
- /* 470 */ "select_item ::= common_expression",
- /* 471 */ "select_item ::= common_expression column_alias",
- /* 472 */ "select_item ::= common_expression AS column_alias",
- /* 473 */ "select_item ::= table_name NK_DOT NK_STAR",
- /* 474 */ "where_clause_opt ::=",
- /* 475 */ "where_clause_opt ::= WHERE search_condition",
- /* 476 */ "partition_by_clause_opt ::=",
- /* 477 */ "partition_by_clause_opt ::= PARTITION BY partition_list",
- /* 478 */ "partition_list ::= partition_item",
- /* 479 */ "partition_list ::= partition_list NK_COMMA partition_item",
- /* 480 */ "partition_item ::= expr_or_subquery",
- /* 481 */ "partition_item ::= expr_or_subquery column_alias",
- /* 482 */ "partition_item ::= expr_or_subquery AS column_alias",
- /* 483 */ "twindow_clause_opt ::=",
- /* 484 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP",
- /* 485 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP",
- /* 486 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt",
- /* 487 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt",
- /* 488 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition",
- /* 489 */ "sliding_opt ::=",
- /* 490 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP",
- /* 491 */ "fill_opt ::=",
- /* 492 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP",
- /* 493 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP",
- /* 494 */ "fill_mode ::= NONE",
- /* 495 */ "fill_mode ::= PREV",
- /* 496 */ "fill_mode ::= NULL",
- /* 497 */ "fill_mode ::= LINEAR",
- /* 498 */ "fill_mode ::= NEXT",
- /* 499 */ "group_by_clause_opt ::=",
- /* 500 */ "group_by_clause_opt ::= GROUP BY group_by_list",
- /* 501 */ "group_by_list ::= expr_or_subquery",
- /* 502 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery",
- /* 503 */ "having_clause_opt ::=",
- /* 504 */ "having_clause_opt ::= HAVING search_condition",
- /* 505 */ "range_opt ::=",
- /* 506 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP",
- /* 507 */ "every_opt ::=",
- /* 508 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP",
- /* 509 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt",
- /* 510 */ "query_simple ::= query_specification",
- /* 511 */ "query_simple ::= union_query_expression",
- /* 512 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery",
- /* 513 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery",
- /* 514 */ "query_simple_or_subquery ::= query_simple",
- /* 515 */ "query_simple_or_subquery ::= subquery",
- /* 516 */ "query_or_subquery ::= query_expression",
- /* 517 */ "query_or_subquery ::= subquery",
- /* 518 */ "order_by_clause_opt ::=",
- /* 519 */ "order_by_clause_opt ::= ORDER BY sort_specification_list",
- /* 520 */ "slimit_clause_opt ::=",
- /* 521 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER",
- /* 522 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER",
- /* 523 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER",
- /* 524 */ "limit_clause_opt ::=",
- /* 525 */ "limit_clause_opt ::= LIMIT NK_INTEGER",
- /* 526 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER",
- /* 527 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER",
- /* 528 */ "subquery ::= NK_LP query_expression NK_RP",
- /* 529 */ "subquery ::= NK_LP subquery NK_RP",
- /* 530 */ "search_condition ::= common_expression",
- /* 531 */ "sort_specification_list ::= sort_specification",
- /* 532 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification",
- /* 533 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt",
- /* 534 */ "ordering_specification_opt ::=",
- /* 535 */ "ordering_specification_opt ::= ASC",
- /* 536 */ "ordering_specification_opt ::= DESC",
- /* 537 */ "null_ordering_opt ::=",
- /* 538 */ "null_ordering_opt ::= NULLS FIRST",
- /* 539 */ "null_ordering_opt ::= NULLS LAST",
+ /* 92 */ "db_options ::= db_options VGROUPS NK_INTEGER",
+ /* 93 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER",
+ /* 94 */ "db_options ::= db_options RETENTIONS retention_list",
+ /* 95 */ "db_options ::= db_options SCHEMALESS NK_INTEGER",
+ /* 96 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER",
+ /* 97 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER",
+ /* 98 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER",
+ /* 99 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER",
+ /* 100 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER",
+ /* 101 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER",
+ /* 102 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER",
+ /* 103 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER",
+ /* 104 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER",
+ /* 105 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER",
+ /* 106 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER",
+ /* 107 */ "alter_db_options ::= alter_db_option",
+ /* 108 */ "alter_db_options ::= alter_db_options alter_db_option",
+ /* 109 */ "alter_db_option ::= BUFFER NK_INTEGER",
+ /* 110 */ "alter_db_option ::= CACHEMODEL NK_STRING",
+ /* 111 */ "alter_db_option ::= CACHESIZE NK_INTEGER",
+ /* 112 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER",
+ /* 113 */ "alter_db_option ::= KEEP integer_list",
+ /* 114 */ "alter_db_option ::= KEEP variable_list",
+ /* 115 */ "alter_db_option ::= PAGES NK_INTEGER",
+ /* 116 */ "alter_db_option ::= REPLICA NK_INTEGER",
+ /* 117 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER",
+ /* 118 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER",
+ /* 119 */ "integer_list ::= NK_INTEGER",
+ /* 120 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER",
+ /* 121 */ "variable_list ::= NK_VARIABLE",
+ /* 122 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE",
+ /* 123 */ "retention_list ::= retention",
+ /* 124 */ "retention_list ::= retention_list NK_COMMA retention",
+ /* 125 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE",
+ /* 126 */ "speed_opt ::=",
+ /* 127 */ "speed_opt ::= MAX_SPEED NK_INTEGER",
+ /* 128 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options",
+ /* 129 */ "cmd ::= CREATE TABLE multi_create_clause",
+ /* 130 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options",
+ /* 131 */ "cmd ::= DROP TABLE multi_drop_clause",
+ /* 132 */ "cmd ::= DROP STABLE exists_opt full_table_name",
+ /* 133 */ "cmd ::= ALTER TABLE alter_table_clause",
+ /* 134 */ "cmd ::= ALTER STABLE alter_table_clause",
+ /* 135 */ "alter_table_clause ::= full_table_name alter_table_options",
+ /* 136 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name",
+ /* 137 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name",
+ /* 138 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name",
+ /* 139 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name",
+ /* 140 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name",
+ /* 141 */ "alter_table_clause ::= full_table_name DROP TAG column_name",
+ /* 142 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name",
+ /* 143 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name",
+ /* 144 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal",
+ /* 145 */ "multi_create_clause ::= create_subtable_clause",
+ /* 146 */ "multi_create_clause ::= multi_create_clause create_subtable_clause",
+ /* 147 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options",
+ /* 148 */ "multi_drop_clause ::= drop_table_clause",
+ /* 149 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause",
+ /* 150 */ "drop_table_clause ::= exists_opt full_table_name",
+ /* 151 */ "specific_cols_opt ::=",
+ /* 152 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP",
+ /* 153 */ "full_table_name ::= table_name",
+ /* 154 */ "full_table_name ::= db_name NK_DOT table_name",
+ /* 155 */ "column_def_list ::= column_def",
+ /* 156 */ "column_def_list ::= column_def_list NK_COMMA column_def",
+ /* 157 */ "column_def ::= column_name type_name",
+ /* 158 */ "column_def ::= column_name type_name COMMENT NK_STRING",
+ /* 159 */ "type_name ::= BOOL",
+ /* 160 */ "type_name ::= TINYINT",
+ /* 161 */ "type_name ::= SMALLINT",
+ /* 162 */ "type_name ::= INT",
+ /* 163 */ "type_name ::= INTEGER",
+ /* 164 */ "type_name ::= BIGINT",
+ /* 165 */ "type_name ::= FLOAT",
+ /* 166 */ "type_name ::= DOUBLE",
+ /* 167 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP",
+ /* 168 */ "type_name ::= TIMESTAMP",
+ /* 169 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP",
+ /* 170 */ "type_name ::= TINYINT UNSIGNED",
+ /* 171 */ "type_name ::= SMALLINT UNSIGNED",
+ /* 172 */ "type_name ::= INT UNSIGNED",
+ /* 173 */ "type_name ::= BIGINT UNSIGNED",
+ /* 174 */ "type_name ::= JSON",
+ /* 175 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP",
+ /* 176 */ "type_name ::= MEDIUMBLOB",
+ /* 177 */ "type_name ::= BLOB",
+ /* 178 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP",
+ /* 179 */ "type_name ::= DECIMAL",
+ /* 180 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP",
+ /* 181 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP",
+ /* 182 */ "tags_def_opt ::=",
+ /* 183 */ "tags_def_opt ::= tags_def",
+ /* 184 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP",
+ /* 185 */ "table_options ::=",
+ /* 186 */ "table_options ::= table_options COMMENT NK_STRING",
+ /* 187 */ "table_options ::= table_options MAX_DELAY duration_list",
+ /* 188 */ "table_options ::= table_options WATERMARK duration_list",
+ /* 189 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP",
+ /* 190 */ "table_options ::= table_options TTL NK_INTEGER",
+ /* 191 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP",
+ /* 192 */ "table_options ::= table_options DELETE_MARK duration_list",
+ /* 193 */ "alter_table_options ::= alter_table_option",
+ /* 194 */ "alter_table_options ::= alter_table_options alter_table_option",
+ /* 195 */ "alter_table_option ::= COMMENT NK_STRING",
+ /* 196 */ "alter_table_option ::= TTL NK_INTEGER",
+ /* 197 */ "duration_list ::= duration_literal",
+ /* 198 */ "duration_list ::= duration_list NK_COMMA duration_literal",
+ /* 199 */ "rollup_func_list ::= rollup_func_name",
+ /* 200 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name",
+ /* 201 */ "rollup_func_name ::= function_name",
+ /* 202 */ "rollup_func_name ::= FIRST",
+ /* 203 */ "rollup_func_name ::= LAST",
+ /* 204 */ "col_name_list ::= col_name",
+ /* 205 */ "col_name_list ::= col_name_list NK_COMMA col_name",
+ /* 206 */ "col_name ::= column_name",
+ /* 207 */ "cmd ::= SHOW DNODES",
+ /* 208 */ "cmd ::= SHOW USERS",
+ /* 209 */ "cmd ::= SHOW USER PRIVILEGES",
+ /* 210 */ "cmd ::= SHOW DATABASES",
+ /* 211 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt",
+ /* 212 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt",
+ /* 213 */ "cmd ::= SHOW db_name_cond_opt VGROUPS",
+ /* 214 */ "cmd ::= SHOW MNODES",
+ /* 215 */ "cmd ::= SHOW QNODES",
+ /* 216 */ "cmd ::= SHOW FUNCTIONS",
+ /* 217 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt",
+ /* 218 */ "cmd ::= SHOW STREAMS",
+ /* 219 */ "cmd ::= SHOW ACCOUNTS",
+ /* 220 */ "cmd ::= SHOW APPS",
+ /* 221 */ "cmd ::= SHOW CONNECTIONS",
+ /* 222 */ "cmd ::= SHOW LICENCES",
+ /* 223 */ "cmd ::= SHOW GRANTS",
+ /* 224 */ "cmd ::= SHOW CREATE DATABASE db_name",
+ /* 225 */ "cmd ::= SHOW CREATE TABLE full_table_name",
+ /* 226 */ "cmd ::= SHOW CREATE STABLE full_table_name",
+ /* 227 */ "cmd ::= SHOW QUERIES",
+ /* 228 */ "cmd ::= SHOW SCORES",
+ /* 229 */ "cmd ::= SHOW TOPICS",
+ /* 230 */ "cmd ::= SHOW VARIABLES",
+ /* 231 */ "cmd ::= SHOW CLUSTER VARIABLES",
+ /* 232 */ "cmd ::= SHOW LOCAL VARIABLES",
+ /* 233 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt",
+ /* 234 */ "cmd ::= SHOW BNODES",
+ /* 235 */ "cmd ::= SHOW SNODES",
+ /* 236 */ "cmd ::= SHOW CLUSTER",
+ /* 237 */ "cmd ::= SHOW TRANSACTIONS",
+ /* 238 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name",
+ /* 239 */ "cmd ::= SHOW CONSUMERS",
+ /* 240 */ "cmd ::= SHOW SUBSCRIPTIONS",
+ /* 241 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt",
+ /* 242 */ "cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt",
+ /* 243 */ "cmd ::= SHOW VNODES NK_INTEGER",
+ /* 244 */ "cmd ::= SHOW VNODES NK_STRING",
+ /* 245 */ "db_name_cond_opt ::=",
+ /* 246 */ "db_name_cond_opt ::= db_name NK_DOT",
+ /* 247 */ "like_pattern_opt ::=",
+ /* 248 */ "like_pattern_opt ::= LIKE NK_STRING",
+ /* 249 */ "table_name_cond ::= table_name",
+ /* 250 */ "from_db_opt ::=",
+ /* 251 */ "from_db_opt ::= FROM db_name",
+ /* 252 */ "tag_list_opt ::=",
+ /* 253 */ "tag_list_opt ::= tag_item",
+ /* 254 */ "tag_list_opt ::= tag_list_opt NK_COMMA tag_item",
+ /* 255 */ "tag_item ::= TBNAME",
+ /* 256 */ "tag_item ::= QTAGS",
+ /* 257 */ "tag_item ::= column_name",
+ /* 258 */ "tag_item ::= column_name column_alias",
+ /* 259 */ "tag_item ::= column_name AS column_alias",
+ /* 260 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options",
+ /* 261 */ "cmd ::= DROP INDEX exists_opt full_table_name",
+ /* 262 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt",
+ /* 263 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt",
+ /* 264 */ "func_list ::= func",
+ /* 265 */ "func_list ::= func_list NK_COMMA func",
+ /* 266 */ "func ::= sma_func_name NK_LP expression_list NK_RP",
+ /* 267 */ "sma_func_name ::= function_name",
+ /* 268 */ "sma_func_name ::= COUNT",
+ /* 269 */ "sma_func_name ::= FIRST",
+ /* 270 */ "sma_func_name ::= LAST",
+ /* 271 */ "sma_func_name ::= LAST_ROW",
+ /* 272 */ "sma_stream_opt ::=",
+ /* 273 */ "sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal",
+ /* 274 */ "sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal",
+ /* 275 */ "sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal",
+ /* 276 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery",
+ /* 277 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name",
+ /* 278 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name",
+ /* 279 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name",
+ /* 280 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name",
+ /* 281 */ "cmd ::= DROP TOPIC exists_opt topic_name",
+ /* 282 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name",
+ /* 283 */ "cmd ::= DESC full_table_name",
+ /* 284 */ "cmd ::= DESCRIBE full_table_name",
+ /* 285 */ "cmd ::= RESET QUERY CACHE",
+ /* 286 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery",
+ /* 287 */ "analyze_opt ::=",
+ /* 288 */ "analyze_opt ::= ANALYZE",
+ /* 289 */ "explain_options ::=",
+ /* 290 */ "explain_options ::= explain_options VERBOSE NK_BOOL",
+ /* 291 */ "explain_options ::= explain_options RATIO NK_FLOAT",
+ /* 292 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt",
+ /* 293 */ "cmd ::= DROP FUNCTION exists_opt function_name",
+ /* 294 */ "agg_func_opt ::=",
+ /* 295 */ "agg_func_opt ::= AGGREGATE",
+ /* 296 */ "bufsize_opt ::=",
+ /* 297 */ "bufsize_opt ::= BUFSIZE NK_INTEGER",
+ /* 298 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery",
+ /* 299 */ "cmd ::= DROP STREAM exists_opt stream_name",
+ /* 300 */ "stream_options ::=",
+ /* 301 */ "stream_options ::= stream_options TRIGGER AT_ONCE",
+ /* 302 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE",
+ /* 303 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal",
+ /* 304 */ "stream_options ::= stream_options WATERMARK duration_literal",
+ /* 305 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER",
+ /* 306 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER",
+ /* 307 */ "subtable_opt ::=",
+ /* 308 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP",
+ /* 309 */ "cmd ::= KILL CONNECTION NK_INTEGER",
+ /* 310 */ "cmd ::= KILL QUERY NK_STRING",
+ /* 311 */ "cmd ::= KILL TRANSACTION NK_INTEGER",
+ /* 312 */ "cmd ::= BALANCE VGROUP",
+ /* 313 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER",
+ /* 314 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list",
+ /* 315 */ "cmd ::= SPLIT VGROUP NK_INTEGER",
+ /* 316 */ "dnode_list ::= DNODE NK_INTEGER",
+ /* 317 */ "dnode_list ::= dnode_list DNODE NK_INTEGER",
+ /* 318 */ "cmd ::= DELETE FROM full_table_name where_clause_opt",
+ /* 319 */ "cmd ::= query_or_subquery",
+ /* 320 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery",
+ /* 321 */ "cmd ::= INSERT INTO full_table_name query_or_subquery",
+ /* 322 */ "literal ::= NK_INTEGER",
+ /* 323 */ "literal ::= NK_FLOAT",
+ /* 324 */ "literal ::= NK_STRING",
+ /* 325 */ "literal ::= NK_BOOL",
+ /* 326 */ "literal ::= TIMESTAMP NK_STRING",
+ /* 327 */ "literal ::= duration_literal",
+ /* 328 */ "literal ::= NULL",
+ /* 329 */ "literal ::= NK_QUESTION",
+ /* 330 */ "duration_literal ::= NK_VARIABLE",
+ /* 331 */ "signed ::= NK_INTEGER",
+ /* 332 */ "signed ::= NK_PLUS NK_INTEGER",
+ /* 333 */ "signed ::= NK_MINUS NK_INTEGER",
+ /* 334 */ "signed ::= NK_FLOAT",
+ /* 335 */ "signed ::= NK_PLUS NK_FLOAT",
+ /* 336 */ "signed ::= NK_MINUS NK_FLOAT",
+ /* 337 */ "signed_literal ::= signed",
+ /* 338 */ "signed_literal ::= NK_STRING",
+ /* 339 */ "signed_literal ::= NK_BOOL",
+ /* 340 */ "signed_literal ::= TIMESTAMP NK_STRING",
+ /* 341 */ "signed_literal ::= duration_literal",
+ /* 342 */ "signed_literal ::= NULL",
+ /* 343 */ "signed_literal ::= literal_func",
+ /* 344 */ "signed_literal ::= NK_QUESTION",
+ /* 345 */ "literal_list ::= signed_literal",
+ /* 346 */ "literal_list ::= literal_list NK_COMMA signed_literal",
+ /* 347 */ "db_name ::= NK_ID",
+ /* 348 */ "table_name ::= NK_ID",
+ /* 349 */ "column_name ::= NK_ID",
+ /* 350 */ "function_name ::= NK_ID",
+ /* 351 */ "table_alias ::= NK_ID",
+ /* 352 */ "column_alias ::= NK_ID",
+ /* 353 */ "user_name ::= NK_ID",
+ /* 354 */ "topic_name ::= NK_ID",
+ /* 355 */ "stream_name ::= NK_ID",
+ /* 356 */ "cgroup_name ::= NK_ID",
+ /* 357 */ "expr_or_subquery ::= expression",
+ /* 358 */ "expression ::= literal",
+ /* 359 */ "expression ::= pseudo_column",
+ /* 360 */ "expression ::= column_reference",
+ /* 361 */ "expression ::= function_expression",
+ /* 362 */ "expression ::= case_when_expression",
+ /* 363 */ "expression ::= NK_LP expression NK_RP",
+ /* 364 */ "expression ::= NK_PLUS expr_or_subquery",
+ /* 365 */ "expression ::= NK_MINUS expr_or_subquery",
+ /* 366 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery",
+ /* 367 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery",
+ /* 368 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery",
+ /* 369 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery",
+ /* 370 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery",
+ /* 371 */ "expression ::= column_reference NK_ARROW NK_STRING",
+ /* 372 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery",
+ /* 373 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery",
+ /* 374 */ "expression_list ::= expr_or_subquery",
+ /* 375 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery",
+ /* 376 */ "column_reference ::= column_name",
+ /* 377 */ "column_reference ::= table_name NK_DOT column_name",
+ /* 378 */ "pseudo_column ::= ROWTS",
+ /* 379 */ "pseudo_column ::= TBNAME",
+ /* 380 */ "pseudo_column ::= table_name NK_DOT TBNAME",
+ /* 381 */ "pseudo_column ::= QSTART",
+ /* 382 */ "pseudo_column ::= QEND",
+ /* 383 */ "pseudo_column ::= QDURATION",
+ /* 384 */ "pseudo_column ::= WSTART",
+ /* 385 */ "pseudo_column ::= WEND",
+ /* 386 */ "pseudo_column ::= WDURATION",
+ /* 387 */ "pseudo_column ::= IROWTS",
+ /* 388 */ "pseudo_column ::= ISFILLED",
+ /* 389 */ "pseudo_column ::= QTAGS",
+ /* 390 */ "function_expression ::= function_name NK_LP expression_list NK_RP",
+ /* 391 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP",
+ /* 392 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP",
+ /* 393 */ "function_expression ::= literal_func",
+ /* 394 */ "literal_func ::= noarg_func NK_LP NK_RP",
+ /* 395 */ "literal_func ::= NOW",
+ /* 396 */ "noarg_func ::= NOW",
+ /* 397 */ "noarg_func ::= TODAY",
+ /* 398 */ "noarg_func ::= TIMEZONE",
+ /* 399 */ "noarg_func ::= DATABASE",
+ /* 400 */ "noarg_func ::= CLIENT_VERSION",
+ /* 401 */ "noarg_func ::= SERVER_VERSION",
+ /* 402 */ "noarg_func ::= SERVER_STATUS",
+ /* 403 */ "noarg_func ::= CURRENT_USER",
+ /* 404 */ "noarg_func ::= USER",
+ /* 405 */ "star_func ::= COUNT",
+ /* 406 */ "star_func ::= FIRST",
+ /* 407 */ "star_func ::= LAST",
+ /* 408 */ "star_func ::= LAST_ROW",
+ /* 409 */ "star_func_para_list ::= NK_STAR",
+ /* 410 */ "star_func_para_list ::= other_para_list",
+ /* 411 */ "other_para_list ::= star_func_para",
+ /* 412 */ "other_para_list ::= other_para_list NK_COMMA star_func_para",
+ /* 413 */ "star_func_para ::= expr_or_subquery",
+ /* 414 */ "star_func_para ::= table_name NK_DOT NK_STAR",
+ /* 415 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END",
+ /* 416 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END",
+ /* 417 */ "when_then_list ::= when_then_expr",
+ /* 418 */ "when_then_list ::= when_then_list when_then_expr",
+ /* 419 */ "when_then_expr ::= WHEN common_expression THEN common_expression",
+ /* 420 */ "case_when_else_opt ::=",
+ /* 421 */ "case_when_else_opt ::= ELSE common_expression",
+ /* 422 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery",
+ /* 423 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery",
+ /* 424 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery",
+ /* 425 */ "predicate ::= expr_or_subquery IS NULL",
+ /* 426 */ "predicate ::= expr_or_subquery IS NOT NULL",
+ /* 427 */ "predicate ::= expr_or_subquery in_op in_predicate_value",
+ /* 428 */ "compare_op ::= NK_LT",
+ /* 429 */ "compare_op ::= NK_GT",
+ /* 430 */ "compare_op ::= NK_LE",
+ /* 431 */ "compare_op ::= NK_GE",
+ /* 432 */ "compare_op ::= NK_NE",
+ /* 433 */ "compare_op ::= NK_EQ",
+ /* 434 */ "compare_op ::= LIKE",
+ /* 435 */ "compare_op ::= NOT LIKE",
+ /* 436 */ "compare_op ::= MATCH",
+ /* 437 */ "compare_op ::= NMATCH",
+ /* 438 */ "compare_op ::= CONTAINS",
+ /* 439 */ "in_op ::= IN",
+ /* 440 */ "in_op ::= NOT IN",
+ /* 441 */ "in_predicate_value ::= NK_LP literal_list NK_RP",
+ /* 442 */ "boolean_value_expression ::= boolean_primary",
+ /* 443 */ "boolean_value_expression ::= NOT boolean_primary",
+ /* 444 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression",
+ /* 445 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression",
+ /* 446 */ "boolean_primary ::= predicate",
+ /* 447 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP",
+ /* 448 */ "common_expression ::= expr_or_subquery",
+ /* 449 */ "common_expression ::= boolean_value_expression",
+ /* 450 */ "from_clause_opt ::=",
+ /* 451 */ "from_clause_opt ::= FROM table_reference_list",
+ /* 452 */ "table_reference_list ::= table_reference",
+ /* 453 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference",
+ /* 454 */ "table_reference ::= table_primary",
+ /* 455 */ "table_reference ::= joined_table",
+ /* 456 */ "table_primary ::= table_name alias_opt",
+ /* 457 */ "table_primary ::= db_name NK_DOT table_name alias_opt",
+ /* 458 */ "table_primary ::= subquery alias_opt",
+ /* 459 */ "table_primary ::= parenthesized_joined_table",
+ /* 460 */ "alias_opt ::=",
+ /* 461 */ "alias_opt ::= table_alias",
+ /* 462 */ "alias_opt ::= AS table_alias",
+ /* 463 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP",
+ /* 464 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP",
+ /* 465 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition",
+ /* 466 */ "join_type ::=",
+ /* 467 */ "join_type ::= INNER",
+ /* 468 */ "query_specification ::= SELECT set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt",
+ /* 469 */ "set_quantifier_opt ::=",
+ /* 470 */ "set_quantifier_opt ::= DISTINCT",
+ /* 471 */ "set_quantifier_opt ::= ALL",
+ /* 472 */ "select_list ::= select_item",
+ /* 473 */ "select_list ::= select_list NK_COMMA select_item",
+ /* 474 */ "select_item ::= NK_STAR",
+ /* 475 */ "select_item ::= common_expression",
+ /* 476 */ "select_item ::= common_expression column_alias",
+ /* 477 */ "select_item ::= common_expression AS column_alias",
+ /* 478 */ "select_item ::= table_name NK_DOT NK_STAR",
+ /* 479 */ "where_clause_opt ::=",
+ /* 480 */ "where_clause_opt ::= WHERE search_condition",
+ /* 481 */ "partition_by_clause_opt ::=",
+ /* 482 */ "partition_by_clause_opt ::= PARTITION BY partition_list",
+ /* 483 */ "partition_list ::= partition_item",
+ /* 484 */ "partition_list ::= partition_list NK_COMMA partition_item",
+ /* 485 */ "partition_item ::= expr_or_subquery",
+ /* 486 */ "partition_item ::= expr_or_subquery column_alias",
+ /* 487 */ "partition_item ::= expr_or_subquery AS column_alias",
+ /* 488 */ "twindow_clause_opt ::=",
+ /* 489 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP",
+ /* 490 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP",
+ /* 491 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt",
+ /* 492 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt",
+ /* 493 */ "twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition",
+ /* 494 */ "sliding_opt ::=",
+ /* 495 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP",
+ /* 496 */ "fill_opt ::=",
+ /* 497 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP",
+ /* 498 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP",
+ /* 499 */ "fill_mode ::= NONE",
+ /* 500 */ "fill_mode ::= PREV",
+ /* 501 */ "fill_mode ::= NULL",
+ /* 502 */ "fill_mode ::= LINEAR",
+ /* 503 */ "fill_mode ::= NEXT",
+ /* 504 */ "group_by_clause_opt ::=",
+ /* 505 */ "group_by_clause_opt ::= GROUP BY group_by_list",
+ /* 506 */ "group_by_list ::= expr_or_subquery",
+ /* 507 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery",
+ /* 508 */ "having_clause_opt ::=",
+ /* 509 */ "having_clause_opt ::= HAVING search_condition",
+ /* 510 */ "range_opt ::=",
+ /* 511 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP",
+ /* 512 */ "every_opt ::=",
+ /* 513 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP",
+ /* 514 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt",
+ /* 515 */ "query_simple ::= query_specification",
+ /* 516 */ "query_simple ::= union_query_expression",
+ /* 517 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery",
+ /* 518 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery",
+ /* 519 */ "query_simple_or_subquery ::= query_simple",
+ /* 520 */ "query_simple_or_subquery ::= subquery",
+ /* 521 */ "query_or_subquery ::= query_expression",
+ /* 522 */ "query_or_subquery ::= subquery",
+ /* 523 */ "order_by_clause_opt ::=",
+ /* 524 */ "order_by_clause_opt ::= ORDER BY sort_specification_list",
+ /* 525 */ "slimit_clause_opt ::=",
+ /* 526 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER",
+ /* 527 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER",
+ /* 528 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER",
+ /* 529 */ "limit_clause_opt ::=",
+ /* 530 */ "limit_clause_opt ::= LIMIT NK_INTEGER",
+ /* 531 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER",
+ /* 532 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER",
+ /* 533 */ "subquery ::= NK_LP query_expression NK_RP",
+ /* 534 */ "subquery ::= NK_LP subquery NK_RP",
+ /* 535 */ "search_condition ::= common_expression",
+ /* 536 */ "sort_specification_list ::= sort_specification",
+ /* 537 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification",
+ /* 538 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt",
+ /* 539 */ "ordering_specification_opt ::=",
+ /* 540 */ "ordering_specification_opt ::= ASC",
+ /* 541 */ "ordering_specification_opt ::= DESC",
+ /* 542 */ "null_ordering_opt ::=",
+ /* 543 */ "null_ordering_opt ::= NULLS FIRST",
+ /* 544 */ "null_ordering_opt ::= NULLS LAST",
};
#endif /* NDEBUG */
@@ -2486,193 +2624,194 @@ static void yy_destructor(
*/
/********* Begin destructor definitions ***************************************/
/* Default NON-TERMINAL Destructor */
- case 324: /* cmd */
- case 327: /* literal */
- case 340: /* db_options */
- case 342: /* alter_db_options */
- case 348: /* retention */
- case 349: /* full_table_name */
- case 352: /* table_options */
- case 356: /* alter_table_clause */
- case 357: /* alter_table_options */
- case 360: /* signed_literal */
- case 361: /* create_subtable_clause */
- case 364: /* drop_table_clause */
- case 367: /* column_def */
- case 371: /* duration_literal */
- case 372: /* rollup_func_name */
- case 374: /* col_name */
- case 375: /* db_name_cond_opt */
- case 376: /* like_pattern_opt */
- case 377: /* table_name_cond */
- case 378: /* from_db_opt */
- case 380: /* tag_item */
- case 382: /* index_options */
- case 384: /* sliding_opt */
- case 385: /* sma_stream_opt */
- case 386: /* func */
- case 387: /* query_or_subquery */
- case 390: /* explain_options */
- case 394: /* stream_options */
- case 395: /* subtable_opt */
- case 396: /* expression */
- case 398: /* where_clause_opt */
- case 399: /* signed */
- case 400: /* literal_func */
- case 403: /* expr_or_subquery */
- case 404: /* pseudo_column */
- case 405: /* column_reference */
- case 406: /* function_expression */
- case 407: /* case_when_expression */
- case 412: /* star_func_para */
- case 414: /* case_when_else_opt */
- case 415: /* common_expression */
- case 416: /* when_then_expr */
- case 417: /* predicate */
- case 420: /* in_predicate_value */
- case 421: /* boolean_value_expression */
- case 422: /* boolean_primary */
- case 423: /* from_clause_opt */
- case 424: /* table_reference_list */
- case 425: /* table_reference */
- case 426: /* table_primary */
- case 427: /* joined_table */
- case 429: /* subquery */
- case 430: /* parenthesized_joined_table */
- case 432: /* search_condition */
- case 433: /* query_specification */
- case 437: /* range_opt */
- case 438: /* every_opt */
- case 439: /* fill_opt */
- case 440: /* twindow_clause_opt */
- case 442: /* having_clause_opt */
- case 443: /* select_item */
- case 445: /* partition_item */
- case 448: /* query_expression */
- case 449: /* query_simple */
- case 451: /* slimit_clause_opt */
- case 452: /* limit_clause_opt */
- case 453: /* union_query_expression */
- case 454: /* query_simple_or_subquery */
- case 456: /* sort_specification */
+ case 325: /* cmd */
+ case 328: /* literal */
+ case 341: /* db_options */
+ case 343: /* alter_db_options */
+ case 349: /* retention */
+ case 350: /* full_table_name */
+ case 353: /* table_options */
+ case 357: /* alter_table_clause */
+ case 358: /* alter_table_options */
+ case 361: /* signed_literal */
+ case 362: /* create_subtable_clause */
+ case 365: /* drop_table_clause */
+ case 368: /* column_def */
+ case 372: /* duration_literal */
+ case 373: /* rollup_func_name */
+ case 375: /* col_name */
+ case 376: /* db_name_cond_opt */
+ case 377: /* like_pattern_opt */
+ case 378: /* table_name_cond */
+ case 379: /* from_db_opt */
+ case 381: /* tag_item */
+ case 383: /* index_options */
+ case 385: /* sliding_opt */
+ case 386: /* sma_stream_opt */
+ case 387: /* func */
+ case 389: /* query_or_subquery */
+ case 392: /* explain_options */
+ case 396: /* stream_options */
+ case 397: /* subtable_opt */
+ case 398: /* expression */
+ case 400: /* where_clause_opt */
+ case 401: /* signed */
+ case 402: /* literal_func */
+ case 405: /* expr_or_subquery */
+ case 406: /* pseudo_column */
+ case 407: /* column_reference */
+ case 408: /* function_expression */
+ case 409: /* case_when_expression */
+ case 414: /* star_func_para */
+ case 416: /* case_when_else_opt */
+ case 417: /* common_expression */
+ case 418: /* when_then_expr */
+ case 419: /* predicate */
+ case 422: /* in_predicate_value */
+ case 423: /* boolean_value_expression */
+ case 424: /* boolean_primary */
+ case 425: /* from_clause_opt */
+ case 426: /* table_reference_list */
+ case 427: /* table_reference */
+ case 428: /* table_primary */
+ case 429: /* joined_table */
+ case 431: /* subquery */
+ case 432: /* parenthesized_joined_table */
+ case 434: /* search_condition */
+ case 435: /* query_specification */
+ case 439: /* range_opt */
+ case 440: /* every_opt */
+ case 441: /* fill_opt */
+ case 442: /* twindow_clause_opt */
+ case 444: /* having_clause_opt */
+ case 445: /* select_item */
+ case 447: /* partition_item */
+ case 450: /* query_expression */
+ case 451: /* query_simple */
+ case 453: /* slimit_clause_opt */
+ case 454: /* limit_clause_opt */
+ case 455: /* union_query_expression */
+ case 456: /* query_simple_or_subquery */
+ case 458: /* sort_specification */
{
- nodesDestroyNode((yypminor->yy74));
+ nodesDestroyNode((yypminor->yy600));
}
break;
- case 325: /* account_options */
- case 326: /* alter_account_options */
- case 328: /* alter_account_option */
- case 343: /* speed_opt */
- case 392: /* bufsize_opt */
+ case 326: /* account_options */
+ case 327: /* alter_account_options */
+ case 329: /* alter_account_option */
+ case 344: /* speed_opt */
+ case 394: /* bufsize_opt */
{
}
break;
- case 329: /* user_name */
- case 332: /* priv_level */
- case 335: /* db_name */
- case 336: /* topic_name */
- case 337: /* dnode_endpoint */
- case 358: /* column_name */
- case 366: /* table_name */
- case 373: /* function_name */
- case 381: /* column_alias */
- case 388: /* cgroup_name */
- case 393: /* stream_name */
- case 402: /* table_alias */
- case 408: /* star_func */
- case 410: /* noarg_func */
- case 428: /* alias_opt */
+ case 330: /* user_name */
+ case 333: /* priv_level */
+ case 336: /* db_name */
+ case 337: /* topic_name */
+ case 338: /* dnode_endpoint */
+ case 359: /* column_name */
+ case 367: /* table_name */
+ case 374: /* function_name */
+ case 382: /* column_alias */
+ case 388: /* sma_func_name */
+ case 390: /* cgroup_name */
+ case 395: /* stream_name */
+ case 404: /* table_alias */
+ case 410: /* star_func */
+ case 412: /* noarg_func */
+ case 430: /* alias_opt */
{
}
break;
- case 330: /* sysinfo_opt */
+ case 331: /* sysinfo_opt */
{
}
break;
- case 331: /* privileges */
- case 333: /* priv_type_list */
- case 334: /* priv_type */
+ case 332: /* privileges */
+ case 334: /* priv_type_list */
+ case 335: /* priv_type */
{
}
break;
- case 338: /* force_opt */
- case 339: /* not_exists_opt */
- case 341: /* exists_opt */
- case 389: /* analyze_opt */
- case 391: /* agg_func_opt */
- case 434: /* set_quantifier_opt */
+ case 339: /* force_opt */
+ case 340: /* not_exists_opt */
+ case 342: /* exists_opt */
+ case 391: /* analyze_opt */
+ case 393: /* agg_func_opt */
+ case 436: /* set_quantifier_opt */
{
}
break;
- case 344: /* integer_list */
- case 345: /* variable_list */
- case 346: /* retention_list */
- case 350: /* column_def_list */
- case 351: /* tags_def_opt */
- case 353: /* multi_create_clause */
- case 354: /* tags_def */
- case 355: /* multi_drop_clause */
- case 362: /* specific_cols_opt */
- case 363: /* expression_list */
- case 365: /* col_name_list */
- case 368: /* duration_list */
- case 369: /* rollup_func_list */
- case 379: /* tag_list_opt */
- case 383: /* func_list */
- case 397: /* dnode_list */
- case 401: /* literal_list */
- case 409: /* star_func_para_list */
- case 411: /* other_para_list */
- case 413: /* when_then_list */
- case 435: /* select_list */
- case 436: /* partition_by_clause_opt */
- case 441: /* group_by_clause_opt */
- case 444: /* partition_list */
- case 447: /* group_by_list */
- case 450: /* order_by_clause_opt */
- case 455: /* sort_specification_list */
+ case 345: /* integer_list */
+ case 346: /* variable_list */
+ case 347: /* retention_list */
+ case 351: /* column_def_list */
+ case 352: /* tags_def_opt */
+ case 354: /* multi_create_clause */
+ case 355: /* tags_def */
+ case 356: /* multi_drop_clause */
+ case 363: /* specific_cols_opt */
+ case 364: /* expression_list */
+ case 366: /* col_name_list */
+ case 369: /* duration_list */
+ case 370: /* rollup_func_list */
+ case 380: /* tag_list_opt */
+ case 384: /* func_list */
+ case 399: /* dnode_list */
+ case 403: /* literal_list */
+ case 411: /* star_func_para_list */
+ case 413: /* other_para_list */
+ case 415: /* when_then_list */
+ case 437: /* select_list */
+ case 438: /* partition_by_clause_opt */
+ case 443: /* group_by_clause_opt */
+ case 446: /* partition_list */
+ case 449: /* group_by_list */
+ case 452: /* order_by_clause_opt */
+ case 457: /* sort_specification_list */
{
- nodesDestroyList((yypminor->yy874));
+ nodesDestroyList((yypminor->yy601));
}
break;
- case 347: /* alter_db_option */
- case 370: /* alter_table_option */
+ case 348: /* alter_db_option */
+ case 371: /* alter_table_option */
{
}
break;
- case 359: /* type_name */
+ case 360: /* type_name */
{
}
break;
- case 418: /* compare_op */
- case 419: /* in_op */
+ case 420: /* compare_op */
+ case 421: /* in_op */
{
}
break;
- case 431: /* join_type */
+ case 433: /* join_type */
{
}
break;
- case 446: /* fill_mode */
+ case 448: /* fill_mode */
{
}
break;
- case 457: /* ordering_specification_opt */
+ case 459: /* ordering_specification_opt */
{
}
break;
- case 458: /* null_ordering_opt */
+ case 460: /* null_ordering_opt */
{
}
@@ -2800,15 +2939,18 @@ static YYACTIONTYPE yy_find_shift_action(
do{
i = yy_shift_ofst[stateno];
assert( i>=0 );
- /* assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); */
+ assert( i<=YY_ACTTAB_COUNT );
+ assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD );
assert( iLookAhead!=YYNOCODE );
assert( iLookAhead < YYNTOKEN );
i += iLookAhead;
- if( i>=YY_NLOOKAHEAD || yy_lookahead[i]!=iLookAhead ){
+ assert( i<(int)YY_NLOOKAHEAD );
+ if( yy_lookahead[i]!=iLookAhead ){
#ifdef YYFALLBACK
YYCODETYPE iFallback; /* Fallback token */
- if( iLookAhead %s\n",
@@ -2823,16 +2965,8 @@ static YYACTIONTYPE yy_find_shift_action(
#ifdef YYWILDCARD
{
int j = i - iLookAhead + YYWILDCARD;
- if(
-#if YY_SHIFT_MIN+YYWILDCARD<0
- j>=0 &&
-#endif
-#if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
- j0
- ){
+ assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) );
+ if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){
#ifndef NDEBUG
if( yyTraceFILE ){
fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
@@ -2846,6 +2980,7 @@ static YYACTIONTYPE yy_find_shift_action(
#endif /* YYWILDCARD */
return yy_default[stateno];
}else{
+ assert( i>=0 && iyytos;
#ifndef NDEBUG
if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
- yysize = yyRuleInfo[yyruleno].nrhs;
+ yysize = yyRuleInfoNRhs[yyruleno];
if( yysize ){
- fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n",
+ fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
yyTracePrompt,
- yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno);
+ yyruleno, yyRuleName[yyruleno],
+ yyrulenoyytos - yypParser->yystack)>yypParser->yyhwm ){
yypParser->yyhwm++;
@@ -3599,11 +4288,11 @@ static YYACTIONTYPE yy_reduce(
YYMINORTYPE yylhsminor;
case 0: /* cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */
{ pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
- yy_destructor(yypParser,325,&yymsp[0].minor);
+ yy_destructor(yypParser,326,&yymsp[0].minor);
break;
case 1: /* cmd ::= ALTER ACCOUNT NK_ID alter_account_options */
{ pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
- yy_destructor(yypParser,326,&yymsp[0].minor);
+ yy_destructor(yypParser,327,&yymsp[0].minor);
break;
case 2: /* account_options ::= */
{ }
@@ -3617,20 +4306,20 @@ static YYACTIONTYPE yy_reduce(
case 9: /* account_options ::= account_options USERS literal */ yytestcase(yyruleno==9);
case 10: /* account_options ::= account_options CONNS literal */ yytestcase(yyruleno==10);
case 11: /* account_options ::= account_options STATE literal */ yytestcase(yyruleno==11);
-{ yy_destructor(yypParser,325,&yymsp[-2].minor);
+{ yy_destructor(yypParser,326,&yymsp[-2].minor);
{ }
- yy_destructor(yypParser,327,&yymsp[0].minor);
+ yy_destructor(yypParser,328,&yymsp[0].minor);
}
break;
case 12: /* alter_account_options ::= alter_account_option */
-{ yy_destructor(yypParser,328,&yymsp[0].minor);
+{ yy_destructor(yypParser,329,&yymsp[0].minor);
{ }
}
break;
case 13: /* alter_account_options ::= alter_account_options alter_account_option */
-{ yy_destructor(yypParser,326,&yymsp[-1].minor);
+{ yy_destructor(yypParser,327,&yymsp[-1].minor);
{ }
- yy_destructor(yypParser,328,&yymsp[0].minor);
+ yy_destructor(yypParser,329,&yymsp[0].minor);
}
break;
case 14: /* alter_account_option ::= PASS literal */
@@ -3644,80 +4333,81 @@ static YYACTIONTYPE yy_reduce(
case 22: /* alter_account_option ::= CONNS literal */ yytestcase(yyruleno==22);
case 23: /* alter_account_option ::= STATE literal */ yytestcase(yyruleno==23);
{ }
- yy_destructor(yypParser,327,&yymsp[0].minor);
+ yy_destructor(yypParser,328,&yymsp[0].minor);
break;
case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */
-{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy317, &yymsp[-1].minor.yy0, yymsp[0].minor.yy449); }
+{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy77, &yymsp[-1].minor.yy0, yymsp[0].minor.yy287); }
break;
case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */
-{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy317, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); }
+{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy77, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); }
break;
case 26: /* cmd ::= ALTER USER user_name ENABLE NK_INTEGER */
-{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy317, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); }
+{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy77, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); }
break;
case 27: /* cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */
-{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy317, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); }
+{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy77, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); }
break;
case 28: /* cmd ::= DROP USER user_name */
-{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy77); }
break;
case 29: /* sysinfo_opt ::= */
-{ yymsp[1].minor.yy449 = 1; }
+{ yymsp[1].minor.yy287 = 1; }
break;
case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */
-{ yymsp[-1].minor.yy449 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); }
+{ yymsp[-1].minor.yy287 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); }
break;
case 31: /* cmd ::= GRANT privileges ON priv_level TO user_name */
-{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy531, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy717, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77); }
break;
case 32: /* cmd ::= REVOKE privileges ON priv_level FROM user_name */
-{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy531, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy717, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77); }
break;
case 33: /* privileges ::= ALL */
-{ yymsp[0].minor.yy531 = PRIVILEGE_TYPE_ALL; }
+{ yymsp[0].minor.yy717 = PRIVILEGE_TYPE_ALL; }
break;
case 34: /* privileges ::= priv_type_list */
case 36: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==36);
-{ yylhsminor.yy531 = yymsp[0].minor.yy531; }
- yymsp[0].minor.yy531 = yylhsminor.yy531;
+{ yylhsminor.yy717 = yymsp[0].minor.yy717; }
+ yymsp[0].minor.yy717 = yylhsminor.yy717;
break;
case 35: /* privileges ::= SUBSCRIBE */
-{ yymsp[0].minor.yy531 = PRIVILEGE_TYPE_SUBSCRIBE; }
+{ yymsp[0].minor.yy717 = PRIVILEGE_TYPE_SUBSCRIBE; }
break;
case 37: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */
-{ yylhsminor.yy531 = yymsp[-2].minor.yy531 | yymsp[0].minor.yy531; }
- yymsp[-2].minor.yy531 = yylhsminor.yy531;
+{ yylhsminor.yy717 = yymsp[-2].minor.yy717 | yymsp[0].minor.yy717; }
+ yymsp[-2].minor.yy717 = yylhsminor.yy717;
break;
case 38: /* priv_type ::= READ */
-{ yymsp[0].minor.yy531 = PRIVILEGE_TYPE_READ; }
+{ yymsp[0].minor.yy717 = PRIVILEGE_TYPE_READ; }
break;
case 39: /* priv_type ::= WRITE */
-{ yymsp[0].minor.yy531 = PRIVILEGE_TYPE_WRITE; }
+{ yymsp[0].minor.yy717 = PRIVILEGE_TYPE_WRITE; }
break;
case 40: /* priv_level ::= NK_STAR NK_DOT NK_STAR */
-{ yylhsminor.yy317 = yymsp[-2].minor.yy0; }
- yymsp[-2].minor.yy317 = yylhsminor.yy317;
+{ yylhsminor.yy77 = yymsp[-2].minor.yy0; }
+ yymsp[-2].minor.yy77 = yylhsminor.yy77;
break;
case 41: /* priv_level ::= db_name NK_DOT NK_STAR */
-{ yylhsminor.yy317 = yymsp[-2].minor.yy317; }
- yymsp[-2].minor.yy317 = yylhsminor.yy317;
+{ yylhsminor.yy77 = yymsp[-2].minor.yy77; }
+ yymsp[-2].minor.yy77 = yylhsminor.yy77;
break;
case 42: /* priv_level ::= topic_name */
- case 456: /* alias_opt ::= table_alias */ yytestcase(yyruleno==456);
-{ yylhsminor.yy317 = yymsp[0].minor.yy317; }
- yymsp[0].minor.yy317 = yylhsminor.yy317;
+ case 267: /* sma_func_name ::= function_name */ yytestcase(yyruleno==267);
+ case 461: /* alias_opt ::= table_alias */ yytestcase(yyruleno==461);
+{ yylhsminor.yy77 = yymsp[0].minor.yy77; }
+ yymsp[0].minor.yy77 = yylhsminor.yy77;
break;
case 43: /* cmd ::= CREATE DNODE dnode_endpoint */
-{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy317, NULL); }
+{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy77, NULL); }
break;
case 44: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */
-{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy0); }
+{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy0); }
break;
case 45: /* cmd ::= DROP DNODE NK_INTEGER force_opt */
-{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy335); }
+{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy841); }
break;
case 46: /* cmd ::= DROP DNODE dnode_endpoint force_opt */
-{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy317, yymsp[0].minor.yy335); }
+{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy77, yymsp[0].minor.yy841); }
break;
case 47: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */
{ pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); }
@@ -3734,45 +4424,49 @@ static YYACTIONTYPE yy_reduce(
case 51: /* dnode_endpoint ::= NK_STRING */
case 52: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==52);
case 53: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==53);
- case 343: /* db_name ::= NK_ID */ yytestcase(yyruleno==343);
- case 344: /* table_name ::= NK_ID */ yytestcase(yyruleno==344);
- case 345: /* column_name ::= NK_ID */ yytestcase(yyruleno==345);
- case 346: /* function_name ::= NK_ID */ yytestcase(yyruleno==346);
- case 347: /* table_alias ::= NK_ID */ yytestcase(yyruleno==347);
- case 348: /* column_alias ::= NK_ID */ yytestcase(yyruleno==348);
- case 349: /* user_name ::= NK_ID */ yytestcase(yyruleno==349);
- case 350: /* topic_name ::= NK_ID */ yytestcase(yyruleno==350);
- case 351: /* stream_name ::= NK_ID */ yytestcase(yyruleno==351);
- case 352: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==352);
- case 391: /* noarg_func ::= NOW */ yytestcase(yyruleno==391);
- case 392: /* noarg_func ::= TODAY */ yytestcase(yyruleno==392);
- case 393: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==393);
- case 394: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==394);
- case 395: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==395);
- case 396: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==396);
- case 397: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==397);
- case 398: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==398);
- case 399: /* noarg_func ::= USER */ yytestcase(yyruleno==399);
- case 400: /* star_func ::= COUNT */ yytestcase(yyruleno==400);
- case 401: /* star_func ::= FIRST */ yytestcase(yyruleno==401);
- case 402: /* star_func ::= LAST */ yytestcase(yyruleno==402);
- case 403: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==403);
-{ yylhsminor.yy317 = yymsp[0].minor.yy0; }
- yymsp[0].minor.yy317 = yylhsminor.yy317;
+ case 268: /* sma_func_name ::= COUNT */ yytestcase(yyruleno==268);
+ case 269: /* sma_func_name ::= FIRST */ yytestcase(yyruleno==269);
+ case 270: /* sma_func_name ::= LAST */ yytestcase(yyruleno==270);
+ case 271: /* sma_func_name ::= LAST_ROW */ yytestcase(yyruleno==271);
+ case 347: /* db_name ::= NK_ID */ yytestcase(yyruleno==347);
+ case 348: /* table_name ::= NK_ID */ yytestcase(yyruleno==348);
+ case 349: /* column_name ::= NK_ID */ yytestcase(yyruleno==349);
+ case 350: /* function_name ::= NK_ID */ yytestcase(yyruleno==350);
+ case 351: /* table_alias ::= NK_ID */ yytestcase(yyruleno==351);
+ case 352: /* column_alias ::= NK_ID */ yytestcase(yyruleno==352);
+ case 353: /* user_name ::= NK_ID */ yytestcase(yyruleno==353);
+ case 354: /* topic_name ::= NK_ID */ yytestcase(yyruleno==354);
+ case 355: /* stream_name ::= NK_ID */ yytestcase(yyruleno==355);
+ case 356: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==356);
+ case 396: /* noarg_func ::= NOW */ yytestcase(yyruleno==396);
+ case 397: /* noarg_func ::= TODAY */ yytestcase(yyruleno==397);
+ case 398: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==398);
+ case 399: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==399);
+ case 400: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==400);
+ case 401: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==401);
+ case 402: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==402);
+ case 403: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==403);
+ case 404: /* noarg_func ::= USER */ yytestcase(yyruleno==404);
+ case 405: /* star_func ::= COUNT */ yytestcase(yyruleno==405);
+ case 406: /* star_func ::= FIRST */ yytestcase(yyruleno==406);
+ case 407: /* star_func ::= LAST */ yytestcase(yyruleno==407);
+ case 408: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==408);
+{ yylhsminor.yy77 = yymsp[0].minor.yy0; }
+ yymsp[0].minor.yy77 = yylhsminor.yy77;
break;
case 54: /* force_opt ::= */
case 73: /* not_exists_opt ::= */ yytestcase(yyruleno==73);
case 75: /* exists_opt ::= */ yytestcase(yyruleno==75);
- case 283: /* analyze_opt ::= */ yytestcase(yyruleno==283);
- case 290: /* agg_func_opt ::= */ yytestcase(yyruleno==290);
- case 464: /* set_quantifier_opt ::= */ yytestcase(yyruleno==464);
-{ yymsp[1].minor.yy335 = false; }
+ case 287: /* analyze_opt ::= */ yytestcase(yyruleno==287);
+ case 294: /* agg_func_opt ::= */ yytestcase(yyruleno==294);
+ case 469: /* set_quantifier_opt ::= */ yytestcase(yyruleno==469);
+{ yymsp[1].minor.yy841 = false; }
break;
case 55: /* force_opt ::= FORCE */
- case 284: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==284);
- case 291: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==291);
- case 465: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==465);
-{ yymsp[0].minor.yy335 = true; }
+ case 288: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==288);
+ case 295: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==295);
+ case 470: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==470);
+{ yymsp[0].minor.yy841 = true; }
break;
case 56: /* cmd ::= ALTER LOCAL NK_STRING */
{ pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); }
@@ -3805,1350 +4499,1347 @@ static YYACTIONTYPE yy_reduce(
{ pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &yymsp[0].minor.yy0); }
break;
case 66: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */
-{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy335, &yymsp[-1].minor.yy317, yymsp[0].minor.yy74); }
+{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy841, &yymsp[-1].minor.yy77, yymsp[0].minor.yy600); }
break;
case 67: /* cmd ::= DROP DATABASE exists_opt db_name */
-{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy335, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy841, &yymsp[0].minor.yy77); }
break;
case 68: /* cmd ::= USE db_name */
-{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy77); }
break;
case 69: /* cmd ::= ALTER DATABASE db_name alter_db_options */
-{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy317, yymsp[0].minor.yy74); }
+{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy77, yymsp[0].minor.yy600); }
break;
case 70: /* cmd ::= FLUSH DATABASE db_name */
-{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy317); }
+{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy77); }
break;
case 71: /* cmd ::= TRIM DATABASE db_name speed_opt */
-{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy317, yymsp[0].minor.yy856); }
+{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy77, yymsp[0].minor.yy248); }
break;
case 72: /* not_exists_opt ::= IF NOT EXISTS */
-{ yymsp[-2].minor.yy335 = true; }
+{ yymsp[-2].minor.yy841 = true; }
break;
case 74: /* exists_opt ::= IF EXISTS */
-{ yymsp[-1].minor.yy335 = true; }
+{ yymsp[-1].minor.yy841 = true; }
break;
case 76: /* db_options ::= */
-{ yymsp[1].minor.yy74 = createDefaultDatabaseOptions(pCxt); }
+{ yymsp[1].minor.yy600 = createDefaultDatabaseOptions(pCxt); }
break;
case 77: /* db_options ::= db_options BUFFER NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 78: /* db_options ::= db_options CACHEMODEL NK_STRING */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 79: /* db_options ::= db_options CACHESIZE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 80: /* db_options ::= db_options COMP NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_COMP, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_COMP, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 81: /* db_options ::= db_options DURATION NK_INTEGER */
case 82: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==82);
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_DAYS, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_DAYS, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 83: /* db_options ::= db_options MAXROWS NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 84: /* db_options ::= db_options MINROWS NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 85: /* db_options ::= db_options KEEP integer_list */
case 86: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==86);
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_KEEP, yymsp[0].minor.yy874); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_KEEP, yymsp[0].minor.yy601); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 87: /* db_options ::= db_options PAGES NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_PAGES, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_PAGES, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 88: /* db_options ::= db_options PAGESIZE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 89: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 90: /* db_options ::= db_options PRECISION NK_STRING */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
case 91: /* db_options ::= db_options REPLICA NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 92: /* db_options ::= db_options STRICT NK_STRING */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_STRICT, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 92: /* db_options ::= db_options VGROUPS NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 93: /* db_options ::= db_options VGROUPS NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 93: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 94: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 94: /* db_options ::= db_options RETENTIONS retention_list */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_RETENTIONS, yymsp[0].minor.yy601); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 95: /* db_options ::= db_options RETENTIONS retention_list */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_RETENTIONS, yymsp[0].minor.yy874); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 95: /* db_options ::= db_options SCHEMALESS NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 96: /* db_options ::= db_options SCHEMALESS NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 96: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_WAL, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 97: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_WAL, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 97: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 98: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 98: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 99: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 100: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */
+ case 99: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */
{
SToken t = yymsp[-1].minor.yy0;
t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z;
- yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-3].minor.yy74, DB_OPTION_WAL_RETENTION_PERIOD, &t);
+ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-3].minor.yy600, DB_OPTION_WAL_RETENTION_PERIOD, &t);
}
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 101: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 100: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 102: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */
+ case 101: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */
{
SToken t = yymsp[-1].minor.yy0;
t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z;
- yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-3].minor.yy74, DB_OPTION_WAL_RETENTION_SIZE, &t);
+ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-3].minor.yy600, DB_OPTION_WAL_RETENTION_SIZE, &t);
}
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
- break;
- case 103: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 104: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 105: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 106: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 107: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */
-{ yylhsminor.yy74 = setDatabaseOption(pCxt, yymsp[-2].minor.yy74, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 108: /* alter_db_options ::= alter_db_option */
-{ yylhsminor.yy74 = createAlterDatabaseOptions(pCxt); yylhsminor.yy74 = setAlterDatabaseOption(pCxt, yylhsminor.yy74, &yymsp[0].minor.yy767); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
- break;
- case 109: /* alter_db_options ::= alter_db_options alter_db_option */
-{ yylhsminor.yy74 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy74, &yymsp[0].minor.yy767); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
- break;
- case 110: /* alter_db_option ::= BUFFER NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 111: /* alter_db_option ::= CACHEMODEL NK_STRING */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 112: /* alter_db_option ::= CACHESIZE NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 113: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 114: /* alter_db_option ::= KEEP integer_list */
- case 115: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==115);
-{ yymsp[-1].minor.yy767.type = DB_OPTION_KEEP; yymsp[-1].minor.yy767.pList = yymsp[0].minor.yy874; }
- break;
- case 116: /* alter_db_option ::= PAGES NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_PAGES; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 117: /* alter_db_option ::= REPLICA NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 118: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_WAL; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 119: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
- break;
- case 120: /* integer_list ::= NK_INTEGER */
-{ yylhsminor.yy874 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
- break;
- case 121: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */
- case 313: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==313);
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-2].minor.yy874, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
- yymsp[-2].minor.yy874 = yylhsminor.yy874;
- break;
- case 122: /* variable_list ::= NK_VARIABLE */
-{ yylhsminor.yy874 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
- break;
- case 123: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-2].minor.yy874, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
- yymsp[-2].minor.yy874 = yylhsminor.yy874;
- break;
- case 124: /* retention_list ::= retention */
- case 146: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==146);
- case 149: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==149);
- case 156: /* column_def_list ::= column_def */ yytestcase(yyruleno==156);
- case 200: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==200);
- case 205: /* col_name_list ::= col_name */ yytestcase(yyruleno==205);
- case 254: /* tag_list_opt ::= tag_item */ yytestcase(yyruleno==254);
- case 265: /* func_list ::= func */ yytestcase(yyruleno==265);
- case 341: /* literal_list ::= signed_literal */ yytestcase(yyruleno==341);
- case 406: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==406);
- case 412: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==412);
- case 467: /* select_list ::= select_item */ yytestcase(yyruleno==467);
- case 478: /* partition_list ::= partition_item */ yytestcase(yyruleno==478);
- case 531: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==531);
-{ yylhsminor.yy874 = createNodeList(pCxt, yymsp[0].minor.yy74); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
- break;
- case 125: /* retention_list ::= retention_list NK_COMMA retention */
- case 157: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==157);
- case 201: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==201);
- case 206: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==206);
- case 255: /* tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ yytestcase(yyruleno==255);
- case 266: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==266);
- case 342: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==342);
- case 407: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==407);
- case 468: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==468);
- case 479: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==479);
- case 532: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==532);
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-2].minor.yy874, yymsp[0].minor.yy74); }
- yymsp[-2].minor.yy874 = yylhsminor.yy874;
- break;
- case 126: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */
-{ yylhsminor.yy74 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
- break;
- case 127: /* speed_opt ::= */
- case 292: /* bufsize_opt ::= */ yytestcase(yyruleno==292);
-{ yymsp[1].minor.yy856 = 0; }
- break;
- case 128: /* speed_opt ::= MAX_SPEED NK_INTEGER */
- case 293: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==293);
-{ yymsp[-1].minor.yy856 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); }
- break;
- case 129: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */
- case 131: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==131);
-{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy335, yymsp[-5].minor.yy74, yymsp[-3].minor.yy874, yymsp[-1].minor.yy874, yymsp[0].minor.yy74); }
- break;
- case 130: /* cmd ::= CREATE TABLE multi_create_clause */
-{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy874); }
- break;
- case 132: /* cmd ::= DROP TABLE multi_drop_clause */
-{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy874); }
- break;
- case 133: /* cmd ::= DROP STABLE exists_opt full_table_name */
-{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy335, yymsp[0].minor.yy74); }
- break;
- case 134: /* cmd ::= ALTER TABLE alter_table_clause */
- case 315: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==315);
-{ pCxt->pRootNode = yymsp[0].minor.yy74; }
- break;
- case 135: /* cmd ::= ALTER STABLE alter_table_clause */
-{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy74); }
- break;
- case 136: /* alter_table_clause ::= full_table_name alter_table_options */
-{ yylhsminor.yy74 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
- break;
- case 137: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */
-{ yylhsminor.yy74 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy317, yymsp[0].minor.yy898); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 138: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */
-{ yylhsminor.yy74 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy74, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy317); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
- break;
- case 139: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */
-{ yylhsminor.yy74 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy317, yymsp[0].minor.yy898); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 140: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */
-{ yylhsminor.yy74 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy317, &yymsp[0].minor.yy317); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 141: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */
-{ yylhsminor.yy74 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy317, yymsp[0].minor.yy898); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 142: /* alter_table_clause ::= full_table_name DROP TAG column_name */
-{ yylhsminor.yy74 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy74, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy317); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
- break;
- case 143: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */
-{ yylhsminor.yy74 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy317, yymsp[0].minor.yy898); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 144: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */
-{ yylhsminor.yy74 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy74, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy317, &yymsp[0].minor.yy317); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
- break;
- case 145: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */
-{ yylhsminor.yy74 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy74, &yymsp[-2].minor.yy317, yymsp[0].minor.yy74); }
- yymsp[-5].minor.yy74 = yylhsminor.yy74;
- break;
- case 147: /* multi_create_clause ::= multi_create_clause create_subtable_clause */
- case 150: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==150);
- case 413: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==413);
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-1].minor.yy874, yymsp[0].minor.yy74); }
- yymsp[-1].minor.yy874 = yylhsminor.yy874;
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 102: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 103: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 104: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 105: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 106: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */
+{ yylhsminor.yy600 = setDatabaseOption(pCxt, yymsp[-2].minor.yy600, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 107: /* alter_db_options ::= alter_db_option */
+{ yylhsminor.yy600 = createAlterDatabaseOptions(pCxt); yylhsminor.yy600 = setAlterDatabaseOption(pCxt, yylhsminor.yy600, &yymsp[0].minor.yy661); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 108: /* alter_db_options ::= alter_db_options alter_db_option */
+{ yylhsminor.yy600 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy600, &yymsp[0].minor.yy661); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 109: /* alter_db_option ::= BUFFER NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 110: /* alter_db_option ::= CACHEMODEL NK_STRING */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 111: /* alter_db_option ::= CACHESIZE NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 112: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 113: /* alter_db_option ::= KEEP integer_list */
+ case 114: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==114);
+{ yymsp[-1].minor.yy661.type = DB_OPTION_KEEP; yymsp[-1].minor.yy661.pList = yymsp[0].minor.yy601; }
+ break;
+ case 115: /* alter_db_option ::= PAGES NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_PAGES; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 116: /* alter_db_option ::= REPLICA NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 117: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_WAL; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 118: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
+ break;
+ case 119: /* integer_list ::= NK_INTEGER */
+{ yylhsminor.yy601 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 120: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */
+ case 317: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==317);
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-2].minor.yy601, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
+ yymsp[-2].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 121: /* variable_list ::= NK_VARIABLE */
+{ yylhsminor.yy601 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 122: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-2].minor.yy601, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
+ yymsp[-2].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 123: /* retention_list ::= retention */
+ case 145: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==145);
+ case 148: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==148);
+ case 155: /* column_def_list ::= column_def */ yytestcase(yyruleno==155);
+ case 199: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==199);
+ case 204: /* col_name_list ::= col_name */ yytestcase(yyruleno==204);
+ case 253: /* tag_list_opt ::= tag_item */ yytestcase(yyruleno==253);
+ case 264: /* func_list ::= func */ yytestcase(yyruleno==264);
+ case 345: /* literal_list ::= signed_literal */ yytestcase(yyruleno==345);
+ case 411: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==411);
+ case 417: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==417);
+ case 472: /* select_list ::= select_item */ yytestcase(yyruleno==472);
+ case 483: /* partition_list ::= partition_item */ yytestcase(yyruleno==483);
+ case 536: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==536);
+{ yylhsminor.yy601 = createNodeList(pCxt, yymsp[0].minor.yy600); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 124: /* retention_list ::= retention_list NK_COMMA retention */
+ case 156: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==156);
+ case 200: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==200);
+ case 205: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==205);
+ case 254: /* tag_list_opt ::= tag_list_opt NK_COMMA tag_item */ yytestcase(yyruleno==254);
+ case 265: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==265);
+ case 346: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==346);
+ case 412: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==412);
+ case 473: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==473);
+ case 484: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==484);
+ case 537: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==537);
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-2].minor.yy601, yymsp[0].minor.yy600); }
+ yymsp[-2].minor.yy601 = yylhsminor.yy601;
+ break;
+ case 125: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */
+{ yylhsminor.yy600 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 126: /* speed_opt ::= */
+ case 296: /* bufsize_opt ::= */ yytestcase(yyruleno==296);
+{ yymsp[1].minor.yy248 = 0; }
+ break;
+ case 127: /* speed_opt ::= MAX_SPEED NK_INTEGER */
+ case 297: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==297);
+{ yymsp[-1].minor.yy248 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); }
+ break;
+ case 128: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */
+ case 130: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==130);
+{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy841, yymsp[-5].minor.yy600, yymsp[-3].minor.yy601, yymsp[-1].minor.yy601, yymsp[0].minor.yy600); }
+ break;
+ case 129: /* cmd ::= CREATE TABLE multi_create_clause */
+{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy601); }
+ break;
+ case 131: /* cmd ::= DROP TABLE multi_drop_clause */
+{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy601); }
+ break;
+ case 132: /* cmd ::= DROP STABLE exists_opt full_table_name */
+{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy841, yymsp[0].minor.yy600); }
+ break;
+ case 133: /* cmd ::= ALTER TABLE alter_table_clause */
+ case 319: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==319);
+{ pCxt->pRootNode = yymsp[0].minor.yy600; }
+ break;
+ case 134: /* cmd ::= ALTER STABLE alter_table_clause */
+{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy600); }
+ break;
+ case 135: /* alter_table_clause ::= full_table_name alter_table_options */
+{ yylhsminor.yy600 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 136: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */
+{ yylhsminor.yy600 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy77, yymsp[0].minor.yy888); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 137: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */
+{ yylhsminor.yy600 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy600, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy77); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 138: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */
+{ yylhsminor.yy600 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy77, yymsp[0].minor.yy888); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 139: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */
+{ yylhsminor.yy600 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy77, &yymsp[0].minor.yy77); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 140: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */
+{ yylhsminor.yy600 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy77, yymsp[0].minor.yy888); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 141: /* alter_table_clause ::= full_table_name DROP TAG column_name */
+{ yylhsminor.yy600 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy600, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy77); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 142: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */
+{ yylhsminor.yy600 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy77, yymsp[0].minor.yy888); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 143: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */
+{ yylhsminor.yy600 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy600, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy77, &yymsp[0].minor.yy77); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 144: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */
+{ yylhsminor.yy600 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy600, &yymsp[-2].minor.yy77, yymsp[0].minor.yy600); }
+ yymsp[-5].minor.yy600 = yylhsminor.yy600;
+ break;
+ case 146: /* multi_create_clause ::= multi_create_clause create_subtable_clause */
+ case 149: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==149);
+ case 418: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==418);
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-1].minor.yy601, yymsp[0].minor.yy600); }
+ yymsp[-1].minor.yy601 = yylhsminor.yy601;
break;
- case 148: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */
-{ yylhsminor.yy74 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy335, yymsp[-8].minor.yy74, yymsp[-6].minor.yy74, yymsp[-5].minor.yy874, yymsp[-2].minor.yy874, yymsp[0].minor.yy74); }
- yymsp[-9].minor.yy74 = yylhsminor.yy74;
+ case 147: /* create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */
+{ yylhsminor.yy600 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy841, yymsp[-8].minor.yy600, yymsp[-6].minor.yy600, yymsp[-5].minor.yy601, yymsp[-2].minor.yy601, yymsp[0].minor.yy600); }
+ yymsp[-9].minor.yy600 = yylhsminor.yy600;
break;
- case 151: /* drop_table_clause ::= exists_opt full_table_name */
-{ yylhsminor.yy74 = createDropTableClause(pCxt, yymsp[-1].minor.yy335, yymsp[0].minor.yy74); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 150: /* drop_table_clause ::= exists_opt full_table_name */
+{ yylhsminor.yy600 = createDropTableClause(pCxt, yymsp[-1].minor.yy841, yymsp[0].minor.yy600); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 152: /* specific_cols_opt ::= */
- case 183: /* tags_def_opt ::= */ yytestcase(yyruleno==183);
- case 253: /* tag_list_opt ::= */ yytestcase(yyruleno==253);
- case 476: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==476);
- case 499: /* group_by_clause_opt ::= */ yytestcase(yyruleno==499);
- case 518: /* order_by_clause_opt ::= */ yytestcase(yyruleno==518);
-{ yymsp[1].minor.yy874 = NULL; }
+ case 151: /* specific_cols_opt ::= */
+ case 182: /* tags_def_opt ::= */ yytestcase(yyruleno==182);
+ case 252: /* tag_list_opt ::= */ yytestcase(yyruleno==252);
+ case 481: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==481);
+ case 504: /* group_by_clause_opt ::= */ yytestcase(yyruleno==504);
+ case 523: /* order_by_clause_opt ::= */ yytestcase(yyruleno==523);
+{ yymsp[1].minor.yy601 = NULL; }
break;
- case 153: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */
-{ yymsp[-2].minor.yy874 = yymsp[-1].minor.yy874; }
+ case 152: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */
+{ yymsp[-2].minor.yy601 = yymsp[-1].minor.yy601; }
break;
- case 154: /* full_table_name ::= table_name */
-{ yylhsminor.yy74 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy317, NULL); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 153: /* full_table_name ::= table_name */
+{ yylhsminor.yy600 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy77, NULL); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 155: /* full_table_name ::= db_name NK_DOT table_name */
-{ yylhsminor.yy74 = createRealTableNode(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317, NULL); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 154: /* full_table_name ::= db_name NK_DOT table_name */
+{ yylhsminor.yy600 = createRealTableNode(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77, NULL); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 158: /* column_def ::= column_name type_name */
-{ yylhsminor.yy74 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy317, yymsp[0].minor.yy898, NULL); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 157: /* column_def ::= column_name type_name */
+{ yylhsminor.yy600 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy77, yymsp[0].minor.yy888, NULL); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 159: /* column_def ::= column_name type_name COMMENT NK_STRING */
-{ yylhsminor.yy74 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy317, yymsp[-2].minor.yy898, &yymsp[0].minor.yy0); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 158: /* column_def ::= column_name type_name COMMENT NK_STRING */
+{ yylhsminor.yy600 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy77, yymsp[-2].minor.yy888, &yymsp[0].minor.yy0); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 160: /* type_name ::= BOOL */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_BOOL); }
+ case 159: /* type_name ::= BOOL */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_BOOL); }
break;
- case 161: /* type_name ::= TINYINT */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_TINYINT); }
+ case 160: /* type_name ::= TINYINT */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_TINYINT); }
break;
- case 162: /* type_name ::= SMALLINT */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_SMALLINT); }
+ case 161: /* type_name ::= SMALLINT */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_SMALLINT); }
break;
- case 163: /* type_name ::= INT */
- case 164: /* type_name ::= INTEGER */ yytestcase(yyruleno==164);
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_INT); }
+ case 162: /* type_name ::= INT */
+ case 163: /* type_name ::= INTEGER */ yytestcase(yyruleno==163);
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_INT); }
break;
- case 165: /* type_name ::= BIGINT */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_BIGINT); }
+ case 164: /* type_name ::= BIGINT */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_BIGINT); }
break;
- case 166: /* type_name ::= FLOAT */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_FLOAT); }
+ case 165: /* type_name ::= FLOAT */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_FLOAT); }
break;
- case 167: /* type_name ::= DOUBLE */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_DOUBLE); }
+ case 166: /* type_name ::= DOUBLE */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_DOUBLE); }
break;
- case 168: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */
-{ yymsp[-3].minor.yy898 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); }
+ case 167: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */
+{ yymsp[-3].minor.yy888 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); }
break;
- case 169: /* type_name ::= TIMESTAMP */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
+ case 168: /* type_name ::= TIMESTAMP */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); }
break;
- case 170: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */
-{ yymsp[-3].minor.yy898 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); }
+ case 169: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */
+{ yymsp[-3].minor.yy888 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); }
break;
- case 171: /* type_name ::= TINYINT UNSIGNED */
-{ yymsp[-1].minor.yy898 = createDataType(TSDB_DATA_TYPE_UTINYINT); }
+ case 170: /* type_name ::= TINYINT UNSIGNED */
+{ yymsp[-1].minor.yy888 = createDataType(TSDB_DATA_TYPE_UTINYINT); }
break;
- case 172: /* type_name ::= SMALLINT UNSIGNED */
-{ yymsp[-1].minor.yy898 = createDataType(TSDB_DATA_TYPE_USMALLINT); }
+ case 171: /* type_name ::= SMALLINT UNSIGNED */
+{ yymsp[-1].minor.yy888 = createDataType(TSDB_DATA_TYPE_USMALLINT); }
break;
- case 173: /* type_name ::= INT UNSIGNED */
-{ yymsp[-1].minor.yy898 = createDataType(TSDB_DATA_TYPE_UINT); }
+ case 172: /* type_name ::= INT UNSIGNED */
+{ yymsp[-1].minor.yy888 = createDataType(TSDB_DATA_TYPE_UINT); }
break;
- case 174: /* type_name ::= BIGINT UNSIGNED */
-{ yymsp[-1].minor.yy898 = createDataType(TSDB_DATA_TYPE_UBIGINT); }
+ case 173: /* type_name ::= BIGINT UNSIGNED */
+{ yymsp[-1].minor.yy888 = createDataType(TSDB_DATA_TYPE_UBIGINT); }
break;
- case 175: /* type_name ::= JSON */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_JSON); }
+ case 174: /* type_name ::= JSON */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_JSON); }
break;
- case 176: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */
-{ yymsp[-3].minor.yy898 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); }
+ case 175: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */
+{ yymsp[-3].minor.yy888 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); }
break;
- case 177: /* type_name ::= MEDIUMBLOB */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
+ case 176: /* type_name ::= MEDIUMBLOB */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); }
break;
- case 178: /* type_name ::= BLOB */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_BLOB); }
+ case 177: /* type_name ::= BLOB */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_BLOB); }
break;
- case 179: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */
-{ yymsp[-3].minor.yy898 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); }
+ case 178: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */
+{ yymsp[-3].minor.yy888 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); }
break;
- case 180: /* type_name ::= DECIMAL */
-{ yymsp[0].minor.yy898 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
+ case 179: /* type_name ::= DECIMAL */
+{ yymsp[0].minor.yy888 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
break;
- case 181: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */
-{ yymsp[-3].minor.yy898 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
+ case 180: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */
+{ yymsp[-3].minor.yy888 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
break;
- case 182: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */
-{ yymsp[-5].minor.yy898 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
+ case 181: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */
+{ yymsp[-5].minor.yy888 = createDataType(TSDB_DATA_TYPE_DECIMAL); }
break;
- case 184: /* tags_def_opt ::= tags_def */
- case 405: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==405);
-{ yylhsminor.yy874 = yymsp[0].minor.yy874; }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
+ case 183: /* tags_def_opt ::= tags_def */
+ case 410: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==410);
+{ yylhsminor.yy601 = yymsp[0].minor.yy601; }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
break;
- case 185: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */
-{ yymsp[-3].minor.yy874 = yymsp[-1].minor.yy874; }
+ case 184: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */
+{ yymsp[-3].minor.yy601 = yymsp[-1].minor.yy601; }
break;
- case 186: /* table_options ::= */
-{ yymsp[1].minor.yy74 = createDefaultTableOptions(pCxt); }
+ case 185: /* table_options ::= */
+{ yymsp[1].minor.yy600 = createDefaultTableOptions(pCxt); }
break;
- case 187: /* table_options ::= table_options COMMENT NK_STRING */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-2].minor.yy74, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 186: /* table_options ::= table_options COMMENT NK_STRING */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-2].minor.yy600, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 188: /* table_options ::= table_options MAX_DELAY duration_list */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-2].minor.yy74, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy874); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 187: /* table_options ::= table_options MAX_DELAY duration_list */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-2].minor.yy600, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy601); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 189: /* table_options ::= table_options WATERMARK duration_list */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-2].minor.yy74, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy874); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 188: /* table_options ::= table_options WATERMARK duration_list */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-2].minor.yy600, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy601); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 190: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-4].minor.yy74, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy874); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
+ case 189: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-4].minor.yy600, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy601); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
break;
- case 191: /* table_options ::= table_options TTL NK_INTEGER */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-2].minor.yy74, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 190: /* table_options ::= table_options TTL NK_INTEGER */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-2].minor.yy600, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 192: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-4].minor.yy74, TABLE_OPTION_SMA, yymsp[-1].minor.yy874); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
+ case 191: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-4].minor.yy600, TABLE_OPTION_SMA, yymsp[-1].minor.yy601); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
break;
- case 193: /* table_options ::= table_options DELETE_MARK duration_list */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-2].minor.yy74, TABLE_OPTION_DELETE_MARK, yymsp[0].minor.yy874); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 192: /* table_options ::= table_options DELETE_MARK duration_list */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-2].minor.yy600, TABLE_OPTION_DELETE_MARK, yymsp[0].minor.yy601); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 194: /* alter_table_options ::= alter_table_option */
-{ yylhsminor.yy74 = createAlterTableOptions(pCxt); yylhsminor.yy74 = setTableOption(pCxt, yylhsminor.yy74, yymsp[0].minor.yy767.type, &yymsp[0].minor.yy767.val); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 193: /* alter_table_options ::= alter_table_option */
+{ yylhsminor.yy600 = createAlterTableOptions(pCxt); yylhsminor.yy600 = setTableOption(pCxt, yylhsminor.yy600, yymsp[0].minor.yy661.type, &yymsp[0].minor.yy661.val); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 195: /* alter_table_options ::= alter_table_options alter_table_option */
-{ yylhsminor.yy74 = setTableOption(pCxt, yymsp[-1].minor.yy74, yymsp[0].minor.yy767.type, &yymsp[0].minor.yy767.val); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 194: /* alter_table_options ::= alter_table_options alter_table_option */
+{ yylhsminor.yy600 = setTableOption(pCxt, yymsp[-1].minor.yy600, yymsp[0].minor.yy661.type, &yymsp[0].minor.yy661.val); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 196: /* alter_table_option ::= COMMENT NK_STRING */
-{ yymsp[-1].minor.yy767.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
+ case 195: /* alter_table_option ::= COMMENT NK_STRING */
+{ yymsp[-1].minor.yy661.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
break;
- case 197: /* alter_table_option ::= TTL NK_INTEGER */
-{ yymsp[-1].minor.yy767.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy767.val = yymsp[0].minor.yy0; }
+ case 196: /* alter_table_option ::= TTL NK_INTEGER */
+{ yymsp[-1].minor.yy661.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy661.val = yymsp[0].minor.yy0; }
break;
- case 198: /* duration_list ::= duration_literal */
- case 370: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==370);
-{ yylhsminor.yy874 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy74)); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
+ case 197: /* duration_list ::= duration_literal */
+ case 374: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==374);
+{ yylhsminor.yy601 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy600)); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
break;
- case 199: /* duration_list ::= duration_list NK_COMMA duration_literal */
- case 371: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==371);
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-2].minor.yy874, releaseRawExprNode(pCxt, yymsp[0].minor.yy74)); }
- yymsp[-2].minor.yy874 = yylhsminor.yy874;
+ case 198: /* duration_list ::= duration_list NK_COMMA duration_literal */
+ case 375: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==375);
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-2].minor.yy601, releaseRawExprNode(pCxt, yymsp[0].minor.yy600)); }
+ yymsp[-2].minor.yy601 = yylhsminor.yy601;
break;
- case 202: /* rollup_func_name ::= function_name */
-{ yylhsminor.yy74 = createFunctionNode(pCxt, &yymsp[0].minor.yy317, NULL); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 201: /* rollup_func_name ::= function_name */
+{ yylhsminor.yy600 = createFunctionNode(pCxt, &yymsp[0].minor.yy77, NULL); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 203: /* rollup_func_name ::= FIRST */
- case 204: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==204);
- case 257: /* tag_item ::= QTAGS */ yytestcase(yyruleno==257);
-{ yylhsminor.yy74 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 202: /* rollup_func_name ::= FIRST */
+ case 203: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==203);
+ case 256: /* tag_item ::= QTAGS */ yytestcase(yyruleno==256);
+{ yylhsminor.yy600 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 207: /* col_name ::= column_name */
- case 258: /* tag_item ::= column_name */ yytestcase(yyruleno==258);
-{ yylhsminor.yy74 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy317); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 206: /* col_name ::= column_name */
+ case 257: /* tag_item ::= column_name */ yytestcase(yyruleno==257);
+{ yylhsminor.yy600 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy77); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 208: /* cmd ::= SHOW DNODES */
+ case 207: /* cmd ::= SHOW DNODES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); }
break;
- case 209: /* cmd ::= SHOW USERS */
+ case 208: /* cmd ::= SHOW USERS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); }
break;
- case 210: /* cmd ::= SHOW USER PRIVILEGES */
+ case 209: /* cmd ::= SHOW USER PRIVILEGES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USER_PRIVILEGES_STMT); }
break;
- case 211: /* cmd ::= SHOW DATABASES */
+ case 210: /* cmd ::= SHOW DATABASES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); }
break;
- case 212: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */
-{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy74, yymsp[0].minor.yy74, OP_TYPE_LIKE); }
+ case 211: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */
+{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy600, yymsp[0].minor.yy600, OP_TYPE_LIKE); }
break;
- case 213: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */
-{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy74, yymsp[0].minor.yy74, OP_TYPE_LIKE); }
+ case 212: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */
+{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy600, yymsp[0].minor.yy600, OP_TYPE_LIKE); }
break;
- case 214: /* cmd ::= SHOW db_name_cond_opt VGROUPS */
-{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy74, NULL, OP_TYPE_LIKE); }
+ case 213: /* cmd ::= SHOW db_name_cond_opt VGROUPS */
+{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy600, NULL, OP_TYPE_LIKE); }
break;
- case 215: /* cmd ::= SHOW MNODES */
+ case 214: /* cmd ::= SHOW MNODES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); }
break;
- case 216: /* cmd ::= SHOW QNODES */
+ case 215: /* cmd ::= SHOW QNODES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); }
break;
- case 217: /* cmd ::= SHOW FUNCTIONS */
+ case 216: /* cmd ::= SHOW FUNCTIONS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); }
break;
- case 218: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */
-{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy74, yymsp[-1].minor.yy74, OP_TYPE_EQUAL); }
+ case 217: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */
+{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy600, yymsp[-1].minor.yy600, OP_TYPE_EQUAL); }
break;
- case 219: /* cmd ::= SHOW STREAMS */
+ case 218: /* cmd ::= SHOW STREAMS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); }
break;
- case 220: /* cmd ::= SHOW ACCOUNTS */
+ case 219: /* cmd ::= SHOW ACCOUNTS */
{ pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); }
break;
- case 221: /* cmd ::= SHOW APPS */
+ case 220: /* cmd ::= SHOW APPS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); }
break;
- case 222: /* cmd ::= SHOW CONNECTIONS */
+ case 221: /* cmd ::= SHOW CONNECTIONS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); }
break;
- case 223: /* cmd ::= SHOW LICENCES */
- case 224: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==224);
+ case 222: /* cmd ::= SHOW LICENCES */
+ case 223: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==223);
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); }
break;
- case 225: /* cmd ::= SHOW CREATE DATABASE db_name */
-{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy317); }
+ case 224: /* cmd ::= SHOW CREATE DATABASE db_name */
+{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy77); }
break;
- case 226: /* cmd ::= SHOW CREATE TABLE full_table_name */
-{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy74); }
+ case 225: /* cmd ::= SHOW CREATE TABLE full_table_name */
+{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy600); }
break;
- case 227: /* cmd ::= SHOW CREATE STABLE full_table_name */
-{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy74); }
+ case 226: /* cmd ::= SHOW CREATE STABLE full_table_name */
+{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy600); }
break;
- case 228: /* cmd ::= SHOW QUERIES */
+ case 227: /* cmd ::= SHOW QUERIES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); }
break;
- case 229: /* cmd ::= SHOW SCORES */
+ case 228: /* cmd ::= SHOW SCORES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); }
break;
- case 230: /* cmd ::= SHOW TOPICS */
+ case 229: /* cmd ::= SHOW TOPICS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); }
break;
- case 231: /* cmd ::= SHOW VARIABLES */
- case 232: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==232);
+ case 230: /* cmd ::= SHOW VARIABLES */
+ case 231: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==231);
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); }
break;
- case 233: /* cmd ::= SHOW LOCAL VARIABLES */
+ case 232: /* cmd ::= SHOW LOCAL VARIABLES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); }
break;
- case 234: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */
-{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy74); }
+ case 233: /* cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */
+{ pCxt->pRootNode = createShowDnodeVariablesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[-2].minor.yy0), yymsp[0].minor.yy600); }
break;
- case 235: /* cmd ::= SHOW BNODES */
+ case 234: /* cmd ::= SHOW BNODES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); }
break;
- case 236: /* cmd ::= SHOW SNODES */
+ case 235: /* cmd ::= SHOW SNODES */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); }
break;
- case 237: /* cmd ::= SHOW CLUSTER */
+ case 236: /* cmd ::= SHOW CLUSTER */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); }
break;
- case 238: /* cmd ::= SHOW TRANSACTIONS */
+ case 237: /* cmd ::= SHOW TRANSACTIONS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); }
break;
- case 239: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */
-{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy74); }
+ case 238: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */
+{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy600); }
break;
- case 240: /* cmd ::= SHOW CONSUMERS */
+ case 239: /* cmd ::= SHOW CONSUMERS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); }
break;
- case 241: /* cmd ::= SHOW SUBSCRIPTIONS */
+ case 240: /* cmd ::= SHOW SUBSCRIPTIONS */
{ pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); }
break;
- case 242: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */
-{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy74, yymsp[-1].minor.yy74, OP_TYPE_EQUAL); }
+ case 241: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */
+{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy600, yymsp[-1].minor.yy600, OP_TYPE_EQUAL); }
break;
- case 243: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */
-{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, yymsp[-1].minor.yy74, yymsp[0].minor.yy74, yymsp[-3].minor.yy874); }
+ case 242: /* cmd ::= SHOW TABLE TAGS tag_list_opt FROM table_name_cond from_db_opt */
+{ pCxt->pRootNode = createShowTableTagsStmt(pCxt, yymsp[-1].minor.yy600, yymsp[0].minor.yy600, yymsp[-3].minor.yy601); }
break;
- case 244: /* cmd ::= SHOW VNODES NK_INTEGER */
+ case 243: /* cmd ::= SHOW VNODES NK_INTEGER */
{ pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0), NULL); }
break;
- case 245: /* cmd ::= SHOW VNODES NK_STRING */
+ case 244: /* cmd ::= SHOW VNODES NK_STRING */
{ pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &yymsp[0].minor.yy0)); }
break;
- case 246: /* db_name_cond_opt ::= */
- case 251: /* from_db_opt ::= */ yytestcase(yyruleno==251);
-{ yymsp[1].minor.yy74 = createDefaultDatabaseCondValue(pCxt); }
+ case 245: /* db_name_cond_opt ::= */
+ case 250: /* from_db_opt ::= */ yytestcase(yyruleno==250);
+{ yymsp[1].minor.yy600 = createDefaultDatabaseCondValue(pCxt); }
break;
- case 247: /* db_name_cond_opt ::= db_name NK_DOT */
-{ yylhsminor.yy74 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy317); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 246: /* db_name_cond_opt ::= db_name NK_DOT */
+{ yylhsminor.yy600 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy77); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 248: /* like_pattern_opt ::= */
- case 303: /* subtable_opt ::= */ yytestcase(yyruleno==303);
- case 415: /* case_when_else_opt ::= */ yytestcase(yyruleno==415);
- case 445: /* from_clause_opt ::= */ yytestcase(yyruleno==445);
- case 474: /* where_clause_opt ::= */ yytestcase(yyruleno==474);
- case 483: /* twindow_clause_opt ::= */ yytestcase(yyruleno==483);
- case 489: /* sliding_opt ::= */ yytestcase(yyruleno==489);
- case 491: /* fill_opt ::= */ yytestcase(yyruleno==491);
- case 503: /* having_clause_opt ::= */ yytestcase(yyruleno==503);
- case 505: /* range_opt ::= */ yytestcase(yyruleno==505);
- case 507: /* every_opt ::= */ yytestcase(yyruleno==507);
- case 520: /* slimit_clause_opt ::= */ yytestcase(yyruleno==520);
- case 524: /* limit_clause_opt ::= */ yytestcase(yyruleno==524);
-{ yymsp[1].minor.yy74 = NULL; }
+ case 247: /* like_pattern_opt ::= */
+ case 307: /* subtable_opt ::= */ yytestcase(yyruleno==307);
+ case 420: /* case_when_else_opt ::= */ yytestcase(yyruleno==420);
+ case 450: /* from_clause_opt ::= */ yytestcase(yyruleno==450);
+ case 479: /* where_clause_opt ::= */ yytestcase(yyruleno==479);
+ case 488: /* twindow_clause_opt ::= */ yytestcase(yyruleno==488);
+ case 494: /* sliding_opt ::= */ yytestcase(yyruleno==494);
+ case 496: /* fill_opt ::= */ yytestcase(yyruleno==496);
+ case 508: /* having_clause_opt ::= */ yytestcase(yyruleno==508);
+ case 510: /* range_opt ::= */ yytestcase(yyruleno==510);
+ case 512: /* every_opt ::= */ yytestcase(yyruleno==512);
+ case 525: /* slimit_clause_opt ::= */ yytestcase(yyruleno==525);
+ case 529: /* limit_clause_opt ::= */ yytestcase(yyruleno==529);
+{ yymsp[1].minor.yy600 = NULL; }
break;
- case 249: /* like_pattern_opt ::= LIKE NK_STRING */
-{ yymsp[-1].minor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); }
+ case 248: /* like_pattern_opt ::= LIKE NK_STRING */
+{ yymsp[-1].minor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); }
break;
- case 250: /* table_name_cond ::= table_name */
-{ yylhsminor.yy74 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy317); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 249: /* table_name_cond ::= table_name */
+{ yylhsminor.yy600 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy77); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 252: /* from_db_opt ::= FROM db_name */
-{ yymsp[-1].minor.yy74 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy317); }
+ case 251: /* from_db_opt ::= FROM db_name */
+{ yymsp[-1].minor.yy600 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy77); }
break;
- case 256: /* tag_item ::= TBNAME */
-{ yylhsminor.yy74 = setProjectionAlias(pCxt, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL), &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 255: /* tag_item ::= TBNAME */
+{ yylhsminor.yy600 = setProjectionAlias(pCxt, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL), &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 259: /* tag_item ::= column_name column_alias */
-{ yylhsminor.yy74 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-1].minor.yy317), &yymsp[0].minor.yy317); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 258: /* tag_item ::= column_name column_alias */
+{ yylhsminor.yy600 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-1].minor.yy77), &yymsp[0].minor.yy77); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 260: /* tag_item ::= column_name AS column_alias */
-{ yylhsminor.yy74 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-2].minor.yy317), &yymsp[0].minor.yy317); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 259: /* tag_item ::= column_name AS column_alias */
+{ yylhsminor.yy600 = setProjectionAlias(pCxt, createColumnNode(pCxt, NULL, &yymsp[-2].minor.yy77), &yymsp[0].minor.yy77); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 261: /* cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */
-{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy335, yymsp[-3].minor.yy74, yymsp[-1].minor.yy74, NULL, yymsp[0].minor.yy74); }
+ case 260: /* cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */
+{ pCxt->pRootNode = createCreateIndexStmt(pCxt, INDEX_TYPE_SMA, yymsp[-4].minor.yy841, yymsp[-3].minor.yy600, yymsp[-1].minor.yy600, NULL, yymsp[0].minor.yy600); }
break;
- case 262: /* cmd ::= DROP INDEX exists_opt full_table_name */
-{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy335, yymsp[0].minor.yy74); }
+ case 261: /* cmd ::= DROP INDEX exists_opt full_table_name */
+{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy841, yymsp[0].minor.yy600); }
break;
- case 263: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */
-{ yymsp[-9].minor.yy74 = createIndexOption(pCxt, yymsp[-7].minor.yy874, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), NULL, yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 262: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */
+{ yymsp[-9].minor.yy600 = createIndexOption(pCxt, yymsp[-7].minor.yy601, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), NULL, yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 264: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */
-{ yymsp[-11].minor.yy74 = createIndexOption(pCxt, yymsp[-9].minor.yy874, releaseRawExprNode(pCxt, yymsp[-5].minor.yy74), releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 263: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt sma_stream_opt */
+{ yymsp[-11].minor.yy600 = createIndexOption(pCxt, yymsp[-9].minor.yy601, releaseRawExprNode(pCxt, yymsp[-5].minor.yy600), releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 267: /* func ::= function_name NK_LP expression_list NK_RP */
-{ yylhsminor.yy74 = createFunctionNode(pCxt, &yymsp[-3].minor.yy317, yymsp[-1].minor.yy874); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 266: /* func ::= sma_func_name NK_LP expression_list NK_RP */
+{ yylhsminor.yy600 = createFunctionNode(pCxt, &yymsp[-3].minor.yy77, yymsp[-1].minor.yy601); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 268: /* sma_stream_opt ::= */
- case 296: /* stream_options ::= */ yytestcase(yyruleno==296);
-{ yymsp[1].minor.yy74 = createStreamOptions(pCxt); }
+ case 272: /* sma_stream_opt ::= */
+ case 300: /* stream_options ::= */ yytestcase(yyruleno==300);
+{ yymsp[1].minor.yy600 = createStreamOptions(pCxt); }
break;
- case 269: /* sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */
- case 300: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==300);
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 273: /* sma_stream_opt ::= sma_stream_opt WATERMARK duration_literal */
+ case 304: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==304);
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 270: /* sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 274: /* sma_stream_opt ::= sma_stream_opt MAX_DELAY duration_literal */
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 271: /* sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->pDeleteMark = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 275: /* sma_stream_opt ::= sma_stream_opt DELETE_MARK duration_literal */
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->pDeleteMark = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 272: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */
-{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy335, &yymsp[-2].minor.yy317, yymsp[0].minor.yy74); }
+ case 276: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */
+{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy841, &yymsp[-2].minor.yy77, yymsp[0].minor.yy600); }
break;
- case 273: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */
-{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy335, &yymsp[-3].minor.yy317, &yymsp[0].minor.yy317, false); }
+ case 277: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */
+{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy841, &yymsp[-3].minor.yy77, &yymsp[0].minor.yy77, false); }
break;
- case 274: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */
-{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy335, &yymsp[-5].minor.yy317, &yymsp[0].minor.yy317, true); }
+ case 278: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */
+{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy841, &yymsp[-5].minor.yy77, &yymsp[0].minor.yy77, true); }
break;
- case 275: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */
-{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy335, &yymsp[-3].minor.yy317, yymsp[0].minor.yy74, false); }
+ case 279: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */
+{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy841, &yymsp[-3].minor.yy77, yymsp[0].minor.yy600, false); }
break;
- case 276: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */
-{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy335, &yymsp[-5].minor.yy317, yymsp[0].minor.yy74, true); }
+ case 280: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */
+{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy841, &yymsp[-5].minor.yy77, yymsp[0].minor.yy600, true); }
break;
- case 277: /* cmd ::= DROP TOPIC exists_opt topic_name */
-{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy335, &yymsp[0].minor.yy317); }
+ case 281: /* cmd ::= DROP TOPIC exists_opt topic_name */
+{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy841, &yymsp[0].minor.yy77); }
break;
- case 278: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */
-{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy335, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317); }
+ case 282: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */
+{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy841, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77); }
break;
- case 279: /* cmd ::= DESC full_table_name */
- case 280: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==280);
-{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy74); }
+ case 283: /* cmd ::= DESC full_table_name */
+ case 284: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==284);
+{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy600); }
break;
- case 281: /* cmd ::= RESET QUERY CACHE */
+ case 285: /* cmd ::= RESET QUERY CACHE */
{ pCxt->pRootNode = createResetQueryCacheStmt(pCxt); }
break;
- case 282: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */
-{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy335, yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 286: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */
+{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy841, yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 285: /* explain_options ::= */
-{ yymsp[1].minor.yy74 = createDefaultExplainOptions(pCxt); }
+ case 289: /* explain_options ::= */
+{ yymsp[1].minor.yy600 = createDefaultExplainOptions(pCxt); }
break;
- case 286: /* explain_options ::= explain_options VERBOSE NK_BOOL */
-{ yylhsminor.yy74 = setExplainVerbose(pCxt, yymsp[-2].minor.yy74, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 290: /* explain_options ::= explain_options VERBOSE NK_BOOL */
+{ yylhsminor.yy600 = setExplainVerbose(pCxt, yymsp[-2].minor.yy600, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 287: /* explain_options ::= explain_options RATIO NK_FLOAT */
-{ yylhsminor.yy74 = setExplainRatio(pCxt, yymsp[-2].minor.yy74, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 291: /* explain_options ::= explain_options RATIO NK_FLOAT */
+{ yylhsminor.yy600 = setExplainRatio(pCxt, yymsp[-2].minor.yy600, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 288: /* cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */
-{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-6].minor.yy335, yymsp[-8].minor.yy335, &yymsp[-5].minor.yy317, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy898, yymsp[0].minor.yy856); }
+ case 292: /* cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */
+{ pCxt->pRootNode = createCreateFunctionStmt(pCxt, yymsp[-6].minor.yy841, yymsp[-8].minor.yy841, &yymsp[-5].minor.yy77, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy888, yymsp[0].minor.yy248); }
break;
- case 289: /* cmd ::= DROP FUNCTION exists_opt function_name */
-{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy335, &yymsp[0].minor.yy317); }
+ case 293: /* cmd ::= DROP FUNCTION exists_opt function_name */
+{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy841, &yymsp[0].minor.yy77); }
break;
- case 294: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */
-{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-8].minor.yy335, &yymsp[-7].minor.yy317, yymsp[-4].minor.yy74, yymsp[-6].minor.yy74, yymsp[-3].minor.yy874, yymsp[-2].minor.yy74, yymsp[0].minor.yy74); }
+ case 298: /* cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */
+{ pCxt->pRootNode = createCreateStreamStmt(pCxt, yymsp[-8].minor.yy841, &yymsp[-7].minor.yy77, yymsp[-4].minor.yy600, yymsp[-6].minor.yy600, yymsp[-3].minor.yy601, yymsp[-2].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 295: /* cmd ::= DROP STREAM exists_opt stream_name */
-{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy335, &yymsp[0].minor.yy317); }
+ case 299: /* cmd ::= DROP STREAM exists_opt stream_name */
+{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy841, &yymsp[0].minor.yy77); }
break;
- case 297: /* stream_options ::= stream_options TRIGGER AT_ONCE */
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 301: /* stream_options ::= stream_options TRIGGER AT_ONCE */
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 298: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 302: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 299: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */
-{ ((SStreamOptions*)yymsp[-3].minor.yy74)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy74)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); yylhsminor.yy74 = yymsp[-3].minor.yy74; }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 303: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */
+{ ((SStreamOptions*)yymsp[-3].minor.yy600)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy600)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); yylhsminor.yy600 = yymsp[-3].minor.yy600; }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 301: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */
-{ ((SStreamOptions*)yymsp[-3].minor.yy74)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy74 = yymsp[-3].minor.yy74; }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 305: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */
+{ ((SStreamOptions*)yymsp[-3].minor.yy600)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy600 = yymsp[-3].minor.yy600; }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 302: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */
-{ ((SStreamOptions*)yymsp[-2].minor.yy74)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy74 = yymsp[-2].minor.yy74; }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 306: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */
+{ ((SStreamOptions*)yymsp[-2].minor.yy600)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy600 = yymsp[-2].minor.yy600; }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 304: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */
- case 490: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==490);
- case 508: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==508);
-{ yymsp[-3].minor.yy74 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy74); }
+ case 308: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */
+ case 495: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==495);
+ case 513: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==513);
+{ yymsp[-3].minor.yy600 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy600); }
break;
- case 305: /* cmd ::= KILL CONNECTION NK_INTEGER */
+ case 309: /* cmd ::= KILL CONNECTION NK_INTEGER */
{ pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); }
break;
- case 306: /* cmd ::= KILL QUERY NK_STRING */
+ case 310: /* cmd ::= KILL QUERY NK_STRING */
{ pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); }
break;
- case 307: /* cmd ::= KILL TRANSACTION NK_INTEGER */
+ case 311: /* cmd ::= KILL TRANSACTION NK_INTEGER */
{ pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); }
break;
- case 308: /* cmd ::= BALANCE VGROUP */
+ case 312: /* cmd ::= BALANCE VGROUP */
{ pCxt->pRootNode = createBalanceVgroupStmt(pCxt); }
break;
- case 309: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */
+ case 313: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */
{ pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); }
break;
- case 310: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */
-{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy874); }
+ case 314: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */
+{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy601); }
break;
- case 311: /* cmd ::= SPLIT VGROUP NK_INTEGER */
+ case 315: /* cmd ::= SPLIT VGROUP NK_INTEGER */
{ pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); }
break;
- case 312: /* dnode_list ::= DNODE NK_INTEGER */
-{ yymsp[-1].minor.yy874 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
+ case 316: /* dnode_list ::= DNODE NK_INTEGER */
+{ yymsp[-1].minor.yy601 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); }
break;
- case 314: /* cmd ::= DELETE FROM full_table_name where_clause_opt */
-{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 318: /* cmd ::= DELETE FROM full_table_name where_clause_opt */
+{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 316: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */
-{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy74, yymsp[-2].minor.yy874, yymsp[0].minor.yy74); }
+ case 320: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */
+{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy600, yymsp[-2].minor.yy601, yymsp[0].minor.yy600); }
break;
- case 317: /* cmd ::= INSERT INTO full_table_name query_or_subquery */
-{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy74, NULL, yymsp[0].minor.yy74); }
+ case 321: /* cmd ::= INSERT INTO full_table_name query_or_subquery */
+{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy600, NULL, yymsp[0].minor.yy600); }
break;
- case 318: /* literal ::= NK_INTEGER */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 322: /* literal ::= NK_INTEGER */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 319: /* literal ::= NK_FLOAT */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 323: /* literal ::= NK_FLOAT */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 320: /* literal ::= NK_STRING */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 324: /* literal ::= NK_STRING */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 321: /* literal ::= NK_BOOL */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 325: /* literal ::= NK_BOOL */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 322: /* literal ::= TIMESTAMP NK_STRING */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 326: /* literal ::= TIMESTAMP NK_STRING */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 323: /* literal ::= duration_literal */
- case 333: /* signed_literal ::= signed */ yytestcase(yyruleno==333);
- case 353: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==353);
- case 354: /* expression ::= literal */ yytestcase(yyruleno==354);
- case 355: /* expression ::= pseudo_column */ yytestcase(yyruleno==355);
- case 356: /* expression ::= column_reference */ yytestcase(yyruleno==356);
- case 357: /* expression ::= function_expression */ yytestcase(yyruleno==357);
- case 358: /* expression ::= case_when_expression */ yytestcase(yyruleno==358);
- case 388: /* function_expression ::= literal_func */ yytestcase(yyruleno==388);
- case 437: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==437);
- case 441: /* boolean_primary ::= predicate */ yytestcase(yyruleno==441);
- case 443: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==443);
- case 444: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==444);
- case 447: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==447);
- case 449: /* table_reference ::= table_primary */ yytestcase(yyruleno==449);
- case 450: /* table_reference ::= joined_table */ yytestcase(yyruleno==450);
- case 454: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==454);
- case 510: /* query_simple ::= query_specification */ yytestcase(yyruleno==510);
- case 511: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==511);
- case 514: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==514);
- case 516: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==516);
-{ yylhsminor.yy74 = yymsp[0].minor.yy74; }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 327: /* literal ::= duration_literal */
+ case 337: /* signed_literal ::= signed */ yytestcase(yyruleno==337);
+ case 357: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==357);
+ case 358: /* expression ::= literal */ yytestcase(yyruleno==358);
+ case 359: /* expression ::= pseudo_column */ yytestcase(yyruleno==359);
+ case 360: /* expression ::= column_reference */ yytestcase(yyruleno==360);
+ case 361: /* expression ::= function_expression */ yytestcase(yyruleno==361);
+ case 362: /* expression ::= case_when_expression */ yytestcase(yyruleno==362);
+ case 393: /* function_expression ::= literal_func */ yytestcase(yyruleno==393);
+ case 442: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==442);
+ case 446: /* boolean_primary ::= predicate */ yytestcase(yyruleno==446);
+ case 448: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==448);
+ case 449: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==449);
+ case 452: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==452);
+ case 454: /* table_reference ::= table_primary */ yytestcase(yyruleno==454);
+ case 455: /* table_reference ::= joined_table */ yytestcase(yyruleno==455);
+ case 459: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==459);
+ case 515: /* query_simple ::= query_specification */ yytestcase(yyruleno==515);
+ case 516: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==516);
+ case 519: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==519);
+ case 521: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==521);
+{ yylhsminor.yy600 = yymsp[0].minor.yy600; }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 324: /* literal ::= NULL */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 328: /* literal ::= NULL */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 325: /* literal ::= NK_QUESTION */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 329: /* literal ::= NK_QUESTION */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 326: /* duration_literal ::= NK_VARIABLE */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 330: /* duration_literal ::= NK_VARIABLE */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 327: /* signed ::= NK_INTEGER */
-{ yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 331: /* signed ::= NK_INTEGER */
+{ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 328: /* signed ::= NK_PLUS NK_INTEGER */
-{ yymsp[-1].minor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); }
+ case 332: /* signed ::= NK_PLUS NK_INTEGER */
+{ yymsp[-1].minor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); }
break;
- case 329: /* signed ::= NK_MINUS NK_INTEGER */
+ case 333: /* signed ::= NK_MINUS NK_INTEGER */
{
SToken t = yymsp[-1].minor.yy0;
t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z;
- yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
+ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t);
}
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 330: /* signed ::= NK_FLOAT */
-{ yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 334: /* signed ::= NK_FLOAT */
+{ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 331: /* signed ::= NK_PLUS NK_FLOAT */
-{ yymsp[-1].minor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); }
+ case 335: /* signed ::= NK_PLUS NK_FLOAT */
+{ yymsp[-1].minor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); }
break;
- case 332: /* signed ::= NK_MINUS NK_FLOAT */
+ case 336: /* signed ::= NK_MINUS NK_FLOAT */
{
SToken t = yymsp[-1].minor.yy0;
t.n = (yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n) - yymsp[-1].minor.yy0.z;
- yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
+ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t);
}
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 334: /* signed_literal ::= NK_STRING */
-{ yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 338: /* signed_literal ::= NK_STRING */
+{ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 335: /* signed_literal ::= NK_BOOL */
-{ yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 339: /* signed_literal ::= NK_BOOL */
+{ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 336: /* signed_literal ::= TIMESTAMP NK_STRING */
-{ yymsp[-1].minor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); }
+ case 340: /* signed_literal ::= TIMESTAMP NK_STRING */
+{ yymsp[-1].minor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); }
break;
- case 337: /* signed_literal ::= duration_literal */
- case 339: /* signed_literal ::= literal_func */ yytestcase(yyruleno==339);
- case 408: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==408);
- case 470: /* select_item ::= common_expression */ yytestcase(yyruleno==470);
- case 480: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==480);
- case 515: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==515);
- case 517: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==517);
- case 530: /* search_condition ::= common_expression */ yytestcase(yyruleno==530);
-{ yylhsminor.yy74 = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 341: /* signed_literal ::= duration_literal */
+ case 343: /* signed_literal ::= literal_func */ yytestcase(yyruleno==343);
+ case 413: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==413);
+ case 475: /* select_item ::= common_expression */ yytestcase(yyruleno==475);
+ case 485: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==485);
+ case 520: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==520);
+ case 522: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==522);
+ case 535: /* search_condition ::= common_expression */ yytestcase(yyruleno==535);
+{ yylhsminor.yy600 = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 338: /* signed_literal ::= NULL */
-{ yylhsminor.yy74 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 342: /* signed_literal ::= NULL */
+{ yylhsminor.yy600 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 340: /* signed_literal ::= NK_QUESTION */
-{ yylhsminor.yy74 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 344: /* signed_literal ::= NK_QUESTION */
+{ yylhsminor.yy600 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 359: /* expression ::= NK_LP expression NK_RP */
- case 442: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==442);
- case 529: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==529);
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy74)); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 363: /* expression ::= NK_LP expression NK_RP */
+ case 447: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==447);
+ case 534: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==534);
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy600)); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 360: /* expression ::= NK_PLUS expr_or_subquery */
+ case 364: /* expression ::= NK_PLUS expr_or_subquery */
{
- SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy74));
+ SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy600));
}
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 361: /* expression ::= NK_MINUS expr_or_subquery */
+ case 365: /* expression ::= NK_MINUS expr_or_subquery */
{
- SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy74), NULL));
+ SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy600), NULL));
}
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 362: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */
+ case 366: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 363: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */
+ case 367: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 364: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */
+ case 368: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 365: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */
+ case 369: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 366: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */
+ case 370: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 367: /* expression ::= column_reference NK_ARROW NK_STRING */
+ case 371: /* expression ::= column_reference NK_ARROW NK_STRING */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 368: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */
+ case 372: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 369: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */
+ case 373: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 372: /* column_reference ::= column_name */
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy317, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy317)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 376: /* column_reference ::= column_name */
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy77, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy77)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 373: /* column_reference ::= table_name NK_DOT column_name */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317, createColumnNode(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy317)); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 377: /* column_reference ::= table_name NK_DOT column_name */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77, createColumnNode(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy77)); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 374: /* pseudo_column ::= ROWTS */
- case 375: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==375);
- case 377: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==377);
- case 378: /* pseudo_column ::= QEND */ yytestcase(yyruleno==378);
- case 379: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==379);
- case 380: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==380);
- case 381: /* pseudo_column ::= WEND */ yytestcase(yyruleno==381);
- case 382: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==382);
- case 383: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==383);
- case 384: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==384);
- case 390: /* literal_func ::= NOW */ yytestcase(yyruleno==390);
-{ yylhsminor.yy74 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 378: /* pseudo_column ::= ROWTS */
+ case 379: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==379);
+ case 381: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==381);
+ case 382: /* pseudo_column ::= QEND */ yytestcase(yyruleno==382);
+ case 383: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==383);
+ case 384: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==384);
+ case 385: /* pseudo_column ::= WEND */ yytestcase(yyruleno==385);
+ case 386: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==386);
+ case 387: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==387);
+ case 388: /* pseudo_column ::= ISFILLED */ yytestcase(yyruleno==388);
+ case 389: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==389);
+ case 395: /* literal_func ::= NOW */ yytestcase(yyruleno==395);
+{ yylhsminor.yy600 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 376: /* pseudo_column ::= table_name NK_DOT TBNAME */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy317)))); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 380: /* pseudo_column ::= table_name NK_DOT TBNAME */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy77)))); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 385: /* function_expression ::= function_name NK_LP expression_list NK_RP */
- case 386: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==386);
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy317, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy317, yymsp[-1].minor.yy874)); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 390: /* function_expression ::= function_name NK_LP expression_list NK_RP */
+ case 391: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==391);
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy77, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy77, yymsp[-1].minor.yy601)); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 387: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), yymsp[-1].minor.yy898)); }
- yymsp[-5].minor.yy74 = yylhsminor.yy74;
+ case 392: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), yymsp[-1].minor.yy888)); }
+ yymsp[-5].minor.yy600 = yylhsminor.yy600;
break;
- case 389: /* literal_func ::= noarg_func NK_LP NK_RP */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy317, NULL)); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 394: /* literal_func ::= noarg_func NK_LP NK_RP */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy77, NULL)); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 404: /* star_func_para_list ::= NK_STAR */
-{ yylhsminor.yy874 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
+ case 409: /* star_func_para_list ::= NK_STAR */
+{ yylhsminor.yy601 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
break;
- case 409: /* star_func_para ::= table_name NK_DOT NK_STAR */
- case 473: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==473);
-{ yylhsminor.yy74 = createColumnNode(pCxt, &yymsp[-2].minor.yy317, &yymsp[0].minor.yy0); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 414: /* star_func_para ::= table_name NK_DOT NK_STAR */
+ case 478: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==478);
+{ yylhsminor.yy600 = createColumnNode(pCxt, &yymsp[-2].minor.yy77, &yymsp[0].minor.yy0); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 410: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy874, yymsp[-1].minor.yy74)); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 415: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy601, yymsp[-1].minor.yy600)); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 411: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), yymsp[-2].minor.yy874, yymsp[-1].minor.yy74)); }
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
+ case 416: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), yymsp[-2].minor.yy601, yymsp[-1].minor.yy600)); }
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
break;
- case 414: /* when_then_expr ::= WHEN common_expression THEN common_expression */
-{ yymsp[-3].minor.yy74 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)); }
+ case 419: /* when_then_expr ::= WHEN common_expression THEN common_expression */
+{ yymsp[-3].minor.yy600 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)); }
break;
- case 416: /* case_when_else_opt ::= ELSE common_expression */
-{ yymsp[-1].minor.yy74 = releaseRawExprNode(pCxt, yymsp[0].minor.yy74); }
+ case 421: /* case_when_else_opt ::= ELSE common_expression */
+{ yymsp[-1].minor.yy600 = releaseRawExprNode(pCxt, yymsp[0].minor.yy600); }
break;
- case 417: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */
- case 422: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==422);
+ case 422: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */
+ case 427: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==427);
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy20, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy666, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 418: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */
+ case 423: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy74), releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy600), releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-4].minor.yy74 = yylhsminor.yy74;
+ yymsp[-4].minor.yy600 = yylhsminor.yy600;
break;
- case 419: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */
+ case 424: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy74), releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy600), releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-5].minor.yy74 = yylhsminor.yy74;
+ yymsp[-5].minor.yy600 = yylhsminor.yy600;
break;
- case 420: /* predicate ::= expr_or_subquery IS NULL */
+ case 425: /* predicate ::= expr_or_subquery IS NULL */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), NULL));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), NULL));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 421: /* predicate ::= expr_or_subquery IS NOT NULL */
+ case 426: /* predicate ::= expr_or_subquery IS NOT NULL */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), NULL));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), NULL));
}
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 423: /* compare_op ::= NK_LT */
-{ yymsp[0].minor.yy20 = OP_TYPE_LOWER_THAN; }
+ case 428: /* compare_op ::= NK_LT */
+{ yymsp[0].minor.yy666 = OP_TYPE_LOWER_THAN; }
break;
- case 424: /* compare_op ::= NK_GT */
-{ yymsp[0].minor.yy20 = OP_TYPE_GREATER_THAN; }
+ case 429: /* compare_op ::= NK_GT */
+{ yymsp[0].minor.yy666 = OP_TYPE_GREATER_THAN; }
break;
- case 425: /* compare_op ::= NK_LE */
-{ yymsp[0].minor.yy20 = OP_TYPE_LOWER_EQUAL; }
+ case 430: /* compare_op ::= NK_LE */
+{ yymsp[0].minor.yy666 = OP_TYPE_LOWER_EQUAL; }
break;
- case 426: /* compare_op ::= NK_GE */
-{ yymsp[0].minor.yy20 = OP_TYPE_GREATER_EQUAL; }
+ case 431: /* compare_op ::= NK_GE */
+{ yymsp[0].minor.yy666 = OP_TYPE_GREATER_EQUAL; }
break;
- case 427: /* compare_op ::= NK_NE */
-{ yymsp[0].minor.yy20 = OP_TYPE_NOT_EQUAL; }
+ case 432: /* compare_op ::= NK_NE */
+{ yymsp[0].minor.yy666 = OP_TYPE_NOT_EQUAL; }
break;
- case 428: /* compare_op ::= NK_EQ */
-{ yymsp[0].minor.yy20 = OP_TYPE_EQUAL; }
+ case 433: /* compare_op ::= NK_EQ */
+{ yymsp[0].minor.yy666 = OP_TYPE_EQUAL; }
break;
- case 429: /* compare_op ::= LIKE */
-{ yymsp[0].minor.yy20 = OP_TYPE_LIKE; }
+ case 434: /* compare_op ::= LIKE */
+{ yymsp[0].minor.yy666 = OP_TYPE_LIKE; }
break;
- case 430: /* compare_op ::= NOT LIKE */
-{ yymsp[-1].minor.yy20 = OP_TYPE_NOT_LIKE; }
+ case 435: /* compare_op ::= NOT LIKE */
+{ yymsp[-1].minor.yy666 = OP_TYPE_NOT_LIKE; }
break;
- case 431: /* compare_op ::= MATCH */
-{ yymsp[0].minor.yy20 = OP_TYPE_MATCH; }
+ case 436: /* compare_op ::= MATCH */
+{ yymsp[0].minor.yy666 = OP_TYPE_MATCH; }
break;
- case 432: /* compare_op ::= NMATCH */
-{ yymsp[0].minor.yy20 = OP_TYPE_NMATCH; }
+ case 437: /* compare_op ::= NMATCH */
+{ yymsp[0].minor.yy666 = OP_TYPE_NMATCH; }
break;
- case 433: /* compare_op ::= CONTAINS */
-{ yymsp[0].minor.yy20 = OP_TYPE_JSON_CONTAINS; }
+ case 438: /* compare_op ::= CONTAINS */
+{ yymsp[0].minor.yy666 = OP_TYPE_JSON_CONTAINS; }
break;
- case 434: /* in_op ::= IN */
-{ yymsp[0].minor.yy20 = OP_TYPE_IN; }
+ case 439: /* in_op ::= IN */
+{ yymsp[0].minor.yy666 = OP_TYPE_IN; }
break;
- case 435: /* in_op ::= NOT IN */
-{ yymsp[-1].minor.yy20 = OP_TYPE_NOT_IN; }
+ case 440: /* in_op ::= NOT IN */
+{ yymsp[-1].minor.yy666 = OP_TYPE_NOT_IN; }
break;
- case 436: /* in_predicate_value ::= NK_LP literal_list NK_RP */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy874)); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 441: /* in_predicate_value ::= NK_LP literal_list NK_RP */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy601)); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 438: /* boolean_value_expression ::= NOT boolean_primary */
+ case 443: /* boolean_value_expression ::= NOT boolean_primary */
{
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy74), NULL));
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy600), NULL));
}
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 439: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
+ case 444: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 440: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
+ case 445: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */
{
- SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy74);
- SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy74);
- yylhsminor.yy74 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), releaseRawExprNode(pCxt, yymsp[0].minor.yy74)));
+ SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy600);
+ SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy600);
+ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), releaseRawExprNode(pCxt, yymsp[0].minor.yy600)));
}
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 446: /* from_clause_opt ::= FROM table_reference_list */
- case 475: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==475);
- case 504: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==504);
-{ yymsp[-1].minor.yy74 = yymsp[0].minor.yy74; }
+ case 451: /* from_clause_opt ::= FROM table_reference_list */
+ case 480: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==480);
+ case 509: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==509);
+{ yymsp[-1].minor.yy600 = yymsp[0].minor.yy600; }
break;
- case 448: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */
-{ yylhsminor.yy74 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy74, yymsp[0].minor.yy74, NULL); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 453: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */
+{ yylhsminor.yy600 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy600, yymsp[0].minor.yy600, NULL); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 451: /* table_primary ::= table_name alias_opt */
-{ yylhsminor.yy74 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy317, &yymsp[0].minor.yy317); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 456: /* table_primary ::= table_name alias_opt */
+{ yylhsminor.yy600 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy77, &yymsp[0].minor.yy77); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 452: /* table_primary ::= db_name NK_DOT table_name alias_opt */
-{ yylhsminor.yy74 = createRealTableNode(pCxt, &yymsp[-3].minor.yy317, &yymsp[-1].minor.yy317, &yymsp[0].minor.yy317); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 457: /* table_primary ::= db_name NK_DOT table_name alias_opt */
+{ yylhsminor.yy600 = createRealTableNode(pCxt, &yymsp[-3].minor.yy77, &yymsp[-1].minor.yy77, &yymsp[0].minor.yy77); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 453: /* table_primary ::= subquery alias_opt */
-{ yylhsminor.yy74 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy74), &yymsp[0].minor.yy317); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 458: /* table_primary ::= subquery alias_opt */
+{ yylhsminor.yy600 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy600), &yymsp[0].minor.yy77); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 455: /* alias_opt ::= */
-{ yymsp[1].minor.yy317 = nil_token; }
+ case 460: /* alias_opt ::= */
+{ yymsp[1].minor.yy77 = nil_token; }
break;
- case 457: /* alias_opt ::= AS table_alias */
-{ yymsp[-1].minor.yy317 = yymsp[0].minor.yy317; }
+ case 462: /* alias_opt ::= AS table_alias */
+{ yymsp[-1].minor.yy77 = yymsp[0].minor.yy77; }
break;
- case 458: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */
- case 459: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==459);
-{ yymsp[-2].minor.yy74 = yymsp[-1].minor.yy74; }
+ case 463: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */
+ case 464: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==464);
+{ yymsp[-2].minor.yy600 = yymsp[-1].minor.yy600; }
break;
- case 460: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
-{ yylhsminor.yy74 = createJoinTableNode(pCxt, yymsp[-4].minor.yy630, yymsp[-5].minor.yy74, yymsp[-2].minor.yy74, yymsp[0].minor.yy74); }
- yymsp[-5].minor.yy74 = yylhsminor.yy74;
+ case 465: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */
+{ yylhsminor.yy600 = createJoinTableNode(pCxt, yymsp[-4].minor.yy560, yymsp[-5].minor.yy600, yymsp[-2].minor.yy600, yymsp[0].minor.yy600); }
+ yymsp[-5].minor.yy600 = yylhsminor.yy600;
break;
- case 461: /* join_type ::= */
-{ yymsp[1].minor.yy630 = JOIN_TYPE_INNER; }
+ case 466: /* join_type ::= */
+{ yymsp[1].minor.yy560 = JOIN_TYPE_INNER; }
break;
- case 462: /* join_type ::= INNER */
-{ yymsp[0].minor.yy630 = JOIN_TYPE_INNER; }
+ case 467: /* join_type ::= INNER */
+{ yymsp[0].minor.yy560 = JOIN_TYPE_INNER; }
break;
- case 463: /* query_specification ::= SELECT set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */
+ case 468: /* query_specification ::= SELECT set_quantifier_opt select_list from_clause_opt where_clause_opt partition_by_clause_opt range_opt every_opt fill_opt twindow_clause_opt group_by_clause_opt having_clause_opt */
{
- yymsp[-11].minor.yy74 = createSelectStmt(pCxt, yymsp[-10].minor.yy335, yymsp[-9].minor.yy874, yymsp[-8].minor.yy74);
- yymsp[-11].minor.yy74 = addWhereClause(pCxt, yymsp[-11].minor.yy74, yymsp[-7].minor.yy74);
- yymsp[-11].minor.yy74 = addPartitionByClause(pCxt, yymsp[-11].minor.yy74, yymsp[-6].minor.yy874);
- yymsp[-11].minor.yy74 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy74, yymsp[-2].minor.yy74);
- yymsp[-11].minor.yy74 = addGroupByClause(pCxt, yymsp[-11].minor.yy74, yymsp[-1].minor.yy874);
- yymsp[-11].minor.yy74 = addHavingClause(pCxt, yymsp[-11].minor.yy74, yymsp[0].minor.yy74);
- yymsp[-11].minor.yy74 = addRangeClause(pCxt, yymsp[-11].minor.yy74, yymsp[-5].minor.yy74);
- yymsp[-11].minor.yy74 = addEveryClause(pCxt, yymsp[-11].minor.yy74, yymsp[-4].minor.yy74);
- yymsp[-11].minor.yy74 = addFillClause(pCxt, yymsp[-11].minor.yy74, yymsp[-3].minor.yy74);
+ yymsp[-11].minor.yy600 = createSelectStmt(pCxt, yymsp[-10].minor.yy841, yymsp[-9].minor.yy601, yymsp[-8].minor.yy600);
+ yymsp[-11].minor.yy600 = addWhereClause(pCxt, yymsp[-11].minor.yy600, yymsp[-7].minor.yy600);
+ yymsp[-11].minor.yy600 = addPartitionByClause(pCxt, yymsp[-11].minor.yy600, yymsp[-6].minor.yy601);
+ yymsp[-11].minor.yy600 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy600, yymsp[-2].minor.yy600);
+ yymsp[-11].minor.yy600 = addGroupByClause(pCxt, yymsp[-11].minor.yy600, yymsp[-1].minor.yy601);
+ yymsp[-11].minor.yy600 = addHavingClause(pCxt, yymsp[-11].minor.yy600, yymsp[0].minor.yy600);
+ yymsp[-11].minor.yy600 = addRangeClause(pCxt, yymsp[-11].minor.yy600, yymsp[-5].minor.yy600);
+ yymsp[-11].minor.yy600 = addEveryClause(pCxt, yymsp[-11].minor.yy600, yymsp[-4].minor.yy600);
+ yymsp[-11].minor.yy600 = addFillClause(pCxt, yymsp[-11].minor.yy600, yymsp[-3].minor.yy600);
}
break;
- case 466: /* set_quantifier_opt ::= ALL */
-{ yymsp[0].minor.yy335 = false; }
+ case 471: /* set_quantifier_opt ::= ALL */
+{ yymsp[0].minor.yy841 = false; }
break;
- case 469: /* select_item ::= NK_STAR */
-{ yylhsminor.yy74 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); }
- yymsp[0].minor.yy74 = yylhsminor.yy74;
+ case 474: /* select_item ::= NK_STAR */
+{ yylhsminor.yy600 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); }
+ yymsp[0].minor.yy600 = yylhsminor.yy600;
break;
- case 471: /* select_item ::= common_expression column_alias */
- case 481: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==481);
-{ yylhsminor.yy74 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy74), &yymsp[0].minor.yy317); }
- yymsp[-1].minor.yy74 = yylhsminor.yy74;
+ case 476: /* select_item ::= common_expression column_alias */
+ case 486: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==486);
+{ yylhsminor.yy600 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy600), &yymsp[0].minor.yy77); }
+ yymsp[-1].minor.yy600 = yylhsminor.yy600;
break;
- case 472: /* select_item ::= common_expression AS column_alias */
- case 482: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==482);
-{ yylhsminor.yy74 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), &yymsp[0].minor.yy317); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 477: /* select_item ::= common_expression AS column_alias */
+ case 487: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==487);
+{ yylhsminor.yy600 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), &yymsp[0].minor.yy77); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 477: /* partition_by_clause_opt ::= PARTITION BY partition_list */
- case 500: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==500);
- case 519: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==519);
-{ yymsp[-2].minor.yy874 = yymsp[0].minor.yy874; }
+ case 482: /* partition_by_clause_opt ::= PARTITION BY partition_list */
+ case 505: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==505);
+ case 524: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==524);
+{ yymsp[-2].minor.yy601 = yymsp[0].minor.yy601; }
break;
- case 484: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
-{ yymsp[-5].minor.yy74 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), releaseRawExprNode(pCxt, yymsp[-1].minor.yy74)); }
+ case 489: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */
+{ yymsp[-5].minor.yy600 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), releaseRawExprNode(pCxt, yymsp[-1].minor.yy600)); }
break;
- case 485: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */
-{ yymsp[-3].minor.yy74 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy74)); }
+ case 490: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */
+{ yymsp[-3].minor.yy600 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy600)); }
break;
- case 486: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
-{ yymsp[-5].minor.yy74 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), NULL, yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 491: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */
+{ yymsp[-5].minor.yy600 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), NULL, yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 487: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
-{ yymsp[-7].minor.yy74 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy74), releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), yymsp[-1].minor.yy74, yymsp[0].minor.yy74); }
+ case 492: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */
+{ yymsp[-7].minor.yy600 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy600), releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), yymsp[-1].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 488: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */
-{ yymsp[-6].minor.yy74 = createEventWindowNode(pCxt, yymsp[-3].minor.yy74, yymsp[0].minor.yy74); }
+ case 493: /* twindow_clause_opt ::= EVENT_WINDOW START WITH search_condition END WITH search_condition */
+{ yymsp[-6].minor.yy600 = createEventWindowNode(pCxt, yymsp[-3].minor.yy600, yymsp[0].minor.yy600); }
break;
- case 492: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */
-{ yymsp[-3].minor.yy74 = createFillNode(pCxt, yymsp[-1].minor.yy828, NULL); }
+ case 497: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */
+{ yymsp[-3].minor.yy600 = createFillNode(pCxt, yymsp[-1].minor.yy798, NULL); }
break;
- case 493: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
-{ yymsp[-5].minor.yy74 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy874)); }
+ case 498: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */
+{ yymsp[-5].minor.yy600 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy601)); }
break;
- case 494: /* fill_mode ::= NONE */
-{ yymsp[0].minor.yy828 = FILL_MODE_NONE; }
+ case 499: /* fill_mode ::= NONE */
+{ yymsp[0].minor.yy798 = FILL_MODE_NONE; }
break;
- case 495: /* fill_mode ::= PREV */
-{ yymsp[0].minor.yy828 = FILL_MODE_PREV; }
+ case 500: /* fill_mode ::= PREV */
+{ yymsp[0].minor.yy798 = FILL_MODE_PREV; }
break;
- case 496: /* fill_mode ::= NULL */
-{ yymsp[0].minor.yy828 = FILL_MODE_NULL; }
+ case 501: /* fill_mode ::= NULL */
+{ yymsp[0].minor.yy798 = FILL_MODE_NULL; }
break;
- case 497: /* fill_mode ::= LINEAR */
-{ yymsp[0].minor.yy828 = FILL_MODE_LINEAR; }
+ case 502: /* fill_mode ::= LINEAR */
+{ yymsp[0].minor.yy798 = FILL_MODE_LINEAR; }
break;
- case 498: /* fill_mode ::= NEXT */
-{ yymsp[0].minor.yy828 = FILL_MODE_NEXT; }
+ case 503: /* fill_mode ::= NEXT */
+{ yymsp[0].minor.yy798 = FILL_MODE_NEXT; }
break;
- case 501: /* group_by_list ::= expr_or_subquery */
-{ yylhsminor.yy874 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy74))); }
- yymsp[0].minor.yy874 = yylhsminor.yy874;
+ case 506: /* group_by_list ::= expr_or_subquery */
+{ yylhsminor.yy601 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy600))); }
+ yymsp[0].minor.yy601 = yylhsminor.yy601;
break;
- case 502: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */
-{ yylhsminor.yy874 = addNodeToList(pCxt, yymsp[-2].minor.yy874, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy74))); }
- yymsp[-2].minor.yy874 = yylhsminor.yy874;
+ case 507: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */
+{ yylhsminor.yy601 = addNodeToList(pCxt, yymsp[-2].minor.yy601, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy600))); }
+ yymsp[-2].minor.yy601 = yylhsminor.yy601;
break;
- case 506: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */
-{ yymsp[-5].minor.yy74 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy74), releaseRawExprNode(pCxt, yymsp[-1].minor.yy74)); }
+ case 511: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */
+{ yymsp[-5].minor.yy600 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy600), releaseRawExprNode(pCxt, yymsp[-1].minor.yy600)); }
break;
- case 509: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */
+ case 514: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */
{
- yylhsminor.yy74 = addOrderByClause(pCxt, yymsp[-3].minor.yy74, yymsp[-2].minor.yy874);
- yylhsminor.yy74 = addSlimitClause(pCxt, yylhsminor.yy74, yymsp[-1].minor.yy74);
- yylhsminor.yy74 = addLimitClause(pCxt, yylhsminor.yy74, yymsp[0].minor.yy74);
+ yylhsminor.yy600 = addOrderByClause(pCxt, yymsp[-3].minor.yy600, yymsp[-2].minor.yy601);
+ yylhsminor.yy600 = addSlimitClause(pCxt, yylhsminor.yy600, yymsp[-1].minor.yy600);
+ yylhsminor.yy600 = addLimitClause(pCxt, yylhsminor.yy600, yymsp[0].minor.yy600);
}
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 512: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */
-{ yylhsminor.yy74 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy74, yymsp[0].minor.yy74); }
- yymsp[-3].minor.yy74 = yylhsminor.yy74;
+ case 517: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */
+{ yylhsminor.yy600 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy600, yymsp[0].minor.yy600); }
+ yymsp[-3].minor.yy600 = yylhsminor.yy600;
break;
- case 513: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */
-{ yylhsminor.yy74 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy74, yymsp[0].minor.yy74); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 518: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */
+{ yylhsminor.yy600 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy600, yymsp[0].minor.yy600); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 521: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */
- case 525: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==525);
-{ yymsp[-1].minor.yy74 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); }
+ case 526: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */
+ case 530: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==530);
+{ yymsp[-1].minor.yy600 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); }
break;
- case 522: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
- case 526: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==526);
-{ yymsp[-3].minor.yy74 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); }
+ case 527: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */
+ case 531: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==531);
+{ yymsp[-3].minor.yy600 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); }
break;
- case 523: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
- case 527: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==527);
-{ yymsp[-3].minor.yy74 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); }
+ case 528: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */
+ case 532: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==532);
+{ yymsp[-3].minor.yy600 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); }
break;
- case 528: /* subquery ::= NK_LP query_expression NK_RP */
-{ yylhsminor.yy74 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy74); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 533: /* subquery ::= NK_LP query_expression NK_RP */
+{ yylhsminor.yy600 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy600); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 533: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */
-{ yylhsminor.yy74 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy74), yymsp[-1].minor.yy326, yymsp[0].minor.yy109); }
- yymsp[-2].minor.yy74 = yylhsminor.yy74;
+ case 538: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */
+{ yylhsminor.yy600 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy600), yymsp[-1].minor.yy32, yymsp[0].minor.yy385); }
+ yymsp[-2].minor.yy600 = yylhsminor.yy600;
break;
- case 534: /* ordering_specification_opt ::= */
-{ yymsp[1].minor.yy326 = ORDER_ASC; }
+ case 539: /* ordering_specification_opt ::= */
+{ yymsp[1].minor.yy32 = ORDER_ASC; }
break;
- case 535: /* ordering_specification_opt ::= ASC */
-{ yymsp[0].minor.yy326 = ORDER_ASC; }
+ case 540: /* ordering_specification_opt ::= ASC */
+{ yymsp[0].minor.yy32 = ORDER_ASC; }
break;
- case 536: /* ordering_specification_opt ::= DESC */
-{ yymsp[0].minor.yy326 = ORDER_DESC; }
+ case 541: /* ordering_specification_opt ::= DESC */
+{ yymsp[0].minor.yy32 = ORDER_DESC; }
break;
- case 537: /* null_ordering_opt ::= */
-{ yymsp[1].minor.yy109 = NULL_ORDER_DEFAULT; }
+ case 542: /* null_ordering_opt ::= */
+{ yymsp[1].minor.yy385 = NULL_ORDER_DEFAULT; }
break;
- case 538: /* null_ordering_opt ::= NULLS FIRST */
-{ yymsp[-1].minor.yy109 = NULL_ORDER_FIRST; }
+ case 543: /* null_ordering_opt ::= NULLS FIRST */
+{ yymsp[-1].minor.yy385 = NULL_ORDER_FIRST; }
break;
- case 539: /* null_ordering_opt ::= NULLS LAST */
-{ yymsp[-1].minor.yy109 = NULL_ORDER_LAST; }
+ case 544: /* null_ordering_opt ::= NULLS LAST */
+{ yymsp[-1].minor.yy385 = NULL_ORDER_LAST; }
break;
default:
break;
/********** End reduce actions ************************************************/
};
- assert( yyrulenopRoot), QUERY_NODE_VNODE_MODIF_STMT);
- SVnodeModifOpStmt* pStmt = (SVnodeModifOpStmt*)pQuery->pRoot;
+ ASSERT_EQ(nodeType(pQuery->pRoot), QUERY_NODE_VNODE_MODIFY_STMT);
+ SVnodeModifyOpStmt* pStmt = (SVnodeModifyOpStmt*)pQuery->pRoot;
ASSERT_EQ(pStmt->sqlNodeType, QUERY_NODE_ALTER_TABLE_STMT);
ASSERT_NE(pStmt->pDataBlocks, nullptr);
diff --git a/source/libs/parser/test/parInitialCTest.cpp b/source/libs/parser/test/parInitialCTest.cpp
index 334d12b95f..17d02c1cce 100644
--- a/source/libs/parser/test/parInitialCTest.cpp
+++ b/source/libs/parser/test/parInitialCTest.cpp
@@ -48,7 +48,7 @@ TEST_F(ParserInitialCTest, createAccount) {
* | PRECISION {'ms' | 'us' | 'ns'}
* | REPLICA value
* | RETENTIONS ingestion_duration:keep_duration ...
- * | STRICT {'off' | 'on'}
+ * | STRICT {'off' | 'on'} // not support
* | WAL_LEVEL value
* | VGROUPS value
* | SINGLE_STABLE {0 | 1}
@@ -216,7 +216,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
addDbRetentionFunc(15 * MILLISECOND_PER_SECOND, 7 * MILLISECOND_PER_DAY, TIME_UNIT_SECOND, TIME_UNIT_DAY);
addDbRetentionFunc(1 * MILLISECOND_PER_MINUTE, 21 * MILLISECOND_PER_DAY, TIME_UNIT_MINUTE, TIME_UNIT_DAY);
addDbRetentionFunc(15 * MILLISECOND_PER_MINUTE, 500 * MILLISECOND_PER_DAY, TIME_UNIT_MINUTE, TIME_UNIT_DAY);
- setDbStrictaFunc(1);
+ // setDbStrictaFunc(1);
setDbWalLevelFunc(2);
setDbVgroupsFunc(100);
setDbSingleStableFunc(1);
@@ -244,7 +244,7 @@ TEST_F(ParserInitialCTest, createDatabase) {
"PRECISION 'ns' "
"REPLICA 3 "
"RETENTIONS 15s:7d,1m:21d,15m:500d "
- "STRICT 'on' "
+ // "STRICT 'on' "
"WAL_LEVEL 2 "
"VGROUPS 100 "
"SINGLE_STABLE 1 "
diff --git a/source/libs/planner/src/planLogicCreater.c b/source/libs/planner/src/planLogicCreater.c
index 205c70e0df..4e1e98c9c0 100644
--- a/source/libs/planner/src/planLogicCreater.c
+++ b/source/libs/planner/src/planLogicCreater.c
@@ -953,6 +953,10 @@ static int32_t createFillLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
code = TSDB_CODE_OUT_OF_MEMORY;
}
+ if (TSDB_CODE_SUCCESS == code && 0 == LIST_LENGTH(pFill->node.pTargets)) {
+ code = createColumnByRewriteExpr(pFill->pWStartTs, &pFill->node.pTargets);
+ }
+
if (TSDB_CODE_SUCCESS == code) {
*pLogicNode = (SLogicNode*)pFill;
} else {
@@ -1382,7 +1386,7 @@ static int32_t createSetOperatorLogicNode(SLogicPlanContext* pCxt, SSetOperator*
static int32_t getMsgType(ENodeType sqlType) {
switch (sqlType) {
case QUERY_NODE_CREATE_TABLE_STMT:
- case QUERY_NODE_CREATE_MULTI_TABLE_STMT:
+ case QUERY_NODE_CREATE_MULTI_TABLES_STMT:
return TDMT_VND_CREATE_TABLE;
case QUERY_NODE_DROP_TABLE_STMT:
return TDMT_VND_DROP_TABLE;
@@ -1396,7 +1400,7 @@ static int32_t getMsgType(ENodeType sqlType) {
return TDMT_VND_SUBMIT;
}
-static int32_t createVnodeModifLogicNode(SLogicPlanContext* pCxt, SVnodeModifOpStmt* pStmt, SLogicNode** pLogicNode) {
+static int32_t createVnodeModifLogicNode(SLogicPlanContext* pCxt, SVnodeModifyOpStmt* pStmt, SLogicNode** pLogicNode) {
SVnodeModifyLogicNode* pModif = (SVnodeModifyLogicNode*)nodesMakeNode(QUERY_NODE_LOGIC_PLAN_VNODE_MODIFY);
if (NULL == pModif) {
return TSDB_CODE_OUT_OF_MEMORY;
@@ -1580,8 +1584,8 @@ static int32_t createQueryLogicNode(SLogicPlanContext* pCxt, SNode* pStmt, SLogi
switch (nodeType(pStmt)) {
case QUERY_NODE_SELECT_STMT:
return createSelectLogicNode(pCxt, (SSelectStmt*)pStmt, pLogicNode);
- case QUERY_NODE_VNODE_MODIF_STMT:
- return createVnodeModifLogicNode(pCxt, (SVnodeModifOpStmt*)pStmt, pLogicNode);
+ case QUERY_NODE_VNODE_MODIFY_STMT:
+ return createVnodeModifLogicNode(pCxt, (SVnodeModifyOpStmt*)pStmt, pLogicNode);
case QUERY_NODE_EXPLAIN_STMT:
return createQueryLogicNode(pCxt, ((SExplainStmt*)pStmt)->pQuery, pLogicNode);
case QUERY_NODE_SET_OPERATOR:
diff --git a/source/libs/planner/test/planBasicTest.cpp b/source/libs/planner/test/planBasicTest.cpp
index 150df76416..10ab71ab0e 100644
--- a/source/libs/planner/test/planBasicTest.cpp
+++ b/source/libs/planner/test/planBasicTest.cpp
@@ -104,6 +104,8 @@ TEST_F(PlanBasicTest, interpFunc) {
run("SELECT _IROWTS, INTERP(c1) FROM t1 RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
+ run("SELECT _IROWTS, INTERP(c1), _ISFILLED FROM t1 RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
+
run("SELECT TBNAME, _IROWTS, INTERP(c1) FROM t1 PARTITION BY TBNAME "
"RANGE('2017-7-14 18:00:00', '2017-7-14 19:00:00') EVERY(5s) FILL(LINEAR)");
}
diff --git a/source/libs/qworker/inc/qwInt.h b/source/libs/qworker/inc/qwInt.h
index 9d8fad6fea..eb6091d605 100644
--- a/source/libs/qworker/inc/qwInt.h
+++ b/source/libs/qworker/inc/qwInt.h
@@ -31,7 +31,7 @@ extern "C" {
#define QW_DEFAULT_SCHEDULER_NUMBER 100
#define QW_DEFAULT_TASK_NUMBER 10000
-#define QW_DEFAULT_SCH_TASK_NUMBER 3000
+#define QW_DEFAULT_SCH_TASK_NUMBER 500
#define QW_DEFAULT_SHORT_RUN_TIMES 2
#define QW_DEFAULT_HEARTBEAT_MSEC 5000
#define QW_SCH_TIMEOUT_MSEC 180000
diff --git a/source/libs/qworker/src/qwUtil.c b/source/libs/qworker/src/qwUtil.c
index f3d073634d..fdd2775daa 100644
--- a/source/libs/qworker/src/qwUtil.c
+++ b/source/libs/qworker/src/qwUtil.c
@@ -74,6 +74,8 @@ int32_t qwAddSchedulerImpl(SQWorker *mgmt, uint64_t sId, int32_t rwType) {
SQWSchStatus newSch = {0};
newSch.tasksHash =
taosHashInit(mgmt->cfg.maxSchTaskNum, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_NO_LOCK);
+ newSch.hbBrokenTs = taosGetTimestampMs();
+
if (NULL == newSch.tasksHash) {
QW_SCH_ELOG("taosHashInit %d failed", mgmt->cfg.maxSchTaskNum);
QW_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c
index c23b461b47..b6de9383d7 100644
--- a/source/libs/scheduler/src/schRemote.c
+++ b/source/libs/scheduler/src/schRemote.c
@@ -456,6 +456,7 @@ int32_t schHandleLinkBrokenCallback(void *param, SDataBuf *pMsg, int32_t code) {
if (head->isHbParam) {
taosMemoryFree(pMsg->pData);
+ taosMemoryFree(pMsg->pEpSet);
SSchHbCallbackParam *hbParam = (SSchHbCallbackParam *)param;
SSchTrans trans = {.pTrans = hbParam->pTrans, .pHandle = NULL};
diff --git a/source/libs/scheduler/src/schStatus.c b/source/libs/scheduler/src/schStatus.c
index 66d58c95d1..4c16a81a05 100644
--- a/source/libs/scheduler/src/schStatus.c
+++ b/source/libs/scheduler/src/schStatus.c
@@ -64,7 +64,7 @@ _return:
int32_t schHandleOpBeginEvent(int64_t jobId, SSchJob** job, SCH_OP_TYPE type, SSchedulerReq* pReq) {
SSchJob* pJob = schAcquireJob(jobId);
if (NULL == pJob) {
- qWarn("Acquire sch job failed, may be dropped, jobId:0x%" PRIx64, jobId);
+ qDebug("Acquire sch job failed, may be dropped, jobId:0x%" PRIx64, jobId);
SCH_ERR_RET(TSDB_CODE_SCH_STATUS_ERROR);
}
diff --git a/source/libs/scheduler/src/scheduler.c b/source/libs/scheduler/src/scheduler.c
index 1926c26dc9..7cd5e957b6 100644
--- a/source/libs/scheduler/src/scheduler.c
+++ b/source/libs/scheduler/src/scheduler.c
@@ -157,7 +157,7 @@ void schedulerFreeJob(int64_t *jobId, int32_t errCode) {
SSchJob *pJob = schAcquireJob(*jobId);
if (NULL == pJob) {
- qWarn("Acquire sch job failed, may be dropped, jobId:0x%" PRIx64, *jobId);
+ qDebug("Acquire sch job failed, may be dropped, jobId:0x%" PRIx64, *jobId);
return;
}
diff --git a/source/libs/stream/src/streamExec.c b/source/libs/stream/src/streamExec.c
index 20608a6cf3..b5bceb9b94 100644
--- a/source/libs/stream/src/streamExec.c
+++ b/source/libs/stream/src/streamExec.c
@@ -121,7 +121,11 @@ int32_t streamScanExec(SStreamTask* pTask, int32_t batchSz) {
block.info.childId = pTask->selfChildId;
taosArrayPush(pRes, &block);
- if (++batchCnt >= batchSz) break;
+ batchCnt++;
+
+ qDebug("task %d scan exec block num %d, block limit %d", pTask->taskId, batchCnt, batchSz);
+
+ if (batchCnt >= batchSz) break;
}
if (taosArrayGetSize(pRes) == 0) {
taosArrayDestroy(pRes);
@@ -139,6 +143,7 @@ int32_t streamScanExec(SStreamTask* pTask, int32_t batchSz) {
streamTaskOutput(pTask, qRes);
if (pTask->outputType == TASK_OUTPUT__FIXED_DISPATCH || pTask->outputType == TASK_OUTPUT__SHUFFLE_DISPATCH) {
+ qDebug("task %d scan exec dispatch block num %d", pTask->taskId, batchCnt);
streamDispatch(pTask);
}
if (finished) break;
diff --git a/source/libs/stream/src/streamState.c b/source/libs/stream/src/streamState.c
index af1d738de0..cf388da92c 100644
--- a/source/libs/stream/src/streamState.c
+++ b/source/libs/stream/src/streamState.c
@@ -159,6 +159,11 @@ SStreamState* streamStateOpen(char* path, SStreamTask* pTask, bool specPath, int
goto _err;
}
+ if (tdbTbOpen("partag.state.db", sizeof(int64_t), -1, NULL, pState->pTdbState->db, &pState->pTdbState->pParTagDb, 0) <
+ 0) {
+ goto _err;
+ }
+
if (streamStateBegin(pState) < 0) {
goto _err;
}
@@ -173,6 +178,7 @@ _err:
tdbTbClose(pState->pTdbState->pFillStateDb);
tdbTbClose(pState->pTdbState->pSessionStateDb);
tdbTbClose(pState->pTdbState->pParNameDb);
+ tdbTbClose(pState->pTdbState->pParTagDb);
tdbClose(pState->pTdbState->db);
streamStateDestroy(pState);
return NULL;
@@ -186,6 +192,7 @@ void streamStateClose(SStreamState* pState) {
tdbTbClose(pState->pTdbState->pFillStateDb);
tdbTbClose(pState->pTdbState->pSessionStateDb);
tdbTbClose(pState->pTdbState->pParNameDb);
+ tdbTbClose(pState->pTdbState->pParTagDb);
tdbClose(pState->pTdbState->db);
streamStateDestroy(pState);
@@ -821,10 +828,17 @@ _end:
return res;
}
+int32_t streamStatePutParTag(SStreamState* pState, int64_t groupId, const void* tag, int32_t tagLen) {
+ return tdbTbUpsert(pState->pTdbState->pParTagDb, &groupId, sizeof(int64_t), tag, tagLen, pState->pTdbState->txn);
+}
+
+int32_t streamStateGetParTag(SStreamState* pState, int64_t groupId, void** tagVal, int32_t* tagLen) {
+ return tdbTbGet(pState->pTdbState->pParTagDb, &groupId, sizeof(int64_t), tagVal, tagLen);
+}
+
int32_t streamStatePutParName(SStreamState* pState, int64_t groupId, const char tbname[TSDB_TABLE_NAME_LEN]) {
- tdbTbUpsert(pState->pTdbState->pParNameDb, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN,
- pState->pTdbState->txn);
- return 0;
+ return tdbTbUpsert(pState->pTdbState->pParNameDb, &groupId, sizeof(int64_t), tbname, TSDB_TABLE_NAME_LEN,
+ pState->pTdbState->txn);
}
int32_t streamStateGetParName(SStreamState* pState, int64_t groupId, void** pVal) {
diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h
index dee0bf95c7..a5524ffbde 100644
--- a/source/libs/sync/inc/syncInt.h
+++ b/source/libs/sync/inc/syncInt.h
@@ -215,7 +215,7 @@ int32_t syncNodeStart(SSyncNode* pSyncNode);
int32_t syncNodeStartStandBy(SSyncNode* pSyncNode);
void syncNodeClose(SSyncNode* pSyncNode);
void syncNodePreClose(SSyncNode* pSyncNode);
-int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak);
+int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_t *seq);
int32_t syncNodeRestore(SSyncNode* pSyncNode);
void syncHbTimerDataFree(SSyncHbTimerData* pData);
diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c
index 6fabab18cb..6a545424fc 100644
--- a/source/libs/sync/src/syncMain.c
+++ b/source/libs/sync/src/syncMain.c
@@ -151,7 +151,7 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) {
}
syncNodeStartHeartbeatTimer(pSyncNode);
- //syncNodeReplicate(pSyncNode);
+ // syncNodeReplicate(pSyncNode);
}
syncNodeRelease(pSyncNode);
@@ -218,6 +218,26 @@ int32_t syncLeaderTransfer(int64_t rid) {
return ret;
}
+int32_t syncSendTimeoutRsp(int64_t rid, int64_t seq) {
+ SSyncNode* pNode = syncNodeAcquire(rid);
+ if (pNode == NULL) return -1;
+
+ SRpcMsg rpcMsg = {0};
+ int32_t ret = syncRespMgrGetAndDel(pNode->pSyncRespMgr, seq, &rpcMsg.info);
+ rpcMsg.code = TSDB_CODE_SYN_TIMEOUT;
+
+ syncNodeRelease(pNode);
+ if (ret == 1) {
+ sInfo("send timeout response, seq:%" PRId64 " handle:%p ahandle:%p", seq, rpcMsg.info.handle,
+ rpcMsg.info.ahandle);
+ rpcSendResponse(&rpcMsg);
+ return 0;
+ } else {
+ sError("no message handle to send timeout response, seq:%" PRId64, seq);
+ return -1;
+ }
+}
+
SyncIndex syncMinMatchIndex(SSyncNode* pSyncNode) {
SyncIndex minMatchIndex = SYNC_INDEX_INVALID;
@@ -538,7 +558,7 @@ int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) {
pMsg->newLeaderId.vgId = pSyncNode->vgId;
pMsg->newNodeInfo = newLeader;
- int32_t ret = syncNodePropose(pSyncNode, &rpcMsg, false);
+ int32_t ret = syncNodePropose(pSyncNode, &rpcMsg, false, NULL);
rpcFreeCont(rpcMsg.pCont);
return ret;
}
@@ -670,19 +690,19 @@ void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) {
syncNodeRelease(pSyncNode);
}
-int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak) {
+int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak, int64_t* seq) {
SSyncNode* pSyncNode = syncNodeAcquire(rid);
if (pSyncNode == NULL) {
sError("sync propose error");
return -1;
}
- int32_t ret = syncNodePropose(pSyncNode, pMsg, isWeak);
+ int32_t ret = syncNodePropose(pSyncNode, pMsg, isWeak, seq);
syncNodeRelease(pSyncNode);
return ret;
}
-int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak) {
+int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak, int64_t* seq) {
if (pSyncNode->state != TAOS_SYNC_STATE_LEADER) {
terrno = TSDB_CODE_SYN_NOT_LEADER;
sNError(pSyncNode, "sync propose not leader, %s, type:%s", syncStr(pSyncNode->state), TMSG_INFO(pMsg->msgType));
@@ -739,6 +759,7 @@ int32_t syncNodePropose(SSyncNode* pSyncNode, SRpcMsg* pMsg, bool isWeak) {
(void)syncRespMgrDel(pSyncNode->pSyncRespMgr, seqNum);
}
+ if (seq != NULL) *seq = seqNum;
return code;
}
}
diff --git a/source/libs/sync/src/syncPipeline.c b/source/libs/sync/src/syncPipeline.c
index 7bd8d75dd1..d875d3ca09 100644
--- a/source/libs/sync/src/syncPipeline.c
+++ b/source/libs/sync/src/syncPipeline.c
@@ -275,6 +275,8 @@ int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEnt
SyncIndex index = pEntry->index;
SyncIndex prevIndex = pEntry->index - 1;
SyncTerm lastMatchTerm = syncLogBufferGetLastMatchTerm(pBuf);
+ SSyncRaftEntry* pExist = NULL;
+ bool inBuf = true;
if (index <= pBuf->commitIndex) {
sTrace("vgId:%d, already committed. index: %" PRId64 ", term: %" PRId64 ". log buffer: [%" PRId64 " %" PRId64
@@ -306,10 +308,9 @@ int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEnt
}
// check current in buffer
- SSyncRaftEntry* pExist = pBuf->entries[index % pBuf->size].pItem;
+ pExist = syncLogBufferGetOneEntry(pBuf, pNode, index, &inBuf);
if (pExist != NULL) {
ASSERT(pEntry->index == pExist->index);
-
if (pEntry->term != pExist->term) {
(void)syncLogBufferRollback(pBuf, pNode, index);
} else {
@@ -317,14 +318,15 @@ int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEnt
" %" PRId64 " %" PRId64 ", %" PRId64 ")",
pNode->vgId, pEntry->index, pEntry->term, pBuf->startIndex, pBuf->commitIndex, pBuf->matchIndex,
pBuf->endIndex);
- SyncTerm existPrevTerm = pBuf->entries[index % pBuf->size].prevLogTerm;
- ASSERT(pEntry->term == pExist->term && prevTerm == existPrevTerm);
+ SyncTerm existPrevTerm = syncLogReplMgrGetPrevLogTerm(NULL, pNode, index);
+ ASSERT(pEntry->term == pExist->term && (pEntry->index > pBuf->matchIndex || prevTerm == existPrevTerm));
ret = 0;
goto _out;
}
}
// update
+ ASSERT(pBuf->entries[index % pBuf->size].pItem == NULL);
SSyncLogBufEntry tmp = {.pItem = pEntry, .prevLogIndex = prevIndex, .prevLogTerm = prevTerm};
pEntry = NULL;
pBuf->entries[index % pBuf->size] = tmp;
@@ -337,6 +339,10 @@ int32_t syncLogBufferAccept(SSyncLogBuffer* pBuf, SSyncNode* pNode, SSyncRaftEnt
_out:
syncEntryDestroy(pEntry);
+ if (!inBuf) {
+ syncEntryDestroy(pExist);
+ pExist = NULL;
+ }
syncLogBufferValidate(pBuf);
taosThreadMutexUnlock(&pBuf->mutex);
return ret;
@@ -594,6 +600,7 @@ int32_t syncLogReplMgrRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
int count = 0;
int64_t firstIndex = -1;
SyncTerm term = -1;
+ int64_t batchSize = TMAX(1, pMgr->size >> (4 + pMgr->retryBackoff));
for (SyncIndex index = pMgr->startIndex; index < pMgr->endIndex; index++) {
int64_t pos = index % pMgr->size;
@@ -620,7 +627,10 @@ int32_t syncLogReplMgrRetryOnNeed(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
retried = true;
if (firstIndex == -1) firstIndex = index;
- count++;
+
+ if (batchSize <= count++) {
+ break;
+ }
}
ret = 0;
@@ -800,8 +810,9 @@ int32_t syncLogReplMgrReplicateProbeOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode
int32_t syncLogReplMgrReplicateAttemptedOnce(SSyncLogReplMgr* pMgr, SSyncNode* pNode) {
ASSERT(pMgr->restored);
+
SRaftId* pDestId = &pNode->replicasId[pMgr->peerId];
- int32_t batchSize = TMAX(1, pMgr->size / 20);
+ int32_t batchSize = TMAX(1, pMgr->size >> (4 + pMgr->retryBackoff));
int32_t count = 0;
int64_t nowMs = taosGetMonoTimestampMs();
int64_t limit = pMgr->size >> 1;
@@ -1003,6 +1014,16 @@ int32_t syncLogBufferRollback(SSyncLogBuffer* pBuf, SSyncNode* pNode, SyncIndex
lastVer = pNode->pLogStore->syncLogLastIndex(pNode->pLogStore);
ASSERT(toIndex == lastVer + 1);
+ // refill buffer on need
+ if (toIndex <= pBuf->startIndex) {
+ int32_t ret = syncLogBufferInitWithoutLock(pBuf, pNode);
+ if (ret < 0) {
+ sError("vgId:%d, failed to refill sync log buffer since %s", pNode->vgId, terrstr());
+ return -1;
+ }
+ }
+
+ ASSERT(pBuf->endIndex == toIndex);
syncLogBufferValidate(pBuf);
return 0;
}
diff --git a/source/libs/sync/src/syncRespMgr.c b/source/libs/sync/src/syncRespMgr.c
index 049b02d73e..79a38cad7a 100644
--- a/source/libs/sync/src/syncRespMgr.c
+++ b/source/libs/sync/src/syncRespMgr.c
@@ -35,11 +35,16 @@ SSyncRespMgr *syncRespMgrCreate(void *data, int64_t ttl) {
pObj->seqNum = 0;
taosThreadMutexInit(&(pObj->mutex), NULL);
+ SSyncNode *pNode = pObj->data;
+ sTrace("vgId:%d, create resp manager", pNode->vgId);
return pObj;
}
void syncRespMgrDestroy(SSyncRespMgr *pObj) {
if (pObj != NULL) {
+ SSyncNode *pNode = pObj->data;
+ sTrace("vgId:%d, destroy resp manager", pNode->vgId);
+
taosThreadMutexLock(&pObj->mutex);
taosHashCleanup(pObj->pRespHash);
taosThreadMutexUnlock(&pObj->mutex);
@@ -81,6 +86,8 @@ int32_t syncRespMgrGet(SSyncRespMgr *pObj, uint64_t seq, SRespStub *pStub) {
taosThreadMutexUnlock(&pObj->mutex);
return 1; // get one object
+ } else {
+ sNError(pObj->data, "get message handle, no object of seq:%" PRIu64, seq);
}
taosThreadMutexUnlock(&pObj->mutex);
@@ -99,6 +106,8 @@ int32_t syncRespMgrGetAndDel(SSyncRespMgr *pObj, uint64_t seq, SRpcHandleInfo *p
taosThreadMutexUnlock(&pObj->mutex);
return 1; // get one object
+ } else {
+ sNError(pObj->data, "get-and-del message handle, no object of seq:%" PRIu64, seq);
}
taosThreadMutexUnlock(&pObj->mutex);
@@ -114,7 +123,7 @@ static void syncRespCleanByTTL(SSyncRespMgr *pObj, int64_t ttl, bool rsp) {
SArray *delIndexArray = taosArrayInit(4, sizeof(uint64_t));
if (delIndexArray == NULL) return;
- sDebug("vgId:%d, resp mgr begin clean by ttl", pSyncNode->vgId);
+ sDebug("vgId:%d, resp manager begin clean by ttl", pSyncNode->vgId);
while (pStub) {
size_t len;
void *key = taosHashGetKey(pStub, &len);
@@ -143,34 +152,39 @@ static void syncRespCleanByTTL(SSyncRespMgr *pObj, int64_t ttl, bool rsp) {
// TODO: and make rpcMsg body, call commit cb
// pSyncNode->pFsm->FpCommitCb(pSyncNode->pFsm, &pStub->rpcMsg, cbMeta);
-
- pStub->rpcMsg.code = TSDB_CODE_SYN_NOT_LEADER;
- if (pStub->rpcMsg.info.handle != NULL) {
- tmsgSendRsp(&pStub->rpcMsg);
- }
+ SRpcMsg rpcMsg = {.info = pStub->rpcMsg.info, .code = TSDB_CODE_SYN_TIMEOUT};
+ sInfo("vgId:%d, message handle:%p expired, type:%s ahandle:%p", pSyncNode->vgId, rpcMsg.info.handle,
+ TMSG_INFO(pStub->rpcMsg.msgType), rpcMsg.info.ahandle);
+ rpcSendResponse(&rpcMsg);
}
pStub = taosHashIterate(pObj->pRespHash, pStub);
}
int32_t arraySize = taosArrayGetSize(delIndexArray);
- sDebug("vgId:%d, resp mgr end clean by ttl, sum:%d, cnt:%d, array-size:%d", pSyncNode->vgId, sum, cnt, arraySize);
+ sDebug("vgId:%d, resp manager end clean by ttl, sum:%d, cnt:%d, array-size:%d", pSyncNode->vgId, sum, cnt, arraySize);
for (int32_t i = 0; i < arraySize; ++i) {
uint64_t *pSeqNum = taosArrayGet(delIndexArray, i);
taosHashRemove(pObj->pRespHash, pSeqNum, sizeof(uint64_t));
- sDebug("vgId:%d, resp mgr clean by ttl, seq:%" PRId64 "", pSyncNode->vgId, *pSeqNum);
+ sDebug("vgId:%d, resp manager clean by ttl, seq:%" PRId64, pSyncNode->vgId, *pSeqNum);
}
taosArrayDestroy(delIndexArray);
}
void syncRespCleanRsp(SSyncRespMgr *pObj) {
+ SSyncNode *pNode = pObj->data;
+ sTrace("vgId:%d, clean all rsp", pNode->vgId);
+
taosThreadMutexLock(&pObj->mutex);
syncRespCleanByTTL(pObj, -1, true);
taosThreadMutexUnlock(&pObj->mutex);
}
void syncRespClean(SSyncRespMgr *pObj) {
+ SSyncNode *pNode = pObj->data;
+ sTrace("vgId:%d, clean rsp by ttl", pNode->vgId);
+
taosThreadMutexLock(&pObj->mutex);
syncRespCleanByTTL(pObj, pObj->ttl, false);
taosThreadMutexUnlock(&pObj->mutex);
diff --git a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
index 057f2ea6dd..7a5d0777bb 100644
--- a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
+++ b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp
@@ -337,7 +337,7 @@ int main(int argc, char** argv) {
if (alreadySend < writeRecordNum) {
SRpcMsg* pRpcMsg = createRpcMsg(alreadySend, writeRecordNum, myIndex);
- int32_t ret = syncPropose(rid, pRpcMsg, false);
+ int32_t ret = syncPropose(rid, pRpcMsg, false, NULL);
if (ret == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
sTrace("%s value%d write not leader", s, alreadySend);
} else {
diff --git a/source/libs/sync/test/syncConfigChangeTest.cpp b/source/libs/sync/test/syncConfigChangeTest.cpp
index bab3d2236f..f35a23b15b 100644
--- a/source/libs/sync/test/syncConfigChangeTest.cpp
+++ b/source/libs/sync/test/syncConfigChangeTest.cpp
@@ -249,7 +249,7 @@ int main(int argc, char** argv) {
if (alreadySend < writeRecordNum) {
SRpcMsg* pRpcMsg = createRpcMsg(alreadySend, writeRecordNum, myIndex);
- int32_t ret = syncPropose(rid, pRpcMsg, false);
+ int32_t ret = syncPropose(rid, pRpcMsg, false, NULL);
if (ret == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
sTrace("%s value%d write not leader", s, alreadySend);
} else {
diff --git a/source/libs/sync/test/syncReplicateTest.cpp b/source/libs/sync/test/syncReplicateTest.cpp
index 4a82bba15d..22132eb01f 100644
--- a/source/libs/sync/test/syncReplicateTest.cpp
+++ b/source/libs/sync/test/syncReplicateTest.cpp
@@ -189,7 +189,7 @@ int main(int argc, char** argv) {
if (alreadySend < writeRecordNum) {
SRpcMsg* pRpcMsg = createRpcMsg(alreadySend, writeRecordNum, myIndex);
- int32_t ret = syncPropose(rid, pRpcMsg, false);
+ int32_t ret = syncPropose(rid, pRpcMsg, false, NULL);
if (ret == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
sTrace("%s value%d write not leader", s, alreadySend);
} else {
diff --git a/source/libs/sync/test/syncTestTool.cpp b/source/libs/sync/test/syncTestTool.cpp
index 8c486df118..4bc2e92d0c 100644
--- a/source/libs/sync/test/syncTestTool.cpp
+++ b/source/libs/sync/test/syncTestTool.cpp
@@ -396,7 +396,7 @@ int main(int argc, char** argv) {
if (alreadySend < writeRecordNum) {
SRpcMsg* pRpcMsg = createRpcMsg(alreadySend, writeRecordNum, myIndex);
- int32_t ret = syncPropose(rid, pRpcMsg, false);
+ int32_t ret = syncPropose(rid, pRpcMsg, false, NULL);
if (ret == -1 && terrno == TSDB_CODE_SYN_NOT_LEADER) {
sTrace("%s value%d write not leader, leaderTransferWait:%d", simpleStr, alreadySend, leaderTransferWait);
} else {
diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c
index b67fe562eb..30dcb05f80 100644
--- a/source/libs/tdb/src/db/tdbPCache.c
+++ b/source/libs/tdb/src/db/tdbPCache.c
@@ -192,6 +192,28 @@ SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) {
return pPage;
}
+void tdbPCacheMarkFree(SPCache *pCache, SPage *pPage) {
+ tdbPCacheLock(pCache);
+ tdbPCacheRemovePageFromHash(pCache, pPage);
+ pPage->isFree = 1;
+ tdbPCacheUnlock(pCache);
+}
+
+static void tdbPCacheFreePage(SPCache *pCache, SPage *pPage) {
+ if (pPage->id < pCache->nPages) {
+ pPage->pFreeNext = pCache->pFree;
+ pCache->pFree = pPage;
+ pPage->isFree = 0;
+ ++pCache->nFree;
+ tdbTrace("pcache/free page %p/%d/%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id);
+ } else {
+ tdbTrace("pcache destroy page: %p/%d/%d", pPage, TDB_PAGE_PGNO(pPage), pPage->id);
+
+ tdbPCacheRemovePageFromHash(pCache, pPage);
+ tdbPageDestroy(pPage, tdbDefaultFree, NULL);
+ }
+}
+
void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn) {
i32 nRef;
@@ -209,7 +231,11 @@ void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn) {
// nRef = tdbGetPageRef(pPage);
// if (nRef == 0) {
if (pPage->isLocal) {
- tdbPCacheUnpinPage(pCache, pPage);
+ if (!pPage->isFree) {
+ tdbPCacheUnpinPage(pCache, pPage);
+ } else {
+ tdbPCacheFreePage(pCache, pPage);
+ }
} else {
if (TDB_TXN_IS_WRITE(pTxn)) {
// remove from hash
diff --git a/source/libs/tdb/src/db/tdbPage.c b/source/libs/tdb/src/db/tdbPage.c
index ac2725d8ec..50dc8e0a65 100644
--- a/source/libs/tdb/src/db/tdbPage.c
+++ b/source/libs/tdb/src/db/tdbPage.c
@@ -111,6 +111,9 @@ void tdbPageZero(SPage *pPage, u8 szAmHdr, int (*xCellSize)(const SPage *, SCell
void tdbPageInit(SPage *pPage, u8 szAmHdr, int (*xCellSize)(const SPage *, SCell *, int, TXN *, SBTree *pBt)) {
tdbTrace("page/init: %p %" PRIu8 " %p", pPage, szAmHdr, xCellSize);
pPage->pPageHdr = pPage->pData + szAmHdr;
+ if (TDB_PAGE_NCELLS(pPage) == 0) {
+ return tdbPageZero(pPage, szAmHdr, xCellSize);
+ }
pPage->pCellIdx = pPage->pPageHdr + TDB_PAGE_HDR_SIZE(pPage);
pPage->pFreeStart = pPage->pCellIdx + TDB_PAGE_OFFSET_SIZE(pPage) * TDB_PAGE_NCELLS(pPage);
pPage->pFreeEnd = pPage->pData + TDB_PAGE_CCELLS(pPage);
diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c
index 648e99d6a5..b554170b39 100644
--- a/source/libs/tdb/src/db/tdbPager.c
+++ b/source/libs/tdb/src/db/tdbPager.c
@@ -466,11 +466,19 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) {
return -1;
}
+ if (tdbOsLSeek(jfd, 0L, SEEK_SET) < 0) {
+ tdbError("failed to lseek jfd due to %s. file:%s, offset:0", strerror(errno), pPager->dbFileName);
+ terrno = TAOS_SYSTEM_ERROR(errno);
+ return -1;
+ }
+
u8 *pageBuf = tdbOsCalloc(1, pPager->pageSize);
if (pageBuf == NULL) {
return -1;
}
+ tdbDebug("tdb/abort: pager:%p,", pPager);
+
for (int pgIndex = 0; pgIndex < journalSize; ++pgIndex) {
// read pgno & the page from journal
SPgno pgno;
@@ -481,6 +489,8 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) {
return -1;
}
+ tdbTrace("tdb/abort: pgno:%d,", pgno);
+
ret = tdbOsRead(jfd, pageBuf, pPager->pageSize);
if (ret < 0) {
tdbOsFree(pageBuf);
@@ -524,6 +534,7 @@ int tdbPagerAbort(SPager *pPager, TXN *pTxn) {
tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage);
hashset_remove(pTxn->jPageSet, (void *)((long)TDB_PAGE_PGNO(pPage)));
+ tdbPCacheMarkFree(pPager->pCache, pPage);
tdbPCacheRelease(pPager->pCache, pPage, pTxn);
}
@@ -577,12 +588,12 @@ int tdbPagerFlushPage(SPager *pPager, TXN *pTxn) {
return -1;
}
- tdbTrace("tdb/flush:%p, %d/%d/%d", pPager, pPager->dbOrigSize, pPager->dbFileSize, maxPgno);
+ tdbTrace("tdb/flush:%p, pgno:%d, %d/%d/%d", pPager, pgno, pPager->dbOrigSize, pPager->dbFileSize, maxPgno);
pPager->dbOrigSize = maxPgno;
pPage->isDirty = 0;
- tdbTrace("pager/flush drop page: %p %d from dirty tree: %p", pPage, TDB_PAGE_PGNO(pPage), &pPager->rbt);
+ tdbTrace("pager/flush drop page: %p, pgno:%d, from dirty tree: %p", pPage, TDB_PAGE_PGNO(pPage), &pPager->rbt);
tRBTreeDrop(&pPager->rbt, (SRBTreeNode *)pPage);
tdbPCacheRelease(pPager->pCache, pPage, pTxn);
@@ -829,7 +840,7 @@ static int tdbPagerPWritePageToDB(SPager *pPager, SPage *pPage) {
return 0;
}
-static int tdbPagerRestore(SPager *pPager, SBTree *pBt, const char *jFileName) {
+static int tdbPagerRestore(SPager *pPager, const char *jFileName) {
int ret = 0;
SPgno journalSize = 0;
u8 *pageBuf = NULL;
@@ -907,7 +918,7 @@ static int tdbPagerRestore(SPager *pPager, SBTree *pBt, const char *jFileName) {
return 0;
}
-int tdbPagerRestoreJournals(SPager *pPager, SBTree *pBt) {
+int tdbPagerRestoreJournals(SPager *pPager) {
tdbDirEntryPtr pDirEntry;
tdbDirPtr pDir = taosOpenDir(pPager->pEnv->dbName);
if (pDir == NULL) {
@@ -918,7 +929,7 @@ int tdbPagerRestoreJournals(SPager *pPager, SBTree *pBt) {
while ((pDirEntry = tdbReadDir(pDir)) != NULL) {
char *name = tdbDirEntryBaseName(tdbGetDirEntryName(pDirEntry));
if (strncmp(TDB_MAINDB_NAME "-journal", name, 16) == 0) {
- if (tdbPagerRestore(pPager, pBt, name) < 0) {
+ if (tdbPagerRestore(pPager, name) < 0) {
tdbCloseDir(&pDir);
tdbError("failed to restore file due to %s. jFileName:%s", strerror(errno), name);
diff --git a/source/libs/tdb/src/db/tdbTable.c b/source/libs/tdb/src/db/tdbTable.c
index c5c2d6aebe..2950169979 100644
--- a/source/libs/tdb/src/db/tdbTable.c
+++ b/source/libs/tdb/src/db/tdbTable.c
@@ -107,6 +107,16 @@ int tdbTbOpen(const char *tbname, int keyLen, int valLen, tdb_cmpr_fn_t keyCmprF
ASSERT(pPager != NULL);
+ if (rollback) {
+ tdbPagerRollback(pPager);
+ } else {
+ ret = tdbPagerRestoreJournals(pPager);
+ if (ret < 0) {
+ tdbOsFree(pTb);
+ return -1;
+ }
+ }
+
// pTb->pBt
ret = tdbBtreeOpen(keyLen, valLen, pPager, tbname, pgno, keyCmprFn, pEnv, &(pTb->pBt));
if (ret < 0) {
@@ -114,16 +124,6 @@ int tdbTbOpen(const char *tbname, int keyLen, int valLen, tdb_cmpr_fn_t keyCmprF
return -1;
}
- if (rollback) {
- tdbPagerRollback(pPager);
- } else {
- ret = tdbPagerRestoreJournals(pPager, pTb->pBt);
- if (ret < 0) {
- tdbOsFree(pTb);
- return -1;
- }
- }
-
*ppTb = pTb;
return 0;
}
diff --git a/source/libs/tdb/src/inc/tdbInt.h b/source/libs/tdb/src/inc/tdbInt.h
index 055a8a1062..45e01e83f3 100644
--- a/source/libs/tdb/src/inc/tdbInt.h
+++ b/source/libs/tdb/src/inc/tdbInt.h
@@ -197,7 +197,7 @@ int tdbPagerFetchPage(SPager *pPager, SPgno *ppgno, SPage **ppPage, int (*initP
TXN *pTxn);
void tdbPagerReturnPage(SPager *pPager, SPage *pPage, TXN *pTxn);
int tdbPagerAllocPage(SPager *pPager, SPgno *ppgno);
-int tdbPagerRestoreJournals(SPager *pPager, SBTree *pBt);
+int tdbPagerRestoreJournals(SPager *pPager);
int tdbPagerRollback(SPager *pPager);
// tdbPCache.c ====================================
@@ -205,6 +205,7 @@ int tdbPagerRollback(SPager *pPager);
u8 isAnchor; \
u8 isLocal; \
u8 isDirty; \
+ u8 isFree; \
volatile i32 nRef; \
i32 id; \
SPage *pFreeNext; \
@@ -222,6 +223,7 @@ int tdbPCacheClose(SPCache *pCache);
int tdbPCacheAlter(SPCache *pCache, int32_t nPage);
SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn);
void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn);
+void tdbPCacheMarkFree(SPCache *pCache, SPage *pPage);
int tdbPCacheGetPageSize(SPCache *pCache);
// tdbPage.c ====================================
diff --git a/source/libs/transport/inc/transportInt.h b/source/libs/transport/inc/transportInt.h
index 57aba67b1d..2db4a72795 100644
--- a/source/libs/transport/inc/transportInt.h
+++ b/source/libs/transport/inc/transportInt.h
@@ -47,10 +47,8 @@ typedef struct {
char label[TSDB_LABEL_LEN];
char user[TSDB_UNI_LEN]; // meter ID
- int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
- int8_t encryption; // encrypt or not
- int32_t retryLimit; // retry limit
- int32_t retryInterval; // retry interval ms
+ int32_t compressSize; // -1: no compress, 0 : all data compressed, size: compress data if larger than size
+ int8_t encryption; // encrypt or not
int32_t retryMinInterval; // retry init interval
int32_t retryStepFactor; // retry interval factor
diff --git a/source/libs/transport/src/trans.c b/source/libs/transport/src/trans.c
index 0eac12f7c5..55c3c61b05 100644
--- a/source/libs/transport/src/trans.c
+++ b/source/libs/transport/src/trans.c
@@ -47,9 +47,11 @@ void* rpcOpen(const SRpcInit* pInit) {
}
pRpc->compressSize = pInit->compressSize;
+ if (pRpc->compressSize < 0) {
+ pRpc->compressSize = -1;
+ }
+
pRpc->encryption = pInit->encryption;
- pRpc->retryLimit = pInit->retryLimit;
- pRpc->retryInterval = pInit->retryInterval;
pRpc->retryMinInterval = pInit->retryMinInterval; // retry init interval
pRpc->retryStepFactor = pInit->retryStepFactor;
diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c
index 03e3fb52c4..d144a76eb0 100644
--- a/source/libs/transport/src/transCli.c
+++ b/source/libs/transport/src/transCli.c
@@ -599,11 +599,16 @@ static int32_t allocConnRef(SCliConn* conn, bool update) {
exh->pThrd = conn->hostThrd;
exh->refId = transAddExHandle(transGetRefMgt(), exh);
conn->refId = exh->refId;
+
+ if (conn->refId == -1) {
+ taosMemoryFree(exh);
+ }
return 0;
}
static int32_t specifyConnRef(SCliConn* conn, bool update, int64_t handle) {
if (update) {
+ transReleaseExHandle(transGetRefMgt(), conn->refId);
transRemoveExHandle(transGetRefMgt(), conn->refId);
conn->refId = -1;
}
@@ -956,7 +961,6 @@ static void cliHandleRelease(SCliMsg* pMsg, SCliThrd* pThrd) {
SCliConn* conn = exh->handle;
transReleaseExHandle(transGetRefMgt(), refId);
-
tDebug("%s conn %p start to release to inst", CONN_GET_INST_LABEL(conn), conn);
if (T_REF_VAL_GET(conn) == 2) {
@@ -1574,6 +1578,9 @@ bool cliGenRetryRule(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
pCtx->retryStep = 0;
pCtx->retryInit = true;
pCtx->retryCode = TSDB_CODE_SUCCESS;
+
+ // already retry, not use handle specified by app;
+ pMsg->msg.info.handle = 0;
}
if (-1 != pCtx->retryMaxTimeout && taosGetTimestampMs() - pCtx->retryInitTimestamp >= pCtx->retryMaxTimeout) {
@@ -1595,7 +1602,7 @@ bool cliGenRetryRule(SCliConn* pConn, STransMsg* pResp, SCliMsg* pMsg) {
} else if (code == TSDB_CODE_SYN_NOT_LEADER || code == TSDB_CODE_SYN_INTERNAL_ERROR ||
code == TSDB_CODE_SYN_PROPOSE_NOT_READY || code == TSDB_CODE_VND_STOPPED ||
code == TSDB_CODE_MNODE_NOT_FOUND || code == TSDB_CODE_APP_IS_STARTING ||
- code == TSDB_CODE_APP_IS_STOPPING) {
+ code == TSDB_CODE_APP_IS_STOPPING || code == TSDB_CODE_VND_STOPPED) {
tTrace("code str %s, contlen:%d 1", tstrerror(code), pResp->contLen);
noDelay = cliResetEpset(pCtx, pResp, true);
transFreeMsg(pResp->pCont);
diff --git a/source/libs/wal/src/walMeta.c b/source/libs/wal/src/walMeta.c
index 8e6628bb21..da8cf24627 100644
--- a/source/libs/wal/src/walMeta.c
+++ b/source/libs/wal/src/walMeta.c
@@ -25,7 +25,7 @@ bool FORCE_INLINE walLogExist(SWal* pWal, int64_t ver) {
}
bool FORCE_INLINE walIsEmpty(SWal* pWal) {
- return (pWal->vers.firstVer == -1 || pWal->vers.lastVer < pWal->vers.firstVer); // [firstVer, lastVer + 1)
+ return (pWal->vers.firstVer == -1 || pWal->vers.lastVer < pWal->vers.firstVer); // [firstVer, lastVer + 1)
}
int64_t FORCE_INLINE walGetFirstVer(SWal* pWal) { return pWal->vers.firstVer; }
@@ -49,7 +49,6 @@ static FORCE_INLINE int walBuildTmpMetaName(SWal* pWal, char* buf) {
static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx) {
int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
terrno = TSDB_CODE_SUCCESS;
- ASSERT(fileIdx >= 0 && fileIdx < sz);
SWalFileInfo* pFileInfo = taosArrayGet(pWal->fileInfoSet, fileIdx);
char fnameStr[WAL_FILE_LEN];
@@ -101,7 +100,6 @@ static FORCE_INLINE int64_t walScanLogGetLastVer(SWal* pWal, int32_t fileIdx) {
offsetBackward = offset;
}
- ASSERT(offset <= end);
readSize = end - offset;
capacity = readSize + sizeof(magic);
@@ -257,7 +255,6 @@ static void walRebuildFileInfoSet(SArray* metaLogList, SArray* actualLogList) {
SWalFileInfo* pLogInfo = taosArrayGet(actualLogList, i);
while (j < metaFileNum) {
SWalFileInfo* pMetaInfo = taosArrayGet(metaLogList, j);
- ASSERT(pMetaInfo != NULL);
if (pMetaInfo->firstVer < pLogInfo->firstVer) {
j++;
} else if (pMetaInfo->firstVer == pLogInfo->firstVer) {
@@ -385,7 +382,6 @@ int walCheckAndRepairMeta(SWal* pWal) {
taosArrayDestroy(actualLog);
int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
- ASSERT(sz == actualFileNum);
// scan and determine the lastVer
int32_t fileIdx = sz;
@@ -403,8 +399,6 @@ int walCheckAndRepairMeta(SWal* pWal) {
return -1;
}
- ASSERT(pFileInfo->firstVer >= 0);
-
if (pFileInfo->lastVer >= pFileInfo->firstVer && fileSize == pFileInfo->fileSize) {
totSize += pFileInfo->fileSize;
continue;
@@ -417,7 +411,6 @@ int walCheckAndRepairMeta(SWal* pWal) {
wError("failed to scan wal last ver since %s", terrstr());
return -1;
}
- ASSERT(pFileInfo->fileSize == 0);
// remove the empty wal log, and its idx
wInfo("vgId:%d, wal remove empty file %s", pWal->cfg.vgId, fnameStr);
taosRemoveFile(fnameStr);
@@ -477,8 +470,7 @@ int walReadLogHead(TdFilePtr pLogFile, int64_t offset, SWalCkHead* pCkHead) {
}
int walCheckAndRepairIdxFile(SWal* pWal, int32_t fileIdx) {
- int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
- ASSERT(fileIdx >= 0 && fileIdx < sz);
+ int32_t sz = taosArrayGetSize(pWal->fileInfoSet);
SWalFileInfo* pFileInfo = taosArrayGet(pWal->fileInfoSet, fileIdx);
char fnameStr[WAL_FILE_LEN];
walBuildIdxName(pWal, pFileInfo->firstVer, fnameStr);
@@ -492,7 +484,6 @@ int walCheckAndRepairIdxFile(SWal* pWal, int32_t fileIdx) {
return -1;
}
- ASSERT(pFileInfo->fileSize > 0 && pFileInfo->firstVer >= 0 && pFileInfo->lastVer >= pFileInfo->firstVer);
if (fileSize == (pFileInfo->lastVer - pFileInfo->firstVer + 1) * sizeof(SWalIdxEntry)) {
return 0;
}
@@ -556,7 +547,7 @@ int walCheckAndRepairIdxFile(SWal* pWal, int32_t fileIdx) {
}
offset += sizeof(SWalIdxEntry);
- ASSERT(offset == (idxEntry.ver - pFileInfo->firstVer + 1) * sizeof(SWalIdxEntry));
+ /*A(offset == (idxEntry.ver - pFileInfo->firstVer + 1) * sizeof(SWalIdxEntry));*/
// ftruncate idx file
if (offset < fileSize) {
@@ -577,7 +568,7 @@ int walCheckAndRepairIdxFile(SWal* pWal, int32_t fileIdx) {
}
while (idxEntry.ver < pFileInfo->lastVer) {
- ASSERT(idxEntry.ver == ckHead.head.version);
+ /*A(idxEntry.ver == ckHead.head.version);*/
idxEntry.ver += 1;
idxEntry.offset += sizeof(SWalCkHead) + ckHead.head.bodyLen;
@@ -649,8 +640,7 @@ int walRollFileInfo(SWal* pWal) {
}
char* walMetaSerialize(SWal* pWal) {
- char buf[30];
- ASSERT(pWal->fileInfoSet);
+ char buf[30];
int sz = taosArrayGetSize(pWal->fileInfoSet);
cJSON* pRoot = cJSON_CreateObject();
cJSON* pMeta = cJSON_CreateObject();
@@ -707,7 +697,7 @@ char* walMetaSerialize(SWal* pWal) {
}
int walMetaDeserialize(SWal* pWal, const char* bytes) {
- ASSERT(taosArrayGetSize(pWal->fileInfoSet) == 0);
+ /*A(taosArrayGetSize(pWal->fileInfoSet) == 0);*/
cJSON *pRoot, *pMeta, *pFiles, *pInfoJson, *pField;
pRoot = cJSON_Parse(bytes);
if (!pRoot) goto _err;
@@ -823,7 +813,9 @@ int walSaveMeta(SWal* pWal) {
// flush to a tmpfile
n = walBuildTmpMetaName(pWal, tmpFnameStr);
- ASSERT(n < sizeof(tmpFnameStr) && "Buffer overflow of file name");
+ if (n >= sizeof(tmpFnameStr)) {
+ return -1;
+ }
TdFilePtr pMetaFile = taosOpenFile(tmpFnameStr, TD_FILE_CREATE | TD_FILE_WRITE | TD_FILE_TRUNC);
if (pMetaFile == NULL) {
@@ -854,7 +846,9 @@ int walSaveMeta(SWal* pWal) {
// rename it
n = walBuildMetaName(pWal, metaVer + 1, fnameStr);
- ASSERT(n < sizeof(fnameStr) && "Buffer overflow of file name");
+ if (n >= sizeof(fnameStr)) {
+ goto _err;
+ }
if (taosRenameFile(tmpFnameStr, fnameStr) < 0) {
wError("failed to rename file due to %s. dest:%s", strerror(errno), fnameStr);
@@ -877,7 +871,6 @@ _err:
}
int walLoadMeta(SWal* pWal) {
- ASSERT(pWal->fileInfoSet->size == 0);
// find existing meta file
int metaVer = walFindCurMetaVer(pWal);
if (metaVer == -1) {
diff --git a/source/libs/wal/src/walRead.c b/source/libs/wal/src/walRead.c
index ed02d29e3b..a89c4bb546 100644
--- a/source/libs/wal/src/walRead.c
+++ b/source/libs/wal/src/walRead.c
@@ -97,7 +97,6 @@ int32_t walNextValidMsg(SWalReader *pReader) {
return -1;
}
fetchVer++;
- ASSERT(fetchVer == pReader->curVersion);
}
}
pReader->curStopped = 1;
@@ -132,7 +131,6 @@ static int64_t walReadSeekFilePos(SWalReader *pReader, int64_t fileFirstVer, int
return -1;
}
- ASSERT(entry.ver == ver);
ret = taosLSeekFile(pLogTFile, entry.offset, SEEK_SET);
if (ret < 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
@@ -241,7 +239,6 @@ static int32_t walFetchHeadNew(SWalReader *pRead, int64_t fetchVer) {
if (pRead->curInvalid || pRead->curVersion != fetchVer) {
if (walReadSeekVer(pRead, fetchVer) < 0) {
- ASSERT(0);
pRead->curVersion = fetchVer;
pRead->curInvalid = 1;
return -1;
@@ -262,7 +259,6 @@ static int32_t walFetchHeadNew(SWalReader *pRead, int64_t fetchVer) {
} else {
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
}
- ASSERT(0);
pRead->curInvalid = 1;
return -1;
}
@@ -299,7 +295,6 @@ static int32_t walFetchBodyNew(SWalReader *pRead) {
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
}
pRead->curInvalid = 1;
- ASSERT(0);
return -1;
}
@@ -308,7 +303,6 @@ static int32_t walFetchBodyNew(SWalReader *pRead) {
pRead->pHead->head.version, ver);
pRead->curInvalid = 1;
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
- ASSERT(0);
return -1;
}
@@ -316,7 +310,6 @@ static int32_t walFetchBodyNew(SWalReader *pRead) {
wError("vgId:%d, wal fetch body error:%" PRId64 ", since body checksum not passed", pRead->pWal->cfg.vgId, ver);
pRead->curInvalid = 1;
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
- ASSERT(0);
return -1;
}
@@ -328,14 +321,10 @@ static int32_t walFetchBodyNew(SWalReader *pRead) {
static int32_t walSkipFetchBodyNew(SWalReader *pRead) {
int64_t code;
- ASSERT(pRead->curVersion == pRead->pHead->head.version);
- ASSERT(pRead->curInvalid == 0);
-
code = taosLSeekFile(pRead->pLogFile, pRead->pHead->head.bodyLen, SEEK_CUR);
if (code < 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
pRead->curInvalid = 1;
- ASSERT(0);
return -1;
}
@@ -384,7 +373,6 @@ int32_t walFetchHead(SWalReader *pRead, int64_t ver, SWalCkHead *pHead) {
} else {
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
}
- ASSERT(0);
pRead->curInvalid = 1;
return -1;
}
@@ -410,9 +398,6 @@ int32_t walSkipFetchBody(SWalReader *pRead, const SWalCkHead *pHead) {
pRead->pWal->cfg.vgId, pHead->head.version, pRead->pWal->vers.firstVer, pRead->pWal->vers.commitVer,
pRead->pWal->vers.lastVer, pRead->pWal->vers.appliedVer);
- ASSERT(pRead->curVersion == pHead->head.version);
- ASSERT(pRead->curInvalid == 0);
-
code = taosLSeekFile(pRead->pLogFile, pHead->head.bodyLen, SEEK_CUR);
if (code < 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
@@ -447,7 +432,6 @@ int32_t walFetchBody(SWalReader *pRead, SWalCkHead **ppHead) {
if (pReadHead->bodyLen != taosReadFile(pRead->pLogFile, pReadHead->body, pReadHead->bodyLen)) {
if (pReadHead->bodyLen < 0) {
- ASSERT(0);
terrno = TAOS_SYSTEM_ERROR(errno);
wError("vgId:%d, wal fetch body error:%" PRId64 ", read request index:%" PRId64 ", since %s",
pRead->pWal->cfg.vgId, pReadHead->version, ver, tstrerror(terrno));
@@ -457,12 +441,10 @@ int32_t walFetchBody(SWalReader *pRead, SWalCkHead **ppHead) {
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
}
pRead->curInvalid = 1;
- ASSERT(0);
return -1;
}
if (pReadHead->version != ver) {
- ASSERT(0);
wError("vgId:%d, wal fetch body error, index:%" PRId64 ", read request index:%" PRId64, pRead->pWal->cfg.vgId,
pReadHead->version, ver);
pRead->curInvalid = 1;
@@ -471,7 +453,6 @@ int32_t walFetchBody(SWalReader *pRead, SWalCkHead **ppHead) {
}
if (walValidBodyCksum(*ppHead) != 0) {
- ASSERT(0);
wError("vgId:%d, wal fetch body error, index:%" PRId64 ", since body checksum not passed", pRead->pWal->cfg.vgId,
ver);
pRead->curInvalid = 1;
diff --git a/source/libs/wal/src/walRef.c b/source/libs/wal/src/walRef.c
index e86111109c..fa04ba3e58 100644
--- a/source/libs/wal/src/walRef.c
+++ b/source/libs/wal/src/walRef.c
@@ -61,7 +61,7 @@ int32_t walRefVer(SWalRef *pRef, int64_t ver) {
SWalFileInfo tmpInfo;
tmpInfo.firstVer = ver;
SWalFileInfo *pRet = taosArraySearch(pWal->fileInfoSet, &tmpInfo, compareWalFileInfo, TD_LE);
- ASSERT(pRet != NULL);
+ /*A(pRet != NULL);*/
pRef->refFile = pRet->firstVer;
taosThreadMutexUnlock(&pWal->mutex);
@@ -80,6 +80,7 @@ void walUnrefVer(SWalRef *pRef) {
SWalRef *walRefCommittedVer(SWal *pWal) {
SWalRef *pRef = walOpenRef(pWal);
if (pRef == NULL) {
+ terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
taosThreadMutexLock(&pWal->mutex);
@@ -91,7 +92,7 @@ SWalRef *walRefCommittedVer(SWal *pWal) {
SWalFileInfo tmpInfo;
tmpInfo.firstVer = ver;
SWalFileInfo *pRet = taosArraySearch(pWal->fileInfoSet, &tmpInfo, compareWalFileInfo, TD_LE);
- ASSERT(pRet != NULL);
+ /*A(pRet != NULL);*/
pRef->refFile = pRet->firstVer;
taosThreadMutexUnlock(&pWal->mutex);
diff --git a/source/libs/wal/src/walSeek.c b/source/libs/wal/src/walSeek.c
index 2cb6614b01..cbfd0ef741 100644
--- a/source/libs/wal/src/walSeek.c
+++ b/source/libs/wal/src/walSeek.c
@@ -40,7 +40,6 @@ static int64_t walSeekWritePos(SWal* pWal, int64_t ver) {
terrno = TAOS_SYSTEM_ERROR(errno);
return -1;
}
- ASSERT(entry.ver == ver);
code = taosLSeekFile(pLogTFile, entry.offset, SEEK_SET);
if (code < 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
@@ -53,8 +52,7 @@ static int64_t walSeekWritePos(SWal* pWal, int64_t ver) {
int walInitWriteFile(SWal* pWal) {
TdFilePtr pIdxTFile, pLogTFile;
SWalFileInfo* pRet = taosArrayGetLast(pWal->fileInfoSet);
- ASSERT(pRet != NULL);
- int64_t fileFirstVer = pRet->firstVer;
+ int64_t fileFirstVer = pRet->firstVer;
char fnameStr[WAL_FILE_LEN];
walBuildIdxName(pWal, fileFirstVer, fnameStr);
@@ -109,9 +107,8 @@ int64_t walChangeWrite(SWal* pWal, int64_t ver) {
tmpInfo.firstVer = ver;
// bsearch in fileSet
int32_t idx = taosArraySearchIdx(pWal->fileInfoSet, &tmpInfo, compareWalFileInfo, TD_LE);
- ASSERT(idx != -1);
+ /*A(idx != -1);*/
SWalFileInfo* pFileInfo = taosArrayGet(pWal->fileInfoSet, idx);
- /*ASSERT(pFileInfo != NULL);*/
int64_t fileFirstVer = pFileInfo->firstVer;
walBuildIdxName(pWal, fileFirstVer, fnameStr);
diff --git a/source/libs/wal/src/walWrite.c b/source/libs/wal/src/walWrite.c
index a5c7bf1abd..4233c089a4 100644
--- a/source/libs/wal/src/walWrite.c
+++ b/source/libs/wal/src/walWrite.c
@@ -87,12 +87,10 @@ int32_t walApplyVer(SWal *pWal, int64_t ver) {
}
int32_t walCommit(SWal *pWal, int64_t ver) {
- ASSERT(pWal->vers.commitVer >= pWal->vers.snapshotVer);
- ASSERT(pWal->vers.commitVer <= pWal->vers.lastVer);
if (ver < pWal->vers.commitVer) {
return 0;
}
- if (ver > pWal->vers.lastVer) {
+ if (ver > pWal->vers.lastVer || pWal->vers.commitVer < pWal->vers.snapshotVer) {
terrno = TSDB_CODE_WAL_INVALID_VER;
return -1;
}
@@ -138,25 +136,21 @@ int32_t walRollback(SWal *pWal, int64_t ver) {
TdFilePtr pIdxFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ | TD_FILE_APPEND);
if (pIdxFile == NULL) {
- ASSERT(0);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
int64_t idxOff = walGetVerIdxOffset(pWal, ver);
code = taosLSeekFile(pIdxFile, idxOff, SEEK_SET);
if (code < 0) {
- ASSERT(0);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
// read idx file and get log file pos
SWalIdxEntry entry;
if (taosReadFile(pIdxFile, &entry, sizeof(SWalIdxEntry)) != sizeof(SWalIdxEntry)) {
- ASSERT(0);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
- ASSERT(entry.ver == ver);
walBuildLogName(pWal, walGetCurFileFirstVer(pWal), fnameStr);
TdFilePtr pLogFile = taosOpenFile(fnameStr, TD_FILE_WRITE | TD_FILE_READ | TD_FILE_APPEND);
@@ -176,24 +170,19 @@ int32_t walRollback(SWal *pWal, int64_t ver) {
}
// validate offset
SWalCkHead head;
- ASSERT(taosValidFile(pLogFile));
- int64_t size = taosReadFile(pLogFile, &head, sizeof(SWalCkHead));
+ int64_t size = taosReadFile(pLogFile, &head, sizeof(SWalCkHead));
if (size != sizeof(SWalCkHead)) {
- ASSERT(0);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
code = walValidHeadCksum(&head);
- ASSERT(code == 0);
if (code != 0) {
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
- ASSERT(0);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
if (head.head.version != ver) {
- ASSERT(0);
terrno = TSDB_CODE_WAL_FILE_CORRUPTED;
taosThreadMutexUnlock(&pWal->mutex);
return -1;
@@ -202,22 +191,22 @@ int32_t walRollback(SWal *pWal, int64_t ver) {
// truncate old files
code = taosFtruncateFile(pLogFile, entry.offset);
if (code < 0) {
- ASSERT(0);
terrno = TAOS_SYSTEM_ERROR(errno);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
code = taosFtruncateFile(pIdxFile, idxOff);
if (code < 0) {
- ASSERT(0);
terrno = TAOS_SYSTEM_ERROR(errno);
taosThreadMutexUnlock(&pWal->mutex);
return -1;
}
pWal->vers.lastVer = ver - 1;
+#if 0
if (pWal->vers.lastVer < pWal->vers.firstVer) {
- ASSERT(pWal->vers.lastVer == pWal->vers.firstVer - 1);
+ A(pWal->vers.lastVer == pWal->vers.firstVer - 1);
}
+#endif
((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->lastVer = ver - 1;
((SWalFileInfo *)taosArrayGetLast(pWal->fileInfoSet))->fileSize = entry.offset;
taosCloseFile(&pIdxFile);
@@ -386,7 +375,8 @@ int32_t walEndSnapshot(SWal *pWal) {
walBuildIdxName(pWal, pInfo->firstVer, fnameStr);
wDebug("vgId:%d, wal remove file %s", pWal->cfg.vgId, fnameStr);
if (taosRemoveFile(fnameStr) < 0 && errno != ENOENT) {
- ASSERT(0);
+ wError("vgId:%d, failed to remove idx file %s due to %s", pWal->cfg.vgId, fnameStr, strerror(errno));
+ goto END;
}
}
taosArrayClear(pWal->toDeleteFiles);
@@ -441,7 +431,6 @@ int32_t walRollImpl(SWal *pWal) {
pWal->pIdxFile = pIdxFile;
pWal->pLogFile = pLogFile;
pWal->writeCur = taosArrayGetSize(pWal->fileInfoSet) - 1;
- ASSERT(pWal->writeCur >= 0);
pWal->lastRollSeq = walGetSeq();
@@ -458,8 +447,7 @@ END:
static int32_t walWriteIndex(SWal *pWal, int64_t ver, int64_t offset) {
SWalIdxEntry entry = {.ver = ver, .offset = offset};
SWalFileInfo *pFileInfo = walGetCurFileInfo(pWal);
- ASSERT(pFileInfo != NULL);
- ASSERT(pFileInfo->firstVer >= 0);
+
int64_t idxOffset = (entry.ver - pFileInfo->firstVer) * sizeof(SWalIdxEntry);
wDebug("vgId:%d, write index, index:%" PRId64 ", offset:%" PRId64 ", at %" PRId64, pWal->cfg.vgId, ver, offset,
idxOffset);
@@ -476,7 +464,6 @@ static int32_t walWriteIndex(SWal *pWal, int64_t ver, int64_t offset) {
if (endOffset < 0) {
wFatal("vgId:%d, failed to seek end of idxfile due to %s. ver:%" PRId64 "", pWal->cfg.vgId, strerror(errno), ver);
}
- ASSERT(endOffset == idxOffset + sizeof(SWalIdxEntry) && "Offset of idx entries misaligned");
return 0;
}
@@ -486,9 +473,7 @@ static FORCE_INLINE int32_t walWriteImpl(SWal *pWal, int64_t index, tmsg_t msgTy
int64_t offset = walGetCurFileOffset(pWal);
SWalFileInfo *pFileInfo = walGetCurFileInfo(pWal);
- ASSERT(pFileInfo != NULL);
- ASSERT(pFileInfo->firstVer != -1);
pWal->writeHead.head.version = index;
pWal->writeHead.head.bodyLen = bodyLen;
pWal->writeHead.head.msgType = msgType;
@@ -525,7 +510,6 @@ static FORCE_INLINE int32_t walWriteImpl(SWal *pWal, int64_t index, tmsg_t msgTy
// set status
if (pWal->vers.firstVer == -1) {
- ASSERT(index == 0);
pWal->vers.firstVer = 0;
}
pWal->vers.lastVer = index;
@@ -541,7 +525,6 @@ END:
wFatal("vgId:%d, failed to ftruncate logfile to offset:%" PRId64 " during recovery due to %s", pWal->cfg.vgId,
offset, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
- ASSERT(0 && "failed to recover from error");
}
int64_t idxOffset = (index - pFileInfo->firstVer) * sizeof(SWalIdxEntry);
@@ -549,7 +532,6 @@ END:
wFatal("vgId:%d, failed to ftruncate idxfile to offset:%" PRId64 "during recovery due to %s", pWal->cfg.vgId,
idxOffset, strerror(errno));
terrno = TAOS_SYSTEM_ERROR(errno);
- ASSERT(0 && "failed to recover from error");
}
return -1;
}
@@ -576,8 +558,6 @@ int64_t walAppendLog(SWal *pWal, int64_t index, tmsg_t msgType, SWalSyncInfo syn
}
}
- ASSERT(pWal->pLogFile != NULL && pWal->pIdxFile != NULL && pWal->writeCur >= 0);
-
if (walWriteImpl(pWal, index, msgType, syncMeta, body, bodyLen) < 0) {
taosThreadMutexUnlock(&pWal->mutex);
return -1;
@@ -614,8 +594,6 @@ int32_t walWriteWithSyncInfo(SWal *pWal, int64_t index, tmsg_t msgType, SWalSync
}
}
- ASSERT(pWal->pIdxFile != NULL && pWal->pLogFile != NULL && pWal->writeCur >= 0);
-
if (walWriteImpl(pWal, index, msgType, syncMeta, body, bodyLen) < 0) {
taosThreadMutexUnlock(&pWal->mutex);
return -1;
diff --git a/source/os/src/osEnv.c b/source/os/src/osEnv.c
index 7063d1f574..c4627ffb75 100644
--- a/source/os/src/osEnv.c
+++ b/source/os/src/osEnv.c
@@ -37,7 +37,7 @@ float tsNumOfCores = 0;
int64_t tsTotalMemoryKB = 0;
char *tsProcPath = NULL;
-char tsSIMDEnable = 0;
+char tsSIMDBuiltins = 0;
char tsSSE42Enable = 0;
char tsAVXEnable = 0;
char tsAVX2Enable = 0;
diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c
index 8c2170239f..d8cccc83ed 100644
--- a/source/os/src/osFile.c
+++ b/source/os/src/osFile.c
@@ -464,7 +464,9 @@ int64_t taosWriteFile(TdFilePtr pFile, const void *buf, int64_t count) {
#if FILE_WITH_LOCK
taosThreadRwlockWrlock(&(pFile->rwlock));
#endif
- assert(pFile->fd >= 0); // Please check if you have closed the file.
+ if (pFile->fd < 0) {
+ return 0;
+ }
int64_t nleft = count;
int64_t nwritten = 0;
diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c
index eb989d6957..e1abe84841 100644
--- a/source/os/src/osSysinfo.c
+++ b/source/os/src/osSysinfo.c
@@ -489,11 +489,11 @@ int32_t taosGetCpuInstructions(char* sse42, char* avx, char* avx2, char* fma) {
#ifdef _TD_X86_
// Since the compiler is not support avx/avx2 instructions, the global variables always need to be
// set to be false
-#if __AVX__ || __AVX2__
- tsSIMDEnable = true;
-#else
- tsSIMDEnable = false;
-#endif
+//#if __AVX__ || __AVX2__
+// tsSIMDBuiltins = true;
+//#else
+// tsSIMDBuiltins = false;
+//#endif
uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0;
diff --git a/source/util/src/terror.c b/source/util/src/terror.c
index 656d775ea4..4b9dde5059 100644
--- a/source/util/src/terror.c
+++ b/source/util/src/terror.c
@@ -281,6 +281,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_STREAM_ALREADY_EXIST, "Stream already exists
TAOS_DEFINE_ERROR(TSDB_CODE_MND_STREAM_NOT_EXIST, "Stream not exist")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_STREAM_OPTION, "Invalid stream option")
TAOS_DEFINE_ERROR(TSDB_CODE_MND_STREAM_MUST_BE_DELETED, "Stream must be dropped first")
+TAOS_DEFINE_ERROR(TSDB_CODE_MND_MULTI_REPLICA_SOURCE_DB, "Stream temporarily does not support source db having replica > 1")
// mnode-sma
TAOS_DEFINE_ERROR(TSDB_CODE_MND_SMA_ALREADY_EXIST, "SMA already exists")
diff --git a/source/util/src/tlog.c b/source/util/src/tlog.c
index 747187254f..f6f814d82b 100644
--- a/source/util/src/tlog.c
+++ b/source/util/src/tlog.c
@@ -445,6 +445,9 @@ static inline int32_t taosBuildLogHead(char *buffer, const char *flags) {
static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *buffer, int32_t len) {
if ((dflag & DEBUG_FILE) && tsLogObj.logHandle && tsLogObj.logHandle->pFile != NULL && osLogSpaceAvailable()) {
taosUpdateLogNums(level);
+#if 0
+ // DEBUG_FATAL and DEBUG_ERROR are duplicated
+ // fsync will cause thread blocking and may also generate log misalignment in case of asyncLog
if (tsAsyncLog && level != DEBUG_FATAL) {
taosPushLogBuffer(tsLogObj.logHandle, buffer, len);
} else {
@@ -453,6 +456,13 @@ static inline void taosPrintLogImp(ELogLevel level, int32_t dflag, const char *b
taosFsyncFile(tsLogObj.logHandle->pFile);
}
}
+#else
+ if (tsAsyncLog) {
+ taosPushLogBuffer(tsLogObj.logHandle, buffer, len);
+ } else {
+ taosWriteFile(tsLogObj.logHandle->pFile, buffer, len);
+ }
+#endif
if (tsLogObj.maxLines > 0) {
atomic_add_fetch_32(&tsLogObj.lines, 1);
diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py
index 4e3c9d07ce..a6167158a2 100644
--- a/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py
+++ b/tests/develop-test/5-taos-tools/taosbenchmark/auto_create_table_json.py
@@ -153,6 +153,8 @@ class TDTestCase:
tdSql.query("select count(*) from db.`stb4-2`")
tdSql.checkData(0, 0, 160)
+ tAdapter.stop()
+
def stop(self):
tdSql.close()
tdLog.success("%s successfully executed" % __file__)
diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py
index e63908ce33..54657995e2 100644
--- a/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py
+++ b/tests/develop-test/5-taos-tools/taosbenchmark/insert_alltypes_json.py
@@ -320,7 +320,8 @@ class TDTestCase:
tdSql.checkData(0, 0, 160)
tdSql.query("select count(*) from db.stb where t13 like 'b1%' or t13 like 'b2%'")
tdSql.checkData(0, 0, 160)
-
+
+ tAdapter.stop()
def stop(self):
tdSql.close()
diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py
index 375113c3ef..c906f61675 100644
--- a/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py
+++ b/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py
@@ -116,11 +116,11 @@ class TDTestCase:
assert times == 1, "result is %s != expect: 1" % times
-
+ tAdapter.stop()
def stop(self):
- tdSql.close()
+ tdSql.close()
tdLog.success("%s successfully executed" % __file__)
diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task
index 4cbba106ba..44bf6cc6f1 100644
--- a/tests/parallel_test/cases.task
+++ b/tests/parallel_test/cases.task
@@ -174,6 +174,7 @@
,,y,script,./test.sh -f tsim/query/scalarNull.sim
,,y,script,./test.sh -f tsim/query/session.sim
,,y,script,./test.sh -f tsim/query/udf.sim
+,,y,script,./test.sh -f tsim/query/udf_with_const.sim
,,y,script,./test.sh -f tsim/qnode/basic1.sim
,,y,script,./test.sh -f tsim/snode/basic1.sim
,,y,script,./test.sh -f tsim/mnode/basic1.sim
@@ -479,8 +480,8 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/count.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/countAlwaysReturnValue.py -R
-,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py
-,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py -R
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/db.py -N 3 -n 3 -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/diff.py -R
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/distinct.py
@@ -647,6 +648,9 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 6 -M 3 -n 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 6 -M 3 -n 3
+
+,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py -N 6 -M 3
+,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py -N 6 -M 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 6 -M 3 -n 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 6 -M 3
@@ -657,6 +661,7 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertData.py -N 6 -M 3 -n 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py -N 6 -M 3 -n 3
+
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeAdd1Ddnoe.py -N 7 -M 3 -C 6 -n 3
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode3mnodeDrop.py -N 5
@@ -1017,6 +1022,11 @@
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 2
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 3
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_select.py -Q 4
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -R
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 2
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 3
+,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/insert_null_none.py -Q 4
,,y,system-test,./pytest.sh python3 ./test.py -f 99-TDcase/TD-20582.py
#develop test
diff --git a/tests/pytest/util/cluster.py b/tests/pytest/util/cluster.py
index 72b7e1fddf..2607cf63c2 100644
--- a/tests/pytest/util/cluster.py
+++ b/tests/pytest/util/cluster.py
@@ -53,7 +53,7 @@ class ConfigureyCluster:
# configure dnoe of independent mnodes
if num <= self.mnodeNums and self.mnodeNums != 0 and independentMnode == True :
- dnode.addExtraCfg("supportVnodes", 0)
+ dnode.addExtraCfg("supportVnodes", 1024)
# print(dnode)
self.dnodes.append(dnode)
return self.dnodes
diff --git a/tests/pytest/util/taosadapter.py b/tests/pytest/util/taosadapter.py
index 440c23dc65..5210825cde 100644
--- a/tests/pytest/util/taosadapter.py
+++ b/tests/pytest/util/taosadapter.py
@@ -227,7 +227,7 @@ class TAdapter:
time.sleep(0.1)
def stop(self, force_kill=False):
- signal = "-SIGKILL" if force_kill else "-SIGTERM"
+ signal = "-9" if force_kill else "-15"
if self.remoteIP:
self.remote_exec(self.taosadapter_cfg_dict, "tAdapter.running=1\ntAdapter.stop()")
@@ -238,16 +238,13 @@ class TAdapter:
if self.running != 0:
psCmd = f"ps -ef|grep -w {toBeKilled}| grep -v grep | awk '{{print $2}}'"
- # psCmd = f"pgrep {toBeKilled}"
- processID = subprocess.check_output(
- psCmd, shell=True)
-
- while(processID):
- killCmd = f"pkill {signal} {processID} > /dev/null "
+ # psCmd = f"pgrep {toBeKilled}"
+ processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
+ while(processID):
+ killCmd = "kill %s %s > /dev/null 2>&1" % (signal, processID)
os.system(killCmd)
time.sleep(1)
- processID = subprocess.check_output(
- psCmd, shell=True).decode("utf-8")
+ processID = subprocess.check_output(psCmd, shell=True).decode("utf-8").strip()
if not platform.system().lower() == 'windows':
port = 6041
fuserCmd = f"fuser -k -n tcp {port} > /dev/null"
diff --git a/examples/c/api_with_reqid_test.c b/tests/script/api/api_with_reqid_test.c
similarity index 100%
rename from examples/c/api_with_reqid_test.c
rename to tests/script/api/api_with_reqid_test.c
diff --git a/tests/script/api/apitest.c b/tests/script/api/apitest.c
new file mode 100644
index 0000000000..7280522021
--- /dev/null
+++ b/tests/script/api/apitest.c
@@ -0,0 +1,936 @@
+// sample code to verify all TDengine API
+// to compile: gcc -o apitest apitest.c -ltaos
+
+#include "cJSON.h"
+#include "taoserror.h"
+
+#include
+#include
+#include
+#include
+#include "../../include/client/taos.h"
+
+static int64_t count = 10000;
+
+int64_t genReqid() {
+ count += 100;
+ return count;
+}
+
+static void prepare_data(TAOS* taos) {
+ TAOS_RES* result;
+ result = taos_query(taos, "drop database if exists test;");
+ taos_free_result(result);
+ usleep(100000);
+ result = taos_query(taos, "create database test precision 'us';");
+ taos_free_result(result);
+ usleep(100000);
+ taos_select_db(taos, "test");
+
+ result = taos_query(taos, "create table meters(ts timestamp, a int) tags(area int);");
+ taos_free_result(result);
+
+ result = taos_query(taos, "create table t0 using meters tags(0);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t1 using meters tags(1);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t2 using meters tags(2);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t3 using meters tags(3);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t4 using meters tags(4);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t5 using meters tags(5);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t6 using meters tags(6);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t7 using meters tags(7);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t8 using meters tags(8);");
+ taos_free_result(result);
+ result = taos_query(taos, "create table t9 using meters tags(9);");
+ taos_free_result(result);
+
+ result = taos_query(taos,
+ "insert into t0 values('2020-01-01 00:00:00.000', 0)"
+ " ('2020-01-01 00:01:00.000', 0)"
+ " ('2020-01-01 00:02:00.000', 0)"
+ " t1 values('2020-01-01 00:00:00.000', 0)"
+ " ('2020-01-01 00:01:00.000', 0)"
+ " ('2020-01-01 00:02:00.000', 0)"
+ " ('2020-01-01 00:03:00.000', 0)"
+ " t2 values('2020-01-01 00:00:00.000', 0)"
+ " ('2020-01-01 00:01:00.000', 0)"
+ " ('2020-01-01 00:01:01.000', 0)"
+ " ('2020-01-01 00:01:02.000', 0)"
+ " t3 values('2020-01-01 00:01:02.000', 0)"
+ " t4 values('2020-01-01 00:01:02.000', 0)"
+ " t5 values('2020-01-01 00:01:02.000', 0)"
+ " t6 values('2020-01-01 00:01:02.000', 0)"
+ " t7 values('2020-01-01 00:01:02.000', 0)"
+ " t8 values('2020-01-01 00:01:02.000', 0)"
+ " t9 values('2020-01-01 00:01:02.000', 0)");
+ int affected = taos_affected_rows(result);
+ if (affected != 18) {
+ printf("\033[31m%d rows affected by last insert statement, but it should be 18\033[0m\n", affected);
+ }
+ taos_free_result(result);
+ // super tables subscription
+ usleep(1000000);
+}
+
+static int print_result(TAOS_RES* res, int blockFetch) {
+ TAOS_ROW row = NULL;
+ int num_fields = taos_num_fields(res);
+ TAOS_FIELD* fields = taos_fetch_fields(res);
+ int nRows = 0;
+
+ if (blockFetch) {
+ int rows = 0;
+ while ((rows = taos_fetch_block(res, &row))) {
+ // for (int i = 0; i < rows; i++) {
+ // char temp[256];
+ // taos_print_row(temp, row + i, fields, num_fields);
+ // puts(temp);
+ // }
+ nRows += rows;
+ }
+ } else {
+ while ((row = taos_fetch_row(res))) {
+ char temp[256] = {0};
+ taos_print_row(temp, row, fields, num_fields);
+ puts(temp);
+ nRows++;
+ }
+ }
+
+ printf("%d rows consumed.\n", nRows);
+ return nRows;
+}
+
+static void check_row_count(int line, TAOS_RES* res, int expected) {
+ int actual = print_result(res, expected % 2);
+ if (actual != expected) {
+ printf("\033[31mline %d: row count mismatch, expected: %d, actual: %d\033[0m\n", line, expected, actual);
+ } else {
+ printf("line %d: %d rows consumed as expected\n", line, actual);
+ }
+}
+
+static void verify_query(TAOS* taos) {
+ prepare_data(taos);
+
+ int code = taos_load_table_info(taos, "t0,t1,t2,t3,t4,t5,t6,t7,t8,t9");
+ if (code != 0) {
+ printf("\033[31mfailed to load table info: 0x%08x\033[0m\n", code);
+ }
+
+ code = taos_validate_sql(taos, "select * from nonexisttable");
+ if (code == 0) {
+ printf("\033[31mimpossible, the table does not exists\033[0m\n");
+ }
+
+ code = taos_validate_sql(taos, "select * from meters");
+ if (code != 0) {
+ printf("\033[31mimpossible, the table does exists: 0x%08x\033[0m\n", code);
+ }
+
+ TAOS_RES* res = taos_query_with_reqid(taos, "select * from meters", genReqid());
+ check_row_count(__LINE__, res, 18);
+ printf("result precision is: %d\n", taos_result_precision(res));
+ int c = taos_field_count(res);
+ printf("field count is: %d\n", c);
+ int* lengths = taos_fetch_lengths(res);
+ for (int i = 0; i < c; i++) {
+ printf("length of column %d is %d\n", i, lengths[i]);
+ }
+ taos_free_result(res);
+
+ res = taos_query_with_reqid(taos, "select * from t0", genReqid());
+ check_row_count(__LINE__, res, 3);
+ taos_free_result(res);
+
+ res = taos_query_with_reqid(taos, "select * from nonexisttable", genReqid());
+ code = taos_errno(res);
+ printf("code=%d, error msg=%s\n", code, taos_errstr(res));
+ taos_free_result(res);
+
+ res = taos_query_with_reqid(taos, "select * from meters", genReqid());
+ taos_stop_query(res);
+ taos_free_result(res);
+}
+
+void subscribe_callback(TAOS_SUB* tsub, TAOS_RES* res, void* param, int code) {
+ int rows = print_result(res, *(int*)param);
+ printf("%d rows consumed in subscribe_callback\n", rows);
+}
+
+void verify_prepare(TAOS* taos) {
+ TAOS_RES* result = taos_query(taos, "drop database if exists test;");
+ taos_free_result(result);
+
+ usleep(100000);
+ result = taos_query(taos, "create database test;");
+
+ int code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+
+ taos_free_result(result);
+
+ usleep(100000);
+ taos_select_db(taos, "test");
+
+ // create table
+ const char* sql =
+ "create table m1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
+ "binary(40), blob nchar(10))";
+ result = taos_query_with_reqid(taos, sql, genReqid());
+ code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+ taos_free_result(result);
+
+ // insert 10 records
+ struct {
+ int64_t ts;
+ int8_t b;
+ int8_t v1;
+ int16_t v2;
+ int32_t v4;
+ int64_t v8;
+ float f4;
+ double f8;
+ char bin[40];
+ char blob[80];
+ } v = {0};
+
+ int32_t boolLen = sizeof(int8_t);
+ int32_t sintLen = sizeof(int16_t);
+ int32_t intLen = sizeof(int32_t);
+ int32_t bintLen = sizeof(int64_t);
+ int32_t floatLen = sizeof(float);
+ int32_t doubleLen = sizeof(double);
+ int32_t binLen = sizeof(v.bin);
+ int32_t ncharLen = 30;
+ TAOS_STMT* stmt = taos_stmt_init(taos);
+ TAOS_MULTI_BIND params[10];
+ params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
+ params[0].buffer_length = sizeof(v.ts);
+ params[0].buffer = &v.ts;
+ params[0].length = &bintLen;
+ params[0].is_null = NULL;
+ params[0].num = 1;
+
+ params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
+ params[1].buffer_length = sizeof(v.b);
+ params[1].buffer = &v.b;
+ params[1].length = &boolLen;
+ params[1].is_null = NULL;
+ params[1].num = 1;
+
+ params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
+ params[2].buffer_length = sizeof(v.v1);
+ params[2].buffer = &v.v1;
+ params[2].length = &boolLen;
+ params[2].is_null = NULL;
+ params[2].num = 1;
+
+ params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
+ params[3].buffer_length = sizeof(v.v2);
+ params[3].buffer = &v.v2;
+ params[3].length = &sintLen;
+ params[3].is_null = NULL;
+ params[3].num = 1;
+
+ params[4].buffer_type = TSDB_DATA_TYPE_INT;
+ params[4].buffer_length = sizeof(v.v4);
+ params[4].buffer = &v.v4;
+ params[4].length = &intLen;
+ params[4].is_null = NULL;
+ params[4].num = 1;
+
+ params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
+ params[5].buffer_length = sizeof(v.v8);
+ params[5].buffer = &v.v8;
+ params[5].length = &bintLen;
+ params[5].is_null = NULL;
+ params[5].num = 1;
+
+ params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
+ params[6].buffer_length = sizeof(v.f4);
+ params[6].buffer = &v.f4;
+ params[6].length = &floatLen;
+ params[6].is_null = NULL;
+ params[6].num = 1;
+
+ params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
+ params[7].buffer_length = sizeof(v.f8);
+ params[7].buffer = &v.f8;
+ params[7].length = &doubleLen;
+ params[7].is_null = NULL;
+ params[7].num = 1;
+
+ params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
+ params[8].buffer_length = sizeof(v.bin);
+ params[8].buffer = v.bin;
+ params[8].length = &binLen;
+ params[8].is_null = NULL;
+ params[8].num = 1;
+
+ strcpy(v.blob, "一二三四五六七八九十");
+ params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
+ params[9].buffer_length = sizeof(v.blob);
+ params[9].buffer = v.blob;
+ params[9].length = &ncharLen;
+ params[9].is_null = NULL;
+ params[9].num = 1;
+
+ char is_null = 1;
+
+ sql = "insert into m1 values(?,?,?,?,?,?,?,?,?,?)";
+ code = taos_stmt_prepare(stmt, sql, 0);
+ if (code != 0) {
+ printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+ v.ts = 1591060628000;
+ for (int i = 0; i < 10; ++i) {
+ v.ts += 1;
+ for (int j = 1; j < 10; ++j) {
+ params[j].is_null = ((i == j) ? &is_null : 0);
+ }
+ v.b = (int8_t)i % 2;
+ v.v1 = (int8_t)i;
+ v.v2 = (int16_t)(i * 2);
+ v.v4 = (int32_t)(i * 4);
+ v.v8 = (int64_t)(i * 8);
+ v.f4 = (float)(i * 40);
+ v.f8 = (double)(i * 80);
+ for (int j = 0; j < sizeof(v.bin); ++j) {
+ v.bin[j] = (char)(i + '0');
+ }
+
+ taos_stmt_bind_param(stmt, params);
+ taos_stmt_add_batch(stmt);
+ }
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+ taos_stmt_close(stmt);
+
+ // query the records
+ stmt = taos_stmt_init(taos);
+ taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
+ v.v1 = 5;
+ v.v2 = 15;
+ taos_stmt_bind_param(stmt, params + 2);
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ result = taos_stmt_use_result(stmt);
+
+ TAOS_ROW row;
+ int rows = 0;
+ int num_fields = taos_num_fields(result);
+ TAOS_FIELD* fields = taos_fetch_fields(result);
+
+ // fetch the records row by row
+ while ((row = taos_fetch_row(result))) {
+ char temp[256] = {0};
+ rows++;
+ taos_print_row(temp, row, fields, num_fields);
+ printf("%s\n", temp);
+ }
+
+ taos_free_result(result);
+ taos_stmt_close(stmt);
+}
+
+void verify_prepare2(TAOS* taos) {
+ TAOS_RES* result = taos_query(taos, "drop database if exists test;");
+ taos_free_result(result);
+ usleep(100000);
+ result = taos_query(taos, "create database test;");
+
+ int code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+ taos_free_result(result);
+
+ usleep(100000);
+ taos_select_db(taos, "test");
+
+ // create table
+ const char* sql =
+ "create table m1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
+ "binary(40), blob nchar(10))";
+ result = taos_query(taos, sql);
+ code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+ taos_free_result(result);
+
+ // insert 10 records
+ struct {
+ int64_t ts[10];
+ int8_t b[10];
+ int8_t v1[10];
+ int16_t v2[10];
+ int32_t v4[10];
+ int64_t v8[10];
+ float f4[10];
+ double f8[10];
+ char bin[10][40];
+ char blob[10][80];
+ } v;
+
+ int32_t* t8_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t16_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t32_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t64_len = malloc(sizeof(int32_t) * 10);
+ int32_t* float_len = malloc(sizeof(int32_t) * 10);
+ int32_t* double_len = malloc(sizeof(int32_t) * 10);
+ int32_t* bin_len = malloc(sizeof(int32_t) * 10);
+ int32_t* blob_len = malloc(sizeof(int32_t) * 10);
+
+ TAOS_STMT* stmt = taos_stmt_init(taos);
+ TAOS_MULTI_BIND params[10];
+ char is_null[10] = {0};
+
+ params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
+ params[0].buffer_length = sizeof(v.ts[0]);
+ params[0].buffer = v.ts;
+ params[0].length = t64_len;
+ params[0].is_null = is_null;
+ params[0].num = 10;
+
+ params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
+ params[1].buffer_length = sizeof(v.b[0]);
+ params[1].buffer = v.b;
+ params[1].length = t8_len;
+ params[1].is_null = is_null;
+ params[1].num = 10;
+
+ params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
+ params[2].buffer_length = sizeof(v.v1[0]);
+ params[2].buffer = v.v1;
+ params[2].length = t8_len;
+ params[2].is_null = is_null;
+ params[2].num = 10;
+
+ params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
+ params[3].buffer_length = sizeof(v.v2[0]);
+ params[3].buffer = v.v2;
+ params[3].length = t16_len;
+ params[3].is_null = is_null;
+ params[3].num = 10;
+
+ params[4].buffer_type = TSDB_DATA_TYPE_INT;
+ params[4].buffer_length = sizeof(v.v4[0]);
+ params[4].buffer = v.v4;
+ params[4].length = t32_len;
+ params[4].is_null = is_null;
+ params[4].num = 10;
+
+ params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
+ params[5].buffer_length = sizeof(v.v8[0]);
+ params[5].buffer = v.v8;
+ params[5].length = t64_len;
+ params[5].is_null = is_null;
+ params[5].num = 10;
+
+ params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
+ params[6].buffer_length = sizeof(v.f4[0]);
+ params[6].buffer = v.f4;
+ params[6].length = float_len;
+ params[6].is_null = is_null;
+ params[6].num = 10;
+
+ params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
+ params[7].buffer_length = sizeof(v.f8[0]);
+ params[7].buffer = v.f8;
+ params[7].length = double_len;
+ params[7].is_null = is_null;
+ params[7].num = 10;
+
+ params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
+ params[8].buffer_length = sizeof(v.bin[0]);
+ params[8].buffer = v.bin;
+ params[8].length = bin_len;
+ params[8].is_null = is_null;
+ params[8].num = 10;
+
+ params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
+ params[9].buffer_length = sizeof(v.blob[0]);
+ params[9].buffer = v.blob;
+ params[9].length = blob_len;
+ params[9].is_null = is_null;
+ params[9].num = 10;
+
+ sql = "insert into ? (ts, b, v1, v2, v4, v8, f4, f8, bin, blob) values(?,?,?,?,?,?,?,?,?,?)";
+ code = taos_stmt_prepare(stmt, sql, 0);
+ if (code != 0) {
+ printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ code = taos_stmt_set_tbname(stmt, "m1");
+ if (code != 0) {
+ printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ int64_t ts = 1591060628000;
+ for (int i = 0; i < 10; ++i) {
+ v.ts[i] = ts++;
+ is_null[i] = 0;
+
+ v.b[i] = (int8_t)i % 2;
+ v.v1[i] = (int8_t)i;
+ v.v2[i] = (int16_t)(i * 2);
+ v.v4[i] = (int32_t)(i * 4);
+ v.v8[i] = (int64_t)(i * 8);
+ v.f4[i] = (float)(i * 40);
+ v.f8[i] = (double)(i * 80);
+ for (int j = 0; j < sizeof(v.bin[0]); ++j) {
+ v.bin[i][j] = (char)(i + '0');
+ }
+ strcpy(v.blob[i], "一二三四五六七八九十");
+
+ t8_len[i] = sizeof(int8_t);
+ t16_len[i] = sizeof(int16_t);
+ t32_len[i] = sizeof(int32_t);
+ t64_len[i] = sizeof(int64_t);
+ float_len[i] = sizeof(float);
+ double_len[i] = sizeof(double);
+ bin_len[i] = sizeof(v.bin[0]);
+ blob_len[i] = (int32_t)strlen(v.blob[i]);
+ }
+
+ taos_stmt_bind_param_batch(stmt, params);
+ taos_stmt_add_batch(stmt);
+
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ taos_stmt_close(stmt);
+
+ // query the records
+ stmt = taos_stmt_init(taos);
+ taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
+ TAOS_MULTI_BIND qparams[2];
+
+ int8_t v1 = 5;
+ int16_t v2 = 15;
+ int32_t tinyLen = sizeof(v1);
+ int32_t smallLen = sizeof(v2);
+
+ qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
+ qparams[0].buffer_length = sizeof(v1);
+ qparams[0].buffer = &v1;
+ qparams[0].length = &tinyLen;
+ qparams[0].is_null = NULL;
+ qparams[0].num = 1;
+
+ qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
+ qparams[1].buffer_length = sizeof(v2);
+ qparams[1].buffer = &v2;
+ qparams[1].length = &smallLen;
+ qparams[1].is_null = NULL;
+ qparams[1].num = 1;
+
+ taos_stmt_bind_param(stmt, qparams);
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ result = taos_stmt_use_result(stmt);
+
+ TAOS_ROW row;
+ int rows = 0;
+ int num_fields = taos_num_fields(result);
+ TAOS_FIELD* fields = taos_fetch_fields(result);
+
+ // fetch the records row by row
+ while ((row = taos_fetch_row(result))) {
+ char temp[256] = {0};
+ rows++;
+ taos_print_row(temp, row, fields, num_fields);
+ printf("%s\n", temp);
+ }
+
+ taos_free_result(result);
+ taos_stmt_close(stmt);
+
+ free(t8_len);
+ free(t16_len);
+ free(t32_len);
+ free(t64_len);
+ free(float_len);
+ free(double_len);
+ free(bin_len);
+ free(blob_len);
+}
+
+void verify_prepare3(TAOS* taos) {
+ TAOS_RES* result = taos_query(taos, "drop database if exists test;");
+ taos_free_result(result);
+ usleep(100000);
+ result = taos_query(taos, "create database test;");
+
+ int code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create database, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+ taos_free_result(result);
+
+ usleep(100000);
+ taos_select_db(taos, "test");
+
+ // create table
+ const char* sql =
+ "create stable st1 (ts timestamp, b bool, v1 tinyint, v2 smallint, v4 int, v8 bigint, f4 float, f8 double, bin "
+ "binary(40), blob nchar(10)) tags (id1 int, id2 binary(40))";
+ result = taos_query(taos, sql);
+ code = taos_errno(result);
+ if (code != 0) {
+ printf("\033[31mfailed to create table, reason:%s\033[0m\n", taos_errstr(result));
+ taos_free_result(result);
+ return;
+ }
+ taos_free_result(result);
+
+ TAOS_MULTI_BIND tags[2];
+
+ int32_t id1 = 1;
+ char id2[40] = "abcdefghijklmnopqrstuvwxyz0123456789";
+ int32_t id2_len = (int32_t)strlen(id2);
+
+ tags[0].buffer_type = TSDB_DATA_TYPE_INT;
+ tags[0].buffer_length = sizeof(int);
+ tags[0].buffer = &id1;
+ tags[0].length = NULL;
+ tags[0].is_null = NULL;
+ tags[0].num = 1;
+
+ tags[1].buffer_type = TSDB_DATA_TYPE_BINARY;
+ tags[1].buffer_length = sizeof(id2);
+ tags[1].buffer = id2;
+ tags[1].length = &id2_len;
+ tags[1].is_null = NULL;
+ tags[1].num = 1;
+
+ // insert 10 records
+ struct {
+ int64_t ts[10];
+ int8_t b[10];
+ int8_t v1[10];
+ int16_t v2[10];
+ int32_t v4[10];
+ int64_t v8[10];
+ float f4[10];
+ double f8[10];
+ char bin[10][40];
+ char blob[10][80];
+ } v;
+
+ int32_t* t8_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t16_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t32_len = malloc(sizeof(int32_t) * 10);
+ int32_t* t64_len = malloc(sizeof(int32_t) * 10);
+ int32_t* float_len = malloc(sizeof(int32_t) * 10);
+ int32_t* double_len = malloc(sizeof(int32_t) * 10);
+ int32_t* bin_len = malloc(sizeof(int32_t) * 10);
+ int32_t* blob_len = malloc(sizeof(int32_t) * 10);
+
+ TAOS_STMT* stmt = taos_stmt_init(taos);
+ TAOS_MULTI_BIND params[10];
+ char is_null[10] = {0};
+
+ params[0].buffer_type = TSDB_DATA_TYPE_TIMESTAMP;
+ params[0].buffer_length = sizeof(v.ts[0]);
+ params[0].buffer = v.ts;
+ params[0].length = t64_len;
+ params[0].is_null = is_null;
+ params[0].num = 10;
+
+ params[1].buffer_type = TSDB_DATA_TYPE_BOOL;
+ params[1].buffer_length = sizeof(v.b[0]);
+ params[1].buffer = v.b;
+ params[1].length = t8_len;
+ params[1].is_null = is_null;
+ params[1].num = 10;
+
+ params[2].buffer_type = TSDB_DATA_TYPE_TINYINT;
+ params[2].buffer_length = sizeof(v.v1[0]);
+ params[2].buffer = v.v1;
+ params[2].length = t8_len;
+ params[2].is_null = is_null;
+ params[2].num = 10;
+
+ params[3].buffer_type = TSDB_DATA_TYPE_SMALLINT;
+ params[3].buffer_length = sizeof(v.v2[0]);
+ params[3].buffer = v.v2;
+ params[3].length = t16_len;
+ params[3].is_null = is_null;
+ params[3].num = 10;
+
+ params[4].buffer_type = TSDB_DATA_TYPE_INT;
+ params[4].buffer_length = sizeof(v.v4[0]);
+ params[4].buffer = v.v4;
+ params[4].length = t32_len;
+ params[4].is_null = is_null;
+ params[4].num = 10;
+
+ params[5].buffer_type = TSDB_DATA_TYPE_BIGINT;
+ params[5].buffer_length = sizeof(v.v8[0]);
+ params[5].buffer = v.v8;
+ params[5].length = t64_len;
+ params[5].is_null = is_null;
+ params[5].num = 10;
+
+ params[6].buffer_type = TSDB_DATA_TYPE_FLOAT;
+ params[6].buffer_length = sizeof(v.f4[0]);
+ params[6].buffer = v.f4;
+ params[6].length = float_len;
+ params[6].is_null = is_null;
+ params[6].num = 10;
+
+ params[7].buffer_type = TSDB_DATA_TYPE_DOUBLE;
+ params[7].buffer_length = sizeof(v.f8[0]);
+ params[7].buffer = v.f8;
+ params[7].length = double_len;
+ params[7].is_null = is_null;
+ params[7].num = 10;
+
+ params[8].buffer_type = TSDB_DATA_TYPE_BINARY;
+ params[8].buffer_length = sizeof(v.bin[0]);
+ params[8].buffer = v.bin;
+ params[8].length = bin_len;
+ params[8].is_null = is_null;
+ params[8].num = 10;
+
+ params[9].buffer_type = TSDB_DATA_TYPE_NCHAR;
+ params[9].buffer_length = sizeof(v.blob[0]);
+ params[9].buffer = v.blob;
+ params[9].length = blob_len;
+ params[9].is_null = is_null;
+ params[9].num = 10;
+
+ sql = "insert into ? using st1 tags(?,?) values(?,?,?,?,?,?,?,?,?,?)";
+ code = taos_stmt_prepare(stmt, sql, 0);
+ if (code != 0) {
+ printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ code = taos_stmt_set_tbname_tags(stmt, "m1", tags);
+ if (code != 0) {
+ printf("\033[31mfailed to execute taos_stmt_prepare. error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ int64_t ts = 1591060628000;
+ for (int i = 0; i < 10; ++i) {
+ v.ts[i] = ts++;
+ is_null[i] = 0;
+
+ v.b[i] = (int8_t)i % 2;
+ v.v1[i] = (int8_t)i;
+ v.v2[i] = (int16_t)(i * 2);
+ v.v4[i] = (int32_t)(i * 4);
+ v.v8[i] = (int64_t)(i * 8);
+ v.f4[i] = (float)(i * 40);
+ v.f8[i] = (double)(i * 80);
+ for (int j = 0; j < sizeof(v.bin[0]); ++j) {
+ v.bin[i][j] = (char)(i + '0');
+ }
+ strcpy(v.blob[i], "一二三四五六七八九十");
+
+ t8_len[i] = sizeof(int8_t);
+ t16_len[i] = sizeof(int16_t);
+ t32_len[i] = sizeof(int32_t);
+ t64_len[i] = sizeof(int64_t);
+ float_len[i] = sizeof(float);
+ double_len[i] = sizeof(double);
+ bin_len[i] = sizeof(v.bin[0]);
+ blob_len[i] = (int32_t)strlen(v.blob[i]);
+ }
+
+ taos_stmt_bind_param_batch(stmt, params);
+ taos_stmt_add_batch(stmt);
+
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute insert statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+ taos_stmt_close(stmt);
+
+ // query the records
+ stmt = taos_stmt_init(taos);
+ taos_stmt_prepare(stmt, "SELECT * FROM m1 WHERE v1 > ? AND v2 < ?", 0);
+
+ TAOS_MULTI_BIND qparams[2];
+
+ int8_t v1 = 5;
+ int16_t v2 = 15;
+ int32_t tinyLen = sizeof(v1);
+ int32_t smallLen = sizeof(v2);
+
+ qparams[0].buffer_type = TSDB_DATA_TYPE_TINYINT;
+ qparams[0].buffer_length = sizeof(v1);
+ qparams[0].buffer = &v1;
+ qparams[0].length = &tinyLen;
+ qparams[0].is_null = NULL;
+ qparams[0].num = 1;
+
+ qparams[1].buffer_type = TSDB_DATA_TYPE_SMALLINT;
+ qparams[1].buffer_length = sizeof(v2);
+ qparams[1].buffer = &v2;
+ qparams[1].length = &smallLen;
+ qparams[1].is_null = NULL;
+ qparams[1].num = 1;
+
+ taos_stmt_bind_param(stmt, qparams);
+ if (taos_stmt_execute(stmt) != 0) {
+ printf("\033[31mfailed to execute select statement.error:%s\033[0m\n", taos_stmt_errstr(stmt));
+ taos_stmt_close(stmt);
+ return;
+ }
+
+ result = taos_stmt_use_result(stmt);
+
+ TAOS_ROW row;
+ int rows = 0;
+ int num_fields = taos_num_fields(result);
+ TAOS_FIELD* fields = taos_fetch_fields(result);
+
+ // fetch the records row by row
+ while ((row = taos_fetch_row(result))) {
+ char temp[256] = {0};
+ rows++;
+ taos_print_row(temp, row, fields, num_fields);
+ printf("%s\n", temp);
+ }
+
+ taos_free_result(result);
+ taos_stmt_close(stmt);
+
+ free(t8_len);
+ free(t16_len);
+ free(t32_len);
+ free(t64_len);
+ free(float_len);
+ free(double_len);
+ free(bin_len);
+ free(blob_len);
+}
+
+void retrieve_callback(void* param, TAOS_RES* tres, int numOfRows) {
+ if (numOfRows > 0) {
+ printf("%d rows async retrieved\n", numOfRows);
+ taos_fetch_rows_a(tres, retrieve_callback, param);
+ } else {
+ if (numOfRows < 0) {
+ printf("\033[31masync retrieve failed, code: %d\033[0m\n", numOfRows);
+ } else {
+ printf("async retrieve completed\n");
+ }
+ taos_free_result(tres);
+ }
+}
+
+void select_callback(void* param, TAOS_RES* tres, int code) {
+ if (code == 0 && tres) {
+ taos_fetch_rows_a(tres, retrieve_callback, param);
+ } else {
+ printf("\033[31masync select failed, code: %d\033[0m\n", code);
+ }
+}
+
+void verify_async(TAOS* taos) {
+ prepare_data(taos);
+ taos_query_a(taos, "select * from meters", select_callback, NULL);
+ usleep(1000000);
+}
+
+void stream_callback(void* param, TAOS_RES* res, TAOS_ROW row) {
+ if (res == NULL || row == NULL) {
+ return;
+ }
+
+ int num_fields = taos_num_fields(res);
+ TAOS_FIELD* fields = taos_fetch_fields(res);
+
+ printf("got one row from stream_callback\n");
+ char temp[256] = {0};
+ taos_print_row(temp, row, fields, num_fields);
+ puts(temp);
+}
+
+int main(int argc, char* argv[]) {
+ const char* host = "127.0.0.1";
+ const char* user = "root";
+ const char* passwd = "taosdata";
+
+ taos_options(TSDB_OPTION_TIMEZONE, "GMT-8");
+ TAOS* taos = taos_connect(host, user, passwd, "", 0);
+ if (taos == NULL) {
+ printf("\033[31mfailed to connect to db, reason:%s\033[0m\n", taos_errstr(taos));
+ exit(1);
+ }
+
+ const char* info = taos_get_server_info(taos);
+ printf("server info: %s\n", info);
+ info = taos_get_client_info(taos);
+ printf("client info: %s\n", info);
+
+ printf("************ verify query *************\n");
+ verify_query(taos);
+
+ printf("********* verify async query **********\n");
+ verify_async(taos);
+
+ printf("************ verify prepare *************\n");
+ verify_prepare(taos);
+
+ printf("************ verify prepare2 *************\n");
+ verify_prepare2(taos);
+ printf("************ verify prepare3 *************\n");
+ verify_prepare3(taos);
+
+ printf("done\n");
+ taos_close(taos);
+ taos_cleanup();
+}
diff --git a/examples/c/demoapi.c b/tests/script/api/demoapi.c
similarity index 99%
rename from examples/c/demoapi.c
rename to tests/script/api/demoapi.c
index 18f1b5a059..6c060a6325 100644
--- a/examples/c/demoapi.c
+++ b/tests/script/api/demoapi.c
@@ -21,7 +21,6 @@
#ifndef WINDOWS
#include
#endif
-#include "osSleep.h"
#include "taos.h"
#define debugPrint(fmt, ...) \
@@ -81,11 +80,9 @@ static void prepare_data(TAOS* taos) {
TAOS_RES *res;
res = taos_query(taos, "drop database if exists test;");
taos_free_result(res);
- taosMsleep(100);
res = taos_query(taos, "create database test;");
taos_free_result(res);
- taosMsleep(100);
if (taos_select_db(taos, "test")) {
errorPrint("%s() LN%d: taos_select_db() failed\n",
__func__, __LINE__);
diff --git a/tests/script/sh/compile_udf.sh b/tests/script/sh/compile_udf.sh
index c7148d7d7d..5265e5a99b 100755
--- a/tests/script/sh/compile_udf.sh
+++ b/tests/script/sh/compile_udf.sh
@@ -1,10 +1,11 @@
set +e
-rm -rf /tmp/udf/libbitand.so /tmp/udf/libsqrsum.so
+rm -rf /tmp/udf/libbitand.so /tmp/udf/libsqrsum.so /tmp/udf/libgpd.so
mkdir -p /tmp/udf
echo "compile udf bit_and and sqr_sum"
gcc -fPIC -shared sh/bit_and.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libbitand.so
gcc -fPIC -shared sh/l2norm.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libl2norm.so
+gcc -fPIC -shared sh/gpd.c -I../../include/libs/function/ -I../../include/client -I../../include/util -o /tmp/udf/libgpd.so
echo "debug show /tmp/udf/*.so"
ls /tmp/udf/*.so
diff --git a/tests/script/sh/gpd.c b/tests/script/sh/gpd.c
index 8d69bacb5e..2259efa64a 100644
--- a/tests/script/sh/gpd.c
+++ b/tests/script/sh/gpd.c
@@ -12,13 +12,10 @@
TAOS* taos = NULL;
DLL_EXPORT int32_t gpd_init() {
- taos = taos_connect("localhost", "root", "taosdata", "", 7100);
return 0;
}
DLL_EXPORT int32_t gpd_destroy() {
- taos_close(taos);
- taos_cleanup();
return 0;
}
@@ -32,43 +29,18 @@ DLL_EXPORT int32_t gpd(SUdfDataBlock* block, SUdfColumn *resultCol) {
SUdfColumnData *resultData = &resultCol->colData;
resultData->numOfRows = block->numOfRows;
for (int32_t i = 0; i < resultData->numOfRows; ++i) {
- int j = 0;
- for (; j < block->numOfCols; ++j) {
- if (udfColDataIsNull(block->udfCols[j], i)) {
- udfColDataSetNull(resultCol, i);
- break;
- }
- }
- if ( j == block->numOfCols) {
- int32_t luckyNum = 88;
- udfColDataSet(resultCol, i, (char *)&luckyNum, false);
- }
+ int64_t* calc_ts = (int64_t*)udfColDataGetData(block->udfCols[0], i);
+ char* varTbname = udfColDataGetData(block->udfCols[1], i);
+ char* varDbname = udfColDataGetData(block->udfCols[2], i);
+
+ char dbName[256] = {0};
+ char tblName[256] = {0};
+ memcpy(dbName, varDataVal(varDbname), varDataLen(varDbname));
+ memcpy(tblName, varDataVal(varTbname), varDataLen(varTbname));
+ printf("%s, %s\n", dbName, tblName);
+ int32_t result = 0;
+ udfColDataSet(resultCol, i, (char*)&result, false);
}
- TAOS_RES* res = taos_query(taos, "create database if not exists gpd");
- if (taos_errno(res) != 0) {
- char* errstr = taos_errstr(res);
- }
- res = taos_query(taos, "create table gpd.st (ts timestamp, f int) tags(t int)");
- if (taos_errno(res) != 0) {
- char* errstr = taos_errstr(res);
- }
- taos_query(taos, "insert into gpd.t using gpd.st tags(1) values(now, 1) ");
- if (taos_errno(res) != 0) {
- char* errstr = taos_errstr(res);
- }
-
- taos_query(taos, "select * from gpd.t");
- if (taos_errno(res) != 0) {
- char* errstr = taos_errstr(res);
- }
-
- //to simulate actual processing delay by udf
-#ifdef LINUX
- usleep(1 * 1000); // usleep takes sleep time in us (1 millionth of a second)
-#endif
-#ifdef WINDOWS
- Sleep(1);
-#endif
return 0;
}
diff --git a/tests/script/tmp/data.sim b/tests/script/tmp/data.sim
index cdabc97c09..e3bfe23c3d 100644
--- a/tests/script/tmp/data.sim
+++ b/tests/script/tmp/data.sim
@@ -3,6 +3,9 @@ system sh/deploy.sh -n dnode1 -i 1
system sh/deploy.sh -n dnode2 -i 2
system sh/deploy.sh -n dnode3 -i 3
system sh/deploy.sh -n dnode4 -i 4
+system sh/deploy.sh -n dnode5 -i 5
+system sh/deploy.sh -n dnode6 -i 6
+system sh/deploy.sh -n dnode7 -i 7
system sh/cfg.sh -n dnode1 -c supportVnodes -v 0
system sh/exec.sh -n dnode1 -s start
system sh/exec.sh -n dnode2 -s start
@@ -14,6 +17,9 @@ print =============== step1: create dnodes
sql create dnode $hostname port 7200
sql create dnode $hostname port 7300
sql create dnode $hostname port 7400
+sql create dnode $hostname port 7500
+sql create dnode $hostname port 7600
+sql create dnode $hostname port 7700
$x = 0
step1:
@@ -29,7 +35,7 @@ print ===> $data00 $data01 $data02 $data03 $data04 $data05
print ===> $data10 $data11 $data12 $data13 $data14 $data15
print ===> $data20 $data21 $data22 $data23 $data24 $data25
print ===> $data30 $data31 $data32 $data33 $data24 $data35
-if $rows != 4 then
+if $rows != 7 then
return -1
endi
if $data(1)[4] != ready then
diff --git a/tests/script/tsim/db/alter_option.sim b/tests/script/tsim/db/alter_option.sim
index 63018aea8c..f4392fbca4 100644
--- a/tests/script/tsim/db/alter_option.sim
+++ b/tests/script/tsim/db/alter_option.sim
@@ -69,7 +69,7 @@ endi
if $data4_db != 3 then # replica
return -1
endi
-if $data5_db != off then # strict
+if $data5_db != on then # strict
return -1
endi
if $data6_db != 345600m then # duration
diff --git a/tests/script/tsim/db/create_all_options.sim b/tests/script/tsim/db/create_all_options.sim
index 7012fbac6c..382cc986e2 100644
--- a/tests/script/tsim/db/create_all_options.sim
+++ b/tests/script/tsim/db/create_all_options.sim
@@ -89,7 +89,7 @@ if $data4_db != 1 then # replica
print expect 1, actual: $data4_db
return -1
endi
-if $data5_db != off then # strict
+if $data5_db != on then # strict
return -1
endi
if $data6_db != 14400m then # duration
diff --git a/tests/script/tsim/query/udf_with_const.sim b/tests/script/tsim/query/udf_with_const.sim
new file mode 100644
index 0000000000..7a2a3389bd
--- /dev/null
+++ b/tests/script/tsim/query/udf_with_const.sim
@@ -0,0 +1,45 @@
+system_content printf %OS%
+if $system_content == Windows_NT then
+ return 0;
+endi
+
+system sh/stop_dnodes.sh
+system sh/deploy.sh -n dnode1 -i 1
+system sh/cfg.sh -n dnode1 -c udf -v 1
+system sh/exec.sh -n dnode1 -s start
+sql connect
+
+print ======== step1 udf
+system sh/compile_udf.sh
+sql create database udf vgroups 3;
+sql use udf;
+
+sql create table t (ts timestamp, f int);
+sql insert into t values(now, 1)(now+1s, 2)(now+2s,3)(now+3s,4)(now+4s,5)(now+5s,6)(now+6s,7);
+
+system_content printf %OS%
+if $system_content == Windows_NT then
+ return 0;
+endi
+
+if $system_content == Windows_NT then
+ sql create function gpd as 'C:\\Windows\\Temp\\gpd.dll' outputtype int bufSize 8;
+else
+ sql create function gpd as '/tmp/udf/libgpd.so' outputtype int bufSize 8;
+endi
+sql show functions;
+if $rows != 1 then
+ return -1
+endi
+
+sql select gpd(ts, tbname, 'detail') from t;
+if $rows != 7 then
+ return -1
+endi
+print $data00 $data10
+if $data00 != @0@ then
+ return -1
+endi
+sql drop function gpd;
+
+system sh/exec.sh -n dnode1 -s stop -x SIGINT
diff --git a/tests/script/tsim/stream/basic1.sim b/tests/script/tsim/stream/basic1.sim
index bb2ea42383..7bf10df637 100644
--- a/tests/script/tsim/stream/basic1.sim
+++ b/tests/script/tsim/stream/basic1.sim
@@ -792,4 +792,46 @@ if $rows != 1 then
goto loop17
endi
+#for TS-2242
+sql create database test5 vgroups 1;
+sql use test5;
+sql create stable st(ts timestamp, a int, b int , c int) tags(ta int,tb int,tc int);
+sql create table ts1 using st tags(1,1,1);
+sql create stream streams5 trigger at_once into streamt5 as select count(*), _wstart, _wend, max(a) from ts1 interval(10s) ;
+sql create stream streams6 trigger at_once into streamt6 as select count(*), _wstart, _wend, max(a), _wstart as ts from ts1 interval(10s) ;
+
+sql_error create stream streams7 trigger at_once into streamt7 as select _wstart, count(*), _wstart, _wend, max(a) from ts1 interval(10s) ;
+sql_error create stream streams8 trigger at_once into streamt8 as select count(*), _wstart, _wstart, _wend, max(a) from ts1 interval(10s) ;
+sql_error create stream streams9 trigger at_once into streamt9 as select _wstart as ts, count(*), _wstart as ts, _wend, max(a) from ts1 interval(10s) ;
+
+sql insert into ts1 values(1648791211000,1,2,3);
+
+print ====== test _wstart
+
+$loop_count = 0
+
+loop17:
+
+sleep 200
+sql select * from streamt5;
+
+$loop_count = $loop_count + 1
+if $loop_count == 10 then
+ return -1
+endi
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop17
+endi
+
+sql select * from streamt6;
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop17
+endi
+
+print ====== test _wstart end
+
system sh/exec.sh -n dnode1 -s stop -x SIGINT
diff --git a/tests/script/tsim/stream/drop_stream.sim b/tests/script/tsim/stream/drop_stream.sim
index 817780ca59..1a474bd9ae 100644
--- a/tests/script/tsim/stream/drop_stream.sim
+++ b/tests/script/tsim/stream/drop_stream.sim
@@ -219,7 +219,7 @@ sql drop database test;
print ========== interval\session\state window
-sql CREATE DATABASE test1 BUFFER 96 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 STRICT 'off' WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0;
+sql CREATE DATABASE test1 BUFFER 96 CACHESIZE 1 CACHEMODEL 'none' COMP 2 DURATION 14400m WAL_FSYNC_PERIOD 3000 MAXROWS 4096 MINROWS 100 KEEP 5256000m,5256000m,5256000m PAGES 256 PAGESIZE 4 PRECISION 'ms' REPLICA 1 WAL_LEVEL 1 VGROUPS 2 SINGLE_STABLE 0;
sql use test1;
sql CREATE STABLE st (time TIMESTAMP, ca DOUBLE, cb DOUBLE, cc int) TAGS (ta VARCHAR(10) );
diff --git a/tests/system-test/0-others/compatibility.py b/tests/system-test/0-others/compatibility.py
index cd4acae438..7220088369 100644
--- a/tests/system-test/0-others/compatibility.py
+++ b/tests/system-test/0-others/compatibility.py
@@ -68,6 +68,7 @@ class TDTestCase:
my_file = Path(f"{packagePath}/{packageName}")
if not my_file.exists():
print(f"{packageName} is not exists")
+ tdLog.info(f"cd {packagePath} && wget https://www.tdengine.com/assets-download/3.0/{packageName}")
os.system(f"cd {packagePath} && wget https://www.tdengine.com/assets-download/3.0/{packageName}")
else:
print(f"{packageName} has been exists")
diff --git a/tests/system-test/1-insert/drop.py b/tests/system-test/1-insert/drop.py
index f8796bcf6a..c15a9bbc35 100644
--- a/tests/system-test/1-insert/drop.py
+++ b/tests/system-test/1-insert/drop.py
@@ -132,7 +132,7 @@ class TDTestCase:
tdSql.execute(f'drop database {self.dbname}')
def drop_stream_check(self):
- tdSql.execute(f'create database {self.dbname} replica {self.replicaVar}')
+ tdSql.execute(f'create database {self.dbname} replica 1')
tdSql.execute(f'use {self.dbname}')
stbname = tdCom.getLongName(5,"letters")
stream_name = tdCom.getLongName(5,"letters")
@@ -158,4 +158,4 @@ class TDTestCase:
tdLog.success("%s successfully executed" % __file__)
tdCases.addWindows(__file__, TDTestCase())
-tdCases.addLinux(__file__, TDTestCase())
\ No newline at end of file
+tdCases.addLinux(__file__, TDTestCase())
diff --git a/tests/system-test/2-query/db.py b/tests/system-test/2-query/db.py
index 7fe8b96157..d79e2074dd 100644
--- a/tests/system-test/2-query/db.py
+++ b/tests/system-test/2-query/db.py
@@ -42,16 +42,36 @@ class TDTestCase:
tdSql.query("select count(c1) from dbns.ntb interval(1b)")
tdSql.checkRows(2)
+
+ def case2(self):
+ tdSql.query("show variables")
+ tdSql.checkRows(4)
+
+ for i in range(self.replicaVar):
+ tdSql.query("show dnode %d variables like 'debugFlag'" % (i + 1))
+ tdSql.checkRows(1)
+ tdSql.checkData(0, 0, i + 1)
+ tdSql.checkData(0, 1, 'debugFlag')
+ tdSql.checkData(0, 2, 0)
+
+ tdSql.query("show dnode 1 variables like '%debugFlag'")
+ tdSql.checkRows(21)
+
+ tdSql.query("show dnode 1 variables like '____debugFlag'")
+ tdSql.checkRows(2)
def run(self): # sourcery skip: extract-duplicate-method, remove-redundant-fstring
- tdSql.prepare()
+ tdSql.prepare(replica = self.replicaVar)
+
tdLog.printNoPrefix("==========start case1 run ...............")
-
self.case1()
-
tdLog.printNoPrefix("==========end case1 run ...............")
+ tdLog.printNoPrefix("==========start case2 run ...............")
+ self.case2()
+ tdLog.printNoPrefix("==========end case2 run ...............")
+
def stop(self):
tdSql.close()
tdLog.success(f"{__file__} successfully executed")
diff --git a/tests/system-test/2-query/insert_null_none.py b/tests/system-test/2-query/insert_null_none.py
new file mode 100755
index 0000000000..cf5636fb1f
--- /dev/null
+++ b/tests/system-test/2-query/insert_null_none.py
@@ -0,0 +1,2579 @@
+###################################################################
+# Copyright (c) 2016 by TAOS Technologies, Inc.
+# All rights reserved.
+#
+# This file is proprietary and confidential to TAOS Technologies.
+# No part of this file may be reproduced, stored, transmitted,
+# disclosed or used in any form or by any means other than as
+# expressly provided by the written permission from Jianhui Tao
+#
+###################################################################
+
+# -*- coding: utf-8 -*-
+
+import random
+import os
+import time
+import taos
+import subprocess
+from faker import Faker
+from util.log import tdLog
+from util.cases import tdCases
+from util.sql import tdSql
+from util.dnodes import tdDnodes
+from util.dnodes import *
+
+class TDTestCase:
+ updatecfgDict = {'maxSQLLength':1048576,'debugFlag': 143 ,"querySmaOptimize":1}
+
+ def init(self, conn, logSql, replicaVar):
+ tdLog.debug("start to execute %s" % __file__)
+ tdSql.init(conn.cursor(), logSql)
+
+ self.testcasePath = os.path.split(__file__)[0]
+ self.testcaseFilename = os.path.split(__file__)[-1]
+ os.system("rm -rf %s/%s.sql" % (self.testcasePath,self.testcaseFilename))
+
+ self.db = "insert_null_none"
+
+ def dropandcreateDB_random(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ tdSql.execute('''drop database if exists %s ;''' %database)
+ tdSql.execute('''create database %s keep 36500 ;'''%(database))
+ tdSql.execute('''use %s;'''%database)
+
+ tdSql.execute('''create stable %s.stable_1 (ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint , q_float float , q_double double , q_bool bool , q_binary binary(100) , q_nchar nchar(100) , q_ts timestamp , \
+ q_int_null int , q_bigint_null bigint , q_smallint_null smallint , q_tinyint_null tinyint, q_float_null float , q_double_null double , q_bool_null bool , q_binary_null binary(20) , q_nchar_null nchar(20) , q_ts_null timestamp) \
+ tags(loc nchar(100) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint, t_bool bool , t_binary binary(100) , t_nchar nchar(100) ,t_float float , t_double double , t_ts timestamp);'''%database)
+ tdSql.execute('''create stable %s.stable_2 (ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint , q_float float , q_double double , q_bool bool , q_binary binary(100) , q_nchar nchar(100) , q_ts timestamp , \
+ q_int_null int , q_bigint_null bigint , q_smallint_null smallint , q_tinyint_null tinyint, q_float_null float , q_double_null double , q_bool_null bool , q_binary_null binary(20) , q_nchar_null nchar(20) , q_ts_null timestamp) \
+ tags(loc nchar(100) , t_int int , t_bigint bigint , t_smallint smallint , t_tinyint tinyint, t_bool bool , t_binary binary(100) , t_nchar nchar(100) ,t_float float , t_double double , t_ts timestamp);'''%database)
+
+ for i in range(num_random):
+ tdSql.execute('''create table %s.table_%d \
+ (ts timestamp , q_int int , q_bigint bigint , q_smallint smallint , q_tinyint tinyint , q_float float , q_double double , q_bool bool , q_binary binary(100) , q_nchar nchar(100) , q_ts timestamp ) ;'''%(database,i))
+ tdSql.execute('''create table %s.stable_1_%d using %s.stable_1 tags('stable_1_%d', '%d' , '%d', '%d' , '%d' , 1 , 'binary1.%s' , 'nchar1.%s' , '%f', '%f' ,'%d') ;'''
+ %(database,i,database,i,fake.random_int(min=-2147483647, max=2147483647, step=1), fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pystr() ,fake.pystr() ,fake.pyfloat(),fake.pyfloat(),fake.random_int(min=-2147483647, max=2147483647, step=1)))
+
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.query("select count(*) from %s.stable_1;" %database)
+ tdSql.checkData(0,0,num_random*n)
+ tdSql.query("select count(*) from %s.table_0;"%database)
+ tdSql.checkData(0,0,n)
+
+ def qint_none(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qint_null(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qint_none_null(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qint_none_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qint_null_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qint_none_null_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %s, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8, 'NULL',
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qbigint_none(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbigint_null(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1), 'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1), 'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbigint_none_null(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1), 'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbigint_none_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbigint_null_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qbigint_none_null_value(self,database,n):
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %s, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),'NULL',
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qsmallint_none(self,database,n):
+ tdLog.info("qsmallint_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qsmallint_null(self,database,n):
+ tdLog.info("qsmallint_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qsmallint_none_null(self,database,n):
+ tdLog.info("qsmallint_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , 'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qsmallint_none_value(self,database,n):
+ tdLog.info("qsmallint_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qsmallint_null_value(self,database,n):
+ tdLog.info("qsmallint_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qsmallint_none_null_value(self,database,n):
+ tdLog.info("qsmallint_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , 'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %s, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) ,'NULL', fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+
+ def qtinyint_none(self,database,n):
+ tdLog.info("qtinyint_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qtinyint_null(self,database,n):
+ tdLog.info("qtinyint_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qtinyint_none_null(self,database,n):
+ tdLog.info("qtinyint_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qtinyint_none_value(self,database,n):
+ tdLog.info("qtinyint_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qtinyint_null_value(self,database,n):
+ tdLog.info("qtinyint_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qtinyint_none_null_value(self,database,n):
+ tdLog.info("qtinyint_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %s, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qfloat_none(self,database,n):
+ tdLog.info("qfloat_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qfloat_null(self,database,n):
+ tdLog.info("qfloat_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) , 'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qfloat_none_null(self,database,n):
+ tdLog.info("qfloat_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qfloat_none_value(self,database,n):
+ tdLog.info("qfloat_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qfloat_null_value(self,database,n):
+ tdLog.info("qfloat_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qfloat_none_null_value(self,database,n):
+ tdLog.info("qfloat_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %s, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,'NULL',
+ fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qdouble_none(self,database,n):
+ tdLog.info("qdouble_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qdouble_null(self,database,n):
+ tdLog.info("qdouble_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ def qdouble_none_null(self,database,n):
+ tdLog.info("qdouble_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL' , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qdouble_none_value(self,database,n):
+ tdLog.info("qdouble_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qdouble_null_value(self,database,n):
+ tdLog.info("qdouble_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1),
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1),
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qdouble_none_null_value(self,database,n):
+ tdLog.info("qdouble_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %s, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+
+
+
+
+ def qbinary_none(self,database,n):
+ tdLog.info("qbinary_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ def qbinary_null(self,database,n):
+ tdLog.info("qbinary_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %s, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL', fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %s, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL', fake.pystr() , ts + i ))
+
+ def qbinary_none_null(self,database,n):
+ tdLog.info("qbinary_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL', fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL', fake.pystr() , ts + i ))
+
+ def qbinary_none_value(self,database,n):
+ tdLog.info("qbinary_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbinary_null_value(self,database,n):
+ tdLog.info("qbinary_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL', fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , ts + i ))
+
+
+ def qbinary_none_null_value(self,database,n):
+ tdLog.info("qbinary_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,'NULL' , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, %s, 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat(), 'NULL' , fake.pystr() , ts + i ))
+
+
+
+ def qnchar_none(self,database,n):
+ tdLog.info("qnchar_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ def qnchar_null(self,database,n):
+ tdLog.info("qnchar_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() , 'NULL', ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() , 'NULL', ts + i ))
+
+ def qnchar_none_null(self,database,n):
+ tdLog.info("qnchar_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() ,'NULL', ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() ,'NULL', ts + i ))
+
+ def qnchar_none_value(self,database,n):
+ tdLog.info("qnchar_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary ,q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qnchar_null_value(self,database,n):
+ tdLog.info("qnchar_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() , 'NULL', ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s',%s, %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,fake.pystr() ,'NULL', ts + i ))
+
+
+ def qnchar_none_null_value(self,database,n):
+ tdLog.info("qnchar_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary , q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %s , %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() , 'NULL' , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', %s , %d) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat(), fake.pystr() , 'NULL' , ts + i ))
+
+ def qts_none(self,database,n):
+ tdLog.info("qts_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary, q_nchar)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_nchar) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ def qts_null(self,database,n):
+ tdLog.info("qts_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr(),fake.pystr() , 'NULL'))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr(),fake.pystr() , 'NULL' ))
+
+ def qts_none_null(self,database,n):
+ tdLog.info("qts_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary, q_nchar)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_nchar) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr(),'NULL'))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr(),'NULL' ))
+
+ def qts_none_value(self,database,n):
+ tdLog.info("qts_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary, q_nchar)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary, q_nchar) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qts_null_value(self,database,n):
+ tdLog.info("qts_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s','nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() ,fake.pystr(), 'NULL'))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s','nchar.%s', %s) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,fake.pystr() ,fake.pystr(),'NULL' ))
+
+
+ def qts_none_null_value(self,database,n):
+ tdLog.info("qts_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_bool , q_binary , q_nchar)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr()))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s') ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s' , %s) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() ,fake.pystr() ,fake.pystr() , 'NULL' ))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s' , %s) ;'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat(), fake.pystr() ,fake.pystr() , 'NULL' ))
+
+
+ def qbool_none(self,database,n):
+ tdLog.info("qbool_none")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat(), fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +1,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat(), fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbool_null(self,database,n):
+ tdLog.info("qbool_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +2,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbool_none_null(self,database,n):
+ tdLog.info("qbool_none_null")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +3,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +4,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbool_none_value(self,database,n):
+ tdLog.info("qbool_none_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d);'''
+ % (database,i,ts + i*1000 + j + 5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +5,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat(), fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ def qbool_null_value(self,database,n):
+ tdLog.info("qbool_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %d, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(), fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1),
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +6,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1),
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+
+ def qbool_none_null_value(self,database,n):
+ tdLog.info("qbool_none_null_value")
+ ts = 1630000000000
+ num_random = 10
+ fake = Faker('zh_CN')
+ # insert data
+ for i in range(num_random):
+ for j in range(n):
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j + 7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float, q_double , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j +7,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.random_int(min=-127, max=127, step=1) , fake.pyfloat() , fake.pyfloat(), fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double, q_bool , q_binary , q_nchar, q_ts)\
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, 0, 'binary.%s', 'nchar.%s', %d) ;'''
+ % (database,i,ts + i*1000 + j, fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-9223372036854775807, max=9223372036854775807, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() , fake.pyfloat() , fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.stable_1_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d );'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat(),fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ tdSql.execute('''insert into %s.table_%d (ts , q_int , q_bigint , q_smallint , q_tinyint , q_float , q_double , q_bool , q_binary , q_nchar, q_ts) \
+ values(%d, %d, %d, %d, %d, %f, %f, %s, 'binary.%s', 'nchar.%s', %d );'''
+ % (database,i,ts + i*1000 + j + 8,
+ fake.random_int(min=-2147483647, max=2147483647, step=1),
+ fake.random_int(min=-32767, max=32767, step=1) , fake.random_int(min=-127, max=127, step=1) , fake.random_int(min=-127, max=127, step=1) ,
+ fake.pyfloat() ,fake.pyfloat() ,'NULL', fake.pystr() , fake.pystr() , ts + i ))
+
+ def sqls(self,database):
+ sql = "select * from %s.stable_1 ;" %database
+ tdSql.query(sql)
+ sql = "select * from %s.table_1 ;" %database
+ tdSql.query(sql)
+
+ sql1 = "select count(*) from %s.stable_1 ;" %database
+ tdSql.query(sql1)
+ sql1_value = tdSql.getData(0,0)
+
+ sql2 = "select count(ts) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql2)
+
+ sql3 = "select count(q_int) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql3)
+
+ sql4 = "select count(q_bigint) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql4)
+
+ sql5 = "select count(q_smallint) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql5)
+
+ sql6 = "select count(q_tinyint) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql6)
+
+ sql7 = "select count(q_float) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql7)
+
+ sql8 = "select count(q_double) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql8)
+
+ sql9 = "select count(q_bool) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql9)
+
+ sql10 = "select count(q_binary) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql10)
+
+ sql11 = "select count(q_nchar) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql11)
+
+ sql12 = "select count(q_ts) from %s.stable_1 ;" %database
+ self.constant_check(sql1,sql12)
+
+ def check_flushdb(self,database):
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qint_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qbigint_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbigint_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbigint_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbigint_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbigint_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbigint_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qsmallint_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qsmallint_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qsmallint_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qsmallint_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qsmallint_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qsmallint_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qtinyint_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qtinyint_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qtinyint_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qtinyint_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qtinyint_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qtinyint_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qfloat_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qfloat_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qfloat_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qfloat_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qfloat_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qfloat_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qdouble_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qdouble_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qdouble_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qdouble_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qdouble_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qdouble_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbinary_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qnchar_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qts_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qts_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qts_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qts_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qts_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qts_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ self.qbool_none(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbool_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbool_none_null(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbool_none_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbool_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+ self.qbool_none_null_value(database, 10);
+ self.sqls(database);
+ tdSql.execute(" flush database %s;" %database)
+ tdLog.info("flush database success")
+ self.sqls(database);
+
+
+ def constant_check(self,sql1,sql2):
+ tdLog.info("\n=============sql1:(%s)___sql2:(%s) ====================\n" %(sql1,sql2))
+ tdSql.query(sql1)
+ sql1_value = tdSql.getData(0,0)
+ tdSql.query(sql2)
+ sql2_value = tdSql.getData(0,0)
+ self.value_check(sql1_value,sql2_value)
+
+ def value_check(self,base_value,check_value):
+ if base_value==check_value:
+ tdLog.info(f"checkEqual success, base_value={base_value},check_value={check_value}")
+ elif base_value > check_value:
+ tdLog.info(f"checkEqual success,but count not include NULL, base_value=={base_value},check_value={check_value}")
+ else :
+ tdLog.exit(f"checkEqual error, base_value=={base_value},check_value={check_value}")
+
+ def run(self):
+
+ startTime = time.time()
+
+ os.system("rm -rf %s/%s.sql" % (self.testcasePath,self.testcaseFilename))
+
+ self.dropandcreateDB_random("%s" %self.db, 10)
+
+ self.check_flushdb("%s" %self.db)
+
+
+ # #taos -f sql
+ # startTime1 = time.time()
+ # print("taos -f sql start!")
+ # taos_cmd1 = "taos -f %s/%s.sql" % (self.testcasePath,self.testcaseFilename)
+ # _ = subprocess.check_output(taos_cmd1, shell=True)
+ # print("taos -f sql over!")
+ # endTime1 = time.time()
+ # print("total time %ds" % (endTime1 - startTime1))
+
+ endTime = time.time()
+ print("total time %ds" % (endTime - startTime))
+
+
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success("%s successfully executed" % __file__)
+
+
+tdCases.addWindows(__file__, TDTestCase())
+tdCases.addLinux(__file__, TDTestCase())
diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py
index ce57357abd..5077b70d72 100644
--- a/tests/system-test/2-query/interp.py
+++ b/tests/system-test/2-query/interp.py
@@ -362,12 +362,12 @@ class TDTestCase:
tdSql.query(f"select interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:16', '2020-02-01 00:00:19') every(1s) fill(linear)")
tdSql.checkRows(0)
- tdLog.printNoPrefix("==========step8:test _irowts with interp")
+ tdLog.printNoPrefix("==========step8:test _irowts,_isfilled with interp")
# fill null
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(null)")
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(null)")
tdSql.checkRows(9)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
@@ -379,9 +379,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, False)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(null)")
tdSql.checkRows(13)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
@@ -397,9 +407,23 @@ class TDTestCase:
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(12, 0, '2020-02-01 00:00:16.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(null)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, False)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, False)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+ tdSql.checkData(9, 1, True)
+ tdSql.checkData(10, 1, True)
+ tdSql.checkData(11, 1, False)
+ tdSql.checkData(12, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(null)")
tdSql.checkRows(6)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
@@ -408,10 +432,16 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
# fill value
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(value, 1)")
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(value, 1)")
tdSql.checkRows(9)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
@@ -423,9 +453,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(value, 1)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, False)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(value, 1)")
tdSql.checkRows(13)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
@@ -441,9 +481,23 @@ class TDTestCase:
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(12, 0, '2020-02-01 00:00:16.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(value, 1)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, False)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, False)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+ tdSql.checkData(9, 1, True)
+ tdSql.checkData(10, 1, True)
+ tdSql.checkData(11, 1, False)
+ tdSql.checkData(12, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(value, 1)")
tdSql.checkRows(6)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
@@ -452,10 +506,17 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
+
# fill prev
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(prev)")
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(prev)")
tdSql.checkRows(9)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
@@ -467,9 +528,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(prev)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, False)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(prev)")
tdSql.checkRows(12)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:06.000')
@@ -484,9 +555,22 @@ class TDTestCase:
tdSql.checkData(10, 0, '2020-02-01 00:00:15.000')
tdSql.checkData(11, 0, '2020-02-01 00:00:16.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(prev)")
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+ tdSql.checkData(9, 1, True)
+ tdSql.checkData(10, 1, False)
+ tdSql.checkData(11, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(prev)")
tdSql.checkRows(6)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
@@ -495,10 +579,16 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
# fill next
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(next)")
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(next)")
tdSql.checkRows(9)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
@@ -510,9 +600,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, False)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(next)")
tdSql.checkRows(12)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:04.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:05.000')
@@ -527,9 +627,22 @@ class TDTestCase:
tdSql.checkData(10, 0, '2020-02-01 00:00:14.000')
tdSql.checkData(11, 0, '2020-02-01 00:00:15.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(next)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, False)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, False)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+ tdSql.checkData(9, 1, True)
+ tdSql.checkData(10, 1, True)
+ tdSql.checkData(11, 1, False)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(next)")
tdSql.checkRows(6)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
@@ -538,10 +651,17 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
+
# fill linear
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(linear)")
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:08', '2020-02-01 00:00:12') every(500a) fill(linear)")
tdSql.checkRows(9)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:08.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:08.500')
@@ -553,9 +673,19 @@ class TDTestCase:
tdSql.checkData(7, 0, '2020-02-01 00:00:11.500')
tdSql.checkData(8, 0, '2020-02-01 00:00:12.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
+ tdSql.checkData(0, 1, True)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, False)
+ tdSql.checkData(5, 1, True)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
tdSql.checkRows(11)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:06.000')
@@ -569,9 +699,21 @@ class TDTestCase:
tdSql.checkData(9, 0, '2020-02-01 00:00:14.000')
tdSql.checkData(10, 0, '2020-02-01 00:00:15.000')
- tdSql.query(f"select _irowts,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(linear)")
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
+ tdSql.checkData(6, 1, True)
+ tdSql.checkData(7, 1, True)
+ tdSql.checkData(8, 1, True)
+ tdSql.checkData(9, 1, True)
+ tdSql.checkData(10, 1, False)
+
+ tdSql.query(f"select _irowts,_isfilled,interp(c0) from {dbname}.{tbname} range('2020-02-01 00:00:05', '2020-02-01 00:00:15') every(2s) fill(linear)")
tdSql.checkRows(6)
- tdSql.checkCols(2)
+ tdSql.checkCols(3)
tdSql.checkData(0, 0, '2020-02-01 00:00:05.000')
tdSql.checkData(1, 0, '2020-02-01 00:00:07.000')
@@ -580,28 +722,47 @@ class TDTestCase:
tdSql.checkData(4, 0, '2020-02-01 00:00:13.000')
tdSql.checkData(5, 0, '2020-02-01 00:00:15.000')
- # multiple _irowts
- tdSql.query(f"select interp(c0),_irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
- tdSql.checkRows(11)
- tdSql.checkCols(2)
+ tdSql.checkData(0, 1, False)
+ tdSql.checkData(1, 1, True)
+ tdSql.checkData(2, 1, True)
+ tdSql.checkData(3, 1, True)
+ tdSql.checkData(4, 1, True)
+ tdSql.checkData(5, 1, False)
- tdSql.checkData(0, 1, '2020-02-01 00:00:05.000')
- tdSql.checkData(1, 1, '2020-02-01 00:00:06.000')
- tdSql.checkData(2, 1, '2020-02-01 00:00:07.000')
- tdSql.checkData(3, 1, '2020-02-01 00:00:08.000')
- tdSql.checkData(4, 1, '2020-02-01 00:00:09.000')
- tdSql.checkData(5, 1, '2020-02-01 00:00:10.000')
- tdSql.checkData(6, 1, '2020-02-01 00:00:11.000')
- tdSql.checkData(7, 1, '2020-02-01 00:00:12.000')
- tdSql.checkData(8, 1, '2020-02-01 00:00:13.000')
- tdSql.checkData(9, 1, '2020-02-01 00:00:14.000')
+ # multiple _irowts,_isfilled
+ tdSql.query(f"select interp(c0),_irowts,_isfilled from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
+ tdSql.checkRows(11)
+ tdSql.checkCols(3)
+
+ tdSql.checkData(0, 1, '2020-02-01 00:00:05.000')
+ tdSql.checkData(1, 1, '2020-02-01 00:00:06.000')
+ tdSql.checkData(2, 1, '2020-02-01 00:00:07.000')
+ tdSql.checkData(3, 1, '2020-02-01 00:00:08.000')
+ tdSql.checkData(4, 1, '2020-02-01 00:00:09.000')
+ tdSql.checkData(5, 1, '2020-02-01 00:00:10.000')
+ tdSql.checkData(6, 1, '2020-02-01 00:00:11.000')
+ tdSql.checkData(7, 1, '2020-02-01 00:00:12.000')
+ tdSql.checkData(8, 1, '2020-02-01 00:00:13.000')
+ tdSql.checkData(9, 1, '2020-02-01 00:00:14.000')
tdSql.checkData(10, 1, '2020-02-01 00:00:15.000')
- tdSql.query(f"select _irowts, interp(c0), interp(c0), _irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
- tdSql.checkRows(11)
- tdSql.checkCols(4)
+ tdSql.checkData(0, 2, False)
+ tdSql.checkData(1, 2, True)
+ tdSql.checkData(2, 2, True)
+ tdSql.checkData(3, 2, True)
+ tdSql.checkData(4, 2, True)
+ tdSql.checkData(5, 2, False)
+ tdSql.checkData(6, 2, True)
+ tdSql.checkData(7, 2, True)
+ tdSql.checkData(8, 2, True)
+ tdSql.checkData(9, 2, True)
+ tdSql.checkData(10, 2, False)
- cols = (0, 3)
+ tdSql.query(f"select _irowts, _isfilled, interp(c0), interp(c0), _isfilled, _irowts from {dbname}.{tbname} range('2020-02-01 00:00:04', '2020-02-01 00:00:16') every(1s) fill(linear)")
+ tdSql.checkRows(11)
+ tdSql.checkCols(6)
+
+ cols = (0, 5)
for i in cols:
tdSql.checkData(0, i, '2020-02-01 00:00:05.000')
tdSql.checkData(1, i, '2020-02-01 00:00:06.000')
@@ -615,6 +776,20 @@ class TDTestCase:
tdSql.checkData(9, i, '2020-02-01 00:00:14.000')
tdSql.checkData(10, i, '2020-02-01 00:00:15.000')
+ cols = (1, 4)
+ for i in cols:
+ tdSql.checkData(0, i, False)
+ tdSql.checkData(1, i, True)
+ tdSql.checkData(2, i, True)
+ tdSql.checkData(3, i, True)
+ tdSql.checkData(4, i, True)
+ tdSql.checkData(5, i, False)
+ tdSql.checkData(6, i, True)
+ tdSql.checkData(7, i, True)
+ tdSql.checkData(8, i, True)
+ tdSql.checkData(9, i, True)
+ tdSql.checkData(10, i, False)
+
tdLog.printNoPrefix("==========step9:test intra block interpolation")
tdSql.execute(f"drop database {dbname}");
diff --git a/tests/system-test/2-query/leastsquares.py b/tests/system-test/2-query/leastsquares.py
index 8ece4c46f0..1718802a82 100644
--- a/tests/system-test/2-query/leastsquares.py
+++ b/tests/system-test/2-query/leastsquares.py
@@ -19,12 +19,17 @@ BINARY_COL = "c8"
NCHAR_COL = "c9"
TS_COL = "c10"
-NUM_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, ]
+UINT_COL = "c11"
+UBINT_COL = "c12"
+USINT_COL = "c13"
+UTINT_COL = "c14"
+
+NUM_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, UINT_COL, UBINT_COL, USINT_COL, UTINT_COL]
CHAR_COL = [ BINARY_COL, NCHAR_COL, ]
BOOLEAN_COL = [ BOOL_COL, ]
TS_TYPE_COL = [ TS_COL, ]
-ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_COL, BINARY_COL, NCHAR_COL, TS_COL ]
+ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_COL, BINARY_COL, NCHAR_COL, TS_COL, UINT_COL, UBINT_COL, USINT_COL, UTINT_COL ]
DBNAME = "db"
class TDTestCase:
@@ -208,6 +213,13 @@ class TDTestCase:
tdLog.info(f"sql: {current_sqls[i]}")
tdSql.query(current_sqls[i])
+ def check_result(self):
+ for col in NUM_COL:
+ tdSql.query("select leastsquares(%s, 1, 9) from %s.stb1" % (col, DBNAME))
+ tdSql.checkRows(1)
+ res = tdSql.getData(0, 0)
+ if res is None:
+ tdLog.exit("result is not correct")
def __test_current(self):
# tdSql.query("explain select c1 from {dbname}.ct1")
@@ -236,6 +248,7 @@ class TDTestCase:
def all_test(self):
self.__test_error()
self.__test_current()
+ self.check_result()
def __create_tb(self, dbname=DBNAME):
@@ -243,13 +256,15 @@ class TDTestCase:
create_stb_sql = f'''create table {dbname}.stb1(
ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint,
{FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool,
- {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp
+ {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp, {UINT_COL} int unsigned,
+ {UBINT_COL} bigint unsigned, {USINT_COL} smallint unsigned, {UTINT_COL} tinyint unsigned
) tags (t1 int)
'''
create_ntb_sql = f'''create table {dbname}.nt1(
ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint,
{FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool,
- {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp
+ {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp, {UINT_COL} int unsigned,
+ {UBINT_COL} bigint unsigned, {USINT_COL} smallint unsigned, {UTINT_COL} tinyint unsigned
)
'''
tdSql.execute(create_stb_sql)
@@ -262,49 +277,49 @@ class TDTestCase:
now_time = int(datetime.datetime.timestamp(datetime.datetime.now()) * 1000)
for i in range(rows):
tdSql.execute(
- f"insert into {dbname}.ct1 values ( { now_time - i * 1000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )"
+ f"insert into {dbname}.ct1 values ( { now_time - i * 1000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127} )"
)
tdSql.execute(
- f"insert into {dbname}.ct4 values ( { now_time - i * 7776000000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )"
+ f"insert into {dbname}.ct4 values ( { now_time - i * 7776000000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127} )"
)
tdSql.execute(
- f"insert into {dbname}.ct2 values ( { now_time - i * 7776000000 }, {-i}, {-11111 * i}, {-111 * i % 32767 }, {-11 * i % 127}, {-1.11*i}, {-1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )"
+ f"insert into {dbname}.ct2 values ( { now_time - i * 7776000000 }, {-i}, {-11111 * i}, {-111 * i % 32767 }, {-11 * i % 127}, {-1.11*i}, {-1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127} )"
)
tdSql.execute(
f'''insert into {dbname}.ct1 values
- ( { now_time - rows * 5 }, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar_测试_0', { now_time + 8 } )
- ( { now_time + 10000 }, { rows }, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar_测试_9', { now_time + 9 } )
+ ( { now_time - rows * 5 }, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar_测试_0', { now_time + 8 }, 0, 0, 0, 0)
+ ( { now_time + 10000 }, { rows }, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar_测试_9', { now_time + 9 }, 0, 0, 0, NULL )
'''
)
tdSql.execute(
f'''insert into {dbname}.ct4 values
- ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
(
{ now_time + 5184000000}, {pow(2,31)-pow(2,15)}, {pow(2,63)-pow(2,30)}, 32767, 127,
- { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000}
+ { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000}, NULL, NULL, NULL, NULL
)
(
{ now_time + 2592000000 }, {pow(2,31)-pow(2,16)}, {pow(2,63)-pow(2,31)}, 32766, 126,
- { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000}
+ { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000}, NULL, NULL, NULL, NULL
)
'''
)
tdSql.execute(
f'''insert into {dbname}.ct2 values
- ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
+ ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
(
{ now_time + 5184000000 }, { -1 * pow(2,31) + pow(2,15) }, { -1 * pow(2,63) + pow(2,30) }, -32766, -126,
- { -1 * 3.2 * pow(10,38) }, { -1.2 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 }
+ { -1 * 3.2 * pow(10,38) }, { -1.2 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 }, NULL, NULL, NULL, NULL
)
(
{ now_time + 2592000000 }, { -1 * pow(2,31) + pow(2,16) }, { -1 * pow(2,63) + pow(2,31) }, -32767, -127,
- { - 3.3 * pow(10,38) }, { -1.3 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 }
+ { - 3.3 * pow(10,38) }, { -1.3 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 }, NULL, NULL, NULL, NULL
)
'''
)
@@ -312,22 +327,22 @@ class TDTestCase:
for i in range(rows):
insert_data = f'''insert into {dbname}.nt1 values
( { now_time - i * 3600000 }, {i}, {i * 11111}, { i % 32767 }, { i % 127}, { i * 1.11111 }, { i * 1000.1111 }, { i % 2},
- "binary_{i}", "nchar_测试_{i}", { now_time - 1000 * i } )
+ "binary_{i}", "nchar_测试_{i}", { now_time - 1000 * i }, NULL, NULL, NULL, NULL )
'''
tdSql.execute(insert_data)
tdSql.execute(
f'''insert into {dbname}.nt1 values
- ( { now_time + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time - (( rows // 2 ) * 60 + 30) * 60000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
- ( { now_time - rows * 3600000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time - (( rows // 2 ) * 60 + 30) * 60000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
+ ( { now_time - rows * 3600000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL )
( { now_time + 7200000 }, { pow(2,31) - pow(2,15) }, { pow(2,63) - pow(2,30) }, 32767, 127,
{ 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 },
- "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 }
+ "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 }, NULL, NULL, NULL, NULL
)
(
{ now_time + 3600000 } , { pow(2,31) - pow(2,16) }, { pow(2,63) - pow(2,31) }, 32766, 126,
{ 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 },
- "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 }
+ "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 }, NULL, NULL, NULL, NULL
)
'''
)
diff --git a/tests/system-test/6-cluster/5dnode1mnode.py b/tests/system-test/6-cluster/5dnode1mnode.py
index b576b37a4d..d0157ec7c7 100644
--- a/tests/system-test/6-cluster/5dnode1mnode.py
+++ b/tests/system-test/6-cluster/5dnode1mnode.py
@@ -125,7 +125,7 @@ class TDTestCase:
tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
tdSql.query('select * from information_schema.ins_databases;')
- tdSql.checkData(2,5,'off')
+ tdSql.checkData(2,5,'on')
tdSql.error("alter database db strict 'off'")
# tdSql.execute('alter database db strict 'on'')
# tdSql.query('select * from information_schema.ins_databases;')
diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py
index 94e02b77b3..392b0d7764 100644
--- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py
+++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py
@@ -161,6 +161,19 @@ class TDTestCase:
stableName= '%s_%d'%(paraDict['stbName'],i)
newTdSql=tdCom.newTdSql()
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
+
+ for i in range(5):
+ clusterComCreate.createUser(newTdSql,f"user{i}",f"pass{i}")
+ userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"pass{i}")
+ clusterComCreate.alterUser(userTdSql,f"user{i}",f"pass{i+1}")
+ clusterComCreate.deleteUser(newTdSql,f"user{i}")
+ for j in range(5):
+ i=100
+ clusterComCreate.createUser(newTdSql,f"user{i}",f"pass{i}")
+ userTdSql=tdCom.newTdSql(user=f"user{i}",password=f"pass{i}")
+ clusterComCreate.alterUser(userTdSql,f"user{i}",f"pass{i+1}")
+ clusterComCreate.deleteUser(newTdSql,f"user{i}")
+
for tr in threads:
tr.start()
for tr in threads:
diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py
index d6d06446a1..66c2fdd14f 100644
--- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py
+++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py
@@ -67,29 +67,11 @@ class TDTestCase:
self._async_raise(thread.ident, SystemExit)
- def insertData(self,countstart,countstop):
- # fisrt add data : db\stable\childtable\general table
-
- for couti in range(countstart,countstop):
- tdLog.debug("drop database if exists db%d" %couti)
- tdSql.execute("drop database if exists db%d" %couti)
- print("create database if not exists db%d replica 1 duration 300" %couti)
- tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
- tdSql.execute("use db%d" %couti)
- tdSql.execute(
- '''create table stb1
- (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
- tags (t1 int)
- '''
- )
- tdSql.execute(
- '''
- create table t1
- (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
- '''
- )
- for i in range(4):
- tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
+ def reCreateUser(self, tdsql, count, user, passwd):
+ clusterComCreate.createUser(tdsql,f"{user}{count}",f"{passwd}{count}")
+ userTdSql=tdCom.newTdSql(user=f"{user}{count}",password=f"{passwd}{count}")
+ clusterComCreate.alterUser(userTdSql,f"{user}{count}",f"{passwd}{count+1}")
+ clusterComCreate.deleteUser(tdsql,f"{user}{count}")
def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
@@ -161,6 +143,8 @@ class TDTestCase:
stableName= '%s_%d'%(paraDict['stbName'],i)
newTdSql=tdCom.newTdSql()
threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
+ threads.append(threading.Thread(target=self.reCreateUser,args=(newTdSql,i,"user","passwd")))
+
for tr in threads:
tr.start()
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py
index 881f383b8c..b55c689eee 100644
--- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py
+++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py
@@ -147,6 +147,9 @@ class TDTestCase:
# print(f"==================={dbNameIndex},{a11111}")
threads.append(threading.Thread(target=clusterComCreate.createDeltedatabases, args=(newTdSql, dbNameIndex,repeatNumber,paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
+ redbNameIndex = '%s%d'%(paraDict["dbName"],i+100)
+ threads.append(threading.Thread(target=clusterComCreate.createDeltedatabases, args=(newTdSql, redbNameIndex,1,paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])))
+
for tr in threads:
tr.start()
@@ -199,7 +202,7 @@ class TDTestCase:
def run(self):
# print(self.master_dnode.cfgDict)
- self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=4,stopRole='dnode')
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='dnode')
def stop(self):
tdSql.close()
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py
index 265000bdc9..296e9daeca 100644
--- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py
+++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py
@@ -97,7 +97,7 @@ class TDTestCase:
'dropFlag': 1,
'event': '',
'vgroups': 4,
- 'replica': 1,
+ 'replica': 3,
'stbName': 'stb',
'stbNumbers': 2,
'colPrefix': 'c',
@@ -105,9 +105,9 @@ class TDTestCase:
'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
'ctbPrefix': 'ctb',
- 'ctbNum': 200,
+ 'ctbNum': 100,
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
- "rowsPerTbl": 10000,
+ "rowsPerTbl": 100000,
"batchNum": 5000
}
@@ -198,16 +198,16 @@ class TDTestCase:
clusterComCheck.checkDbRows(dbNumbers)
# clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
- tdSql.execute("use %s" %(paraDict["dbName"]))
- tdSql.query("show stables")
+ # tdSql.execute("use %s" %(paraDict["dbName"]))
+ tdSql.query("show %s.stables"%(paraDict["dbName"]))
tdSql.checkRows(paraDict["stbNumbers"])
for i in range(paraDict['stbNumbers']):
- stableName= '%s_%d'%(paraDict['stbName'],i)
- tdSql.query("select * from %s"%stableName)
- tdSql.checkRows(rowsPerStb)
+ stableName= '%s.%s_%d'%(paraDict["dbName"],paraDict['stbName'],i)
+ tdSql.query("select count(*) from %s"%stableName)
+ tdSql.checkData(0,0,rowsPerStb)
def run(self):
# print(self.master_dnode.cfgDict)
- self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=2,stopRole='dnode')
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='dnode')
def stop(self):
tdSql.close()
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py
new file mode 100644
index 0000000000..06d626b77c
--- /dev/null
+++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeModifyMeta.py
@@ -0,0 +1,202 @@
+from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
+from numpy import row_stack
+import taos
+import sys
+import time
+import os
+
+from util.log import *
+from util.sql import *
+from util.cases import *
+from util.dnodes import TDDnodes
+from util.dnodes import TDDnode
+from util.cluster import *
+sys.path.append("./6-cluster")
+from clusterCommonCreate import *
+from clusterCommonCheck import clusterComCheck
+
+import time
+import socket
+import subprocess
+from multiprocessing import Process
+import threading
+import time
+import inspect
+import ctypes
+
+class TDTestCase:
+
+ def init(self, conn, logSql, replicaVar=1):
+ tdLog.debug(f"start to excute {__file__}")
+ self.TDDnodes = None
+ tdSql.init(conn.cursor())
+ self.host = socket.gethostname()
+
+
+ def getBuildPath(self):
+ selfPath = os.path.dirname(os.path.realpath(__file__))
+
+ if ("community" in selfPath):
+ projPath = selfPath[:selfPath.find("community")]
+ else:
+ projPath = selfPath[:selfPath.find("tests")]
+
+ for root, dirs, files in os.walk(projPath):
+ if ("taosd" in files):
+ rootRealPath = os.path.dirname(os.path.realpath(root))
+ if ("packaging" not in rootRealPath):
+ buildPath = root[:len(root) - len("/build/bin")]
+ break
+ return buildPath
+
+ def _async_raise(self, tid, exctype):
+ """raises the exception, performs cleanup if needed"""
+ if not inspect.isclass(exctype):
+ exctype = type(exctype)
+ res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
+ if res == 0:
+ raise ValueError("invalid thread id")
+ elif res != 1:
+ # """if it returns a number greater than one, you're in trouble,
+ # and you should call it again with exc=NULL to revert the effect"""
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
+ raise SystemError("PyThreadState_SetAsyncExc failed")
+
+ def stopThread(self,thread):
+ self._async_raise(thread.ident, SystemExit)
+
+
+ def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
+ tdLog.printNoPrefix("======== test case 1: ")
+ paraDict = {'dbName': 'db0_0',
+ 'dropFlag': 1,
+ 'event': '',
+ 'vgroups': 4,
+ 'replica': 3,
+ 'stbName': 'stb',
+ 'stbNumbers': 2,
+ 'colPrefix': 'c',
+ 'tagPrefix': 't',
+ 'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'ctbPrefix': 'ctb',
+ 'ctbNum': 200,
+ 'startTs': 1640966400000, # 2022-01-01 00:00:00.000
+ "rowsPerTbl": 1000,
+ "batchNum": 5000
+ }
+
+ dnodeNumbers=int(dnodeNumbers)
+ mnodeNums=int(mnodeNums)
+ vnodeNumbers = int(dnodeNumbers-mnodeNums)
+ allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
+ rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
+ rowsall=rowsPerStb*paraDict['stbNumbers']
+ dbNumbers = 1
+
+ tdLog.info("first check dnode and mnode")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ tdSql.checkData(0,1,'%s:6030'%self.host)
+ tdSql.checkData(4,1,'%s:6430'%self.host)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ #check mnode status
+ tdLog.info("check mnode status")
+ clusterComCheck.checkMnodeStatus(mnodeNums)
+
+ # add some error operations and
+ tdLog.info("Confirm the status of the dnode again")
+ tdSql.error("create mnode on dnode 2")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ print(tdSql.queryResult)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ # create database and stable
+ clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
+ tdLog.info("Take turns stopping Mnodes ")
+
+ tdDnodes=cluster.dnodes
+ stopcount =0
+ threads=[]
+
+ # create stable:stb_0
+ stableName= paraDict['stbName']
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
+ #create child table:ctb_0
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
+ #insert date
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
+ for tr in threads:
+ tr.start()
+ for tr in threads:
+ tr.join()
+
+ while stopcount < restartNumbers:
+ tdLog.info(" restart loop: %d"%stopcount )
+ if stopRole == "mnode":
+ for i in range(mnodeNums):
+ tdDnodes[i].stoptaosd()
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+ elif stopRole == "vnode":
+ for i in range(vnodeNumbers):
+ tdDnodes[i+mnodeNums].stoptaosd()
+ # sleep(10)
+ tdDnodes[i+mnodeNums].starttaosd()
+ # sleep(10)
+ elif stopRole == "dnode":
+ for i in range(dnodeNumbers):
+ tdDnodes[i].stoptaosd()
+ clusterComCheck.checkDbRows(dbNumbers)
+ if i == 0 :
+ stableName= '%s_%d'%(paraDict['stbName'],0)
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.alterStbMetaData(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+
+
+ # dnodeNumbers don't include database of schema
+ if clusterComCheck.checkDnodes(dnodeNumbers):
+ tdLog.info("123")
+ else:
+ print("456")
+
+ self.stopThread(threads)
+ tdLog.exit("one or more of dnodes failed to start ")
+ # self.check3mnode()
+ stopcount+=1
+
+
+ clusterComCheck.checkDnodes(dnodeNumbers)
+ clusterComCheck.checkDbRows(dbNumbers)
+ # clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
+
+ # tdSql.execute("use %s" %(paraDict["dbName"]))
+ tdSql.query("show %s.stables"%(paraDict["dbName"]))
+ tdSql.checkRows(paraDict["stbNumbers"])
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s.%s_%d'%(paraDict["dbName"],paraDict['stbName'],i)
+ tdSql.query("select count(*) from %s"%stableName)
+ if i == 0 :
+ tdSql.checkData(0,0,rowsPerStb*2)
+ else:
+ tdSql.checkData(0,0,rowsPerStb)
+ def run(self):
+ # print(self.master_dnode.cfgDict)
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='dnode')
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success(f"{__file__} successfully executed")
+
+tdCases.addLinux(__file__, TDTestCase())
+tdCases.addWindows(__file__, TDTestCase())
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeRCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeRCreateDb.py
new file mode 100644
index 0000000000..9d99980b88
--- /dev/null
+++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeRCreateDb.py
@@ -0,0 +1,209 @@
+from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
+import taos
+import sys
+import time
+import os
+
+from util.log import *
+from util.sql import *
+from util.cases import *
+from util.dnodes import TDDnodes
+from util.dnodes import TDDnode
+from util.cluster import *
+sys.path.append("./6-cluster")
+from clusterCommonCreate import *
+from clusterCommonCheck import clusterComCheck
+
+import time
+import socket
+import subprocess
+from multiprocessing import Process
+import threading
+import time
+import inspect
+import ctypes
+
+class TDTestCase:
+
+ def init(self, conn, logSql, replicaVar=1):
+ tdLog.debug(f"start to excute {__file__}")
+ self.TDDnodes = None
+ tdSql.init(conn.cursor())
+ self.host = socket.gethostname()
+ self.replicaVar=int(replicaVar)
+
+ def getBuildPath(self):
+ selfPath = os.path.dirname(os.path.realpath(__file__))
+
+ if ("community" in selfPath):
+ projPath = selfPath[:selfPath.find("community")]
+ else:
+ projPath = selfPath[:selfPath.find("tests")]
+
+ for root, dirs, files in os.walk(projPath):
+ if ("taosd" in files):
+ rootRealPath = os.path.dirname(os.path.realpath(root))
+ if ("packaging" not in rootRealPath):
+ buildPath = root[:len(root) - len("/build/bin")]
+ break
+ return buildPath
+
+ def _async_raise(self, tid, exctype):
+ """raises the exception, performs cleanup if needed"""
+ if not inspect.isclass(exctype):
+ exctype = type(exctype)
+ res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
+ if res == 0:
+ raise ValueError("invalid thread id")
+ elif res != 1:
+ # """if it returns a number greater than one, you're in trouble,
+ # and you should call it again with exc=NULL to revert the effect"""
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
+ raise SystemError("PyThreadState_SetAsyncExc failed")
+
+ def stopThread(self,thread):
+ self._async_raise(thread.ident, SystemExit)
+
+
+ def insertData(self,countstart,countstop):
+ # fisrt add data : db\stable\childtable\general table
+
+ for couti in range(countstart,countstop):
+ tdLog.debug("drop database if exists db%d" %couti)
+ tdSql.execute("drop database if exists db%d" %couti)
+ print("create database if not exists db%d replica 1 duration 300" %couti)
+ tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
+ tdSql.execute("use db%d" %couti)
+ tdSql.execute(
+ '''create table stb1
+ (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
+ tags (t1 int)
+ '''
+ )
+ tdSql.execute(
+ '''
+ create table t1
+ (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
+ '''
+ )
+ for i in range(4):
+ tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
+
+
+ def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
+ tdLog.printNoPrefix("======== test case 1: ")
+ paraDict = {'dbName': 'db',
+ 'dbNumbers': 4,
+ 'dropFlag': 1,
+ 'event': '',
+ 'vgroups': 4,
+ 'replica': 3,
+ 'stbName': 'stb',
+ 'stbNumbers': 100,
+ 'colPrefix': 'c',
+ 'tagPrefix': 't',
+ 'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'ctbPrefix': 'ctb',
+ 'ctbNum': 1,
+ }
+
+ dnodeNumbers=int(dnodeNumbers)
+ dbNumbers=paraDict['dbNumbers']
+ mnodeNums=int(mnodeNums)
+ repeatNumber = 2
+ vnodeNumbers = int(dnodeNumbers-mnodeNums)
+ allDbNumbers=dbNumbers
+ allStbNumbers=(paraDict['stbNumbers']*restartNumbers)
+ paraDict['replica'] = self.replicaVar
+
+ tdLog.info("first check dnode and mnode")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ tdSql.checkData(0,1,'%s:6030'%self.host)
+ tdSql.checkData(4,1,'%s:6430'%self.host)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ #check mnode status
+ tdLog.info("check mnode status")
+ clusterComCheck.checkMnodeStatus(mnodeNums)
+
+ # add some error operations and
+ tdLog.info("Confirm the status of the dnode again")
+ tdSql.error("create mnode on dnode 2")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ print(tdSql.queryResult)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ # create database and stable
+
+
+ tdDnodes=cluster.dnodes
+ stopcount =0
+ threads=[]
+ for i in range(dbNumbers):
+ dbNameIndex = '%s%d'%(paraDict["dbName"],0)
+ newTdSql=tdCom.newTdSql()
+ # a11111=paraDict["dbNumbers"]
+ # print(f"==================={dbNameIndex},{a11111}")
+ clusterComCreate.createDeltedatabases(newTdSql, dbNameIndex,repeatNumber,paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
+
+ redbNameIndex = '%s%d'%(paraDict["dbName"],100)
+ clusterComCreate.createDeltedatabases(newTdSql, redbNameIndex,1,paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
+
+
+ tdLog.info("Take turns stopping Mnodes ")
+ while stopcount < restartNumbers:
+ tdLog.info(" restart loop: %d"%stopcount )
+ if stopRole == "mnode":
+ for i in range(mnodeNums):
+ tdDnodes[i].stoptaosd()
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+ elif stopRole == "vnode":
+ for i in range(vnodeNumbers):
+ tdDnodes[i+mnodeNums].stoptaosd()
+ # sleep(10)
+ tdDnodes[i+mnodeNums].starttaosd()
+ # sleep(10)
+ elif stopRole == "dnode":
+ for i in range(dnodeNumbers):
+ tdDnodes[i].stoptaosd()
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+
+ # dnodeNumbers don't include database of schema
+ if clusterComCheck.checkDnodes(dnodeNumbers):
+ tdLog.info("check dnodes status is ready")
+ else:
+ tdLog.info("check dnodes status is not ready")
+ self.stopThread(threads)
+ tdLog.exit("one or more of dnodes failed to start ")
+ # self.check3mnode()
+ stopcount+=1
+
+
+ tdLog.info("check dnode number:")
+ clusterComCheck.checkDnodes(dnodeNumbers)
+ tdSql.query("select * from information_schema.ins_databases")
+ tdLog.debug("we find %d databases but exepect to create %d databases "%(tdSql.queryRows-2,allDbNumbers))
+
+ # tdLog.info("check DB Rows:")
+ # clusterComCheck.checkDbRows(allDbNumbers)
+ # tdLog.info("check DB Status on by on")
+ # for i in range(restartNumbers):
+ # clusterComCheck.checkDb(paraDict['dbNumbers'],restartNumbers,dbNameIndex = '%s%d'%(paraDict["dbName"],i))
+
+
+
+ def run(self):
+ # print(self.master_dnode.cfgDict)
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=2,stopRole='dnode')
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success(f"{__file__} successfully executed")
+
+tdCases.addLinux(__file__, TDTestCase())
+tdCases.addWindows(__file__, TDTestCase())
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py
new file mode 100644
index 0000000000..3e4dc2483f
--- /dev/null
+++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeModifyMeta.py
@@ -0,0 +1,207 @@
+from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
+from numpy import row_stack
+import taos
+import sys
+import time
+import os
+
+from util.log import *
+from util.sql import *
+from util.cases import *
+from util.dnodes import TDDnodes
+from util.dnodes import TDDnode
+from util.cluster import *
+sys.path.append("./6-cluster")
+from clusterCommonCreate import *
+from clusterCommonCheck import clusterComCheck
+
+import time
+import socket
+import subprocess
+from multiprocessing import Process
+import threading
+import time
+import inspect
+import ctypes
+
+class TDTestCase:
+
+ def init(self, conn, logSql, replicaVar=1):
+ tdLog.debug(f"start to excute {__file__}")
+ self.TDDnodes = None
+ tdSql.init(conn.cursor())
+ self.host = socket.gethostname()
+
+
+ def getBuildPath(self):
+ selfPath = os.path.dirname(os.path.realpath(__file__))
+
+ if ("community" in selfPath):
+ projPath = selfPath[:selfPath.find("community")]
+ else:
+ projPath = selfPath[:selfPath.find("tests")]
+
+ for root, dirs, files in os.walk(projPath):
+ if ("taosd" in files):
+ rootRealPath = os.path.dirname(os.path.realpath(root))
+ if ("packaging" not in rootRealPath):
+ buildPath = root[:len(root) - len("/build/bin")]
+ break
+ return buildPath
+
+ def _async_raise(self, tid, exctype):
+ """raises the exception, performs cleanup if needed"""
+ if not inspect.isclass(exctype):
+ exctype = type(exctype)
+ res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
+ if res == 0:
+ raise ValueError("invalid thread id")
+ elif res != 1:
+ # """if it returns a number greater than one, you're in trouble,
+ # and you should call it again with exc=NULL to revert the effect"""
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
+ raise SystemError("PyThreadState_SetAsyncExc failed")
+
+ def stopThread(self,thread):
+ self._async_raise(thread.ident, SystemExit)
+
+
+ def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
+ tdLog.printNoPrefix("======== test case 1: ")
+ paraDict = {'dbName': 'db0_0',
+ 'dropFlag': 1,
+ 'event': '',
+ 'vgroups': 4,
+ 'replica': 3,
+ 'stbName': 'stb',
+ 'stbNumbers': 2,
+ 'colPrefix': 'c',
+ 'tagPrefix': 't',
+ 'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'ctbPrefix': 'ctb',
+ 'ctbNum': 200,
+ 'startTs': 1640966400000, # 2022-01-01 00:00:00.000
+ "rowsPerTbl": 1000,
+ "batchNum": 5000
+ }
+
+ dnodeNumbers=int(dnodeNumbers)
+ mnodeNums=int(mnodeNums)
+ vnodeNumbers = int(dnodeNumbers-mnodeNums)
+ allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
+ rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
+ rowsall=rowsPerStb*paraDict['stbNumbers']
+ dbNumbers = 1
+
+ tdLog.info("first check dnode and mnode")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ tdSql.checkData(0,1,'%s:6030'%self.host)
+ tdSql.checkData(4,1,'%s:6430'%self.host)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ #check mnode status
+ tdLog.info("check mnode status")
+ clusterComCheck.checkMnodeStatus(mnodeNums)
+
+ # add some error operations and
+ tdLog.info("Confirm the status of the dnode again")
+ tdSql.error("create mnode on dnode 2")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ print(tdSql.queryResult)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ # create database and stable
+ clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
+ tdLog.info("Take turns stopping Mnodes ")
+
+ tdDnodes=cluster.dnodes
+ stopcount =0
+ threads=[]
+
+ # create stable:stb_0
+ stableName= paraDict['stbName']
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
+ #create child table:ctb_0
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
+ #insert date
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
+ for tr in threads:
+ tr.start()
+ for tr in threads:
+ tr.join()
+
+ while stopcount < restartNumbers:
+ tdLog.info(" restart loop: %d"%stopcount )
+ if stopRole == "mnode":
+ for i in range(mnodeNums):
+ tdDnodes[i].stoptaosd()
+ if i == 0 :
+ stableName= '%s_%d'%(paraDict['stbName'],0)
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.alterStbMetaData(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"])
+ elif i == 1 :
+ tdSql.execute("ALTER TABLE db0_0.stb_0_0 SET TAG t1r=10000;")
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+ elif stopRole == "vnode":
+ for i in range(vnodeNumbers):
+ tdDnodes[i+mnodeNums].stoptaosd()
+ # sleep(10)
+ tdDnodes[i+mnodeNums].starttaosd()
+ # sleep(10)
+ elif stopRole == "dnode":
+ for i in range(dnodeNumbers):
+ tdDnodes[i].stoptaosd()
+ clusterComCheck.checkDbRows(dbNumbers)
+
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+
+
+ # dnodeNumbers don't include database of schema
+ if clusterComCheck.checkDnodes(dnodeNumbers):
+ tdLog.info("123")
+ else:
+ print("456")
+
+ self.stopThread(threads)
+ tdLog.exit("one or more of dnodes failed to start ")
+ # self.check3mnode()
+ stopcount+=1
+
+
+ clusterComCheck.checkDnodes(dnodeNumbers)
+ clusterComCheck.checkDbRows(dbNumbers)
+ # clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
+
+ # tdSql.execute("use %s" %(paraDict["dbName"]))
+ tdSql.query("select t1r from db0_0.stb_0_0 limit 1;")
+ tdSql.checkData(0,0,10000)
+ tdSql.query("show %s.stables"%(paraDict["dbName"]))
+ tdSql.checkRows(paraDict["stbNumbers"])
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s.%s_%d'%(paraDict["dbName"],paraDict['stbName'],i)
+ tdSql.query("select count(*) from %s"%stableName)
+ if i == 0 :
+ tdSql.checkData(0,0,rowsPerStb*2)
+ else:
+ tdSql.checkData(0,0,rowsPerStb)
+ def run(self):
+ # print(self.master_dnode.cfgDict)
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=1,stopRole='mnode')
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success(f"{__file__} successfully executed")
+
+tdCases.addLinux(__file__, TDTestCase())
+tdCases.addWindows(__file__, TDTestCase())
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSepVnodeStopDnodeCreateUser.py b/tests/system-test/6-cluster/5dnode3mnodeSepVnodeStopDnodeCreateUser.py
new file mode 100644
index 0000000000..94e02b77b3
--- /dev/null
+++ b/tests/system-test/6-cluster/5dnode3mnodeSepVnodeStopDnodeCreateUser.py
@@ -0,0 +1,224 @@
+from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
+from numpy import row_stack
+import taos
+import sys
+import time
+import os
+
+from util.log import *
+from util.sql import *
+from util.cases import *
+from util.dnodes import TDDnodes
+from util.dnodes import TDDnode
+from util.cluster import *
+sys.path.append("./6-cluster")
+from clusterCommonCreate import *
+from clusterCommonCheck import clusterComCheck
+
+import time
+import socket
+import subprocess
+from multiprocessing import Process
+import threading
+import time
+import inspect
+import ctypes
+
+class TDTestCase:
+
+ def init(self, conn, logSql, replicaVar=1):
+ tdLog.debug(f"start to excute {__file__}")
+ self.TDDnodes = None
+ tdSql.init(conn.cursor())
+ self.host = socket.gethostname()
+ self.replicaVar = int(replicaVar)
+
+
+ def getBuildPath(self):
+ selfPath = os.path.dirname(os.path.realpath(__file__))
+
+ if ("community" in selfPath):
+ projPath = selfPath[:selfPath.find("community")]
+ else:
+ projPath = selfPath[:selfPath.find("tests")]
+
+ for root, dirs, files in os.walk(projPath):
+ if ("taosd" in files):
+ rootRealPath = os.path.dirname(os.path.realpath(root))
+ if ("packaging" not in rootRealPath):
+ buildPath = root[:len(root) - len("/build/bin")]
+ break
+ return buildPath
+
+ def _async_raise(self, tid, exctype):
+ """raises the exception, performs cleanup if needed"""
+ if not inspect.isclass(exctype):
+ exctype = type(exctype)
+ res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
+ if res == 0:
+ raise ValueError("invalid thread id")
+ elif res != 1:
+ # """if it returns a number greater than one, you're in trouble,
+ # and you should call it again with exc=NULL to revert the effect"""
+ ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
+ raise SystemError("PyThreadState_SetAsyncExc failed")
+
+ def stopThread(self,thread):
+ self._async_raise(thread.ident, SystemExit)
+
+
+ def insertData(self,countstart,countstop):
+ # fisrt add data : db\stable\childtable\general table
+
+ for couti in range(countstart,countstop):
+ tdLog.debug("drop database if exists db%d" %couti)
+ tdSql.execute("drop database if exists db%d" %couti)
+ print("create database if not exists db%d replica 1 duration 300" %couti)
+ tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
+ tdSql.execute("use db%d" %couti)
+ tdSql.execute(
+ '''create table stb1
+ (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
+ tags (t1 int)
+ '''
+ )
+ tdSql.execute(
+ '''
+ create table t1
+ (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
+ '''
+ )
+ for i in range(4):
+ tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
+
+
+ def fiveDnodeThreeMnode(self,dnodeNumbers,mnodeNums,restartNumbers,stopRole):
+ tdLog.printNoPrefix("======== test case 1: ")
+ paraDict = {'dbName': 'db0_0',
+ 'dropFlag': 1,
+ 'event': '',
+ 'vgroups': 4,
+ 'replica': 1,
+ 'stbName': 'stb',
+ 'stbNumbers': 2,
+ 'colPrefix': 'c',
+ 'tagPrefix': 't',
+ 'colSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'tagSchema': [{'type': 'INT', 'count':1}, {'type': 'binary', 'len':20, 'count':1}],
+ 'ctbPrefix': 'ctb',
+ 'ctbNum': 200,
+ 'startTs': 1640966400000, # 2022-01-01 00:00:00.000
+ "rowsPerTbl": 100,
+ "batchNum": 5000
+ }
+
+ dnodeNumbers=int(dnodeNumbers)
+ mnodeNums=int(mnodeNums)
+ vnodeNumbers = int(dnodeNumbers-mnodeNums)
+ allctbNumbers=(paraDict['stbNumbers']*paraDict["ctbNum"])
+ rowsPerStb=paraDict["ctbNum"]*paraDict["rowsPerTbl"]
+ rowsall=rowsPerStb*paraDict['stbNumbers']
+ dbNumbers = 1
+ paraDict['replica'] = self.replicaVar
+
+ tdLog.info("first check dnode and mnode")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ tdSql.checkData(0,1,'%s:6030'%self.host)
+ tdSql.checkData(4,1,'%s:6430'%self.host)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ #check mnode status
+ tdLog.info("check mnode status")
+ clusterComCheck.checkMnodeStatus(mnodeNums)
+
+
+ # add some error operations and
+ tdLog.info("Confirm the status of the dnode again")
+ tdSql.error("create mnode on dnode 2")
+ tdSql.query("select * from information_schema.ins_dnodes;")
+ print(tdSql.queryResult)
+ clusterComCheck.checkDnodes(dnodeNumbers)
+
+ # create database and stable
+ clusterComCreate.create_database(tdSql, paraDict["dbName"],paraDict["dropFlag"], paraDict["vgroups"],paraDict['replica'])
+ tdLog.info("Take turns stopping Mnodes ")
+
+ tdDnodes=cluster.dnodes
+ stopcount =0
+ threads=[]
+
+ # create stable:stb_0
+ stableName= paraDict['stbName']
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_stables(newTdSql, paraDict["dbName"],stableName,paraDict['stbNumbers'])
+ #create child table:ctb_0
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ clusterComCreate.create_ctable(newTdSql, paraDict["dbName"],stableName,stableName, paraDict['ctbNum'])
+ #insert data
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql=tdCom.newTdSql()
+ threads.append(threading.Thread(target=clusterComCreate.insert_data, args=(newTdSql, paraDict["dbName"],stableName,paraDict["ctbNum"],paraDict["rowsPerTbl"],paraDict["batchNum"],paraDict["startTs"])))
+ for tr in threads:
+ tr.start()
+ for tr in threads:
+ tr.join()
+
+ while stopcount < restartNumbers:
+ tdLog.info(" restart loop: %d"%stopcount )
+ if stopRole == "mnode":
+ for i in range(mnodeNums):
+ tdDnodes[i].stoptaosd()
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+ elif stopRole == "vnode":
+ for i in range(vnodeNumbers):
+ tdDnodes[i+mnodeNums].stoptaosd()
+ # sleep(10)
+ tdDnodes[i+mnodeNums].starttaosd()
+ # sleep(10)
+ elif stopRole == "dnode":
+ for i in range(dnodeNumbers):
+ tdDnodes[i].stoptaosd()
+ # sleep(10)
+ tdDnodes[i].starttaosd()
+ # sleep(10)
+
+ # dnodeNumbers don't include database of schema
+ if clusterComCheck.checkDnodes(dnodeNumbers):
+ tdLog.info("dnode is ready")
+ else:
+ print("dnodes is not ready")
+ self.stopThread(threads)
+ tdLog.exit("one or more of dnodes failed to start ")
+ # self.check3mnode()
+ stopcount+=1
+
+
+ clusterComCheck.checkDnodes(dnodeNumbers)
+ clusterComCheck.checkDbRows(dbNumbers)
+ # clusterComCheck.checkDb(dbNumbers,1,paraDict["dbName"])
+
+ newTdSql=tdCom.newTdSql()
+ newTdSql.execute("reset query cache")
+ newTdSql.execute("use %s" %(paraDict["dbName"]))
+ newTdSql.query("show %s.stables"%(paraDict["dbName"]))
+ newTdSql.checkRows(paraDict["stbNumbers"])
+ for i in range(paraDict['stbNumbers']):
+ stableName= '%s_%d'%(paraDict['stbName'],i)
+ newTdSql.query("select * from %s"%stableName)
+ newTdSql.checkRows(rowsPerStb)
+
+ def run(self):
+ # print(self.master_dnode.cfgDict)
+ self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=2,stopRole='dnode')
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success(f"{__file__} successfully executed")
+
+tdCases.addLinux(__file__, TDTestCase())
+tdCases.addWindows(__file__, TDTestCase())
diff --git a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py b/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py
deleted file mode 100644
index a34895ff42..0000000000
--- a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py
+++ /dev/null
@@ -1,324 +0,0 @@
-from ssl import ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE
-import taos
-import sys
-import time
-import os
-
-from util.log import *
-from util.sql import *
-from util.cases import *
-from util.dnodes import TDDnodes
-from util.dnodes import TDDnode
-from util.cluster import *
-from util.common import *
-sys.path.append("./7-tmq")
-from tmqCommon import *
-
-import time
-import socket
-import subprocess
-from multiprocessing import Process
-import threading
-import time
-import inspect
-import ctypes
-
-class TDTestCase:
-
- def init(self, conn, logSql, replicaVar=1):
- tdLog.debug(f"start to excute {__file__}")
- # tdSql.init(conn.cursor())
- # self.host = socket.gethostname()
-
- def getBuildPath(self):
- selfPath = os.path.dirname(os.path.realpath(__file__))
-
- if ("community" in selfPath):
- projPath = selfPath[:selfPath.find("community")]
- else:
- projPath = selfPath[:selfPath.find("tests")]
-
- for root, dirs, files in os.walk(projPath):
- if ("taosd" in files):
- rootRealPath = os.path.dirname(os.path.realpath(root))
- if ("packaging" not in rootRealPath):
- buildPath = root[:len(root) - len("/build/bin")]
- break
- return buildPath
-
- def _async_raise(self, tid, exctype):
- """raises the exception, performs cleanup if needed"""
- if not inspect.isclass(exctype):
- exctype = type(exctype)
- res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
- if res == 0:
- raise ValueError("invalid thread id")
- elif res != 1:
- # """if it returns a number greater than one, you're in trouble,
- # and you should call it again with exc=NULL to revert the effect"""
- ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
- raise SystemError("PyThreadState_SetAsyncExc failed")
-
- def stop_thread(self,thread):
- self._async_raise(thread.ident, SystemExit)
-
-
- def insert_data(self,countstart,countstop):
- # fisrt add data : db\stable\childtable\general table
-
- for couti in range(countstart,countstop):
- tdLog.debug("drop database if exists db%d" %couti)
- tdSql.execute("drop database if exists db%d" %couti)
- print("create database if not exists db%d replica 1 duration 300" %couti)
- tdSql.execute("create database if not exists db%d replica 1 duration 300" %couti)
- tdSql.execute("use db%d" %couti)
- tdSql.execute(
- '''create table stb1
- (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
- tags (t1 int)
- '''
- )
- tdSql.execute(
- '''
- create table t1
- (ts timestamp, c1 int, c2 bigint, c3 smallint, c4 tinyint, c5 float, c6 double, c7 bool, c8 binary(16),c9 nchar(32), c10 timestamp)
- '''
- )
- for i in range(4):
- tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )')
-
- def checkData(self,dbname,stbname,stableCount,CtableCount,rowsPerSTable,):
- tdSql.execute("use %s"%dbname)
- tdSql.query("show stables")
- tdSql.checkRows(stableCount)
- tdSql.query("show tables")
- tdSql.checkRows(CtableCount)
- for i in range(stableCount):
- tdSql.query("select count(*) from %s%d"%(stbname,i))
- tdSql.checkData(0,0,rowsPerSTable)
- return
-
- def checkdnodes(self,dnodenumber):
- count=0
- while count < 100:
- time.sleep(1)
- statusReadyBumber=0
- tdSql.query("select * from information_schema.ins_dnodes;")
- if tdSql.checkRows(dnodenumber) :
- print("dnode is %d nodes"%dnodenumber)
- for i in range(dnodenumber):
- if tdSql.queryResult[i][4] !='ready' :
- status=tdSql.queryResult[i][4]
- print("dnode:%d status is %s "%(i,status))
- break
- else:
- statusReadyBumber+=1
- print(statusReadyBumber)
- if statusReadyBumber == dnodenumber :
- print("all of %d mnodes is ready in 10s "%dnodenumber)
- return True
- break
- count+=1
- else:
- print("%d mnodes is not ready in 10s "%dnodenumber)
- return False
-
-
- def check3mnode(self):
- count=0
- while count < 10:
- time.sleep(1)
- tdSql.query("select * from information_schema.ins_mnodes;")
- if tdSql.checkRows(3) :
- print("mnode is three nodes")
- if tdSql.queryResult[0][2]=='leader' :
- if tdSql.queryResult[1][2]=='follower':
- if tdSql.queryResult[2][2]=='follower':
- print("three mnodes is ready in 10s")
- break
- elif tdSql.queryResult[0][2]=='follower' :
- if tdSql.queryResult[1][2]=='leader':
- if tdSql.queryResult[2][2]=='follower':
- print("three mnodes is ready in 10s")
- break
- elif tdSql.queryResult[0][2]=='follower' :
- if tdSql.queryResult[1][2]=='follower':
- if tdSql.queryResult[2][2]=='leader':
- print("three mnodes is ready in 10s")
- break
- count+=1
- else:
- print("three mnodes is not ready in 10s ")
- return -1
-
- tdSql.query("select * from information_schema.ins_mnodes;")
- tdSql.checkRows(3)
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(0,3,'ready')
- tdSql.checkData(1,1,'%s:6130'%self.host)
- tdSql.checkData(1,3,'ready')
- tdSql.checkData(2,1,'%s:6230'%self.host)
- tdSql.checkData(2,3,'ready')
-
- def check3mnode1off(self):
- count=0
- while count < 10:
- time.sleep(1)
- tdSql.query("select * from information_schema.ins_mnodes;")
- if tdSql.checkRows(3) :
- print("mnode is three nodes")
- if tdSql.queryResult[0][2]=='offline' :
- if tdSql.queryResult[1][2]=='leader':
- if tdSql.queryResult[2][2]=='follower':
- print("stop mnodes on dnode 2 successfully in 10s")
- break
- elif tdSql.queryResult[1][2]=='follower':
- if tdSql.queryResult[2][2]=='leader':
- print("stop mnodes on dnode 2 successfully in 10s")
- break
- count+=1
- else:
- print("stop mnodes on dnode 2 failed in 10s ")
- return -1
- tdSql.error("drop mnode on dnode 1;")
-
- tdSql.query("select * from information_schema.ins_mnodes;")
- tdSql.checkRows(3)
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(0,2,'offline')
- tdSql.checkData(0,3,'ready')
- tdSql.checkData(1,1,'%s:6130'%self.host)
- tdSql.checkData(1,3,'ready')
- tdSql.checkData(2,1,'%s:6230'%self.host)
- tdSql.checkData(2,3,'ready')
-
- def check3mnode2off(self):
- count=0
- while count < 40:
- time.sleep(1)
- tdSql.query("select * from information_schema.ins_mnodes;")
- if tdSql.checkRows(3) :
- print("mnode is three nodes")
- if tdSql.queryResult[0][2]=='leader' :
- if tdSql.queryResult[1][2]=='offline':
- if tdSql.queryResult[2][2]=='follower':
- print("stop mnodes on dnode 2 successfully in 10s")
- break
- count+=1
- else:
- print("stop mnodes on dnode 2 failed in 10s ")
- return -1
- tdSql.error("drop mnode on dnode 2;")
-
- tdSql.query("select * from information_schema.ins_mnodes;")
- tdSql.checkRows(3)
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(0,2,'leader')
- tdSql.checkData(0,3,'ready')
- tdSql.checkData(1,1,'%s:6130'%self.host)
- tdSql.checkData(1,2,'offline')
- tdSql.checkData(1,3,'ready')
- tdSql.checkData(2,1,'%s:6230'%self.host)
- tdSql.checkData(2,2,'follower')
- tdSql.checkData(2,3,'ready')
-
- def check3mnode3off(self):
- count=0
- while count < 10:
- time.sleep(1)
- tdSql.query("select * from information_schema.ins_mnodes;")
- if tdSql.checkRows(3) :
- print("mnode is three nodes")
- if tdSql.queryResult[0][2]=='leader' :
- if tdSql.queryResult[2][2]=='offline':
- if tdSql.queryResult[1][2]=='follower':
- print("stop mnodes on dnode 3 successfully in 10s")
- break
- count+=1
- else:
- print("stop mnodes on dnode 3 failed in 10s")
- return -1
- tdSql.error("drop mnode on dnode 3;")
- tdSql.query("select * from information_schema.ins_mnodes;")
- tdSql.checkRows(3)
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(0,2,'leader')
- tdSql.checkData(0,3,'ready')
- tdSql.checkData(1,1,'%s:6130'%self.host)
- tdSql.checkData(1,2,'follower')
- tdSql.checkData(1,3,'ready')
- tdSql.checkData(2,1,'%s:6230'%self.host)
- tdSql.checkData(2,2,'offline')
- tdSql.checkData(2,3,'ready')
-
-
- def check5dnode(self):
- tdSql.query("select * from information_schema.ins_dnodes;")
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(4,1,'%s:6430'%self.host)
- tdSql.checkData(0,4,'ready')
- tdSql.checkData(4,4,'ready')
-
- def five_dnode_three_mnode(self,dnodenumber):
- tdSql.query("select * from information_schema.ins_dnodes;")
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(4,1,'%s:6430'%self.host)
- tdSql.checkData(0,4,'ready')
- tdSql.checkData(4,4,'ready')
- tdSql.query("select * from information_schema.ins_mnodes;")
- tdSql.checkRows(1)
- tdSql.checkData(0,1,'%s:6030'%self.host)
- tdSql.checkData(0,2,'leader')
- tdSql.checkData(0,3,'ready')
-
- # fisr add three mnodes;
- tdSql.execute("create mnode on dnode 2")
- tdSql.execute("create mnode on dnode 3")
-
- # fisrt check statut ready
- self.check3mnode()
-
- tdSql.error("create mnode on dnode 2")
- tdSql.query("select * from information_schema.ins_dnodes;")
- print(tdSql.queryResult)
- tdLog.debug("stop all of mnode ")
-
- # seperate vnode and mnode in different dnodes.
- # create database and stable
- stopcount =0
- while stopcount < 2:
- for i in range(dnodenumber):
- # threads=[]
- # threads = MyThreadFunc(self.insert_data(i*2,i*2+2))
- threads=threading.Thread(target=self.insert_data, args=(i,i+1))
- threads.start()
- self.TDDnodes.stoptaosd(i+1)
- self.TDDnodes.starttaosd(i+1)
-
- if self.checkdnodes(5):
- print("123")
- threads.join()
- else:
- print("456")
- threads.join()
- self.stop_thread(threads)
- assert 1 == 2 ,"some dnode started failed"
- return False
- # self.check3mnode()
- self.check3mnode()
-
-
- stopcount+=1
- self.check3mnode()
-
-
- def run(self):
- # print(self.master_dnode.cfgDict)
- self.five_dnode_three_mnode(5)
-
- def stop(self):
- tdSql.close()
- tdLog.success(f"{__file__} successfully executed")
-
-tdCases.addLinux(__file__, TDTestCase())
-tdCases.addWindows(__file__, TDTestCase())
diff --git a/tests/system-test/6-cluster/clusterCommonCheck.py b/tests/system-test/6-cluster/clusterCommonCheck.py
index 7cbe9d9680..2a50e1ee31 100644
--- a/tests/system-test/6-cluster/clusterCommonCheck.py
+++ b/tests/system-test/6-cluster/clusterCommonCheck.py
@@ -64,7 +64,7 @@ class ClusterComCheck:
dbNumbers=int(dbNumbers)
count=0
while count < 5:
- tdSql.query("select * from information_schema.ins_databases;")
+ tdSql.query("select * from information_schema.ins_databases where name!='collectd' ;")
count+=1
if tdSql.checkRows(dbNumbers+2):
tdLog.success("we find %d databases and expect %d in clusters! " %(tdSql.queryRows,dbNumbers+2))
diff --git a/tests/system-test/6-cluster/clusterCommonCreate.py b/tests/system-test/6-cluster/clusterCommonCreate.py
index 236708cf07..6e699e2396 100644
--- a/tests/system-test/6-cluster/clusterCommonCreate.py
+++ b/tests/system-test/6-cluster/clusterCommonCreate.py
@@ -137,12 +137,24 @@ class ClusterComCreate:
# for i in range(dbNumbers):
for i in range(dbNumbers):
if dropFlag == 1:
- tsql.execute("drop database if exists %s_%d"%(dbNameIndex,1))
- tdLog.debug("create database if not exists %s_%d vgroups %d replica %d"%(dbNameIndex,1, vgroups, replica))
- tsql.execute("create database if not exists %s_%d vgroups %d replica %d"%(dbNameIndex,1, vgroups, replica))
- tdLog.debug("complete to create database %s_%d"%(dbNameIndex,1))
+ tsql.execute("drop database if exists %s_%d"%(dbNameIndex,i))
+ tdLog.debug("create database if not exists %s_%d vgroups %d replica %d"%(dbNameIndex,i, vgroups, replica))
+ tsql.execute("create database if not exists %s_%d vgroups %d replica %d"%(dbNameIndex,i, vgroups, replica))
+ tdLog.debug("complete to create database %s_%d"%(dbNameIndex,i))
+ def createUser(self,tsql,user,password):
+ tdLog.info(f"create new user f{user}")
+ tsql.execute(f"CREATE USER {user} PASS '{password}';")
+ def alterUser(self,tsql,user,password):
+ tdLog.info(f"alter user {user} pass '{password}'")
+ tsql.execute(f"alter USER {user} pass '{password}' ;")
+
+ def deleteUser(self,tsql,user):
+ tdLog.info(f"drop user f{user}")
+ tsql.execute(f"DROP USER {user} ;")
+
+
def create_stable(self,tsql, dbName,stbName):
tsql.execute("create table if not exists %s.%s (ts timestamp, c1 int, c2 int, c3 binary(16)) tags(t1 int, t2 binary(32))"%(dbName, stbName))
tdLog.debug("complete to create %s.%s" %(dbName, stbName))
@@ -202,6 +214,52 @@ class ClusterComCreate:
tdLog.debug("insert data ............ [OK]")
return
+ def alterStbMetaData(self,tsql,dbName,stbName,ctbNum,rowsPerTbl,batchNum,startTs=None):
+ tdLog.debug("alter Stb column ............")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} MODIFY COLUMN c3 binary(20);")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} MODIFY COLUMN c3 binary(20);")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} ADD COLUMN c4 DOUBLE;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} ADD COLUMN c4 DOUBLE;")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} DROP COLUMN c2;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} DROP COLUMN c2;")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} RENAME TAG t1 t1r;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} RENAME TAG t1 t1r;")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} DROP TAG t2;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} DROP TAG t2;")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} ADD TAG t2 binary(32) ;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} ADD TAG t2 binary(32);")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} MODIFY TAG t2 binary(34) ;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} MODIFY TAG t2 binary(34);")
+ tdLog.debug(f"ALTER STABLE {dbName}.{stbName} ADD TAG t3 double ;")
+ tsql.execute(f" ALTER STABLE {dbName}.{stbName} ADD TAG t3 double;")
+ tsql.error(f" ALTER STABLE {dbName}.{stbName} ADD TAG t2 double;")
+
+ tdLog.debug("start to insert data ............")
+ # tsql.execute("use %s" %dbName)
+ pre_insert = "insert into "
+ sql = pre_insert
+
+ if startTs is None:
+ t = time.time()
+ startTs = int(round(t * 1000))
+ #tdLog.debug("doing insert data into stable:%s rows:%d ..."%(stbName, allRows))
+ for i in range(ctbNum):
+ sql += " %s.%s_%d values "%(dbName,stbName,i)
+ for j in range(rowsPerTbl):
+ sql += "(%d, %d,'mnode_%d', %d ) "%(startTs + j, j, j,j)
+ if (j > 0) and ((j%batchNum == 0) or (j == rowsPerTbl - 1)):
+ tsql.execute(sql)
+ if j < rowsPerTbl - 1:
+ sql = "insert into %s.%s_%d values " %(dbName,stbName,i)
+ else:
+ sql = "insert into "
+ #end sql
+ if sql != pre_insert:
+ #print("insert sql:%s"%sql)
+ tsql.execute(sql)
+ tdLog.debug("insert data ............ [OK]")
+ return
+
def insert_data_1(self,tsql,dbName,ctbPrefix,ctbNum,rowsPerTbl,batchNum,startTs):
tdLog.debug("start to insert data ............")
tsql.execute("use %s" %dbName)
diff --git a/tools/shell/src/shellAuto.c b/tools/shell/src/shellAuto.c
index 01c8042c0e..b391d59725 100644
--- a/tools/shell/src/shellAuto.c
+++ b/tools/shell/src/shellAuto.c
@@ -969,38 +969,43 @@ bool matchVarWord(SWord* word1, SWord* word2) {
// ------------------- match words --------------------------
//
-// compare command cmd1 come from shellCommands , cmd2 come from user input
-int32_t compareCommand(SWords* cmd1, SWords* cmd2) {
- SWord* word1 = cmd1->head;
- SWord* word2 = cmd2->head;
+// compare command cmdPattern come from shellCommands , cmdInput come from user input
+int32_t compareCommand(SWords* cmdPattern, SWords* cmdInput) {
+ SWord* wordPattern = cmdPattern->head;
+ SWord* wordInput = cmdInput->head;
- if (word1 == NULL || word2 == NULL) {
+ if (wordPattern == NULL || wordInput == NULL) {
return -1;
}
- for (int32_t i = 0; i < cmd1->count; i++) {
- if (word1->type == WT_TEXT) {
+ for (int32_t i = 0; i < cmdPattern->count; i++) {
+ if (wordPattern->type == WT_TEXT) {
// WT_TEXT match
- if (word1->len == word2->len) {
- if (strncasecmp(word1->word, word2->word, word1->len) != 0) return -1;
- } else if (word1->len < word2->len) {
+ if (wordPattern->len == wordInput->len) {
+ if (strncasecmp(wordPattern->word, wordInput->word, wordPattern->len) != 0) return -1;
+ } else if (wordPattern->len < wordInput->len) {
return -1;
} else {
- // word1->len > word2->len
- if (strncasecmp(word1->word, word2->word, word2->len) == 0) {
- cmd1->matchIndex = i;
- cmd1->matchLen = word2->len;
- return i;
+ // wordPattern->len > wordInput->len
+ if (strncasecmp(wordPattern->word, wordInput->word, wordInput->len) == 0) {
+ if (i + 1 == cmdInput->count) {
+ // last word return match
+ cmdPattern->matchIndex = i;
+ cmdPattern->matchLen = wordInput->len;
+ return i;
+ } else {
+ return -1;
+ }
} else {
return -1;
}
}
} else {
// WT_VAR auto match any one word
- if (word2->next == NULL) { // input words last one
- if (matchVarWord(word1, word2)) {
- cmd1->matchIndex = i;
- cmd1->matchLen = word2->len;
+ if (wordInput->next == NULL) { // input words last one
+ if (matchVarWord(wordPattern, wordInput)) {
+ cmdPattern->matchIndex = i;
+ cmdPattern->matchLen = wordInput->len;
varMode = true;
return i;
}
@@ -1009,9 +1014,9 @@ int32_t compareCommand(SWords* cmd1, SWords* cmd2) {
}
// move next
- word1 = word1->next;
- word2 = word2->next;
- if (word1 == NULL || word2 == NULL) {
+ wordPattern = wordPattern->next;
+ wordInput = wordInput->next;
+ if (wordPattern == NULL || wordInput == NULL) {
return -1;
}
}