diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in index 2b5994e95c..e3e12fa0b5 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 7321fbb + GIT_TAG 719fc88 SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools" BINARY_DIR "" #BUILD_IN_SOURCE TRUE diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index a1a6cd4519..8f94313382 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -270,7 +270,7 @@ if(${JEMALLOC_ENABLED}) PREFIX "jemalloc" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/jemalloc BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls + CONFIGURE_COMMAND ./autogen.sh COMMAND ./configure --prefix=${CMAKE_BINARY_DIR}/build/ --disable-initial-exec-tls BUILD_COMMAND ${MAKE} ) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/build/include) diff --git a/docs/en/14-reference/03-connector/04-java.mdx b/docs/en/14-reference/03-connector/04-java.mdx index ecf632c624..7b3440ebac 100644 --- a/docs/en/14-reference/03-connector/04-java.mdx +++ b/docs/en/14-reference/03-connector/04-java.mdx @@ -201,7 +201,7 @@ The configuration parameters in the URL are as follows: - httpConnectTimeout: REST connection timeout in milliseconds, the default value is 5000 ms. - httpSocketTimeout: socket timeout in milliseconds, the default value is 5000 ms. It only takes effect when batchfetch is false. - messageWaitTimeout: message transmission timeout in milliseconds, the default value is 3000 ms. It only takes effect when batchfetch is true. -- useSSL: connecting Securely Using SSL. true: using SSL conneciton, false: not using SSL connection. +- useSSL: connecting Securely Using SSL. true: using SSL connection, false: not using SSL connection. **Note**: Some configuration items (e.g., locale, timezone) do not work in the REST connection. @@ -268,7 +268,7 @@ The configuration parameters in properties are as follows. - TSDBDriver.HTTP_CONNECT_TIMEOUT: REST connection timeout in milliseconds, the default value is 5000 ms. It only takes effect when using JDBC REST connection. - TSDBDriver.HTTP_SOCKET_TIMEOUT: socket timeout in milliseconds, the default value is 5000 ms. It only takes effect when using JDBC REST connection and batchfetch is false. - TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: message transmission timeout in milliseconds, the default value is 3000 ms. It only takes effect when using JDBC REST connection and batchfetch is true. -- TSDBDriver.PROPERTY_KEY_USE_SSL: connecting Securely Using SSL. true: using SSL conneciton, false: not using SSL connection. It only takes effect when using JDBC REST connection. +- TSDBDriver.PROPERTY_KEY_USE_SSL: connecting Securely Using SSL. true: using SSL connection, false: not using SSL connection. It only takes effect when using JDBC REST connection. For JDBC native connections, you can specify other parameters, such as log level, SQL length, etc., by specifying URL and Properties. For more detailed configuration, please refer to [Client Configuration](/reference/config/#Client-Only). ### Priority of configuration parameters @@ -824,7 +824,7 @@ Example usage is as follows. //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -856,7 +856,7 @@ public static void main(String[] args) throws Exception { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -878,7 +878,9 @@ The source code of the sample application is under `TDengine/examples/JDBC`: | taos-jdbcdriver version | major changes | | :---------------------: | :--------------------------------------------: | +| 3.0.1 - 3.0.2 | fix the resultSet data is parsed incorrectly sometimes. 3.0.1 is compiled on JDK 11, you are advised to use 3.0.2 in the JDK 8 environment | | 3.0.0 | Support for TDengine 3.0 | +| 2.0.41 | fix decode method of username and password in REST connection | | 2.0.39 - 2.0.40 | Add REST connection/request timeout parameters | | 2.0.38 | JDBC REST connections add bulk pull function | | 2.0.37 | Support json tags | @@ -910,6 +912,12 @@ The source code of the sample application is under `TDengine/examples/JDBC`: **Solution**: Use taos-jdbcdriver 2.* with your TDengine 2.* deployment. +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**Cause**:taos-jdbcdriver 3.0.1 is compiled on JDK 11. + +**Solution**: Use taos-jdbcdriver 3.0.2. + For additional troubleshooting, see [FAQ](../../../train-faq/faq). ## API Reference diff --git a/docs/examples/c/insert_example.c b/docs/examples/c/insert_example.c index ce8fdc5b93..a921f794fd 100644 --- a/docs/examples/c/insert_example.c +++ b/docs/examples/c/insert_example.c @@ -36,10 +36,10 @@ int main() { executeSQL(taos, "CREATE DATABASE power"); executeSQL(taos, "USE power"); executeSQL(taos, "CREATE STABLE meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)"); - executeSQL(taos, "INSERT INTO d1001 USING meters TAGS(California.SanFrancisco, 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)" - "d1002 USING meters TAGS(California.SanFrancisco, 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)" - "d1003 USING meters TAGS(California.LosAngeles, 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)" - "d1004 USING meters TAGS(California.LosAngeles, 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"); + executeSQL(taos, "INSERT INTO d1001 USING meters TAGS('California.SanFrancisco', 2) VALUES ('2018-10-03 14:38:05.000', 10.30000, 219, 0.31000) ('2018-10-03 14:38:15.000', 12.60000, 218, 0.33000) ('2018-10-03 14:38:16.800', 12.30000, 221, 0.31000)" + "d1002 USING meters TAGS('California.SanFrancisco', 3) VALUES ('2018-10-03 14:38:16.650', 10.30000, 218, 0.25000)" + "d1003 USING meters TAGS('California.LosAngeles', 2) VALUES ('2018-10-03 14:38:05.500', 11.80000, 221, 0.28000) ('2018-10-03 14:38:16.600', 13.40000, 223, 0.29000)" + "d1004 USING meters TAGS('California.LosAngeles', 3) VALUES ('2018-10-03 14:38:05.000', 10.80000, 223, 0.29000) ('2018-10-03 14:38:06.500', 11.50000, 221, 0.35000)"); taos_close(taos); taos_cleanup(); } @@ -48,4 +48,4 @@ int main() { // affected rows 0 // affected rows 0 // affected rows 0 -// affected rows 8 \ No newline at end of file +// affected rows 8 diff --git a/docs/zh/08-connector/14-java.mdx b/docs/zh/08-connector/14-java.mdx index d13e21ad54..1ee59d2df4 100644 --- a/docs/zh/08-connector/14-java.mdx +++ b/docs/zh/08-connector/14-java.mdx @@ -68,38 +68,39 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Java 对 ### 安装连接器 - + -目前 taos-jdbcdriver 已经发布到 [Sonatype Repository](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) 仓库,且各大仓库都已同步。 + 目前 taos-jdbcdriver 已经发布到 [Sonatype Repository](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) + 仓库,且各大仓库都已同步。 -- [sonatype](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) -- [mvnrepository](https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver) -- [maven.aliyun](https://maven.aliyun.com/mvn/search) + - [sonatype](https://search.maven.org/artifact/com.taosdata.jdbc/taos-jdbcdriver) + - [mvnrepository](https://mvnrepository.com/artifact/com.taosdata.jdbc/taos-jdbcdriver) + - [maven.aliyun](https://maven.aliyun.com/mvn/search) -Maven 项目中,在 pom.xml 中添加以下依赖: + Maven 项目中,在 pom.xml 中添加以下依赖: -```xml-dtd - - com.taosdata.jdbc - taos-jdbcdriver - 3.0.0 - -``` + ```xml-dtd + + com.taosdata.jdbc + taos-jdbcdriver + 3.0.0 + + ``` - - + + -可以通过下载 TDengine 的源码,自己编译最新版本的 Java connector + 可以通过下载 TDengine 的源码,自己编译最新版本的 Java connector -```shell -git clone https://github.com/taosdata/taos-connector-jdbc.git -cd taos-connector-jdbc -mvn clean install -Dmaven.test.skip=true -``` + ```shell + git clone https://github.com/taosdata/taos-connector-jdbc.git + cd taos-connector-jdbc + mvn clean install -Dmaven.test.skip=true + ``` -编译后,在 target 目录下会产生 taos-jdbcdriver-3.0.*-dist.jar 的 jar 包,并自动将编译的 jar 文件放在本地的 Maven 仓库中。 + 编译后,在 target 目录下会产生 taos-jdbcdriver-3.0.*-dist.jar 的 jar 包,并自动将编译的 jar 文件放在本地的 Maven 仓库中。 - + ## 建立连接 @@ -110,116 +111,125 @@ TDengine 的 JDBC URL 规范格式为: 对于建立连接,原生连接与 REST 连接有细微不同。 - + -```java -Class.forName("com.taosdata.jdbc.TSDBDriver"); -String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; -Connection conn = DriverManager.getConnection(jdbcUrl); -``` + ```java + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata"; + Connection conn = DriverManager.getConnection(jdbcUrl); + ``` -以上示例,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + 以上示例,使用了 JDBC 原生连接的 TSDBDriver,建立了到 hostname 为 taosdemo.com,端口为 6030(TDengine 的默认端口),数据库名为 test 的连接。这个 URL + 中指定用户名(user)为 root,密码(password)为 taosdata。 -**注意**:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)。 + **注意**:使用 JDBC 原生连接,taos-jdbcdriver 需要依赖客户端驱动(Linux 下是 libtaos.so;Windows 下是 taos.dll;macOS 下是 libtaos.dylib)。 -url 中的配置参数如下: + url 中的配置参数如下: -- user:登录 TDengine 用户名,默认值 'root'。 -- password:用户登录密码,默认值 'taosdata'。 -- cfgdir:客户端配置文件目录路径,Linux OS 上默认值 `/etc/taos`,Windows OS 上默认值 `C:/TDengine/cfg`。 -- charset:客户端使用的字符集,默认值为系统字符集。 -- locale:客户端语言环境,默认值系统当前 locale。 -- timezone:客户端使用的时区,默认值为系统当前时区。 -- batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。 -- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false:不再执行失败 SQL 后的任何语句。默认值为:false。 + - user:登录 TDengine 用户名,默认值 'root'。 + - password:用户登录密码,默认值 'taosdata'。 + - cfgdir:客户端配置文件目录路径,Linux OS 上默认值 `/etc/taos`,Windows OS 上默认值 `C:/TDengine/cfg`。 + - charset:客户端使用的字符集,默认值为系统字符集。 + - locale:客户端语言环境,默认值系统当前 locale。 + - timezone:客户端使用的时区,默认值为系统当前时区。 + - batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:true。开启批量拉取同时获取一批数据在查询数据量较大时批量拉取可以有效的提升查询性能。 + - batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败将继续执行下面的 SQL。false:不再执行失败 SQL + 后的任何语句。默认值为:false。 -JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 + JDBC 原生连接的使用请参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1955.html)。 -**使用 TDengine 客户端驱动配置文件建立连接 ** + **使用 TDengine 客户端驱动配置文件建立连接 ** -当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。如下所示: + 当使用 JDBC 原生连接连接 TDengine 集群时,可以使用 TDengine 客户端驱动配置文件,在配置文件中指定集群的 firstEp、secondEp 等参数。如下所示: -1. 在 Java 应用中不指定 hostname 和 port + 1. 在 Java 应用中不指定 hostname 和 port -```java -public Connection getConn() throws Exception{ - Class.forName("com.taosdata.jdbc.TSDBDriver"); - String jdbcUrl = "jdbc:TAOS://:/test?user=root&password=taosdata"; - Properties connProps = new Properties(); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8"); - connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8"); - Connection conn = DriverManager.getConnection(jdbcUrl, connProps); - return conn; -} -``` + ```java + public Connection getConn() throws Exception{ + Class.forName("com.taosdata.jdbc.TSDBDriver"); + String jdbcUrl = "jdbc:TAOS://:/test?user=root&password=taosdata"; + Properties connProps = new Properties(); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8"); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8"); + connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8"); + Connection conn = DriverManager.getConnection(jdbcUrl, connProps); + return conn; + } + ``` -2. 在配置文件中指定 firstEp 和 secondEp + 2. 在配置文件中指定 firstEp 和 secondEp -```shell -# first fully qualified domain name (FQDN) for TDengine system -firstEp cluster_node1:6030 + ```shell + # first fully qualified domain name (FQDN) for TDengine system + firstEp cluster_node1:6030 -# second fully qualified domain name (FQDN) for TDengine system, for cluster only -secondEp cluster_node2:6030 + # second fully qualified domain name (FQDN) for TDengine system, for cluster only + secondEp cluster_node2:6030 -# default system charset -# charset UTF-8 + # default system charset + # charset UTF-8 -# system locale -# locale en_US.UTF-8 -``` + # system locale + # locale en_US.UTF-8 + ``` -以上示例,jdbc 会使用客户端的配置文件,建立到 hostname 为 cluster_node1、端口为 6030、数据库名为 test 的连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp 连接集群。 + 以上示例,jdbc 会使用客户端的配置文件,建立到 hostname 为 cluster_node1、端口为 6030、数据库名为 test 的连接。当集群中 firstEp 节点失效时,JDBC 会尝试使用 secondEp + 连接集群。 -TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。 + TDengine 中,只要保证 firstEp 和 secondEp 中一个节点有效,就可以正常建立到集群的连接。 -> **注意**:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 C://TDengine/cfg/taos.cfg。 + > **注意**:这里的配置文件指的是调用 JDBC Connector 的应用程序所在机器上的配置文件,Linux OS 上默认值 /etc/taos/taos.cfg ,Windows OS 上默认值 + C://TDengine/cfg/taos.cfg。 - - + + -```java -Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); -String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; -Connection conn = DriverManager.getConnection(jdbcUrl); -``` + ```java + Class.forName("com.taosdata.jdbc.rs.RestfulDriver"); + String jdbcUrl = "jdbc:TAOS-RS://taosdemo.com:6041/test?user=root&password=taosdata"; + Connection conn = DriverManager.getConnection(jdbcUrl); + ``` -以上示例,使用了 JDBC REST 连接的 RestfulDriver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 root,密码(password)为 taosdata。 + 以上示例,使用了 JDBC REST 连接的 RestfulDriver,建立了到 hostname 为 taosdemo.com,端口为 6041,数据库名为 test 的连接。这个 URL 中指定用户名(user)为 + root,密码(password)为 taosdata。 -使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: + 使用 JDBC REST 连接,不需要依赖客户端驱动。与 JDBC 原生连接相比,仅需要: -1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; -2. jdbcUrl 以“jdbc:TAOS-RS://”开头; -3. 使用 6041 作为连接端口。 + 1. driverClass 指定为“com.taosdata.jdbc.rs.RestfulDriver”; + 2. jdbcUrl 以“jdbc:TAOS-RS://”开头; + 3. 使用 6041 作为连接端口。 -url 中的配置参数如下: + url 中的配置参数如下: -- user:登录 TDengine 用户名,默认值 'root'。 -- password:用户登录密码,默认值 'taosdata'。 -- batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。逐行拉取结果集使用 HTTP 方式进行数据传输。JDBC REST 连接支持批量拉取数据功能。taos-jdbcdriver 与 TDengine 之间通过 WebSocket 连接进行数据传输。相较于 HTTP,WebSocket 可以使 JDBC REST 连接支持大数据量查询,并提升查询性能。 -- charset: 当开启批量拉取数据时,指定解析字符串数据的字符集。 -- batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL 后的任何语句。默认值为:false。 -- httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 5000。 -- httpSocketTimeout: socket 超时时间,单位 ms,默认值为 5000。仅在 batchfetch 设置为 false 时生效。 -- messageWaitTimeout: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 batchfetch 设置为 true 时生效。 -- useSSL: 连接中是否使用 SSL。 + - user:登录 TDengine 用户名,默认值 'root'。 + - password:用户登录密码,默认值 'taosdata'。 + - batchfetch: true:在执行查询时批量拉取结果集;false:逐行拉取结果集。默认值为:false。逐行拉取结果集使用 HTTP 方式进行数据传输。JDBC REST + 连接支持批量拉取数据功能。taos-jdbcdriver 与 TDengine 之间通过 WebSocket 连接进行数据传输。相较于 HTTP,WebSocket 可以使 JDBC REST 连接支持大数据量查询,并提升查询性能。 + - charset: 当开启批量拉取数据时,指定解析字符串数据的字符集。 + - batchErrorIgnore:true:在执行 Statement 的 executeBatch 时,如果中间有一条 SQL 执行失败,继续执行下面的 SQL 了。false:不再执行失败 SQL + 后的任何语句。默认值为:false。 + - httpConnectTimeout: 连接超时时间,单位 ms, 默认值为 5000。 + - httpSocketTimeout: socket 超时时间,单位 ms,默认值为 5000。仅在 batchfetch 设置为 false 时生效。 + - messageWaitTimeout: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 batchfetch 设置为 true 时生效。 + - useSSL: 连接中是否使用 SSL。 -**注意**:部分配置项(比如:locale、timezone)在 REST 连接中不生效。 + **注意**:部分配置项(比如:locale、timezone)在 REST 连接中不生效。 -:::note + :::note -- 与原生连接方式不同,REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。例如: + - 与原生连接方式不同,REST 接口是无状态的。在使用 JDBC REST 连接时,需要在 SQL 中指定表、超级表的数据库名称。例如: -```sql -INSERT INTO test.t1 USING test.weather (ts, temperature) TAGS('California.SanFrancisco') VALUES(now, 24.6); -``` + ```sql + INSERT INTO test.t1 USING test.weather (ts, temperature) TAGS('California.SanFrancisco') VALUES(now, 24.6); + ``` -- 如果在 url 中指定了 dbname,那么,JDBC REST 连接会默认使用/rest/sql/dbname 作为 restful 请求的 url,在 SQL 中不需要指定 dbname。例如:url 为 jdbc:TAOS-RS://127.0.0.1:6041/test,那么,可以执行 sql:insert into t1 using weather(ts, temperature) tags('California.SanFrancisco') values(now, 24.6); + - 如果在 url 中指定了 dbname,那么,JDBC REST 连接会默认使用/rest/sql/dbname 作为 restful 请求的 url,在 SQL 中不需要指定 dbname。例如:url 为 + jdbc:TAOS-RS://127.0.0.1:6041/test,那么,可以执行 sql:insert into t1 using weather(ts, temperature) + tags('California.SanFrancisco') values(now, 24.6); -::: + ::: - + ### 指定 URL 和 Properties 获取连接 @@ -271,7 +281,7 @@ properties 中的配置参数如下: - TSDBDriver.HTTP_SOCKET_TIMEOUT: socket 超时时间,单位 ms,默认值为 5000。仅在 REST 连接且 batchfetch 设置为 false 时生效。 - TSDBDriver.PROPERTY_KEY_MESSAGE_WAIT_TIMEOUT: 消息超时时间, 单位 ms, 默认值为 3000。 仅在 REST 连接且 batchfetch 设置为 true 时生效。 - TSDBDriver.PROPERTY_KEY_USE_SSL: 连接中是否使用 SSL。仅在 REST 连接时生效。 - 此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数,比如日志级别、SQL 长度等。更多详细配置请参考[客户端配置](/reference/config/#仅客户端适用)。 +此外对 JDBC 原生连接,通过指定 URL 和 Properties 还可以指定其他参数,比如日志级别、SQL 长度等。更多详细配置请参考[客户端配置](/reference/config/#仅客户端适用)。 ### 配置参数的优先级 @@ -826,7 +836,7 @@ public abstract class ConsumerLoop { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -858,7 +868,7 @@ public static void main(String[] args) throws Exception { //query or insert // ... - connection.close(); // put back to conneciton pool + connection.close(); // put back to connection pool } ``` @@ -880,7 +890,9 @@ public static void main(String[] args) throws Exception { | taos-jdbcdriver 版本 | 主要变化 | | :------------------: | :----------------------------: | +| 3.0.1 - 3.0.2 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用 3.0.2 版本 | | 3.0.0 | 支持 TDengine 3.0 | +| 2.0.41 | 修正 REST 连接中用户名和密码转码方式 | | 2.0.39 - 2.0.40 | 增加 REST 连接/请求 超时设置 | | 2.0.38 | JDBC REST 连接增加批量拉取功能 | | 2.0.37 | 增加对 json tag 支持 | @@ -890,27 +902,33 @@ public static void main(String[] args) throws Exception { 1. 使用 Statement 的 `addBatch()` 和 `executeBatch()` 来执行“批量写入/更新”,为什么没有带来性能上的提升? - **原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 +**原因**:TDengine 的 JDBC 实现中,通过 `addBatch` 方法提交的 SQL 语句,会按照添加的顺序,依次执行,这种方式没有减少与服务端的交互次数,不会带来性能上的提升。 - **解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 +**解决方法**:1. 在一条 insert 语句中拼接多个 values 值;2. 使用多线程的方式并发插入;3. 使用参数绑定的写入方式 2. java.lang.UnsatisfiedLinkError: no taos in java.library.path - **原因**:程序没有找到依赖的本地函数库 taos。 +**原因**:程序没有找到依赖的本地函数库 taos。 - **解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。 +**解决方法**:Windows 下可以将 C:\TDengine\driver\taos.dll 拷贝到 C:\Windows\System32\ 目录下,Linux 下将建立如下软链 `ln -s /usr/local/taos/driver/libtaos.so.x.x.x.x /usr/lib/libtaos.so` 即可,macOS 下需要建立软链 `ln -s /usr/local/lib/libtaos.dylib`。 3. java.lang.UnsatisfiedLinkError: taos.dll Can't load AMD 64 bit on a IA 32-bit platform - **原因**:目前 TDengine 只支持 64 位 JDK。 +**原因**:目前 TDengine 只支持 64 位 JDK。 - **解决方法**:重新安装 64 位 JDK。 +**解决方法**:重新安装 64 位 JDK。 4. java.lang.NoSuchMethodError: setByteArray - **原因**:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。 +**原因**:taos-jdbcdriver 3.* 版本仅支持 TDengine 3.0 及以上版本。 - **解决方法**: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。 +**解决方法**: 使用 taos-jdbcdriver 2.* 版本连接 TDengine 2.* 版本。 + +5. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; ... taos-jdbcdriver-3.0.1.jar + +**原因**:taos-jdbcdriver 3.0.1 版本需要在 JDK 11+ 环境使用。 + +**解决方法**: 更换 taos-jdbcdriver 3.0.2 版本。 其它问题请参考 [FAQ](../../../train-faq/faq) diff --git a/include/common/tcommon.h b/include/common/tcommon.h index 2b45a5d206..3bfbb85958 100644 --- a/include/common/tcommon.h +++ b/include/common/tcommon.h @@ -164,14 +164,6 @@ typedef enum EStreamType { STREAM_FILL_OVER, } EStreamType; -typedef struct { - SArray* pGroupList; - SArray* pTableList; - SHashObj* map; // speedup acquire the tableQueryInfo by table uid - bool needSortTableByGroupId; - uint64_t suid; -} STableListInfo; - #pragma pack(push, 1) typedef struct SColumnDataAgg { int16_t colId; diff --git a/include/common/tglobal.h b/include/common/tglobal.h index cb4426f8a9..7df6124152 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -119,6 +119,7 @@ extern SDiskCfg tsDiskCfg[]; // udf extern bool tsStartUdfd; extern char tsUdfdResFuncs[]; +extern char tsUdfdLdLibPath[]; // schemaless extern char tsSmlChildTableName[]; diff --git a/include/common/tmsg.h b/include/common/tmsg.h index 5719db5420..67c2a9081c 100644 --- a/include/common/tmsg.h +++ b/include/common/tmsg.h @@ -1479,6 +1479,7 @@ typedef struct { int32_t dnodeId; char fqdn[TSDB_FQDN_LEN]; int32_t port; + int8_t force; } SDropDnodeReq; int32_t tSerializeSDropDnodeReq(void* buf, int32_t bufLen, SDropDnodeReq* pReq); diff --git a/include/common/tmsgdef.h b/include/common/tmsgdef.h index 9c47bc702a..3d9d55b101 100644 --- a/include/common/tmsgdef.h +++ b/include/common/tmsgdef.h @@ -267,6 +267,7 @@ enum { TD_DEF_MSG_TYPE(TDMT_SYNC_SET_VNODE_STANDBY, "set-vnode-standby", NULL, NULL) // no longer used TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT, "sync-heartbeat", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_SYNC_HEARTBEAT_REPLY, "sync-heartbeat-reply", NULL, NULL) + TD_DEF_MSG_TYPE(TDMT_SYNC_LOCAL_CMD, "sync-local-cmd", NULL, NULL) TD_DEF_MSG_TYPE(TDMT_SYNC_MAX_MSG, "sync-max", NULL, NULL) #if defined(TD_MSG_NUMBER_) diff --git a/include/common/ttokendef.h b/include/common/ttokendef.h index dcd060205b..f5c99fcae7 100644 --- a/include/common/ttokendef.h +++ b/include/common/ttokendef.h @@ -66,280 +66,281 @@ #define TK_PORT 48 #define TK_DNODES 49 #define TK_NK_IPTOKEN 50 -#define TK_LOCAL 51 -#define TK_QNODE 52 -#define TK_BNODE 53 -#define TK_SNODE 54 -#define TK_MNODE 55 -#define TK_DATABASE 56 -#define TK_USE 57 -#define TK_FLUSH 58 -#define TK_TRIM 59 -#define TK_IF 60 -#define TK_NOT 61 -#define TK_EXISTS 62 -#define TK_BUFFER 63 -#define TK_CACHEMODEL 64 -#define TK_CACHESIZE 65 -#define TK_COMP 66 -#define TK_DURATION 67 -#define TK_NK_VARIABLE 68 -#define TK_MAXROWS 69 -#define TK_MINROWS 70 -#define TK_KEEP 71 -#define TK_PAGES 72 -#define TK_PAGESIZE 73 -#define TK_TSDB_PAGESIZE 74 -#define TK_PRECISION 75 -#define TK_REPLICA 76 -#define TK_STRICT 77 -#define TK_VGROUPS 78 -#define TK_SINGLE_STABLE 79 -#define TK_RETENTIONS 80 -#define TK_SCHEMALESS 81 -#define TK_WAL_LEVEL 82 -#define TK_WAL_FSYNC_PERIOD 83 -#define TK_WAL_RETENTION_PERIOD 84 -#define TK_WAL_RETENTION_SIZE 85 -#define TK_WAL_ROLL_PERIOD 86 -#define TK_WAL_SEGMENT_SIZE 87 -#define TK_STT_TRIGGER 88 -#define TK_TABLE_PREFIX 89 -#define TK_TABLE_SUFFIX 90 -#define TK_NK_COLON 91 -#define TK_MAX_SPEED 92 -#define TK_TABLE 93 -#define TK_NK_LP 94 -#define TK_NK_RP 95 -#define TK_STABLE 96 -#define TK_ADD 97 -#define TK_COLUMN 98 -#define TK_MODIFY 99 -#define TK_RENAME 100 -#define TK_TAG 101 -#define TK_SET 102 -#define TK_NK_EQ 103 -#define TK_USING 104 -#define TK_TAGS 105 -#define TK_COMMENT 106 -#define TK_BOOL 107 -#define TK_TINYINT 108 -#define TK_SMALLINT 109 -#define TK_INT 110 -#define TK_INTEGER 111 -#define TK_BIGINT 112 -#define TK_FLOAT 113 -#define TK_DOUBLE 114 -#define TK_BINARY 115 -#define TK_TIMESTAMP 116 -#define TK_NCHAR 117 -#define TK_UNSIGNED 118 -#define TK_JSON 119 -#define TK_VARCHAR 120 -#define TK_MEDIUMBLOB 121 -#define TK_BLOB 122 -#define TK_VARBINARY 123 -#define TK_DECIMAL 124 -#define TK_MAX_DELAY 125 -#define TK_WATERMARK 126 -#define TK_ROLLUP 127 -#define TK_TTL 128 -#define TK_SMA 129 -#define TK_FIRST 130 -#define TK_LAST 131 -#define TK_SHOW 132 -#define TK_DATABASES 133 -#define TK_TABLES 134 -#define TK_STABLES 135 -#define TK_MNODES 136 -#define TK_QNODES 137 -#define TK_FUNCTIONS 138 -#define TK_INDEXES 139 -#define TK_ACCOUNTS 140 -#define TK_APPS 141 -#define TK_CONNECTIONS 142 -#define TK_LICENCES 143 -#define TK_GRANTS 144 -#define TK_QUERIES 145 -#define TK_SCORES 146 -#define TK_TOPICS 147 -#define TK_VARIABLES 148 -#define TK_CLUSTER 149 -#define TK_BNODES 150 -#define TK_SNODES 151 -#define TK_TRANSACTIONS 152 -#define TK_DISTRIBUTED 153 -#define TK_CONSUMERS 154 -#define TK_SUBSCRIPTIONS 155 -#define TK_VNODES 156 -#define TK_LIKE 157 -#define TK_INDEX 158 -#define TK_FUNCTION 159 -#define TK_INTERVAL 160 -#define TK_TOPIC 161 -#define TK_AS 162 -#define TK_WITH 163 -#define TK_META 164 -#define TK_CONSUMER 165 -#define TK_GROUP 166 -#define TK_DESC 167 -#define TK_DESCRIBE 168 -#define TK_RESET 169 -#define TK_QUERY 170 -#define TK_CACHE 171 -#define TK_EXPLAIN 172 -#define TK_ANALYZE 173 -#define TK_VERBOSE 174 -#define TK_NK_BOOL 175 -#define TK_RATIO 176 -#define TK_NK_FLOAT 177 -#define TK_OUTPUTTYPE 178 -#define TK_AGGREGATE 179 -#define TK_BUFSIZE 180 -#define TK_STREAM 181 -#define TK_INTO 182 -#define TK_TRIGGER 183 -#define TK_AT_ONCE 184 -#define TK_WINDOW_CLOSE 185 -#define TK_IGNORE 186 -#define TK_EXPIRED 187 -#define TK_FILL_HISTORY 188 -#define TK_SUBTABLE 189 -#define TK_KILL 190 -#define TK_CONNECTION 191 -#define TK_TRANSACTION 192 -#define TK_BALANCE 193 -#define TK_VGROUP 194 -#define TK_MERGE 195 -#define TK_REDISTRIBUTE 196 -#define TK_SPLIT 197 -#define TK_DELETE 198 -#define TK_INSERT 199 -#define TK_NULL 200 -#define TK_NK_QUESTION 201 -#define TK_NK_ARROW 202 -#define TK_ROWTS 203 -#define TK_TBNAME 204 -#define TK_QSTART 205 -#define TK_QEND 206 -#define TK_QDURATION 207 -#define TK_WSTART 208 -#define TK_WEND 209 -#define TK_WDURATION 210 -#define TK_IROWTS 211 -#define TK_QTAGS 212 -#define TK_CAST 213 -#define TK_NOW 214 -#define TK_TODAY 215 -#define TK_TIMEZONE 216 -#define TK_CLIENT_VERSION 217 -#define TK_SERVER_VERSION 218 -#define TK_SERVER_STATUS 219 -#define TK_CURRENT_USER 220 -#define TK_COUNT 221 -#define TK_LAST_ROW 222 -#define TK_CASE 223 -#define TK_END 224 -#define TK_WHEN 225 -#define TK_THEN 226 -#define TK_ELSE 227 -#define TK_BETWEEN 228 -#define TK_IS 229 -#define TK_NK_LT 230 -#define TK_NK_GT 231 -#define TK_NK_LE 232 -#define TK_NK_GE 233 -#define TK_NK_NE 234 -#define TK_MATCH 235 -#define TK_NMATCH 236 -#define TK_CONTAINS 237 -#define TK_IN 238 -#define TK_JOIN 239 -#define TK_INNER 240 -#define TK_SELECT 241 -#define TK_DISTINCT 242 -#define TK_WHERE 243 -#define TK_PARTITION 244 -#define TK_BY 245 -#define TK_SESSION 246 -#define TK_STATE_WINDOW 247 -#define TK_SLIDING 248 -#define TK_FILL 249 -#define TK_VALUE 250 -#define TK_NONE 251 -#define TK_PREV 252 -#define TK_LINEAR 253 -#define TK_NEXT 254 -#define TK_HAVING 255 -#define TK_RANGE 256 -#define TK_EVERY 257 -#define TK_ORDER 258 -#define TK_SLIMIT 259 -#define TK_SOFFSET 260 -#define TK_LIMIT 261 -#define TK_OFFSET 262 -#define TK_ASC 263 -#define TK_NULLS 264 -#define TK_ABORT 265 -#define TK_AFTER 266 -#define TK_ATTACH 267 -#define TK_BEFORE 268 -#define TK_BEGIN 269 -#define TK_BITAND 270 -#define TK_BITNOT 271 -#define TK_BITOR 272 -#define TK_BLOCKS 273 -#define TK_CHANGE 274 -#define TK_COMMA 275 -#define TK_COMPACT 276 -#define TK_CONCAT 277 -#define TK_CONFLICT 278 -#define TK_COPY 279 -#define TK_DEFERRED 280 -#define TK_DELIMITERS 281 -#define TK_DETACH 282 -#define TK_DIVIDE 283 -#define TK_DOT 284 -#define TK_EACH 285 -#define TK_FAIL 286 -#define TK_FILE 287 -#define TK_FOR 288 -#define TK_GLOB 289 -#define TK_ID 290 -#define TK_IMMEDIATE 291 -#define TK_IMPORT 292 -#define TK_INITIALLY 293 -#define TK_INSTEAD 294 -#define TK_ISNULL 295 -#define TK_KEY 296 -#define TK_MODULES 297 -#define TK_NK_BITNOT 298 -#define TK_NK_SEMI 299 -#define TK_NOTNULL 300 -#define TK_OF 301 -#define TK_PLUS 302 -#define TK_PRIVILEGE 303 -#define TK_RAISE 304 -#define TK_REPLACE 305 -#define TK_RESTRICT 306 -#define TK_ROW 307 -#define TK_SEMI 308 -#define TK_STAR 309 -#define TK_STATEMENT 310 -#define TK_STRING 311 -#define TK_TIMES 312 -#define TK_UPDATE 313 -#define TK_VALUES 314 -#define TK_VARIABLE 315 -#define TK_VIEW 316 -#define TK_WAL 317 +#define TK_FORCE 51 +#define TK_LOCAL 52 +#define TK_QNODE 53 +#define TK_BNODE 54 +#define TK_SNODE 55 +#define TK_MNODE 56 +#define TK_DATABASE 57 +#define TK_USE 58 +#define TK_FLUSH 59 +#define TK_TRIM 60 +#define TK_IF 61 +#define TK_NOT 62 +#define TK_EXISTS 63 +#define TK_BUFFER 64 +#define TK_CACHEMODEL 65 +#define TK_CACHESIZE 66 +#define TK_COMP 67 +#define TK_DURATION 68 +#define TK_NK_VARIABLE 69 +#define TK_MAXROWS 70 +#define TK_MINROWS 71 +#define TK_KEEP 72 +#define TK_PAGES 73 +#define TK_PAGESIZE 74 +#define TK_TSDB_PAGESIZE 75 +#define TK_PRECISION 76 +#define TK_REPLICA 77 +#define TK_STRICT 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_FIRST 131 +#define TK_LAST 132 +#define TK_SHOW 133 +#define TK_DATABASES 134 +#define TK_TABLES 135 +#define TK_STABLES 136 +#define TK_MNODES 137 +#define TK_QNODES 138 +#define TK_FUNCTIONS 139 +#define TK_INDEXES 140 +#define TK_ACCOUNTS 141 +#define TK_APPS 142 +#define TK_CONNECTIONS 143 +#define TK_LICENCES 144 +#define TK_GRANTS 145 +#define TK_QUERIES 146 +#define TK_SCORES 147 +#define TK_TOPICS 148 +#define TK_VARIABLES 149 +#define TK_CLUSTER 150 +#define TK_BNODES 151 +#define TK_SNODES 152 +#define TK_TRANSACTIONS 153 +#define TK_DISTRIBUTED 154 +#define TK_CONSUMERS 155 +#define TK_SUBSCRIPTIONS 156 +#define TK_VNODES 157 +#define TK_LIKE 158 +#define TK_INDEX 159 +#define TK_FUNCTION 160 +#define TK_INTERVAL 161 +#define TK_TOPIC 162 +#define TK_AS 163 +#define TK_WITH 164 +#define TK_META 165 +#define TK_CONSUMER 166 +#define TK_GROUP 167 +#define TK_DESC 168 +#define TK_DESCRIBE 169 +#define TK_RESET 170 +#define TK_QUERY 171 +#define TK_CACHE 172 +#define TK_EXPLAIN 173 +#define TK_ANALYZE 174 +#define TK_VERBOSE 175 +#define TK_NK_BOOL 176 +#define TK_RATIO 177 +#define TK_NK_FLOAT 178 +#define TK_OUTPUTTYPE 179 +#define TK_AGGREGATE 180 +#define TK_BUFSIZE 181 +#define TK_STREAM 182 +#define TK_INTO 183 +#define TK_TRIGGER 184 +#define TK_AT_ONCE 185 +#define TK_WINDOW_CLOSE 186 +#define TK_IGNORE 187 +#define TK_EXPIRED 188 +#define TK_FILL_HISTORY 189 +#define TK_SUBTABLE 190 +#define TK_KILL 191 +#define TK_CONNECTION 192 +#define TK_TRANSACTION 193 +#define TK_BALANCE 194 +#define TK_VGROUP 195 +#define TK_MERGE 196 +#define TK_REDISTRIBUTE 197 +#define TK_SPLIT 198 +#define TK_DELETE 199 +#define TK_INSERT 200 +#define TK_NULL 201 +#define TK_NK_QUESTION 202 +#define TK_NK_ARROW 203 +#define TK_ROWTS 204 +#define TK_TBNAME 205 +#define TK_QSTART 206 +#define TK_QEND 207 +#define TK_QDURATION 208 +#define TK_WSTART 209 +#define TK_WEND 210 +#define TK_WDURATION 211 +#define TK_IROWTS 212 +#define TK_QTAGS 213 +#define TK_CAST 214 +#define TK_NOW 215 +#define TK_TODAY 216 +#define TK_TIMEZONE 217 +#define TK_CLIENT_VERSION 218 +#define TK_SERVER_VERSION 219 +#define TK_SERVER_STATUS 220 +#define TK_CURRENT_USER 221 +#define TK_COUNT 222 +#define TK_LAST_ROW 223 +#define TK_CASE 224 +#define TK_END 225 +#define TK_WHEN 226 +#define TK_THEN 227 +#define TK_ELSE 228 +#define TK_BETWEEN 229 +#define TK_IS 230 +#define TK_NK_LT 231 +#define TK_NK_GT 232 +#define TK_NK_LE 233 +#define TK_NK_GE 234 +#define TK_NK_NE 235 +#define TK_MATCH 236 +#define TK_NMATCH 237 +#define TK_CONTAINS 238 +#define TK_IN 239 +#define TK_JOIN 240 +#define TK_INNER 241 +#define TK_SELECT 242 +#define TK_DISTINCT 243 +#define TK_WHERE 244 +#define TK_PARTITION 245 +#define TK_BY 246 +#define TK_SESSION 247 +#define TK_STATE_WINDOW 248 +#define TK_SLIDING 249 +#define TK_FILL 250 +#define TK_VALUE 251 +#define TK_NONE 252 +#define TK_PREV 253 +#define TK_LINEAR 254 +#define TK_NEXT 255 +#define TK_HAVING 256 +#define TK_RANGE 257 +#define TK_EVERY 258 +#define TK_ORDER 259 +#define TK_SLIMIT 260 +#define TK_SOFFSET 261 +#define TK_LIMIT 262 +#define TK_OFFSET 263 +#define TK_ASC 264 +#define TK_NULLS 265 +#define TK_ABORT 266 +#define TK_AFTER 267 +#define TK_ATTACH 268 +#define TK_BEFORE 269 +#define TK_BEGIN 270 +#define TK_BITAND 271 +#define TK_BITNOT 272 +#define TK_BITOR 273 +#define TK_BLOCKS 274 +#define TK_CHANGE 275 +#define TK_COMMA 276 +#define TK_COMPACT 277 +#define TK_CONCAT 278 +#define TK_CONFLICT 279 +#define TK_COPY 280 +#define TK_DEFERRED 281 +#define TK_DELIMITERS 282 +#define TK_DETACH 283 +#define TK_DIVIDE 284 +#define TK_DOT 285 +#define TK_EACH 286 +#define TK_FAIL 287 +#define TK_FILE 288 +#define TK_FOR 289 +#define TK_GLOB 290 +#define TK_ID 291 +#define TK_IMMEDIATE 292 +#define TK_IMPORT 293 +#define TK_INITIALLY 294 +#define TK_INSTEAD 295 +#define TK_ISNULL 296 +#define TK_KEY 297 +#define TK_MODULES 298 +#define TK_NK_BITNOT 299 +#define TK_NK_SEMI 300 +#define TK_NOTNULL 301 +#define TK_OF 302 +#define TK_PLUS 303 +#define TK_PRIVILEGE 304 +#define TK_RAISE 305 +#define TK_REPLACE 306 +#define TK_RESTRICT 307 +#define TK_ROW 308 +#define TK_SEMI 309 +#define TK_STAR 310 +#define TK_STATEMENT 311 +#define TK_STRING 312 +#define TK_TIMES 313 +#define TK_UPDATE 314 +#define TK_VALUES 315 +#define TK_VARIABLE 316 +#define TK_VIEW 317 +#define TK_WAL 318 -#define TK_NK_SPACE 300 -#define TK_NK_COMMENT 301 -#define TK_NK_ILLEGAL 302 -#define TK_NK_HEX 303 // hex number 0x123 -#define TK_NK_OCT 304 // oct number -#define TK_NK_BIN 305 // bin format data 0b111 +#define TK_NK_SPACE 600 +#define TK_NK_COMMENT 601 +#define TK_NK_ILLEGAL 602 +#define TK_NK_HEX 603 // hex number 0x123 +#define TK_NK_OCT 604 // oct number +#define TK_NK_BIN 605 // bin format data 0b111 #define TK_NK_NIL 65535 diff --git a/include/libs/nodes/cmdnodes.h b/include/libs/nodes/cmdnodes.h index 43746630f9..59f64f1863 100644 --- a/include/libs/nodes/cmdnodes.h +++ b/include/libs/nodes/cmdnodes.h @@ -235,6 +235,7 @@ typedef struct SDropDnodeStmt { int32_t dnodeId; char fqdn[TSDB_FQDN_LEN]; int32_t port; + bool force; } SDropDnodeStmt; typedef struct SAlterDnodeStmt { diff --git a/include/libs/sync/sync.h b/include/libs/sync/sync.h index b6c4a58150..1a94dcf426 100644 --- a/include/libs/sync/sync.h +++ b/include/libs/sync/sync.h @@ -200,10 +200,10 @@ typedef struct SSyncInfo { int32_t syncInit(); void syncCleanUp(); +bool syncIsInit(); int64_t syncOpen(SSyncInfo* pSyncInfo); void syncStart(int64_t rid); void syncStop(int64_t rid); -int32_t syncSetStandby(int64_t rid); ESyncState syncGetMyRole(int64_t rid); bool syncIsReady(int64_t rid); const char* syncGetMyRoleStr(int64_t rid); @@ -216,7 +216,6 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet); void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet); int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak); // int32_t syncProposeBatch(int64_t rid, SRpcMsg** pMsgPArr, bool* pIsWeakArr, int32_t arrSize); -bool syncEnvIsStart(); const char* syncStr(ESyncState state); bool syncIsRestoreFinish(int64_t rid); int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapshot); @@ -232,6 +231,11 @@ int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader); int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex); int32_t syncEndSnapshot(int64_t rid); +int32_t syncStepDown(int64_t rid, SyncTerm newTerm); + +SSyncNode* syncNodeAcquire(int64_t rid); +void syncNodeRelease(SSyncNode* pNode); + #ifdef __cplusplus } #endif diff --git a/include/libs/sync/syncTools.h b/include/libs/sync/syncTools.h index d5c015bfb2..9cb8a9d564 100644 --- a/include/libs/sync/syncTools.h +++ b/include/libs/sync/syncTools.h @@ -28,10 +28,6 @@ typedef struct SRaftId { SyncGroupId vgId; } SRaftId; -// ------------------ control ------------------- -SSyncNode* syncNodeAcquire(int64_t rid); -void syncNodeRelease(SSyncNode* pNode); - int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg); int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo); void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb); @@ -678,24 +674,64 @@ void syncReconfigFinishPrint2(char* s, const SyncReconfigFinish* pMsg); void syncReconfigFinishLog(const SyncReconfigFinish* pMsg); void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg); -// on message ---------------------- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg); -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg); -int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg); +// --------------------------------------------- + +typedef enum { + SYNC_LOCAL_CMD_STEP_DOWN = 100, +} ESyncLocalCmd; + +const char* syncLocalCmdGetStr(int32_t cmd); + +typedef struct SyncLocalCmd { + uint32_t bytes; + int32_t vgId; + uint32_t msgType; + SRaftId srcId; + SRaftId destId; + + int32_t cmd; + SyncTerm sdNewTerm; // step down new term + +} SyncLocalCmd; + +SyncLocalCmd* syncLocalCmdBuild(int32_t vgId); +void syncLocalCmdDestroy(SyncLocalCmd* pMsg); +void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen); +void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg); +char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len); +SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len); +void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg); +void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg); +SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg); +cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg); +char* syncLocalCmd2Str(const SyncLocalCmd* pMsg); + +// for debug ---------------------- +void syncLocalCmdPrint(const SyncLocalCmd* pMsg); +void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg); +void syncLocalCmdLog(const SyncLocalCmd* pMsg); +void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg); + +// on message ---------------------- +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); -int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg); -int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg); -int32_t syncNodeOnClientRequest(SSyncNode* ths, SyncClientRequest* pMsg, SyncIndex* pRetIndex); int32_t syncNodeOnRequestVote(SSyncNode* ths, SyncRequestVote* pMsg); int32_t syncNodeOnRequestVoteReply(SSyncNode* ths, SyncRequestVoteReply* pMsg); + int32_t syncNodeOnAppendEntries(SSyncNode* ths, SyncAppendEntries* pMsg); int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, SyncAppendEntriesReply* pMsg); + int32_t syncNodeOnSnapshot(SSyncNode* ths, SyncSnapshotSend* pMsg); int32_t syncNodeOnSnapshotReply(SSyncNode* ths, SyncSnapshotRsp* pMsg); int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg); int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg); +int32_t syncNodeOnClientRequest(SSyncNode* ths, SyncClientRequest* pMsg, SyncIndex* pRetIndex); +int32_t syncNodeOnTimer(SSyncNode* ths, SyncTimeout* pMsg); +int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg); + // ----------------------------------------- typedef int32_t (*FpOnPingCb)(SSyncNode* ths, SyncPing* pMsg); typedef int32_t (*FpOnPingReplyCb)(SSyncNode* ths, SyncPingReply* pMsg); diff --git a/include/os/osMemory.h b/include/os/osMemory.h index 7ec8366ee4..14d53a7a06 100644 --- a/include/os/osMemory.h +++ b/include/os/osMemory.h @@ -36,6 +36,7 @@ void *taosMemoryStrDup(const char *ptr); void taosMemoryFree(void *ptr); int64_t taosMemorySize(void *ptr); void taosPrintBackTrace(); +void taosMemoryTrim(int32_t size); #define taosMemoryFreeClear(ptr) \ do { \ diff --git a/include/util/tdef.h b/include/util/tdef.h index e298509ad6..6e1fa87854 100644 --- a/include/util/tdef.h +++ b/include/util/tdef.h @@ -360,7 +360,7 @@ typedef enum ELogicConditionType { #define TSDB_DEFAULT_DB_SCHEMALESS TSDB_DB_SCHEMALESS_OFF #define TSDB_MIN_STT_TRIGGER 1 #define TSDB_MAX_STT_TRIGGER 16 -#define TSDB_DEFAULT_SST_TRIGGER 8 +#define TSDB_DEFAULT_SST_TRIGGER 1 #define TSDB_MIN_HASH_PREFIX 0 #define TSDB_MAX_HASH_PREFIX 128 #define TSDB_DEFAULT_HASH_PREFIX 0 diff --git a/include/util/tref.h b/include/util/tref.h index c2cc54cb07..c4b2ec8fa7 100644 --- a/include/util/tref.h +++ b/include/util/tref.h @@ -25,7 +25,8 @@ extern "C" { // open a reference set, max is the mod used by hash, fp is the pointer to free resource function // return rsetId which will be used by other APIs. On error, -1 is returned, and terrno is set appropriately -int32_t taosOpenRef(int32_t max, void (*fp)(void *)); +typedef void (*RefFp)(void *); +int32_t taosOpenRef(int32_t max, RefFp fp); // close the reference set, refId is the return value by taosOpenRef // return 0 if success. On error, -1 is returned, and terrno is set appropriately diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index fbb9e04a25..660730f0dc 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -163,7 +163,8 @@ int32_t tsTtlUnit = 86400; int32_t tsTtlPushInterval = 86400; int32_t tsGrantHBInterval = 60; int32_t tsUptimeInterval = 300; // seconds -char tsUdfdResFuncs[1024] = ""; // udfd resident funcs that teardown when udfd exits +char tsUdfdResFuncs[512] = ""; // udfd resident funcs that teardown when udfd exits +char tsUdfdLdLibPath[512] = ""; #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { @@ -424,6 +425,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddBool(pCfg, "udf", tsStartUdfd, 0) != 0) return -1; if (cfgAddString(pCfg, "udfdResFuncs", tsUdfdResFuncs, 0) != 0) return -1; + if (cfgAddString(pCfg, "udfdLdLibPath", tsUdfdLdLibPath, 0) != 0) return -1; GRANT_CFG_ADD; return 0; } @@ -722,7 +724,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsStartUdfd = cfgGetItem(pCfg, "udf")->bval; tstrncpy(tsUdfdResFuncs, cfgGetItem(pCfg, "udfdResFuncs")->str, sizeof(tsUdfdResFuncs)); - + tstrncpy(tsUdfdLdLibPath, cfgGetItem(pCfg, "udfdLdLibPath")->str, sizeof(tsUdfdLdLibPath)); if (tsQueryBufferSize >= 0) { tsQueryBufferSizeBytes = tsQueryBufferSize * 1048576UL; } diff --git a/source/common/src/tmsg.c b/source/common/src/tmsg.c index ce9b60668e..073e6bc8c6 100644 --- a/source/common/src/tmsg.c +++ b/source/common/src/tmsg.c @@ -1485,6 +1485,7 @@ int32_t tSerializeSDropDnodeReq(void *buf, int32_t bufLen, SDropDnodeReq *pReq) if (tEncodeI32(&encoder, pReq->dnodeId) < 0) return -1; if (tEncodeCStr(&encoder, pReq->fqdn) < 0) return -1; if (tEncodeI32(&encoder, pReq->port) < 0) return -1; + if (tEncodeI8(&encoder, pReq->force) < 0) return -1; tEndEncode(&encoder); int32_t tlen = encoder.pos; @@ -1500,6 +1501,7 @@ int32_t tDeserializeSDropDnodeReq(void *buf, int32_t bufLen, SDropDnodeReq *pReq if (tDecodeI32(&decoder, &pReq->dnodeId) < 0) return -1; if (tDecodeCStrTo(&decoder, pReq->fqdn) < 0) return -1; if (tDecodeI32(&decoder, &pReq->port) < 0) return -1; + if (tDecodeI8(&decoder, &pReq->force) < 0) return -1; tEndDecode(&decoder); tDecoderClear(&decoder); diff --git a/source/common/src/trow.c b/source/common/src/trow.c index b007075efe..e4818aaa87 100644 --- a/source/common/src/trow.c +++ b/source/common/src/trow.c @@ -73,7 +73,13 @@ void tdSCellValPrint(SCellVal *pVal, int8_t colType) { } else if (tdValTypeIsNone(pVal->valType)) { printf("NONE "); return; + } + if(!pVal->val) { + ASSERT(0); + printf("BadVal "); + return; } + switch (colType) { case TSDB_DATA_TYPE_BOOL: printf("%s ", (*(int8_t *)pVal->val) == 0 ? "false" : "true"); @@ -678,6 +684,10 @@ int32_t tdAppendColValToRow(SRowBuilder *pBuilder, col_id_t colId, int8_t colTyp } // TS KEY is stored in STSRow.ts and not included in STSRow.data field. if (colId == PRIMARYKEY_TIMESTAMP_COL_ID) { + if (!val) { + terrno = TSDB_CODE_INVALID_PARA; + return terrno; + } TD_ROW_KEY(pRow) = *(TSKEY *)val; // The primary TS key is Norm all the time, thus its valType is not stored in bitmap. return TSDB_CODE_SUCCESS; diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c index ca8a434d05..07a612bb35 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmWorker.c @@ -20,7 +20,7 @@ static void *dmStatusThreadFp(void *param) { SDnodeMgmt *pMgmt = param; int64_t lastTime = taosGetTimestampMs(); setThreadName("dnode-status"); - + while (1) { taosMsleep(200); if (pMgmt->pData->dropped || pMgmt->pData->stopped) break; @@ -28,6 +28,7 @@ static void *dmStatusThreadFp(void *param) { int64_t curTime = taosGetTimestampMs(); float interval = (curTime - lastTime) / 1000.0f; if (interval >= tsStatusInterval) { + taosMemoryTrim(0); dmSendStatusReq(pMgmt); lastTime = curTime; } diff --git a/source/dnode/mnode/impl/inc/mndMnode.h b/source/dnode/mnode/impl/inc/mndMnode.h index a433af9947..320d3651f0 100644 --- a/source/dnode/mnode/impl/inc/mndMnode.h +++ b/source/dnode/mnode/impl/inc/mndMnode.h @@ -28,7 +28,7 @@ SMnodeObj *mndAcquireMnode(SMnode *pMnode, int32_t mnodeId); void mndReleaseMnode(SMnode *pMnode, SMnodeObj *pObj); bool mndIsMnode(SMnode *pMnode, int32_t dnodeId); void mndGetMnodeEpSet(SMnode *pMnode, SEpSet *pEpSet); -int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj); +int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndQnode.h b/source/dnode/mnode/impl/inc/mndQnode.h index 17615500c4..36eebd3157 100644 --- a/source/dnode/mnode/impl/inc/mndQnode.h +++ b/source/dnode/mnode/impl/inc/mndQnode.h @@ -29,7 +29,7 @@ void mndCleanupQnode(SMnode *pMnode); SQnodeObj *mndAcquireQnode(SMnode *pMnode, int32_t qnodeId); void mndReleaseQnode(SMnode *pMnode, SQnodeObj *pObj); int32_t mndCreateQnodeList(SMnode *pMnode, SArray **pList, int32_t limit); -int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj); +int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndSnode.h b/source/dnode/mnode/impl/inc/mndSnode.h index ec7bb02ca7..342bc23712 100644 --- a/source/dnode/mnode/impl/inc/mndSnode.h +++ b/source/dnode/mnode/impl/inc/mndSnode.h @@ -27,7 +27,7 @@ void mndCleanupSnode(SMnode *pMnode); SSnodeObj *mndAcquireSnode(SMnode *pMnode, int32_t qnodeId); void mndReleaseSnode(SMnode *pMnode, SSnodeObj *pObj); SEpSet mndAcquireEpFromSnode(SMnode *pMnode, const SSnodeObj *pSnode); -int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj); +int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj, bool force); #ifdef __cplusplus } diff --git a/source/dnode/mnode/impl/inc/mndVgroup.h b/source/dnode/mnode/impl/inc/mndVgroup.h index 76c3519808..94469899fc 100644 --- a/source/dnode/mnode/impl/inc/mndVgroup.h +++ b/source/dnode/mnode/impl/inc/mndVgroup.h @@ -42,8 +42,7 @@ int32_t mndAddCreateVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *p int32_t mndAddAlterVnodeConfirmAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup); int32_t mndAddAlterVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, tmsg_t msgType); int32_t mndAddDropVnodeAction(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, SVnodeGid *pVgid, bool isRedo); -int32_t mndSetMoveVgroupInfoToTrans(SMnode *, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, int32_t vn, SArray *pArray); -int32_t mndSetMoveVgroupsInfoToTrans(SMnode *, STrans *pTrans, int32_t dropDnodeId); +int32_t mndSetMoveVgroupsInfoToTrans(SMnode *, STrans *pTrans, int32_t dropDnodeId, bool force); int32_t mndBuildAlterVgroupAction(SMnode *pMnode, STrans *pTrans, SDbObj *pOldDb, SDbObj *pNewDb, SVgObj *pVgroup, SArray *pArray); diff --git a/source/dnode/mnode/impl/src/mndDnode.c b/source/dnode/mnode/impl/src/mndDnode.c index 5307117533..c4ab741a41 100644 --- a/source/dnode/mnode/impl/src/mndDnode.c +++ b/source/dnode/mnode/impl/src/mndDnode.c @@ -670,7 +670,7 @@ _OVER: } static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SMnodeObj *pMObj, SQnodeObj *pQObj, - SSnodeObj *pSObj, int32_t numOfVnodes) { + SSnodeObj *pSObj, int32_t numOfVnodes, bool force) { int32_t code = -1; SSdbRaw *pRaw = NULL; STrans *pTrans = NULL; @@ -678,7 +678,7 @@ static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SM pTrans = mndTransCreate(pMnode, TRN_POLICY_RETRY, TRN_CONFLICT_GLOBAL, pReq, "drop-dnode"); if (pTrans == NULL) goto _OVER; mndTransSetSerial(pTrans); - mInfo("trans:%d, used to drop dnode:%d", pTrans->id, pDnode->id); + mInfo("trans:%d, used to drop dnode:%d, force:%d", pTrans->id, pDnode->id, force); pRaw = mndDnodeActionEncode(pDnode); if (pRaw == NULL) goto _OVER; @@ -694,22 +694,22 @@ static int32_t mndDropDnode(SMnode *pMnode, SRpcMsg *pReq, SDnodeObj *pDnode, SM if (pMObj != NULL) { mInfo("trans:%d, mnode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pMObj) != 0) goto _OVER; + if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pMObj, force) != 0) goto _OVER; } if (pQObj != NULL) { mInfo("trans:%d, qnode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pQObj) != 0) goto _OVER; + if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pQObj, force) != 0) goto _OVER; } if (pSObj != NULL) { mInfo("trans:%d, snode on dnode:%d will be dropped", pTrans->id, pDnode->id); - if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pSObj) != 0) goto _OVER; + if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pSObj, force) != 0) goto _OVER; } if (numOfVnodes > 0) { mInfo("trans:%d, %d vnodes on dnode:%d will be dropped", pTrans->id, numOfVnodes, pDnode->id); - if (mndSetMoveVgroupsInfoToTrans(pMnode, pTrans, pDnode->id) != 0) goto _OVER; + if (mndSetMoveVgroupsInfoToTrans(pMnode, pTrans, pDnode->id, force) != 0) goto _OVER; } if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; @@ -767,16 +767,16 @@ static int32_t mndProcessDropDnodeReq(SRpcMsg *pReq) { } int32_t numOfVnodes = mndGetVnodesNum(pMnode, pDnode->id); - if (numOfVnodes > 0 || pMObj != NULL) { + if ((numOfVnodes > 0 || pMObj != NULL || pSObj != NULL || pQObj != NULL) && !dropReq.force) { if (!mndIsDnodeOnline(pDnode, taosGetTimestampMs())) { terrno = TSDB_CODE_NODE_OFFLINE; - mError("dnode:%d, failed to drop since %s, has_mnode:%d numOfVnodes:%d", pDnode->id, terrstr(), pMObj != NULL, - numOfVnodes); + mError("dnode:%d, failed to drop since %s, vnodes:%d mnode:%d qnode:%d snode:%d", pDnode->id, terrstr(), + numOfVnodes, pMObj != NULL, pQObj != NULL, pSObj != NULL); goto _OVER; } } - code = mndDropDnode(pMnode, pReq, pDnode, pMObj, pQObj, pSObj, numOfVnodes); + code = mndDropDnode(pMnode, pReq, pDnode, pMObj, pQObj, pSObj, numOfVnodes, dropReq.force); if (code == 0) code = TSDB_CODE_ACTION_IN_PROGRESS; _OVER: diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c index bf60bb55e2..53e7b1cd26 100644 --- a/source/dnode/mnode/impl/src/mndMain.c +++ b/source/dnode/mnode/impl/src/mndMain.c @@ -481,7 +481,7 @@ int32_t mndProcessSyncCtrlMsg(SRpcMsg *pMsg) { mInfo("vgId:%d, process sync ctrl msg", 1); - if (!syncEnvIsStart()) { + if (!syncIsInit()) { mError("failed to process sync msg:%p type:%s since syncEnv stop", pMsg, TMSG_INFO(pMsg->msgType)); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -518,7 +518,7 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { SSyncMgmt *pMgmt = &pMnode->syncMgmt; int32_t code = 0; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { mError("failed to process sync msg:%p type:%s since syncEnv stop", pMsg, TMSG_INFO(pMsg->msgType)); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -538,12 +538,12 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { } else if (pMsg->msgType == TDMT_SYNC_PING) { SyncPing *pSyncMsg = syncPingFromRpcMsg2(pMsg); - code = syncNodeOnPingCb(pSyncNode, pSyncMsg); + code = syncNodeOnPing(pSyncNode, pSyncMsg); syncPingDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_PING_REPLY) { SyncPingReply *pSyncMsg = syncPingReplyFromRpcMsg2(pMsg); - code = syncNodeOnPingReplyCb(pSyncNode, pSyncMsg); + code = syncNodeOnPingReply(pSyncNode, pSyncMsg); syncPingReplyDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_CLIENT_REQUEST) { @@ -581,10 +581,10 @@ int32_t mndProcessSyncMsg(SRpcMsg *pMsg) { code = syncNodeOnSnapshotReply(pSyncNode, pSyncMsg); syncSnapshotRspDestroy(pSyncMsg); - } else if (pMsg->msgType == TDMT_SYNC_SET_MNODE_STANDBY) { - code = syncSetStandby(pMgmt->sync); - SRpcMsg rsp = {.code = code, .info = pMsg->info}; - tmsgSendRsp(&rsp); + } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) { + SyncLocalCmd *pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg); + code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg); + syncLocalCmdDestroy(pSyncMsg); } else { mError("failed to process msg:%p since invalid type:%s", pMsg, TMSG_INFO(pMsg->msgType)); diff --git a/source/dnode/mnode/impl/src/mndMnode.c b/source/dnode/mnode/impl/src/mndMnode.c index 5889a162f8..563b3cd3cf 100644 --- a/source/dnode/mnode/impl/src/mndMnode.c +++ b/source/dnode/mnode/impl/src/mndMnode.c @@ -472,7 +472,8 @@ static int32_t mndSetDropMnodeCommitLogs(SMnode *pMnode, STrans *pTrans, SMnodeO return 0; } -static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj) { +static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnodeObj *pDnode, SMnodeObj *pObj, + bool force) { SSdb *pSdb = pMnode->pSdb; void *pIter = NULL; SDDropMnodeReq dropReq = {0}; @@ -485,12 +486,21 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode int32_t totalMnodes = sdbGetSize(pSdb, SDB_MNODE); if (totalMnodes == 2) { + if (force) { + mError("cant't force drop dnode, since a mnode on it and replica is 2"); + terrno = TSDB_CODE_NODE_OFFLINE; + return -1; + } mInfo("vgId:1, has %d mnodes, exec redo log first", totalMnodes); if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + if (!force) { + if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + } } else if (totalMnodes == 3) { mInfo("vgId:1, has %d mnodes, exec redo action first", totalMnodes); - if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + if (!force) { + if (mndBuildDropMnodeRedoAction(pTrans, &dropReq, &dropEpSet) != 0) return -1; + } if (mndSetDropMnodeRedoLogs(pMnode, pTrans, pObj) != 0) return -1; } else { return -1; @@ -499,9 +509,9 @@ static int32_t mndSetDropMnodeRedoActions(SMnode *pMnode, STrans *pTrans, SDnode return 0; } -int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj) { +int32_t mndSetDropMnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SMnodeObj *pObj, bool force) { if (pObj == NULL) return 0; - if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj) != 0) return -1; + if (mndSetDropMnodeRedoActions(pMnode, pTrans, pObj->pDnode, pObj, force) != 0) return -1; if (mndSetDropMnodeCommitLogs(pMnode, pTrans, pObj) != 0) return -1; return 0; } @@ -515,7 +525,7 @@ static int32_t mndDropMnode(SMnode *pMnode, SRpcMsg *pReq, SMnodeObj *pObj) { mndTransSetSerial(pTrans); mInfo("trans:%d, used to drop mnode:%d", pTrans->id, pObj->id); - if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropMnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; @@ -743,7 +753,7 @@ static void mndReloadSyncConfig(SMnode *pMnode) { mInfo("vgId:1, mnode sync not reconfig since readyMnodes:%d updatingMnodes:%d", readyMnodes, updatingMnodes); return; } - // ASSERT(0); + // ASSERT(0); if (cfg.myIndex == -1) { #if 1 diff --git a/source/dnode/mnode/impl/src/mndQnode.c b/source/dnode/mnode/impl/src/mndQnode.c index 70f9b35312..434e6fbc52 100644 --- a/source/dnode/mnode/impl/src/mndQnode.c +++ b/source/dnode/mnode/impl/src/mndQnode.c @@ -353,11 +353,13 @@ static int32_t mndSetDropQnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SQn return 0; } -int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj) { +int32_t mndSetDropQnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SQnodeObj *pObj, bool force) { if (pObj == NULL) return 0; if (mndSetDropQnodeRedoLogs(pTrans, pObj) != 0) return -1; if (mndSetDropQnodeCommitLogs(pTrans, pObj) != 0) return -1; - if (mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + if (!force) { + if (mndSetDropQnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + } return 0; } @@ -368,7 +370,7 @@ static int32_t mndDropQnode(SMnode *pMnode, SRpcMsg *pReq, SQnodeObj *pObj) { if (pTrans == NULL) goto _OVER; mInfo("trans:%d, used to drop qnode:%d", pTrans->id, pObj->id); - if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropQnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; diff --git a/source/dnode/mnode/impl/src/mndSnode.c b/source/dnode/mnode/impl/src/mndSnode.c index bb93745aee..7753e5b127 100644 --- a/source/dnode/mnode/impl/src/mndSnode.c +++ b/source/dnode/mnode/impl/src/mndSnode.c @@ -360,11 +360,13 @@ static int32_t mndSetDropSnodeRedoActions(STrans *pTrans, SDnodeObj *pDnode, SSn return 0; } -int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj) { +int32_t mndSetDropSnodeInfoToTrans(SMnode *pMnode, STrans *pTrans, SSnodeObj *pObj, bool force) { if (pObj == NULL) return 0; if (mndSetDropSnodeRedoLogs(pTrans, pObj) != 0) return -1; if (mndSetDropSnodeCommitLogs(pTrans, pObj) != 0) return -1; - if (mndSetDropSnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + if (!force) { + if (mndSetDropSnodeRedoActions(pTrans, pObj->pDnode, pObj) != 0) return -1; + } return 0; } @@ -375,7 +377,7 @@ static int32_t mndDropSnode(SMnode *pMnode, SRpcMsg *pReq, SSnodeObj *pObj) { if (pTrans == NULL) goto _OVER; mInfo("trans:%d, used to drop snode:%d", pTrans->id, pObj->id); - if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pObj) != 0) goto _OVER; + if (mndSetDropSnodeInfoToTrans(pMnode, pTrans, pObj, false) != 0) goto _OVER; if (mndTransPrepare(pMnode, pTrans) != 0) goto _OVER; code = 0; @@ -386,9 +388,9 @@ _OVER: } static int32_t mndProcessDropSnodeReq(SRpcMsg *pReq) { - SMnode *pMnode = pReq->info.node; - int32_t code = -1; - SSnodeObj *pObj = NULL; + SMnode *pMnode = pReq->info.node; + int32_t code = -1; + SSnodeObj *pObj = NULL; SMDropSnodeReq dropReq = {0}; if (tDeserializeSCreateDropMQSNodeReq(pReq->pCont, pReq->contLen, &dropReq) != 0) { diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c index 4b1906ba70..641a8af437 100644 --- a/source/dnode/mnode/impl/src/mndStb.c +++ b/source/dnode/mnode/impl/src/mndStb.c @@ -2029,7 +2029,7 @@ static int32_t mndSetDropStbRedoActions(SMnode *pMnode, STrans *pTrans, SDbObj * action.pCont = pReq; action.contLen = contLen; action.msgType = TDMT_VND_DROP_STB; - action.acceptableCode = TSDB_CODE_VND_TB_NOT_EXIST; + action.acceptableCode = TSDB_CODE_TDB_STB_NOT_EXIST; if (mndTransAppendRedoAction(pTrans, &action) != 0) { taosMemoryFree(pReq); sdbCancelFetch(pSdb, pIter); diff --git a/source/dnode/mnode/impl/src/mndSync.c b/source/dnode/mnode/impl/src/mndSync.c index df4b526775..6853ff5ccc 100644 --- a/source/dnode/mnode/impl/src/mndSync.c +++ b/source/dnode/mnode/impl/src/mndSync.c @@ -17,11 +17,44 @@ #include "mndSync.h" #include "mndTrans.h" -static int32_t mndSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { +static int32_t mndSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + SMsgHead *pHead = pMsg->pCont; pHead->contLen = htonl(pHead->contLen); pHead->vgId = htonl(pHead->vgId); + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + return -1; + } + + int32_t code = tmsgPutToQueue(msgcb, SYNC_CTRL_QUEUE, pMsg); + if (code != 0) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + } + return code; +} + +static int32_t mndSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + SMsgHead *pHead = pMsg->pCont; + pHead->contLen = htonl(pHead->contLen); + pHead->vgId = htonl(pHead->vgId); + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; + return -1; + } + int32_t code = tmsgPutToQueue(msgcb, SYNC_QUEUE, pMsg); if (code != 0) { rpcFreeCont(pMsg->pCont); @@ -212,7 +245,7 @@ int32_t mndInitSync(SMnode *pMnode) { .msgcb = NULL, .FpSendMsg = mndSyncSendMsg, .FpEqMsg = mndSyncEqMsg, - .FpEqCtrlMsg = NULL, + .FpEqCtrlMsg = mndSyncEqCtrlMsg, }; snprintf(syncInfo.path, sizeof(syncInfo.path), "%s%ssync", pMnode->path, TD_DIRSEP); diff --git a/source/dnode/mnode/impl/src/mndVgroup.c b/source/dnode/mnode/impl/src/mndVgroup.c index c409a57d87..72a4621eae 100644 --- a/source/dnode/mnode/impl/src/mndVgroup.c +++ b/source/dnode/mnode/impl/src/mndVgroup.c @@ -1071,7 +1071,7 @@ int32_t mndAddDropVnodeAction(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgOb } int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, SVgObj *pVgroup, int32_t vnIndex, - SArray *pArray) { + SArray *pArray, bool force) { SVgObj newVg = {0}; memcpy(&newVg, pVgroup, sizeof(SVgObj)); @@ -1080,24 +1080,45 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, mInfo("vgId:%d, vnode:%d dnode:%d", newVg.vgId, i, newVg.vnodeGid[i].dnodeId); } - mInfo("vgId:%d, will add 1 vnodes", pVgroup->vgId); - if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; - if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[newVg.replica - 1]) != 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; - } - if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + if (!force) { + mInfo("vgId:%d, will add 1 vnode", pVgroup->vgId); + if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; + if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[newVg.replica - 1]) != 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; + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; - mInfo("vgId:%d, will remove 1 vnodes", pVgroup->vgId); - newVg.replica--; - SVnodeGid del = newVg.vnodeGid[vnIndex]; - newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; - memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); - if (mndAddDropVnodeAction(pMnode, pTrans, pDb, &newVg, &del, true) != 0) return -1; - for (int32_t i = 0; i < newVg.replica; ++i) { - if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + mInfo("vgId:%d, will remove 1 vnode", pVgroup->vgId); + newVg.replica--; + SVnodeGid del = newVg.vnodeGid[vnIndex]; + newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; + memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); + if (mndAddDropVnodeAction(pMnode, pTrans, pDb, &newVg, &del, true) != 0) return -1; + for (int32_t i = 0; i < newVg.replica; ++i) { + if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + } else { + mInfo("vgId:%d, will add 1 vnode and force remove 1 vnode", pVgroup->vgId); + if (mndAddVnodeToVgroup(pMnode, &newVg, pArray) != 0) return -1; + newVg.replica--; + SVnodeGid del = newVg.vnodeGid[vnIndex]; + newVg.vnodeGid[vnIndex] = newVg.vnodeGid[newVg.replica]; + memset(&newVg.vnodeGid[newVg.replica], 0, sizeof(SVnodeGid)); + + if (mndAddCreateVnodeAction(pMnode, pTrans, pDb, &newVg, &newVg.vnodeGid[vnIndex]) != 0) return -1; + for (int32_t i = 0; i < newVg.replica; ++i) { + if (i != vnIndex) { + if (mndAddAlterVnodeReplicaAction(pMnode, pTrans, pDb, &newVg, newVg.vnodeGid[i].dnodeId) != 0) return -1; + } + } + if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; + + if (newVg.replica == 1) { + mInfo("vgId:%d, all data is dropped since replica=1", pVgroup->vgId); + } } - if (mndAddAlterVnodeConfirmAction(pMnode, pTrans, pDb, &newVg) != 0) return -1; { SSdbRaw *pRaw = mndVgroupActionEncode(&newVg); @@ -1120,7 +1141,7 @@ int32_t mndSetMoveVgroupInfoToTrans(SMnode *pMnode, STrans *pTrans, SDbObj *pDb, return 0; } -int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t delDnodeId) { +int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t delDnodeId, bool force) { int32_t code = 0; SArray *pArray = mndBuildDnodesArray(pMnode, delDnodeId); if (pArray == NULL) return -1; @@ -1141,9 +1162,9 @@ int32_t mndSetMoveVgroupsInfoToTrans(SMnode *pMnode, STrans *pTrans, int32_t del code = 0; if (vnIndex != -1) { - mInfo("vgId:%d, vnode:%d will be removed from dnode:%d", pVgroup->vgId, vnIndex, delDnodeId); + mInfo("vgId:%d, vnode:%d will be removed from dnode:%d, force:%d", pVgroup->vgId, vnIndex, delDnodeId, force); SDbObj *pDb = mndAcquireDb(pMnode, pVgroup->dbName); - code = mndSetMoveVgroupInfoToTrans(pMnode, pTrans, pDb, pVgroup, vnIndex, pArray); + code = mndSetMoveVgroupInfoToTrans(pMnode, pTrans, pDb, pVgroup, vnIndex, pArray, force); mndReleaseDb(pMnode, pDb); } diff --git a/source/dnode/vnode/inc/vnode.h b/source/dnode/vnode/inc/vnode.h index bed6e93e5a..6200c88d75 100644 --- a/source/dnode/vnode/inc/vnode.h +++ b/source/dnode/vnode/inc/vnode.h @@ -152,26 +152,25 @@ typedef struct STsdbReader STsdbReader; #define CACHESCAN_RETRIEVE_LAST_ROW 0x4 #define CACHESCAN_RETRIEVE_LAST 0x8 -int32_t tsdbSetTableId(STsdbReader *pReader, int64_t uid); -int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, SArray *pTableList, STsdbReader **ppReader, - const char *idstr); +int32_t tsdbSetTableList(STsdbReader *pReader, const void *pTableList, int32_t num); +int32_t tsdbReaderOpen(SVnode *pVnode, SQueryTableDataCond *pCond, void *pTableList, int32_t numOfTables, + STsdbReader **ppReader, const char *idstr); void tsdbReaderClose(STsdbReader *pReader); bool tsdbNextDataBlock(STsdbReader *pReader); -bool tsdbTableNextDataBlock(STsdbReader *pReader, int64_t uid); +bool tsdbTableNextDataBlock(STsdbReader *pReader, uint64_t uid); void tsdbRetrieveDataBlockInfo(STsdbReader *pReader, SDataBlockInfo *pDataBlockInfo); int32_t tsdbRetrieveDatablockSMA(STsdbReader *pReader, SColumnDataAgg ***pBlockStatis, bool *allHave); SArray *tsdbRetrieveDataBlock(STsdbReader *pTsdbReadHandle, SArray *pColumnIdList); int32_t tsdbReaderReset(STsdbReader *pReader, SQueryTableDataCond *pCond); int32_t tsdbGetFileBlocksDistInfo(STsdbReader *pReader, STableBlockDistInfo *pTableBlockInfo); int64_t tsdbGetNumOfRowsInMemTable(STsdbReader *pHandle); -bool tsdbIsAscendingOrder(STsdbReader *pReader); void *tsdbGetIdx(SMeta *pMeta); void *tsdbGetIvtIdx(SMeta *pMeta); uint64_t getReaderMaxVersion(STsdbReader *pReader); -int32_t tsdbCacherowsReaderOpen(void *pVnode, int32_t type, SArray *pTableIdList, int32_t numOfCols, uint64_t suid, - void **pReader); +int32_t tsdbCacherowsReaderOpen(void *pVnode, int32_t type, void *pTableIdList, int32_t numOfTables, int32_t numOfCols, + uint64_t suid, void **pReader); int32_t tsdbRetrieveCacheRows(void *pReader, SSDataBlock *pResBlock, const int32_t *slotIds, SArray *pTableUids); void *tsdbCacherowsReaderClose(void *pReader); int32_t tsdbGetTableSchema(SVnode *pVnode, int64_t uid, STSchema **pSchema, int64_t *suid); diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index e5b8a1f327..c4e7ff92b7 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -716,7 +716,9 @@ typedef struct SCacheRowsReader { int32_t numOfCols; int32_t type; int32_t tableIndex; // currently returned result tables - SArray *pTableList; // table id list + + STableKeyInfo *pTableList; // table id list + int32_t numOfTables; SSttBlockLoadInfo *pLoadInfo; STsdbReadSnap *pReadSnap; SDataFReader *pDataFReader; diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index 12b4ee4139..9ec8bb2cfd 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -162,10 +162,7 @@ int tsdbInsertData(STsdb* pTsdb, int64_t version, SSubmitReq* pMsg, SSub int32_t tsdbInsertTableData(STsdb* pTsdb, int64_t version, SSubmitMsgIter* pMsgIter, SSubmitBlk* pBlock, SSubmitBlkRsp* pRsp); int32_t tsdbDeleteTableData(STsdb* pTsdb, int64_t version, tb_uid_t suid, tb_uid_t uid, TSKEY sKey, TSKEY eKey); -STsdbReader tsdbQueryCacheLastT(STsdb* tsdb, SQueryTableDataCond* pCond, STableListInfo* tableList, uint64_t qId, - void* pMemRef); int32_t tsdbSetKeepCfg(STsdb* pTsdb, STsdbCfg* pCfg); -int32_t tsdbGetStbIdList(SMeta* pMeta, int64_t suid, SArray* list); // tq int tqInit(); diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c index 19a0fbd629..03532eb6d4 100644 --- a/source/dnode/vnode/src/sma/smaRollup.c +++ b/source/dnode/vnode/src/sma/smaRollup.c @@ -701,25 +701,28 @@ static int32_t tdRSmaExecAndSubmitResult(SSma *pSma, qTaskInfo_t taskInfo, SRSma #endif for (int32_t i = 0; i < taosArrayGetSize(pResList); ++i) { SSDataBlock *output = taosArrayGetP(pResList, i); + smaDebug("result block, uid:%"PRIu64", groupid:%"PRIu64", rows:%d", output->info.uid, output->info.groupId, + output->info.rows); + STsdb *sinkTsdb = (pItem->level == TSDB_RETENTION_L1 ? pSma->pRSmaTsdb[0] : pSma->pRSmaTsdb[1]); SSubmitReq *pReq = NULL; // TODO: the schema update should be handled later(TD-17965) if (buildSubmitReqFromDataBlock(&pReq, output, pTSchema, SMA_VID(pSma), suid) < 0) { - smaError("vgId:%d, build submit req for rsma table %" PRIi64 " level %" PRIi8 " failed since %s", SMA_VID(pSma), - suid, pItem->level, terrstr()); + smaError("vgId:%d, build submit req for rsma table suid:%" PRIu64 ", uid:%"PRIu64", level %" PRIi8 " failed since %s", SMA_VID(pSma), + suid, output->info.groupId, pItem->level, terrstr()); goto _err; } if (pReq && tdProcessSubmitReq(sinkTsdb, output->info.version, pReq) < 0) { taosMemoryFreeClear(pReq); - smaError("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " failed since %s", - SMA_VID(pSma), suid, pItem->level, terrstr()); + smaError("vgId:%d, process submit req for rsma suid:%"PRIu64", uid:%" PRIu64 " level %" PRIi8 " failed since %s", + SMA_VID(pSma), suid, output->info.groupId, pItem->level, terrstr()); goto _err; } - smaDebug("vgId:%d, process submit req for rsma table %" PRIi64 " level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, - SMA_VID(pSma), suid, pItem->level, output->info.version, htonl(pReq->header.contLen)); + smaDebug("vgId:%d, process submit req for rsma suid:%" PRIu64 ",uid:%"PRIu64", level %" PRIi8 " ver %" PRIi64 " len %" PRIu32, + SMA_VID(pSma), suid, output->info.groupId, pItem->level, output->info.version, htonl(pReq->header.contLen)); taosMemoryFreeClear(pReq); } diff --git a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c index b8f49f38e4..dbc02363ea 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c @@ -97,10 +97,9 @@ static void saveOneRow(SArray* pRow, SSDataBlock* pBlock, SCacheRowsReader* pRea } } -int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList, int32_t numOfCols, uint64_t suid, - void** pReader) { +int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList, int32_t numOfTables, int32_t numOfCols, + uint64_t suid, void** pReader) { *pReader = NULL; - SCacheRowsReader* p = taosMemoryCalloc(1, sizeof(SCacheRowsReader)); if (p == NULL) { return TSDB_CODE_OUT_OF_MEMORY; @@ -111,14 +110,15 @@ int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, SArray* pTableIdList p->numOfCols = numOfCols; p->suid = suid; - if (taosArrayGetSize(pTableIdList) == 0) { + if (numOfTables == 0) { *pReader = p; return TSDB_CODE_SUCCESS; } - STableKeyInfo* pKeyInfo = taosArrayGet(pTableIdList, 0); + STableKeyInfo* pKeyInfo = &((STableKeyInfo*)pTableIdList)[0]; p->pSchema = metaGetTbTSchema(p->pVnode->pMeta, pKeyInfo->uid, -1, 1); p->pTableList = pTableIdList; + p->numOfTables = numOfTables; p->transferBuf = taosMemoryCalloc(p->pSchema->numOfCols, POINTER_BYTES); if (p->transferBuf == NULL) { @@ -205,7 +205,6 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 SLRUCache* lruCache = pr->pVnode->pTsdb->lruCache; LRUHandle* h = NULL; SArray* pRow = NULL; - size_t numOfTables = taosArrayGetSize(pr->pTableList); bool hasRes = false; SArray* pLastCols = NULL; @@ -243,8 +242,8 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 // retrieve the only one last row of all tables in the uid list. if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_SINGLE)) { - for (int32_t i = 0; i < numOfTables; ++i) { - STableKeyInfo* pKeyInfo = taosArrayGet(pr->pTableList, i); + for (int32_t i = 0; i < pr->numOfTables; ++i) { + STableKeyInfo* pKeyInfo = &pr->pTableList[i]; code = doExtractCacheRow(pr, lruCache, pKeyInfo->uid, &pRow, &h); if (code != TSDB_CODE_SUCCESS) { @@ -308,8 +307,8 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 } } else if (HASTYPE(pr->type, CACHESCAN_RETRIEVE_TYPE_ALL)) { - for (int32_t i = pr->tableIndex; i < numOfTables; ++i) { - STableKeyInfo* pKeyInfo = (STableKeyInfo*)taosArrayGet(pr->pTableList, i); + for (int32_t i = pr->tableIndex; i < pr->numOfTables; ++i) { + STableKeyInfo* pKeyInfo = &pr->pTableList[i]; code = doExtractCacheRow(pr, lruCache, pKeyInfo->uid, &pRow, &h); if (code != TSDB_CODE_SUCCESS) { return code; @@ -334,7 +333,7 @@ int32_t tsdbRetrieveCacheRows(void* pReader, SSDataBlock* pResBlock, const int32 code = TSDB_CODE_INVALID_PARA; } -_end: + _end: tsdbDataFReaderClose(&pr->pDataFReaderLast); tsdbDataFReaderClose(&pr->pDataFReader); diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c index 5a495f263e..5f90c567be 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead.c @@ -270,24 +270,27 @@ static void resetDataBlockScanInfo(SHashObj* pTableMap, int64_t ts) { } } +static void clearBlockScanInfo(STableBlockScanInfo* p) { + p->iterInit = false; + p->iiter.hasVal = false; + + if (p->iter.iter != NULL) { + p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter); + } + + if (p->iiter.iter != NULL) { + p->iiter.iter = tsdbTbDataIterDestroy(p->iiter.iter); + } + + p->delSkyline = taosArrayDestroy(p->delSkyline); + p->pBlockList = taosArrayDestroy(p->pBlockList); + tMapDataClear(&p->mapData); +} + static void destroyBlockScanInfo(SHashObj* pTableMap) { STableBlockScanInfo* p = NULL; - while ((p = taosHashIterate(pTableMap, p)) != NULL) { - p->iterInit = false; - p->iiter.hasVal = false; - - if (p->iter.iter != NULL) { - p->iter.iter = tsdbTbDataIterDestroy(p->iter.iter); - } - - if (p->iiter.iter != NULL) { - p->iiter.iter = tsdbTbDataIterDestroy(p->iiter.iter); - } - - p->delSkyline = taosArrayDestroy(p->delSkyline); - p->pBlockList = taosArrayDestroy(p->pBlockList); - tMapDataClear(&p->mapData); + clearBlockScanInfo(p); } taosHashCleanup(pTableMap); @@ -951,7 +954,7 @@ static int32_t copyBlockDataToSDataBlock(STsdbReader* pReader, STableBlockScanIn int32_t unDumpedRows = asc ? pBlock->nRow - pDumpInfo->rowIndex : pDumpInfo->rowIndex + 1; tsdbDebug("%p copy file block to sdatablock, global index:%d, table index:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, remain:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", + ", rows:%d, remain:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, remain, unDumpedRows, pBlock->minVer, pBlock->maxVer, elapsedTime, pReader->idStr); @@ -978,7 +981,7 @@ static int32_t doLoadFileBlockData(STsdbReader* pReader, SDataBlockIter* pBlockI code = tsdbReadDataBlock(pReader->pFileReader, pBlock, pBlockData); if (code != TSDB_CODE_SUCCESS) { tsdbError("%p error occurs in loading file block, global index:%d, table index:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, code:%s %s", + ", rows:%d, code:%s %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, pBlock->nRow, tstrerror(code), pReader->idStr); return code; @@ -987,7 +990,7 @@ static int32_t doLoadFileBlockData(STsdbReader* pReader, SDataBlockIter* pBlockI double elapsedTime = (taosGetTimestampUs() - st) / 1000.0; tsdbDebug("%p load file block into buffer, global index:%d, index in table block list:%d, brange:%" PRId64 "-%" PRId64 - ", rows:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", + ", rows:%d, minVer:%" PRId64 ", maxVer:%" PRId64 ", elapsed time:%.2f ms, %s", pReader, pBlockIter->index, pBlockInfo->tbBlockIdx, pBlock->minKey.ts, pBlock->maxKey.ts, pBlock->nRow, pBlock->minVer, pBlock->maxVer, elapsedTime, pReader->idStr); @@ -1438,7 +1441,7 @@ static int32_t buildDataBlockFromBuf(STsdbReader* pReader, STableBlockScanInfo* double elapsedTime = (taosGetTimestampUs() - st) / 1000.0; tsdbDebug("%p build data block from cache completed, elapsed time:%.2f ms, numOfRows:%d, brange:%" PRId64 - " - %" PRId64 " %s", + " - %" PRId64 " %s", pReader, elapsedTime, pBlock->info.rows, pBlock->info.window.skey, pBlock->info.window.ekey, pReader->idStr); @@ -1864,7 +1867,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo* if (minKey == key) { init = true; TSDBROW fRow = tsdbRowFromBlockData(pBlockData, pDumpInfo->rowIndex); - int32_t code = tRowMergerInit(&merge, &fRow, pReader->pSchema); + code = tRowMergerInit(&merge, &fRow, pReader->pSchema); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -1878,7 +1881,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo* tRowMerge(&merge, &fRow1); } else { init = true; - int32_t code = tRowMergerInit(&merge, &fRow1, pReader->pSchema); + code = tRowMergerInit(&merge, &fRow1, pReader->pSchema); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -2304,7 +2307,7 @@ _end: if (pResBlock->info.rows > 0) { tsdbDebug("%p uid:%" PRIu64 ", composed data block created, brange:%" PRIu64 "-%" PRIu64 - " rows:%d, elapsed time:%.2f ms %s", + " rows:%d, elapsed time:%.2f ms %s", pReader, pResBlock->info.uid, pResBlock->info.window.skey, pResBlock->info.window.ekey, pResBlock->info.rows, el, pReader->idStr); } @@ -2811,8 +2814,8 @@ static STsdb* getTsdbByRetentions(SVnode* pVnode, TSKEY winSKey, SRetention* ret int8_t precision = pVnode->config.tsdbCfg.precision; int64_t now = taosGetTimestamp(precision); int64_t offset = tsQueryRsmaTolerance * ((precision == TSDB_TIME_PRECISION_MILLI) ? 1L - : (precision == TSDB_TIME_PRECISION_MICRO) ? 1000L - : 1000000L); + : (precision == TSDB_TIME_PRECISION_MICRO) ? 1000L + : 1000000L); for (int8_t i = 0; i < TSDB_RETENTION_MAX; ++i) { SRetention* pRetention = retentions + level; @@ -3452,13 +3455,23 @@ int32_t buildDataBlockFromBufImpl(STableBlockScanInfo* pBlockScanInfo, int64_t e return TSDB_CODE_SUCCESS; } -// todo refactor, use arraylist instead -int32_t tsdbSetTableId(STsdbReader* pReader, int64_t uid) { +// TODO refactor: with createDataBlockScanInfo +int32_t tsdbSetTableList(STsdbReader* pReader, const void* pTableList, int32_t num) { ASSERT(pReader != NULL); + + STableBlockScanInfo* p = NULL; + while ((p = taosHashIterate(pReader->status.pTableMap, p)) != NULL) { + clearBlockScanInfo(p); + } + taosHashClear(pReader->status.pTableMap); - STableBlockScanInfo info = {.lastKey = 0, .uid = uid}; - taosHashPut(pReader->status.pTableMap, &info.uid, sizeof(uint64_t), &info, sizeof(info)); + STableKeyInfo* pList = (STableKeyInfo*) pTableList; + for(int32_t i = 0; i < num; ++i) { + STableBlockScanInfo info = {.lastKey = 0, .uid = pList[i].uid}; + taosHashPut(pReader->status.pTableMap, &info.uid, sizeof(uint64_t), &info, sizeof(info)); + } + return TDB_CODE_SUCCESS; } @@ -3483,6 +3496,7 @@ static int32_t doOpenReaderImpl(STsdbReader* pReader) { initFilesetIterator(&pReader->status.fileIter, pReader->pReadSnap->fs.aDFileSet, pReader); resetDataBlockIterator(&pReader->status.blockIter, pReader->order); +// resetDataBlockScanInfo(pReader->status.pTableMap, pReader->window.skey); // no data in files, let's try buffer in memory if (pReader->status.fileIter.numOfFiles == 0) { @@ -3494,8 +3508,8 @@ static int32_t doOpenReaderImpl(STsdbReader* pReader) { } // ====================================== EXPOSED APIs ====================================== -int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTableList, STsdbReader** ppReader, - const char* idstr) { +int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, void* pTableList, int32_t numOfTables, + STsdbReader** ppReader, const char* idstr) { STimeWindow window = pCond->twindows; if (pCond->type == TIMEWINDOW_RANGE_EXTERNAL) { pCond->twindows.skey += 1; @@ -3554,8 +3568,8 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl if (pReader->pSchema == NULL) { tsdbError("failed to get table schema, suid:%" PRIu64 ", ver:-1, %s", pReader->suid, pReader->idStr); } - } else if (taosArrayGetSize(pTableList) > 0) { - STableKeyInfo* pKey = taosArrayGet(pTableList, 0); + } else if (numOfTables > 0) { + STableKeyInfo* pKey = pTableList; pReader->pSchema = metaGetTbTSchema(pReader->pTsdb->pVnode->pMeta, pKey->uid, -1, 1); if (pReader->pSchema == NULL) { tsdbError("failed to get table schema, uid:%" PRIu64 ", ver:-1, %s", pKey->uid, pReader->idStr); @@ -3564,8 +3578,7 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl STsdbReader* p = pReader->innerReader[0] != NULL ? pReader->innerReader[0] : pReader; - int32_t numOfTables = taosArrayGetSize(pTableList); - pReader->status.pTableMap = createDataBlockScanInfo(p, pTableList->pData, numOfTables); + pReader->status.pTableMap = createDataBlockScanInfo(p, pTableList, numOfTables); if (pReader->status.pTableMap == NULL) { tsdbReaderClose(pReader); *ppReader = NULL; @@ -3606,23 +3619,13 @@ int32_t tsdbReaderOpen(SVnode* pVnode, SQueryTableDataCond* pCond, SArray* pTabl if (code != TSDB_CODE_SUCCESS) { return code; } - - code = doOpenReaderImpl(pNextReader); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - code = doOpenReaderImpl(pReader); - if (code != TSDB_CODE_SUCCESS) { - return code; - } } } tsdbDebug("%p total numOfTable:%d in this query %s", pReader, numOfTables, pReader->idStr); return code; -_err: + _err: tsdbError("failed to create data reader, code:%s %s", tstrerror(code), idstr); return code; } @@ -3746,15 +3749,21 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { if (pReader->innerReader[0] != NULL && pReader->step == 0) { bool ret = doTsdbNextDataBlock(pReader->innerReader[0]); - resetDataBlockScanInfo(pReader->innerReader[0]->status.pTableMap, pReader->innerReader[0]->window.ekey); pReader->step = EXTERNAL_ROWS_PREV; - if (ret) { return ret; } } if (pReader->step == EXTERNAL_ROWS_PREV) { + // prepare for the main scan + int32_t code = doOpenReaderImpl(pReader); + resetDataBlockScanInfo(pReader->status.pTableMap, pReader->innerReader[0]->window.ekey); + + if (code != TSDB_CODE_SUCCESS) { + return code; + } + pReader->step = EXTERNAL_ROWS_MAIN; } @@ -3764,7 +3773,13 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { } if (pReader->innerReader[1] != NULL && pReader->step == EXTERNAL_ROWS_MAIN) { + // prepare for the next row scan + int32_t code = doOpenReaderImpl(pReader->innerReader[1]); resetDataBlockScanInfo(pReader->innerReader[1]->status.pTableMap, pReader->window.ekey); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + bool ret1 = doTsdbNextDataBlock(pReader->innerReader[1]); pReader->step = EXTERNAL_ROWS_NEXT; if (ret1) { @@ -3775,7 +3790,7 @@ bool tsdbNextDataBlock(STsdbReader* pReader) { return false; } -bool tsdbTableNextDataBlock(STsdbReader* pReader, int64_t uid) { +bool tsdbTableNextDataBlock(STsdbReader* pReader, uint64_t uid) { STableBlockScanInfo* pBlockScanInfo = taosHashGet(pReader->status.pTableMap, &uid, sizeof(uid)); if (pBlockScanInfo == NULL) { // no data block for the table of given uid return false; @@ -3964,7 +3979,7 @@ int32_t tsdbReaderReset(STsdbReader* pReader, SQueryTableDataCond* pCond) { } tsdbDebug("%p reset reader, suid:%" PRIu64 ", numOfTables:%d, skey:%" PRId64 ", query range:%" PRId64 " - %" PRId64 - " in query %s", + " in query %s", pReader, pReader->suid, numOfTables, pCond->twindows.skey, pReader->window.skey, pReader->window.ekey, pReader->idStr); @@ -4155,7 +4170,7 @@ int32_t tsdbTakeReadSnap(STsdb* pTsdb, STsdbReadSnap** ppSnap, const char* idStr } tsdbTrace("vgId:%d, take read snapshot, %s", TD_VID(pTsdb->pVnode), idStr); -_exit: + _exit: return code; } @@ -4174,4 +4189,3 @@ void tsdbUntakeReadSnap(STsdb* pTsdb, STsdbReadSnap* pSnap, const char* idStr) { } tsdbTrace("vgId:%d, untake read snapshot, %s", TD_VID(pTsdb->pVnode), idStr); } -bool tsdbIsAscendingOrder(STsdbReader* pReader) { return ASCENDING_TRAVERSE(pReader->order); } diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index 9c827c9fa3..cfedd70711 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -289,7 +289,8 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t version, SRp break; } - vTrace("vgId:%d, process %s request success, index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), version); + vTrace("vgId:%d, process %s request, code:0x%x index:%" PRId64, TD_VID(pVnode), TMSG_INFO(pMsg->msgType), pRsp->code, + version); walApplyVer(pVnode->pWal, version); diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index d3ae1015d0..11cea8e88a 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -234,7 +234,7 @@ int32_t vnodeProcessSyncCtrlMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { vGError("vgId:%d, msg:%p failed to process since sync env not start", pVnode->config.vgId, pMsg); terrno = TSDB_CODE_APP_ERROR; return -1; @@ -277,7 +277,7 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { int32_t code = 0; const STraceId *trace = &pMsg->info.traceId; - if (!syncEnvIsStart()) { + if (!syncIsInit()) { vGError("vgId:%d, msg:%p failed to process since sync env not start", pVnode->config.vgId, pMsg); terrno = TSDB_CODE_APP_ERROR; return -1; @@ -301,13 +301,13 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { } else if (pMsg->msgType == TDMT_SYNC_PING) { SyncPing *pSyncMsg = syncPingFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnPingCb(pSyncNode, pSyncMsg); + code = syncNodeOnPing(pSyncNode, pSyncMsg); syncPingDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_PING_REPLY) { SyncPingReply *pSyncMsg = syncPingReplyFromRpcMsg2(pMsg); ASSERT(pSyncMsg != NULL); - code = syncNodeOnPingReplyCb(pSyncNode, pSyncMsg); + code = syncNodeOnPingReply(pSyncNode, pSyncMsg); syncPingReplyDestroy(pSyncMsg); } else if (pMsg->msgType == TDMT_SYNC_CLIENT_REQUEST) { @@ -350,6 +350,11 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { code = syncNodeOnSnapshotReply(pSyncNode, pSyncMsg); syncSnapshotRspDestroy(pSyncMsg); + } else if (pMsg->msgType == TDMT_SYNC_LOCAL_CMD) { + SyncLocalCmd *pSyncMsg = syncLocalCmdFromRpcMsg2(pMsg); + code = syncNodeOnLocalCmd(pSyncNode, pSyncMsg); + syncLocalCmdDestroy(pSyncMsg); + } else { vGError("vgId:%d, msg:%p failed to process since error msg type:%d", pVnode->config.vgId, pMsg, pMsg->msgType); code = -1; @@ -365,7 +370,13 @@ int32_t vnodeProcessSyncMsg(SVnode *pVnode, SRpcMsg *pMsg, SRpcMsg **pRsp) { } static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { - if (msgcb == NULL) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; return -1; } @@ -378,7 +389,13 @@ static int32_t vnodeSyncEqCtrlMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { } static int32_t vnodeSyncEqMsg(const SMsgCb *msgcb, SRpcMsg *pMsg) { - if (msgcb == NULL) { + if (pMsg == NULL || pMsg->pCont == NULL) { + return -1; + } + + if (msgcb == NULL || msgcb->putToQueueFp == NULL) { + rpcFreeCont(pMsg->pCont); + pMsg->pCont = NULL; return -1; } diff --git a/source/libs/catalog/src/catalog.c b/source/libs/catalog/src/catalog.c index 8f621545c9..b6a22b5fa7 100644 --- a/source/libs/catalog/src/catalog.c +++ b/source/libs/catalog/src/catalog.c @@ -1114,6 +1114,7 @@ int32_t catalogGetCachedTableHashVgroup(SCatalog* pCtg, SRequestConnInfo* pConn, CTG_API_LEAVE(ctgGetTbHashVgroup(pCtg, pConn, pTableName, pVgroup, exists)); } +#if 0 int32_t catalogGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const SCatalogReq* pReq, SMetaData* pRsp) { CTG_API_ENTER(); @@ -1176,6 +1177,7 @@ _return: CTG_API_LEAVE(code); } +#endif int32_t catalogAsyncGetAllMeta(SCatalog* pCtg, SRequestConnInfo* pConn, const SCatalogReq* pReq, catalogCallback fp, void* param, int64_t* jobId) { diff --git a/source/libs/catalog/test/catalogTests.cpp b/source/libs/catalog/test/catalogTests.cpp index de34868c55..0bdd9841ab 100644 --- a/source/libs/catalog/test/catalogTests.cpp +++ b/source/libs/catalog/test/catalogTests.cpp @@ -63,6 +63,7 @@ enum { CTGT_RSP_QNODELIST, CTGT_RSP_UDF, CTGT_RSP_SVRVER, + CTGT_RSP_DNODElIST, CTGT_RSP_TBMETA_NOT_EXIST, }; @@ -702,6 +703,30 @@ void ctgTestRspSvrVer(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRs pRsp->pCont = pReq; } +void ctgTestRspDndeList(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) { + rpcFreeCont(pMsg->pCont); + + SDnodeListRsp dRsp = {0}; + dRsp.dnodeList = taosArrayInit(1, sizeof(SEpSet)); + SEpSet epSet = {0}; + epSet.numOfEps = 1; + tstrncpy(epSet.eps[0].fqdn, "localhost", TSDB_FQDN_LEN); + epSet.eps[0].port = 6030; + + (void)taosArrayPush(dRsp.dnodeList, &epSet); + + int32_t rspLen = tSerializeSDnodeListRsp(NULL, 0, &dRsp); + void *pReq = rpcMallocCont(rspLen); + tSerializeSDnodeListRsp(pReq, rspLen, &dRsp); + + pRsp->code = 0; + pRsp->contLen = rspLen; + pRsp->pCont = pReq; + + tFreeSDnodeListRsp(&dRsp); +} + + void ctgTestRspAuto(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) { switch (pMsg->msgType) { @@ -727,6 +752,9 @@ void ctgTestRspAuto(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp) case TDMT_MND_SERVER_VERSION: ctgTestRspSvrVer(shandle, pEpSet, pMsg, pRsp); break; + case TDMT_MND_DNODE_LIST: + ctgTestRspDndeList(shandle, pEpSet, pMsg, pRsp); + break; default: break; } @@ -779,6 +807,9 @@ void ctgTestRspByIdx(void *shandle, SEpSet *pEpSet, SRpcMsg *pMsg, SRpcMsg *pRsp case CTGT_RSP_SVRVER: ctgTestRspSvrVer(shandle, pEpSet, pMsg, pRsp); break; + case CTGT_RSP_DNODElIST: + ctgTestRspDndeList(shandle, pEpSet, pMsg, pRsp); + break; default: ctgTestRspAuto(shandle, pEpSet, pMsg, pRsp); break; @@ -2948,6 +2979,69 @@ TEST(apiTest, catalogGetServerVersion_test) { catalogDestroy(); } +TEST(apiTest, catalogUpdateTableIndex_test) { + struct SCatalog *pCtg = NULL; + SRequestConnInfo connInfo = {0}; + SRequestConnInfo *mockPointer = (SRequestConnInfo *)&connInfo; + + ctgTestInitLogFile(); + + memset(ctgTestRspFunc, 0, sizeof(ctgTestRspFunc)); + ctgTestRspIdx = 0; + ctgTestRspFunc[0] = CTGT_RSP_SVRVER; + + ctgTestSetRspByIdx(); + + initQueryModuleMsgHandle(); + + int32_t code = catalogInit(NULL); + ASSERT_EQ(code, 0); + + code = catalogGetHandle(ctgTestClusterId, &pCtg); + ASSERT_EQ(code, 0); + + STableIndexRsp rsp = {0}; + strcpy(rsp.dbFName, ctgTestDbname); + strcpy(rsp.tbName, ctgTestSTablename); + rsp.suid = ctgTestSuid; + rsp.version = 1; + code = catalogUpdateTableIndex(pCtg, &rsp); + ASSERT_EQ(code, 0); + + catalogDestroy(); +} + + +TEST(apiTest, catalogGetDnodeList_test) { + struct SCatalog *pCtg = NULL; + SRequestConnInfo connInfo = {0}; + SRequestConnInfo *mockPointer = (SRequestConnInfo *)&connInfo; + + ctgTestInitLogFile(); + + memset(ctgTestRspFunc, 0, sizeof(ctgTestRspFunc)); + ctgTestRspIdx = 0; + ctgTestRspFunc[0] = CTGT_RSP_DNODElIST; + + ctgTestSetRspByIdx(); + + initQueryModuleMsgHandle(); + + int32_t code = catalogInit(NULL); + ASSERT_EQ(code, 0); + + code = catalogGetHandle(ctgTestClusterId, &pCtg); + ASSERT_EQ(code, 0); + + SArray* pList = NULL; + code = catalogGetDnodeList(pCtg, mockPointer, &pList); + ASSERT_EQ(code, 0); + ASSERT_EQ(taosArrayGetSize(pList), 1); + + taosArrayDestroy(pList); + + catalogDestroy(); +} int main(int argc, char **argv) { diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 0cfef7dc24..76a3359b5b 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -23,12 +23,13 @@ #include "tpagedbuf.h" #include "tsimplehash.h" #include "vnode.h" +#include "executor.h" #define T_LONG_JMP(_obj, _c) \ do { \ ASSERT((_c) != -1); \ longjmp((_obj), (_c)); \ - } while (0); + } while (0) #define SET_RES_WINDOW_KEY(_k, _ori, _len, _uid) \ do { \ @@ -95,8 +96,24 @@ typedef struct SColMatchInfo { int32_t matchType; // determinate the source according to col id or slot id } SColMatchInfo; +typedef struct STableListInfo STableListInfo; struct SqlFunctionCtx; +int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, + STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, const char* id); + +STableListInfo* tableListCreate(); +void* tableListDestroy(STableListInfo* pTableListInfo); +void tableListClear(STableListInfo* pTableListInfo); +int32_t tableListGetOutputGroups(const STableListInfo* pTableList); +bool oneTableForEachGroup(const STableListInfo* pTableList); +uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid); +int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid); +int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalIndex, STableKeyInfo** pKeyInfo, int32_t* num); +uint64_t tableListGetSize(const STableListInfo* pTableList); +uint64_t tableListGetSuid(const STableListInfo* pTableList); +STableKeyInfo* tableListGetInfo(const STableListInfo* pTableList, int32_t index); + size_t getResultRowSize(struct SqlFunctionCtx* pCtx, int32_t numOfOutput); void initResultRowInfo(SResultRowInfo* pResultRowInfo); void closeResultRow(SResultRow* pResultRow); @@ -109,6 +126,7 @@ static FORCE_INLINE SResultRow* getResultRowByPos(SDiskbasedBuf* pBuf, SResultRo if (forUpdate) { setBufPageDirty(bufPage, true); } + SResultRow* pRow = (SResultRow*)((char*)bufPage + pos->offset); return pRow; } @@ -124,10 +142,7 @@ int32_t getNumOfTotalRes(SGroupResInfo* pGroupResInfo); SSDataBlock* createResDataBlock(SDataBlockDescNode* pNode); EDealRes doTranslateTagExpr(SNode** pNode, void* pContext); -int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, - STableListInfo* pListInfo); int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode, char* keyBuf, uint64_t* pGroupId); -int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableListInfo* pTableListInfo); size_t getTableTagsBufLen(const SNodeList* pGroups); SArray* createSortInfo(SNodeList* pNodeList); @@ -150,9 +165,7 @@ int32_t initQueryTableDataCond(SQueryTableDataCond* pCond, const STableScanPhysi void cleanupQueryTableDataCond(SQueryTableDataCond* pCond); int32_t convertFillType(int32_t mode); - int32_t resultrowComparAsc(const void* p1, const void* p2); - int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle, bool* pQualified); #endif // TDENGINE_QUERYUTIL_H diff --git a/source/libs/executor/inc/executorimpl.h b/source/libs/executor/inc/executorimpl.h index 8b3b783b3f..dc8460184d 100644 --- a/source/libs/executor/inc/executorimpl.h +++ b/source/libs/executor/inc/executorimpl.h @@ -179,7 +179,7 @@ typedef struct SExecTaskInfo { int64_t version; // used for stream to record wal version SStreamTaskInfo streamInfo; SSchemaInfo schemaInfo; - STableListInfo tableqinfoList; // this is a table list + STableListInfo* pTableInfoList; // this is a table list const char* sql; // query sql string jmp_buf env; // jump to this position when error happens. EOPTR_EXEC_MODEL execModel; // operator execution model [batch model|stream model] @@ -552,7 +552,7 @@ typedef struct SSysTableScanInfo { typedef struct SBlockDistInfo { SSDataBlock* pResBlock; - void* pHandle; + STsdbReader* pHandle; SReadHandle readHandle; uint64_t uid; // table uid } SBlockDistInfo; @@ -967,8 +967,8 @@ SOperatorInfo* createStreamFinalIntervalOperatorInfo(SOperatorInfo* downstream, SOperatorInfo* createSessionAggOperatorInfo(SOperatorInfo* downstream, SSessionWinodwPhysiNode* pSessionNode, SExecTaskInfo* pTaskInfo); SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo); -SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* readHandle, uint64_t uid, - SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo); +SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, + SExecTaskInfo* pTaskInfo); SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhysiNode* pTableScanNode, SNode* pTagCond, SExecTaskInfo* pTaskInfo); @@ -1062,10 +1062,6 @@ uint64_t calGroupIdByData(SPartitionBySupporter* pParSup, SExprSupp* pExprSup, S int32_t finalizeResultRows(SDiskbasedBuf* pBuf, SResultRowPosition* resultRowPosition, SExprSupp* pSup, SSDataBlock* pBlock, SExecTaskInfo* pTaskInfo); -int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* idstr); - SOperatorInfo* createGroupSortOperatorInfo(SOperatorInfo* downstream, SGroupSortPhysiNode* pSortPhyNode, SExecTaskInfo* pTaskInfo); SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanNode, STableListInfo* pTableListInfo, @@ -1074,7 +1070,6 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN void copyUpdateDataBlock(SSDataBlock* pDest, SSDataBlock* pSource, int32_t tsColIndex); bool groupbyTbname(SNodeList* pGroupList); -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* groupKey); void* destroySqlFunctionCtx(SqlFunctionCtx* pCtx, int32_t numOfOutput); int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pState, SSDataBlock* pBlock, SExprSupp* pSup, SGroupResInfo* pGroupResInfo); diff --git a/source/libs/executor/src/cachescanoperator.c b/source/libs/executor/src/cachescanoperator.c index f645e71c6e..92e98d3eab 100644 --- a/source/libs/executor/src/cachescanoperator.c +++ b/source/libs/executor/src/cachescanoperator.c @@ -48,6 +48,10 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe int32_t numOfCols = 0; code = extractColMatchInfo(pScanNode->scan.pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } + removeRedundantTsCol(pScanNode, &pInfo->matchInfo); code = extractCacheScanSlotId(pInfo->matchInfo.pList, pTaskInfo, &pInfo->pSlotIds); @@ -55,18 +59,23 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe goto _error; } - STableListInfo* pTableList = &pTaskInfo->tableqinfoList; + STableListInfo* pTableList = pTaskInfo->pTableInfoList; initResultSizeInfo(&pOperator->resultInfo, 4096); blockDataEnsureCapacity(pInfo->pRes, pOperator->resultInfo.capacity); pInfo->pUidList = taosArrayInit(4, sizeof(int64_t)); - // partition by tbname - if (taosArrayGetSize(pTableList->pGroupList) == taosArrayGetSize(pTableList->pTableList)) { + // partition by tbname, todo opt perf + if (oneTableForEachGroup(pTableList) || (tableListGetSize(pTableList) == 1)) { pInfo->retrieveType = CACHESCAN_RETRIEVE_TYPE_ALL | (pScanNode->ignoreNull ? CACHESCAN_RETRIEVE_LAST : CACHESCAN_RETRIEVE_LAST_ROW); - code = tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pTableList->pTableList, - taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); + + STableKeyInfo* pList = tableListGetInfo(pTableList, 0); + + size_t num = tableListGetSize(pTableList); + uint64_t suid = tableListGetSuid(pTableList); + code = tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, + taosArrayGetSize(pInfo->matchInfo.pList), suid, &pInfo->pLastrowReader); if (code != TSDB_CODE_SUCCESS) { goto _error; } @@ -98,7 +107,7 @@ SOperatorInfo* createCacherowsScanOperator(SLastRowScanPhysiNode* pScanNode, SRe pOperator->cost.openCost = 0; return pOperator; -_error: + _error: pTaskInfo->code = code; destroyLastrowScanOperator(pInfo); taosMemoryFree(pOperator); @@ -112,8 +121,10 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { SLastrowScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - STableListInfo* pTableList = &pTaskInfo->tableqinfoList; - int32_t size = taosArrayGetSize(pTableList->pTableList); + STableListInfo* pTableList = pTaskInfo->pTableInfoList; + + uint64_t suid = tableListGetSuid(pTableList); + int32_t size = tableListGetSize(pTableList); if (size == 0) { doSetOperatorCompleted(pOperator); return NULL; @@ -167,16 +178,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { } } - if (pTableList->map != NULL) { - int64_t* groupId = taosHashGet(pTableList->map, &pInfo->pRes->info.uid, sizeof(int64_t)); - if (groupId != NULL) { - pInfo->pRes->info.groupId = *groupId; - } - } else { - ASSERT(taosArrayGetSize(pTableList->pTableList) == 1); - STableKeyInfo* pKeyInfo = taosArrayGet(pTableList->pTableList, 0); - pInfo->pRes->info.groupId = pKeyInfo->groupId; - } + pInfo->pRes->info.groupId = getTableGroupId(pTableList, pInfo->pRes->info.uid); pInfo->indexOfBufferedRes += 1; return pInfo->pRes; @@ -185,18 +187,24 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { return NULL; } } else { - size_t totalGroups = taosArrayGetSize(pTableList->pGroupList); + size_t totalGroups = tableListGetOutputGroups(pTableList); while (pInfo->currentGroupIndex < totalGroups) { - SArray* pGroupTableList = taosArrayGetP(pTableList->pGroupList, pInfo->currentGroupIndex); + STableKeyInfo* pList = NULL; + int32_t num = 0; - tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pGroupTableList, - taosArrayGetSize(pInfo->matchInfo.pList), pTableList->suid, &pInfo->pLastrowReader); + int32_t code = tableListGetGroupList(pTableList, pInfo->currentGroupIndex, &pList, &num); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } + + tsdbCacherowsReaderOpen(pInfo->readHandle.vnode, pInfo->retrieveType, pList, num, + taosArrayGetSize(pInfo->matchInfo.pList), suid, &pInfo->pLastrowReader); taosArrayClear(pInfo->pUidList); - int32_t code = tsdbRetrieveCacheRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pUidList); + code = tsdbRetrieveCacheRows(pInfo->pLastrowReader, pInfo->pRes, pInfo->pSlotIds, pInfo->pUidList); if (code != TSDB_CODE_SUCCESS) { - longjmp(pTaskInfo->env, code); + T_LONG_JMP(pTaskInfo->env, code); } pInfo->currentGroupIndex += 1; @@ -206,7 +214,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) { if (pInfo->pseudoExprSup.numOfExprs > 0) { SExprSupp* pSup = &pInfo->pseudoExprSup; - STableKeyInfo* pKeyInfo = taosArrayGet(pGroupTableList, 0); + STableKeyInfo* pKeyInfo = &((STableKeyInfo*)pTableList)[0]; pInfo->pRes->info.groupId = pKeyInfo->groupId; if (taosArrayGetSize(pInfo->pUidList) > 0) { diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index 971b28eb09..bb87b5029a 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -26,9 +26,31 @@ #include "executorimpl.h" #include "tcompression.h" -static int32_t removeInvalidTable(SArray* list, SHashObj* tags); +// If the numOfOutputGroups is 1, the data blocks that belongs to different groups will be provided randomly +// The numOfOutputGroups is specified by physical plan. and will not be affect by numOfGroups +struct STableListInfo { + bool oneTableForEachGroup; + int32_t numOfOuputGroups; // the data block will be generated one by one + int32_t* groupOffset; // keep the offset value for each group in the tableList + SArray* pTableList; + SHashObj* map; // speedup acquire the tableQueryInfo by table uid + uint64_t suid; +}; + +typedef struct tagFilterAssist { + SHashObj* colHash; + int32_t index; + SArray* cInfoList; +} tagFilterAssist; + +static int32_t removeInvalidTable(SArray* uids, SHashObj* tags); static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond, SHashObj* tags); static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond); +static int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, + SNode* pTagIndexCond, STableListInfo* pListInfo); + +static int64_t getLimit(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->limit; } +static int64_t getOffset(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->offset; } void initResultRowInfo(SResultRowInfo* pResultRowInfo) { pResultRowInfo->size = 0; @@ -301,12 +323,6 @@ int32_t isQualifiedTable(STableKeyInfo* info, SNode* pTagCond, void* metaHandle, return TSDB_CODE_SUCCESS; } -typedef struct tagFilterAssist { - SHashObj* colHash; - int32_t index; - SArray* cInfoList; -} tagFilterAssist; - static EDealRes getColumn(SNode** pNode, void* pContext) { SColumnNode* pSColumnNode = NULL; if (QUERY_NODE_COLUMN == nodeType((*pNode))) { @@ -482,6 +498,7 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, int64_t suid, SArray* } } } + pResBlock->info.rows = rows; // int64_t st1 = taosGetTimestampUs(); @@ -544,6 +561,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis code = TSDB_CODE_OUT_OF_MEMORY; goto end; } + ctx.index = 0; ctx.cInfoList = taosArrayInit(4, sizeof(SColumnInfo)); if (ctx.cInfoList == NULL) { @@ -606,6 +624,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } else { void* tag = taosHashGet(tags, uid, sizeof(int64_t)); ASSERT(tag); + STagVal tagVal = {0}; tagVal.cid = pColInfo->info.colId; const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal); @@ -636,6 +655,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } } } + pResBlock->info.rows = rows; // int64_t st1 = taosGetTimestampUs(); @@ -661,10 +681,12 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } break; } + default: code = TSDB_CODE_OPS_NOT_SUPPORT; goto end; } + if (nodeType(pNode) == QUERY_NODE_COLUMN) { SColumnNode* pSColumnNode = (SColumnNode*)pNode; SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, pSColumnNode->slotId); @@ -674,10 +696,12 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis } else { code = scalarCalculate(pNode, pBlockList, &output); } + if (code != TSDB_CODE_SUCCESS) { releaseColInfoData(output.columnData); goto end; } + taosArrayPush(groupData, &output.columnData); } @@ -696,6 +720,7 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis code = TSDB_CODE_OUT_OF_MEMORY; goto end; } + for (int i = 0; i < rows; i++) { STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); @@ -733,7 +758,6 @@ int32_t getColInfoResultForGroupby(void* metaHandle, SNodeList* group, STableLis int32_t len = (int32_t)(pStart - (char*)keyBuf); info->groupId = calcGroupId(keyBuf, len); - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &info->groupId, sizeof(uint64_t)); } // int64_t st2 = taosGetTimestampUs(); @@ -759,6 +783,7 @@ static int tableUidCompare(const void* a, const void* b) { } return u1 < u2 ? -1 : 1; } + static int32_t optimizeTbnameInCond(void* metaHandle, int64_t suid, SArray* list, SNode* cond, SHashObj* tags) { int32_t ret = -1; if (nodeType(cond) == QUERY_NODE_OPERATOR) { @@ -813,42 +838,91 @@ static int32_t removeInvalidTable(SArray* uids, SHashObj* tags) { taosArrayPush(validUid, uid); } } + taosArraySwap(uids, validUid); taosArrayDestroy(validUid); return 0; } + +static int32_t nameComparFn(const void* p1, const void* p2) { + const char* pName1 = *(const char**)p1; + const char* pName2 = *(const char**)p2; + + int32_t ret = strcmp(pName1, pName2); + if (ret == 0) { + return 0; + } else { + return (ret > 0) ? 1 : -1; + } +} + +static SArray* getTableNameList(const SNodeListNode* pList) { + int32_t len = LIST_LENGTH(pList->pNodeList); + SListCell* cell = pList->pNodeList->pHead; + + SArray* pTbList = taosArrayInit(len, POINTER_BYTES); + for (int i = 0; i < pList->pNodeList->length; i++) { + SValueNode* valueNode = (SValueNode*)cell->pNode; + if (!IS_VAR_DATA_TYPE(valueNode->node.resType.type)) { + terrno = TSDB_CODE_INVALID_PARA; + taosArrayDestroy(pTbList); + return NULL; + } + + char* name = varDataVal(valueNode->datum.p); + taosArrayPush(pTbList, &name); + cell = cell->pNext; + } + + size_t numOfTables = taosArrayGetSize(pTbList); + + // order the name + taosArraySort(pTbList, nameComparFn); + + // remove the duplicates + SArray* pNewList = taosArrayInit(taosArrayGetSize(pTbList), sizeof(void*)); + taosArrayPush(pNewList, taosArrayGet(pTbList, 0)); + + for (int32_t i = 1; i < numOfTables; ++i) { + char** name = taosArrayGetLast(pNewList); + char** nameInOldList = taosArrayGet(pTbList, i); + if (strcmp(*name, *nameInOldList) == 0) { + continue; + } + + taosArrayPush(pNewList, nameInOldList); + } + + taosArrayDestroy(pTbList); + return pNewList; +} + static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* list, SNode* pTagCond) { if (nodeType(pTagCond) != QUERY_NODE_OPERATOR) { return -1; } + SOperatorNode* pNode = (SOperatorNode*)pTagCond; if (pNode->opType != OP_TYPE_IN) { return -1; } + if ((pNode->pLeft != NULL && nodeType(pNode->pLeft) == QUERY_NODE_COLUMN && ((SColumnNode*)pNode->pLeft)->colType == COLUMN_TYPE_TBNAME) && (pNode->pRight != NULL && nodeType(pNode->pRight) == QUERY_NODE_NODE_LIST)) { SNodeListNode* pList = (SNodeListNode*)pNode->pRight; int32_t len = LIST_LENGTH(pList->pNodeList); - if (len <= 0) return -1; - - SListCell* cell = pList->pNodeList->pHead; - - SArray* pTbList = taosArrayInit(len, sizeof(void*)); - for (int i = 0; i < pList->pNodeList->length; i++) { - SValueNode* valueNode = (SValueNode*)cell->pNode; - if (!IS_VAR_DATA_TYPE(valueNode->node.resType.type)) { - taosArrayDestroy(pTbList); - return -1; - } - char* name = varDataVal(valueNode->datum.p); - taosArrayPush(pTbList, &name); - cell = cell->pNext; + if (len <= 0) { + return -1; } - for (int i = 0; i < taosArrayGetSize(pTbList); i++) { - char* name = taosArrayGetP(pTbList, i); + SArray* pTbList = getTableNameList(pList); + int32_t numOfTables = taosArrayGetSize(pTbList); + + for (int i = 0; i < numOfTables; i++) { + char* name = taosArrayGetP(pTbList, i); + uint64_t uid = 0; if (metaGetTableUidByName(metaHandle, name, &uid) == 0) { ETableType tbType = TSDB_TABLE_MAX; @@ -863,20 +937,18 @@ static int32_t optimizeTbnameInCondImpl(void* metaHandle, int64_t suid, SArray* terrno = 0; } } + taosArrayDestroy(pTbList); return 0; } + return -1; } + int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, SNode* pTagCond, SNode* pTagIndexCond, STableListInfo* pListInfo) { int32_t code = TSDB_CODE_SUCCESS; - pListInfo->pTableList = taosArrayInit(8, sizeof(STableKeyInfo)); - if (pListInfo->pTableList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - uint64_t tableUid = pScanNode->uid; pListInfo->suid = pScanNode->suid; SArray* res = taosArrayInit(8, sizeof(uint64_t)); @@ -936,24 +1008,17 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode, size_t numOfTables = taosArrayGetSize(res); for (int i = 0; i < numOfTables; i++) { STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0}; - void* p = taosArrayPush(pListInfo->pTableList, &info); + + void* p = taosArrayPush(pListInfo->pTableList, &info); if (p == NULL) { taosArrayDestroy(res); return TSDB_CODE_OUT_OF_MEMORY; } - qDebug("tagfilter get uid:%" PRId64 "", info.uid); + qDebug("tagfilter get uid:%" PRIu64 "", info.uid); } taosArrayDestroy(res); - - pListInfo->pGroupList = taosArrayInit(4, POINTER_BYTES); - if (pListInfo->pGroupList == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - // put into list as default group, remove it if grouping sorting is required later - taosArrayPush(pListInfo->pGroupList, &pListInfo->pTableList); return code; } @@ -1068,7 +1133,7 @@ SArray* extractPartitionColInfo(SNodeList* pNodeList) { int32_t extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNodeList, int32_t* numOfOutputCols, int32_t type, SColMatchInfo* pMatchInfo) { - size_t numOfCols = LIST_LENGTH(pNodeList); + size_t numOfCols = LIST_LENGTH(pNodeList); int32_t code = 0; pMatchInfo->matchType = type; @@ -1411,10 +1476,10 @@ void relocateColumnData(SSDataBlock* pBlock, const SArray* pColMatchInfo, SArray while (i < numOfSrcCols && j < taosArrayGetSize(pColMatchInfo)) { SColumnInfoData* p = taosArrayGet(pCols, i); SColMatchItem* pmInfo = taosArrayGet(pColMatchInfo, j); -/* if (!outputEveryColumn && pmInfo->reserved) { - j++; - continue; - }*/ + /* if (!outputEveryColumn && pmInfo->reserved) { + j++; + continue; + }*/ if (p->info.colId == pmInfo->colId) { SColumnInfoData* pDst = taosArrayGet(pBlock->pDataBlock, pmInfo->dstSlotId); @@ -1592,9 +1657,6 @@ bool hasLimitOffsetInfo(SLimitInfo* pLimitInfo) { pLimitInfo->slimit.offset != -1); } -static int64_t getLimit(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->limit; } -static int64_t getOffset(const SNode* pLimit) { return NULL == pLimit ? -1 : ((SLimitNode*)pLimit)->offset; } - void initLimitInfo(const SNode* pLimit, const SNode* pSLimit, SLimitInfo* pLimitInfo) { SLimit limit = {.limit = getLimit(pLimit), .offset = getOffset(pLimit)}; SLimit slimit = {.limit = getLimit(pSLimit), .offset = getOffset(pSLimit)}; @@ -1604,3 +1666,253 @@ void initLimitInfo(const SNode* pLimit, const SNode* pSLimit, SLimitInfo* pLimit pLimitInfo->remainOffset = limit.offset; pLimitInfo->remainGroupOffset = slimit.offset; } + +uint64_t tableListGetSize(const STableListInfo* pTableList) { + ASSERT(taosArrayGetSize(pTableList->pTableList) == taosHashGetSize(pTableList->map)); + return taosArrayGetSize(pTableList->pTableList); +} + +uint64_t tableListGetSuid(const STableListInfo* pTableList) { + return pTableList->suid; +} + +STableKeyInfo* tableListGetInfo(const STableListInfo* pTableList, int32_t index) { + if (taosArrayGetSize(pTableList->pTableList) == 0) { + return NULL; + } + + return taosArrayGet(pTableList->pTableList, index); +} + +uint64_t getTableGroupId(const STableListInfo* pTableList, uint64_t tableUid) { + int32_t* slot = taosHashGet(pTableList->map, &tableUid, sizeof(tableUid)); + ASSERT(pTableList->map != NULL && slot != NULL); + + STableKeyInfo* pKeyInfo = taosArrayGet(pTableList->pTableList, *slot); + ASSERT(pKeyInfo->uid == tableUid); + + return pKeyInfo->groupId; +} + +// TODO handle the group offset info, fix it, the rule of group output will be broken by this function +int32_t tableListAddTableInfo(STableListInfo* pTableList, uint64_t uid, uint64_t gid) { + if (pTableList->map == NULL) { + ASSERT(taosArrayGetSize(pTableList->pTableList) == 0); + pTableList->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + } + + STableKeyInfo keyInfo = {.uid = uid, .groupId = gid}; + taosArrayPush(pTableList->pTableList, &keyInfo); + + int32_t slot = (int32_t)taosArrayGetSize(pTableList->pTableList) - 1; + taosHashPut(pTableList->map, &uid, sizeof(uid), &slot, sizeof(slot)); + + qDebug("uid:%" PRIu64 ", groupId:%" PRIu64 " added into table list, slot:%d, total:%d", uid, gid, slot, slot + 1); + return TSDB_CODE_SUCCESS; +} + +int32_t tableListGetGroupList(const STableListInfo* pTableList, int32_t ordinalGroupIndex, STableKeyInfo** pKeyInfo, + int32_t* size) { + int32_t total = tableListGetOutputGroups(pTableList); + if (ordinalGroupIndex < 0 || ordinalGroupIndex >= total) { + return TSDB_CODE_INVALID_PARA; + } + + // here handle two special cases: + // 1. only one group exists, and 2. one table exists for each group. + if (total == 1) { + *size = tableListGetSize(pTableList); + *pKeyInfo = (*size == 0)? NULL:taosArrayGet(pTableList->pTableList, 0); + return TSDB_CODE_SUCCESS; + } else if (total == tableListGetSize(pTableList)) { + *size = 1; + *pKeyInfo = taosArrayGet(pTableList->pTableList, ordinalGroupIndex); + return TSDB_CODE_SUCCESS; + } + + int32_t offset = pTableList->groupOffset[ordinalGroupIndex]; + if (ordinalGroupIndex < total - 1) { + *size = pTableList->groupOffset[offset + 1] - pTableList->groupOffset[offset]; + } else { + *size = total - pTableList->groupOffset[offset] - 1; + } + + *pKeyInfo = taosArrayGet(pTableList->pTableList, offset); + return TSDB_CODE_SUCCESS; +} + +int32_t tableListGetOutputGroups(const STableListInfo* pTableList) { return pTableList->numOfOuputGroups; } + +bool oneTableForEachGroup(const STableListInfo* pTableList) { return pTableList->oneTableForEachGroup; } + +STableListInfo* tableListCreate() { + STableListInfo* pListInfo = taosMemoryCalloc(1, sizeof(STableListInfo)); + if (pListInfo == NULL) { + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; + } + + pListInfo->pTableList = taosArrayInit(4, sizeof(STableKeyInfo)); + if (pListInfo->pTableList == NULL) { + goto _error; + } + + pListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); + if (pListInfo->map == NULL) { + goto _error; + } + + pListInfo->numOfOuputGroups = 1; + return pListInfo; + +_error: + tableListDestroy(pListInfo); + terrno = TSDB_CODE_OUT_OF_MEMORY; + return NULL; +} + +void* tableListDestroy(STableListInfo* pTableListInfo) { + if (pTableListInfo == NULL) { + return NULL; + } + + pTableListInfo->pTableList = taosArrayDestroy(pTableListInfo->pTableList); + taosMemoryFreeClear(pTableListInfo->groupOffset); + + taosHashCleanup(pTableListInfo->map); + + pTableListInfo->pTableList = NULL; + pTableListInfo->map = NULL; + taosMemoryFree(pTableListInfo); + return NULL; +} + +void tableListClear(STableListInfo* pTableListInfo) { + if (pTableListInfo == NULL) { + return; + } + + taosArrayClear(pTableListInfo->pTableList); + taosHashClear(pTableListInfo->map); + taosMemoryFree(pTableListInfo->groupOffset); + pTableListInfo->numOfOuputGroups = 1; + pTableListInfo->oneTableForEachGroup = false; +} + +static int32_t orderbyGroupIdComparFn(const void* p1, const void* p2) { + STableKeyInfo* pInfo1 = (STableKeyInfo*) p1; + STableKeyInfo* pInfo2 = (STableKeyInfo*) p2; + + if (pInfo1->groupId == pInfo2->groupId) { + return 0; + } else { + return pInfo1->groupId < pInfo2->groupId? -1:1; + } +} + +static int32_t sortTableGroup(STableListInfo* pTableListInfo) { + int32_t code = TSDB_CODE_SUCCESS; + + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); + int32_t size = taosArrayGetSize(pTableListInfo->pTableList); + + SArray* pList = taosArrayInit(4, sizeof(int32_t)); + + STableKeyInfo* pInfo = taosArrayGet(pTableListInfo->pTableList, 0); + uint64_t gid = pInfo->groupId; + + int32_t start = 0; + taosArrayPush(pList, &start); + + for(int32_t i = 1; i < size; ++i) { + pInfo = taosArrayGet(pTableListInfo->pTableList, i); + if (pInfo->groupId != gid) { + taosArrayPush(pList, &i); + gid = pInfo->groupId; + } + } + + pTableListInfo->numOfOuputGroups = taosArrayGetSize(pList); + pTableListInfo->groupOffset = taosMemoryMalloc(sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + memcpy(pTableListInfo->groupOffset, taosArrayGet(pList, 0), sizeof(int32_t) * pTableListInfo->numOfOuputGroups); + taosArrayDestroy(pList); + return TDB_CODE_SUCCESS; +} + +int32_t buildGroupIdMapForAllTables(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group, bool groupSort) { + int32_t code = TSDB_CODE_SUCCESS; + ASSERT(pTableListInfo->map != NULL); + + bool groupByTbname = groupbyTbname(group); + size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); + if (group == NULL || groupByTbname) { + for (int32_t i = 0; i < numOfTables; i++) { + STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); + info->groupId = groupByTbname? info->uid:0; + } + + pTableListInfo->oneTableForEachGroup = groupByTbname; + + if (groupSort && groupByTbname) { + taosArraySort(pTableListInfo->pTableList, orderbyGroupIdComparFn); + pTableListInfo->numOfOuputGroups = numOfTables; + } else { + pTableListInfo->numOfOuputGroups = 1; + } + } else { + code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + + if (groupSort) { + code = sortTableGroup(pTableListInfo); + } + } + + // add all table entry in the hash map + size_t size = taosArrayGetSize(pTableListInfo->pTableList); + for(int32_t i = 0; i < size; ++i) { + STableKeyInfo* p = taosArrayGet(pTableListInfo->pTableList, i); + taosHashPut(pTableListInfo->map, &p->uid, sizeof(uint64_t), &i, sizeof(int32_t)); + } + + return code; +} + +int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, + STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, + const char* idStr) { + int64_t st = taosGetTimestampUs(); + + if (pHandle == NULL) { + qError("invalid handle, in creating operator tree, %s", idStr); + return TSDB_CODE_INVALID_PARA; + } + + int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanNode, pTagCond, pTagIndexCond, pTableListInfo); + if (code != TSDB_CODE_SUCCESS) { + qError("failed to getTableList, code: %s", tstrerror(code)); + return code; + } + + ASSERT(pTableListInfo->numOfOuputGroups == 1); + + int64_t st1 = taosGetTimestampUs(); + qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); + + if (taosArrayGetSize(pTableListInfo->pTableList) == 0) { + qDebug("no table qualified for query, %s" PRIx64, idStr); + return TSDB_CODE_SUCCESS; + } + + code = buildGroupIdMapForAllTables(pTableListInfo, pHandle, pGroupTags, groupSort); + if (code != TSDB_CODE_SUCCESS) { + return code; + } + + int64_t st2 = taosGetTimestampUs(); + qDebug("generate group id map completed, elapsed time:%.2f ms %s", (st2 - st1) / 1000.0, idStr); + + return TSDB_CODE_SUCCESS; +} diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index aae99c3286..2964878a2c 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -322,16 +322,11 @@ static SArray* filterUnqualifiedTables(const SStreamScanInfo* pScanInfo, const S int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bool isAdd) { SExecTaskInfo* pTaskInfo = (SExecTaskInfo*)tinfo; - STableListInfo* pListInfo = &pTaskInfo->tableqinfoList; if (isAdd) { qDebug("add %d tables id into query list, %s", (int32_t)taosArrayGetSize(tableIdList), pTaskInfo->id.str); } - if (pListInfo->map == NULL) { - pListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); - } - // traverse to the stream scanner node to add this table id SOperatorInfo* pInfo = pTaskInfo->pRoot; while (pInfo->operatorType != QUERY_NODE_PHYSICAL_PLAN_STREAM_SCAN) { @@ -342,8 +337,10 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo SStreamScanInfo* pScanInfo = pInfo->info; if (isAdd) { // add new table id SArray* qa = filterUnqualifiedTables(pScanInfo, tableIdList, GET_TASKID(pTaskInfo)); + int32_t numOfQualifiedTables = taosArrayGetSize(qa); + + qDebug(" %d qualified child tables added into stream scanner", numOfQualifiedTables); - qDebug(" %d qualified child tables added into stream scanner", (int32_t)taosArrayGetSize(qa)); code = tqReaderAddTbUidList(pScanInfo->tqReader, qa); if (code != TSDB_CODE_SUCCESS) { taosArrayDestroy(qa); @@ -363,7 +360,9 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo } } - for (int32_t i = 0; i < taosArrayGetSize(qa); ++i) { + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; + + for (int32_t i = 0; i < numOfQualifiedTables; ++i) { uint64_t* uid = taosArrayGet(qa, i); STableKeyInfo keyInfo = {.uid = *uid, .groupId = 0}; @@ -393,8 +392,8 @@ int32_t qUpdateQualifiedTableId(qTaskInfo_t tinfo, const SArray* tableIdList, bo if (!exists) { #endif - taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &keyInfo); - taosHashPut(pTaskInfo->tableqinfoList.map, uid, sizeof(*uid), &keyInfo.groupId, sizeof(keyInfo.groupId)); + + tableListAddTableInfo(pTableListInfo, keyInfo.uid, keyInfo.groupId); } if (keyBuf != NULL) { @@ -474,7 +473,7 @@ int32_t qCreateExecTask(SReadHandle* readHandle, int32_t vgId, uint64_t taskId, qDebug("subplan task create completed, TID:0x%" PRIx64 " QID:0x%" PRIx64, taskId, pSubplan->id.queryId); -_error: + _error: // if failed to add ref for all tables in this query, abort current query return code; } @@ -993,8 +992,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT int64_t ts = pOffset->ts; if (uid == 0) { - if (taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList) != 0) { - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, 0); + if (tableListGetSize(pTaskInfo->pTableInfoList) != 0) { + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, 0); uid = pTableInfo->uid; ts = INT64_MIN; } else { @@ -1005,7 +1004,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT /*if (pTaskInfo->streamInfo.lastStatus.type != TMQ_OFFSET__SNAPSHOT_DATA ||*/ /*pTaskInfo->streamInfo.lastStatus.uid != uid || pTaskInfo->streamInfo.lastStatus.ts != ts) {*/ STableScanInfo* pTableScanInfo = pInfo->pTableScanOp->info; - int32_t tableSz = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList); + int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList); #ifndef NDEBUG qDebug("switch to next table %" PRId64 " (cursor %d), %" PRId64 " rows returned", uid, @@ -1014,8 +1013,8 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT #endif bool found = false; - for (int32_t i = 0; i < tableSz; i++) { - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, i); + for (int32_t i = 0; i < numOfTables; i++) { + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, i); if (pTableInfo->uid == uid) { found = true; pTableScanInfo->currentTable = i; @@ -1027,14 +1026,17 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT ASSERT(found); if (pTableScanInfo->dataReader == NULL) { - if (tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &pTableScanInfo->cond, - pTaskInfo->tableqinfoList.pTableList, &pTableScanInfo->dataReader, NULL) < 0 || - pTableScanInfo->dataReader == NULL) { + STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0); + int32_t num = tableListGetSize(pTaskInfo->pTableInfoList); + + if (tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &pTableScanInfo->cond, pList, num, + &pTableScanInfo->dataReader, NULL) < 0 || pTableScanInfo->dataReader == NULL) { ASSERT(0); } } - tsdbSetTableId(pTableScanInfo->dataReader, uid); + STableKeyInfo tki = {.uid = uid}; + tsdbSetTableList(pTableScanInfo->dataReader, &tki, 1); int64_t oldSkey = pTableScanInfo->cond.twindows.skey; pTableScanInfo->cond.twindows.skey = ts + 1; tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); @@ -1042,7 +1044,7 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT pTableScanInfo->scanTimes = 0; qDebug("tsdb reader offset seek to uid %" PRId64 " ts %" PRId64 ", table cur set to %d , all table num %d", uid, - ts, pTableScanInfo->currentTable, tableSz); + ts, pTableScanInfo->currentTable, numOfTables); /*}*/ } else { ASSERT(0); @@ -1058,16 +1060,28 @@ int32_t qStreamPrepareScan(qTaskInfo_t tinfo, STqOffsetVal* pOffset, int8_t subT SMetaTableInfo mtInfo = getUidfromSnapShot(sContext); tsdbReaderClose(pInfo->dataReader); pInfo->dataReader = NULL; + cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); - taosArrayDestroy(pTaskInfo->tableqinfoList.pTableList); - if (mtInfo.uid == 0) return 0; // no data + tableListClear(pTaskInfo->pTableInfoList); + + if (mtInfo.uid == 0) { + return 0; // no data + } initQueryTableDataCondForTmq(&pTaskInfo->streamInfo.tableCond, sContext, &mtInfo); pTaskInfo->streamInfo.tableCond.twindows.skey = pOffset->ts; - pTaskInfo->tableqinfoList.pTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(pTaskInfo->tableqinfoList.pTableList, &(STableKeyInfo){.uid = mtInfo.uid, .groupId = 0}); - tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pTaskInfo->tableqinfoList.pTableList, - &pInfo->dataReader, NULL); + + if (pTaskInfo->pTableInfoList == NULL) { + pTaskInfo->pTableInfoList = tableListCreate(); + } + + tableListAddTableInfo(pTaskInfo->pTableInfoList, mtInfo.uid, 0); + + STableKeyInfo* pList = tableListGetInfo(pTaskInfo->pTableInfoList, 0); + int32_t size = tableListGetSize(pTaskInfo->pTableInfoList); + ASSERT(size == 1); + + tsdbReaderOpen(pInfo->vnode, &pTaskInfo->streamInfo.tableCond, pList, size, &pInfo->dataReader, NULL); cleanupQueryTableDataCond(&pTaskInfo->streamInfo.tableCond); strcpy(pTaskInfo->streamInfo.tbName, mtInfo.tbName); diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c index 75db42fccc..0c0d5549f2 100644 --- a/source/libs/executor/src/executorimpl.c +++ b/source/libs/executor/src/executorimpl.c @@ -494,7 +494,7 @@ static int32_t doSetInputDataBlock(SExprSupp* pExprSup, SSDataBlock* pBlock, int // todo: refactor this if (fmIsImplicitTsFunc(pCtx[i].functionId) && (j == pOneExpr->base.numOfParams - 1)) { pInput->pPTS = pInput->pData[j]; // in case of merge function, this is not always the ts column data. - // ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP); + // ASSERT(pInput->pPTS->info.type == TSDB_DATA_TYPE_TIMESTAMP); } ASSERT(pInput->pData[j] != NULL); } else if (pFuncParam->type == FUNC_PARAM_TYPE_VALUE) { @@ -815,7 +815,7 @@ bool isTaskKilled(SExecTaskInfo* pTaskInfo) { // abort current query execution. if (pTaskInfo->owner != 0 && ((taosGetTimestampSec() - pTaskInfo->cost.start / 1000) > 10 * getMaximumIdleDurationSec()) - /*(!needBuildResAfterQueryComplete(pTaskInfo))*/) { + /*(!needBuildResAfterQueryComplete(pTaskInfo))*/) { assert(pTaskInfo->cost.start != 0); // qDebug("QInfo:%" PRIu64 " retrieve not arrive beyond %d ms, abort current query execution, start:%" PRId64 // ", current:%d", pQInfo->qId, 1, pQInfo->startExecTs, taosGetTimestampSec()); @@ -1739,8 +1739,6 @@ int32_t appendDownstream(SOperatorInfo* p, SOperatorInfo** pDownstream, int32_t return TSDB_CODE_SUCCESS; } -static void doDestroyTableList(STableListInfo* pTableqinfoList); - typedef struct SFetchRspHandleWrapper { uint32_t exchangeId; int32_t sourceIndex; @@ -1965,7 +1963,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn SLoadRemoteDataInfo* pLoadInfo = &pExchangeInfo->loadInfo; if (pRsp->numOfRows == 0) { qDebug("%s vgId:%d, taskId:0x%" PRIx64 " execId:%d index:%d completed, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 ", completed:%d try next %d/%" PRIzu, + ", totalRows:%" PRIu64 ", completed:%d try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, i, pDataInfo->totalRows, pExchangeInfo->loadInfo.totalRows, completed + 1, i + 1, totalSources); pDataInfo->status = EX_SOURCE_DATA_EXHAUSTED; @@ -1992,10 +1990,10 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn if (pRsp->completed == 1) { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 - " execId:%d" - " index:%d completed, blocks:%d, numOfRows:%d, rowsOfSource:%" PRIu64 ", totalRows:%" PRIu64 - ", total:%.2f Kb," - " completed:%d try next %d/%" PRIzu, + " execId:%d" + " index:%d completed, blocks:%d, numOfRows:%d, rowsOfSource:%" PRIu64 ", totalRows:%" PRIu64 + ", total:%.2f Kb," + " completed:%d try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, i, pRsp->numOfBlocks, pRsp->numOfRows, pDataInfo->totalRows, pLoadInfo->totalRows, pLoadInfo->totalSize / 1024.0, completed + 1, i + 1, totalSources); @@ -2003,7 +2001,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn pDataInfo->status = EX_SOURCE_DATA_EXHAUSTED; } else { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 - " execId:%d blocks:%d, numOfRows:%d, totalRows:%" PRIu64 ", total:%.2f Kb", + " execId:%d blocks:%d, numOfRows:%d, totalRows:%" PRIu64 ", total:%.2f Kb", GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRsp->numOfBlocks, pRsp->numOfRows, pLoadInfo->totalRows, pLoadInfo->totalSize / 1024.0); } @@ -2030,7 +2028,7 @@ static void concurrentlyLoadRemoteDataImpl(SOperatorInfo* pOperator, SExchangeIn sched_yield(); } -_error: + _error: pTaskInfo->code = code; } @@ -2091,7 +2089,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { SLoadRemoteDataInfo* pLoadInfo = &pExchangeInfo->loadInfo; if (pRsp->numOfRows == 0) { qDebug("%s vgId:%d, taskID:0x%" PRIx64 " execId:%d %d of total completed, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 " try next", + ", totalRows:%" PRIu64 " try next", GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pExchangeInfo->current + 1, pDataInfo->totalRows, pLoadInfo->totalRows); @@ -2108,7 +2106,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { if (pRsp->completed == 1) { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 " execId:%d numOfRows:%d, rowsOfSource:%" PRIu64 - ", totalRows:%" PRIu64 ", totalBytes:%" PRIu64 " try next %d/%" PRIzu, + ", totalRows:%" PRIu64 ", totalBytes:%" PRIu64 " try next %d/%" PRIzu, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRetrieveRsp->numOfRows, pDataInfo->totalRows, pLoadInfo->totalRows, pLoadInfo->totalSize, pExchangeInfo->current + 1, totalSources); @@ -2117,7 +2115,7 @@ static int32_t seqLoadRemoteData(SOperatorInfo* pOperator) { pExchangeInfo->current += 1; } else { qDebug("%s fetch msg rsp from vgId:%d, taskId:0x%" PRIx64 " execId:%d numOfRows:%d, totalRows:%" PRIu64 - ", totalBytes:%" PRIu64, + ", totalBytes:%" PRIu64, GET_TASKID(pTaskInfo), pSource->addr.nodeId, pSource->taskId, pSource->execId, pRetrieveRsp->numOfRows, pLoadInfo->totalRows, pLoadInfo->totalSize); } @@ -2305,7 +2303,7 @@ SOperatorInfo* createExchangeOperatorInfo(void* pTransporter, SExchangePhysiNode createOperatorFpSet(prepareLoadRemoteData, doLoadRemoteData, NULL, NULL, destroyExchangeOperatorInfo, NULL); return pOperator; -_error: + _error: if (pInfo != NULL) { doDestroyExchangeOperatorInfo(pInfo); } @@ -3042,7 +3040,7 @@ SOperatorInfo* createAggregateOperatorInfo(SOperatorInfo* downstream, SAggPhysiN return pOperator; -_error: + _error: if (pInfo != NULL) { destroyAggOperatorInfo(pInfo); } @@ -3052,7 +3050,7 @@ _error: } taosMemoryFreeClear(pOperator); - pTaskInfo->code = TSDB_CODE_OUT_OF_MEMORY; + pTaskInfo->code = code; return NULL; } @@ -3212,8 +3210,8 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* SInterval* pInterval = QUERY_NODE_PHYSICAL_PLAN_MERGE_ALIGNED_INTERVAL == downstream->operatorType - ? &((SMergeAlignedIntervalAggOperatorInfo*)downstream->info)->intervalAggOperatorInfo->interval - : &((SIntervalAggOperatorInfo*)downstream->info)->interval; + ? &((SMergeAlignedIntervalAggOperatorInfo*)downstream->info)->intervalAggOperatorInfo->interval + : &((SIntervalAggOperatorInfo*)downstream->info)->interval; int32_t order = (pPhyFillNode->inputTsOrder == ORDER_ASC) ? TSDB_ORDER_ASC : TSDB_ORDER_DESC; int32_t type = convertFillType(pPhyFillNode->mode); @@ -3258,7 +3256,7 @@ SOperatorInfo* createFillOperatorInfo(SOperatorInfo* downstream, SFillPhysiNode* code = appendDownstream(pOperator, &downstream, 1); return pOperator; -_error: + _error: if (pInfo != NULL) { destroyFillOperatorInfo(pInfo); } @@ -3275,6 +3273,7 @@ static SExecTaskInfo* createExecTaskInfo(uint64_t queryId, uint64_t taskId, EOPT pTaskInfo->cost.created = taosGetTimestampMs(); pTaskInfo->id.queryId = queryId; pTaskInfo->execModel = model; + pTaskInfo->pTableInfoList = tableListCreate(); char* p = taosMemoryCalloc(1, 128); snprintf(p, 128, "TID:0x%" PRIx64 " QID:0x%" PRIx64, taskId, queryId); @@ -3366,64 +3365,6 @@ static void cleanupTableSchemaInfo(SSchemaInfo* pSchemaInfo) { static void cleanupStreamInfo(SStreamTaskInfo* pStreamInfo) { tDeleteSSchemaWrapper(pStreamInfo->schema); } -static int32_t sortTableGroup(STableListInfo* pTableListInfo) { - taosArrayClear(pTableListInfo->pGroupList); - SArray* sortSupport = taosArrayInit(16, sizeof(uint64_t)); - if (sortSupport == NULL) return TSDB_CODE_OUT_OF_MEMORY; - for (int32_t i = 0; i < taosArrayGetSize(pTableListInfo->pTableList); i++) { - STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - uint64_t* groupId = taosHashGet(pTableListInfo->map, &info->uid, sizeof(uint64_t)); - - int32_t index = taosArraySearchIdx(sortSupport, groupId, compareUint64Val, TD_EQ); - if (index == -1) { - void* p = taosArraySearch(sortSupport, groupId, compareUint64Val, TD_GT); - SArray* tGroup = taosArrayInit(8, sizeof(STableKeyInfo)); - if (tGroup == NULL) { - taosArrayDestroy(sortSupport); - return TSDB_CODE_OUT_OF_MEMORY; - } - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push info array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - if (p == NULL) { - if (taosArrayPush(sortSupport, groupId) == NULL) { - qError("taos push support array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - if (taosArrayPush(pTableListInfo->pGroupList, &tGroup) == NULL) { - qError("taos push group array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - } else { - int32_t pos = TARRAY_ELEM_IDX(sortSupport, p); - if (taosArrayInsert(sortSupport, pos, groupId) == NULL) { - qError("taos insert support array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - if (taosArrayInsert(pTableListInfo->pGroupList, pos, &tGroup) == NULL) { - qError("taos insert group array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - } - } else { - SArray* tGroup = (SArray*)taosArrayGetP(pTableListInfo->pGroupList, index); - if (taosArrayPush(tGroup, info) == NULL) { - qError("taos push uid array error"); - taosArrayDestroy(sortSupport); - return TSDB_CODE_QRY_APP_ERROR; - } - } - } - taosArrayDestroy(sortSupport); - return TDB_CODE_SUCCESS; -} - bool groupbyTbname(SNodeList* pGroupList) { bool bytbname = false; if (LIST_LENGTH(pGroupList) == 1) { @@ -3437,80 +3378,29 @@ bool groupbyTbname(SNodeList* pGroupList) { return bytbname; } -int32_t generateGroupIdMap(STableListInfo* pTableListInfo, SReadHandle* pHandle, SNodeList* group) { - if (group == NULL) { - return TDB_CODE_SUCCESS; - } - - pTableListInfo->map = taosHashInit(32, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), false, HASH_ENTRY_LOCK); - if (pTableListInfo->map == NULL) { - return TSDB_CODE_OUT_OF_MEMORY; - } - - bool assignUid = groupbyTbname(group); - - size_t numOfTables = taosArrayGetSize(pTableListInfo->pTableList); - - if (assignUid) { - for (int32_t i = 0; i < numOfTables; i++) { - STableKeyInfo* info = taosArrayGet(pTableListInfo->pTableList, i); - info->groupId = info->uid; - taosHashPut(pTableListInfo->map, &(info->uid), sizeof(uint64_t), &info->groupId, sizeof(uint64_t)); - } - } else { - int32_t code = getColInfoResultForGroupby(pHandle->meta, group, pTableListInfo); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - } - - if (pTableListInfo->needSortTableByGroupId) { - return sortTableGroup(pTableListInfo); - } - - return TDB_CODE_SUCCESS; -} - -static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { - memset(pCond, 0, sizeof(SQueryTableDataCond)); - - pCond->order = TSDB_ORDER_ASC; - pCond->numOfCols = 1; - pCond->colList = taosMemoryCalloc(1, sizeof(SColumnInfo)); - if (pCond->colList == NULL) { - terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; - return terrno; - } - - pCond->colList->colId = 1; - pCond->colList->type = TSDB_DATA_TYPE_TIMESTAMP; - pCond->colList->bytes = sizeof(TSKEY); - - pCond->twindows = (STimeWindow){.skey = INT64_MIN, .ekey = INT64_MAX}; - pCond->suid = uid; - pCond->type = TIMEWINDOW_RANGE_CONTAINED; - pCond->startVersion = -1; - pCond->endVersion = -1; - - return TSDB_CODE_SUCCESS; -} - -SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* pUser) { +SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo, SReadHandle* pHandle, SNode* pTagCond, + SNode* pTagIndexCond, const char* pUser) { int32_t type = nodeType(pPhyNode); + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; + const char* idstr = GET_TASKID(pTaskInfo); if (pPhyNode->pChildren == NULL || LIST_LENGTH(pPhyNode->pChildren) == 0) { SOperatorInfo* pOperator = NULL; if (QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN == type) { STableScanPhysiNode* pTableScanNode = (STableScanPhysiNode*)pPhyNode; + // NOTE: this is an patch to fix the physical plan + // TODO remove it later + if (pTableScanNode->scan.node.pLimit != NULL) { + pTableScanNode->groupSort = true; + } + int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle, - pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; - qError("failed to createScanTableListInfo, code:%s, %s", tstrerror(code), GET_TASKID(pTaskInfo)); + qError("failed to createScanTableListInfo, code:%s, %s", tstrerror(code), idstr); return NULL; } @@ -3526,8 +3416,8 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } else if (QUERY_NODE_PHYSICAL_PLAN_TABLE_MERGE_SCAN == type) { STableMergeScanPhysiNode* pTableScanNode = (STableMergeScanPhysiNode*)pPhyNode; int32_t code = - createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, pHandle, - pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, /*pTableScanNode->groupSort*/true, pHandle, + pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); @@ -3552,7 +3442,7 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo if (pHandle->vnode) { int32_t code = createScanTableListInfo(&pTableScanNode->scan, pTableScanNode->pGroupTags, pTableScanNode->groupSort, - pHandle, pTableListInfo, pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pHandle, pTableListInfo, pTagCond, pTagIndexCond, idstr); if (code) { pTaskInfo->code = code; qError("failed to createScanTableListInfo, code: %s", tstrerror(code)); @@ -3560,10 +3450,12 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo } #ifndef NDEBUG - int32_t sz = taosArrayGetSize(pTableListInfo->pTableList); + int32_t sz = tableListGetSize(pTableListInfo); + qDebug("create stream task, total:%d", sz); + for (int32_t i = 0; i < sz; i++) { - STableKeyInfo* pKeyInfo = taosArrayGet(pTableListInfo->pTableList, i); - qDebug("creating stream task: add table %" PRId64, pKeyInfo->uid); + STableKeyInfo* pKeyInfo = tableListGetInfo(pTableListInfo, i); + qDebug("add table uid:%" PRIu64", gid:%"PRIu64, pKeyInfo->uid, pKeyInfo->groupId); } #endif } @@ -3575,7 +3467,9 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo pOperator = createSysTableScanOperatorInfo(pHandle, pSysScanPhyNode, pUser, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_TAG_SCAN == type) { STagScanPhysiNode* pScanPhyNode = (STagScanPhysiNode*)pPhyNode; - int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanPhyNode, pTagCond, pTagIndexCond, pTableListInfo); + + int32_t code = createScanTableListInfo(pScanPhyNode, NULL, false, pHandle, pTableListInfo, pTagCond, + pTagIndexCond, idstr); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; qError("failed to getTableList, code: %s", tstrerror(code)); @@ -3585,35 +3479,30 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo pOperator = createTagScanOperatorInfo(pHandle, pScanPhyNode, pTableListInfo, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_BLOCK_DIST_SCAN == type) { SBlockDistScanPhysiNode* pBlockNode = (SBlockDistScanPhysiNode*)pPhyNode; - pTableListInfo->pTableList = taosArrayInit(4, sizeof(STableKeyInfo)); if (pBlockNode->tableType == TSDB_SUPER_TABLE) { - int32_t code = vnodeGetAllTableList(pHandle->vnode, pBlockNode->uid, pTableListInfo->pTableList); + SArray* pList = taosArrayInit(4, sizeof(STableKeyInfo)); + int32_t code = vnodeGetAllTableList(pHandle->vnode, pBlockNode->uid, pList); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = terrno; return NULL; } - } else { // Create one table group. - STableKeyInfo info = {.uid = pBlockNode->uid, .groupId = 0}; - taosArrayPush(pTableListInfo->pTableList, &info); + + for(int32_t i = 0; i < tableListGetSize(pTableListInfo); ++i) { + STableKeyInfo* p = taosArrayGet(pList, i); + tableListAddTableInfo(pTableListInfo, p->uid, 0); + } + taosArrayDestroy(pList); + } else { // Create group with only one table + tableListAddTableInfo(pTableListInfo, pBlockNode->uid, 0); } - SQueryTableDataCond cond = {0}; - int32_t code = initTableblockDistQueryCond(pBlockNode->suid, &cond); - if (code != TSDB_CODE_SUCCESS) { - return NULL; - } - - STsdbReader* pReader = NULL; - tsdbReaderOpen(pHandle->vnode, &cond, pTableListInfo->pTableList, &pReader, ""); - cleanupQueryTableDataCond(&cond); - - pOperator = createDataBlockInfoScanOperator(pReader, pHandle, cond.suid, pBlockNode, pTaskInfo); + pOperator = createDataBlockInfoScanOperator(pHandle, pBlockNode, pTaskInfo); } else if (QUERY_NODE_PHYSICAL_PLAN_LAST_ROW_SCAN == type) { SLastRowScanPhysiNode* pScanNode = (SLastRowScanPhysiNode*)pPhyNode; int32_t code = createScanTableListInfo(&pScanNode->scan, pScanNode->pGroupTags, true, pHandle, pTableListInfo, - pTagCond, pTagIndexCond, GET_TASKID(pTaskInfo)); + pTagCond, pTagIndexCond, idstr); if (code != TSDB_CODE_SUCCESS) { pTaskInfo->code = code; return NULL; @@ -3639,17 +3528,19 @@ SOperatorInfo* createOperatorTree(SPhysiNode* pPhyNode, SExecTaskInfo* pTaskInfo return pOperator; } - size_t size = LIST_LENGTH(pPhyNode->pChildren); + size_t size = LIST_LENGTH(pPhyNode->pChildren); SOperatorInfo** ops = taosMemoryCalloc(size, POINTER_BYTES); + if (ops == NULL) { + return NULL; + } + for (int32_t i = 0; i < size; ++i) { SPhysiNode* pChildNode = (SPhysiNode*)nodesListGetNode(pPhyNode->pChildren, i); - ops[i] = createOperatorTree(pChildNode, pTaskInfo, pHandle, pTableListInfo, pTagCond, pTagIndexCond, pUser); + ops[i] = createOperatorTree(pChildNode, pTaskInfo, pHandle, pTagCond, pTagIndexCond, pUser); if (ops[i] == NULL) { taosMemoryFree(ops); return NULL; } - - ops[i]->resultDataBlockId = pChildNode->pOutputDataBlockDesc->dataBlockId; } SOperatorInfo* pOptr = NULL; @@ -3848,7 +3739,7 @@ int32_t encodeOperator(SOperatorInfo* ops, char** result, int32_t* length, int32 *length = *(int32_t*)(*result); } -_downstream: + _downstream: for (int32_t i = 0; i < ops->numOfDownstream; ++i) { code = encodeOperator(ops->pDownstream[i], result, length, nOptrWithVal); if (code != TDB_CODE_SUCCESS) { @@ -3914,15 +3805,18 @@ int32_t createDataSinkParam(SDataSinkNode* pNode, void** pParam, qTaskInfo_t* pT if (NULL == pDeleterParam) { return TSDB_CODE_OUT_OF_MEMORY; } - int32_t tbNum = taosArrayGetSize(pTask->tableqinfoList.pTableList); - pDeleterParam->suid = pTask->tableqinfoList.suid; + int32_t tbNum = tableListGetSize(pTask->pTableInfoList); + pDeleterParam->suid = tableListGetSuid(pTask->pTableInfoList); + + // TODO extract uid list pDeleterParam->pUidList = taosArrayInit(tbNum, sizeof(uint64_t)); if (NULL == pDeleterParam->pUidList) { taosMemoryFree(pDeleterParam); return TSDB_CODE_OUT_OF_MEMORY; } + for (int32_t i = 0; i < tbNum; ++i) { - STableKeyInfo* pTable = taosArrayGet(pTask->tableqinfoList.pTableList, i); + STableKeyInfo* pTable = tableListGetInfo(pTask->pTableInfoList, i); taosArrayPush(pDeleterParam->pUidList, &pTable->uid); } @@ -3958,8 +3852,8 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead sql = NULL; (*pTaskInfo)->pSubplan = pPlan; - (*pTaskInfo)->pRoot = createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, &(*pTaskInfo)->tableqinfoList, - pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user); + (*pTaskInfo)->pRoot = + createOperatorTree(pPlan->pNode, *pTaskInfo, pHandle, pPlan->pTagCond, pPlan->pTagIndexCond, pPlan->user); if (NULL == (*pTaskInfo)->pRoot) { code = (*pTaskInfo)->code; @@ -3968,35 +3862,17 @@ int32_t createExecTaskInfoImpl(SSubplan* pPlan, SExecTaskInfo** pTaskInfo, SRead return code; -_complete: + _complete: taosMemoryFree(sql); doDestroyTask(*pTaskInfo); terrno = code; return code; } -void doDestroyTableList(STableListInfo* pTableqinfoList) { - taosArrayDestroy(pTableqinfoList->pTableList); - taosHashCleanup(pTableqinfoList->map); - if (pTableqinfoList->needSortTableByGroupId) { - for (int32_t i = 0; i < taosArrayGetSize(pTableqinfoList->pGroupList); i++) { - SArray* tmp = taosArrayGetP(pTableqinfoList->pGroupList, i); - if (tmp == pTableqinfoList->pTableList) { - continue; - } - taosArrayDestroy(tmp); - } - } - taosArrayDestroy(pTableqinfoList->pGroupList); - - pTableqinfoList->pTableList = NULL; - pTableqinfoList->map = NULL; -} - void doDestroyTask(SExecTaskInfo* pTaskInfo) { qDebug("%s execTask is freed", GET_TASKID(pTaskInfo)); - doDestroyTableList(&pTaskInfo->tableqinfoList); + pTaskInfo->pTableInfoList = tableListDestroy(pTaskInfo->pTableInfoList); destroyOperatorInfo(pTaskInfo->pRoot); cleanupTableSchemaInfo(&pTaskInfo->schemaInfo); cleanupStreamInfo(&pTaskInfo->streamInfo); @@ -4125,8 +4001,8 @@ int32_t buildDataBlockFromGroupRes(SOperatorInfo* pOperator, SStreamState* pStat int32_t size = 0; void* pVal = NULL; SWinKey key = { - .ts = *(TSKEY*)pPos->key, - .groupId = pPos->groupId, + .ts = *(TSKEY*)pPos->key, + .groupId = pPos->groupId, }; int32_t code = streamStateGet(pState, &key, &pVal, &size); ASSERT(code == 0); diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c index 644f02f60d..d8340b72f2 100644 --- a/source/libs/executor/src/groupoperator.c +++ b/source/libs/executor/src/groupoperator.c @@ -62,7 +62,7 @@ static int32_t initGroupOptrInfo(SArray** pGroupColVals, int32_t* keyLen, char** int32_t numOfGroupCols = taosArrayGetSize(pGroupColList); for (int32_t i = 0; i < numOfGroupCols; ++i) { - SColumn* pCol = (SColumn*) taosArrayGet(pGroupColList, i); + SColumn* pCol = (SColumn*)taosArrayGet(pGroupColList, i); (*keyLen) += pCol->bytes; // actual data + null_flag SGroupKeys key = {0}; @@ -397,7 +397,7 @@ static SSDataBlock* hashGroupbyAggregate(SOperatorInfo* pOperator) { return buildGroupResultDataBlock(pOperator); } -SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode *pAggNode, SExecTaskInfo* pTaskInfo) { +SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode* pAggNode, SExecTaskInfo* pTaskInfo) { SGroupbyOperatorInfo* pInfo = taosMemoryCalloc(1, sizeof(SGroupbyOperatorInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -442,8 +442,8 @@ SOperatorInfo* createGroupOperatorInfo(SOperatorInfo* downstream, SAggPhysiNode pOperator->info = pInfo; pOperator->pTaskInfo = pTaskInfo; - pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, hashGroupbyAggregate, NULL, NULL, - destroyGroupOperatorInfo, NULL); + pOperator->fpSet = + createOperatorFpSet(operatorDummyOpenFn, hashGroupbyAggregate, NULL, NULL, destroyGroupOperatorInfo, NULL); code = appendDownstream(pOperator, &downstream, 1); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -765,7 +765,6 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition goto _error; } - int32_t numOfCols = 0; SExprInfo* pExprInfo = createExprInfo(pPartNode->pTargets, NULL, &numOfCols); pInfo->pGroupCols = extractPartitionColInfo(pPartNode->pPartitionKeys); @@ -819,8 +818,8 @@ SOperatorInfo* createPartitionOperatorInfo(SOperatorInfo* downstream, SPartition pOperator->info = pInfo; pOperator->pTaskInfo = pTaskInfo; - pOperator->fpSet = createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, NULL, destroyPartitionOperatorInfo, - NULL); + pOperator->fpSet = + createOperatorFpSet(operatorDummyOpenFn, hashPartition, NULL, NULL, destroyPartitionOperatorInfo, NULL); code = appendDownstream(pOperator, &downstream, 1); return pOperator; @@ -965,6 +964,7 @@ static SSDataBlock* doStreamHashPartition(SOperatorInfo* pOperator) { case STREAM_DELETE_DATA: { copyDataBlock(pInfo->pDelRes, pBlock); pInfo->pDelRes->info.type = STREAM_DELETE_RESULT; + printDataBlock(pInfo->pDelRes, "stream partitionby delete"); return pInfo->pDelRes; } break; default: @@ -1014,6 +1014,9 @@ void initParDownStream(SOperatorInfo* downstream, SPartitionBySupporter* pParSup SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->partitionSup = *pParSup; pScanInfo->pPartScalarSup = pExpr; + if (!pScanInfo->pUpdateInfo) { + pScanInfo->pUpdateInfo = updateInfoInit(60000, TSDB_TIME_PRECISION_MILLI, 0); + } } SOperatorInfo* createStreamPartitionOperatorInfo(SOperatorInfo* downstream, SStreamPartitionPhysiNode* pPartNode, @@ -1108,7 +1111,6 @@ _error: return NULL; } - SArray* extractColumnInfo(SNodeList* pNodeList) { size_t numOfCols = LIST_LENGTH(pNodeList); SArray* pList = taosArrayInit(numOfCols, sizeof(SColumn)); diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c index 1a1a622efd..eba3dd892d 100644 --- a/source/libs/executor/src/scanoperator.c +++ b/source/libs/executor/src/scanoperator.c @@ -378,8 +378,6 @@ void applyLimitOffset(SLimitInfo* pLimitInfo, SSDataBlock* pBlock, SExecTaskInfo blockDataKeepFirstNRows(pBlock, keep); qDebug("output limit %" PRId64 " has reached, %s", pLimit->limit, GET_TASKID(pTaskInfo)); - - // setTaskStatus(pTaskInfo, TASK_COMPLETED); pOperator->status = OP_EXEC_DONE; } } @@ -624,12 +622,9 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) { binfo.capacity = binfo.rows; blockDataEnsureCapacity(pBlock, binfo.rows); pBlock->info = binfo; - ASSERT(binfo.uid != 0); - uint64_t* groupId = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } + ASSERT(binfo.uid != 0); + pBlock->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, pBlock->info.uid); uint32_t status = 0; int32_t code = loadDataBlock(pOperator, pTableScanInfo, pBlock, &status); @@ -683,10 +678,7 @@ static SSDataBlock* doTableScanGroup(SOperatorInfo* pOperator) { if (pTableScanInfo->scanTimes < pTableScanInfo->scanInfo.numOfAsc) { setTaskStatus(pTaskInfo, TASK_NOT_COMPLETED); pTableScanInfo->scanFlag = REPEAT_SCAN; - qDebug( - "%s start to repeat ascending order scan data SELECT last_row(*),hostname from cpu group by hostname;blocks " - "due to query func required", - GET_TASKID(pTaskInfo)); + qDebug("start to repeat ascending order scan data blocks due to query func required, %s", GET_TASKID(pTaskInfo)); // do prepare for the next round table scan operation tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); @@ -713,8 +705,7 @@ static SSDataBlock* doTableScanGroup(SOperatorInfo* pOperator) { setTaskStatus(pTaskInfo, TASK_NOT_COMPLETED); pTableScanInfo->scanFlag = REPEAT_SCAN; - qDebug("%s start to repeat descending order scan data blocks due to query func required", - GET_TASKID(pTaskInfo)); + qDebug("%s start to repeat descending order scan data blocks", GET_TASKID(pTaskInfo)); tsdbReaderReset(pTableScanInfo->dataReader, &pTableScanInfo->cond); } } @@ -727,9 +718,9 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { STableScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; - // if scan table by table + // scan table one by one sequentially if (pInfo->scanMode == TABLE_SCAN__TABLE_ORDER) { - int32_t numOfTables = taosArrayGetSize(pTaskInfo->tableqinfoList.pTableList); + int32_t numOfTables = tableListGetSize(pTaskInfo->pTableInfoList); while (1) { SSDataBlock* result = doTableScanGroup(pOperator); @@ -743,55 +734,65 @@ static SSDataBlock* doTableScan(SOperatorInfo* pOperator) { return NULL; } - STableKeyInfo* pTableInfo = taosArrayGet(pTaskInfo->tableqinfoList.pTableList, pInfo->currentTable); - tsdbSetTableId(pInfo->dataReader, pTableInfo->uid); + STableKeyInfo* pTableInfo = tableListGetInfo(pTaskInfo->pTableInfoList, pInfo->currentTable); + tsdbSetTableList(pInfo->dataReader, pTableInfo, 1); qDebug("set uid:%" PRIu64 " into scanner, total tables:%d, index:%d %s", pTableInfo->uid, numOfTables, pInfo->currentTable, pTaskInfo->id.str); tsdbReaderReset(pInfo->dataReader, &pInfo->cond); pInfo->scanTimes = 0; } - } + } else { // scan table group by group sequentially + if (pInfo->currentGroupId == -1) { + if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pTaskInfo->pTableInfoList)) { + doSetOperatorCompleted(pOperator); + return NULL; + } - if (pInfo->currentGroupId == -1) { - pInfo->currentGroupId++; - if (pInfo->currentGroupId >= taosArrayGetSize(pTaskInfo->tableqinfoList.pGroupList)) { - setTaskStatus(pTaskInfo, TASK_COMPLETED); + int32_t num = 0; + STableKeyInfo* pList = NULL; + tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); + ASSERT(pInfo->dataReader == NULL); + + int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, pList, num, + (STsdbReader**)&pInfo->dataReader, GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + T_LONG_JMP(pTaskInfo->env, code); + } + } + + SSDataBlock* result = doTableScanGroup(pOperator); + if (result != NULL) { + ASSERT(result->info.uid != 0); + return result; + } + + if ((++pInfo->currentGroupId) >= tableListGetOutputGroups(pTaskInfo->pTableInfoList)) { + doSetOperatorCompleted(pOperator); return NULL; } - SArray* tableList = taosArrayGetP(pTaskInfo->tableqinfoList.pGroupList, pInfo->currentGroupId); - tsdbReaderClose(pInfo->dataReader); + // reset value for the next group data output + pOperator->status = OP_OPENED; + pInfo->limitInfo.numOfOutputRows = 0; + pInfo->limitInfo.remainOffset = pInfo->limitInfo.limit.offset; - int32_t code = tsdbReaderOpen(pInfo->readHandle.vnode, &pInfo->cond, tableList, (STsdbReader**)&pInfo->dataReader, - GET_TASKID(pTaskInfo)); - if (code != TSDB_CODE_SUCCESS) { - T_LONG_JMP(pTaskInfo->env, code); - return NULL; + int32_t num = 0; + STableKeyInfo* pList = NULL; + tableListGetGroupList(pTaskInfo->pTableInfoList, pInfo->currentGroupId, &pList, &num); + + tsdbSetTableList(pInfo->dataReader, pList, num); + tsdbReaderReset(pInfo->dataReader, &pInfo->cond); + pInfo->scanTimes = 0; + + result = doTableScanGroup(pOperator); + if (result != NULL) { + return result; } - } - SSDataBlock* result = doTableScanGroup(pOperator); - if (result) { - return result; - } - - pInfo->currentGroupId++; - if (pInfo->currentGroupId >= taosArrayGetSize(pTaskInfo->tableqinfoList.pGroupList)) { - setTaskStatus(pTaskInfo, TASK_COMPLETED); + doSetOperatorCompleted(pOperator); return NULL; } - - tsdbReaderReset(pInfo->dataReader, &pInfo->cond); - pInfo->scanTimes = 0; - - result = doTableScanGroup(pOperator); - if (result) { - return result; - } - - setTaskStatus(pTaskInfo, TASK_COMPLETED); - return NULL; } static int32_t getTableScannerExecInfo(struct SOperatorInfo* pOptr, void** pOptrExplain, uint32_t* len) { @@ -837,7 +838,6 @@ SOperatorInfo* createTableScanOperatorInfo(STableScanPhysiNode* pTableScanNode, } initLimitInfo(pTableScanNode->scan.node.pLimit, pTableScanNode->scan.node.pSlimit, &pInfo->limitInfo); - code = initQueryTableDataCond(&pInfo->cond, pTableScanNode); if (code != TSDB_CODE_SUCCESS) { goto _error; @@ -1001,8 +1001,32 @@ static void destroyBlockDistScanOperatorInfo(void* param) { taosMemoryFreeClear(param); } -SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* readHandle, uint64_t uid, - SBlockDistScanPhysiNode* pBlockScanNode, SExecTaskInfo* pTaskInfo) { +static int32_t initTableblockDistQueryCond(uint64_t uid, SQueryTableDataCond* pCond) { + memset(pCond, 0, sizeof(SQueryTableDataCond)); + + pCond->order = TSDB_ORDER_ASC; + pCond->numOfCols = 1; + pCond->colList = taosMemoryCalloc(1, sizeof(SColumnInfo)); + if (pCond->colList == NULL) { + terrno = TSDB_CODE_QRY_OUT_OF_MEMORY; + return terrno; + } + + pCond->colList->colId = 1; + pCond->colList->type = TSDB_DATA_TYPE_TIMESTAMP; + pCond->colList->bytes = sizeof(TSKEY); + + pCond->twindows = (STimeWindow){.skey = INT64_MIN, .ekey = INT64_MAX}; + pCond->suid = uid; + pCond->type = TIMEWINDOW_RANGE_CONTAINED; + pCond->startVersion = -1; + pCond->endVersion = -1; + + return TSDB_CODE_SUCCESS; +} + +SOperatorInfo* createDataBlockInfoScanOperator(SReadHandle* readHandle, SBlockDistScanPhysiNode* pBlockScanNode, + SExecTaskInfo* pTaskInfo) { SBlockDistInfo* pInfo = taosMemoryCalloc(1, sizeof(SBlockDistInfo)); SOperatorInfo* pOperator = taosMemoryCalloc(1, sizeof(SOperatorInfo)); if (pInfo == NULL || pOperator == NULL) { @@ -1010,9 +1034,24 @@ SOperatorInfo* createDataBlockInfoScanOperator(void* dataReader, SReadHandle* re goto _error; } - pInfo->pHandle = dataReader; + { + SQueryTableDataCond cond = {0}; + + int32_t code = initTableblockDistQueryCond(pBlockScanNode->suid, &cond); + if (code != TSDB_CODE_SUCCESS) { + return NULL; + } + + STableListInfo* pTableListInfo = pTaskInfo->pTableInfoList; + size_t num = tableListGetSize(pTableListInfo); + void* pList = tableListGetInfo(pTableListInfo, 0); + + tsdbReaderOpen(readHandle->vnode, &cond, pList, num, &pInfo->pHandle, pTaskInfo->id.str); + cleanupQueryTableDataCond(&cond); + } + pInfo->readHandle = *readHandle; - pInfo->uid = uid; + pInfo->uid = pBlockScanNode->suid; pInfo->pResBlock = createResDataBlock(pBlockScanNode->node.pOutputDataBlockDesc); int32_t numOfCols = 0; @@ -1077,39 +1116,58 @@ void resetTableScanInfo(STableScanInfo* pTableScanInfo, STimeWindow* pWin) { pTableScanInfo->cond.twindows = *pWin; pTableScanInfo->scanTimes = 0; pTableScanInfo->currentGroupId = -1; -} - -static void freeArray(void* array) { taosArrayDestroy(array); } - -static void resetTableScanOperator(SOperatorInfo* pTableScanOp) { - STableScanInfo* pTableScanInfo = pTableScanOp->info; - pTableScanInfo->cond.startVersion = -1; - pTableScanInfo->cond.endVersion = -1; - SArray* gpTbls = pTableScanOp->pTaskInfo->tableqinfoList.pGroupList; - SArray* allTbls = pTableScanOp->pTaskInfo->tableqinfoList.pTableList; - taosArrayClearP(gpTbls, freeArray); - taosArrayPush(gpTbls, &allTbls); - STimeWindow win = {.skey = INT64_MIN, .ekey = INT64_MAX}; - resetTableScanInfo(pTableScanOp->info, &win); + tsdbReaderClose(pTableScanInfo->dataReader); + pTableScanInfo->dataReader = NULL; } static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbUid, TSKEY startTs, TSKEY endTs, int64_t maxVersion) { - SArray* gpTbls = pTableScanOp->pTaskInfo->tableqinfoList.pGroupList; - taosArrayClear(gpTbls); STableKeyInfo tblInfo = {.uid = tbUid, .groupId = 0}; - SArray* tbls = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(tbls, &tblInfo); - taosArrayPush(gpTbls, &tbls); - STimeWindow win = {.skey = startTs, .ekey = endTs}; - STableScanInfo* pTableScanInfo = pTableScanOp->info; - pTableScanInfo->cond.startVersion = -1; - pTableScanInfo->cond.endVersion = maxVersion; - resetTableScanInfo(pTableScanOp->info, &win); - SSDataBlock* pRes = doTableScan(pTableScanOp); - resetTableScanOperator(pTableScanOp); - return pRes; + STableScanInfo* pTableScanInfo = pTableScanOp->info; + SQueryTableDataCond cond = pTableScanInfo->cond; + + cond.startVersion = -1; + cond.endVersion = maxVersion; + cond.twindows = (STimeWindow){.skey = startTs, .ekey = endTs}; + + SExecTaskInfo* pTaskInfo = pTableScanOp->pTaskInfo; + + SSDataBlock* pBlock = pTableScanInfo->pResBlock; + blockDataCleanup(pBlock); + + STsdbReader* pReader = NULL; + int32_t code = tsdbReaderOpen(pTableScanInfo->readHandle.vnode, &cond, &tblInfo, 1, (STsdbReader**)&pReader, + GET_TASKID(pTaskInfo)); + if (code != TSDB_CODE_SUCCESS) { + terrno = code; + return NULL; + } + + bool hasBlock = tsdbNextDataBlock(pReader); + if (hasBlock) { + SDataBlockInfo binfo = {0}; + tsdbRetrieveDataBlockInfo(pReader, &binfo); + + SArray* pCols = tsdbRetrieveDataBlock(pReader, NULL); + blockDataEnsureCapacity(pBlock, binfo.rows); + + pBlock->info.window = binfo.window; + pBlock->info.uid = binfo.uid; + pBlock->info.rows = binfo.rows; + + relocateColumnData(pBlock, pTableScanInfo->matchInfo.pList, pCols, true); + doSetTagColumnData(pTableScanInfo, pBlock, pTaskInfo); + + pBlock->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, binfo.uid); + } + + tsdbReaderClose(pReader); + qDebug("retrieve prev rows:%d, skey:%" PRId64 ", ekey:%" PRId64 " uid:%" PRIu64 ", max ver:%" PRId64 + ", suid:%" PRIu64, + pBlock->info.rows, startTs, endTs, tbUid, maxVersion, cond.suid); + + return pBlock->info.rows > 0 ? pBlock : NULL; } static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion) { @@ -1122,12 +1180,13 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, } static uint64_t getGroupIdByUid(SStreamScanInfo* pInfo, uint64_t uid) { - SHashObj* map = pInfo->pTableScanOp->pTaskInfo->tableqinfoList.map; - uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); - if (groupId) { - return *groupId; - } - return 0; + return getTableGroupId(pInfo->pTableScanOp->pTaskInfo->pTableInfoList, uid); + // SHashObj* map = pInfo->pTableScanOp->pTaskInfo->pTableInfoList.map; + // uint64_t* groupId = taosHashGet(map, &uid, sizeof(int64_t)); + // if (groupId) { + // return *groupId; + // } + // return 0; } static uint64_t getGroupIdByData(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts, int64_t maxVersion) { @@ -1300,9 +1359,6 @@ static int32_t generateSessionScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSr SSessionKey startWin = {0}; getCurSessionWindow(pInfo->windowSup.pStreamAggSup, startData[i], endData[i], groupId, &startWin); if (IS_INVALID_SESSION_WIN_KEY(startWin)) { - // char* tmp = streamStateSessionDump(pInfo->windowSup.pStreamAggSup->pState); - // qInfo("%s", tmp); - // taosMemoryFree(tmp); // window has been closed. continue; } @@ -1327,7 +1383,7 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS if (rows == 0) { return TSDB_CODE_SUCCESS; } - int32_t code = blockDataEnsureCapacity(pDestBlock, rows * 2); + int32_t code = blockDataEnsureCapacity(pDestBlock, rows); if (code != TSDB_CODE_SUCCESS) { return code; } @@ -1370,39 +1426,33 @@ static int32_t generateIntervalScanRange(SStreamScanInfo* pInfo, SSDataBlock* pS } static int32_t generateDeleteResultBlock(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, SSDataBlock* pDestBlock) { - if (pSrcBlock->info.rows == 0) { + blockDataCleanup(pDestBlock); + int32_t rows = pSrcBlock->info.rows; + if (rows == 0) { return TSDB_CODE_SUCCESS; } - blockDataCleanup(pDestBlock); - int32_t code = blockDataEnsureCapacity(pDestBlock, pSrcBlock->info.rows); + int32_t code = blockDataEnsureCapacity(pDestBlock, rows); if (code != TSDB_CODE_SUCCESS) { return code; } - ASSERT(taosArrayGetSize(pSrcBlock->pDataBlock) >= 3); - SColumnInfoData* pStartTsCol = taosArrayGet(pSrcBlock->pDataBlock, START_TS_COLUMN_INDEX); - TSKEY* startData = (TSKEY*)pStartTsCol->pData; - SColumnInfoData* pEndTsCol = taosArrayGet(pSrcBlock->pDataBlock, END_TS_COLUMN_INDEX); - TSKEY* endData = (TSKEY*)pEndTsCol->pData; - SColumnInfoData* pUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); - uint64_t* uidCol = (uint64_t*)pUidCol->pData; - SColumnInfoData* pDestStartCol = taosArrayGet(pDestBlock->pDataBlock, START_TS_COLUMN_INDEX); - SColumnInfoData* pDestEndCol = taosArrayGet(pDestBlock->pDataBlock, END_TS_COLUMN_INDEX); - SColumnInfoData* pDestUidCol = taosArrayGet(pDestBlock->pDataBlock, UID_COLUMN_INDEX); - SColumnInfoData* pDestGpCol = taosArrayGet(pDestBlock->pDataBlock, GROUPID_COLUMN_INDEX); - SColumnInfoData* pDestCalStartTsCol = taosArrayGet(pDestBlock->pDataBlock, CALCULATE_START_TS_COLUMN_INDEX); - SColumnInfoData* pDestCalEndTsCol = taosArrayGet(pDestBlock->pDataBlock, CALCULATE_END_TS_COLUMN_INDEX); - int32_t dummy = 0; - int64_t version = pSrcBlock->info.version - 1; + SColumnInfoData* pSrcStartTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, START_TS_COLUMN_INDEX); + SColumnInfoData* pSrcEndTsCol = (SColumnInfoData*)taosArrayGet(pSrcBlock->pDataBlock, END_TS_COLUMN_INDEX); + SColumnInfoData* pSrcUidCol = taosArrayGet(pSrcBlock->pDataBlock, UID_COLUMN_INDEX); + uint64_t* srcUidData = (uint64_t*)pSrcUidCol->pData; + SColumnInfoData* pSrcGpCol = taosArrayGet(pSrcBlock->pDataBlock, GROUPID_COLUMN_INDEX); + uint64_t* srcGp = (uint64_t*)pSrcGpCol->pData; + ASSERT(pSrcStartTsCol->info.type == TSDB_DATA_TYPE_TIMESTAMP); + TSKEY* srcStartTsCol = (TSKEY*)pSrcStartTsCol->pData; + TSKEY* srcEndTsCol = (TSKEY*)pSrcEndTsCol->pData; + int64_t version = pSrcBlock->info.version - 1; for (int32_t i = 0; i < pSrcBlock->info.rows; i++) { - uint64_t groupId = getGroupIdByData(pInfo, uidCol[i], startData[i], version); - colDataAppend(pDestStartCol, i, (const char*)(startData + i), false); - colDataAppend(pDestEndCol, i, (const char*)(endData + i), false); - colDataAppendNULL(pDestUidCol, i); - colDataAppend(pDestGpCol, i, (const char*)&groupId, false); - colDataAppendNULL(pDestCalStartTsCol, i); - colDataAppendNULL(pDestCalEndTsCol, i); - pDestBlock->info.rows++; + uint64_t srcUid = srcUidData[i]; + uint64_t groupId = srcGp[i]; + if (groupId == 0) { + groupId = getGroupIdByData(pInfo, srcUid, srcStartTsCol[i], version); + } + appendOneRowToStreamSpecialBlock(pDestBlock, srcStartTsCol + i, srcEndTsCol + i, srcUidData + i, &groupId, NULL); } return TSDB_CODE_SUCCESS; } @@ -1413,6 +1463,8 @@ static int32_t generateScanRange(SStreamScanInfo* pInfo, SSDataBlock* pSrcBlock, code = generateIntervalScanRange(pInfo, pSrcBlock, pDestBlock); } else if (isSessionWindow(pInfo) || isStateWindow(pInfo)) { code = generateSessionScanRange(pInfo, pSrcBlock, pDestBlock); + } else { + code = generateDeleteResultBlock(pInfo, pSrcBlock, pDestBlock); } pDestBlock->info.type = STREAM_CLEAR; pDestBlock->info.version = pSrcBlock->info.version; @@ -1549,12 +1601,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock pInfo->pRes->info.type = STREAM_NORMAL; pInfo->pRes->info.version = pBlock->info.version; - uint64_t* groupIdPre = taosHashGet(pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupIdPre) { - pInfo->pRes->info.groupId = *groupIdPre; - } else { - pInfo->pRes->info.groupId = 0; - } + pInfo->pRes->info.groupId = getTableGroupId(pTaskInfo->pTableInfoList, pBlock->info.uid); // todo extract method for (int32_t i = 0; i < taosArrayGetSize(pInfo->matchInfo.pList); ++i) { @@ -1699,7 +1746,7 @@ static SSDataBlock* doQueueScan(SOperatorInfo* pOperator) { } } #if 0 - } else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) { + } else if (pTaskInfo->streamInfo.prepareStatus.type == TMQ_OFFSET__SNAPSHOT_DATA) { SSDataBlock* pResult = doTableScan(pInfo->pTableScanOp); if (pResult && pResult->info.rows > 0) { qDebug("stream scan tsdb return %d rows", pResult->info.rows); @@ -1850,7 +1897,7 @@ static SSDataBlock* doStreamScan(SOperatorInfo* pOperator) { #endif size_t total = taosArrayGetSize(pInfo->pBlockLists); - // TODO: refactor +// TODO: refactor FETCH_NEXT_BLOCK: if (pInfo->blockType == STREAM_INPUT__DATA_BLOCK) { if (pInfo->validBlockIndex >= total) { @@ -2070,12 +2117,13 @@ FETCH_NEXT_BLOCK: } } -static SArray* extractTableIdList(const STableListInfo* pTableGroupInfo) { +static SArray* extractTableIdList(const STableListInfo* pTableListInfo) { SArray* tableIdList = taosArrayInit(4, sizeof(uint64_t)); // Transfer the Array of STableKeyInfo into uid list. - for (int32_t i = 0; i < taosArrayGetSize(pTableGroupInfo->pTableList); ++i) { - STableKeyInfo* pkeyInfo = taosArrayGet(pTableGroupInfo->pTableList, i); + size_t size = tableListGetSize(pTableListInfo); + for (int32_t i = 0; i < size; ++i) { + STableKeyInfo* pkeyInfo = tableListGetInfo(pTableListInfo, i); taosArrayPush(tableIdList, &pkeyInfo->uid); } @@ -2287,6 +2335,9 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys int32_t numOfCols = 0; int32_t code = extractColMatchInfo(pScanPhyNode->pScanCols, pDescNode, &numOfCols, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } int32_t numOfOutput = taosArrayGetSize(pInfo->matchInfo.pList); SArray* pColIds = taosArrayInit(numOfOutput, sizeof(int16_t)); @@ -2339,12 +2390,16 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys pTSInfo->cond.endVersion = pHandle->version; } - SArray* tableList = taosArrayGetP(pTaskInfo->tableqinfoList.pGroupList, 0); + STableKeyInfo* pList = NULL; + int32_t num = 0; + tableListGetGroupList(pTaskInfo->pTableInfoList, 0, &pList, &num); + if (pHandle->initTableReader) { pTSInfo->scanMode = TABLE_SCAN__TABLE_ORDER; pTSInfo->dataReader = NULL; - if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, tableList, &pTSInfo->dataReader, NULL) < 0) { + if (tsdbReaderOpen(pHandle->vnode, &pTSInfo->cond, pList, num, &pTSInfo->dataReader, NULL) < 0) { terrno = TSDB_CODE_OUT_OF_MEMORY; + destroyTableScanOperatorInfo(pTableScanOp); goto _error; } } @@ -2370,8 +2425,8 @@ SOperatorInfo* createStreamScanOperatorInfo(SReadHandle* pHandle, STableScanPhys // set the extract column id to streamHandle tqReaderSetColIdList(pInfo->tqReader, pColIds); - SArray* tableIdList = extractTableIdList(&pTaskInfo->tableqinfoList); - int32_t code = tqReaderSetTbUidList(pInfo->tqReader, tableIdList); + SArray* tableIdList = extractTableIdList(pTaskInfo->pTableInfoList); + code = tqReaderSetTbUidList(pInfo->tqReader, tableIdList); if (code != 0) { taosArrayDestroy(tableIdList); goto _error; @@ -3320,6 +3375,7 @@ static int32_t optSysMergeRslt(SArray* mRslt, SArray* rslt) { optSysIntersection(mRslt, rslt); return 0; } + static int32_t optSysSpecialColumn(SNode* cond) { SOperatorNode* pOper = (SOperatorNode*)cond; SColumnNode* pCol = (SColumnNode*)pOper->pLeft; @@ -3330,6 +3386,7 @@ static int32_t optSysSpecialColumn(SNode* cond) { } return 0; } + static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { int ret = -1; if (nodeType(cond) == QUERY_NODE_OPERATOR) { @@ -3363,6 +3420,7 @@ static int32_t optSysTabFilte(void* arg, SNode* cond, SArray* result) { if (cell == NULL) break; SArray* aRslt = taosArrayInit(16, sizeof(int64_t)); + ret = optSysTabFilteImpl(arg, cell->pNode, aRslt); if (ret == 0) { // has index @@ -3443,7 +3501,7 @@ static SSDataBlock* sysTableBuildUserTablesByUids(SOperatorInfo* pOperator) { SMetaReader mr = {0}; metaReaderInit(&mr, pInfo->readHandle.meta, 0); - int32_t ret = metaGetTableEntryByUid(&mr, *uid); + ret = metaGetTableEntryByUid(&mr, *uid); if (ret < 0) { metaReaderClear(&mr); continue; @@ -4066,7 +4124,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { SSDataBlock* pRes = pInfo->pRes; blockDataCleanup(pRes); - int32_t size = taosArrayGetSize(pInfo->pTableList->pTableList); + int32_t size = tableListGetSize(pTaskInfo->pTableInfoList); if (size == 0) { setTaskStatus(pTaskInfo, TASK_COMPLETED); return NULL; @@ -4078,7 +4136,7 @@ static SSDataBlock* doTagScan(SOperatorInfo* pOperator) { metaReaderInit(&mr, pInfo->readHandle.meta, 0); while (pInfo->curPos < size && count < pOperator->resultInfo.capacity) { - STableKeyInfo* item = taosArrayGet(pInfo->pTableList->pTableList, pInfo->curPos); + STableKeyInfo* item = tableListGetInfo(pInfo->pTableList, pInfo->curPos); int32_t code = metaGetTableEntryByUid(&mr, item->uid); tDecoderClear(&mr.coder); if (code != TSDB_CODE_SUCCESS) { @@ -4157,6 +4215,9 @@ SOperatorInfo* createTagScanOperatorInfo(SReadHandle* pReadHandle, STagScanPhysi SExprInfo* pExprInfo = createExprInfo(pPhyNode->pScanPseudoCols, NULL, &numOfExprs); int32_t code = extractColMatchInfo(pPhyNode->pScanPseudoCols, pDescNode, &num, COL_MATCH_FROM_COL_ID, &pInfo->matchInfo); + if (code != TSDB_CODE_SUCCESS) { + goto _error; + } code = initExprSupp(&pOperator->exprSupp, pExprInfo, numOfExprs); if (code != TSDB_CODE_SUCCESS) { @@ -4190,53 +4251,13 @@ _error: return NULL; } -int32_t createScanTableListInfo(SScanPhysiNode* pScanNode, SNodeList* pGroupTags, bool groupSort, SReadHandle* pHandle, - STableListInfo* pTableListInfo, SNode* pTagCond, SNode* pTagIndexCond, - const char* idStr) { - int64_t st = taosGetTimestampUs(); - - if (pHandle == NULL) { - qError("invalid handle, in creating operator tree, %s", idStr); - return TSDB_CODE_INVALID_PARA; - } - - int32_t code = getTableList(pHandle->meta, pHandle->vnode, pScanNode, pTagCond, pTagIndexCond, pTableListInfo); - if (code != TSDB_CODE_SUCCESS) { - qError("failed to getTableList, code: %s", tstrerror(code)); - return code; - } - - int64_t st1 = taosGetTimestampUs(); - qDebug("generate queried table list completed, elapsed time:%.2f ms %s", (st1 - st) / 1000.0, idStr); - - if (taosArrayGetSize(pTableListInfo->pTableList) == 0) { - qDebug("no table qualified for query, %s" PRIx64, idStr); - return TSDB_CODE_SUCCESS; - } - - pTableListInfo->needSortTableByGroupId = groupSort; - code = generateGroupIdMap(pTableListInfo, pHandle, pGroupTags); - if (code != TSDB_CODE_SUCCESS) { - return code; - } - - int64_t st2 = taosGetTimestampUs(); - qDebug("generate group id map completed, elapsed time:%.2f ms %s", (st2 - st1) / 1000.0, idStr); - - return TSDB_CODE_SUCCESS; -} - int32_t createMultipleDataReaders(SQueryTableDataCond* pQueryCond, SReadHandle* pHandle, STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, SArray* arrayReader, const char* idstr) { for (int32_t i = tableStartIdx; i <= tableEndIdx; ++i) { - SArray* subTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(subTableList, taosArrayGet(pTableListInfo->pTableList, i)); - - STsdbReader* pReader = NULL; - tsdbReaderOpen(pHandle->vnode, pQueryCond, subTableList, &pReader, idstr); + STableKeyInfo* pList = tableListGetInfo(pTableListInfo, i); + STsdbReader* pReader = NULL; + tsdbReaderOpen(pHandle->vnode, pQueryCond, pList, 1, &pReader, idstr); taosArrayPush(arrayReader, &pReader); - - taosArrayDestroy(subTableList); } return TSDB_CODE_SUCCESS; @@ -4246,15 +4267,14 @@ int32_t createMultipleDataReaders2(SQueryTableDataCond* pQueryCond, SReadHandle* STableListInfo* pTableListInfo, int32_t tableStartIdx, int32_t tableEndIdx, STsdbReader** ppReader, const char* idstr) { STsdbReader* pReader = NULL; - SArray* subTableList = taosArrayInit(1, sizeof(STableKeyInfo)); - for (int32_t i = tableStartIdx; i <= tableEndIdx; ++i) { - taosArrayPush(subTableList, taosArrayGet(pTableListInfo->pTableList, i)); - } - int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, subTableList, &pReader, idstr); + void* pStart = tableListGetInfo(pTableListInfo, tableStartIdx); + int32_t num = tableEndIdx - tableStartIdx + 1; + + int32_t code = tsdbReaderOpen(pHandle->vnode, pQueryCond, pStart, num, &pReader, idstr); if (code != 0) { - taosArrayDestroy(subTableList); return code; } + *ppReader = pReader; return TSDB_CODE_SUCCESS; } @@ -4409,8 +4429,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc bool allColumnsHaveAgg = true; SColumnDataAgg** pColAgg = NULL; - STsdbReader* reader = taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); - tsdbRetrieveDatablockSMA(reader, &pColAgg, &allColumnsHaveAgg); + // STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); if (allColumnsHaveAgg == true) { int32_t numOfCols = taosArrayGetSize(pBlock->pDataBlock); @@ -4450,7 +4469,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc pCost->totalCheckedRows += pBlock->info.rows; pCost->loadBlocks += 1; - STsdbReader* reader = pTableScanInfo->pReader; // taosArrayGetP(pTableScanInfo->dataReaders, readerIdx); + STsdbReader* reader = pTableScanInfo->pReader; SArray* pCols = tsdbRetrieveDataBlock(reader, NULL); if (pCols == NULL) { return terrno; @@ -4489,7 +4508,7 @@ static int32_t loadDataBlockFromOneTable(SOperatorInfo* pOperator, STableMergeSc typedef struct STableMergeScanSortSourceParam { SOperatorInfo* pOperator; int32_t readerIdx; - int64_t uid; + uint64_t uid; SSDataBlock* inputBlock; } STableMergeScanSortSourceParam; @@ -4508,11 +4527,9 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { int64_t st = taosGetTimestampUs(); - SArray* subTable = taosArrayInit(1, sizeof(STableKeyInfo)); - taosArrayPush(subTable, taosArrayGet(pInfo->tableListInfo->pTableList, readIdx + pInfo->tableStartIndex)); + void* p = tableListGetInfo(pInfo->tableListInfo, readIdx + pInfo->tableStartIndex); SReadHandle* pHandle = &pInfo->readHandle; - tsdbReaderOpen(pHandle->vnode, pQueryCond, subTable, &pInfo->pReader, GET_TASKID(pTaskInfo)); - taosArrayDestroy(subTable); + tsdbReaderOpen(pHandle->vnode, pQueryCond, p, 1, &pInfo->pReader, GET_TASKID(pTaskInfo)); STsdbReader* reader = pInfo->pReader; while (tsdbNextDataBlock(reader)) { @@ -4536,7 +4553,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { pBlock->info.window = binfo.window; pBlock->info.rows = binfo.rows; - if (tsdbIsAscendingOrder(pInfo->pReader)) { + if (pQueryCond->order == TSDB_ORDER_ASC) { pQueryCond->twindows.skey = pBlock->info.window.ekey + 1; } else { pQueryCond->twindows.ekey = pBlock->info.window.skey - 1; @@ -4553,10 +4570,7 @@ static SSDataBlock* getTableDataBlockTemp(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows += pBlock->info.rows; // pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4613,11 +4627,7 @@ static SSDataBlock* getTableDataBlock2(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4661,6 +4671,7 @@ static SSDataBlock* getTableDataBlock(void* param) { uint32_t status = 0; int32_t code = loadDataBlockFromOneTable(pOperator, pTableScanInfo, readerIdx, pBlock, &status); + // int32_t code = loadDataBlockOnDemand(pOperator->pRuntimeEnv, pTableScanInfo, pBlock, &status); if (code != TSDB_CODE_SUCCESS) { T_LONG_JMP(pOperator->pTaskInfo->env, code); } @@ -4670,11 +4681,7 @@ static SSDataBlock* getTableDataBlock(void* param) { continue; } - uint64_t* groupId = taosHashGet(pOperator->pTaskInfo->tableqinfoList.map, &pBlock->info.uid, sizeof(int64_t)); - if (groupId) { - pBlock->info.groupId = *groupId; - } - + pBlock->info.groupId = getTableGroupId(pOperator->pTaskInfo->pTableInfoList, pBlock->info.uid); pOperator->resultInfo.totalRows = pTableScanInfo->readRecorder.totalRows; pTableScanInfo->readRecorder.elapsedTime += (taosGetTimestampUs() - st) / 1000.0; @@ -4711,15 +4718,16 @@ int32_t dumpSQueryTableCond(const SQueryTableDataCond* src, SQueryTableDataCond* } return 0; } + int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { STableMergeScanInfo* pInfo = pOperator->info; SExecTaskInfo* pTaskInfo = pOperator->pTaskInfo; { - size_t tableListSize = taosArrayGetSize(pInfo->tableListInfo->pTableList); + size_t numOfTables = tableListGetSize(pInfo->tableListInfo); int32_t i = pInfo->tableStartIndex + 1; - for (; i < tableListSize; ++i) { - STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i); + for (; i < numOfTables; ++i) { + STableKeyInfo* tableKeyInfo = tableListGetInfo(pInfo->tableListInfo, i); if (tableKeyInfo->groupId != pInfo->groupId) { break; } @@ -4730,10 +4738,8 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { int32_t tableStartIdx = pInfo->tableStartIndex; int32_t tableEndIdx = pInfo->tableEndIndex; - STableListInfo* tableListInfo = pInfo->tableListInfo; - - // pInfo->dataReaders = taosArrayInit(64, POINTER_BYTES); pInfo->pReader = NULL; + // todo the total available buffer should be determined by total capacity of buffer of this task. // the additional one is reserved for merge result pInfo->sortBufSize = pInfo->bufPageSize * (tableEndIdx - tableStartIdx + 1 + 1); @@ -4748,8 +4754,6 @@ int32_t startGroupTableMergeScan(SOperatorInfo* pOperator) { pInfo->queryConds = taosArrayInit(numOfTable, sizeof(SQueryTableDataCond)); for (int32_t i = 0; i < numOfTable; ++i) { - STableKeyInfo* tableKeyInfo = taosArrayGet(pInfo->tableListInfo->pTableList, i + tableStartIdx); - STableMergeScanSortSourceParam param = {0}; param.readerIdx = i; param.pOperator = pOperator; @@ -4848,7 +4852,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { T_LONG_JMP(pTaskInfo->env, code); } - size_t tableListSize = taosArrayGetSize(pInfo->tableListInfo->pTableList); + size_t tableListSize = tableListGetSize(pInfo->tableListInfo); if (!pInfo->hasGroupId) { pInfo->hasGroupId = true; @@ -4857,7 +4861,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { return NULL; } pInfo->tableStartIndex = 0; - pInfo->groupId = ((STableKeyInfo*)taosArrayGet(pInfo->tableListInfo->pTableList, pInfo->tableStartIndex))->groupId; + pInfo->groupId = ((STableKeyInfo*)tableListGetInfo(pInfo->tableListInfo, pInfo->tableStartIndex))->groupId; startGroupTableMergeScan(pOperator); } @@ -4876,8 +4880,7 @@ SSDataBlock* doTableMergeScan(SOperatorInfo* pOperator) { break; } pInfo->tableStartIndex = pInfo->tableEndIndex + 1; - pInfo->groupId = - ((STableKeyInfo*)taosArrayGet(pInfo->tableListInfo->pTableList, pInfo->tableStartIndex))->groupId; + pInfo->groupId = tableListGetInfo(pInfo->tableListInfo, pInfo->tableStartIndex)->groupId; startGroupTableMergeScan(pOperator); } } @@ -4892,9 +4895,10 @@ void destroyTableMergeScanOperatorInfo(void* param) { int32_t numOfTable = taosArrayGetSize(pTableScanInfo->queryConds); for (int32_t i = 0; i < numOfTable; i++) { - STableMergeScanSortSourceParam* param = taosArrayGet(pTableScanInfo->sortSourceParams, i); - blockDataDestroy(param->inputBlock); + STableMergeScanSortSourceParam* p = taosArrayGet(pTableScanInfo->sortSourceParams, i); + blockDataDestroy(p->inputBlock); } + taosArrayDestroy(pTableScanInfo->sortSourceParams); tsdbReaderClose(pTableScanInfo->pReader); @@ -4959,10 +4963,6 @@ SOperatorInfo* createTableMergeScanOperatorInfo(STableScanPhysiNode* pTableScanN goto _error; } - if (pTableScanNode->pGroupTags) { - taosArraySort(pTableListInfo->pTableList, compareTableKeyInfoByGid); - } - SDataBlockDescNode* pDescNode = pTableScanNode->scan.node.pOutputDataBlockDesc; int32_t numOfCols = 0; diff --git a/source/libs/executor/src/timewindowoperator.c b/source/libs/executor/src/timewindowoperator.c index 4da5bdd40e..6be9a0402f 100644 --- a/source/libs/executor/src/timewindowoperator.c +++ b/source/libs/executor/src/timewindowoperator.c @@ -1687,7 +1687,9 @@ void initIntervalDownStream(SOperatorInfo* downstream, uint16_t type, SAggSuppor SStreamScanInfo* pScanInfo = downstream->info; pScanInfo->windowSup.parentType = type; pScanInfo->windowSup.pIntervalAggSup = pSup; - pScanInfo->pUpdateInfo = updateInfoInitP(pInterval, pTwSup->waterMark); + if (!pScanInfo->pUpdateInfo) { + pScanInfo->pUpdateInfo = updateInfoInitP(pInterval, pTwSup->waterMark); + } pScanInfo->interval = *pInterval; pScanInfo->twAggSup = *pTwSup; } @@ -5385,6 +5387,7 @@ static SSDataBlock* doStreamIntervalAgg(SOperatorInfo* pOperator) { maxTs = TMAX(maxTs, pBlock->info.window.ekey); minTs = TMIN(minTs, pBlock->info.window.skey); + doStreamIntervalAggImpl(pOperator, pBlock, pBlock->info.groupId, pUpdatedMap); } pInfo->twAggSup.maxTs = TMAX(pInfo->twAggSup.maxTs, maxTs); diff --git a/source/libs/function/src/tudf.c b/source/libs/function/src/tudf.c index ea59e92e98..459ee583a4 100644 --- a/source/libs/function/src/tudf.c +++ b/source/libs/function/src/tudf.c @@ -117,10 +117,29 @@ static int32_t udfSpawnUdfd(SUdfdData *pData) { char dnodeIdEnvItem[32] = {0}; char thrdPoolSizeEnvItem[32] = {0}; snprintf(dnodeIdEnvItem, 32, "%s=%d", "DNODE_ID", pData->dnodeId); + float numCpuCores = 4; taosGetCpuCores(&numCpuCores); snprintf(thrdPoolSizeEnvItem, 32, "%s=%d", "UV_THREADPOOL_SIZE", (int)numCpuCores * 2); - char *envUdfd[] = {dnodeIdEnvItem, thrdPoolSizeEnvItem, NULL}; + + char pathTaosdLdLib[512] = {0}; + size_t taosdLdLibPathLen = sizeof(pathTaosdLdLib); + uv_os_getenv("LD_LIBRARY_PATH", pathTaosdLdLib, &taosdLdLibPathLen); + + char udfdPathLdLib[1024] = {0}; + size_t udfdLdLibPathLen = strlen(tsUdfdLdLibPath); + strncpy(udfdPathLdLib, tsUdfdLdLibPath, udfdLdLibPathLen); + udfdPathLdLib[udfdLdLibPathLen] = ':'; + strncpy(udfdPathLdLib + udfdLdLibPathLen + 1, pathTaosdLdLib, sizeof(udfdPathLdLib) - udfdLdLibPathLen); + if (udfdLdLibPathLen + taosdLdLibPathLen < 1024) { + fnInfo("udfd LD_LIBRARY_PATH: %s", udfdPathLdLib); + } else { + fnError("can not set correct udfd LD_LIBRARY_PATH"); + } + char ldLibPathEnvItem[1024 + 32] = {0}; + snprintf(ldLibPathEnvItem, 1024 + 32, "%s=%s", "LD_LIBRARY_PATH", udfdPathLdLib); + + char *envUdfd[] = {dnodeIdEnvItem, thrdPoolSizeEnvItem, ldLibPathEnvItem, NULL}; options.env = envUdfd; int err = uv_spawn(&pData->loop, &pData->process, &options); diff --git a/source/libs/index/src/indexTfile.c b/source/libs/index/src/indexTfile.c index 4fdf6d9e57..e002ff9c32 100644 --- a/source/libs/index/src/indexTfile.c +++ b/source/libs/index/src/indexTfile.c @@ -617,8 +617,6 @@ int tfileWriterPut(TFileWriter* tw, void* data, bool order) { indexError("failed to write data: %s, offset: %d len: %d", v->colVal, v->offset, (int)taosArrayGetSize(v->tableId)); } else { - indexInfo("success to write data: %s, offset: %d len: %d", v->colVal, v->offset, - (int)taosArrayGetSize(v->tableId)); } } fstBuilderDestroy(tw->fb); diff --git a/source/libs/parser/inc/parAst.h b/source/libs/parser/inc/parAst.h index 09d1a5e772..86940a9d7a 100644 --- a/source/libs/parser/inc/parAst.h +++ b/source/libs/parser/inc/parAst.h @@ -182,7 +182,7 @@ SNode* createCreateUserStmt(SAstCreateContext* pCxt, SToken* pUserName, const ST SNode* createAlterUserStmt(SAstCreateContext* pCxt, SToken* pUserName, int8_t alterType, const SToken* pVal); SNode* createDropUserStmt(SAstCreateContext* pCxt, SToken* pUserName); SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const SToken* pPort); -SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode); +SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, bool force); SNode* createAlterDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, const SToken* pConfig, const SToken* pValue); SNode* createCreateIndexStmt(SAstCreateContext* pCxt, EIndexType type, bool ignoreExists, SNode* pIndexName, SNode* pRealTable, SNodeList* pCols, SNode* pOptions); diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index 00e40cfc50..b143f1624e 100644 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -120,8 +120,8 @@ priv_level(A) ::= db_name(B) NK_DOT NK_STAR. /************************************************ create/drop/alter dnode *********************************************/ cmd ::= CREATE DNODE dnode_endpoint(A). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, NULL); } cmd ::= CREATE DNODE dnode_endpoint(A) PORT NK_INTEGER(B). { pCxt->pRootNode = createCreateDnodeStmt(pCxt, &A, &B); } -cmd ::= DROP DNODE NK_INTEGER(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); } -cmd ::= DROP DNODE dnode_endpoint(A). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A); } +cmd ::= DROP DNODE NK_INTEGER(A) force_opt(B). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B); } +cmd ::= DROP DNODE dnode_endpoint(A) force_opt(B). { pCxt->pRootNode = createDropDnodeStmt(pCxt, &A, B); } cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, NULL); } cmd ::= ALTER DNODE NK_INTEGER(A) NK_STRING(B) NK_STRING(C). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &A, &B, &C); } cmd ::= ALTER ALL DNODES NK_STRING(A). { pCxt->pRootNode = createAlterDnodeStmt(pCxt, NULL, &A, NULL); } @@ -133,6 +133,11 @@ dnode_endpoint(A) ::= NK_STRING(B). dnode_endpoint(A) ::= NK_ID(B). { A = B; } dnode_endpoint(A) ::= NK_IPTOKEN(B). { A = B; } +%type force_opt { bool } +%destructor force_opt { } +force_opt(A) ::= . { A = false; } +force_opt(A) ::= FORCE. { A = true; } + /************************************************ alter local *********************************************************/ cmd ::= ALTER LOCAL NK_STRING(A). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, NULL); } cmd ::= ALTER LOCAL NK_STRING(A) NK_STRING(B). { pCxt->pRootNode = createAlterLocalStmt(pCxt, &A, &B); } diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c index df8e8554a7..49685112a9 100644 --- a/source/libs/parser/src/parAstCreater.c +++ b/source/libs/parser/src/parAstCreater.c @@ -1457,7 +1457,7 @@ SNode* createCreateDnodeStmt(SAstCreateContext* pCxt, const SToken* pFqdn, const return (SNode*)pStmt; } -SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode) { +SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode, bool force) { CHECK_PARSER_STATUS(pCxt); SDropDnodeStmt* pStmt = (SDropDnodeStmt*)nodesMakeNode(QUERY_NODE_DROP_DNODE_STMT); CHECK_OUT_OF_MEM(pStmt); @@ -1469,6 +1469,7 @@ SNode* createDropDnodeStmt(SAstCreateContext* pCxt, const SToken* pDnode) { return NULL; } } + pStmt->force = force; return (SNode*)pStmt; } diff --git a/source/libs/parser/src/parTokenizer.c b/source/libs/parser/src/parTokenizer.c index 82a4e8000b..88a1d39ff2 100644 --- a/source/libs/parser/src/parTokenizer.c +++ b/source/libs/parser/src/parTokenizer.c @@ -97,6 +97,7 @@ static SKeyword keywordTable[] = { {"FLOAT", TK_FLOAT}, {"FLUSH", TK_FLUSH}, {"FROM", TK_FROM}, + {"FORCE", TK_FORCE}, {"FUNCTION", TK_FUNCTION}, {"FUNCTIONS", TK_FUNCTIONS}, {"GRANT", TK_GRANT}, diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 3f9fe264c2..abdc8531eb 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -674,6 +674,10 @@ static bool isSelectFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsSelectFunc(((SFunctionNode*)pNode)->funcId)); } +static bool isWindowPseudoColumnFunc(const SNode* pNode) { + return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsWindowPseudoColumnFunc(((SFunctionNode*)pNode)->funcId)); +} + static bool isTimelineFunc(const SNode* pNode) { return (QUERY_NODE_FUNCTION == nodeType(pNode) && fmIsTimelineFunc(((SFunctionNode*)pNode)->funcId)); } @@ -1264,10 +1268,7 @@ static EDealRes translateOperator(STranslateContext* pCxt, SOperatorNode* pOp) { } static EDealRes haveVectorFunction(SNode* pNode, void* pContext) { - if (isAggFunc(pNode)) { - *((bool*)pContext) = true; - return DEAL_RES_END; - } else if (isIndefiniteRowsFunc(pNode)) { + if (isAggFunc(pNode) || isIndefiniteRowsFunc(pNode) || isWindowPseudoColumnFunc(pNode)) { *((bool*)pContext) = true; return DEAL_RES_END; } @@ -4995,6 +4996,7 @@ static int32_t translateDropDnode(STranslateContext* pCxt, SDropDnodeStmt* pStmt dropReq.dnodeId = pStmt->dnodeId; strcpy(dropReq.fqdn, pStmt->fqdn); dropReq.port = pStmt->port; + dropReq.force = pStmt->force; return buildCmdMsg(pCxt, TDMT_MND_DROP_DNODE, (FSerializeFunc)tSerializeSDropDnodeReq, &dropReq); } diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c index 790bb0664c..292060515c 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 450 +#define YYNOCODE 452 #define YYACTIONTYPE unsigned short int #define ParseTOKENTYPE SToken typedef union { int yyinit; ParseTOKENTYPE yy0; - int64_t yy9; - SToken yy29; - EOrder yy38; - bool yy137; - SAlterOption yy245; - SNodeList* yy424; - int32_t yy460; - SDataType yy484; - int8_t yy503; - EFillMode yy594; - EJoinType yy612; - EOperatorType yy740; - ENullOrder yy757; - SNode* yy812; + EOperatorType yy4; + int64_t yy37; + SAlterOption yy101; + SNode* yy232; + SDataType yy264; + SNodeList* yy288; + SToken yy481; + int8_t yy607; + EFillMode yy614; + int32_t yy692; + EJoinType yy700; + bool yy777; + ENullOrder yy833; + EOrder yy866; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -139,17 +139,17 @@ typedef union { #define ParseCTX_FETCH #define ParseCTX_STORE #define YYFALLBACK 1 -#define YYNSTATE 699 -#define YYNRULE 526 -#define YYNTOKEN 318 -#define YY_MAX_SHIFT 698 -#define YY_MIN_SHIFTREDUCE 1033 -#define YY_MAX_SHIFTREDUCE 1558 -#define YY_ERROR_ACTION 1559 -#define YY_ACCEPT_ACTION 1560 -#define YY_NO_ACTION 1561 -#define YY_MIN_REDUCE 1562 -#define YY_MAX_REDUCE 2087 +#define YYNSTATE 701 +#define YYNRULE 528 +#define YYNTOKEN 319 +#define YY_MAX_SHIFT 700 +#define YY_MIN_SHIFTREDUCE 1036 +#define YY_MAX_SHIFTREDUCE 1563 +#define YY_ERROR_ACTION 1564 +#define YY_ACCEPT_ACTION 1565 +#define YY_NO_ACTION 1566 +#define YY_MIN_REDUCE 1567 +#define YY_MAX_REDUCE 2094 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -216,753 +216,861 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2801) +#define YY_ACTTAB_COUNT (3333) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 1889, 34, 268, 1889, 1702, 1066, 448, 1903, 449, 1597, - /* 10 */ 1704, 1885, 44, 42, 1885, 456, 396, 449, 1597, 1817, - /* 20 */ 351, 1885, 1339, 43, 41, 40, 39, 38, 1365, 40, - /* 30 */ 39, 38, 591, 1419, 154, 1337, 1921, 1881, 1887, 339, - /* 40 */ 1881, 1887, 345, 1716, 592, 1070, 1071, 1881, 1887, 1871, - /* 50 */ 598, 604, 30, 598, 311, 157, 1414, 1574, 37, 36, - /* 60 */ 598, 17, 43, 41, 40, 39, 38, 1903, 1345, 44, - /* 70 */ 42, 1489, 1901, 1364, 1759, 1760, 1937, 351, 576, 1339, - /* 80 */ 97, 1902, 1904, 608, 1906, 1907, 603, 1083, 598, 1082, - /* 90 */ 1419, 77, 1337, 168, 1, 1990, 1921, 1493, 58, 344, - /* 100 */ 1986, 77, 484, 1364, 605, 588, 46, 2058, 591, 1871, - /* 110 */ 2062, 604, 173, 1414, 1709, 125, 695, 1084, 17, 536, - /* 120 */ 2016, 550, 575, 171, 1708, 1345, 336, 2059, 577, 1814, - /* 130 */ 1421, 1422, 606, 52, 132, 591, 1937, 1563, 1232, 1233, - /* 140 */ 98, 350, 1904, 608, 1906, 1907, 603, 58, 598, 356, - /* 150 */ 1713, 1, 1758, 1760, 1083, 1990, 1082, 1585, 110, 315, - /* 160 */ 1986, 109, 108, 107, 106, 105, 104, 103, 102, 101, - /* 170 */ 2058, 130, 465, 695, 58, 1340, 1365, 1338, 389, 433, - /* 180 */ 388, 337, 46, 1584, 1084, 575, 171, 1421, 1422, 154, - /* 190 */ 2059, 577, 590, 169, 1998, 1999, 1364, 2003, 1715, 1871, - /* 200 */ 1343, 1344, 1583, 1394, 1395, 1397, 1398, 1399, 1400, 1401, - /* 210 */ 1402, 1403, 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, - /* 220 */ 1418, 1420, 1423, 3, 47, 1871, 1691, 550, 1560, 502, - /* 230 */ 501, 500, 1340, 94, 1338, 186, 185, 126, 496, 120, - /* 240 */ 641, 174, 495, 494, 1871, 174, 486, 127, 493, 499, - /* 250 */ 220, 1921, 228, 174, 492, 1705, 1713, 1343, 1344, 570, - /* 260 */ 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - /* 270 */ 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, - /* 280 */ 3, 44, 42, 698, 1807, 1890, 465, 1396, 366, 351, - /* 290 */ 58, 1339, 81, 233, 174, 179, 1885, 275, 569, 1903, - /* 300 */ 588, 11, 1419, 156, 1337, 532, 79, 313, 1666, 1582, - /* 310 */ 540, 165, 538, 1366, 1581, 588, 688, 684, 680, 676, - /* 320 */ 273, 174, 1881, 1887, 1765, 1414, 1765, 566, 1921, 132, - /* 330 */ 17, 338, 516, 355, 2058, 598, 605, 1345, 44, 42, - /* 340 */ 1763, 1871, 1763, 604, 132, 514, 351, 512, 1339, 2064, - /* 350 */ 171, 1871, 1316, 1317, 2059, 577, 1871, 95, 1150, 1419, - /* 360 */ 241, 1337, 385, 1, 606, 579, 121, 550, 1937, 2005, - /* 370 */ 583, 174, 295, 350, 1904, 608, 1906, 1907, 603, 120, - /* 380 */ 598, 130, 1414, 387, 383, 695, 491, 17, 265, 1998, - /* 390 */ 587, 1152, 586, 547, 1345, 2058, 1713, 2002, 1515, 1421, - /* 400 */ 1422, 571, 2058, 170, 1998, 1999, 1363, 2003, 167, 2063, - /* 410 */ 575, 171, 62, 572, 567, 2059, 577, 575, 171, 490, - /* 420 */ 1, 1752, 2059, 577, 110, 230, 633, 109, 108, 107, - /* 430 */ 106, 105, 104, 103, 102, 101, 1562, 174, 2058, 498, - /* 440 */ 497, 489, 695, 1310, 1340, 223, 1338, 1429, 563, 1513, - /* 450 */ 1514, 1516, 1517, 1364, 2062, 267, 1421, 1422, 2059, 2061, - /* 460 */ 119, 118, 117, 116, 115, 114, 113, 112, 111, 1343, - /* 470 */ 1344, 595, 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, - /* 480 */ 1403, 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, - /* 490 */ 1420, 1423, 3, 1450, 11, 11, 1698, 9, 234, 235, - /* 500 */ 453, 1340, 58, 1338, 1627, 1858, 1362, 1190, 630, 629, - /* 510 */ 628, 1194, 627, 1196, 1197, 626, 1199, 623, 1689, 1205, - /* 520 */ 620, 1207, 1208, 617, 614, 1486, 1343, 1344, 327, 1394, - /* 530 */ 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, - /* 540 */ 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, - /* 550 */ 44, 42, 373, 550, 1580, 2063, 313, 1579, 351, 540, - /* 560 */ 1339, 538, 354, 447, 31, 176, 451, 502, 501, 500, - /* 570 */ 154, 1419, 1578, 1337, 1455, 126, 496, 1667, 641, 1715, - /* 580 */ 495, 494, 1713, 1903, 2058, 2005, 493, 499, 328, 584, - /* 590 */ 326, 325, 492, 488, 1414, 1345, 1871, 490, 182, 1871, - /* 600 */ 2062, 552, 1903, 1962, 2059, 2060, 1345, 44, 42, 1424, - /* 610 */ 1440, 550, 1921, 2001, 1871, 351, 653, 1339, 588, 489, - /* 620 */ 605, 550, 1700, 394, 1577, 1871, 357, 604, 1419, 1765, - /* 630 */ 1337, 1921, 8, 395, 154, 74, 320, 1396, 73, 605, - /* 640 */ 1713, 550, 1696, 1715, 1871, 1763, 604, 132, 1901, 174, - /* 650 */ 1713, 1414, 1937, 405, 695, 390, 158, 1902, 1904, 608, - /* 660 */ 1906, 1907, 603, 1345, 598, 1690, 1871, 1901, 1421, 1422, - /* 670 */ 1713, 1937, 532, 550, 576, 97, 1902, 1904, 608, 1906, - /* 680 */ 1907, 603, 2063, 598, 130, 419, 1367, 87, 2078, 8, - /* 690 */ 1990, 666, 664, 455, 344, 1986, 451, 555, 2027, 1366, - /* 700 */ 224, 2058, 1713, 2058, 2024, 599, 172, 1998, 1999, 1706, - /* 710 */ 2003, 695, 554, 1340, 1962, 1338, 2064, 171, 575, 171, - /* 720 */ 1576, 2059, 577, 2059, 577, 1421, 1422, 1573, 37, 36, - /* 730 */ 13, 12, 43, 41, 40, 39, 38, 2005, 1343, 1344, - /* 740 */ 1367, 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, - /* 750 */ 1404, 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, - /* 760 */ 1423, 3, 1871, 1485, 1813, 2000, 306, 1807, 550, 1871, - /* 770 */ 1340, 639, 1338, 221, 1548, 1812, 1743, 306, 180, 174, - /* 780 */ 420, 37, 36, 1364, 1572, 43, 41, 40, 39, 38, - /* 790 */ 145, 144, 636, 635, 634, 1343, 1344, 1713, 1394, 1395, - /* 800 */ 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, 596, - /* 810 */ 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, 44, - /* 820 */ 42, 536, 507, 1807, 1462, 639, 1871, 351, 243, 1339, - /* 830 */ 1571, 1815, 580, 128, 184, 637, 1961, 517, 1756, 227, - /* 840 */ 1419, 267, 1337, 32, 145, 144, 636, 635, 634, 37, - /* 850 */ 36, 219, 1903, 43, 41, 40, 39, 38, 550, 404, - /* 860 */ 1570, 550, 1569, 1414, 632, 510, 550, 1765, 1525, 504, - /* 870 */ 463, 1903, 1871, 464, 218, 1345, 44, 42, 1710, 80, - /* 880 */ 550, 1921, 244, 1764, 351, 638, 1339, 1713, 1756, 605, - /* 890 */ 1713, 7, 137, 527, 1871, 1713, 604, 1419, 1794, 1337, - /* 900 */ 1921, 8, 1871, 654, 1871, 1683, 550, 72, 605, 1713, - /* 910 */ 550, 64, 1892, 1871, 63, 604, 280, 1901, 528, 1743, - /* 920 */ 1414, 1937, 533, 695, 1903, 159, 1902, 1904, 608, 1906, - /* 930 */ 1907, 603, 1345, 598, 1688, 1713, 1901, 1421, 1422, 1713, - /* 940 */ 1937, 1568, 550, 1567, 97, 1902, 1904, 608, 1906, 1907, - /* 950 */ 603, 1575, 598, 1921, 238, 1070, 1071, 2078, 1, 1990, - /* 960 */ 1894, 605, 550, 344, 1986, 2063, 1871, 1396, 604, 2010, - /* 970 */ 1482, 1713, 2030, 2052, 546, 550, 262, 578, 2079, 143, - /* 980 */ 695, 564, 1340, 1871, 1338, 1871, 1348, 548, 483, 1901, - /* 990 */ 1566, 1713, 1565, 1937, 1421, 1422, 397, 159, 1902, 1904, - /* 1000 */ 608, 1906, 1907, 603, 1713, 598, 45, 1343, 1344, 398, - /* 1010 */ 1394, 1395, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, - /* 1020 */ 600, 596, 1412, 1413, 1415, 1416, 1417, 1418, 1420, 1423, - /* 1030 */ 3, 51, 1871, 206, 1871, 48, 4, 50, 531, 1340, - /* 1040 */ 639, 1338, 211, 13, 12, 209, 414, 161, 213, 581, - /* 1050 */ 2080, 212, 482, 478, 474, 470, 205, 1548, 1287, 145, - /* 1060 */ 144, 636, 635, 634, 1343, 1344, 1624, 1394, 1395, 1397, - /* 1070 */ 1398, 1399, 1400, 1401, 1402, 1403, 1404, 600, 596, 1412, - /* 1080 */ 1413, 1415, 1416, 1417, 1418, 1420, 1423, 3, 310, 550, - /* 1090 */ 1362, 1614, 1482, 78, 256, 215, 203, 427, 214, 1922, - /* 1100 */ 438, 549, 37, 36, 1609, 1607, 43, 41, 40, 39, - /* 1110 */ 38, 217, 232, 503, 216, 93, 138, 411, 1713, 439, - /* 1120 */ 1347, 413, 1557, 1558, 362, 90, 505, 508, 1351, 672, - /* 1130 */ 671, 670, 669, 361, 1598, 668, 667, 133, 662, 661, - /* 1140 */ 660, 659, 658, 657, 656, 655, 147, 651, 650, 649, - /* 1150 */ 360, 359, 646, 645, 644, 643, 642, 155, 202, 196, - /* 1160 */ 647, 201, 286, 323, 236, 461, 37, 36, 543, 2020, - /* 1170 */ 43, 41, 40, 39, 38, 400, 284, 66, 1753, 142, - /* 1180 */ 65, 194, 1130, 535, 37, 36, 143, 60, 43, 41, - /* 1190 */ 40, 39, 38, 589, 248, 60, 190, 444, 442, 1903, - /* 1200 */ 532, 26, 45, 437, 2, 648, 432, 431, 430, 429, - /* 1210 */ 426, 425, 424, 423, 422, 418, 417, 416, 415, 324, - /* 1220 */ 408, 407, 406, 264, 402, 401, 322, 1128, 1921, 2058, - /* 1230 */ 45, 240, 1110, 58, 261, 367, 605, 316, 1183, 1512, - /* 1240 */ 372, 1871, 5, 604, 2064, 171, 251, 1456, 1603, 2059, - /* 1250 */ 577, 1303, 37, 36, 1405, 550, 43, 41, 40, 39, - /* 1260 */ 38, 1555, 1350, 321, 1901, 1111, 612, 269, 1937, 142, - /* 1270 */ 276, 96, 97, 1902, 1904, 608, 1906, 1907, 603, 1448, - /* 1280 */ 598, 183, 279, 129, 1713, 141, 1961, 1990, 143, 399, - /* 1290 */ 122, 344, 1986, 142, 37, 36, 690, 435, 43, 41, - /* 1300 */ 40, 39, 38, 364, 1362, 363, 71, 70, 393, 37, - /* 1310 */ 36, 178, 550, 43, 41, 40, 39, 38, 1211, 403, - /* 1320 */ 532, 1215, 532, 409, 358, 421, 428, 1809, 434, 309, - /* 1330 */ 440, 187, 381, 1449, 379, 375, 371, 368, 365, 1505, - /* 1340 */ 1222, 1713, 1220, 436, 441, 146, 443, 445, 1368, 2058, - /* 1350 */ 1903, 2058, 1370, 446, 454, 457, 193, 1554, 195, 458, - /* 1360 */ 1369, 459, 1371, 462, 2064, 171, 2064, 171, 460, 2059, - /* 1370 */ 577, 2059, 577, 198, 200, 466, 75, 76, 204, 1921, - /* 1380 */ 174, 485, 487, 1703, 208, 1699, 210, 592, 148, 149, - /* 1390 */ 99, 312, 1871, 1903, 604, 519, 521, 1701, 1697, 150, - /* 1400 */ 151, 522, 222, 277, 33, 348, 1443, 1444, 1445, 1446, - /* 1410 */ 1447, 1451, 1452, 1453, 1454, 1901, 1848, 526, 225, 1937, - /* 1420 */ 523, 529, 1921, 97, 1902, 1904, 608, 1906, 1907, 603, - /* 1430 */ 605, 598, 534, 333, 562, 1871, 168, 604, 1990, 229, - /* 1440 */ 139, 544, 344, 1986, 537, 1847, 1819, 541, 153, 140, - /* 1450 */ 545, 335, 84, 278, 1903, 86, 1714, 1367, 1901, 558, - /* 1460 */ 565, 2012, 1937, 2017, 560, 6, 97, 1902, 1904, 608, - /* 1470 */ 1906, 1907, 603, 2021, 598, 246, 1903, 561, 574, 2078, - /* 1480 */ 340, 1990, 2031, 1921, 2036, 344, 1986, 2035, 250, 568, - /* 1490 */ 559, 605, 255, 162, 257, 2009, 1871, 557, 604, 556, - /* 1500 */ 260, 341, 258, 585, 259, 1921, 1482, 2057, 2081, 1366, - /* 1510 */ 582, 131, 2006, 605, 57, 88, 610, 263, 1871, 1901, - /* 1520 */ 604, 1971, 1684, 1937, 1757, 281, 520, 97, 1902, 1904, - /* 1530 */ 608, 1906, 1907, 603, 1903, 598, 272, 691, 692, 694, - /* 1540 */ 1965, 1901, 1990, 532, 49, 1937, 344, 1986, 305, 97, - /* 1550 */ 1902, 1904, 608, 1906, 1907, 603, 293, 598, 1865, 304, - /* 1560 */ 347, 346, 1963, 1921, 1990, 285, 303, 283, 344, 1986, - /* 1570 */ 1353, 605, 2058, 1864, 68, 1863, 1871, 1862, 604, 69, - /* 1580 */ 1859, 1419, 369, 1346, 370, 1331, 1332, 2064, 171, 177, - /* 1590 */ 374, 1857, 2059, 577, 1903, 376, 377, 378, 1856, 1901, - /* 1600 */ 380, 1339, 1855, 1937, 1414, 382, 1854, 97, 1902, 1904, - /* 1610 */ 608, 1906, 1907, 603, 1337, 598, 1345, 384, 1853, 1306, - /* 1620 */ 553, 386, 1990, 1921, 1305, 1830, 344, 1986, 1829, 391, - /* 1630 */ 392, 605, 1828, 1827, 1275, 1802, 1871, 1801, 604, 1799, - /* 1640 */ 1798, 134, 1797, 1800, 1796, 135, 1795, 1345, 1793, 1792, - /* 1650 */ 1791, 181, 410, 1790, 412, 1903, 1789, 1788, 1787, 1901, - /* 1660 */ 1786, 1785, 1784, 1937, 594, 1783, 1782, 98, 1902, 1904, - /* 1670 */ 608, 1906, 1907, 603, 1781, 598, 1780, 1779, 1778, 1777, - /* 1680 */ 1776, 1775, 1990, 136, 1921, 1774, 1989, 1986, 166, 334, - /* 1690 */ 1773, 1772, 605, 1771, 1770, 695, 1769, 1871, 1768, 604, - /* 1700 */ 1767, 1766, 1158, 1629, 1277, 1628, 1626, 188, 189, 1903, - /* 1710 */ 1594, 191, 123, 1073, 1593, 192, 450, 452, 1072, 1843, - /* 1720 */ 1901, 1837, 124, 1354, 1937, 1349, 1826, 1825, 302, 1902, - /* 1730 */ 1904, 608, 1906, 1907, 603, 199, 598, 1811, 1921, 1692, - /* 1740 */ 1625, 197, 1623, 467, 468, 1621, 605, 471, 1357, 1359, - /* 1750 */ 469, 1871, 1903, 604, 1340, 473, 1338, 1103, 1619, 475, - /* 1760 */ 472, 1617, 596, 1412, 1413, 1415, 1416, 1417, 1418, 476, - /* 1770 */ 479, 477, 480, 481, 1901, 1606, 1903, 1605, 1937, 1343, - /* 1780 */ 1344, 1921, 98, 1902, 1904, 608, 1906, 1907, 603, 602, - /* 1790 */ 598, 1590, 1694, 1225, 1871, 59, 604, 1990, 1226, 1693, - /* 1800 */ 1149, 593, 1986, 1148, 1147, 1921, 1140, 1146, 207, 1145, - /* 1810 */ 663, 1142, 665, 605, 1141, 1139, 1615, 1901, 1871, 329, - /* 1820 */ 604, 1937, 1610, 330, 1608, 301, 1902, 1904, 608, 1906, - /* 1830 */ 1907, 603, 601, 598, 551, 1955, 506, 331, 1589, 509, - /* 1840 */ 511, 1901, 1903, 1588, 513, 1937, 1587, 515, 100, 98, - /* 1850 */ 1902, 1904, 608, 1906, 1907, 603, 25, 598, 1842, 1323, - /* 1860 */ 1836, 1312, 1903, 524, 1990, 152, 1824, 1822, 226, 1987, - /* 1870 */ 1823, 1921, 2063, 1821, 1820, 18, 539, 53, 231, 602, - /* 1880 */ 525, 530, 332, 1321, 1871, 1320, 604, 1818, 237, 542, - /* 1890 */ 82, 1921, 1810, 83, 239, 242, 85, 90, 19, 605, - /* 1900 */ 20, 27, 56, 1527, 1871, 1903, 604, 1901, 1431, 15, - /* 1910 */ 254, 1937, 10, 245, 249, 301, 1902, 1904, 608, 1906, - /* 1920 */ 1907, 603, 247, 598, 1509, 1956, 1511, 1901, 160, 1903, - /* 1930 */ 252, 1937, 1504, 28, 1921, 158, 1902, 1904, 608, 1906, - /* 1940 */ 1907, 603, 605, 598, 253, 1892, 89, 1871, 1547, 604, - /* 1950 */ 29, 1548, 1430, 61, 22, 1542, 1541, 342, 1921, 1546, - /* 1960 */ 1545, 343, 266, 349, 1891, 163, 605, 1479, 21, 1355, - /* 1970 */ 1901, 1871, 1478, 604, 1937, 16, 55, 2028, 297, 1902, - /* 1980 */ 1904, 608, 1906, 1907, 603, 54, 598, 12, 1441, 1903, - /* 1990 */ 1940, 164, 1409, 1407, 1901, 1406, 597, 35, 1937, 175, - /* 2000 */ 14, 1387, 302, 1902, 1904, 608, 1906, 1907, 603, 1903, - /* 2010 */ 598, 23, 607, 609, 1189, 611, 353, 24, 1921, 615, - /* 2020 */ 631, 613, 573, 352, 1379, 1212, 605, 1209, 616, 618, - /* 2030 */ 1206, 1871, 619, 604, 1200, 621, 622, 624, 1921, 1198, - /* 2040 */ 625, 1221, 270, 91, 1217, 92, 605, 640, 67, 1204, - /* 2050 */ 1101, 1871, 1903, 604, 1901, 1203, 1136, 1156, 1937, 1202, - /* 2060 */ 1135, 1201, 302, 1902, 1904, 608, 1906, 1907, 603, 652, - /* 2070 */ 598, 1903, 1134, 1133, 518, 1132, 1131, 1129, 1937, 1127, - /* 2080 */ 1126, 1921, 295, 1902, 1904, 608, 1906, 1907, 603, 605, - /* 2090 */ 598, 1125, 271, 1123, 1871, 1122, 604, 1121, 1120, 1119, - /* 2100 */ 1921, 1118, 1117, 1116, 1153, 1151, 1113, 1112, 605, 1109, - /* 2110 */ 1107, 1108, 1622, 1871, 1106, 604, 673, 1901, 1620, 675, - /* 2120 */ 674, 1937, 677, 679, 1903, 287, 1902, 1904, 608, 1906, - /* 2130 */ 1907, 603, 678, 598, 1618, 681, 1901, 682, 683, 1616, - /* 2140 */ 1937, 685, 1903, 686, 288, 1902, 1904, 608, 1906, 1907, - /* 2150 */ 603, 1604, 598, 1921, 687, 689, 1063, 1586, 274, 693, - /* 2160 */ 1561, 605, 1341, 282, 696, 697, 1871, 1561, 604, 1561, - /* 2170 */ 1561, 1921, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, - /* 2180 */ 1561, 1561, 1561, 1561, 1871, 1561, 604, 1561, 1561, 1901, - /* 2190 */ 1561, 1561, 1561, 1937, 1561, 1561, 1561, 289, 1902, 1904, - /* 2200 */ 608, 1906, 1907, 603, 1561, 598, 1903, 1901, 1561, 1561, - /* 2210 */ 1561, 1937, 1561, 1561, 1561, 296, 1902, 1904, 608, 1906, - /* 2220 */ 1907, 603, 1561, 598, 1561, 1561, 1903, 1561, 1561, 1561, - /* 2230 */ 1561, 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2240 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, - /* 2250 */ 604, 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2260 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1903, - /* 2270 */ 604, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 298, - /* 2280 */ 1902, 1904, 608, 1906, 1907, 603, 1561, 598, 1903, 1561, - /* 2290 */ 1561, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1921, 290, - /* 2300 */ 1902, 1904, 608, 1906, 1907, 603, 605, 598, 1561, 1561, - /* 2310 */ 1561, 1871, 1561, 604, 1561, 1561, 1561, 1921, 1561, 1561, - /* 2320 */ 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, - /* 2330 */ 1871, 1903, 604, 1561, 1901, 1561, 1561, 1561, 1937, 1561, - /* 2340 */ 1561, 1561, 299, 1902, 1904, 608, 1906, 1907, 603, 1561, - /* 2350 */ 598, 1561, 1561, 1901, 1561, 1903, 1561, 1937, 1561, 1561, - /* 2360 */ 1921, 291, 1902, 1904, 608, 1906, 1907, 603, 605, 598, - /* 2370 */ 1561, 1561, 1561, 1871, 1903, 604, 1561, 1561, 1561, 1561, - /* 2380 */ 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, 1561, - /* 2390 */ 1561, 1561, 605, 1561, 1561, 1561, 1901, 1871, 1561, 604, - /* 2400 */ 1937, 1561, 1561, 1921, 300, 1902, 1904, 608, 1906, 1907, - /* 2410 */ 603, 605, 598, 1561, 1561, 1561, 1871, 1561, 604, 1561, - /* 2420 */ 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 292, 1902, - /* 2430 */ 1904, 608, 1906, 1907, 603, 1903, 598, 1561, 1561, 1901, - /* 2440 */ 1561, 1561, 1561, 1937, 1561, 1561, 1561, 307, 1902, 1904, - /* 2450 */ 608, 1906, 1907, 603, 1561, 598, 1561, 1561, 1561, 1561, - /* 2460 */ 1561, 1561, 1561, 1561, 1921, 1561, 1561, 1561, 1561, 1561, - /* 2470 */ 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, 604, - /* 2480 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1903, 1561, - /* 2490 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, - /* 2500 */ 1901, 1561, 1561, 1561, 1937, 1561, 1903, 1561, 308, 1902, - /* 2510 */ 1904, 608, 1906, 1907, 603, 1561, 598, 1921, 1561, 1561, - /* 2520 */ 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, - /* 2530 */ 1871, 1561, 604, 1561, 1561, 1921, 1561, 1561, 1561, 1561, - /* 2540 */ 1561, 1561, 1561, 605, 1561, 1561, 1561, 1561, 1871, 1561, - /* 2550 */ 604, 1561, 1561, 1901, 1561, 1561, 1561, 1937, 1561, 1561, - /* 2560 */ 1561, 1915, 1902, 1904, 608, 1906, 1907, 603, 1561, 598, - /* 2570 */ 1903, 1901, 1561, 1561, 1561, 1937, 1561, 1561, 1561, 1914, - /* 2580 */ 1902, 1904, 608, 1906, 1907, 603, 1561, 598, 1561, 1561, - /* 2590 */ 1903, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1921, - /* 2600 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, - /* 2610 */ 1561, 1561, 1871, 1561, 604, 1561, 1561, 1561, 1561, 1921, - /* 2620 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, - /* 2630 */ 1561, 1561, 1871, 1903, 604, 1901, 1561, 1561, 1561, 1937, - /* 2640 */ 1561, 1561, 1561, 1913, 1902, 1904, 608, 1906, 1907, 603, - /* 2650 */ 1561, 598, 1903, 1561, 1561, 1901, 1561, 1561, 1561, 1937, - /* 2660 */ 1561, 1561, 1921, 317, 1902, 1904, 608, 1906, 1907, 603, - /* 2670 */ 605, 598, 1561, 1561, 1561, 1871, 1561, 604, 1561, 1561, - /* 2680 */ 1561, 1921, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 605, - /* 2690 */ 1561, 1561, 1561, 1561, 1871, 1903, 604, 1561, 1901, 1561, - /* 2700 */ 1561, 1561, 1937, 1561, 1561, 1561, 318, 1902, 1904, 608, - /* 2710 */ 1906, 1907, 603, 1561, 598, 1561, 1561, 1901, 1561, 1903, - /* 2720 */ 1561, 1937, 1561, 1561, 1921, 314, 1902, 1904, 608, 1906, - /* 2730 */ 1907, 603, 605, 598, 1561, 1561, 1561, 1871, 1561, 604, - /* 2740 */ 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1921, 1561, - /* 2750 */ 1561, 1561, 1561, 1561, 1561, 1561, 605, 1561, 1561, 1561, - /* 2760 */ 1901, 1871, 1561, 604, 1937, 1561, 1561, 1561, 319, 1902, - /* 2770 */ 1904, 608, 1906, 1907, 603, 1561, 598, 1561, 1561, 1561, - /* 2780 */ 1561, 1561, 1561, 1561, 1901, 1561, 1561, 1561, 1937, 1561, - /* 2790 */ 1561, 1561, 294, 1902, 1904, 608, 1906, 1907, 603, 1561, - /* 2800 */ 598, + /* 0 */ 450, 167, 451, 1602, 77, 458, 1711, 451, 1602, 538, + /* 10 */ 1824, 552, 44, 42, 1759, 339, 338, 1892, 1069, 1821, + /* 20 */ 353, 1568, 1344, 154, 120, 552, 1896, 1716, 593, 1897, + /* 30 */ 1910, 488, 1722, 1424, 156, 1342, 593, 1892, 52, 1673, + /* 40 */ 1892, 1720, 110, 1888, 1894, 109, 108, 107, 106, 105, + /* 50 */ 104, 103, 102, 101, 590, 1720, 600, 1419, 1073, 1074, + /* 60 */ 1928, 1370, 17, 1888, 1894, 341, 1888, 1894, 607, 1350, + /* 70 */ 44, 42, 1494, 1878, 449, 606, 600, 453, 353, 600, + /* 80 */ 1344, 467, 37, 36, 132, 1772, 43, 41, 40, 39, + /* 90 */ 38, 1424, 1910, 1342, 1372, 1, 608, 157, 552, 1579, + /* 100 */ 1944, 1771, 1896, 46, 98, 352, 1911, 610, 1913, 1914, + /* 110 */ 605, 176, 600, 1892, 58, 1419, 552, 697, 1910, 1997, + /* 120 */ 17, 130, 1928, 317, 1993, 398, 1698, 1350, 1720, 120, + /* 130 */ 607, 1426, 1427, 635, 2065, 1878, 493, 606, 47, 1888, + /* 140 */ 1894, 347, 592, 169, 2005, 2006, 1720, 2010, 1928, 577, + /* 150 */ 171, 455, 600, 1, 2066, 579, 607, 1367, 1908, 77, + /* 160 */ 1590, 1878, 1944, 606, 313, 329, 97, 1909, 1911, 610, + /* 170 */ 1913, 1914, 605, 125, 600, 697, 1345, 129, 1343, 141, + /* 180 */ 1968, 1997, 1715, 1928, 1908, 346, 1993, 467, 1944, 1426, + /* 190 */ 1427, 572, 159, 1909, 1911, 610, 1913, 1914, 605, 435, + /* 200 */ 600, 1348, 1349, 1878, 1399, 1400, 1402, 1403, 1404, 1405, + /* 210 */ 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, + /* 220 */ 1422, 1423, 1425, 1428, 3, 1565, 330, 1369, 328, 327, + /* 230 */ 571, 490, 222, 573, 1345, 492, 1343, 246, 457, 236, + /* 240 */ 237, 453, 174, 110, 580, 2086, 109, 108, 107, 106, + /* 250 */ 105, 104, 103, 102, 101, 186, 185, 491, 182, 1348, + /* 260 */ 1349, 174, 1399, 1400, 1402, 1403, 1404, 1405, 1406, 1407, + /* 270 */ 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, 1422, 1423, + /* 280 */ 1425, 1428, 3, 44, 42, 174, 368, 1371, 79, 315, + /* 290 */ 643, 353, 542, 1344, 540, 74, 1696, 315, 73, 593, + /* 300 */ 542, 1910, 540, 534, 1424, 2070, 1342, 1195, 632, 631, + /* 310 */ 630, 1199, 629, 1201, 1202, 628, 1204, 625, 230, 1210, + /* 320 */ 622, 1212, 1213, 619, 616, 11, 358, 9, 1419, 1765, + /* 330 */ 1767, 1928, 2065, 17, 2065, 2012, 62, 1498, 87, 607, + /* 340 */ 1350, 44, 42, 1369, 1878, 1865, 606, 2071, 171, 353, + /* 350 */ 2069, 1344, 2066, 579, 2066, 2068, 58, 643, 81, 700, + /* 360 */ 1713, 58, 1424, 2009, 1342, 1520, 1, 608, 387, 7, + /* 370 */ 1086, 1944, 1085, 277, 46, 297, 352, 1911, 610, 1913, + /* 380 */ 1914, 605, 1567, 600, 1368, 207, 1419, 165, 697, 389, + /* 390 */ 385, 17, 375, 690, 686, 682, 678, 275, 1350, 1491, + /* 400 */ 1087, 1155, 1426, 1427, 11, 2065, 119, 118, 117, 116, + /* 410 */ 115, 114, 113, 112, 111, 565, 1518, 1519, 1521, 1522, + /* 420 */ 577, 171, 1772, 1350, 1, 2066, 579, 58, 1589, 322, + /* 430 */ 269, 504, 503, 502, 95, 1157, 1434, 243, 1770, 126, + /* 440 */ 498, 391, 1369, 390, 497, 496, 697, 1345, 655, 1343, + /* 450 */ 495, 501, 392, 1697, 1369, 1370, 494, 1814, 37, 36, + /* 460 */ 1426, 1427, 43, 41, 40, 39, 38, 578, 179, 534, + /* 470 */ 549, 1878, 1348, 1349, 1709, 1399, 1400, 1402, 1403, 1404, + /* 480 */ 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, + /* 490 */ 1421, 1422, 1423, 1425, 1428, 3, 2065, 11, 2065, 1772, + /* 500 */ 34, 270, 232, 174, 1705, 1345, 340, 1343, 174, 1707, + /* 510 */ 94, 577, 171, 2071, 171, 1770, 2066, 579, 2066, 579, + /* 520 */ 1315, 174, 225, 229, 127, 1766, 1767, 1910, 1401, 58, + /* 530 */ 1348, 1349, 1712, 1399, 1400, 1402, 1403, 1404, 1405, 1406, + /* 540 */ 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, 1422, + /* 550 */ 1423, 1425, 1428, 3, 44, 42, 2070, 1928, 500, 499, + /* 560 */ 641, 356, 353, 80, 1344, 607, 1237, 1238, 568, 154, + /* 570 */ 1878, 1487, 606, 1371, 174, 1424, 1814, 1342, 1722, 145, + /* 580 */ 144, 638, 637, 636, 37, 36, 1910, 180, 43, 41, + /* 590 */ 40, 39, 38, 1908, 554, 552, 1969, 1944, 1086, 1419, + /* 600 */ 1085, 158, 1909, 1911, 610, 1913, 1914, 605, 396, 600, + /* 610 */ 1772, 1350, 44, 42, 1429, 1455, 1928, 357, 1560, 518, + /* 620 */ 353, 336, 1344, 552, 607, 1720, 1770, 1401, 1087, 1878, + /* 630 */ 1703, 606, 516, 1424, 514, 1342, 397, 8, 1490, 235, + /* 640 */ 37, 36, 557, 2034, 43, 41, 40, 39, 38, 1553, + /* 650 */ 359, 226, 1908, 1720, 574, 569, 1944, 1419, 154, 697, + /* 660 */ 304, 1909, 1911, 610, 1913, 1914, 605, 1722, 600, 1350, + /* 670 */ 349, 348, 1530, 1426, 1427, 1344, 174, 37, 36, 552, + /* 680 */ 1358, 43, 41, 40, 39, 38, 31, 223, 1342, 552, + /* 690 */ 1750, 1424, 407, 1351, 30, 8, 1460, 2012, 1321, 1322, + /* 700 */ 37, 36, 421, 538, 43, 41, 40, 39, 38, 1720, + /* 710 */ 2012, 552, 26, 1822, 1559, 1419, 269, 697, 1345, 1720, + /* 720 */ 1343, 2069, 1350, 32, 422, 2008, 399, 1350, 1510, 37, + /* 730 */ 36, 1426, 1427, 43, 41, 40, 39, 38, 2007, 400, + /* 740 */ 2070, 1720, 128, 1348, 1349, 1968, 1399, 1400, 1402, 1403, + /* 750 */ 1404, 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, + /* 760 */ 1420, 1421, 1422, 1423, 1425, 1428, 3, 13, 12, 2065, + /* 770 */ 697, 40, 39, 38, 601, 596, 1345, 641, 1343, 43, + /* 780 */ 41, 40, 39, 38, 174, 2069, 634, 37, 36, 2066, + /* 790 */ 2067, 43, 41, 40, 39, 38, 145, 144, 638, 637, + /* 800 */ 636, 1348, 1349, 143, 1399, 1400, 1402, 1403, 1404, 1405, + /* 810 */ 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, 1421, + /* 820 */ 1422, 1423, 1425, 1428, 3, 44, 42, 492, 552, 1345, + /* 830 */ 1820, 1343, 308, 353, 1359, 1344, 1354, 585, 556, 552, + /* 840 */ 1969, 465, 668, 666, 529, 1588, 1424, 1587, 1342, 491, + /* 850 */ 552, 537, 466, 1814, 1348, 1349, 51, 1910, 1720, 1362, + /* 860 */ 1364, 1369, 1467, 1717, 184, 1073, 1074, 1586, 534, 1720, + /* 870 */ 1419, 1585, 1674, 598, 1417, 1418, 1420, 1421, 1422, 1423, + /* 880 */ 1720, 552, 1350, 44, 42, 552, 552, 1928, 1878, 1580, + /* 890 */ 1878, 353, 366, 1344, 137, 607, 1634, 2065, 530, 535, + /* 900 */ 1878, 656, 606, 1690, 1424, 1584, 1342, 406, 8, 534, + /* 910 */ 1878, 1720, 2071, 171, 1878, 1720, 1720, 2066, 579, 1621, + /* 920 */ 1819, 1583, 308, 1908, 1582, 2017, 1487, 1944, 1419, 1581, + /* 930 */ 697, 98, 1909, 1911, 610, 1913, 1914, 605, 2065, 600, + /* 940 */ 1350, 505, 153, 1578, 1426, 1427, 1997, 1577, 1878, 1614, + /* 950 */ 1996, 1993, 552, 2071, 171, 72, 1576, 552, 2066, 579, + /* 960 */ 504, 503, 502, 45, 1878, 240, 1, 1878, 126, 498, + /* 970 */ 360, 507, 1878, 497, 496, 639, 2037, 581, 1763, 495, + /* 980 */ 501, 206, 1720, 1372, 208, 494, 1878, 1720, 697, 1345, + /* 990 */ 1878, 1343, 365, 1695, 522, 582, 1575, 264, 161, 1878, + /* 1000 */ 1574, 1573, 1426, 1427, 484, 480, 476, 472, 205, 534, + /* 1010 */ 640, 534, 234, 1763, 1348, 1349, 1292, 1399, 1400, 1402, + /* 1020 */ 1403, 1404, 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, + /* 1030 */ 1418, 1420, 1421, 1422, 1423, 1425, 1428, 3, 2065, 1878, + /* 1040 */ 2065, 154, 566, 1878, 1878, 78, 1401, 1345, 203, 1343, + /* 1050 */ 1723, 48, 4, 2071, 171, 2071, 171, 586, 2066, 579, + /* 1060 */ 2066, 579, 37, 36, 1572, 238, 43, 41, 40, 39, + /* 1070 */ 38, 1571, 1348, 1349, 1631, 1399, 1400, 1402, 1403, 1404, + /* 1080 */ 1405, 1406, 1407, 1408, 1409, 602, 598, 1417, 1418, 1420, + /* 1090 */ 1421, 1422, 1423, 1425, 1428, 3, 312, 1801, 1367, 282, + /* 1100 */ 641, 590, 1750, 50, 533, 429, 590, 1878, 440, 213, + /* 1110 */ 202, 196, 211, 201, 1878, 215, 138, 463, 214, 145, + /* 1120 */ 144, 638, 637, 636, 1570, 413, 245, 441, 142, 217, + /* 1130 */ 415, 132, 216, 194, 219, 143, 132, 218, 674, 673, + /* 1140 */ 672, 671, 363, 258, 670, 669, 133, 664, 663, 662, + /* 1150 */ 661, 660, 659, 658, 657, 147, 653, 652, 651, 362, + /* 1160 */ 361, 648, 647, 646, 645, 644, 155, 1878, 130, 545, + /* 1170 */ 552, 288, 325, 130, 597, 1562, 1563, 13, 12, 60, + /* 1180 */ 1353, 242, 2070, 548, 402, 286, 66, 1612, 1188, 65, + /* 1190 */ 170, 2005, 2006, 1608, 2010, 172, 2005, 2006, 250, 2010, + /* 1200 */ 1720, 60, 1929, 45, 364, 45, 190, 446, 444, 510, + /* 1210 */ 614, 142, 439, 583, 1910, 434, 433, 432, 431, 428, + /* 1220 */ 427, 426, 425, 424, 420, 419, 418, 417, 326, 410, + /* 1230 */ 409, 408, 1517, 404, 403, 324, 1352, 1603, 1899, 1760, + /* 1240 */ 552, 692, 552, 58, 1928, 143, 416, 552, 2027, 122, + /* 1250 */ 591, 253, 594, 550, 1461, 551, 1410, 1878, 281, 606, + /* 1260 */ 271, 37, 36, 1216, 1220, 43, 41, 40, 39, 38, + /* 1270 */ 1720, 509, 1720, 93, 266, 1553, 590, 1720, 263, 2, + /* 1280 */ 1908, 96, 578, 90, 1944, 5, 519, 1901, 97, 1909, + /* 1290 */ 1911, 610, 1913, 1914, 605, 1115, 600, 142, 1227, 369, + /* 1300 */ 221, 168, 1225, 1997, 374, 323, 132, 346, 1993, 1308, + /* 1310 */ 278, 2065, 649, 1445, 512, 318, 71, 70, 395, 506, + /* 1320 */ 173, 178, 183, 1356, 220, 1910, 577, 171, 2023, 1116, + /* 1330 */ 650, 2066, 579, 401, 1135, 437, 405, 411, 1367, 311, + /* 1340 */ 430, 423, 383, 121, 381, 377, 373, 370, 367, 1816, + /* 1350 */ 146, 1910, 1133, 436, 438, 1928, 442, 1453, 443, 1373, + /* 1360 */ 448, 64, 187, 594, 63, 267, 2005, 589, 1878, 588, + /* 1370 */ 606, 456, 2065, 445, 1375, 447, 459, 193, 1374, 1355, + /* 1380 */ 460, 1928, 1376, 195, 461, 462, 198, 577, 171, 607, + /* 1390 */ 174, 1908, 2066, 579, 1878, 1944, 606, 464, 200, 97, + /* 1400 */ 1909, 1911, 610, 1913, 1914, 605, 75, 600, 1089, 468, + /* 1410 */ 76, 1454, 168, 485, 1997, 204, 486, 1908, 346, 1993, + /* 1420 */ 487, 1944, 489, 99, 1710, 97, 1909, 1911, 610, 1913, + /* 1430 */ 1914, 605, 314, 600, 210, 1706, 521, 523, 2085, 2024, + /* 1440 */ 1997, 212, 148, 149, 346, 1993, 1708, 1704, 279, 224, + /* 1450 */ 150, 151, 1855, 524, 2031, 528, 227, 531, 536, 231, + /* 1460 */ 564, 525, 546, 1910, 84, 335, 539, 1854, 1826, 543, + /* 1470 */ 280, 337, 86, 1721, 1372, 139, 560, 567, 2043, 562, + /* 1480 */ 140, 2042, 33, 350, 1448, 1449, 1450, 1451, 1452, 1456, + /* 1490 */ 1457, 1458, 1459, 1928, 547, 248, 6, 563, 342, 252, + /* 1500 */ 2019, 607, 2028, 570, 2038, 576, 1878, 561, 606, 559, + /* 1510 */ 558, 257, 343, 587, 2064, 2088, 584, 1487, 1371, 262, + /* 1520 */ 57, 131, 88, 1691, 2013, 612, 283, 274, 1764, 1908, + /* 1530 */ 1910, 693, 694, 1944, 696, 49, 295, 97, 1909, 1911, + /* 1540 */ 610, 1913, 1914, 605, 307, 600, 306, 162, 259, 260, + /* 1550 */ 2085, 1978, 1997, 285, 261, 305, 346, 1993, 287, 1872, + /* 1560 */ 1928, 1871, 265, 68, 1870, 1869, 2059, 69, 607, 371, + /* 1570 */ 372, 1336, 1337, 1878, 1866, 606, 177, 376, 1864, 378, + /* 1580 */ 379, 380, 1863, 382, 1910, 1862, 384, 1861, 386, 1860, + /* 1590 */ 388, 1311, 1310, 1837, 1836, 393, 1908, 394, 1835, 1834, + /* 1600 */ 1944, 1809, 1280, 1808, 97, 1909, 1911, 610, 1913, 1914, + /* 1610 */ 605, 1806, 600, 134, 1928, 1805, 1804, 2085, 1807, 1997, + /* 1620 */ 181, 135, 607, 346, 1993, 1803, 1802, 1878, 1800, 606, + /* 1630 */ 1799, 1798, 412, 2016, 1797, 414, 1796, 1795, 1910, 1794, + /* 1640 */ 1793, 1792, 1791, 1790, 1789, 1788, 1787, 1786, 1785, 1784, + /* 1650 */ 1908, 1783, 1782, 1781, 1944, 136, 1780, 1779, 97, 1909, + /* 1660 */ 1911, 610, 1913, 1914, 605, 1778, 600, 1777, 1928, 1776, + /* 1670 */ 1775, 1972, 1282, 1997, 188, 1635, 607, 346, 1993, 1774, + /* 1680 */ 1773, 1878, 1636, 606, 189, 1633, 1599, 1076, 1598, 1163, + /* 1690 */ 1075, 1910, 1108, 199, 1832, 1818, 1699, 191, 123, 1850, + /* 1700 */ 1844, 166, 192, 124, 1908, 1833, 452, 454, 1944, 1632, + /* 1710 */ 197, 1630, 97, 1909, 1911, 610, 1913, 1914, 605, 469, + /* 1720 */ 600, 1928, 471, 1628, 470, 1970, 473, 1997, 474, 607, + /* 1730 */ 1626, 346, 1993, 1624, 1878, 1611, 606, 475, 477, 481, + /* 1740 */ 478, 479, 1610, 1595, 1910, 483, 1701, 1231, 482, 1230, + /* 1750 */ 1700, 1154, 1153, 1152, 1151, 1150, 665, 1908, 667, 1147, + /* 1760 */ 1146, 1944, 1145, 1144, 1622, 97, 1909, 1911, 610, 1913, + /* 1770 */ 1914, 605, 59, 600, 1928, 331, 1615, 332, 555, 1613, + /* 1780 */ 1997, 508, 607, 333, 346, 1993, 511, 1878, 1594, 606, + /* 1790 */ 1593, 209, 513, 515, 1592, 517, 1849, 100, 53, 1843, + /* 1800 */ 1317, 152, 526, 1328, 1831, 1910, 1829, 1830, 2070, 25, + /* 1810 */ 1908, 1828, 1827, 18, 1944, 1825, 1326, 233, 98, 1909, + /* 1820 */ 1911, 610, 1913, 1914, 605, 1817, 600, 1325, 532, 1910, + /* 1830 */ 83, 239, 228, 1997, 82, 1928, 85, 595, 1993, 90, + /* 1840 */ 19, 527, 15, 604, 244, 20, 241, 27, 1878, 1436, + /* 1850 */ 606, 56, 1532, 334, 541, 247, 255, 1435, 544, 1928, + /* 1860 */ 10, 29, 249, 1514, 251, 256, 1516, 607, 1509, 160, + /* 1870 */ 1899, 1908, 1878, 254, 606, 1944, 61, 28, 89, 303, + /* 1880 */ 1909, 1911, 610, 1913, 1914, 605, 603, 600, 553, 1962, + /* 1890 */ 22, 1910, 1547, 1546, 344, 1908, 1552, 1553, 1551, 1944, + /* 1900 */ 1550, 345, 268, 98, 1909, 1911, 610, 1913, 1914, 605, + /* 1910 */ 1484, 600, 1483, 55, 1898, 163, 12, 1360, 1997, 1414, + /* 1920 */ 164, 1928, 1947, 1994, 599, 175, 35, 1446, 1412, 604, + /* 1930 */ 1411, 14, 23, 1392, 1878, 1384, 606, 24, 613, 611, + /* 1940 */ 609, 1217, 1910, 355, 615, 617, 1214, 618, 620, 1211, + /* 1950 */ 621, 623, 626, 1194, 21, 624, 16, 1908, 1205, 1209, + /* 1960 */ 1203, 1944, 54, 1208, 1226, 303, 1909, 1911, 610, 1913, + /* 1970 */ 1914, 605, 1928, 600, 1222, 1963, 272, 627, 91, 633, + /* 1980 */ 607, 92, 67, 1106, 642, 1878, 1207, 606, 1141, 1140, + /* 1990 */ 1206, 1139, 1138, 1137, 1136, 1134, 1910, 1132, 1131, 1130, + /* 2000 */ 1128, 1161, 1127, 1126, 654, 1125, 1124, 1123, 1908, 273, + /* 2010 */ 1122, 1121, 1944, 1158, 1910, 1156, 158, 1909, 1911, 610, + /* 2020 */ 1913, 1914, 605, 1118, 600, 1117, 1928, 1114, 1113, 1112, + /* 2030 */ 1111, 1629, 675, 677, 607, 1627, 676, 679, 680, 1878, + /* 2040 */ 681, 606, 1625, 683, 1928, 684, 1623, 687, 685, 689, + /* 2050 */ 688, 1609, 607, 691, 1066, 1591, 276, 1878, 2035, 606, + /* 2060 */ 695, 1566, 1908, 1346, 699, 284, 1944, 1566, 698, 1566, + /* 2070 */ 299, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, + /* 2080 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 159, 1909, + /* 2090 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1910, 1566, 1566, + /* 2100 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2110 */ 1566, 1566, 1566, 1566, 575, 1566, 1566, 1566, 1566, 1566, + /* 2120 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1928, 1566, 1566, + /* 2130 */ 1566, 1566, 351, 1566, 1566, 607, 1566, 1566, 1566, 1566, + /* 2140 */ 1878, 2087, 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2150 */ 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2160 */ 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, + /* 2170 */ 1566, 304, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, + /* 2180 */ 1566, 1566, 1928, 1566, 1566, 1566, 1566, 354, 1566, 1566, + /* 2190 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 2200 */ 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2210 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, + /* 2220 */ 1566, 1566, 1944, 1566, 1566, 1566, 304, 1909, 1911, 610, + /* 2230 */ 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, 1566, 1566, + /* 2240 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2250 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, 1566, + /* 2260 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 520, + /* 2270 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 297, 1909, 1911, + /* 2280 */ 610, 1913, 1914, 605, 1566, 600, 1566, 1928, 1566, 1566, + /* 2290 */ 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, + /* 2300 */ 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2310 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2320 */ 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, + /* 2330 */ 1566, 289, 1909, 1911, 610, 1913, 1914, 605, 1928, 600, + /* 2340 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2350 */ 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2360 */ 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2370 */ 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2380 */ 1910, 1566, 290, 1909, 1911, 610, 1913, 1914, 605, 1566, + /* 2390 */ 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2400 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 2410 */ 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 2420 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1908, 1566, + /* 2430 */ 1566, 1566, 1944, 1566, 1566, 1566, 291, 1909, 1911, 610, + /* 2440 */ 1913, 1914, 605, 1566, 600, 1566, 1908, 1566, 1566, 1566, + /* 2450 */ 1944, 1566, 1566, 1566, 298, 1909, 1911, 610, 1913, 1914, + /* 2460 */ 605, 1566, 600, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2470 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2480 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2490 */ 1566, 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2500 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2510 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2520 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, + /* 2530 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 300, 1909, 1911, + /* 2540 */ 610, 1913, 1914, 605, 1566, 600, 1566, 1566, 1928, 1566, + /* 2550 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2560 */ 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, 1910, + /* 2570 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2580 */ 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2590 */ 1566, 1566, 292, 1909, 1911, 610, 1913, 1914, 605, 1928, + /* 2600 */ 600, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 2610 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 2620 */ 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2630 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 2640 */ 1566, 1566, 1566, 301, 1909, 1911, 610, 1913, 1914, 605, + /* 2650 */ 1566, 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2660 */ 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, + /* 2670 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 2680 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1908, + /* 2690 */ 1566, 1566, 1566, 1944, 1566, 1566, 1566, 293, 1909, 1911, + /* 2700 */ 610, 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, 1566, + /* 2710 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 2720 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, 1566, + /* 2730 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2740 */ 1908, 1566, 1566, 1566, 1944, 1566, 1910, 1566, 302, 1909, + /* 2750 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1928, 1566, + /* 2760 */ 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, + /* 2770 */ 1566, 1878, 1566, 606, 1566, 1566, 1928, 1566, 1566, 1566, + /* 2780 */ 1566, 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, + /* 2790 */ 1566, 606, 1566, 1566, 1908, 1566, 1566, 1566, 1944, 1566, + /* 2800 */ 1566, 1566, 294, 1909, 1911, 610, 1913, 1914, 605, 1566, + /* 2810 */ 600, 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, + /* 2820 */ 309, 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1910, + /* 2830 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2840 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2850 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1928, + /* 2860 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 2870 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 2880 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 2890 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 2900 */ 1566, 1566, 1566, 310, 1909, 1911, 610, 1913, 1914, 605, + /* 2910 */ 1566, 600, 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, + /* 2920 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 2930 */ 1566, 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, + /* 2940 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 2950 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 1922, 1909, + /* 2960 */ 1911, 610, 1913, 1914, 605, 1928, 600, 1566, 1566, 1566, + /* 2970 */ 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, + /* 2980 */ 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1910, + /* 2990 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3000 */ 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 1921, + /* 3010 */ 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1928, + /* 3020 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, 1566, + /* 3030 */ 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, 1566, + /* 3040 */ 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3050 */ 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, 1944, + /* 3060 */ 1566, 1566, 1566, 1920, 1909, 1911, 610, 1913, 1914, 605, + /* 3070 */ 1928, 600, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 3080 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, + /* 3090 */ 1566, 1566, 1566, 1566, 1910, 1566, 1566, 1566, 1566, 1566, + /* 3100 */ 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, + /* 3110 */ 1944, 1566, 1910, 1566, 319, 1909, 1911, 610, 1913, 1914, + /* 3120 */ 605, 1566, 600, 1566, 1928, 1566, 1566, 1566, 1566, 1566, + /* 3130 */ 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, + /* 3140 */ 1566, 1566, 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3150 */ 607, 1566, 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, + /* 3160 */ 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 320, 1909, + /* 3170 */ 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1908, 1566, + /* 3180 */ 1566, 1566, 1944, 1566, 1566, 1566, 316, 1909, 1911, 610, + /* 3190 */ 1913, 1914, 605, 1566, 600, 1910, 1566, 1566, 1566, 1566, + /* 3200 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3210 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3220 */ 1566, 1566, 1566, 1566, 1566, 1928, 1566, 1566, 1566, 1566, + /* 3230 */ 1566, 1566, 1566, 607, 1566, 1566, 1566, 1566, 1878, 1566, + /* 3240 */ 606, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3250 */ 1910, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3260 */ 1566, 1908, 1566, 1566, 1566, 1944, 1566, 1566, 1566, 321, + /* 3270 */ 1909, 1911, 610, 1913, 1914, 605, 1566, 600, 1566, 1566, + /* 3280 */ 1928, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 607, 1566, + /* 3290 */ 1566, 1566, 1566, 1878, 1566, 606, 1566, 1566, 1566, 1566, + /* 3300 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 3310 */ 1566, 1566, 1566, 1566, 1566, 1566, 1908, 1566, 1566, 1566, + /* 3320 */ 1944, 1566, 1566, 1566, 296, 1909, 1911, 610, 1913, 1914, + /* 3330 */ 605, 1566, 600, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 352, 410, 411, 352, 351, 4, 325, 321, 327, 328, - /* 10 */ 352, 363, 12, 13, 363, 325, 329, 327, 328, 0, - /* 20 */ 20, 363, 22, 12, 13, 14, 15, 16, 20, 14, - /* 30 */ 15, 16, 20, 33, 350, 35, 350, 389, 390, 391, - /* 40 */ 389, 390, 391, 359, 358, 44, 45, 389, 390, 363, - /* 50 */ 402, 365, 2, 402, 367, 320, 56, 322, 8, 9, - /* 60 */ 402, 61, 12, 13, 14, 15, 16, 321, 68, 12, - /* 70 */ 13, 14, 386, 20, 364, 365, 390, 20, 395, 22, - /* 80 */ 394, 395, 396, 397, 398, 399, 400, 20, 402, 22, - /* 90 */ 33, 333, 35, 407, 94, 409, 350, 14, 94, 413, - /* 100 */ 414, 333, 35, 20, 358, 329, 94, 424, 20, 363, - /* 110 */ 3, 365, 426, 56, 356, 347, 116, 50, 61, 365, - /* 120 */ 434, 329, 439, 440, 356, 68, 372, 444, 445, 375, - /* 130 */ 130, 131, 386, 341, 358, 20, 390, 0, 130, 131, - /* 140 */ 394, 395, 396, 397, 398, 399, 400, 94, 402, 361, - /* 150 */ 358, 94, 364, 365, 20, 409, 22, 321, 21, 413, - /* 160 */ 414, 24, 25, 26, 27, 28, 29, 30, 31, 32, - /* 170 */ 424, 395, 60, 116, 94, 175, 20, 177, 174, 78, - /* 180 */ 176, 342, 94, 321, 50, 439, 440, 130, 131, 350, - /* 190 */ 444, 445, 416, 417, 418, 419, 20, 421, 359, 363, - /* 200 */ 200, 201, 321, 203, 204, 205, 206, 207, 208, 209, + /* 0 */ 326, 351, 328, 329, 335, 326, 354, 328, 329, 367, + /* 10 */ 0, 330, 12, 13, 364, 344, 374, 365, 4, 377, + /* 20 */ 20, 0, 22, 352, 343, 330, 354, 358, 20, 354, + /* 30 */ 322, 350, 361, 33, 336, 35, 20, 365, 343, 341, + /* 40 */ 365, 360, 21, 391, 392, 24, 25, 26, 27, 28, + /* 50 */ 29, 30, 31, 32, 330, 360, 404, 57, 44, 45, + /* 60 */ 352, 20, 62, 391, 392, 393, 391, 392, 360, 69, + /* 70 */ 12, 13, 14, 365, 327, 367, 404, 330, 20, 404, + /* 80 */ 22, 61, 8, 9, 360, 352, 12, 13, 14, 15, + /* 90 */ 16, 33, 322, 35, 20, 95, 388, 321, 330, 323, + /* 100 */ 392, 368, 354, 95, 396, 397, 398, 399, 400, 401, + /* 110 */ 402, 343, 404, 365, 95, 57, 330, 117, 322, 411, + /* 120 */ 62, 397, 352, 415, 416, 330, 0, 69, 360, 343, + /* 130 */ 360, 131, 132, 106, 426, 365, 350, 367, 95, 391, + /* 140 */ 392, 393, 418, 419, 420, 421, 360, 423, 352, 441, + /* 150 */ 442, 14, 404, 95, 446, 447, 360, 20, 388, 335, + /* 160 */ 322, 365, 392, 367, 369, 37, 396, 397, 398, 399, + /* 170 */ 400, 401, 402, 349, 404, 117, 176, 407, 178, 409, + /* 180 */ 410, 411, 358, 352, 388, 415, 416, 61, 392, 131, + /* 190 */ 132, 360, 396, 397, 398, 399, 400, 401, 402, 79, + /* 200 */ 404, 201, 202, 365, 204, 205, 206, 207, 208, 209, /* 210 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - /* 220 */ 220, 221, 222, 223, 94, 363, 0, 329, 318, 63, - /* 230 */ 64, 65, 175, 331, 177, 134, 135, 71, 72, 341, - /* 240 */ 60, 241, 76, 77, 363, 241, 348, 345, 82, 83, - /* 250 */ 126, 350, 56, 241, 88, 353, 358, 200, 201, 358, - /* 260 */ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - /* 270 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - /* 280 */ 223, 12, 13, 19, 358, 352, 60, 204, 378, 20, - /* 290 */ 94, 22, 96, 125, 241, 369, 363, 33, 397, 321, - /* 300 */ 329, 225, 33, 334, 35, 395, 182, 183, 339, 321, - /* 310 */ 186, 47, 188, 20, 321, 329, 52, 53, 54, 55, - /* 320 */ 56, 241, 389, 390, 350, 56, 350, 160, 350, 358, - /* 330 */ 61, 357, 21, 357, 424, 402, 358, 68, 12, 13, - /* 340 */ 366, 363, 366, 365, 358, 34, 20, 36, 22, 439, - /* 350 */ 440, 363, 184, 185, 444, 445, 363, 93, 35, 33, - /* 360 */ 96, 35, 170, 94, 386, 258, 395, 329, 390, 392, - /* 370 */ 43, 241, 394, 395, 396, 397, 398, 399, 400, 341, - /* 380 */ 402, 395, 56, 191, 192, 116, 348, 61, 417, 418, - /* 390 */ 419, 68, 421, 129, 68, 424, 358, 420, 200, 130, - /* 400 */ 131, 20, 424, 417, 418, 419, 20, 421, 349, 395, - /* 410 */ 439, 440, 4, 246, 247, 444, 445, 439, 440, 106, - /* 420 */ 94, 362, 444, 445, 21, 161, 105, 24, 25, 26, - /* 430 */ 27, 28, 29, 30, 31, 32, 0, 241, 424, 336, - /* 440 */ 337, 128, 116, 179, 175, 181, 177, 14, 250, 251, - /* 450 */ 252, 253, 254, 20, 440, 162, 130, 131, 444, 445, - /* 460 */ 24, 25, 26, 27, 28, 29, 30, 31, 32, 200, - /* 470 */ 201, 61, 203, 204, 205, 206, 207, 208, 209, 210, - /* 480 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - /* 490 */ 221, 222, 223, 157, 225, 225, 351, 227, 125, 126, - /* 500 */ 14, 175, 94, 177, 0, 0, 20, 107, 108, 109, - /* 510 */ 110, 111, 112, 113, 114, 115, 116, 117, 0, 119, - /* 520 */ 120, 121, 122, 123, 124, 4, 200, 201, 37, 203, - /* 530 */ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - /* 540 */ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - /* 550 */ 12, 13, 47, 329, 321, 395, 183, 321, 20, 186, - /* 560 */ 22, 188, 342, 326, 228, 341, 329, 63, 64, 65, - /* 570 */ 350, 33, 321, 35, 238, 71, 72, 339, 60, 359, - /* 580 */ 76, 77, 358, 321, 424, 392, 82, 83, 97, 262, - /* 590 */ 99, 100, 88, 102, 56, 68, 363, 106, 56, 363, - /* 600 */ 440, 406, 321, 408, 444, 445, 68, 12, 13, 14, - /* 610 */ 200, 329, 350, 420, 363, 20, 68, 22, 329, 128, - /* 620 */ 358, 329, 351, 341, 321, 363, 342, 365, 33, 350, - /* 630 */ 35, 350, 94, 341, 350, 93, 357, 204, 96, 358, - /* 640 */ 358, 329, 351, 359, 363, 366, 365, 358, 386, 241, - /* 650 */ 358, 56, 390, 341, 116, 378, 394, 395, 396, 397, - /* 660 */ 398, 399, 400, 68, 402, 0, 363, 386, 130, 131, - /* 670 */ 358, 390, 395, 329, 395, 394, 395, 396, 397, 398, - /* 680 */ 399, 400, 3, 402, 395, 341, 20, 331, 407, 94, - /* 690 */ 409, 336, 337, 326, 413, 414, 329, 435, 436, 20, - /* 700 */ 351, 424, 358, 424, 423, 351, 417, 418, 419, 353, - /* 710 */ 421, 116, 406, 175, 408, 177, 439, 440, 439, 440, - /* 720 */ 321, 444, 445, 444, 445, 130, 131, 321, 8, 9, - /* 730 */ 1, 2, 12, 13, 14, 15, 16, 392, 200, 201, - /* 740 */ 20, 203, 204, 205, 206, 207, 208, 209, 210, 211, - /* 750 */ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - /* 760 */ 222, 223, 363, 242, 374, 420, 376, 358, 329, 363, - /* 770 */ 175, 106, 177, 343, 95, 374, 346, 376, 369, 241, - /* 780 */ 341, 8, 9, 20, 321, 12, 13, 14, 15, 16, - /* 790 */ 125, 126, 127, 128, 129, 200, 201, 358, 203, 204, - /* 800 */ 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - /* 810 */ 215, 216, 217, 218, 219, 220, 221, 222, 223, 12, - /* 820 */ 13, 365, 4, 358, 95, 106, 363, 20, 162, 22, - /* 830 */ 321, 375, 43, 405, 369, 360, 408, 19, 363, 56, - /* 840 */ 33, 162, 35, 2, 125, 126, 127, 128, 129, 8, - /* 850 */ 9, 33, 321, 12, 13, 14, 15, 16, 329, 105, - /* 860 */ 321, 329, 321, 56, 351, 47, 329, 350, 95, 51, - /* 870 */ 341, 321, 363, 341, 56, 68, 12, 13, 341, 96, - /* 880 */ 329, 350, 162, 366, 20, 360, 22, 358, 363, 358, - /* 890 */ 358, 39, 341, 382, 363, 358, 365, 33, 0, 35, - /* 900 */ 350, 94, 363, 338, 363, 340, 329, 153, 358, 358, - /* 910 */ 329, 93, 46, 363, 96, 365, 343, 386, 341, 346, - /* 920 */ 56, 390, 341, 116, 321, 394, 395, 396, 397, 398, - /* 930 */ 399, 400, 68, 402, 0, 358, 386, 130, 131, 358, - /* 940 */ 390, 321, 329, 321, 394, 395, 396, 397, 398, 399, - /* 950 */ 400, 322, 402, 350, 341, 44, 45, 407, 94, 409, - /* 960 */ 94, 358, 329, 413, 414, 3, 363, 204, 365, 239, - /* 970 */ 240, 358, 393, 423, 341, 329, 448, 446, 447, 43, - /* 980 */ 116, 437, 175, 363, 177, 363, 35, 341, 330, 386, - /* 990 */ 321, 358, 321, 390, 130, 131, 22, 394, 395, 396, - /* 1000 */ 397, 398, 399, 400, 358, 402, 43, 200, 201, 35, - /* 1010 */ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - /* 1020 */ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - /* 1030 */ 223, 95, 363, 33, 363, 42, 43, 162, 163, 175, - /* 1040 */ 106, 177, 98, 1, 2, 101, 148, 47, 98, 260, - /* 1050 */ 447, 101, 52, 53, 54, 55, 56, 95, 95, 125, - /* 1060 */ 126, 127, 128, 129, 200, 201, 0, 203, 204, 205, - /* 1070 */ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - /* 1080 */ 216, 217, 218, 219, 220, 221, 222, 223, 18, 329, - /* 1090 */ 20, 0, 240, 93, 431, 98, 96, 27, 101, 350, - /* 1100 */ 30, 341, 8, 9, 0, 0, 12, 13, 14, 15, - /* 1110 */ 16, 98, 43, 22, 101, 94, 43, 47, 358, 49, - /* 1120 */ 35, 51, 130, 131, 330, 104, 22, 22, 177, 63, - /* 1130 */ 64, 65, 66, 67, 328, 69, 70, 71, 72, 73, - /* 1140 */ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - /* 1150 */ 84, 85, 86, 87, 88, 89, 90, 18, 158, 159, - /* 1160 */ 13, 161, 23, 93, 95, 165, 8, 9, 95, 393, - /* 1170 */ 12, 13, 14, 15, 16, 105, 37, 38, 362, 43, - /* 1180 */ 41, 181, 35, 378, 8, 9, 43, 43, 12, 13, - /* 1190 */ 14, 15, 16, 422, 43, 43, 57, 58, 59, 321, - /* 1200 */ 395, 43, 43, 133, 425, 13, 136, 137, 138, 139, - /* 1210 */ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - /* 1220 */ 150, 151, 152, 441, 154, 155, 156, 35, 350, 424, - /* 1230 */ 43, 95, 35, 94, 415, 388, 358, 61, 95, 95, - /* 1240 */ 47, 363, 243, 365, 439, 440, 95, 95, 0, 444, - /* 1250 */ 445, 173, 8, 9, 95, 329, 12, 13, 14, 15, - /* 1260 */ 16, 167, 177, 387, 386, 68, 43, 341, 390, 43, - /* 1270 */ 380, 132, 394, 395, 396, 397, 398, 399, 400, 103, - /* 1280 */ 402, 42, 95, 405, 358, 407, 408, 409, 43, 370, - /* 1290 */ 43, 413, 414, 43, 8, 9, 48, 157, 12, 13, - /* 1300 */ 14, 15, 16, 378, 20, 378, 167, 168, 169, 8, - /* 1310 */ 9, 172, 329, 12, 13, 14, 15, 16, 95, 370, - /* 1320 */ 395, 95, 395, 368, 341, 329, 370, 329, 368, 190, - /* 1330 */ 92, 329, 193, 157, 195, 196, 197, 198, 199, 95, - /* 1340 */ 95, 358, 95, 368, 335, 95, 329, 329, 20, 424, - /* 1350 */ 321, 424, 20, 323, 323, 384, 333, 263, 333, 365, - /* 1360 */ 20, 377, 20, 377, 439, 440, 439, 440, 379, 444, - /* 1370 */ 445, 444, 445, 333, 333, 329, 333, 333, 333, 350, - /* 1380 */ 241, 323, 350, 350, 350, 350, 350, 358, 350, 350, - /* 1390 */ 329, 323, 363, 321, 365, 189, 385, 350, 350, 350, - /* 1400 */ 350, 180, 331, 384, 228, 229, 230, 231, 232, 233, - /* 1410 */ 234, 235, 236, 237, 238, 386, 363, 365, 331, 390, - /* 1420 */ 383, 329, 350, 394, 395, 396, 397, 398, 399, 400, - /* 1430 */ 358, 402, 329, 377, 248, 363, 407, 365, 409, 331, - /* 1440 */ 373, 159, 413, 414, 363, 363, 363, 363, 162, 373, - /* 1450 */ 371, 363, 331, 346, 321, 331, 358, 20, 386, 363, - /* 1460 */ 249, 433, 390, 434, 363, 255, 394, 395, 396, 397, - /* 1470 */ 398, 399, 400, 393, 402, 373, 321, 363, 166, 407, - /* 1480 */ 363, 409, 393, 350, 430, 413, 414, 430, 373, 363, - /* 1490 */ 257, 358, 432, 430, 429, 423, 363, 256, 365, 244, - /* 1500 */ 388, 264, 428, 261, 427, 350, 240, 443, 449, 20, - /* 1510 */ 259, 358, 392, 358, 94, 94, 354, 442, 363, 386, - /* 1520 */ 365, 412, 340, 390, 363, 329, 378, 394, 395, 396, - /* 1530 */ 397, 398, 399, 400, 321, 402, 331, 36, 324, 323, - /* 1540 */ 407, 386, 409, 395, 381, 390, 413, 414, 376, 394, - /* 1550 */ 395, 396, 397, 398, 399, 400, 344, 402, 0, 344, - /* 1560 */ 12, 13, 407, 350, 409, 319, 344, 332, 413, 414, - /* 1570 */ 22, 358, 424, 0, 182, 0, 363, 0, 365, 42, - /* 1580 */ 0, 33, 35, 35, 194, 35, 35, 439, 440, 35, - /* 1590 */ 194, 0, 444, 445, 321, 35, 35, 194, 0, 386, - /* 1600 */ 194, 22, 0, 390, 56, 35, 0, 394, 395, 396, - /* 1610 */ 397, 398, 399, 400, 35, 402, 68, 22, 0, 177, - /* 1620 */ 407, 35, 409, 350, 175, 0, 413, 414, 0, 171, - /* 1630 */ 170, 358, 0, 0, 46, 0, 363, 0, 365, 0, - /* 1640 */ 0, 42, 0, 0, 0, 42, 0, 68, 0, 0, - /* 1650 */ 0, 148, 35, 0, 148, 321, 0, 0, 0, 386, - /* 1660 */ 0, 0, 0, 390, 116, 0, 0, 394, 395, 396, - /* 1670 */ 397, 398, 399, 400, 0, 402, 0, 0, 0, 0, - /* 1680 */ 0, 0, 409, 42, 350, 0, 413, 414, 43, 355, - /* 1690 */ 0, 0, 358, 0, 0, 116, 0, 363, 0, 365, - /* 1700 */ 0, 0, 35, 0, 22, 0, 0, 56, 56, 321, - /* 1710 */ 0, 42, 39, 14, 0, 40, 46, 46, 14, 0, - /* 1720 */ 386, 0, 39, 175, 390, 177, 0, 0, 394, 395, - /* 1730 */ 396, 397, 398, 399, 400, 166, 402, 0, 350, 0, - /* 1740 */ 0, 39, 0, 35, 47, 0, 358, 35, 200, 201, - /* 1750 */ 39, 363, 321, 365, 175, 39, 177, 62, 0, 35, - /* 1760 */ 47, 0, 214, 215, 216, 217, 218, 219, 220, 47, - /* 1770 */ 35, 39, 47, 39, 386, 0, 321, 0, 390, 200, - /* 1780 */ 201, 350, 394, 395, 396, 397, 398, 399, 400, 358, - /* 1790 */ 402, 0, 0, 22, 363, 103, 365, 409, 35, 0, - /* 1800 */ 35, 413, 414, 35, 22, 350, 22, 35, 101, 35, - /* 1810 */ 43, 35, 43, 358, 35, 35, 0, 386, 363, 22, - /* 1820 */ 365, 390, 0, 22, 0, 394, 395, 396, 397, 398, - /* 1830 */ 399, 400, 401, 402, 403, 404, 49, 22, 0, 35, - /* 1840 */ 35, 386, 321, 0, 35, 390, 0, 22, 20, 394, - /* 1850 */ 395, 396, 397, 398, 399, 400, 94, 402, 0, 95, - /* 1860 */ 0, 35, 321, 22, 409, 178, 0, 0, 159, 414, - /* 1870 */ 0, 350, 3, 0, 0, 94, 187, 162, 95, 358, - /* 1880 */ 162, 164, 162, 35, 363, 35, 365, 0, 94, 160, - /* 1890 */ 94, 350, 0, 39, 158, 46, 94, 104, 43, 358, - /* 1900 */ 43, 94, 43, 95, 363, 321, 365, 386, 224, 245, - /* 1910 */ 46, 390, 226, 94, 94, 394, 395, 396, 397, 398, - /* 1920 */ 399, 400, 95, 402, 95, 404, 95, 386, 94, 321, - /* 1930 */ 94, 390, 95, 94, 350, 394, 395, 396, 397, 398, - /* 1940 */ 399, 400, 358, 402, 43, 46, 94, 363, 95, 365, - /* 1950 */ 43, 95, 224, 3, 43, 35, 35, 35, 350, 35, - /* 1960 */ 35, 35, 46, 355, 46, 46, 358, 95, 245, 22, - /* 1970 */ 386, 363, 95, 365, 390, 245, 43, 436, 394, 395, - /* 1980 */ 396, 397, 398, 399, 400, 239, 402, 2, 200, 321, - /* 1990 */ 94, 46, 95, 95, 386, 95, 94, 94, 390, 46, - /* 2000 */ 94, 22, 394, 395, 396, 397, 398, 399, 400, 321, - /* 2010 */ 402, 94, 202, 105, 22, 35, 35, 94, 350, 35, - /* 2020 */ 106, 94, 438, 355, 95, 95, 358, 95, 94, 35, - /* 2030 */ 95, 363, 94, 365, 95, 35, 94, 35, 350, 95, - /* 2040 */ 94, 35, 43, 94, 22, 94, 358, 61, 94, 118, - /* 2050 */ 62, 363, 321, 365, 386, 118, 35, 68, 390, 118, - /* 2060 */ 35, 118, 394, 395, 396, 397, 398, 399, 400, 91, - /* 2070 */ 402, 321, 35, 35, 386, 35, 35, 35, 390, 35, - /* 2080 */ 35, 350, 394, 395, 396, 397, 398, 399, 400, 358, - /* 2090 */ 402, 35, 43, 35, 363, 35, 365, 22, 35, 22, - /* 2100 */ 350, 35, 35, 35, 68, 35, 35, 35, 358, 35, - /* 2110 */ 22, 35, 0, 363, 35, 365, 35, 386, 0, 39, - /* 2120 */ 47, 390, 35, 39, 321, 394, 395, 396, 397, 398, - /* 2130 */ 399, 400, 47, 402, 0, 35, 386, 47, 39, 0, - /* 2140 */ 390, 35, 321, 47, 394, 395, 396, 397, 398, 399, - /* 2150 */ 400, 0, 402, 350, 39, 35, 35, 0, 22, 21, - /* 2160 */ 450, 358, 22, 22, 21, 20, 363, 450, 365, 450, - /* 2170 */ 450, 350, 450, 450, 450, 450, 450, 450, 450, 358, - /* 2180 */ 450, 450, 450, 450, 363, 450, 365, 450, 450, 386, - /* 2190 */ 450, 450, 450, 390, 450, 450, 450, 394, 395, 396, - /* 2200 */ 397, 398, 399, 400, 450, 402, 321, 386, 450, 450, - /* 2210 */ 450, 390, 450, 450, 450, 394, 395, 396, 397, 398, - /* 2220 */ 399, 400, 450, 402, 450, 450, 321, 450, 450, 450, - /* 2230 */ 450, 450, 450, 450, 450, 350, 450, 450, 450, 450, - /* 2240 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 450, - /* 2250 */ 365, 450, 450, 450, 450, 350, 450, 450, 450, 450, - /* 2260 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 321, - /* 2270 */ 365, 386, 450, 450, 450, 390, 450, 450, 450, 394, - /* 2280 */ 395, 396, 397, 398, 399, 400, 450, 402, 321, 450, - /* 2290 */ 450, 386, 450, 450, 450, 390, 450, 450, 350, 394, - /* 2300 */ 395, 396, 397, 398, 399, 400, 358, 402, 450, 450, - /* 2310 */ 450, 363, 450, 365, 450, 450, 450, 350, 450, 450, - /* 2320 */ 450, 450, 450, 450, 450, 358, 450, 450, 450, 450, - /* 2330 */ 363, 321, 365, 450, 386, 450, 450, 450, 390, 450, - /* 2340 */ 450, 450, 394, 395, 396, 397, 398, 399, 400, 450, - /* 2350 */ 402, 450, 450, 386, 450, 321, 450, 390, 450, 450, - /* 2360 */ 350, 394, 395, 396, 397, 398, 399, 400, 358, 402, - /* 2370 */ 450, 450, 450, 363, 321, 365, 450, 450, 450, 450, - /* 2380 */ 450, 450, 450, 450, 350, 450, 450, 450, 450, 450, - /* 2390 */ 450, 450, 358, 450, 450, 450, 386, 363, 450, 365, - /* 2400 */ 390, 450, 450, 350, 394, 395, 396, 397, 398, 399, - /* 2410 */ 400, 358, 402, 450, 450, 450, 363, 450, 365, 450, - /* 2420 */ 386, 450, 450, 450, 390, 450, 450, 450, 394, 395, - /* 2430 */ 396, 397, 398, 399, 400, 321, 402, 450, 450, 386, - /* 2440 */ 450, 450, 450, 390, 450, 450, 450, 394, 395, 396, - /* 2450 */ 397, 398, 399, 400, 450, 402, 450, 450, 450, 450, - /* 2460 */ 450, 450, 450, 450, 350, 450, 450, 450, 450, 450, - /* 2470 */ 450, 450, 358, 450, 450, 450, 450, 363, 450, 365, - /* 2480 */ 450, 450, 450, 450, 450, 450, 450, 450, 321, 450, - /* 2490 */ 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, - /* 2500 */ 386, 450, 450, 450, 390, 450, 321, 450, 394, 395, - /* 2510 */ 396, 397, 398, 399, 400, 450, 402, 350, 450, 450, - /* 2520 */ 450, 450, 450, 450, 450, 358, 450, 450, 450, 450, - /* 2530 */ 363, 450, 365, 450, 450, 350, 450, 450, 450, 450, - /* 2540 */ 450, 450, 450, 358, 450, 450, 450, 450, 363, 450, - /* 2550 */ 365, 450, 450, 386, 450, 450, 450, 390, 450, 450, - /* 2560 */ 450, 394, 395, 396, 397, 398, 399, 400, 450, 402, - /* 2570 */ 321, 386, 450, 450, 450, 390, 450, 450, 450, 394, - /* 2580 */ 395, 396, 397, 398, 399, 400, 450, 402, 450, 450, - /* 2590 */ 321, 450, 450, 450, 450, 450, 450, 450, 450, 350, - /* 2600 */ 450, 450, 450, 450, 450, 450, 450, 358, 450, 450, - /* 2610 */ 450, 450, 363, 450, 365, 450, 450, 450, 450, 350, - /* 2620 */ 450, 450, 450, 450, 450, 450, 450, 358, 450, 450, - /* 2630 */ 450, 450, 363, 321, 365, 386, 450, 450, 450, 390, - /* 2640 */ 450, 450, 450, 394, 395, 396, 397, 398, 399, 400, - /* 2650 */ 450, 402, 321, 450, 450, 386, 450, 450, 450, 390, - /* 2660 */ 450, 450, 350, 394, 395, 396, 397, 398, 399, 400, - /* 2670 */ 358, 402, 450, 450, 450, 363, 450, 365, 450, 450, - /* 2680 */ 450, 350, 450, 450, 450, 450, 450, 450, 450, 358, - /* 2690 */ 450, 450, 450, 450, 363, 321, 365, 450, 386, 450, - /* 2700 */ 450, 450, 390, 450, 450, 450, 394, 395, 396, 397, - /* 2710 */ 398, 399, 400, 450, 402, 450, 450, 386, 450, 321, - /* 2720 */ 450, 390, 450, 450, 350, 394, 395, 396, 397, 398, - /* 2730 */ 399, 400, 358, 402, 450, 450, 450, 363, 450, 365, - /* 2740 */ 450, 450, 450, 450, 450, 450, 450, 450, 350, 450, - /* 2750 */ 450, 450, 450, 450, 450, 450, 358, 450, 450, 450, - /* 2760 */ 386, 363, 450, 365, 390, 450, 450, 450, 394, 395, - /* 2770 */ 396, 397, 398, 399, 400, 450, 402, 450, 450, 450, - /* 2780 */ 450, 450, 450, 450, 386, 450, 450, 450, 390, 450, - /* 2790 */ 450, 450, 394, 395, 396, 397, 398, 399, 400, 450, - /* 2800 */ 402, + /* 220 */ 220, 221, 222, 223, 224, 319, 98, 20, 100, 101, + /* 230 */ 399, 103, 127, 20, 176, 107, 178, 163, 327, 126, + /* 240 */ 127, 330, 242, 21, 448, 449, 24, 25, 26, 27, + /* 250 */ 28, 29, 30, 31, 32, 135, 136, 129, 57, 201, + /* 260 */ 202, 242, 204, 205, 206, 207, 208, 209, 210, 211, + /* 270 */ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + /* 280 */ 222, 223, 224, 12, 13, 242, 380, 20, 183, 184, + /* 290 */ 61, 20, 187, 22, 189, 94, 0, 184, 97, 20, + /* 300 */ 187, 322, 189, 397, 33, 397, 35, 108, 109, 110, + /* 310 */ 111, 112, 113, 114, 115, 116, 117, 118, 57, 120, + /* 320 */ 121, 122, 123, 124, 125, 226, 363, 228, 57, 366, + /* 330 */ 367, 352, 426, 62, 426, 394, 4, 14, 333, 360, + /* 340 */ 69, 12, 13, 20, 365, 0, 367, 441, 442, 20, + /* 350 */ 442, 22, 446, 447, 446, 447, 95, 61, 97, 19, + /* 360 */ 355, 95, 33, 422, 35, 201, 95, 388, 171, 39, + /* 370 */ 20, 392, 22, 33, 95, 396, 397, 398, 399, 400, + /* 380 */ 401, 402, 0, 404, 20, 35, 57, 47, 117, 192, + /* 390 */ 193, 62, 47, 53, 54, 55, 56, 57, 69, 4, + /* 400 */ 50, 35, 131, 132, 226, 426, 24, 25, 26, 27, + /* 410 */ 28, 29, 30, 31, 32, 251, 252, 253, 254, 255, + /* 420 */ 441, 442, 352, 69, 95, 446, 447, 95, 322, 359, + /* 430 */ 163, 64, 65, 66, 94, 69, 14, 97, 368, 72, + /* 440 */ 73, 175, 20, 177, 77, 78, 117, 176, 69, 178, + /* 450 */ 83, 84, 380, 0, 20, 20, 89, 360, 8, 9, + /* 460 */ 131, 132, 12, 13, 14, 15, 16, 397, 371, 397, + /* 470 */ 130, 365, 201, 202, 353, 204, 205, 206, 207, 208, + /* 480 */ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + /* 490 */ 219, 220, 221, 222, 223, 224, 426, 226, 426, 352, + /* 500 */ 412, 413, 162, 242, 353, 176, 359, 178, 242, 353, + /* 510 */ 333, 441, 442, 441, 442, 368, 446, 447, 446, 447, + /* 520 */ 180, 242, 182, 57, 347, 366, 367, 322, 205, 95, + /* 530 */ 201, 202, 355, 204, 205, 206, 207, 208, 209, 210, + /* 540 */ 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + /* 550 */ 221, 222, 223, 224, 12, 13, 3, 352, 338, 339, + /* 560 */ 107, 344, 20, 97, 22, 360, 131, 132, 161, 352, + /* 570 */ 365, 241, 367, 20, 242, 33, 360, 35, 361, 126, + /* 580 */ 127, 128, 129, 130, 8, 9, 322, 371, 12, 13, + /* 590 */ 14, 15, 16, 388, 408, 330, 410, 392, 20, 57, + /* 600 */ 22, 396, 397, 398, 399, 400, 401, 402, 343, 404, + /* 610 */ 352, 69, 12, 13, 14, 158, 352, 359, 168, 21, + /* 620 */ 20, 357, 22, 330, 360, 360, 368, 205, 50, 365, + /* 630 */ 353, 367, 34, 33, 36, 35, 343, 95, 243, 126, + /* 640 */ 8, 9, 437, 438, 12, 13, 14, 15, 16, 96, + /* 650 */ 344, 353, 388, 360, 247, 248, 392, 57, 352, 117, + /* 660 */ 396, 397, 398, 399, 400, 401, 402, 361, 404, 69, + /* 670 */ 12, 13, 96, 131, 132, 22, 242, 8, 9, 330, + /* 680 */ 22, 12, 13, 14, 15, 16, 229, 345, 35, 330, + /* 690 */ 348, 33, 343, 35, 2, 95, 239, 394, 185, 186, + /* 700 */ 8, 9, 343, 367, 12, 13, 14, 15, 16, 360, + /* 710 */ 394, 330, 43, 377, 264, 57, 163, 117, 176, 360, + /* 720 */ 178, 3, 69, 2, 343, 422, 22, 69, 96, 8, + /* 730 */ 9, 131, 132, 12, 13, 14, 15, 16, 422, 35, + /* 740 */ 397, 360, 407, 201, 202, 410, 204, 205, 206, 207, + /* 750 */ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + /* 760 */ 218, 219, 220, 221, 222, 223, 224, 1, 2, 426, + /* 770 */ 117, 14, 15, 16, 353, 117, 176, 107, 178, 12, + /* 780 */ 13, 14, 15, 16, 242, 442, 353, 8, 9, 446, + /* 790 */ 447, 12, 13, 14, 15, 16, 126, 127, 128, 129, + /* 800 */ 130, 201, 202, 43, 204, 205, 206, 207, 208, 209, + /* 810 */ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + /* 820 */ 220, 221, 222, 223, 224, 12, 13, 107, 330, 176, + /* 830 */ 376, 178, 378, 20, 176, 22, 178, 43, 408, 330, + /* 840 */ 410, 343, 338, 339, 384, 322, 33, 322, 35, 129, + /* 850 */ 330, 380, 343, 360, 201, 202, 96, 322, 360, 201, + /* 860 */ 202, 20, 96, 343, 371, 44, 45, 322, 397, 360, + /* 870 */ 57, 322, 341, 215, 216, 217, 218, 219, 220, 221, + /* 880 */ 360, 330, 69, 12, 13, 330, 330, 352, 365, 323, + /* 890 */ 365, 20, 380, 22, 343, 360, 0, 426, 343, 343, + /* 900 */ 365, 340, 367, 342, 33, 322, 35, 106, 95, 397, + /* 910 */ 365, 360, 441, 442, 365, 360, 360, 446, 447, 0, + /* 920 */ 376, 322, 378, 388, 322, 240, 241, 392, 57, 322, + /* 930 */ 117, 396, 397, 398, 399, 400, 401, 402, 426, 404, + /* 940 */ 69, 22, 163, 322, 131, 132, 411, 322, 365, 0, + /* 950 */ 415, 416, 330, 441, 442, 154, 322, 330, 446, 447, + /* 960 */ 64, 65, 66, 43, 365, 343, 95, 365, 72, 73, + /* 970 */ 343, 22, 365, 77, 78, 362, 395, 259, 365, 83, + /* 980 */ 84, 331, 360, 20, 33, 89, 365, 360, 117, 176, + /* 990 */ 365, 178, 380, 0, 380, 43, 322, 450, 47, 365, + /* 1000 */ 322, 322, 131, 132, 53, 54, 55, 56, 57, 397, + /* 1010 */ 362, 397, 43, 365, 201, 202, 96, 204, 205, 206, + /* 1020 */ 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + /* 1030 */ 217, 218, 219, 220, 221, 222, 223, 224, 426, 365, + /* 1040 */ 426, 352, 439, 365, 365, 94, 205, 176, 97, 178, + /* 1050 */ 361, 42, 43, 441, 442, 441, 442, 263, 446, 447, + /* 1060 */ 446, 447, 8, 9, 322, 96, 12, 13, 14, 15, + /* 1070 */ 16, 322, 201, 202, 0, 204, 205, 206, 207, 208, + /* 1080 */ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + /* 1090 */ 219, 220, 221, 222, 223, 224, 18, 0, 20, 345, + /* 1100 */ 107, 330, 348, 163, 164, 27, 330, 365, 30, 99, + /* 1110 */ 159, 160, 102, 162, 365, 99, 43, 166, 102, 126, + /* 1120 */ 127, 128, 129, 130, 322, 47, 163, 49, 43, 99, + /* 1130 */ 52, 360, 102, 182, 99, 43, 360, 102, 64, 65, + /* 1140 */ 66, 67, 68, 433, 70, 71, 72, 73, 74, 75, + /* 1150 */ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + /* 1160 */ 86, 87, 88, 89, 90, 91, 18, 365, 397, 96, + /* 1170 */ 330, 23, 94, 397, 62, 131, 132, 1, 2, 43, + /* 1180 */ 35, 96, 3, 343, 106, 37, 38, 0, 96, 41, + /* 1190 */ 419, 420, 421, 0, 423, 419, 420, 421, 43, 423, + /* 1200 */ 360, 43, 352, 43, 331, 43, 58, 59, 60, 22, + /* 1210 */ 43, 43, 134, 261, 322, 137, 138, 139, 140, 141, + /* 1220 */ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + /* 1230 */ 152, 153, 96, 155, 156, 157, 35, 329, 46, 364, + /* 1240 */ 330, 48, 330, 95, 352, 43, 149, 330, 395, 43, + /* 1250 */ 424, 96, 360, 343, 96, 343, 96, 365, 96, 367, + /* 1260 */ 343, 8, 9, 96, 96, 12, 13, 14, 15, 16, + /* 1270 */ 360, 4, 360, 95, 443, 96, 330, 360, 417, 427, + /* 1280 */ 388, 133, 397, 105, 392, 244, 19, 95, 396, 397, + /* 1290 */ 398, 399, 400, 401, 402, 35, 404, 43, 96, 390, + /* 1300 */ 33, 409, 96, 411, 47, 389, 360, 415, 416, 174, + /* 1310 */ 382, 426, 13, 201, 47, 62, 168, 169, 170, 52, + /* 1320 */ 428, 173, 42, 178, 57, 322, 441, 442, 436, 69, + /* 1330 */ 13, 446, 447, 372, 35, 158, 372, 370, 20, 191, + /* 1340 */ 372, 330, 194, 397, 196, 197, 198, 199, 200, 330, + /* 1350 */ 96, 322, 35, 370, 370, 352, 93, 104, 337, 20, + /* 1360 */ 324, 94, 330, 360, 97, 419, 420, 421, 365, 423, + /* 1370 */ 367, 324, 426, 330, 20, 330, 386, 335, 20, 178, + /* 1380 */ 367, 352, 20, 335, 379, 381, 335, 441, 442, 360, + /* 1390 */ 242, 388, 446, 447, 365, 392, 367, 379, 335, 396, + /* 1400 */ 397, 398, 399, 400, 401, 402, 335, 404, 51, 330, + /* 1410 */ 335, 158, 409, 332, 411, 335, 332, 388, 415, 416, + /* 1420 */ 324, 392, 352, 330, 352, 396, 397, 398, 399, 400, + /* 1430 */ 401, 402, 324, 404, 352, 352, 190, 387, 409, 436, + /* 1440 */ 411, 352, 352, 352, 415, 416, 352, 352, 386, 333, + /* 1450 */ 352, 352, 365, 181, 425, 367, 333, 330, 330, 333, + /* 1460 */ 249, 385, 160, 322, 333, 379, 365, 365, 365, 365, + /* 1470 */ 348, 365, 333, 360, 20, 375, 365, 250, 432, 365, + /* 1480 */ 375, 432, 229, 230, 231, 232, 233, 234, 235, 236, + /* 1490 */ 237, 238, 239, 352, 373, 375, 256, 365, 365, 375, + /* 1500 */ 435, 360, 395, 365, 395, 167, 365, 258, 367, 257, + /* 1510 */ 245, 434, 265, 262, 445, 451, 260, 241, 20, 390, + /* 1520 */ 95, 360, 95, 342, 394, 356, 330, 333, 365, 388, + /* 1530 */ 322, 36, 325, 392, 324, 383, 346, 396, 397, 398, + /* 1540 */ 399, 400, 401, 402, 378, 404, 346, 432, 431, 430, + /* 1550 */ 409, 414, 411, 334, 429, 346, 415, 416, 320, 0, + /* 1560 */ 352, 0, 444, 183, 0, 0, 425, 42, 360, 35, + /* 1570 */ 195, 35, 35, 365, 0, 367, 35, 195, 0, 35, + /* 1580 */ 35, 195, 0, 195, 322, 0, 35, 0, 22, 0, + /* 1590 */ 35, 178, 176, 0, 0, 172, 388, 171, 0, 0, + /* 1600 */ 392, 0, 46, 0, 396, 397, 398, 399, 400, 401, + /* 1610 */ 402, 0, 404, 42, 352, 0, 0, 409, 0, 411, + /* 1620 */ 149, 42, 360, 415, 416, 0, 0, 365, 0, 367, + /* 1630 */ 0, 0, 35, 425, 0, 149, 0, 0, 322, 0, + /* 1640 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* 1650 */ 388, 0, 0, 0, 392, 42, 0, 0, 396, 397, + /* 1660 */ 398, 399, 400, 401, 402, 0, 404, 0, 352, 0, + /* 1670 */ 0, 409, 22, 411, 57, 0, 360, 415, 416, 0, + /* 1680 */ 0, 365, 0, 367, 57, 0, 0, 14, 0, 35, + /* 1690 */ 14, 322, 63, 167, 0, 0, 0, 42, 39, 0, + /* 1700 */ 0, 43, 40, 39, 388, 0, 46, 46, 392, 0, + /* 1710 */ 39, 0, 396, 397, 398, 399, 400, 401, 402, 35, + /* 1720 */ 404, 352, 39, 0, 47, 409, 35, 411, 47, 360, + /* 1730 */ 0, 415, 416, 0, 365, 0, 367, 39, 35, 35, + /* 1740 */ 47, 39, 0, 0, 322, 39, 0, 35, 47, 22, + /* 1750 */ 0, 35, 35, 22, 35, 35, 43, 388, 43, 35, + /* 1760 */ 35, 392, 22, 35, 0, 396, 397, 398, 399, 400, + /* 1770 */ 401, 402, 104, 404, 352, 22, 0, 22, 409, 0, + /* 1780 */ 411, 49, 360, 22, 415, 416, 35, 365, 0, 367, + /* 1790 */ 0, 102, 35, 35, 0, 22, 0, 20, 163, 0, + /* 1800 */ 35, 179, 22, 96, 0, 322, 0, 0, 3, 95, + /* 1810 */ 388, 0, 0, 95, 392, 0, 35, 96, 396, 397, + /* 1820 */ 398, 399, 400, 401, 402, 0, 404, 35, 165, 322, + /* 1830 */ 39, 95, 160, 411, 95, 352, 95, 415, 416, 105, + /* 1840 */ 43, 163, 246, 360, 46, 43, 159, 95, 365, 225, + /* 1850 */ 367, 43, 96, 163, 188, 95, 43, 225, 161, 352, + /* 1860 */ 227, 43, 96, 96, 95, 46, 96, 360, 96, 95, + /* 1870 */ 46, 388, 365, 95, 367, 392, 3, 95, 95, 396, + /* 1880 */ 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + /* 1890 */ 43, 322, 35, 35, 35, 388, 96, 96, 35, 392, + /* 1900 */ 35, 35, 46, 396, 397, 398, 399, 400, 401, 402, + /* 1910 */ 96, 404, 96, 43, 46, 46, 2, 22, 411, 96, + /* 1920 */ 46, 352, 95, 416, 95, 46, 95, 201, 96, 360, + /* 1930 */ 96, 95, 95, 22, 365, 96, 367, 95, 35, 106, + /* 1940 */ 203, 96, 322, 35, 95, 35, 96, 95, 35, 96, + /* 1950 */ 95, 35, 35, 22, 246, 95, 246, 388, 96, 119, + /* 1960 */ 96, 392, 240, 119, 35, 396, 397, 398, 399, 400, + /* 1970 */ 401, 402, 352, 404, 22, 406, 43, 95, 95, 107, + /* 1980 */ 360, 95, 95, 63, 62, 365, 119, 367, 35, 35, + /* 1990 */ 119, 35, 35, 35, 35, 35, 322, 35, 35, 35, + /* 2000 */ 35, 69, 35, 22, 92, 35, 22, 35, 388, 43, + /* 2010 */ 35, 35, 392, 69, 322, 35, 396, 397, 398, 399, + /* 2020 */ 400, 401, 402, 35, 404, 35, 352, 35, 35, 22, + /* 2030 */ 35, 0, 35, 39, 360, 0, 47, 35, 47, 365, + /* 2040 */ 39, 367, 0, 35, 352, 47, 0, 35, 39, 39, + /* 2050 */ 47, 0, 360, 35, 35, 0, 22, 365, 438, 367, + /* 2060 */ 21, 452, 388, 22, 20, 22, 392, 452, 21, 452, + /* 2070 */ 396, 397, 398, 399, 400, 401, 402, 452, 404, 452, + /* 2080 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 2090 */ 398, 399, 400, 401, 402, 452, 404, 322, 452, 452, + /* 2100 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2110 */ 452, 452, 452, 452, 440, 452, 452, 452, 452, 452, + /* 2120 */ 452, 452, 452, 452, 452, 452, 452, 352, 452, 452, + /* 2130 */ 452, 452, 357, 452, 452, 360, 452, 452, 452, 452, + /* 2140 */ 365, 449, 367, 452, 452, 452, 452, 452, 452, 452, + /* 2150 */ 452, 452, 322, 452, 452, 452, 452, 452, 452, 452, + /* 2160 */ 452, 452, 452, 388, 452, 452, 452, 392, 452, 452, + /* 2170 */ 452, 396, 397, 398, 399, 400, 401, 402, 452, 404, + /* 2180 */ 452, 452, 352, 452, 452, 452, 452, 357, 452, 452, + /* 2190 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 2200 */ 452, 452, 452, 322, 452, 452, 452, 452, 452, 452, + /* 2210 */ 452, 452, 452, 452, 452, 452, 452, 452, 388, 452, + /* 2220 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 2230 */ 400, 401, 402, 352, 404, 452, 452, 452, 452, 452, + /* 2240 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2250 */ 452, 452, 452, 452, 452, 452, 452, 322, 452, 452, + /* 2260 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2270 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2280 */ 399, 400, 401, 402, 452, 404, 452, 352, 452, 452, + /* 2290 */ 452, 452, 452, 452, 452, 360, 452, 452, 452, 452, + /* 2300 */ 365, 452, 367, 452, 452, 452, 452, 452, 322, 452, + /* 2310 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2320 */ 452, 452, 452, 388, 452, 452, 452, 392, 452, 452, + /* 2330 */ 452, 396, 397, 398, 399, 400, 401, 402, 352, 404, + /* 2340 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2350 */ 452, 365, 452, 367, 452, 452, 452, 452, 452, 452, + /* 2360 */ 452, 452, 322, 452, 452, 452, 452, 452, 452, 452, + /* 2370 */ 452, 452, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2380 */ 322, 452, 396, 397, 398, 399, 400, 401, 402, 452, + /* 2390 */ 404, 452, 352, 452, 452, 452, 452, 452, 452, 452, + /* 2400 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 2410 */ 352, 452, 452, 452, 452, 452, 452, 452, 360, 452, + /* 2420 */ 452, 452, 452, 365, 452, 367, 452, 452, 388, 452, + /* 2430 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 2440 */ 400, 401, 402, 452, 404, 452, 388, 452, 452, 452, + /* 2450 */ 392, 452, 452, 452, 396, 397, 398, 399, 400, 401, + /* 2460 */ 402, 452, 404, 322, 452, 452, 452, 452, 452, 452, + /* 2470 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2480 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2490 */ 452, 452, 452, 352, 452, 452, 452, 452, 452, 452, + /* 2500 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2510 */ 452, 452, 452, 452, 452, 452, 452, 452, 322, 452, + /* 2520 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2530 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2540 */ 399, 400, 401, 402, 452, 404, 452, 452, 352, 452, + /* 2550 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2560 */ 452, 365, 452, 367, 452, 452, 452, 452, 452, 322, + /* 2570 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2580 */ 452, 452, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2590 */ 452, 452, 396, 397, 398, 399, 400, 401, 402, 352, + /* 2600 */ 404, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 2610 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 2620 */ 452, 452, 452, 322, 452, 452, 452, 452, 452, 452, + /* 2630 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 2640 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 2650 */ 452, 404, 452, 352, 452, 452, 452, 452, 452, 452, + /* 2660 */ 452, 360, 452, 452, 452, 452, 365, 452, 367, 452, + /* 2670 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 2680 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 388, + /* 2690 */ 452, 452, 452, 392, 452, 452, 452, 396, 397, 398, + /* 2700 */ 399, 400, 401, 402, 352, 404, 452, 452, 452, 452, + /* 2710 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 2720 */ 452, 452, 452, 452, 452, 452, 452, 452, 322, 452, + /* 2730 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2740 */ 388, 452, 452, 452, 392, 452, 322, 452, 396, 397, + /* 2750 */ 398, 399, 400, 401, 402, 452, 404, 452, 352, 452, + /* 2760 */ 452, 452, 452, 452, 452, 452, 360, 452, 452, 452, + /* 2770 */ 452, 365, 452, 367, 452, 452, 352, 452, 452, 452, + /* 2780 */ 452, 452, 452, 452, 360, 452, 452, 452, 452, 365, + /* 2790 */ 452, 367, 452, 452, 388, 452, 452, 452, 392, 452, + /* 2800 */ 452, 452, 396, 397, 398, 399, 400, 401, 402, 452, + /* 2810 */ 404, 452, 388, 452, 452, 452, 392, 452, 452, 452, + /* 2820 */ 396, 397, 398, 399, 400, 401, 402, 452, 404, 322, + /* 2830 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2840 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2850 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 352, + /* 2860 */ 452, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 2870 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 2880 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 2890 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 2900 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 2910 */ 452, 404, 452, 452, 352, 452, 452, 452, 452, 452, + /* 2920 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 2930 */ 452, 452, 452, 452, 452, 322, 452, 452, 452, 452, + /* 2940 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 2950 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 2960 */ 398, 399, 400, 401, 402, 352, 404, 452, 452, 452, + /* 2970 */ 452, 452, 452, 360, 452, 452, 452, 452, 365, 452, + /* 2980 */ 367, 452, 452, 452, 452, 452, 452, 452, 452, 322, + /* 2990 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3000 */ 452, 388, 452, 452, 452, 392, 452, 452, 452, 396, + /* 3010 */ 397, 398, 399, 400, 401, 402, 452, 404, 452, 352, + /* 3020 */ 452, 452, 452, 452, 452, 452, 452, 360, 452, 452, + /* 3030 */ 452, 452, 365, 452, 367, 452, 452, 452, 452, 452, + /* 3040 */ 322, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3050 */ 452, 452, 452, 452, 452, 388, 452, 452, 452, 392, + /* 3060 */ 452, 452, 452, 396, 397, 398, 399, 400, 401, 402, + /* 3070 */ 352, 404, 452, 452, 452, 452, 452, 452, 360, 452, + /* 3080 */ 452, 452, 452, 365, 452, 367, 452, 452, 452, 452, + /* 3090 */ 452, 452, 452, 452, 322, 452, 452, 452, 452, 452, + /* 3100 */ 452, 452, 452, 452, 452, 452, 388, 452, 452, 452, + /* 3110 */ 392, 452, 322, 452, 396, 397, 398, 399, 400, 401, + /* 3120 */ 402, 452, 404, 452, 352, 452, 452, 452, 452, 452, + /* 3130 */ 452, 452, 360, 452, 452, 452, 452, 365, 452, 367, + /* 3140 */ 452, 452, 352, 452, 452, 452, 452, 452, 452, 452, + /* 3150 */ 360, 452, 452, 452, 452, 365, 452, 367, 452, 452, + /* 3160 */ 388, 452, 452, 452, 392, 452, 452, 452, 396, 397, + /* 3170 */ 398, 399, 400, 401, 402, 452, 404, 452, 388, 452, + /* 3180 */ 452, 452, 392, 452, 452, 452, 396, 397, 398, 399, + /* 3190 */ 400, 401, 402, 452, 404, 322, 452, 452, 452, 452, + /* 3200 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3210 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3220 */ 452, 452, 452, 452, 452, 352, 452, 452, 452, 452, + /* 3230 */ 452, 452, 452, 360, 452, 452, 452, 452, 365, 452, + /* 3240 */ 367, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3250 */ 322, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3260 */ 452, 388, 452, 452, 452, 392, 452, 452, 452, 396, + /* 3270 */ 397, 398, 399, 400, 401, 402, 452, 404, 452, 452, + /* 3280 */ 352, 452, 452, 452, 452, 452, 452, 452, 360, 452, + /* 3290 */ 452, 452, 452, 365, 452, 367, 452, 452, 452, 452, + /* 3300 */ 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + /* 3310 */ 452, 452, 452, 452, 452, 452, 388, 452, 452, 452, + /* 3320 */ 392, 452, 452, 452, 396, 397, 398, 399, 400, 401, + /* 3330 */ 402, 452, 404, }; -#define YY_SHIFT_COUNT (698) +#define YY_SHIFT_COUNT (700) #define YY_SHIFT_MIN (0) -#define YY_SHIFT_MAX (2157) +#define YY_SHIFT_MAX (2055) static const unsigned short int yy_shift_ofst[] = { - /* 0 */ 1139, 0, 57, 269, 57, 326, 326, 326, 538, 326, - /* 10 */ 326, 326, 326, 326, 595, 807, 807, 864, 807, 807, - /* 20 */ 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, - /* 30 */ 807, 807, 807, 807, 807, 807, 807, 807, 807, 807, - /* 40 */ 807, 807, 807, 807, 807, 807, 12, 53, 88, 4, - /* 50 */ 196, 80, 130, 80, 88, 88, 1548, 1548, 80, 1548, - /* 60 */ 1548, 408, 80, 115, 115, 1, 1, 8, 115, 115, - /* 70 */ 115, 115, 115, 115, 115, 115, 115, 115, 112, 115, - /* 80 */ 115, 115, 156, 115, 115, 176, 115, 115, 176, 381, - /* 90 */ 115, 176, 176, 176, 115, 180, 1070, 1176, 1176, 166, - /* 100 */ 403, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, - /* 110 */ 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, - /* 120 */ 491, 679, 8, 486, 486, 226, 323, 518, 270, 270, - /* 130 */ 293, 293, 293, 323, 386, 386, 386, 321, 156, 19, - /* 140 */ 19, 76, 176, 176, 527, 527, 321, 548, 400, 400, - /* 150 */ 400, 400, 400, 400, 400, 264, 504, 137, 720, 1094, - /* 160 */ 198, 67, 167, 83, 433, 134, 911, 313, 666, 730, - /* 170 */ 852, 107, 730, 993, 521, 763, 999, 1193, 1078, 1239, - /* 180 */ 1239, 1140, 1284, 1284, 1239, 1140, 1140, 1238, 1284, 1284, - /* 190 */ 1284, 1328, 1328, 1332, 112, 156, 112, 1340, 1342, 112, - /* 200 */ 1340, 112, 112, 112, 1284, 112, 1328, 176, 176, 176, - /* 210 */ 176, 176, 176, 176, 176, 176, 176, 176, 1284, 1328, - /* 220 */ 527, 1206, 1332, 180, 1221, 156, 180, 1284, 1284, 1340, - /* 230 */ 180, 1186, 527, 527, 527, 527, 1186, 527, 1282, 180, - /* 240 */ 321, 180, 386, 1437, 1437, 527, 1211, 1186, 527, 527, - /* 250 */ 1211, 1186, 527, 527, 176, 1210, 1312, 1211, 1233, 1241, - /* 260 */ 1255, 999, 1237, 1242, 1251, 1266, 386, 1489, 1420, 1421, - /* 270 */ 527, 548, 1284, 180, 1501, 1328, 2801, 2801, 2801, 2801, - /* 280 */ 2801, 2801, 2801, 1066, 1000, 436, 818, 773, 1158, 1244, - /* 290 */ 50, 841, 1286, 665, 1301, 1301, 1301, 1301, 1301, 1301, - /* 300 */ 1301, 1301, 1301, 934, 719, 124, 373, 11, 11, 192, - /* 310 */ 542, 101, 311, 168, 15, 729, 336, 15, 15, 15, - /* 320 */ 936, 505, 974, 754, 898, 944, 950, 997, 1013, 1091, - /* 330 */ 1104, 1105, 783, 875, 963, 1069, 1073, 1136, 1143, 1144, - /* 340 */ 1151, 992, 789, 327, 1042, 1152, 951, 1085, 410, 1159, - /* 350 */ 962, 866, 1187, 1223, 1226, 1245, 1247, 1250, 1021, 1147, - /* 360 */ 1192, 1197, 1248, 1558, 1573, 1392, 1575, 1577, 1537, 1580, - /* 370 */ 1547, 1390, 1550, 1551, 1554, 1396, 1591, 1560, 1561, 1403, - /* 380 */ 1598, 1406, 1602, 1570, 1606, 1595, 1618, 1586, 1442, 1449, - /* 390 */ 1625, 1628, 1458, 1460, 1632, 1633, 1588, 1635, 1637, 1639, - /* 400 */ 1599, 1640, 1642, 1643, 1603, 1644, 1646, 1648, 1649, 1650, - /* 410 */ 1503, 1617, 1653, 1506, 1656, 1657, 1658, 1660, 1661, 1662, - /* 420 */ 1665, 1666, 1674, 1676, 1677, 1678, 1679, 1680, 1681, 1641, - /* 430 */ 1685, 1690, 1691, 1693, 1694, 1682, 1696, 1698, 1700, 1701, - /* 440 */ 1667, 1703, 1651, 1705, 1652, 1706, 1710, 1669, 1673, 1645, - /* 450 */ 1699, 1670, 1704, 1671, 1714, 1675, 1683, 1719, 1721, 1726, - /* 460 */ 1702, 1569, 1727, 1737, 1739, 1695, 1740, 1742, 1708, 1697, - /* 470 */ 1711, 1745, 1712, 1713, 1716, 1758, 1724, 1722, 1732, 1761, - /* 480 */ 1735, 1725, 1734, 1775, 1777, 1791, 1792, 1692, 1707, 1763, - /* 490 */ 1771, 1799, 1765, 1768, 1782, 1772, 1774, 1767, 1769, 1776, - /* 500 */ 1779, 1784, 1780, 1816, 1797, 1822, 1801, 1787, 1824, 1815, - /* 510 */ 1804, 1838, 1805, 1843, 1809, 1846, 1825, 1828, 1764, 1762, - /* 520 */ 1858, 1715, 1826, 1860, 1687, 1841, 1718, 1709, 1866, 1867, - /* 530 */ 1720, 1717, 1869, 1870, 1873, 1874, 1781, 1783, 1848, 1850, - /* 540 */ 1689, 1887, 1794, 1729, 1796, 1892, 1854, 1736, 1802, 1793, - /* 550 */ 1849, 1855, 1684, 1686, 1728, 1857, 1664, 1807, 1808, 1819, - /* 560 */ 1827, 1829, 1820, 1859, 1831, 1834, 1836, 1839, 1837, 1901, - /* 570 */ 1864, 1899, 1852, 1907, 1723, 1853, 1856, 1950, 1911, 1730, - /* 580 */ 1920, 1921, 1922, 1924, 1925, 1926, 1872, 1877, 1916, 1746, - /* 590 */ 1933, 1918, 1919, 1985, 1947, 1788, 1896, 1897, 1902, 1898, - /* 600 */ 1903, 1900, 1945, 1906, 1917, 1953, 1929, 1979, 1810, 1923, - /* 610 */ 1908, 1930, 1980, 1981, 1927, 1932, 1984, 1934, 1935, 1994, - /* 620 */ 1938, 1939, 2000, 1942, 1944, 2002, 1946, 1931, 1937, 1941, - /* 630 */ 1943, 1992, 1914, 1949, 1951, 2006, 1954, 1999, 1999, 2022, - /* 640 */ 1988, 1986, 2021, 2025, 2037, 2038, 2040, 2041, 2042, 2044, - /* 650 */ 2045, 2056, 1989, 1978, 2049, 2058, 2060, 2075, 2063, 2077, - /* 660 */ 2066, 2067, 2068, 2036, 1767, 2070, 1769, 2071, 2072, 2074, - /* 670 */ 2076, 2088, 2079, 2112, 2081, 2073, 2080, 2118, 2087, 2085, - /* 680 */ 2084, 2134, 2100, 2090, 2099, 2139, 2106, 2096, 2115, 2151, - /* 690 */ 2120, 2121, 2157, 2136, 2138, 2140, 2141, 2143, 2145, + /* 0 */ 1148, 0, 58, 271, 58, 329, 329, 329, 542, 329, + /* 10 */ 329, 329, 329, 329, 600, 813, 813, 871, 813, 813, + /* 20 */ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, + /* 30 */ 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, + /* 40 */ 813, 813, 813, 813, 813, 813, 279, 434, 8, 266, + /* 50 */ 261, 19, 43, 19, 8, 8, 658, 658, 19, 658, + /* 60 */ 658, 332, 19, 16, 16, 14, 14, 435, 16, 16, + /* 70 */ 16, 16, 16, 16, 16, 16, 16, 16, 20, 16, + /* 80 */ 16, 16, 41, 16, 16, 207, 16, 16, 207, 213, + /* 90 */ 16, 207, 207, 207, 16, 229, 1078, 1253, 1253, 367, + /* 100 */ 222, 653, 653, 653, 653, 653, 653, 653, 653, 653, + /* 110 */ 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + /* 120 */ 128, 553, 435, 137, 137, 126, 366, 296, 99, 99, + /* 130 */ 267, 267, 267, 366, 364, 364, 364, 27, 41, 10, + /* 140 */ 10, 178, 207, 207, 354, 354, 27, 379, 199, 199, + /* 150 */ 199, 199, 199, 199, 199, 340, 896, 21, 74, 450, + /* 160 */ 164, 350, 407, 323, 422, 578, 821, 720, 963, 685, + /* 170 */ 330, 718, 685, 1009, 395, 841, 1041, 1257, 1135, 1280, + /* 180 */ 1280, 1177, 1318, 1318, 1280, 1177, 1177, 1263, 1318, 1318, + /* 190 */ 1318, 1339, 1339, 1354, 20, 41, 20, 1358, 1362, 20, + /* 200 */ 1358, 20, 20, 20, 1318, 20, 1357, 1357, 1339, 207, + /* 210 */ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, + /* 220 */ 1318, 1339, 354, 1246, 1354, 229, 1272, 41, 229, 1318, + /* 230 */ 1318, 1358, 229, 1211, 354, 354, 354, 354, 1211, 354, + /* 240 */ 1302, 229, 27, 229, 364, 1454, 1454, 354, 1227, 1211, + /* 250 */ 354, 354, 1227, 1211, 354, 354, 207, 1240, 1338, 1227, + /* 260 */ 1249, 1252, 1265, 1041, 1247, 1251, 1256, 1276, 364, 1498, + /* 270 */ 1425, 1427, 354, 379, 1318, 229, 1495, 1339, 3333, 3333, + /* 280 */ 3333, 3333, 3333, 3333, 3333, 1074, 951, 382, 1267, 576, + /* 290 */ 669, 632, 692, 721, 779, 453, 1054, 1054, 1054, 1054, + /* 300 */ 1054, 1054, 1054, 1054, 1054, 993, 670, 105, 113, 767, + /* 310 */ 767, 197, 201, 120, 598, 513, 757, 766, 457, 757, + /* 320 */ 757, 757, 760, 345, 704, 801, 1097, 1010, 1016, 1030, + /* 330 */ 1035, 919, 949, 1187, 466, 940, 920, 969, 1073, 1085, + /* 340 */ 1092, 1136, 1155, 1044, 952, 794, 1176, 1158, 1145, 1201, + /* 350 */ 1112, 1160, 1179, 1192, 1162, 1167, 1168, 1202, 1206, 1254, + /* 360 */ 1178, 1299, 1317, 1260, 1193, 1559, 1561, 1380, 1564, 1565, + /* 370 */ 1525, 1574, 1534, 1375, 1536, 1537, 1541, 1382, 1578, 1544, + /* 380 */ 1545, 1386, 1582, 1388, 1585, 1551, 1587, 1566, 1589, 1555, + /* 390 */ 1413, 1416, 1593, 1594, 1423, 1426, 1598, 1599, 1556, 1601, + /* 400 */ 1603, 1611, 1571, 1615, 1616, 1618, 1579, 1625, 1626, 1628, + /* 410 */ 1630, 1631, 1471, 1597, 1634, 1486, 1636, 1637, 1639, 1640, + /* 420 */ 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1651, + /* 430 */ 1652, 1613, 1653, 1656, 1657, 1665, 1667, 1650, 1669, 1670, + /* 440 */ 1679, 1680, 1654, 1682, 1617, 1675, 1627, 1685, 1686, 1655, + /* 450 */ 1659, 1658, 1673, 1660, 1676, 1661, 1688, 1662, 1664, 1699, + /* 460 */ 1700, 1705, 1671, 1526, 1694, 1695, 1696, 1629, 1709, 1711, + /* 470 */ 1684, 1677, 1683, 1723, 1691, 1681, 1698, 1730, 1703, 1693, + /* 480 */ 1702, 1733, 1704, 1701, 1706, 1735, 1742, 1743, 1746, 1668, + /* 490 */ 1689, 1712, 1727, 1750, 1716, 1717, 1731, 1719, 1720, 1713, + /* 500 */ 1715, 1724, 1725, 1740, 1728, 1764, 1753, 1776, 1755, 1732, + /* 510 */ 1779, 1761, 1751, 1788, 1757, 1790, 1758, 1794, 1773, 1777, + /* 520 */ 1707, 1714, 1796, 1635, 1765, 1799, 1622, 1780, 1678, 1672, + /* 530 */ 1804, 1806, 1690, 1663, 1805, 1807, 1811, 1812, 1718, 1721, + /* 540 */ 1781, 1792, 1666, 1815, 1736, 1697, 1739, 1825, 1791, 1687, + /* 550 */ 1741, 1734, 1798, 1797, 1624, 1633, 1632, 1802, 1596, 1752, + /* 560 */ 1756, 1760, 1766, 1767, 1769, 1808, 1770, 1774, 1778, 1782, + /* 570 */ 1772, 1813, 1819, 1824, 1783, 1818, 1708, 1800, 1801, 1873, + /* 580 */ 1847, 1710, 1857, 1858, 1859, 1863, 1865, 1866, 1814, 1816, + /* 590 */ 1856, 1722, 1870, 1868, 1869, 1914, 1895, 1726, 1827, 1823, + /* 600 */ 1829, 1832, 1831, 1834, 1874, 1836, 1837, 1879, 1839, 1911, + /* 610 */ 1737, 1842, 1833, 1845, 1903, 1908, 1849, 1850, 1910, 1852, + /* 620 */ 1853, 1913, 1855, 1862, 1916, 1860, 1864, 1917, 1882, 1840, + /* 630 */ 1844, 1867, 1871, 1931, 1872, 1883, 1886, 1929, 1887, 1933, + /* 640 */ 1933, 1952, 1920, 1922, 1953, 1954, 1956, 1957, 1958, 1959, + /* 650 */ 1960, 1962, 1963, 1964, 1932, 1912, 1966, 1965, 1967, 1981, + /* 660 */ 1970, 1984, 1972, 1975, 1976, 1944, 1713, 1980, 1715, 1988, + /* 670 */ 1990, 1992, 1993, 2007, 1995, 2031, 1997, 1989, 1994, 2035, + /* 680 */ 2002, 1991, 2001, 2042, 2008, 1998, 2009, 2046, 2012, 2003, + /* 690 */ 2010, 2051, 2018, 2019, 2055, 2034, 2039, 2041, 2043, 2047, + /* 700 */ 2044, }; -#define YY_REDUCE_COUNT (282) -#define YY_REDUCE_MIN (-409) -#define YY_REDUCE_MAX (2398) +#define YY_REDUCE_COUNT (284) +#define YY_REDUCE_MIN (-358) +#define YY_REDUCE_MAX (2928) static const short yy_reduce_ofst[] = { - /* 0 */ -90, -254, -314, 878, 1029, 281, 550, 1072, -22, 1133, - /* 10 */ 1155, 1213, 1273, 1388, 1431, 262, 531, 1455, 1334, 1521, - /* 20 */ 1541, 1584, 603, 1608, 1668, 1688, 1731, 1750, 1803, 1821, - /* 30 */ 1885, 1905, 1948, 1967, 2010, 2034, 2053, 2114, 2167, 2185, - /* 40 */ 2249, 2269, 2312, 2331, 2374, 2398, -29, 279, -224, 277, - /* 50 */ 805, 925, 927, 1148, -14, 289, -352, -349, -317, -342, - /* 60 */ -67, 14, 160, -102, 38, -319, -310, -212, -208, 224, - /* 70 */ 282, 292, 312, 344, 439, 529, 532, 537, -232, 551, - /* 80 */ 577, 581, -246, 613, 633, -161, 646, 760, -26, -99, - /* 90 */ 926, 220, -24, 284, 983, -98, -313, -409, -409, -31, - /* 100 */ -265, -164, -138, -119, -12, -7, 233, 236, 251, 303, - /* 110 */ 399, 406, 463, 509, 539, 541, 620, 622, 669, 671, - /* 120 */ 59, -23, -290, 237, 367, -242, 103, 356, 195, 306, - /* 130 */ -23, 193, 345, 355, -74, 409, 465, 430, 456, 390, - /* 140 */ 401, 428, -316, 517, 475, 525, 573, 565, -347, 145, - /* 150 */ 271, 291, 349, 354, 513, 511, 238, 629, 579, 528, - /* 160 */ 544, 658, 663, 749, 749, 794, 806, 816, 776, 771, - /* 170 */ 771, 782, 771, 819, 779, 749, 847, 876, 890, 919, - /* 180 */ 949, 955, 996, 998, 956, 960, 975, 1009, 1002, 1017, - /* 190 */ 1018, 1030, 1031, 971, 1023, 994, 1025, 984, 989, 1040, - /* 200 */ 986, 1041, 1043, 1044, 1046, 1045, 1058, 1032, 1033, 1034, - /* 210 */ 1035, 1036, 1038, 1039, 1047, 1048, 1049, 1050, 1061, 1068, - /* 220 */ 1053, 1011, 1019, 1071, 1037, 1052, 1087, 1092, 1103, 1056, - /* 230 */ 1108, 1067, 1081, 1082, 1083, 1084, 1076, 1088, 1079, 1121, - /* 240 */ 1107, 1124, 1098, 1080, 1089, 1096, 1054, 1102, 1101, 1114, - /* 250 */ 1057, 1115, 1117, 1126, 749, 1028, 1060, 1063, 1065, 1074, - /* 260 */ 1077, 1112, 1059, 1064, 1075, 771, 1153, 1120, 1109, 1162, - /* 270 */ 1161, 1182, 1196, 1205, 1214, 1216, 1163, 1172, 1212, 1215, - /* 280 */ 1222, 1235, 1246, + /* 0 */ -94, -292, 892, -230, 1003, 1029, 1141, 1208, -21, 1262, + /* 10 */ 1316, 1369, 535, 1422, 1483, 205, -204, 1507, 264, 1569, + /* 20 */ 1620, 1674, 1692, 1775, 1830, 1881, 1935, 1986, 2040, 2058, + /* 30 */ 2141, 2196, 2247, 2301, 2352, 2406, 2424, 2507, 2562, 2613, + /* 40 */ 2667, 2718, 2772, 2790, 2873, 2928, 946, 70, -276, 72, + /* 50 */ 471, 512, 612, 614, 771, 776, -328, -252, 885, -348, + /* 60 */ -325, -92, 343, -319, -214, -326, -321, -37, -305, -232, + /* 70 */ 265, 293, 349, 359, 381, 498, 509, 520, -176, 551, + /* 80 */ 555, 556, -358, 622, 840, -329, 910, 912, 147, -169, + /* 90 */ 917, 217, 258, 306, 627, 177, -205, 88, 88, -302, + /* 100 */ -224, -162, 106, 523, 525, 545, 549, 583, 599, 602, + /* 110 */ 607, 621, 625, 634, 674, 678, 679, 742, 749, 802, + /* 120 */ -350, -59, 159, -253, -89, -331, 220, 5, 186, 430, + /* 130 */ -59, 303, 316, 504, 97, 216, 493, 342, 336, 454, + /* 140 */ 544, 335, 689, -267, 613, 648, 754, 561, 121, 151, + /* 150 */ 156, 277, 298, 421, 433, 460, 531, 566, 581, 547, + /* 160 */ 603, 650, 710, 850, 850, 873, 908, 875, 853, 826, + /* 170 */ 826, 831, 826, 861, 852, 850, 909, 916, 928, 961, + /* 180 */ 964, 967, 1011, 1019, 968, 983, 984, 1021, 1032, 1043, + /* 190 */ 1045, 1036, 1047, 990, 1042, 1013, 1048, 1005, 1004, 1051, + /* 200 */ 1018, 1063, 1071, 1075, 1079, 1080, 1081, 1084, 1096, 1070, + /* 210 */ 1072, 1082, 1083, 1089, 1090, 1091, 1094, 1095, 1098, 1099, + /* 220 */ 1093, 1108, 1087, 1050, 1062, 1116, 1076, 1088, 1123, 1127, + /* 230 */ 1128, 1086, 1126, 1100, 1101, 1102, 1103, 1104, 1105, 1106, + /* 240 */ 1121, 1131, 1122, 1139, 1113, 1107, 1109, 1111, 1046, 1120, + /* 250 */ 1114, 1132, 1049, 1124, 1133, 1138, 850, 1065, 1077, 1115, + /* 260 */ 1117, 1119, 1125, 1129, 1064, 1069, 1118, 826, 1161, 1130, + /* 270 */ 1137, 1169, 1163, 1181, 1196, 1194, 1207, 1210, 1152, 1166, + /* 280 */ 1190, 1200, 1209, 1219, 1238, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 10 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 20 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 30 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 40 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 50 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 60 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 70 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1633, 1559, - /* 80 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 90 */ 1559, 1559, 1559, 1559, 1559, 1631, 1803, 1992, 1559, 1559, - /* 100 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 110 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 120 */ 1559, 2004, 1559, 1559, 1559, 1633, 1559, 1631, 1964, 1964, - /* 130 */ 2004, 2004, 2004, 1559, 1559, 1559, 1559, 1742, 1559, 1844, - /* 140 */ 1844, 1559, 1559, 1559, 1559, 1559, 1742, 1559, 1559, 1559, - /* 150 */ 1559, 1559, 1559, 1559, 1559, 1838, 1559, 1559, 2029, 2082, - /* 160 */ 1559, 1559, 2032, 1559, 1559, 1559, 1559, 1695, 2019, 1996, - /* 170 */ 2010, 2066, 1997, 1994, 2013, 1559, 2023, 1559, 1831, 1808, - /* 180 */ 1808, 1805, 1559, 1559, 1808, 1805, 1805, 1686, 1559, 1559, - /* 190 */ 1559, 1559, 1559, 1559, 1633, 1559, 1633, 1559, 1559, 1633, - /* 200 */ 1559, 1633, 1633, 1633, 1559, 1633, 1559, 1559, 1559, 1559, - /* 210 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 220 */ 1559, 1851, 1559, 1631, 1840, 1559, 1631, 1559, 1559, 1559, - /* 230 */ 1631, 2037, 1559, 1559, 1559, 1559, 2037, 1559, 1559, 1631, - /* 240 */ 1559, 1631, 1559, 1559, 1559, 1559, 2039, 2037, 1559, 1559, - /* 250 */ 2039, 2037, 1559, 1559, 1559, 2051, 2047, 2039, 2055, 2053, - /* 260 */ 2025, 2023, 2085, 2072, 2068, 2010, 1559, 1559, 1559, 1711, - /* 270 */ 1559, 1559, 1559, 1631, 1591, 1559, 1833, 1844, 1745, 1745, - /* 280 */ 1745, 1634, 1564, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 290 */ 1559, 1559, 1559, 1559, 1920, 1559, 2050, 2049, 1968, 1967, - /* 300 */ 1966, 1957, 1919, 1559, 1707, 1559, 1559, 1918, 1917, 1559, - /* 310 */ 1559, 1559, 1559, 1559, 1911, 1559, 1559, 1912, 1910, 1909, - /* 320 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 330 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 340 */ 1559, 1559, 2069, 2073, 1993, 1559, 1559, 1559, 1559, 1559, - /* 350 */ 1902, 1893, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 360 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 370 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 380 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 390 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 400 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 410 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 420 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 430 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 440 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1596, - /* 450 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 460 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 470 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 480 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 490 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1673, 1672, 1559, - /* 500 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 510 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1901, 1559, - /* 520 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 530 */ 1559, 1559, 2065, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 540 */ 1559, 1848, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 550 */ 1559, 1954, 1559, 1559, 1559, 2026, 1559, 1559, 1559, 1559, - /* 560 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 570 */ 1559, 1893, 1559, 2048, 1559, 1559, 2063, 1559, 2067, 1559, - /* 580 */ 1559, 1559, 1559, 1559, 1559, 1559, 2003, 1999, 1559, 1559, - /* 590 */ 1995, 1892, 1559, 1988, 1559, 1559, 1939, 1559, 1559, 1559, - /* 600 */ 1559, 1559, 1559, 1559, 1559, 1559, 1901, 1559, 1905, 1559, - /* 610 */ 1559, 1559, 1559, 1559, 1739, 1559, 1559, 1559, 1559, 1559, - /* 620 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1724, 1722, 1721, - /* 630 */ 1720, 1559, 1717, 1559, 1559, 1559, 1559, 1748, 1747, 1559, - /* 640 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 650 */ 1559, 1559, 1559, 1559, 1653, 1559, 1559, 1559, 1559, 1559, - /* 660 */ 1559, 1559, 1559, 1559, 1644, 1559, 1643, 1559, 1559, 1559, - /* 670 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 680 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, - /* 690 */ 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, + /* 0 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 10 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 20 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 30 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 40 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 50 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 60 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 70 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1640, 1564, + /* 80 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 90 */ 1564, 1564, 1564, 1564, 1564, 1638, 1810, 1999, 1564, 1564, + /* 100 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 110 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 120 */ 1564, 2011, 1564, 1564, 1564, 1640, 1564, 1638, 1971, 1971, + /* 130 */ 2011, 2011, 2011, 1564, 1564, 1564, 1564, 1749, 1564, 1851, + /* 140 */ 1851, 1564, 1564, 1564, 1564, 1564, 1749, 1564, 1564, 1564, + /* 150 */ 1564, 1564, 1564, 1564, 1564, 1845, 1564, 1564, 2036, 2089, + /* 160 */ 1564, 1564, 2039, 1564, 1564, 1564, 1564, 1702, 2026, 2003, + /* 170 */ 2017, 2073, 2004, 2001, 2020, 1564, 2030, 1564, 1838, 1815, + /* 180 */ 1815, 1812, 1564, 1564, 1815, 1812, 1812, 1693, 1564, 1564, + /* 190 */ 1564, 1564, 1564, 1564, 1640, 1564, 1640, 1564, 1564, 1640, + /* 200 */ 1564, 1640, 1640, 1640, 1564, 1640, 1619, 1619, 1564, 1564, + /* 210 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 220 */ 1564, 1564, 1564, 1858, 1564, 1638, 1847, 1564, 1638, 1564, + /* 230 */ 1564, 1564, 1638, 2044, 1564, 1564, 1564, 1564, 2044, 1564, + /* 240 */ 1564, 1638, 1564, 1638, 1564, 1564, 1564, 1564, 2046, 2044, + /* 250 */ 1564, 1564, 2046, 2044, 1564, 1564, 1564, 2058, 2054, 2046, + /* 260 */ 2062, 2060, 2032, 2030, 2092, 2079, 2075, 2017, 1564, 1564, + /* 270 */ 1564, 1718, 1564, 1564, 1564, 1638, 1596, 1564, 1840, 1851, + /* 280 */ 1752, 1752, 1752, 1641, 1569, 1564, 1564, 1564, 1564, 1564, + /* 290 */ 1564, 1564, 1564, 1564, 1564, 1564, 1927, 1564, 2057, 2056, + /* 300 */ 1975, 1974, 1973, 1964, 1926, 1564, 1714, 1564, 1564, 1925, + /* 310 */ 1924, 1564, 1564, 1564, 1564, 1564, 1918, 1564, 1564, 1919, + /* 320 */ 1917, 1916, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 330 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 340 */ 1564, 1564, 1564, 1564, 2076, 2080, 2000, 1564, 1564, 1564, + /* 350 */ 1564, 1564, 1909, 1900, 1564, 1564, 1564, 1564, 1564, 1564, + /* 360 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 370 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 380 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 390 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 400 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 410 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 420 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 430 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 440 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 450 */ 1564, 1601, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 460 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 470 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 480 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 490 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1680, + /* 500 */ 1679, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 510 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 520 */ 1908, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 530 */ 1564, 1564, 1564, 1564, 2072, 1564, 1564, 1564, 1564, 1564, + /* 540 */ 1564, 1564, 1564, 1855, 1564, 1564, 1564, 1564, 1564, 1564, + /* 550 */ 1564, 1564, 1564, 1961, 1564, 1564, 1564, 2033, 1564, 1564, + /* 560 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 570 */ 1564, 1564, 1564, 1900, 1564, 2055, 1564, 1564, 2070, 1564, + /* 580 */ 2074, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 2010, 2006, + /* 590 */ 1564, 1564, 2002, 1899, 1564, 1995, 1564, 1564, 1946, 1564, + /* 600 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1908, 1564, + /* 610 */ 1912, 1564, 1564, 1564, 1564, 1564, 1746, 1564, 1564, 1564, + /* 620 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1731, + /* 630 */ 1729, 1728, 1727, 1564, 1724, 1564, 1564, 1564, 1564, 1755, + /* 640 */ 1754, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 650 */ 1564, 1564, 1564, 1564, 1564, 1564, 1660, 1564, 1564, 1564, + /* 660 */ 1564, 1564, 1564, 1564, 1564, 1564, 1651, 1564, 1650, 1564, + /* 670 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 680 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 690 */ 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, + /* 700 */ 1564, }; /********** End of lemon-generated parsing tables *****************************/ @@ -1033,6 +1141,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* PORT => nothing */ 0, /* DNODES => nothing */ 0, /* NK_IPTOKEN => nothing */ + 0, /* FORCE => nothing */ 0, /* LOCAL => nothing */ 0, /* QNODE => nothing */ 0, /* BNODE => nothing */ @@ -1206,7 +1315,7 @@ static const YYCODETYPE yyFallback[] = { 0, /* COUNT => nothing */ 0, /* LAST_ROW => nothing */ 0, /* CASE => nothing */ - 265, /* END => ABORT */ + 266, /* END => ABORT */ 0, /* WHEN => nothing */ 0, /* THEN => nothing */ 0, /* ELSE => nothing */ @@ -1248,58 +1357,58 @@ static const YYCODETYPE yyFallback[] = { 0, /* ASC => nothing */ 0, /* NULLS => nothing */ 0, /* ABORT => nothing */ - 265, /* AFTER => ABORT */ - 265, /* ATTACH => ABORT */ - 265, /* BEFORE => ABORT */ - 265, /* BEGIN => ABORT */ - 265, /* BITAND => ABORT */ - 265, /* BITNOT => ABORT */ - 265, /* BITOR => ABORT */ - 265, /* BLOCKS => ABORT */ - 265, /* CHANGE => ABORT */ - 265, /* COMMA => ABORT */ - 265, /* COMPACT => ABORT */ - 265, /* CONCAT => ABORT */ - 265, /* CONFLICT => ABORT */ - 265, /* COPY => ABORT */ - 265, /* DEFERRED => ABORT */ - 265, /* DELIMITERS => ABORT */ - 265, /* DETACH => ABORT */ - 265, /* DIVIDE => ABORT */ - 265, /* DOT => ABORT */ - 265, /* EACH => ABORT */ - 265, /* FAIL => ABORT */ - 265, /* FILE => ABORT */ - 265, /* FOR => ABORT */ - 265, /* GLOB => ABORT */ - 265, /* ID => ABORT */ - 265, /* IMMEDIATE => ABORT */ - 265, /* IMPORT => ABORT */ - 265, /* INITIALLY => ABORT */ - 265, /* INSTEAD => ABORT */ - 265, /* ISNULL => ABORT */ - 265, /* KEY => ABORT */ - 265, /* MODULES => ABORT */ - 265, /* NK_BITNOT => ABORT */ - 265, /* NK_SEMI => ABORT */ - 265, /* NOTNULL => ABORT */ - 265, /* OF => ABORT */ - 265, /* PLUS => ABORT */ - 265, /* PRIVILEGE => ABORT */ - 265, /* RAISE => ABORT */ - 265, /* REPLACE => ABORT */ - 265, /* RESTRICT => ABORT */ - 265, /* ROW => ABORT */ - 265, /* SEMI => ABORT */ - 265, /* STAR => ABORT */ - 265, /* STATEMENT => ABORT */ - 265, /* STRING => ABORT */ - 265, /* TIMES => ABORT */ - 265, /* UPDATE => ABORT */ - 265, /* VALUES => ABORT */ - 265, /* VARIABLE => ABORT */ - 265, /* VIEW => ABORT */ - 265, /* WAL => ABORT */ + 266, /* AFTER => ABORT */ + 266, /* ATTACH => ABORT */ + 266, /* BEFORE => ABORT */ + 266, /* BEGIN => ABORT */ + 266, /* BITAND => ABORT */ + 266, /* BITNOT => ABORT */ + 266, /* BITOR => ABORT */ + 266, /* BLOCKS => ABORT */ + 266, /* CHANGE => ABORT */ + 266, /* COMMA => ABORT */ + 266, /* COMPACT => ABORT */ + 266, /* CONCAT => ABORT */ + 266, /* CONFLICT => ABORT */ + 266, /* COPY => ABORT */ + 266, /* DEFERRED => ABORT */ + 266, /* DELIMITERS => ABORT */ + 266, /* DETACH => ABORT */ + 266, /* DIVIDE => ABORT */ + 266, /* DOT => ABORT */ + 266, /* EACH => ABORT */ + 266, /* FAIL => ABORT */ + 266, /* FILE => ABORT */ + 266, /* FOR => ABORT */ + 266, /* GLOB => ABORT */ + 266, /* ID => ABORT */ + 266, /* IMMEDIATE => ABORT */ + 266, /* IMPORT => ABORT */ + 266, /* INITIALLY => ABORT */ + 266, /* INSTEAD => ABORT */ + 266, /* ISNULL => ABORT */ + 266, /* KEY => ABORT */ + 266, /* MODULES => ABORT */ + 266, /* NK_BITNOT => ABORT */ + 266, /* NK_SEMI => ABORT */ + 266, /* NOTNULL => ABORT */ + 266, /* OF => ABORT */ + 266, /* PLUS => ABORT */ + 266, /* PRIVILEGE => ABORT */ + 266, /* RAISE => ABORT */ + 266, /* REPLACE => ABORT */ + 266, /* RESTRICT => ABORT */ + 266, /* ROW => ABORT */ + 266, /* SEMI => ABORT */ + 266, /* STAR => ABORT */ + 266, /* STATEMENT => ABORT */ + 266, /* STRING => ABORT */ + 266, /* TIMES => ABORT */ + 266, /* UPDATE => ABORT */ + 266, /* VALUES => ABORT */ + 266, /* VARIABLE => ABORT */ + 266, /* VIEW => ABORT */ + 266, /* WAL => ABORT */ }; #endif /* YYFALLBACK */ @@ -1438,405 +1547,407 @@ static const char *const yyTokenName[] = { /* 48 */ "PORT", /* 49 */ "DNODES", /* 50 */ "NK_IPTOKEN", - /* 51 */ "LOCAL", - /* 52 */ "QNODE", - /* 53 */ "BNODE", - /* 54 */ "SNODE", - /* 55 */ "MNODE", - /* 56 */ "DATABASE", - /* 57 */ "USE", - /* 58 */ "FLUSH", - /* 59 */ "TRIM", - /* 60 */ "IF", - /* 61 */ "NOT", - /* 62 */ "EXISTS", - /* 63 */ "BUFFER", - /* 64 */ "CACHEMODEL", - /* 65 */ "CACHESIZE", - /* 66 */ "COMP", - /* 67 */ "DURATION", - /* 68 */ "NK_VARIABLE", - /* 69 */ "MAXROWS", - /* 70 */ "MINROWS", - /* 71 */ "KEEP", - /* 72 */ "PAGES", - /* 73 */ "PAGESIZE", - /* 74 */ "TSDB_PAGESIZE", - /* 75 */ "PRECISION", - /* 76 */ "REPLICA", - /* 77 */ "STRICT", - /* 78 */ "VGROUPS", - /* 79 */ "SINGLE_STABLE", - /* 80 */ "RETENTIONS", - /* 81 */ "SCHEMALESS", - /* 82 */ "WAL_LEVEL", - /* 83 */ "WAL_FSYNC_PERIOD", - /* 84 */ "WAL_RETENTION_PERIOD", - /* 85 */ "WAL_RETENTION_SIZE", - /* 86 */ "WAL_ROLL_PERIOD", - /* 87 */ "WAL_SEGMENT_SIZE", - /* 88 */ "STT_TRIGGER", - /* 89 */ "TABLE_PREFIX", - /* 90 */ "TABLE_SUFFIX", - /* 91 */ "NK_COLON", - /* 92 */ "MAX_SPEED", - /* 93 */ "TABLE", - /* 94 */ "NK_LP", - /* 95 */ "NK_RP", - /* 96 */ "STABLE", - /* 97 */ "ADD", - /* 98 */ "COLUMN", - /* 99 */ "MODIFY", - /* 100 */ "RENAME", - /* 101 */ "TAG", - /* 102 */ "SET", - /* 103 */ "NK_EQ", - /* 104 */ "USING", - /* 105 */ "TAGS", - /* 106 */ "COMMENT", - /* 107 */ "BOOL", - /* 108 */ "TINYINT", - /* 109 */ "SMALLINT", - /* 110 */ "INT", - /* 111 */ "INTEGER", - /* 112 */ "BIGINT", - /* 113 */ "FLOAT", - /* 114 */ "DOUBLE", - /* 115 */ "BINARY", - /* 116 */ "TIMESTAMP", - /* 117 */ "NCHAR", - /* 118 */ "UNSIGNED", - /* 119 */ "JSON", - /* 120 */ "VARCHAR", - /* 121 */ "MEDIUMBLOB", - /* 122 */ "BLOB", - /* 123 */ "VARBINARY", - /* 124 */ "DECIMAL", - /* 125 */ "MAX_DELAY", - /* 126 */ "WATERMARK", - /* 127 */ "ROLLUP", - /* 128 */ "TTL", - /* 129 */ "SMA", - /* 130 */ "FIRST", - /* 131 */ "LAST", - /* 132 */ "SHOW", - /* 133 */ "DATABASES", - /* 134 */ "TABLES", - /* 135 */ "STABLES", - /* 136 */ "MNODES", - /* 137 */ "QNODES", - /* 138 */ "FUNCTIONS", - /* 139 */ "INDEXES", - /* 140 */ "ACCOUNTS", - /* 141 */ "APPS", - /* 142 */ "CONNECTIONS", - /* 143 */ "LICENCES", - /* 144 */ "GRANTS", - /* 145 */ "QUERIES", - /* 146 */ "SCORES", - /* 147 */ "TOPICS", - /* 148 */ "VARIABLES", - /* 149 */ "CLUSTER", - /* 150 */ "BNODES", - /* 151 */ "SNODES", - /* 152 */ "TRANSACTIONS", - /* 153 */ "DISTRIBUTED", - /* 154 */ "CONSUMERS", - /* 155 */ "SUBSCRIPTIONS", - /* 156 */ "VNODES", - /* 157 */ "LIKE", - /* 158 */ "INDEX", - /* 159 */ "FUNCTION", - /* 160 */ "INTERVAL", - /* 161 */ "TOPIC", - /* 162 */ "AS", - /* 163 */ "WITH", - /* 164 */ "META", - /* 165 */ "CONSUMER", - /* 166 */ "GROUP", - /* 167 */ "DESC", - /* 168 */ "DESCRIBE", - /* 169 */ "RESET", - /* 170 */ "QUERY", - /* 171 */ "CACHE", - /* 172 */ "EXPLAIN", - /* 173 */ "ANALYZE", - /* 174 */ "VERBOSE", - /* 175 */ "NK_BOOL", - /* 176 */ "RATIO", - /* 177 */ "NK_FLOAT", - /* 178 */ "OUTPUTTYPE", - /* 179 */ "AGGREGATE", - /* 180 */ "BUFSIZE", - /* 181 */ "STREAM", - /* 182 */ "INTO", - /* 183 */ "TRIGGER", - /* 184 */ "AT_ONCE", - /* 185 */ "WINDOW_CLOSE", - /* 186 */ "IGNORE", - /* 187 */ "EXPIRED", - /* 188 */ "FILL_HISTORY", - /* 189 */ "SUBTABLE", - /* 190 */ "KILL", - /* 191 */ "CONNECTION", - /* 192 */ "TRANSACTION", - /* 193 */ "BALANCE", - /* 194 */ "VGROUP", - /* 195 */ "MERGE", - /* 196 */ "REDISTRIBUTE", - /* 197 */ "SPLIT", - /* 198 */ "DELETE", - /* 199 */ "INSERT", - /* 200 */ "NULL", - /* 201 */ "NK_QUESTION", - /* 202 */ "NK_ARROW", - /* 203 */ "ROWTS", - /* 204 */ "TBNAME", - /* 205 */ "QSTART", - /* 206 */ "QEND", - /* 207 */ "QDURATION", - /* 208 */ "WSTART", - /* 209 */ "WEND", - /* 210 */ "WDURATION", - /* 211 */ "IROWTS", - /* 212 */ "QTAGS", - /* 213 */ "CAST", - /* 214 */ "NOW", - /* 215 */ "TODAY", - /* 216 */ "TIMEZONE", - /* 217 */ "CLIENT_VERSION", - /* 218 */ "SERVER_VERSION", - /* 219 */ "SERVER_STATUS", - /* 220 */ "CURRENT_USER", - /* 221 */ "COUNT", - /* 222 */ "LAST_ROW", - /* 223 */ "CASE", - /* 224 */ "END", - /* 225 */ "WHEN", - /* 226 */ "THEN", - /* 227 */ "ELSE", - /* 228 */ "BETWEEN", - /* 229 */ "IS", - /* 230 */ "NK_LT", - /* 231 */ "NK_GT", - /* 232 */ "NK_LE", - /* 233 */ "NK_GE", - /* 234 */ "NK_NE", - /* 235 */ "MATCH", - /* 236 */ "NMATCH", - /* 237 */ "CONTAINS", - /* 238 */ "IN", - /* 239 */ "JOIN", - /* 240 */ "INNER", - /* 241 */ "SELECT", - /* 242 */ "DISTINCT", - /* 243 */ "WHERE", - /* 244 */ "PARTITION", - /* 245 */ "BY", - /* 246 */ "SESSION", - /* 247 */ "STATE_WINDOW", - /* 248 */ "SLIDING", - /* 249 */ "FILL", - /* 250 */ "VALUE", - /* 251 */ "NONE", - /* 252 */ "PREV", - /* 253 */ "LINEAR", - /* 254 */ "NEXT", - /* 255 */ "HAVING", - /* 256 */ "RANGE", - /* 257 */ "EVERY", - /* 258 */ "ORDER", - /* 259 */ "SLIMIT", - /* 260 */ "SOFFSET", - /* 261 */ "LIMIT", - /* 262 */ "OFFSET", - /* 263 */ "ASC", - /* 264 */ "NULLS", - /* 265 */ "ABORT", - /* 266 */ "AFTER", - /* 267 */ "ATTACH", - /* 268 */ "BEFORE", - /* 269 */ "BEGIN", - /* 270 */ "BITAND", - /* 271 */ "BITNOT", - /* 272 */ "BITOR", - /* 273 */ "BLOCKS", - /* 274 */ "CHANGE", - /* 275 */ "COMMA", - /* 276 */ "COMPACT", - /* 277 */ "CONCAT", - /* 278 */ "CONFLICT", - /* 279 */ "COPY", - /* 280 */ "DEFERRED", - /* 281 */ "DELIMITERS", - /* 282 */ "DETACH", - /* 283 */ "DIVIDE", - /* 284 */ "DOT", - /* 285 */ "EACH", - /* 286 */ "FAIL", - /* 287 */ "FILE", - /* 288 */ "FOR", - /* 289 */ "GLOB", - /* 290 */ "ID", - /* 291 */ "IMMEDIATE", - /* 292 */ "IMPORT", - /* 293 */ "INITIALLY", - /* 294 */ "INSTEAD", - /* 295 */ "ISNULL", - /* 296 */ "KEY", - /* 297 */ "MODULES", - /* 298 */ "NK_BITNOT", - /* 299 */ "NK_SEMI", - /* 300 */ "NOTNULL", - /* 301 */ "OF", - /* 302 */ "PLUS", - /* 303 */ "PRIVILEGE", - /* 304 */ "RAISE", - /* 305 */ "REPLACE", - /* 306 */ "RESTRICT", - /* 307 */ "ROW", - /* 308 */ "SEMI", - /* 309 */ "STAR", - /* 310 */ "STATEMENT", - /* 311 */ "STRING", - /* 312 */ "TIMES", - /* 313 */ "UPDATE", - /* 314 */ "VALUES", - /* 315 */ "VARIABLE", - /* 316 */ "VIEW", - /* 317 */ "WAL", - /* 318 */ "cmd", - /* 319 */ "account_options", - /* 320 */ "alter_account_options", - /* 321 */ "literal", - /* 322 */ "alter_account_option", - /* 323 */ "user_name", - /* 324 */ "sysinfo_opt", - /* 325 */ "privileges", - /* 326 */ "priv_level", - /* 327 */ "priv_type_list", - /* 328 */ "priv_type", - /* 329 */ "db_name", - /* 330 */ "dnode_endpoint", - /* 331 */ "not_exists_opt", - /* 332 */ "db_options", - /* 333 */ "exists_opt", - /* 334 */ "alter_db_options", - /* 335 */ "speed_opt", - /* 336 */ "integer_list", - /* 337 */ "variable_list", - /* 338 */ "retention_list", - /* 339 */ "alter_db_option", - /* 340 */ "retention", - /* 341 */ "full_table_name", - /* 342 */ "column_def_list", - /* 343 */ "tags_def_opt", - /* 344 */ "table_options", - /* 345 */ "multi_create_clause", - /* 346 */ "tags_def", - /* 347 */ "multi_drop_clause", - /* 348 */ "alter_table_clause", - /* 349 */ "alter_table_options", - /* 350 */ "column_name", - /* 351 */ "type_name", - /* 352 */ "signed_literal", - /* 353 */ "create_subtable_clause", - /* 354 */ "specific_cols_opt", - /* 355 */ "expression_list", - /* 356 */ "drop_table_clause", - /* 357 */ "col_name_list", - /* 358 */ "table_name", - /* 359 */ "column_def", - /* 360 */ "duration_list", - /* 361 */ "rollup_func_list", - /* 362 */ "alter_table_option", - /* 363 */ "duration_literal", - /* 364 */ "rollup_func_name", - /* 365 */ "function_name", - /* 366 */ "col_name", - /* 367 */ "db_name_cond_opt", - /* 368 */ "like_pattern_opt", - /* 369 */ "table_name_cond", - /* 370 */ "from_db_opt", - /* 371 */ "index_options", - /* 372 */ "func_list", - /* 373 */ "sliding_opt", - /* 374 */ "sma_stream_opt", - /* 375 */ "func", - /* 376 */ "stream_options", - /* 377 */ "topic_name", - /* 378 */ "query_or_subquery", - /* 379 */ "cgroup_name", - /* 380 */ "analyze_opt", - /* 381 */ "explain_options", - /* 382 */ "agg_func_opt", - /* 383 */ "bufsize_opt", - /* 384 */ "stream_name", - /* 385 */ "subtable_opt", - /* 386 */ "expression", - /* 387 */ "dnode_list", - /* 388 */ "where_clause_opt", - /* 389 */ "signed", - /* 390 */ "literal_func", - /* 391 */ "literal_list", - /* 392 */ "table_alias", - /* 393 */ "column_alias", - /* 394 */ "expr_or_subquery", - /* 395 */ "subquery", - /* 396 */ "pseudo_column", - /* 397 */ "column_reference", - /* 398 */ "function_expression", - /* 399 */ "case_when_expression", - /* 400 */ "star_func", - /* 401 */ "star_func_para_list", - /* 402 */ "noarg_func", - /* 403 */ "other_para_list", - /* 404 */ "star_func_para", - /* 405 */ "when_then_list", - /* 406 */ "case_when_else_opt", - /* 407 */ "common_expression", - /* 408 */ "when_then_expr", - /* 409 */ "predicate", - /* 410 */ "compare_op", - /* 411 */ "in_op", - /* 412 */ "in_predicate_value", - /* 413 */ "boolean_value_expression", - /* 414 */ "boolean_primary", - /* 415 */ "from_clause_opt", - /* 416 */ "table_reference_list", - /* 417 */ "table_reference", - /* 418 */ "table_primary", - /* 419 */ "joined_table", - /* 420 */ "alias_opt", - /* 421 */ "parenthesized_joined_table", - /* 422 */ "join_type", - /* 423 */ "search_condition", - /* 424 */ "query_specification", - /* 425 */ "set_quantifier_opt", - /* 426 */ "select_list", - /* 427 */ "partition_by_clause_opt", - /* 428 */ "range_opt", - /* 429 */ "every_opt", - /* 430 */ "fill_opt", - /* 431 */ "twindow_clause_opt", - /* 432 */ "group_by_clause_opt", - /* 433 */ "having_clause_opt", - /* 434 */ "select_item", - /* 435 */ "partition_list", - /* 436 */ "partition_item", - /* 437 */ "fill_mode", - /* 438 */ "group_by_list", - /* 439 */ "query_expression", - /* 440 */ "query_simple", - /* 441 */ "order_by_clause_opt", - /* 442 */ "slimit_clause_opt", - /* 443 */ "limit_clause_opt", - /* 444 */ "union_query_expression", - /* 445 */ "query_simple_or_subquery", - /* 446 */ "sort_specification_list", - /* 447 */ "sort_specification", - /* 448 */ "ordering_specification_opt", - /* 449 */ "null_ordering_opt", + /* 51 */ "FORCE", + /* 52 */ "LOCAL", + /* 53 */ "QNODE", + /* 54 */ "BNODE", + /* 55 */ "SNODE", + /* 56 */ "MNODE", + /* 57 */ "DATABASE", + /* 58 */ "USE", + /* 59 */ "FLUSH", + /* 60 */ "TRIM", + /* 61 */ "IF", + /* 62 */ "NOT", + /* 63 */ "EXISTS", + /* 64 */ "BUFFER", + /* 65 */ "CACHEMODEL", + /* 66 */ "CACHESIZE", + /* 67 */ "COMP", + /* 68 */ "DURATION", + /* 69 */ "NK_VARIABLE", + /* 70 */ "MAXROWS", + /* 71 */ "MINROWS", + /* 72 */ "KEEP", + /* 73 */ "PAGES", + /* 74 */ "PAGESIZE", + /* 75 */ "TSDB_PAGESIZE", + /* 76 */ "PRECISION", + /* 77 */ "REPLICA", + /* 78 */ "STRICT", + /* 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 */ "FIRST", + /* 132 */ "LAST", + /* 133 */ "SHOW", + /* 134 */ "DATABASES", + /* 135 */ "TABLES", + /* 136 */ "STABLES", + /* 137 */ "MNODES", + /* 138 */ "QNODES", + /* 139 */ "FUNCTIONS", + /* 140 */ "INDEXES", + /* 141 */ "ACCOUNTS", + /* 142 */ "APPS", + /* 143 */ "CONNECTIONS", + /* 144 */ "LICENCES", + /* 145 */ "GRANTS", + /* 146 */ "QUERIES", + /* 147 */ "SCORES", + /* 148 */ "TOPICS", + /* 149 */ "VARIABLES", + /* 150 */ "CLUSTER", + /* 151 */ "BNODES", + /* 152 */ "SNODES", + /* 153 */ "TRANSACTIONS", + /* 154 */ "DISTRIBUTED", + /* 155 */ "CONSUMERS", + /* 156 */ "SUBSCRIPTIONS", + /* 157 */ "VNODES", + /* 158 */ "LIKE", + /* 159 */ "INDEX", + /* 160 */ "FUNCTION", + /* 161 */ "INTERVAL", + /* 162 */ "TOPIC", + /* 163 */ "AS", + /* 164 */ "WITH", + /* 165 */ "META", + /* 166 */ "CONSUMER", + /* 167 */ "GROUP", + /* 168 */ "DESC", + /* 169 */ "DESCRIBE", + /* 170 */ "RESET", + /* 171 */ "QUERY", + /* 172 */ "CACHE", + /* 173 */ "EXPLAIN", + /* 174 */ "ANALYZE", + /* 175 */ "VERBOSE", + /* 176 */ "NK_BOOL", + /* 177 */ "RATIO", + /* 178 */ "NK_FLOAT", + /* 179 */ "OUTPUTTYPE", + /* 180 */ "AGGREGATE", + /* 181 */ "BUFSIZE", + /* 182 */ "STREAM", + /* 183 */ "INTO", + /* 184 */ "TRIGGER", + /* 185 */ "AT_ONCE", + /* 186 */ "WINDOW_CLOSE", + /* 187 */ "IGNORE", + /* 188 */ "EXPIRED", + /* 189 */ "FILL_HISTORY", + /* 190 */ "SUBTABLE", + /* 191 */ "KILL", + /* 192 */ "CONNECTION", + /* 193 */ "TRANSACTION", + /* 194 */ "BALANCE", + /* 195 */ "VGROUP", + /* 196 */ "MERGE", + /* 197 */ "REDISTRIBUTE", + /* 198 */ "SPLIT", + /* 199 */ "DELETE", + /* 200 */ "INSERT", + /* 201 */ "NULL", + /* 202 */ "NK_QUESTION", + /* 203 */ "NK_ARROW", + /* 204 */ "ROWTS", + /* 205 */ "TBNAME", + /* 206 */ "QSTART", + /* 207 */ "QEND", + /* 208 */ "QDURATION", + /* 209 */ "WSTART", + /* 210 */ "WEND", + /* 211 */ "WDURATION", + /* 212 */ "IROWTS", + /* 213 */ "QTAGS", + /* 214 */ "CAST", + /* 215 */ "NOW", + /* 216 */ "TODAY", + /* 217 */ "TIMEZONE", + /* 218 */ "CLIENT_VERSION", + /* 219 */ "SERVER_VERSION", + /* 220 */ "SERVER_STATUS", + /* 221 */ "CURRENT_USER", + /* 222 */ "COUNT", + /* 223 */ "LAST_ROW", + /* 224 */ "CASE", + /* 225 */ "END", + /* 226 */ "WHEN", + /* 227 */ "THEN", + /* 228 */ "ELSE", + /* 229 */ "BETWEEN", + /* 230 */ "IS", + /* 231 */ "NK_LT", + /* 232 */ "NK_GT", + /* 233 */ "NK_LE", + /* 234 */ "NK_GE", + /* 235 */ "NK_NE", + /* 236 */ "MATCH", + /* 237 */ "NMATCH", + /* 238 */ "CONTAINS", + /* 239 */ "IN", + /* 240 */ "JOIN", + /* 241 */ "INNER", + /* 242 */ "SELECT", + /* 243 */ "DISTINCT", + /* 244 */ "WHERE", + /* 245 */ "PARTITION", + /* 246 */ "BY", + /* 247 */ "SESSION", + /* 248 */ "STATE_WINDOW", + /* 249 */ "SLIDING", + /* 250 */ "FILL", + /* 251 */ "VALUE", + /* 252 */ "NONE", + /* 253 */ "PREV", + /* 254 */ "LINEAR", + /* 255 */ "NEXT", + /* 256 */ "HAVING", + /* 257 */ "RANGE", + /* 258 */ "EVERY", + /* 259 */ "ORDER", + /* 260 */ "SLIMIT", + /* 261 */ "SOFFSET", + /* 262 */ "LIMIT", + /* 263 */ "OFFSET", + /* 264 */ "ASC", + /* 265 */ "NULLS", + /* 266 */ "ABORT", + /* 267 */ "AFTER", + /* 268 */ "ATTACH", + /* 269 */ "BEFORE", + /* 270 */ "BEGIN", + /* 271 */ "BITAND", + /* 272 */ "BITNOT", + /* 273 */ "BITOR", + /* 274 */ "BLOCKS", + /* 275 */ "CHANGE", + /* 276 */ "COMMA", + /* 277 */ "COMPACT", + /* 278 */ "CONCAT", + /* 279 */ "CONFLICT", + /* 280 */ "COPY", + /* 281 */ "DEFERRED", + /* 282 */ "DELIMITERS", + /* 283 */ "DETACH", + /* 284 */ "DIVIDE", + /* 285 */ "DOT", + /* 286 */ "EACH", + /* 287 */ "FAIL", + /* 288 */ "FILE", + /* 289 */ "FOR", + /* 290 */ "GLOB", + /* 291 */ "ID", + /* 292 */ "IMMEDIATE", + /* 293 */ "IMPORT", + /* 294 */ "INITIALLY", + /* 295 */ "INSTEAD", + /* 296 */ "ISNULL", + /* 297 */ "KEY", + /* 298 */ "MODULES", + /* 299 */ "NK_BITNOT", + /* 300 */ "NK_SEMI", + /* 301 */ "NOTNULL", + /* 302 */ "OF", + /* 303 */ "PLUS", + /* 304 */ "PRIVILEGE", + /* 305 */ "RAISE", + /* 306 */ "REPLACE", + /* 307 */ "RESTRICT", + /* 308 */ "ROW", + /* 309 */ "SEMI", + /* 310 */ "STAR", + /* 311 */ "STATEMENT", + /* 312 */ "STRING", + /* 313 */ "TIMES", + /* 314 */ "UPDATE", + /* 315 */ "VALUES", + /* 316 */ "VARIABLE", + /* 317 */ "VIEW", + /* 318 */ "WAL", + /* 319 */ "cmd", + /* 320 */ "account_options", + /* 321 */ "alter_account_options", + /* 322 */ "literal", + /* 323 */ "alter_account_option", + /* 324 */ "user_name", + /* 325 */ "sysinfo_opt", + /* 326 */ "privileges", + /* 327 */ "priv_level", + /* 328 */ "priv_type_list", + /* 329 */ "priv_type", + /* 330 */ "db_name", + /* 331 */ "dnode_endpoint", + /* 332 */ "force_opt", + /* 333 */ "not_exists_opt", + /* 334 */ "db_options", + /* 335 */ "exists_opt", + /* 336 */ "alter_db_options", + /* 337 */ "speed_opt", + /* 338 */ "integer_list", + /* 339 */ "variable_list", + /* 340 */ "retention_list", + /* 341 */ "alter_db_option", + /* 342 */ "retention", + /* 343 */ "full_table_name", + /* 344 */ "column_def_list", + /* 345 */ "tags_def_opt", + /* 346 */ "table_options", + /* 347 */ "multi_create_clause", + /* 348 */ "tags_def", + /* 349 */ "multi_drop_clause", + /* 350 */ "alter_table_clause", + /* 351 */ "alter_table_options", + /* 352 */ "column_name", + /* 353 */ "type_name", + /* 354 */ "signed_literal", + /* 355 */ "create_subtable_clause", + /* 356 */ "specific_cols_opt", + /* 357 */ "expression_list", + /* 358 */ "drop_table_clause", + /* 359 */ "col_name_list", + /* 360 */ "table_name", + /* 361 */ "column_def", + /* 362 */ "duration_list", + /* 363 */ "rollup_func_list", + /* 364 */ "alter_table_option", + /* 365 */ "duration_literal", + /* 366 */ "rollup_func_name", + /* 367 */ "function_name", + /* 368 */ "col_name", + /* 369 */ "db_name_cond_opt", + /* 370 */ "like_pattern_opt", + /* 371 */ "table_name_cond", + /* 372 */ "from_db_opt", + /* 373 */ "index_options", + /* 374 */ "func_list", + /* 375 */ "sliding_opt", + /* 376 */ "sma_stream_opt", + /* 377 */ "func", + /* 378 */ "stream_options", + /* 379 */ "topic_name", + /* 380 */ "query_or_subquery", + /* 381 */ "cgroup_name", + /* 382 */ "analyze_opt", + /* 383 */ "explain_options", + /* 384 */ "agg_func_opt", + /* 385 */ "bufsize_opt", + /* 386 */ "stream_name", + /* 387 */ "subtable_opt", + /* 388 */ "expression", + /* 389 */ "dnode_list", + /* 390 */ "where_clause_opt", + /* 391 */ "signed", + /* 392 */ "literal_func", + /* 393 */ "literal_list", + /* 394 */ "table_alias", + /* 395 */ "column_alias", + /* 396 */ "expr_or_subquery", + /* 397 */ "subquery", + /* 398 */ "pseudo_column", + /* 399 */ "column_reference", + /* 400 */ "function_expression", + /* 401 */ "case_when_expression", + /* 402 */ "star_func", + /* 403 */ "star_func_para_list", + /* 404 */ "noarg_func", + /* 405 */ "other_para_list", + /* 406 */ "star_func_para", + /* 407 */ "when_then_list", + /* 408 */ "case_when_else_opt", + /* 409 */ "common_expression", + /* 410 */ "when_then_expr", + /* 411 */ "predicate", + /* 412 */ "compare_op", + /* 413 */ "in_op", + /* 414 */ "in_predicate_value", + /* 415 */ "boolean_value_expression", + /* 416 */ "boolean_primary", + /* 417 */ "from_clause_opt", + /* 418 */ "table_reference_list", + /* 419 */ "table_reference", + /* 420 */ "table_primary", + /* 421 */ "joined_table", + /* 422 */ "alias_opt", + /* 423 */ "parenthesized_joined_table", + /* 424 */ "join_type", + /* 425 */ "search_condition", + /* 426 */ "query_specification", + /* 427 */ "set_quantifier_opt", + /* 428 */ "select_list", + /* 429 */ "partition_by_clause_opt", + /* 430 */ "range_opt", + /* 431 */ "every_opt", + /* 432 */ "fill_opt", + /* 433 */ "twindow_clause_opt", + /* 434 */ "group_by_clause_opt", + /* 435 */ "having_clause_opt", + /* 436 */ "select_item", + /* 437 */ "partition_list", + /* 438 */ "partition_item", + /* 439 */ "fill_mode", + /* 440 */ "group_by_list", + /* 441 */ "query_expression", + /* 442 */ "query_simple", + /* 443 */ "order_by_clause_opt", + /* 444 */ "slimit_clause_opt", + /* 445 */ "limit_clause_opt", + /* 446 */ "union_query_expression", + /* 447 */ "query_simple_or_subquery", + /* 448 */ "sort_specification_list", + /* 449 */ "sort_specification", + /* 450 */ "ordering_specification_opt", + /* 451 */ "null_ordering_opt", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ @@ -1887,8 +1998,8 @@ static const char *const yyRuleName[] = { /* 40 */ "priv_level ::= db_name NK_DOT NK_STAR", /* 41 */ "cmd ::= CREATE DNODE dnode_endpoint", /* 42 */ "cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER", - /* 43 */ "cmd ::= DROP DNODE NK_INTEGER", - /* 44 */ "cmd ::= DROP DNODE dnode_endpoint", + /* 43 */ "cmd ::= DROP DNODE NK_INTEGER force_opt", + /* 44 */ "cmd ::= DROP DNODE dnode_endpoint force_opt", /* 45 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING", /* 46 */ "cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING", /* 47 */ "cmd ::= ALTER ALL DNODES NK_STRING", @@ -1896,480 +2007,482 @@ static const char *const yyRuleName[] = { /* 49 */ "dnode_endpoint ::= NK_STRING", /* 50 */ "dnode_endpoint ::= NK_ID", /* 51 */ "dnode_endpoint ::= NK_IPTOKEN", - /* 52 */ "cmd ::= ALTER LOCAL NK_STRING", - /* 53 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", - /* 54 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", - /* 55 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", - /* 56 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", - /* 57 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", - /* 58 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", - /* 59 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", - /* 60 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", - /* 61 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", - /* 62 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", - /* 63 */ "cmd ::= DROP DATABASE exists_opt db_name", - /* 64 */ "cmd ::= USE db_name", - /* 65 */ "cmd ::= ALTER DATABASE db_name alter_db_options", - /* 66 */ "cmd ::= FLUSH DATABASE db_name", - /* 67 */ "cmd ::= TRIM DATABASE db_name speed_opt", - /* 68 */ "not_exists_opt ::= IF NOT EXISTS", - /* 69 */ "not_exists_opt ::=", - /* 70 */ "exists_opt ::= IF EXISTS", - /* 71 */ "exists_opt ::=", - /* 72 */ "db_options ::=", - /* 73 */ "db_options ::= db_options BUFFER NK_INTEGER", - /* 74 */ "db_options ::= db_options CACHEMODEL NK_STRING", - /* 75 */ "db_options ::= db_options CACHESIZE NK_INTEGER", - /* 76 */ "db_options ::= db_options COMP NK_INTEGER", - /* 77 */ "db_options ::= db_options DURATION NK_INTEGER", - /* 78 */ "db_options ::= db_options DURATION NK_VARIABLE", - /* 79 */ "db_options ::= db_options MAXROWS NK_INTEGER", - /* 80 */ "db_options ::= db_options MINROWS NK_INTEGER", - /* 81 */ "db_options ::= db_options KEEP integer_list", - /* 82 */ "db_options ::= db_options KEEP variable_list", - /* 83 */ "db_options ::= db_options PAGES NK_INTEGER", - /* 84 */ "db_options ::= db_options PAGESIZE NK_INTEGER", - /* 85 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", - /* 86 */ "db_options ::= db_options PRECISION NK_STRING", - /* 87 */ "db_options ::= db_options REPLICA NK_INTEGER", - /* 88 */ "db_options ::= db_options STRICT NK_STRING", - /* 89 */ "db_options ::= db_options VGROUPS NK_INTEGER", - /* 90 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", - /* 91 */ "db_options ::= db_options RETENTIONS retention_list", - /* 92 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", - /* 93 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", - /* 94 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", - /* 95 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", - /* 96 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", - /* 97 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", - /* 98 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", - /* 99 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", - /* 100 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", - /* 101 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", - /* 102 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER", - /* 103 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER", - /* 104 */ "alter_db_options ::= alter_db_option", - /* 105 */ "alter_db_options ::= alter_db_options alter_db_option", - /* 106 */ "alter_db_option ::= BUFFER NK_INTEGER", - /* 107 */ "alter_db_option ::= CACHEMODEL NK_STRING", - /* 108 */ "alter_db_option ::= CACHESIZE NK_INTEGER", - /* 109 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", - /* 110 */ "alter_db_option ::= KEEP integer_list", - /* 111 */ "alter_db_option ::= KEEP variable_list", - /* 112 */ "alter_db_option ::= PAGES NK_INTEGER", - /* 113 */ "alter_db_option ::= REPLICA NK_INTEGER", - /* 114 */ "alter_db_option ::= STRICT NK_STRING", - /* 115 */ "alter_db_option ::= WAL_LEVEL NK_INTEGER", - /* 116 */ "alter_db_option ::= STT_TRIGGER NK_INTEGER", - /* 117 */ "integer_list ::= NK_INTEGER", - /* 118 */ "integer_list ::= integer_list NK_COMMA NK_INTEGER", - /* 119 */ "variable_list ::= NK_VARIABLE", - /* 120 */ "variable_list ::= variable_list NK_COMMA NK_VARIABLE", - /* 121 */ "retention_list ::= retention", - /* 122 */ "retention_list ::= retention_list NK_COMMA retention", - /* 123 */ "retention ::= NK_VARIABLE NK_COLON NK_VARIABLE", - /* 124 */ "speed_opt ::=", - /* 125 */ "speed_opt ::= MAX_SPEED NK_INTEGER", - /* 126 */ "cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options", - /* 127 */ "cmd ::= CREATE TABLE multi_create_clause", - /* 128 */ "cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options", - /* 129 */ "cmd ::= DROP TABLE multi_drop_clause", - /* 130 */ "cmd ::= DROP STABLE exists_opt full_table_name", - /* 131 */ "cmd ::= ALTER TABLE alter_table_clause", - /* 132 */ "cmd ::= ALTER STABLE alter_table_clause", - /* 133 */ "alter_table_clause ::= full_table_name alter_table_options", - /* 134 */ "alter_table_clause ::= full_table_name ADD COLUMN column_name type_name", - /* 135 */ "alter_table_clause ::= full_table_name DROP COLUMN column_name", - /* 136 */ "alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name", - /* 137 */ "alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name", - /* 138 */ "alter_table_clause ::= full_table_name ADD TAG column_name type_name", - /* 139 */ "alter_table_clause ::= full_table_name DROP TAG column_name", - /* 140 */ "alter_table_clause ::= full_table_name MODIFY TAG column_name type_name", - /* 141 */ "alter_table_clause ::= full_table_name RENAME TAG column_name column_name", - /* 142 */ "alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal", - /* 143 */ "multi_create_clause ::= create_subtable_clause", - /* 144 */ "multi_create_clause ::= multi_create_clause create_subtable_clause", - /* 145 */ "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", - /* 146 */ "multi_drop_clause ::= drop_table_clause", - /* 147 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause", - /* 148 */ "drop_table_clause ::= exists_opt full_table_name", - /* 149 */ "specific_cols_opt ::=", - /* 150 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP", - /* 151 */ "full_table_name ::= table_name", - /* 152 */ "full_table_name ::= db_name NK_DOT table_name", - /* 153 */ "column_def_list ::= column_def", - /* 154 */ "column_def_list ::= column_def_list NK_COMMA column_def", - /* 155 */ "column_def ::= column_name type_name", - /* 156 */ "column_def ::= column_name type_name COMMENT NK_STRING", - /* 157 */ "type_name ::= BOOL", - /* 158 */ "type_name ::= TINYINT", - /* 159 */ "type_name ::= SMALLINT", - /* 160 */ "type_name ::= INT", - /* 161 */ "type_name ::= INTEGER", - /* 162 */ "type_name ::= BIGINT", - /* 163 */ "type_name ::= FLOAT", - /* 164 */ "type_name ::= DOUBLE", - /* 165 */ "type_name ::= BINARY NK_LP NK_INTEGER NK_RP", - /* 166 */ "type_name ::= TIMESTAMP", - /* 167 */ "type_name ::= NCHAR NK_LP NK_INTEGER NK_RP", - /* 168 */ "type_name ::= TINYINT UNSIGNED", - /* 169 */ "type_name ::= SMALLINT UNSIGNED", - /* 170 */ "type_name ::= INT UNSIGNED", - /* 171 */ "type_name ::= BIGINT UNSIGNED", - /* 172 */ "type_name ::= JSON", - /* 173 */ "type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP", - /* 174 */ "type_name ::= MEDIUMBLOB", - /* 175 */ "type_name ::= BLOB", - /* 176 */ "type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP", - /* 177 */ "type_name ::= DECIMAL", - /* 178 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP", - /* 179 */ "type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP", - /* 180 */ "tags_def_opt ::=", - /* 181 */ "tags_def_opt ::= tags_def", - /* 182 */ "tags_def ::= TAGS NK_LP column_def_list NK_RP", - /* 183 */ "table_options ::=", - /* 184 */ "table_options ::= table_options COMMENT NK_STRING", - /* 185 */ "table_options ::= table_options MAX_DELAY duration_list", - /* 186 */ "table_options ::= table_options WATERMARK duration_list", - /* 187 */ "table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP", - /* 188 */ "table_options ::= table_options TTL NK_INTEGER", - /* 189 */ "table_options ::= table_options SMA NK_LP col_name_list NK_RP", - /* 190 */ "alter_table_options ::= alter_table_option", - /* 191 */ "alter_table_options ::= alter_table_options alter_table_option", - /* 192 */ "alter_table_option ::= COMMENT NK_STRING", - /* 193 */ "alter_table_option ::= TTL NK_INTEGER", - /* 194 */ "duration_list ::= duration_literal", - /* 195 */ "duration_list ::= duration_list NK_COMMA duration_literal", - /* 196 */ "rollup_func_list ::= rollup_func_name", - /* 197 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", - /* 198 */ "rollup_func_name ::= function_name", - /* 199 */ "rollup_func_name ::= FIRST", - /* 200 */ "rollup_func_name ::= LAST", - /* 201 */ "col_name_list ::= col_name", - /* 202 */ "col_name_list ::= col_name_list NK_COMMA col_name", - /* 203 */ "col_name ::= column_name", - /* 204 */ "cmd ::= SHOW DNODES", - /* 205 */ "cmd ::= SHOW USERS", - /* 206 */ "cmd ::= SHOW DATABASES", - /* 207 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", - /* 208 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", - /* 209 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", - /* 210 */ "cmd ::= SHOW MNODES", - /* 211 */ "cmd ::= SHOW QNODES", - /* 212 */ "cmd ::= SHOW FUNCTIONS", - /* 213 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", - /* 214 */ "cmd ::= SHOW STREAMS", - /* 215 */ "cmd ::= SHOW ACCOUNTS", - /* 216 */ "cmd ::= SHOW APPS", - /* 217 */ "cmd ::= SHOW CONNECTIONS", - /* 218 */ "cmd ::= SHOW LICENCES", - /* 219 */ "cmd ::= SHOW GRANTS", - /* 220 */ "cmd ::= SHOW CREATE DATABASE db_name", - /* 221 */ "cmd ::= SHOW CREATE TABLE full_table_name", - /* 222 */ "cmd ::= SHOW CREATE STABLE full_table_name", - /* 223 */ "cmd ::= SHOW QUERIES", - /* 224 */ "cmd ::= SHOW SCORES", - /* 225 */ "cmd ::= SHOW TOPICS", - /* 226 */ "cmd ::= SHOW VARIABLES", - /* 227 */ "cmd ::= SHOW CLUSTER VARIABLES", - /* 228 */ "cmd ::= SHOW LOCAL VARIABLES", - /* 229 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", - /* 230 */ "cmd ::= SHOW BNODES", - /* 231 */ "cmd ::= SHOW SNODES", - /* 232 */ "cmd ::= SHOW CLUSTER", - /* 233 */ "cmd ::= SHOW TRANSACTIONS", - /* 234 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", - /* 235 */ "cmd ::= SHOW CONSUMERS", - /* 236 */ "cmd ::= SHOW SUBSCRIPTIONS", - /* 237 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", - /* 238 */ "cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt", - /* 239 */ "cmd ::= SHOW VNODES NK_INTEGER", - /* 240 */ "cmd ::= SHOW VNODES NK_STRING", - /* 241 */ "db_name_cond_opt ::=", - /* 242 */ "db_name_cond_opt ::= db_name NK_DOT", - /* 243 */ "like_pattern_opt ::=", - /* 244 */ "like_pattern_opt ::= LIKE NK_STRING", - /* 245 */ "table_name_cond ::= table_name", - /* 246 */ "from_db_opt ::=", - /* 247 */ "from_db_opt ::= FROM db_name", - /* 248 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options", - /* 249 */ "cmd ::= DROP INDEX exists_opt full_table_name", - /* 250 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", - /* 251 */ "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", - /* 252 */ "func_list ::= func", - /* 253 */ "func_list ::= func_list NK_COMMA func", - /* 254 */ "func ::= function_name NK_LP expression_list NK_RP", - /* 255 */ "sma_stream_opt ::=", - /* 256 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", - /* 257 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", - /* 258 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", - /* 259 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", - /* 260 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", - /* 261 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", - /* 262 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", - /* 263 */ "cmd ::= DROP TOPIC exists_opt topic_name", - /* 264 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", - /* 265 */ "cmd ::= DESC full_table_name", - /* 266 */ "cmd ::= DESCRIBE full_table_name", - /* 267 */ "cmd ::= RESET QUERY CACHE", - /* 268 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", - /* 269 */ "analyze_opt ::=", - /* 270 */ "analyze_opt ::= ANALYZE", - /* 271 */ "explain_options ::=", - /* 272 */ "explain_options ::= explain_options VERBOSE NK_BOOL", - /* 273 */ "explain_options ::= explain_options RATIO NK_FLOAT", - /* 274 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", - /* 275 */ "cmd ::= DROP FUNCTION exists_opt function_name", - /* 276 */ "agg_func_opt ::=", - /* 277 */ "agg_func_opt ::= AGGREGATE", - /* 278 */ "bufsize_opt ::=", - /* 279 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", - /* 280 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery", - /* 281 */ "cmd ::= DROP STREAM exists_opt stream_name", - /* 282 */ "stream_options ::=", - /* 283 */ "stream_options ::= stream_options TRIGGER AT_ONCE", - /* 284 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", - /* 285 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", - /* 286 */ "stream_options ::= stream_options WATERMARK duration_literal", - /* 287 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", - /* 288 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", - /* 289 */ "subtable_opt ::=", - /* 290 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", - /* 291 */ "cmd ::= KILL CONNECTION NK_INTEGER", - /* 292 */ "cmd ::= KILL QUERY NK_STRING", - /* 293 */ "cmd ::= KILL TRANSACTION NK_INTEGER", - /* 294 */ "cmd ::= BALANCE VGROUP", - /* 295 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", - /* 296 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", - /* 297 */ "cmd ::= SPLIT VGROUP NK_INTEGER", - /* 298 */ "dnode_list ::= DNODE NK_INTEGER", - /* 299 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", - /* 300 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", - /* 301 */ "cmd ::= query_or_subquery", - /* 302 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", - /* 303 */ "cmd ::= INSERT INTO full_table_name query_or_subquery", - /* 304 */ "literal ::= NK_INTEGER", - /* 305 */ "literal ::= NK_FLOAT", - /* 306 */ "literal ::= NK_STRING", - /* 307 */ "literal ::= NK_BOOL", - /* 308 */ "literal ::= TIMESTAMP NK_STRING", - /* 309 */ "literal ::= duration_literal", - /* 310 */ "literal ::= NULL", - /* 311 */ "literal ::= NK_QUESTION", - /* 312 */ "duration_literal ::= NK_VARIABLE", - /* 313 */ "signed ::= NK_INTEGER", - /* 314 */ "signed ::= NK_PLUS NK_INTEGER", - /* 315 */ "signed ::= NK_MINUS NK_INTEGER", - /* 316 */ "signed ::= NK_FLOAT", - /* 317 */ "signed ::= NK_PLUS NK_FLOAT", - /* 318 */ "signed ::= NK_MINUS NK_FLOAT", - /* 319 */ "signed_literal ::= signed", - /* 320 */ "signed_literal ::= NK_STRING", - /* 321 */ "signed_literal ::= NK_BOOL", - /* 322 */ "signed_literal ::= TIMESTAMP NK_STRING", - /* 323 */ "signed_literal ::= duration_literal", - /* 324 */ "signed_literal ::= NULL", - /* 325 */ "signed_literal ::= literal_func", - /* 326 */ "signed_literal ::= NK_QUESTION", - /* 327 */ "literal_list ::= signed_literal", - /* 328 */ "literal_list ::= literal_list NK_COMMA signed_literal", - /* 329 */ "db_name ::= NK_ID", - /* 330 */ "table_name ::= NK_ID", - /* 331 */ "column_name ::= NK_ID", - /* 332 */ "function_name ::= NK_ID", - /* 333 */ "table_alias ::= NK_ID", - /* 334 */ "column_alias ::= NK_ID", - /* 335 */ "user_name ::= NK_ID", - /* 336 */ "topic_name ::= NK_ID", - /* 337 */ "stream_name ::= NK_ID", - /* 338 */ "cgroup_name ::= NK_ID", - /* 339 */ "expr_or_subquery ::= expression", - /* 340 */ "expr_or_subquery ::= subquery", - /* 341 */ "expression ::= literal", - /* 342 */ "expression ::= pseudo_column", - /* 343 */ "expression ::= column_reference", - /* 344 */ "expression ::= function_expression", - /* 345 */ "expression ::= case_when_expression", - /* 346 */ "expression ::= NK_LP expression NK_RP", - /* 347 */ "expression ::= NK_PLUS expr_or_subquery", - /* 348 */ "expression ::= NK_MINUS expr_or_subquery", - /* 349 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", - /* 350 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", - /* 351 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", - /* 352 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", - /* 353 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", - /* 354 */ "expression ::= column_reference NK_ARROW NK_STRING", - /* 355 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", - /* 356 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", - /* 357 */ "expression_list ::= expr_or_subquery", - /* 358 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", - /* 359 */ "column_reference ::= column_name", - /* 360 */ "column_reference ::= table_name NK_DOT column_name", - /* 361 */ "pseudo_column ::= ROWTS", - /* 362 */ "pseudo_column ::= TBNAME", - /* 363 */ "pseudo_column ::= table_name NK_DOT TBNAME", - /* 364 */ "pseudo_column ::= QSTART", - /* 365 */ "pseudo_column ::= QEND", - /* 366 */ "pseudo_column ::= QDURATION", - /* 367 */ "pseudo_column ::= WSTART", - /* 368 */ "pseudo_column ::= WEND", - /* 369 */ "pseudo_column ::= WDURATION", - /* 370 */ "pseudo_column ::= IROWTS", - /* 371 */ "pseudo_column ::= QTAGS", - /* 372 */ "function_expression ::= function_name NK_LP expression_list NK_RP", - /* 373 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", - /* 374 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", - /* 375 */ "function_expression ::= literal_func", - /* 376 */ "literal_func ::= noarg_func NK_LP NK_RP", - /* 377 */ "literal_func ::= NOW", - /* 378 */ "noarg_func ::= NOW", - /* 379 */ "noarg_func ::= TODAY", - /* 380 */ "noarg_func ::= TIMEZONE", - /* 381 */ "noarg_func ::= DATABASE", - /* 382 */ "noarg_func ::= CLIENT_VERSION", - /* 383 */ "noarg_func ::= SERVER_VERSION", - /* 384 */ "noarg_func ::= SERVER_STATUS", - /* 385 */ "noarg_func ::= CURRENT_USER", - /* 386 */ "noarg_func ::= USER", - /* 387 */ "star_func ::= COUNT", - /* 388 */ "star_func ::= FIRST", - /* 389 */ "star_func ::= LAST", - /* 390 */ "star_func ::= LAST_ROW", - /* 391 */ "star_func_para_list ::= NK_STAR", - /* 392 */ "star_func_para_list ::= other_para_list", - /* 393 */ "other_para_list ::= star_func_para", - /* 394 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", - /* 395 */ "star_func_para ::= expr_or_subquery", - /* 396 */ "star_func_para ::= table_name NK_DOT NK_STAR", - /* 397 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", - /* 398 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", - /* 399 */ "when_then_list ::= when_then_expr", - /* 400 */ "when_then_list ::= when_then_list when_then_expr", - /* 401 */ "when_then_expr ::= WHEN common_expression THEN common_expression", - /* 402 */ "case_when_else_opt ::=", - /* 403 */ "case_when_else_opt ::= ELSE common_expression", - /* 404 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", - /* 405 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", - /* 406 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", - /* 407 */ "predicate ::= expr_or_subquery IS NULL", - /* 408 */ "predicate ::= expr_or_subquery IS NOT NULL", - /* 409 */ "predicate ::= expr_or_subquery in_op in_predicate_value", - /* 410 */ "compare_op ::= NK_LT", - /* 411 */ "compare_op ::= NK_GT", - /* 412 */ "compare_op ::= NK_LE", - /* 413 */ "compare_op ::= NK_GE", - /* 414 */ "compare_op ::= NK_NE", - /* 415 */ "compare_op ::= NK_EQ", - /* 416 */ "compare_op ::= LIKE", - /* 417 */ "compare_op ::= NOT LIKE", - /* 418 */ "compare_op ::= MATCH", - /* 419 */ "compare_op ::= NMATCH", - /* 420 */ "compare_op ::= CONTAINS", - /* 421 */ "in_op ::= IN", - /* 422 */ "in_op ::= NOT IN", - /* 423 */ "in_predicate_value ::= NK_LP literal_list NK_RP", - /* 424 */ "boolean_value_expression ::= boolean_primary", - /* 425 */ "boolean_value_expression ::= NOT boolean_primary", - /* 426 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", - /* 427 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", - /* 428 */ "boolean_primary ::= predicate", - /* 429 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", - /* 430 */ "common_expression ::= expr_or_subquery", - /* 431 */ "common_expression ::= boolean_value_expression", - /* 432 */ "from_clause_opt ::=", - /* 433 */ "from_clause_opt ::= FROM table_reference_list", - /* 434 */ "table_reference_list ::= table_reference", - /* 435 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", - /* 436 */ "table_reference ::= table_primary", - /* 437 */ "table_reference ::= joined_table", - /* 438 */ "table_primary ::= table_name alias_opt", - /* 439 */ "table_primary ::= db_name NK_DOT table_name alias_opt", - /* 440 */ "table_primary ::= subquery alias_opt", - /* 441 */ "table_primary ::= parenthesized_joined_table", - /* 442 */ "alias_opt ::=", - /* 443 */ "alias_opt ::= table_alias", - /* 444 */ "alias_opt ::= AS table_alias", - /* 445 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", - /* 446 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", - /* 447 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", - /* 448 */ "join_type ::=", - /* 449 */ "join_type ::= INNER", - /* 450 */ "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", - /* 451 */ "set_quantifier_opt ::=", - /* 452 */ "set_quantifier_opt ::= DISTINCT", - /* 453 */ "set_quantifier_opt ::= ALL", - /* 454 */ "select_list ::= select_item", - /* 455 */ "select_list ::= select_list NK_COMMA select_item", - /* 456 */ "select_item ::= NK_STAR", - /* 457 */ "select_item ::= common_expression", - /* 458 */ "select_item ::= common_expression column_alias", - /* 459 */ "select_item ::= common_expression AS column_alias", - /* 460 */ "select_item ::= table_name NK_DOT NK_STAR", - /* 461 */ "where_clause_opt ::=", - /* 462 */ "where_clause_opt ::= WHERE search_condition", - /* 463 */ "partition_by_clause_opt ::=", - /* 464 */ "partition_by_clause_opt ::= PARTITION BY partition_list", - /* 465 */ "partition_list ::= partition_item", - /* 466 */ "partition_list ::= partition_list NK_COMMA partition_item", - /* 467 */ "partition_item ::= expr_or_subquery", - /* 468 */ "partition_item ::= expr_or_subquery column_alias", - /* 469 */ "partition_item ::= expr_or_subquery AS column_alias", - /* 470 */ "twindow_clause_opt ::=", - /* 471 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", - /* 472 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", - /* 473 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", - /* 474 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", - /* 475 */ "sliding_opt ::=", - /* 476 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", - /* 477 */ "fill_opt ::=", - /* 478 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", - /* 479 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", - /* 480 */ "fill_mode ::= NONE", - /* 481 */ "fill_mode ::= PREV", - /* 482 */ "fill_mode ::= NULL", - /* 483 */ "fill_mode ::= LINEAR", - /* 484 */ "fill_mode ::= NEXT", - /* 485 */ "group_by_clause_opt ::=", - /* 486 */ "group_by_clause_opt ::= GROUP BY group_by_list", - /* 487 */ "group_by_list ::= expr_or_subquery", - /* 488 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", - /* 489 */ "having_clause_opt ::=", - /* 490 */ "having_clause_opt ::= HAVING search_condition", - /* 491 */ "range_opt ::=", - /* 492 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", - /* 493 */ "every_opt ::=", - /* 494 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", - /* 495 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", - /* 496 */ "query_simple ::= query_specification", - /* 497 */ "query_simple ::= union_query_expression", - /* 498 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", - /* 499 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", - /* 500 */ "query_simple_or_subquery ::= query_simple", - /* 501 */ "query_simple_or_subquery ::= subquery", - /* 502 */ "query_or_subquery ::= query_expression", - /* 503 */ "query_or_subquery ::= subquery", - /* 504 */ "order_by_clause_opt ::=", - /* 505 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", - /* 506 */ "slimit_clause_opt ::=", - /* 507 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", - /* 508 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", - /* 509 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 510 */ "limit_clause_opt ::=", - /* 511 */ "limit_clause_opt ::= LIMIT NK_INTEGER", - /* 512 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", - /* 513 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", - /* 514 */ "subquery ::= NK_LP query_expression NK_RP", - /* 515 */ "subquery ::= NK_LP subquery NK_RP", - /* 516 */ "search_condition ::= common_expression", - /* 517 */ "sort_specification_list ::= sort_specification", - /* 518 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", - /* 519 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", - /* 520 */ "ordering_specification_opt ::=", - /* 521 */ "ordering_specification_opt ::= ASC", - /* 522 */ "ordering_specification_opt ::= DESC", - /* 523 */ "null_ordering_opt ::=", - /* 524 */ "null_ordering_opt ::= NULLS FIRST", - /* 525 */ "null_ordering_opt ::= NULLS LAST", + /* 52 */ "force_opt ::=", + /* 53 */ "force_opt ::= FORCE", + /* 54 */ "cmd ::= ALTER LOCAL NK_STRING", + /* 55 */ "cmd ::= ALTER LOCAL NK_STRING NK_STRING", + /* 56 */ "cmd ::= CREATE QNODE ON DNODE NK_INTEGER", + /* 57 */ "cmd ::= DROP QNODE ON DNODE NK_INTEGER", + /* 58 */ "cmd ::= CREATE BNODE ON DNODE NK_INTEGER", + /* 59 */ "cmd ::= DROP BNODE ON DNODE NK_INTEGER", + /* 60 */ "cmd ::= CREATE SNODE ON DNODE NK_INTEGER", + /* 61 */ "cmd ::= DROP SNODE ON DNODE NK_INTEGER", + /* 62 */ "cmd ::= CREATE MNODE ON DNODE NK_INTEGER", + /* 63 */ "cmd ::= DROP MNODE ON DNODE NK_INTEGER", + /* 64 */ "cmd ::= CREATE DATABASE not_exists_opt db_name db_options", + /* 65 */ "cmd ::= DROP DATABASE exists_opt db_name", + /* 66 */ "cmd ::= USE db_name", + /* 67 */ "cmd ::= ALTER DATABASE db_name alter_db_options", + /* 68 */ "cmd ::= FLUSH DATABASE db_name", + /* 69 */ "cmd ::= TRIM DATABASE db_name speed_opt", + /* 70 */ "not_exists_opt ::= IF NOT EXISTS", + /* 71 */ "not_exists_opt ::=", + /* 72 */ "exists_opt ::= IF EXISTS", + /* 73 */ "exists_opt ::=", + /* 74 */ "db_options ::=", + /* 75 */ "db_options ::= db_options BUFFER NK_INTEGER", + /* 76 */ "db_options ::= db_options CACHEMODEL NK_STRING", + /* 77 */ "db_options ::= db_options CACHESIZE NK_INTEGER", + /* 78 */ "db_options ::= db_options COMP NK_INTEGER", + /* 79 */ "db_options ::= db_options DURATION NK_INTEGER", + /* 80 */ "db_options ::= db_options DURATION NK_VARIABLE", + /* 81 */ "db_options ::= db_options MAXROWS NK_INTEGER", + /* 82 */ "db_options ::= db_options MINROWS NK_INTEGER", + /* 83 */ "db_options ::= db_options KEEP integer_list", + /* 84 */ "db_options ::= db_options KEEP variable_list", + /* 85 */ "db_options ::= db_options PAGES NK_INTEGER", + /* 86 */ "db_options ::= db_options PAGESIZE NK_INTEGER", + /* 87 */ "db_options ::= db_options TSDB_PAGESIZE NK_INTEGER", + /* 88 */ "db_options ::= db_options PRECISION NK_STRING", + /* 89 */ "db_options ::= db_options REPLICA NK_INTEGER", + /* 90 */ "db_options ::= db_options STRICT NK_STRING", + /* 91 */ "db_options ::= db_options VGROUPS NK_INTEGER", + /* 92 */ "db_options ::= db_options SINGLE_STABLE NK_INTEGER", + /* 93 */ "db_options ::= db_options RETENTIONS retention_list", + /* 94 */ "db_options ::= db_options SCHEMALESS NK_INTEGER", + /* 95 */ "db_options ::= db_options WAL_LEVEL NK_INTEGER", + /* 96 */ "db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER", + /* 97 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER", + /* 98 */ "db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER", + /* 99 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER", + /* 100 */ "db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER", + /* 101 */ "db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER", + /* 102 */ "db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER", + /* 103 */ "db_options ::= db_options STT_TRIGGER NK_INTEGER", + /* 104 */ "db_options ::= db_options TABLE_PREFIX NK_INTEGER", + /* 105 */ "db_options ::= db_options TABLE_SUFFIX NK_INTEGER", + /* 106 */ "alter_db_options ::= alter_db_option", + /* 107 */ "alter_db_options ::= alter_db_options alter_db_option", + /* 108 */ "alter_db_option ::= BUFFER NK_INTEGER", + /* 109 */ "alter_db_option ::= CACHEMODEL NK_STRING", + /* 110 */ "alter_db_option ::= CACHESIZE NK_INTEGER", + /* 111 */ "alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER", + /* 112 */ "alter_db_option ::= KEEP integer_list", + /* 113 */ "alter_db_option ::= KEEP variable_list", + /* 114 */ "alter_db_option ::= PAGES NK_INTEGER", + /* 115 */ "alter_db_option ::= REPLICA NK_INTEGER", + /* 116 */ "alter_db_option ::= STRICT NK_STRING", + /* 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 */ "alter_table_options ::= alter_table_option", + /* 193 */ "alter_table_options ::= alter_table_options alter_table_option", + /* 194 */ "alter_table_option ::= COMMENT NK_STRING", + /* 195 */ "alter_table_option ::= TTL NK_INTEGER", + /* 196 */ "duration_list ::= duration_literal", + /* 197 */ "duration_list ::= duration_list NK_COMMA duration_literal", + /* 198 */ "rollup_func_list ::= rollup_func_name", + /* 199 */ "rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name", + /* 200 */ "rollup_func_name ::= function_name", + /* 201 */ "rollup_func_name ::= FIRST", + /* 202 */ "rollup_func_name ::= LAST", + /* 203 */ "col_name_list ::= col_name", + /* 204 */ "col_name_list ::= col_name_list NK_COMMA col_name", + /* 205 */ "col_name ::= column_name", + /* 206 */ "cmd ::= SHOW DNODES", + /* 207 */ "cmd ::= SHOW USERS", + /* 208 */ "cmd ::= SHOW DATABASES", + /* 209 */ "cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt", + /* 210 */ "cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt", + /* 211 */ "cmd ::= SHOW db_name_cond_opt VGROUPS", + /* 212 */ "cmd ::= SHOW MNODES", + /* 213 */ "cmd ::= SHOW QNODES", + /* 214 */ "cmd ::= SHOW FUNCTIONS", + /* 215 */ "cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt", + /* 216 */ "cmd ::= SHOW STREAMS", + /* 217 */ "cmd ::= SHOW ACCOUNTS", + /* 218 */ "cmd ::= SHOW APPS", + /* 219 */ "cmd ::= SHOW CONNECTIONS", + /* 220 */ "cmd ::= SHOW LICENCES", + /* 221 */ "cmd ::= SHOW GRANTS", + /* 222 */ "cmd ::= SHOW CREATE DATABASE db_name", + /* 223 */ "cmd ::= SHOW CREATE TABLE full_table_name", + /* 224 */ "cmd ::= SHOW CREATE STABLE full_table_name", + /* 225 */ "cmd ::= SHOW QUERIES", + /* 226 */ "cmd ::= SHOW SCORES", + /* 227 */ "cmd ::= SHOW TOPICS", + /* 228 */ "cmd ::= SHOW VARIABLES", + /* 229 */ "cmd ::= SHOW CLUSTER VARIABLES", + /* 230 */ "cmd ::= SHOW LOCAL VARIABLES", + /* 231 */ "cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt", + /* 232 */ "cmd ::= SHOW BNODES", + /* 233 */ "cmd ::= SHOW SNODES", + /* 234 */ "cmd ::= SHOW CLUSTER", + /* 235 */ "cmd ::= SHOW TRANSACTIONS", + /* 236 */ "cmd ::= SHOW TABLE DISTRIBUTED full_table_name", + /* 237 */ "cmd ::= SHOW CONSUMERS", + /* 238 */ "cmd ::= SHOW SUBSCRIPTIONS", + /* 239 */ "cmd ::= SHOW TAGS FROM table_name_cond from_db_opt", + /* 240 */ "cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt", + /* 241 */ "cmd ::= SHOW VNODES NK_INTEGER", + /* 242 */ "cmd ::= SHOW VNODES NK_STRING", + /* 243 */ "db_name_cond_opt ::=", + /* 244 */ "db_name_cond_opt ::= db_name NK_DOT", + /* 245 */ "like_pattern_opt ::=", + /* 246 */ "like_pattern_opt ::= LIKE NK_STRING", + /* 247 */ "table_name_cond ::= table_name", + /* 248 */ "from_db_opt ::=", + /* 249 */ "from_db_opt ::= FROM db_name", + /* 250 */ "cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options", + /* 251 */ "cmd ::= DROP INDEX exists_opt full_table_name", + /* 252 */ "index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt", + /* 253 */ "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", + /* 254 */ "func_list ::= func", + /* 255 */ "func_list ::= func_list NK_COMMA func", + /* 256 */ "func ::= function_name NK_LP expression_list NK_RP", + /* 257 */ "sma_stream_opt ::=", + /* 258 */ "sma_stream_opt ::= stream_options WATERMARK duration_literal", + /* 259 */ "sma_stream_opt ::= stream_options MAX_DELAY duration_literal", + /* 260 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery", + /* 261 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name", + /* 262 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name", + /* 263 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name", + /* 264 */ "cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name", + /* 265 */ "cmd ::= DROP TOPIC exists_opt topic_name", + /* 266 */ "cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name", + /* 267 */ "cmd ::= DESC full_table_name", + /* 268 */ "cmd ::= DESCRIBE full_table_name", + /* 269 */ "cmd ::= RESET QUERY CACHE", + /* 270 */ "cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery", + /* 271 */ "analyze_opt ::=", + /* 272 */ "analyze_opt ::= ANALYZE", + /* 273 */ "explain_options ::=", + /* 274 */ "explain_options ::= explain_options VERBOSE NK_BOOL", + /* 275 */ "explain_options ::= explain_options RATIO NK_FLOAT", + /* 276 */ "cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt", + /* 277 */ "cmd ::= DROP FUNCTION exists_opt function_name", + /* 278 */ "agg_func_opt ::=", + /* 279 */ "agg_func_opt ::= AGGREGATE", + /* 280 */ "bufsize_opt ::=", + /* 281 */ "bufsize_opt ::= BUFSIZE NK_INTEGER", + /* 282 */ "cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery", + /* 283 */ "cmd ::= DROP STREAM exists_opt stream_name", + /* 284 */ "stream_options ::=", + /* 285 */ "stream_options ::= stream_options TRIGGER AT_ONCE", + /* 286 */ "stream_options ::= stream_options TRIGGER WINDOW_CLOSE", + /* 287 */ "stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal", + /* 288 */ "stream_options ::= stream_options WATERMARK duration_literal", + /* 289 */ "stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER", + /* 290 */ "stream_options ::= stream_options FILL_HISTORY NK_INTEGER", + /* 291 */ "subtable_opt ::=", + /* 292 */ "subtable_opt ::= SUBTABLE NK_LP expression NK_RP", + /* 293 */ "cmd ::= KILL CONNECTION NK_INTEGER", + /* 294 */ "cmd ::= KILL QUERY NK_STRING", + /* 295 */ "cmd ::= KILL TRANSACTION NK_INTEGER", + /* 296 */ "cmd ::= BALANCE VGROUP", + /* 297 */ "cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER", + /* 298 */ "cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list", + /* 299 */ "cmd ::= SPLIT VGROUP NK_INTEGER", + /* 300 */ "dnode_list ::= DNODE NK_INTEGER", + /* 301 */ "dnode_list ::= dnode_list DNODE NK_INTEGER", + /* 302 */ "cmd ::= DELETE FROM full_table_name where_clause_opt", + /* 303 */ "cmd ::= query_or_subquery", + /* 304 */ "cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery", + /* 305 */ "cmd ::= INSERT INTO full_table_name query_or_subquery", + /* 306 */ "literal ::= NK_INTEGER", + /* 307 */ "literal ::= NK_FLOAT", + /* 308 */ "literal ::= NK_STRING", + /* 309 */ "literal ::= NK_BOOL", + /* 310 */ "literal ::= TIMESTAMP NK_STRING", + /* 311 */ "literal ::= duration_literal", + /* 312 */ "literal ::= NULL", + /* 313 */ "literal ::= NK_QUESTION", + /* 314 */ "duration_literal ::= NK_VARIABLE", + /* 315 */ "signed ::= NK_INTEGER", + /* 316 */ "signed ::= NK_PLUS NK_INTEGER", + /* 317 */ "signed ::= NK_MINUS NK_INTEGER", + /* 318 */ "signed ::= NK_FLOAT", + /* 319 */ "signed ::= NK_PLUS NK_FLOAT", + /* 320 */ "signed ::= NK_MINUS NK_FLOAT", + /* 321 */ "signed_literal ::= signed", + /* 322 */ "signed_literal ::= NK_STRING", + /* 323 */ "signed_literal ::= NK_BOOL", + /* 324 */ "signed_literal ::= TIMESTAMP NK_STRING", + /* 325 */ "signed_literal ::= duration_literal", + /* 326 */ "signed_literal ::= NULL", + /* 327 */ "signed_literal ::= literal_func", + /* 328 */ "signed_literal ::= NK_QUESTION", + /* 329 */ "literal_list ::= signed_literal", + /* 330 */ "literal_list ::= literal_list NK_COMMA signed_literal", + /* 331 */ "db_name ::= NK_ID", + /* 332 */ "table_name ::= NK_ID", + /* 333 */ "column_name ::= NK_ID", + /* 334 */ "function_name ::= NK_ID", + /* 335 */ "table_alias ::= NK_ID", + /* 336 */ "column_alias ::= NK_ID", + /* 337 */ "user_name ::= NK_ID", + /* 338 */ "topic_name ::= NK_ID", + /* 339 */ "stream_name ::= NK_ID", + /* 340 */ "cgroup_name ::= NK_ID", + /* 341 */ "expr_or_subquery ::= expression", + /* 342 */ "expr_or_subquery ::= subquery", + /* 343 */ "expression ::= literal", + /* 344 */ "expression ::= pseudo_column", + /* 345 */ "expression ::= column_reference", + /* 346 */ "expression ::= function_expression", + /* 347 */ "expression ::= case_when_expression", + /* 348 */ "expression ::= NK_LP expression NK_RP", + /* 349 */ "expression ::= NK_PLUS expr_or_subquery", + /* 350 */ "expression ::= NK_MINUS expr_or_subquery", + /* 351 */ "expression ::= expr_or_subquery NK_PLUS expr_or_subquery", + /* 352 */ "expression ::= expr_or_subquery NK_MINUS expr_or_subquery", + /* 353 */ "expression ::= expr_or_subquery NK_STAR expr_or_subquery", + /* 354 */ "expression ::= expr_or_subquery NK_SLASH expr_or_subquery", + /* 355 */ "expression ::= expr_or_subquery NK_REM expr_or_subquery", + /* 356 */ "expression ::= column_reference NK_ARROW NK_STRING", + /* 357 */ "expression ::= expr_or_subquery NK_BITAND expr_or_subquery", + /* 358 */ "expression ::= expr_or_subquery NK_BITOR expr_or_subquery", + /* 359 */ "expression_list ::= expr_or_subquery", + /* 360 */ "expression_list ::= expression_list NK_COMMA expr_or_subquery", + /* 361 */ "column_reference ::= column_name", + /* 362 */ "column_reference ::= table_name NK_DOT column_name", + /* 363 */ "pseudo_column ::= ROWTS", + /* 364 */ "pseudo_column ::= TBNAME", + /* 365 */ "pseudo_column ::= table_name NK_DOT TBNAME", + /* 366 */ "pseudo_column ::= QSTART", + /* 367 */ "pseudo_column ::= QEND", + /* 368 */ "pseudo_column ::= QDURATION", + /* 369 */ "pseudo_column ::= WSTART", + /* 370 */ "pseudo_column ::= WEND", + /* 371 */ "pseudo_column ::= WDURATION", + /* 372 */ "pseudo_column ::= IROWTS", + /* 373 */ "pseudo_column ::= QTAGS", + /* 374 */ "function_expression ::= function_name NK_LP expression_list NK_RP", + /* 375 */ "function_expression ::= star_func NK_LP star_func_para_list NK_RP", + /* 376 */ "function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP", + /* 377 */ "function_expression ::= literal_func", + /* 378 */ "literal_func ::= noarg_func NK_LP NK_RP", + /* 379 */ "literal_func ::= NOW", + /* 380 */ "noarg_func ::= NOW", + /* 381 */ "noarg_func ::= TODAY", + /* 382 */ "noarg_func ::= TIMEZONE", + /* 383 */ "noarg_func ::= DATABASE", + /* 384 */ "noarg_func ::= CLIENT_VERSION", + /* 385 */ "noarg_func ::= SERVER_VERSION", + /* 386 */ "noarg_func ::= SERVER_STATUS", + /* 387 */ "noarg_func ::= CURRENT_USER", + /* 388 */ "noarg_func ::= USER", + /* 389 */ "star_func ::= COUNT", + /* 390 */ "star_func ::= FIRST", + /* 391 */ "star_func ::= LAST", + /* 392 */ "star_func ::= LAST_ROW", + /* 393 */ "star_func_para_list ::= NK_STAR", + /* 394 */ "star_func_para_list ::= other_para_list", + /* 395 */ "other_para_list ::= star_func_para", + /* 396 */ "other_para_list ::= other_para_list NK_COMMA star_func_para", + /* 397 */ "star_func_para ::= expr_or_subquery", + /* 398 */ "star_func_para ::= table_name NK_DOT NK_STAR", + /* 399 */ "case_when_expression ::= CASE when_then_list case_when_else_opt END", + /* 400 */ "case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END", + /* 401 */ "when_then_list ::= when_then_expr", + /* 402 */ "when_then_list ::= when_then_list when_then_expr", + /* 403 */ "when_then_expr ::= WHEN common_expression THEN common_expression", + /* 404 */ "case_when_else_opt ::=", + /* 405 */ "case_when_else_opt ::= ELSE common_expression", + /* 406 */ "predicate ::= expr_or_subquery compare_op expr_or_subquery", + /* 407 */ "predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery", + /* 408 */ "predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery", + /* 409 */ "predicate ::= expr_or_subquery IS NULL", + /* 410 */ "predicate ::= expr_or_subquery IS NOT NULL", + /* 411 */ "predicate ::= expr_or_subquery in_op in_predicate_value", + /* 412 */ "compare_op ::= NK_LT", + /* 413 */ "compare_op ::= NK_GT", + /* 414 */ "compare_op ::= NK_LE", + /* 415 */ "compare_op ::= NK_GE", + /* 416 */ "compare_op ::= NK_NE", + /* 417 */ "compare_op ::= NK_EQ", + /* 418 */ "compare_op ::= LIKE", + /* 419 */ "compare_op ::= NOT LIKE", + /* 420 */ "compare_op ::= MATCH", + /* 421 */ "compare_op ::= NMATCH", + /* 422 */ "compare_op ::= CONTAINS", + /* 423 */ "in_op ::= IN", + /* 424 */ "in_op ::= NOT IN", + /* 425 */ "in_predicate_value ::= NK_LP literal_list NK_RP", + /* 426 */ "boolean_value_expression ::= boolean_primary", + /* 427 */ "boolean_value_expression ::= NOT boolean_primary", + /* 428 */ "boolean_value_expression ::= boolean_value_expression OR boolean_value_expression", + /* 429 */ "boolean_value_expression ::= boolean_value_expression AND boolean_value_expression", + /* 430 */ "boolean_primary ::= predicate", + /* 431 */ "boolean_primary ::= NK_LP boolean_value_expression NK_RP", + /* 432 */ "common_expression ::= expr_or_subquery", + /* 433 */ "common_expression ::= boolean_value_expression", + /* 434 */ "from_clause_opt ::=", + /* 435 */ "from_clause_opt ::= FROM table_reference_list", + /* 436 */ "table_reference_list ::= table_reference", + /* 437 */ "table_reference_list ::= table_reference_list NK_COMMA table_reference", + /* 438 */ "table_reference ::= table_primary", + /* 439 */ "table_reference ::= joined_table", + /* 440 */ "table_primary ::= table_name alias_opt", + /* 441 */ "table_primary ::= db_name NK_DOT table_name alias_opt", + /* 442 */ "table_primary ::= subquery alias_opt", + /* 443 */ "table_primary ::= parenthesized_joined_table", + /* 444 */ "alias_opt ::=", + /* 445 */ "alias_opt ::= table_alias", + /* 446 */ "alias_opt ::= AS table_alias", + /* 447 */ "parenthesized_joined_table ::= NK_LP joined_table NK_RP", + /* 448 */ "parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP", + /* 449 */ "joined_table ::= table_reference join_type JOIN table_reference ON search_condition", + /* 450 */ "join_type ::=", + /* 451 */ "join_type ::= INNER", + /* 452 */ "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", + /* 453 */ "set_quantifier_opt ::=", + /* 454 */ "set_quantifier_opt ::= DISTINCT", + /* 455 */ "set_quantifier_opt ::= ALL", + /* 456 */ "select_list ::= select_item", + /* 457 */ "select_list ::= select_list NK_COMMA select_item", + /* 458 */ "select_item ::= NK_STAR", + /* 459 */ "select_item ::= common_expression", + /* 460 */ "select_item ::= common_expression column_alias", + /* 461 */ "select_item ::= common_expression AS column_alias", + /* 462 */ "select_item ::= table_name NK_DOT NK_STAR", + /* 463 */ "where_clause_opt ::=", + /* 464 */ "where_clause_opt ::= WHERE search_condition", + /* 465 */ "partition_by_clause_opt ::=", + /* 466 */ "partition_by_clause_opt ::= PARTITION BY partition_list", + /* 467 */ "partition_list ::= partition_item", + /* 468 */ "partition_list ::= partition_list NK_COMMA partition_item", + /* 469 */ "partition_item ::= expr_or_subquery", + /* 470 */ "partition_item ::= expr_or_subquery column_alias", + /* 471 */ "partition_item ::= expr_or_subquery AS column_alias", + /* 472 */ "twindow_clause_opt ::=", + /* 473 */ "twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP", + /* 474 */ "twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP", + /* 475 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt", + /* 476 */ "twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt", + /* 477 */ "sliding_opt ::=", + /* 478 */ "sliding_opt ::= SLIDING NK_LP duration_literal NK_RP", + /* 479 */ "fill_opt ::=", + /* 480 */ "fill_opt ::= FILL NK_LP fill_mode NK_RP", + /* 481 */ "fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP", + /* 482 */ "fill_mode ::= NONE", + /* 483 */ "fill_mode ::= PREV", + /* 484 */ "fill_mode ::= NULL", + /* 485 */ "fill_mode ::= LINEAR", + /* 486 */ "fill_mode ::= NEXT", + /* 487 */ "group_by_clause_opt ::=", + /* 488 */ "group_by_clause_opt ::= GROUP BY group_by_list", + /* 489 */ "group_by_list ::= expr_or_subquery", + /* 490 */ "group_by_list ::= group_by_list NK_COMMA expr_or_subquery", + /* 491 */ "having_clause_opt ::=", + /* 492 */ "having_clause_opt ::= HAVING search_condition", + /* 493 */ "range_opt ::=", + /* 494 */ "range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP", + /* 495 */ "every_opt ::=", + /* 496 */ "every_opt ::= EVERY NK_LP duration_literal NK_RP", + /* 497 */ "query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt", + /* 498 */ "query_simple ::= query_specification", + /* 499 */ "query_simple ::= union_query_expression", + /* 500 */ "union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery", + /* 501 */ "union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery", + /* 502 */ "query_simple_or_subquery ::= query_simple", + /* 503 */ "query_simple_or_subquery ::= subquery", + /* 504 */ "query_or_subquery ::= query_expression", + /* 505 */ "query_or_subquery ::= subquery", + /* 506 */ "order_by_clause_opt ::=", + /* 507 */ "order_by_clause_opt ::= ORDER BY sort_specification_list", + /* 508 */ "slimit_clause_opt ::=", + /* 509 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER", + /* 510 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER", + /* 511 */ "slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 512 */ "limit_clause_opt ::=", + /* 513 */ "limit_clause_opt ::= LIMIT NK_INTEGER", + /* 514 */ "limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER", + /* 515 */ "limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER", + /* 516 */ "subquery ::= NK_LP query_expression NK_RP", + /* 517 */ "subquery ::= NK_LP subquery NK_RP", + /* 518 */ "search_condition ::= common_expression", + /* 519 */ "sort_specification_list ::= sort_specification", + /* 520 */ "sort_specification_list ::= sort_specification_list NK_COMMA sort_specification", + /* 521 */ "sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt", + /* 522 */ "ordering_specification_opt ::=", + /* 523 */ "ordering_specification_opt ::= ASC", + /* 524 */ "ordering_specification_opt ::= DESC", + /* 525 */ "null_ordering_opt ::=", + /* 526 */ "null_ordering_opt ::= NULLS FIRST", + /* 527 */ "null_ordering_opt ::= NULLS LAST", }; #endif /* NDEBUG */ @@ -2496,190 +2609,191 @@ static void yy_destructor( */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ - case 318: /* cmd */ - case 321: /* literal */ - case 332: /* db_options */ - case 334: /* alter_db_options */ - case 340: /* retention */ - case 341: /* full_table_name */ - case 344: /* table_options */ - case 348: /* alter_table_clause */ - case 349: /* alter_table_options */ - case 352: /* signed_literal */ - case 353: /* create_subtable_clause */ - case 356: /* drop_table_clause */ - case 359: /* column_def */ - case 363: /* duration_literal */ - case 364: /* rollup_func_name */ - case 366: /* col_name */ - case 367: /* db_name_cond_opt */ - case 368: /* like_pattern_opt */ - case 369: /* table_name_cond */ - case 370: /* from_db_opt */ - case 371: /* index_options */ - case 373: /* sliding_opt */ - case 374: /* sma_stream_opt */ - case 375: /* func */ - case 376: /* stream_options */ - case 378: /* query_or_subquery */ - case 381: /* explain_options */ - case 385: /* subtable_opt */ - case 386: /* expression */ - case 388: /* where_clause_opt */ - case 389: /* signed */ - case 390: /* literal_func */ - case 394: /* expr_or_subquery */ - case 395: /* subquery */ - case 396: /* pseudo_column */ - case 397: /* column_reference */ - case 398: /* function_expression */ - case 399: /* case_when_expression */ - case 404: /* star_func_para */ - case 406: /* case_when_else_opt */ - case 407: /* common_expression */ - case 408: /* when_then_expr */ - case 409: /* predicate */ - case 412: /* in_predicate_value */ - case 413: /* boolean_value_expression */ - case 414: /* boolean_primary */ - case 415: /* from_clause_opt */ - case 416: /* table_reference_list */ - case 417: /* table_reference */ - case 418: /* table_primary */ - case 419: /* joined_table */ - case 421: /* parenthesized_joined_table */ - case 423: /* search_condition */ - case 424: /* query_specification */ - case 428: /* range_opt */ - case 429: /* every_opt */ - case 430: /* fill_opt */ - case 431: /* twindow_clause_opt */ - case 433: /* having_clause_opt */ - case 434: /* select_item */ - case 436: /* partition_item */ - case 439: /* query_expression */ - case 440: /* query_simple */ - case 442: /* slimit_clause_opt */ - case 443: /* limit_clause_opt */ - case 444: /* union_query_expression */ - case 445: /* query_simple_or_subquery */ - case 447: /* sort_specification */ + case 319: /* cmd */ + case 322: /* literal */ + case 334: /* db_options */ + case 336: /* alter_db_options */ + case 342: /* retention */ + case 343: /* full_table_name */ + case 346: /* table_options */ + case 350: /* alter_table_clause */ + case 351: /* alter_table_options */ + case 354: /* signed_literal */ + case 355: /* create_subtable_clause */ + case 358: /* drop_table_clause */ + case 361: /* column_def */ + case 365: /* duration_literal */ + case 366: /* rollup_func_name */ + case 368: /* col_name */ + case 369: /* db_name_cond_opt */ + case 370: /* like_pattern_opt */ + case 371: /* table_name_cond */ + case 372: /* from_db_opt */ + case 373: /* index_options */ + case 375: /* sliding_opt */ + case 376: /* sma_stream_opt */ + case 377: /* func */ + case 378: /* stream_options */ + case 380: /* query_or_subquery */ + case 383: /* explain_options */ + case 387: /* subtable_opt */ + case 388: /* expression */ + case 390: /* where_clause_opt */ + case 391: /* signed */ + case 392: /* literal_func */ + case 396: /* expr_or_subquery */ + case 397: /* subquery */ + case 398: /* pseudo_column */ + case 399: /* column_reference */ + case 400: /* function_expression */ + case 401: /* case_when_expression */ + case 406: /* star_func_para */ + case 408: /* case_when_else_opt */ + case 409: /* common_expression */ + case 410: /* when_then_expr */ + case 411: /* predicate */ + case 414: /* in_predicate_value */ + case 415: /* boolean_value_expression */ + case 416: /* boolean_primary */ + case 417: /* from_clause_opt */ + case 418: /* table_reference_list */ + case 419: /* table_reference */ + case 420: /* table_primary */ + case 421: /* joined_table */ + case 423: /* parenthesized_joined_table */ + case 425: /* search_condition */ + case 426: /* query_specification */ + case 430: /* range_opt */ + case 431: /* every_opt */ + case 432: /* fill_opt */ + case 433: /* twindow_clause_opt */ + case 435: /* having_clause_opt */ + case 436: /* select_item */ + case 438: /* partition_item */ + case 441: /* query_expression */ + case 442: /* query_simple */ + case 444: /* slimit_clause_opt */ + case 445: /* limit_clause_opt */ + case 446: /* union_query_expression */ + case 447: /* query_simple_or_subquery */ + case 449: /* sort_specification */ { - nodesDestroyNode((yypminor->yy812)); + nodesDestroyNode((yypminor->yy232)); } break; - case 319: /* account_options */ - case 320: /* alter_account_options */ - case 322: /* alter_account_option */ - case 335: /* speed_opt */ - case 383: /* bufsize_opt */ + case 320: /* account_options */ + case 321: /* alter_account_options */ + case 323: /* alter_account_option */ + case 337: /* speed_opt */ + case 385: /* bufsize_opt */ { } break; - case 323: /* user_name */ - case 326: /* priv_level */ - case 329: /* db_name */ - case 330: /* dnode_endpoint */ - case 350: /* column_name */ - case 358: /* table_name */ - case 365: /* function_name */ - case 377: /* topic_name */ - case 379: /* cgroup_name */ - case 384: /* stream_name */ - case 392: /* table_alias */ - case 393: /* column_alias */ - case 400: /* star_func */ - case 402: /* noarg_func */ - case 420: /* alias_opt */ + case 324: /* user_name */ + case 327: /* priv_level */ + case 330: /* db_name */ + case 331: /* dnode_endpoint */ + case 352: /* column_name */ + case 360: /* table_name */ + case 367: /* function_name */ + case 379: /* topic_name */ + case 381: /* cgroup_name */ + case 386: /* stream_name */ + case 394: /* table_alias */ + case 395: /* column_alias */ + case 402: /* star_func */ + case 404: /* noarg_func */ + case 422: /* alias_opt */ { } break; - case 324: /* sysinfo_opt */ + case 325: /* sysinfo_opt */ { } break; - case 325: /* privileges */ - case 327: /* priv_type_list */ - case 328: /* priv_type */ + case 326: /* privileges */ + case 328: /* priv_type_list */ + case 329: /* priv_type */ { } break; - case 331: /* not_exists_opt */ - case 333: /* exists_opt */ - case 380: /* analyze_opt */ - case 382: /* agg_func_opt */ - case 425: /* set_quantifier_opt */ + case 332: /* force_opt */ + case 333: /* not_exists_opt */ + case 335: /* exists_opt */ + case 382: /* analyze_opt */ + case 384: /* agg_func_opt */ + case 427: /* set_quantifier_opt */ { } break; - case 336: /* integer_list */ - case 337: /* variable_list */ - case 338: /* retention_list */ - case 342: /* column_def_list */ - case 343: /* tags_def_opt */ - case 345: /* multi_create_clause */ - case 346: /* tags_def */ - case 347: /* multi_drop_clause */ - case 354: /* specific_cols_opt */ - case 355: /* expression_list */ - case 357: /* col_name_list */ - case 360: /* duration_list */ - case 361: /* rollup_func_list */ - case 372: /* func_list */ - case 387: /* dnode_list */ - case 391: /* literal_list */ - case 401: /* star_func_para_list */ - case 403: /* other_para_list */ - case 405: /* when_then_list */ - case 426: /* select_list */ - case 427: /* partition_by_clause_opt */ - case 432: /* group_by_clause_opt */ - case 435: /* partition_list */ - case 438: /* group_by_list */ - case 441: /* order_by_clause_opt */ - case 446: /* sort_specification_list */ + case 338: /* integer_list */ + case 339: /* variable_list */ + case 340: /* retention_list */ + case 344: /* column_def_list */ + case 345: /* tags_def_opt */ + case 347: /* multi_create_clause */ + case 348: /* tags_def */ + case 349: /* multi_drop_clause */ + case 356: /* specific_cols_opt */ + case 357: /* expression_list */ + case 359: /* col_name_list */ + case 362: /* duration_list */ + case 363: /* rollup_func_list */ + case 374: /* func_list */ + case 389: /* dnode_list */ + case 393: /* literal_list */ + case 403: /* star_func_para_list */ + case 405: /* other_para_list */ + case 407: /* when_then_list */ + case 428: /* select_list */ + case 429: /* partition_by_clause_opt */ + case 434: /* group_by_clause_opt */ + case 437: /* partition_list */ + case 440: /* group_by_list */ + case 443: /* order_by_clause_opt */ + case 448: /* sort_specification_list */ { - nodesDestroyList((yypminor->yy424)); + nodesDestroyList((yypminor->yy288)); } break; - case 339: /* alter_db_option */ - case 362: /* alter_table_option */ + case 341: /* alter_db_option */ + case 364: /* alter_table_option */ { } break; - case 351: /* type_name */ + case 353: /* type_name */ { } break; - case 410: /* compare_op */ - case 411: /* in_op */ + case 412: /* compare_op */ + case 413: /* in_op */ { } break; - case 422: /* join_type */ + case 424: /* join_type */ { } break; - case 437: /* fill_mode */ + case 439: /* fill_mode */ { } break; - case 448: /* ordering_specification_opt */ + case 450: /* ordering_specification_opt */ { } break; - case 449: /* null_ordering_opt */ + case 451: /* null_ordering_opt */ { } @@ -2978,532 +3092,534 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 318, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ - { 318, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ - { 319, 0 }, /* (2) account_options ::= */ - { 319, -3 }, /* (3) account_options ::= account_options PPS literal */ - { 319, -3 }, /* (4) account_options ::= account_options TSERIES literal */ - { 319, -3 }, /* (5) account_options ::= account_options STORAGE literal */ - { 319, -3 }, /* (6) account_options ::= account_options STREAMS literal */ - { 319, -3 }, /* (7) account_options ::= account_options QTIME literal */ - { 319, -3 }, /* (8) account_options ::= account_options DBS literal */ - { 319, -3 }, /* (9) account_options ::= account_options USERS literal */ - { 319, -3 }, /* (10) account_options ::= account_options CONNS literal */ - { 319, -3 }, /* (11) account_options ::= account_options STATE literal */ - { 320, -1 }, /* (12) alter_account_options ::= alter_account_option */ - { 320, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ - { 322, -2 }, /* (14) alter_account_option ::= PASS literal */ - { 322, -2 }, /* (15) alter_account_option ::= PPS literal */ - { 322, -2 }, /* (16) alter_account_option ::= TSERIES literal */ - { 322, -2 }, /* (17) alter_account_option ::= STORAGE literal */ - { 322, -2 }, /* (18) alter_account_option ::= STREAMS literal */ - { 322, -2 }, /* (19) alter_account_option ::= QTIME literal */ - { 322, -2 }, /* (20) alter_account_option ::= DBS literal */ - { 322, -2 }, /* (21) alter_account_option ::= USERS literal */ - { 322, -2 }, /* (22) alter_account_option ::= CONNS literal */ - { 322, -2 }, /* (23) alter_account_option ::= STATE literal */ - { 318, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ - { 318, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ - { 318, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ - { 318, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ - { 318, -3 }, /* (28) cmd ::= DROP USER user_name */ - { 324, 0 }, /* (29) sysinfo_opt ::= */ - { 324, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ - { 318, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ - { 318, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ - { 325, -1 }, /* (33) privileges ::= ALL */ - { 325, -1 }, /* (34) privileges ::= priv_type_list */ - { 327, -1 }, /* (35) priv_type_list ::= priv_type */ - { 327, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ - { 328, -1 }, /* (37) priv_type ::= READ */ - { 328, -1 }, /* (38) priv_type ::= WRITE */ - { 326, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ - { 326, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ - { 318, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ - { 318, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ - { 318, -3 }, /* (43) cmd ::= DROP DNODE NK_INTEGER */ - { 318, -3 }, /* (44) cmd ::= DROP DNODE dnode_endpoint */ - { 318, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ - { 318, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ - { 318, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ - { 318, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ - { 330, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ - { 330, -1 }, /* (50) dnode_endpoint ::= NK_ID */ - { 330, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ - { 318, -3 }, /* (52) cmd ::= ALTER LOCAL NK_STRING */ - { 318, -4 }, /* (53) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ - { 318, -5 }, /* (54) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (55) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (56) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (57) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (58) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (59) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (60) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (61) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ - { 318, -5 }, /* (62) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ - { 318, -4 }, /* (63) cmd ::= DROP DATABASE exists_opt db_name */ - { 318, -2 }, /* (64) cmd ::= USE db_name */ - { 318, -4 }, /* (65) cmd ::= ALTER DATABASE db_name alter_db_options */ - { 318, -3 }, /* (66) cmd ::= FLUSH DATABASE db_name */ - { 318, -4 }, /* (67) cmd ::= TRIM DATABASE db_name speed_opt */ - { 331, -3 }, /* (68) not_exists_opt ::= IF NOT EXISTS */ - { 331, 0 }, /* (69) not_exists_opt ::= */ - { 333, -2 }, /* (70) exists_opt ::= IF EXISTS */ - { 333, 0 }, /* (71) exists_opt ::= */ - { 332, 0 }, /* (72) db_options ::= */ - { 332, -3 }, /* (73) db_options ::= db_options BUFFER NK_INTEGER */ - { 332, -3 }, /* (74) db_options ::= db_options CACHEMODEL NK_STRING */ - { 332, -3 }, /* (75) db_options ::= db_options CACHESIZE NK_INTEGER */ - { 332, -3 }, /* (76) db_options ::= db_options COMP NK_INTEGER */ - { 332, -3 }, /* (77) db_options ::= db_options DURATION NK_INTEGER */ - { 332, -3 }, /* (78) db_options ::= db_options DURATION NK_VARIABLE */ - { 332, -3 }, /* (79) db_options ::= db_options MAXROWS NK_INTEGER */ - { 332, -3 }, /* (80) db_options ::= db_options MINROWS NK_INTEGER */ - { 332, -3 }, /* (81) db_options ::= db_options KEEP integer_list */ - { 332, -3 }, /* (82) db_options ::= db_options KEEP variable_list */ - { 332, -3 }, /* (83) db_options ::= db_options PAGES NK_INTEGER */ - { 332, -3 }, /* (84) db_options ::= db_options PAGESIZE NK_INTEGER */ - { 332, -3 }, /* (85) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ - { 332, -3 }, /* (86) db_options ::= db_options PRECISION NK_STRING */ - { 332, -3 }, /* (87) db_options ::= db_options REPLICA NK_INTEGER */ - { 332, -3 }, /* (88) db_options ::= db_options STRICT NK_STRING */ - { 332, -3 }, /* (89) db_options ::= db_options VGROUPS NK_INTEGER */ - { 332, -3 }, /* (90) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ - { 332, -3 }, /* (91) db_options ::= db_options RETENTIONS retention_list */ - { 332, -3 }, /* (92) db_options ::= db_options SCHEMALESS NK_INTEGER */ - { 332, -3 }, /* (93) db_options ::= db_options WAL_LEVEL NK_INTEGER */ - { 332, -3 }, /* (94) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ - { 332, -3 }, /* (95) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ - { 332, -4 }, /* (96) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ - { 332, -3 }, /* (97) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ - { 332, -4 }, /* (98) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ - { 332, -3 }, /* (99) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ - { 332, -3 }, /* (100) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ - { 332, -3 }, /* (101) db_options ::= db_options STT_TRIGGER NK_INTEGER */ - { 332, -3 }, /* (102) db_options ::= db_options TABLE_PREFIX NK_INTEGER */ - { 332, -3 }, /* (103) db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ - { 334, -1 }, /* (104) alter_db_options ::= alter_db_option */ - { 334, -2 }, /* (105) alter_db_options ::= alter_db_options alter_db_option */ - { 339, -2 }, /* (106) alter_db_option ::= BUFFER NK_INTEGER */ - { 339, -2 }, /* (107) alter_db_option ::= CACHEMODEL NK_STRING */ - { 339, -2 }, /* (108) alter_db_option ::= CACHESIZE NK_INTEGER */ - { 339, -2 }, /* (109) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ - { 339, -2 }, /* (110) alter_db_option ::= KEEP integer_list */ - { 339, -2 }, /* (111) alter_db_option ::= KEEP variable_list */ - { 339, -2 }, /* (112) alter_db_option ::= PAGES NK_INTEGER */ - { 339, -2 }, /* (113) alter_db_option ::= REPLICA NK_INTEGER */ - { 339, -2 }, /* (114) alter_db_option ::= STRICT NK_STRING */ - { 339, -2 }, /* (115) alter_db_option ::= WAL_LEVEL NK_INTEGER */ - { 339, -2 }, /* (116) alter_db_option ::= STT_TRIGGER NK_INTEGER */ - { 336, -1 }, /* (117) integer_list ::= NK_INTEGER */ - { 336, -3 }, /* (118) integer_list ::= integer_list NK_COMMA NK_INTEGER */ - { 337, -1 }, /* (119) variable_list ::= NK_VARIABLE */ - { 337, -3 }, /* (120) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ - { 338, -1 }, /* (121) retention_list ::= retention */ - { 338, -3 }, /* (122) retention_list ::= retention_list NK_COMMA retention */ - { 340, -3 }, /* (123) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ - { 335, 0 }, /* (124) speed_opt ::= */ - { 335, -2 }, /* (125) speed_opt ::= MAX_SPEED NK_INTEGER */ - { 318, -9 }, /* (126) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - { 318, -3 }, /* (127) cmd ::= CREATE TABLE multi_create_clause */ - { 318, -9 }, /* (128) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ - { 318, -3 }, /* (129) cmd ::= DROP TABLE multi_drop_clause */ - { 318, -4 }, /* (130) cmd ::= DROP STABLE exists_opt full_table_name */ - { 318, -3 }, /* (131) cmd ::= ALTER TABLE alter_table_clause */ - { 318, -3 }, /* (132) cmd ::= ALTER STABLE alter_table_clause */ - { 348, -2 }, /* (133) alter_table_clause ::= full_table_name alter_table_options */ - { 348, -5 }, /* (134) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ - { 348, -4 }, /* (135) alter_table_clause ::= full_table_name DROP COLUMN column_name */ - { 348, -5 }, /* (136) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ - { 348, -5 }, /* (137) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ - { 348, -5 }, /* (138) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ - { 348, -4 }, /* (139) alter_table_clause ::= full_table_name DROP TAG column_name */ - { 348, -5 }, /* (140) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ - { 348, -5 }, /* (141) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ - { 348, -6 }, /* (142) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ - { 345, -1 }, /* (143) multi_create_clause ::= create_subtable_clause */ - { 345, -2 }, /* (144) multi_create_clause ::= multi_create_clause create_subtable_clause */ - { 353, -10 }, /* (145) 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 */ - { 347, -1 }, /* (146) multi_drop_clause ::= drop_table_clause */ - { 347, -2 }, /* (147) multi_drop_clause ::= multi_drop_clause drop_table_clause */ - { 356, -2 }, /* (148) drop_table_clause ::= exists_opt full_table_name */ - { 354, 0 }, /* (149) specific_cols_opt ::= */ - { 354, -3 }, /* (150) specific_cols_opt ::= NK_LP col_name_list NK_RP */ - { 341, -1 }, /* (151) full_table_name ::= table_name */ - { 341, -3 }, /* (152) full_table_name ::= db_name NK_DOT table_name */ - { 342, -1 }, /* (153) column_def_list ::= column_def */ - { 342, -3 }, /* (154) column_def_list ::= column_def_list NK_COMMA column_def */ - { 359, -2 }, /* (155) column_def ::= column_name type_name */ - { 359, -4 }, /* (156) column_def ::= column_name type_name COMMENT NK_STRING */ - { 351, -1 }, /* (157) type_name ::= BOOL */ - { 351, -1 }, /* (158) type_name ::= TINYINT */ - { 351, -1 }, /* (159) type_name ::= SMALLINT */ - { 351, -1 }, /* (160) type_name ::= INT */ - { 351, -1 }, /* (161) type_name ::= INTEGER */ - { 351, -1 }, /* (162) type_name ::= BIGINT */ - { 351, -1 }, /* (163) type_name ::= FLOAT */ - { 351, -1 }, /* (164) type_name ::= DOUBLE */ - { 351, -4 }, /* (165) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (166) type_name ::= TIMESTAMP */ - { 351, -4 }, /* (167) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ - { 351, -2 }, /* (168) type_name ::= TINYINT UNSIGNED */ - { 351, -2 }, /* (169) type_name ::= SMALLINT UNSIGNED */ - { 351, -2 }, /* (170) type_name ::= INT UNSIGNED */ - { 351, -2 }, /* (171) type_name ::= BIGINT UNSIGNED */ - { 351, -1 }, /* (172) type_name ::= JSON */ - { 351, -4 }, /* (173) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (174) type_name ::= MEDIUMBLOB */ - { 351, -1 }, /* (175) type_name ::= BLOB */ - { 351, -4 }, /* (176) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ - { 351, -1 }, /* (177) type_name ::= DECIMAL */ - { 351, -4 }, /* (178) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ - { 351, -6 }, /* (179) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ - { 343, 0 }, /* (180) tags_def_opt ::= */ - { 343, -1 }, /* (181) tags_def_opt ::= tags_def */ - { 346, -4 }, /* (182) tags_def ::= TAGS NK_LP column_def_list NK_RP */ - { 344, 0 }, /* (183) table_options ::= */ - { 344, -3 }, /* (184) table_options ::= table_options COMMENT NK_STRING */ - { 344, -3 }, /* (185) table_options ::= table_options MAX_DELAY duration_list */ - { 344, -3 }, /* (186) table_options ::= table_options WATERMARK duration_list */ - { 344, -5 }, /* (187) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ - { 344, -3 }, /* (188) table_options ::= table_options TTL NK_INTEGER */ - { 344, -5 }, /* (189) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ - { 349, -1 }, /* (190) alter_table_options ::= alter_table_option */ - { 349, -2 }, /* (191) alter_table_options ::= alter_table_options alter_table_option */ - { 362, -2 }, /* (192) alter_table_option ::= COMMENT NK_STRING */ - { 362, -2 }, /* (193) alter_table_option ::= TTL NK_INTEGER */ - { 360, -1 }, /* (194) duration_list ::= duration_literal */ - { 360, -3 }, /* (195) duration_list ::= duration_list NK_COMMA duration_literal */ - { 361, -1 }, /* (196) rollup_func_list ::= rollup_func_name */ - { 361, -3 }, /* (197) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ - { 364, -1 }, /* (198) rollup_func_name ::= function_name */ - { 364, -1 }, /* (199) rollup_func_name ::= FIRST */ - { 364, -1 }, /* (200) rollup_func_name ::= LAST */ - { 357, -1 }, /* (201) col_name_list ::= col_name */ - { 357, -3 }, /* (202) col_name_list ::= col_name_list NK_COMMA col_name */ - { 366, -1 }, /* (203) col_name ::= column_name */ - { 318, -2 }, /* (204) cmd ::= SHOW DNODES */ - { 318, -2 }, /* (205) cmd ::= SHOW USERS */ - { 318, -2 }, /* (206) cmd ::= SHOW DATABASES */ - { 318, -4 }, /* (207) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ - { 318, -4 }, /* (208) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ - { 318, -3 }, /* (209) cmd ::= SHOW db_name_cond_opt VGROUPS */ - { 318, -2 }, /* (210) cmd ::= SHOW MNODES */ - { 318, -2 }, /* (211) cmd ::= SHOW QNODES */ - { 318, -2 }, /* (212) cmd ::= SHOW FUNCTIONS */ - { 318, -5 }, /* (213) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ - { 318, -2 }, /* (214) cmd ::= SHOW STREAMS */ - { 318, -2 }, /* (215) cmd ::= SHOW ACCOUNTS */ - { 318, -2 }, /* (216) cmd ::= SHOW APPS */ - { 318, -2 }, /* (217) cmd ::= SHOW CONNECTIONS */ - { 318, -2 }, /* (218) cmd ::= SHOW LICENCES */ - { 318, -2 }, /* (219) cmd ::= SHOW GRANTS */ - { 318, -4 }, /* (220) cmd ::= SHOW CREATE DATABASE db_name */ - { 318, -4 }, /* (221) cmd ::= SHOW CREATE TABLE full_table_name */ - { 318, -4 }, /* (222) cmd ::= SHOW CREATE STABLE full_table_name */ - { 318, -2 }, /* (223) cmd ::= SHOW QUERIES */ - { 318, -2 }, /* (224) cmd ::= SHOW SCORES */ - { 318, -2 }, /* (225) cmd ::= SHOW TOPICS */ - { 318, -2 }, /* (226) cmd ::= SHOW VARIABLES */ - { 318, -3 }, /* (227) cmd ::= SHOW CLUSTER VARIABLES */ - { 318, -3 }, /* (228) cmd ::= SHOW LOCAL VARIABLES */ - { 318, -5 }, /* (229) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ - { 318, -2 }, /* (230) cmd ::= SHOW BNODES */ - { 318, -2 }, /* (231) cmd ::= SHOW SNODES */ - { 318, -2 }, /* (232) cmd ::= SHOW CLUSTER */ - { 318, -2 }, /* (233) cmd ::= SHOW TRANSACTIONS */ - { 318, -4 }, /* (234) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ - { 318, -2 }, /* (235) cmd ::= SHOW CONSUMERS */ - { 318, -2 }, /* (236) cmd ::= SHOW SUBSCRIPTIONS */ - { 318, -5 }, /* (237) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ - { 318, -6 }, /* (238) cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ - { 318, -3 }, /* (239) cmd ::= SHOW VNODES NK_INTEGER */ - { 318, -3 }, /* (240) cmd ::= SHOW VNODES NK_STRING */ - { 367, 0 }, /* (241) db_name_cond_opt ::= */ - { 367, -2 }, /* (242) db_name_cond_opt ::= db_name NK_DOT */ - { 368, 0 }, /* (243) like_pattern_opt ::= */ - { 368, -2 }, /* (244) like_pattern_opt ::= LIKE NK_STRING */ - { 369, -1 }, /* (245) table_name_cond ::= table_name */ - { 370, 0 }, /* (246) from_db_opt ::= */ - { 370, -2 }, /* (247) from_db_opt ::= FROM db_name */ - { 318, -8 }, /* (248) cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ - { 318, -4 }, /* (249) cmd ::= DROP INDEX exists_opt full_table_name */ - { 371, -10 }, /* (250) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ - { 371, -12 }, /* (251) 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 */ - { 372, -1 }, /* (252) func_list ::= func */ - { 372, -3 }, /* (253) func_list ::= func_list NK_COMMA func */ - { 375, -4 }, /* (254) func ::= function_name NK_LP expression_list NK_RP */ - { 374, 0 }, /* (255) sma_stream_opt ::= */ - { 374, -3 }, /* (256) sma_stream_opt ::= stream_options WATERMARK duration_literal */ - { 374, -3 }, /* (257) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ - { 318, -6 }, /* (258) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ - { 318, -7 }, /* (259) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ - { 318, -9 }, /* (260) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ - { 318, -7 }, /* (261) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ - { 318, -9 }, /* (262) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ - { 318, -4 }, /* (263) cmd ::= DROP TOPIC exists_opt topic_name */ - { 318, -7 }, /* (264) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ - { 318, -2 }, /* (265) cmd ::= DESC full_table_name */ - { 318, -2 }, /* (266) cmd ::= DESCRIBE full_table_name */ - { 318, -3 }, /* (267) cmd ::= RESET QUERY CACHE */ - { 318, -4 }, /* (268) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ - { 380, 0 }, /* (269) analyze_opt ::= */ - { 380, -1 }, /* (270) analyze_opt ::= ANALYZE */ - { 381, 0 }, /* (271) explain_options ::= */ - { 381, -3 }, /* (272) explain_options ::= explain_options VERBOSE NK_BOOL */ - { 381, -3 }, /* (273) explain_options ::= explain_options RATIO NK_FLOAT */ - { 318, -10 }, /* (274) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ - { 318, -4 }, /* (275) cmd ::= DROP FUNCTION exists_opt function_name */ - { 382, 0 }, /* (276) agg_func_opt ::= */ - { 382, -1 }, /* (277) agg_func_opt ::= AGGREGATE */ - { 383, 0 }, /* (278) bufsize_opt ::= */ - { 383, -2 }, /* (279) bufsize_opt ::= BUFSIZE NK_INTEGER */ - { 318, -11 }, /* (280) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ - { 318, -4 }, /* (281) cmd ::= DROP STREAM exists_opt stream_name */ - { 376, 0 }, /* (282) stream_options ::= */ - { 376, -3 }, /* (283) stream_options ::= stream_options TRIGGER AT_ONCE */ - { 376, -3 }, /* (284) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ - { 376, -4 }, /* (285) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ - { 376, -3 }, /* (286) stream_options ::= stream_options WATERMARK duration_literal */ - { 376, -4 }, /* (287) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ - { 376, -3 }, /* (288) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ - { 385, 0 }, /* (289) subtable_opt ::= */ - { 385, -4 }, /* (290) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - { 318, -3 }, /* (291) cmd ::= KILL CONNECTION NK_INTEGER */ - { 318, -3 }, /* (292) cmd ::= KILL QUERY NK_STRING */ - { 318, -3 }, /* (293) cmd ::= KILL TRANSACTION NK_INTEGER */ - { 318, -2 }, /* (294) cmd ::= BALANCE VGROUP */ - { 318, -4 }, /* (295) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ - { 318, -4 }, /* (296) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ - { 318, -3 }, /* (297) cmd ::= SPLIT VGROUP NK_INTEGER */ - { 387, -2 }, /* (298) dnode_list ::= DNODE NK_INTEGER */ - { 387, -3 }, /* (299) dnode_list ::= dnode_list DNODE NK_INTEGER */ - { 318, -4 }, /* (300) cmd ::= DELETE FROM full_table_name where_clause_opt */ - { 318, -1 }, /* (301) cmd ::= query_or_subquery */ - { 318, -7 }, /* (302) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ - { 318, -4 }, /* (303) cmd ::= INSERT INTO full_table_name query_or_subquery */ - { 321, -1 }, /* (304) literal ::= NK_INTEGER */ - { 321, -1 }, /* (305) literal ::= NK_FLOAT */ - { 321, -1 }, /* (306) literal ::= NK_STRING */ - { 321, -1 }, /* (307) literal ::= NK_BOOL */ - { 321, -2 }, /* (308) literal ::= TIMESTAMP NK_STRING */ - { 321, -1 }, /* (309) literal ::= duration_literal */ - { 321, -1 }, /* (310) literal ::= NULL */ - { 321, -1 }, /* (311) literal ::= NK_QUESTION */ - { 363, -1 }, /* (312) duration_literal ::= NK_VARIABLE */ - { 389, -1 }, /* (313) signed ::= NK_INTEGER */ - { 389, -2 }, /* (314) signed ::= NK_PLUS NK_INTEGER */ - { 389, -2 }, /* (315) signed ::= NK_MINUS NK_INTEGER */ - { 389, -1 }, /* (316) signed ::= NK_FLOAT */ - { 389, -2 }, /* (317) signed ::= NK_PLUS NK_FLOAT */ - { 389, -2 }, /* (318) signed ::= NK_MINUS NK_FLOAT */ - { 352, -1 }, /* (319) signed_literal ::= signed */ - { 352, -1 }, /* (320) signed_literal ::= NK_STRING */ - { 352, -1 }, /* (321) signed_literal ::= NK_BOOL */ - { 352, -2 }, /* (322) signed_literal ::= TIMESTAMP NK_STRING */ - { 352, -1 }, /* (323) signed_literal ::= duration_literal */ - { 352, -1 }, /* (324) signed_literal ::= NULL */ - { 352, -1 }, /* (325) signed_literal ::= literal_func */ - { 352, -1 }, /* (326) signed_literal ::= NK_QUESTION */ - { 391, -1 }, /* (327) literal_list ::= signed_literal */ - { 391, -3 }, /* (328) literal_list ::= literal_list NK_COMMA signed_literal */ - { 329, -1 }, /* (329) db_name ::= NK_ID */ - { 358, -1 }, /* (330) table_name ::= NK_ID */ - { 350, -1 }, /* (331) column_name ::= NK_ID */ - { 365, -1 }, /* (332) function_name ::= NK_ID */ - { 392, -1 }, /* (333) table_alias ::= NK_ID */ - { 393, -1 }, /* (334) column_alias ::= NK_ID */ - { 323, -1 }, /* (335) user_name ::= NK_ID */ - { 377, -1 }, /* (336) topic_name ::= NK_ID */ - { 384, -1 }, /* (337) stream_name ::= NK_ID */ - { 379, -1 }, /* (338) cgroup_name ::= NK_ID */ - { 394, -1 }, /* (339) expr_or_subquery ::= expression */ - { 394, -1 }, /* (340) expr_or_subquery ::= subquery */ - { 386, -1 }, /* (341) expression ::= literal */ - { 386, -1 }, /* (342) expression ::= pseudo_column */ - { 386, -1 }, /* (343) expression ::= column_reference */ - { 386, -1 }, /* (344) expression ::= function_expression */ - { 386, -1 }, /* (345) expression ::= case_when_expression */ - { 386, -3 }, /* (346) expression ::= NK_LP expression NK_RP */ - { 386, -2 }, /* (347) expression ::= NK_PLUS expr_or_subquery */ - { 386, -2 }, /* (348) expression ::= NK_MINUS expr_or_subquery */ - { 386, -3 }, /* (349) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ - { 386, -3 }, /* (350) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ - { 386, -3 }, /* (351) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ - { 386, -3 }, /* (352) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ - { 386, -3 }, /* (353) expression ::= expr_or_subquery NK_REM expr_or_subquery */ - { 386, -3 }, /* (354) expression ::= column_reference NK_ARROW NK_STRING */ - { 386, -3 }, /* (355) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ - { 386, -3 }, /* (356) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ - { 355, -1 }, /* (357) expression_list ::= expr_or_subquery */ - { 355, -3 }, /* (358) expression_list ::= expression_list NK_COMMA expr_or_subquery */ - { 397, -1 }, /* (359) column_reference ::= column_name */ - { 397, -3 }, /* (360) column_reference ::= table_name NK_DOT column_name */ - { 396, -1 }, /* (361) pseudo_column ::= ROWTS */ - { 396, -1 }, /* (362) pseudo_column ::= TBNAME */ - { 396, -3 }, /* (363) pseudo_column ::= table_name NK_DOT TBNAME */ - { 396, -1 }, /* (364) pseudo_column ::= QSTART */ - { 396, -1 }, /* (365) pseudo_column ::= QEND */ - { 396, -1 }, /* (366) pseudo_column ::= QDURATION */ - { 396, -1 }, /* (367) pseudo_column ::= WSTART */ - { 396, -1 }, /* (368) pseudo_column ::= WEND */ - { 396, -1 }, /* (369) pseudo_column ::= WDURATION */ - { 396, -1 }, /* (370) pseudo_column ::= IROWTS */ - { 396, -1 }, /* (371) pseudo_column ::= QTAGS */ - { 398, -4 }, /* (372) function_expression ::= function_name NK_LP expression_list NK_RP */ - { 398, -4 }, /* (373) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ - { 398, -6 }, /* (374) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ - { 398, -1 }, /* (375) function_expression ::= literal_func */ - { 390, -3 }, /* (376) literal_func ::= noarg_func NK_LP NK_RP */ - { 390, -1 }, /* (377) literal_func ::= NOW */ - { 402, -1 }, /* (378) noarg_func ::= NOW */ - { 402, -1 }, /* (379) noarg_func ::= TODAY */ - { 402, -1 }, /* (380) noarg_func ::= TIMEZONE */ - { 402, -1 }, /* (381) noarg_func ::= DATABASE */ - { 402, -1 }, /* (382) noarg_func ::= CLIENT_VERSION */ - { 402, -1 }, /* (383) noarg_func ::= SERVER_VERSION */ - { 402, -1 }, /* (384) noarg_func ::= SERVER_STATUS */ - { 402, -1 }, /* (385) noarg_func ::= CURRENT_USER */ - { 402, -1 }, /* (386) noarg_func ::= USER */ - { 400, -1 }, /* (387) star_func ::= COUNT */ - { 400, -1 }, /* (388) star_func ::= FIRST */ - { 400, -1 }, /* (389) star_func ::= LAST */ - { 400, -1 }, /* (390) star_func ::= LAST_ROW */ - { 401, -1 }, /* (391) star_func_para_list ::= NK_STAR */ - { 401, -1 }, /* (392) star_func_para_list ::= other_para_list */ - { 403, -1 }, /* (393) other_para_list ::= star_func_para */ - { 403, -3 }, /* (394) other_para_list ::= other_para_list NK_COMMA star_func_para */ - { 404, -1 }, /* (395) star_func_para ::= expr_or_subquery */ - { 404, -3 }, /* (396) star_func_para ::= table_name NK_DOT NK_STAR */ - { 399, -4 }, /* (397) case_when_expression ::= CASE when_then_list case_when_else_opt END */ - { 399, -5 }, /* (398) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ - { 405, -1 }, /* (399) when_then_list ::= when_then_expr */ - { 405, -2 }, /* (400) when_then_list ::= when_then_list when_then_expr */ - { 408, -4 }, /* (401) when_then_expr ::= WHEN common_expression THEN common_expression */ - { 406, 0 }, /* (402) case_when_else_opt ::= */ - { 406, -2 }, /* (403) case_when_else_opt ::= ELSE common_expression */ - { 409, -3 }, /* (404) predicate ::= expr_or_subquery compare_op expr_or_subquery */ - { 409, -5 }, /* (405) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ - { 409, -6 }, /* (406) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ - { 409, -3 }, /* (407) predicate ::= expr_or_subquery IS NULL */ - { 409, -4 }, /* (408) predicate ::= expr_or_subquery IS NOT NULL */ - { 409, -3 }, /* (409) predicate ::= expr_or_subquery in_op in_predicate_value */ - { 410, -1 }, /* (410) compare_op ::= NK_LT */ - { 410, -1 }, /* (411) compare_op ::= NK_GT */ - { 410, -1 }, /* (412) compare_op ::= NK_LE */ - { 410, -1 }, /* (413) compare_op ::= NK_GE */ - { 410, -1 }, /* (414) compare_op ::= NK_NE */ - { 410, -1 }, /* (415) compare_op ::= NK_EQ */ - { 410, -1 }, /* (416) compare_op ::= LIKE */ - { 410, -2 }, /* (417) compare_op ::= NOT LIKE */ - { 410, -1 }, /* (418) compare_op ::= MATCH */ - { 410, -1 }, /* (419) compare_op ::= NMATCH */ - { 410, -1 }, /* (420) compare_op ::= CONTAINS */ - { 411, -1 }, /* (421) in_op ::= IN */ - { 411, -2 }, /* (422) in_op ::= NOT IN */ - { 412, -3 }, /* (423) in_predicate_value ::= NK_LP literal_list NK_RP */ - { 413, -1 }, /* (424) boolean_value_expression ::= boolean_primary */ - { 413, -2 }, /* (425) boolean_value_expression ::= NOT boolean_primary */ - { 413, -3 }, /* (426) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ - { 413, -3 }, /* (427) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ - { 414, -1 }, /* (428) boolean_primary ::= predicate */ - { 414, -3 }, /* (429) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ - { 407, -1 }, /* (430) common_expression ::= expr_or_subquery */ - { 407, -1 }, /* (431) common_expression ::= boolean_value_expression */ - { 415, 0 }, /* (432) from_clause_opt ::= */ - { 415, -2 }, /* (433) from_clause_opt ::= FROM table_reference_list */ - { 416, -1 }, /* (434) table_reference_list ::= table_reference */ - { 416, -3 }, /* (435) table_reference_list ::= table_reference_list NK_COMMA table_reference */ - { 417, -1 }, /* (436) table_reference ::= table_primary */ - { 417, -1 }, /* (437) table_reference ::= joined_table */ - { 418, -2 }, /* (438) table_primary ::= table_name alias_opt */ - { 418, -4 }, /* (439) table_primary ::= db_name NK_DOT table_name alias_opt */ - { 418, -2 }, /* (440) table_primary ::= subquery alias_opt */ - { 418, -1 }, /* (441) table_primary ::= parenthesized_joined_table */ - { 420, 0 }, /* (442) alias_opt ::= */ - { 420, -1 }, /* (443) alias_opt ::= table_alias */ - { 420, -2 }, /* (444) alias_opt ::= AS table_alias */ - { 421, -3 }, /* (445) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - { 421, -3 }, /* (446) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ - { 419, -6 }, /* (447) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ - { 422, 0 }, /* (448) join_type ::= */ - { 422, -1 }, /* (449) join_type ::= INNER */ - { 424, -12 }, /* (450) 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 */ - { 425, 0 }, /* (451) set_quantifier_opt ::= */ - { 425, -1 }, /* (452) set_quantifier_opt ::= DISTINCT */ - { 425, -1 }, /* (453) set_quantifier_opt ::= ALL */ - { 426, -1 }, /* (454) select_list ::= select_item */ - { 426, -3 }, /* (455) select_list ::= select_list NK_COMMA select_item */ - { 434, -1 }, /* (456) select_item ::= NK_STAR */ - { 434, -1 }, /* (457) select_item ::= common_expression */ - { 434, -2 }, /* (458) select_item ::= common_expression column_alias */ - { 434, -3 }, /* (459) select_item ::= common_expression AS column_alias */ - { 434, -3 }, /* (460) select_item ::= table_name NK_DOT NK_STAR */ - { 388, 0 }, /* (461) where_clause_opt ::= */ - { 388, -2 }, /* (462) where_clause_opt ::= WHERE search_condition */ - { 427, 0 }, /* (463) partition_by_clause_opt ::= */ - { 427, -3 }, /* (464) partition_by_clause_opt ::= PARTITION BY partition_list */ - { 435, -1 }, /* (465) partition_list ::= partition_item */ - { 435, -3 }, /* (466) partition_list ::= partition_list NK_COMMA partition_item */ - { 436, -1 }, /* (467) partition_item ::= expr_or_subquery */ - { 436, -2 }, /* (468) partition_item ::= expr_or_subquery column_alias */ - { 436, -3 }, /* (469) partition_item ::= expr_or_subquery AS column_alias */ - { 431, 0 }, /* (470) twindow_clause_opt ::= */ - { 431, -6 }, /* (471) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ - { 431, -4 }, /* (472) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ - { 431, -6 }, /* (473) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ - { 431, -8 }, /* (474) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ - { 373, 0 }, /* (475) sliding_opt ::= */ - { 373, -4 }, /* (476) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ - { 430, 0 }, /* (477) fill_opt ::= */ - { 430, -4 }, /* (478) fill_opt ::= FILL NK_LP fill_mode NK_RP */ - { 430, -6 }, /* (479) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ - { 437, -1 }, /* (480) fill_mode ::= NONE */ - { 437, -1 }, /* (481) fill_mode ::= PREV */ - { 437, -1 }, /* (482) fill_mode ::= NULL */ - { 437, -1 }, /* (483) fill_mode ::= LINEAR */ - { 437, -1 }, /* (484) fill_mode ::= NEXT */ - { 432, 0 }, /* (485) group_by_clause_opt ::= */ - { 432, -3 }, /* (486) group_by_clause_opt ::= GROUP BY group_by_list */ - { 438, -1 }, /* (487) group_by_list ::= expr_or_subquery */ - { 438, -3 }, /* (488) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ - { 433, 0 }, /* (489) having_clause_opt ::= */ - { 433, -2 }, /* (490) having_clause_opt ::= HAVING search_condition */ - { 428, 0 }, /* (491) range_opt ::= */ - { 428, -6 }, /* (492) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ - { 429, 0 }, /* (493) every_opt ::= */ - { 429, -4 }, /* (494) every_opt ::= EVERY NK_LP duration_literal NK_RP */ - { 439, -4 }, /* (495) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ - { 440, -1 }, /* (496) query_simple ::= query_specification */ - { 440, -1 }, /* (497) query_simple ::= union_query_expression */ - { 444, -4 }, /* (498) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ - { 444, -3 }, /* (499) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ - { 445, -1 }, /* (500) query_simple_or_subquery ::= query_simple */ - { 445, -1 }, /* (501) query_simple_or_subquery ::= subquery */ - { 378, -1 }, /* (502) query_or_subquery ::= query_expression */ - { 378, -1 }, /* (503) query_or_subquery ::= subquery */ - { 441, 0 }, /* (504) order_by_clause_opt ::= */ - { 441, -3 }, /* (505) order_by_clause_opt ::= ORDER BY sort_specification_list */ - { 442, 0 }, /* (506) slimit_clause_opt ::= */ - { 442, -2 }, /* (507) slimit_clause_opt ::= SLIMIT NK_INTEGER */ - { 442, -4 }, /* (508) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - { 442, -4 }, /* (509) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 443, 0 }, /* (510) limit_clause_opt ::= */ - { 443, -2 }, /* (511) limit_clause_opt ::= LIMIT NK_INTEGER */ - { 443, -4 }, /* (512) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ - { 443, -4 }, /* (513) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - { 395, -3 }, /* (514) subquery ::= NK_LP query_expression NK_RP */ - { 395, -3 }, /* (515) subquery ::= NK_LP subquery NK_RP */ - { 423, -1 }, /* (516) search_condition ::= common_expression */ - { 446, -1 }, /* (517) sort_specification_list ::= sort_specification */ - { 446, -3 }, /* (518) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ - { 447, -3 }, /* (519) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ - { 448, 0 }, /* (520) ordering_specification_opt ::= */ - { 448, -1 }, /* (521) ordering_specification_opt ::= ASC */ - { 448, -1 }, /* (522) ordering_specification_opt ::= DESC */ - { 449, 0 }, /* (523) null_ordering_opt ::= */ - { 449, -2 }, /* (524) null_ordering_opt ::= NULLS FIRST */ - { 449, -2 }, /* (525) null_ordering_opt ::= NULLS LAST */ + { 319, -6 }, /* (0) cmd ::= CREATE ACCOUNT NK_ID PASS NK_STRING account_options */ + { 319, -4 }, /* (1) cmd ::= ALTER ACCOUNT NK_ID alter_account_options */ + { 320, 0 }, /* (2) account_options ::= */ + { 320, -3 }, /* (3) account_options ::= account_options PPS literal */ + { 320, -3 }, /* (4) account_options ::= account_options TSERIES literal */ + { 320, -3 }, /* (5) account_options ::= account_options STORAGE literal */ + { 320, -3 }, /* (6) account_options ::= account_options STREAMS literal */ + { 320, -3 }, /* (7) account_options ::= account_options QTIME literal */ + { 320, -3 }, /* (8) account_options ::= account_options DBS literal */ + { 320, -3 }, /* (9) account_options ::= account_options USERS literal */ + { 320, -3 }, /* (10) account_options ::= account_options CONNS literal */ + { 320, -3 }, /* (11) account_options ::= account_options STATE literal */ + { 321, -1 }, /* (12) alter_account_options ::= alter_account_option */ + { 321, -2 }, /* (13) alter_account_options ::= alter_account_options alter_account_option */ + { 323, -2 }, /* (14) alter_account_option ::= PASS literal */ + { 323, -2 }, /* (15) alter_account_option ::= PPS literal */ + { 323, -2 }, /* (16) alter_account_option ::= TSERIES literal */ + { 323, -2 }, /* (17) alter_account_option ::= STORAGE literal */ + { 323, -2 }, /* (18) alter_account_option ::= STREAMS literal */ + { 323, -2 }, /* (19) alter_account_option ::= QTIME literal */ + { 323, -2 }, /* (20) alter_account_option ::= DBS literal */ + { 323, -2 }, /* (21) alter_account_option ::= USERS literal */ + { 323, -2 }, /* (22) alter_account_option ::= CONNS literal */ + { 323, -2 }, /* (23) alter_account_option ::= STATE literal */ + { 319, -6 }, /* (24) cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ + { 319, -5 }, /* (25) cmd ::= ALTER USER user_name PASS NK_STRING */ + { 319, -5 }, /* (26) cmd ::= ALTER USER user_name ENABLE NK_INTEGER */ + { 319, -5 }, /* (27) cmd ::= ALTER USER user_name SYSINFO NK_INTEGER */ + { 319, -3 }, /* (28) cmd ::= DROP USER user_name */ + { 325, 0 }, /* (29) sysinfo_opt ::= */ + { 325, -2 }, /* (30) sysinfo_opt ::= SYSINFO NK_INTEGER */ + { 319, -6 }, /* (31) cmd ::= GRANT privileges ON priv_level TO user_name */ + { 319, -6 }, /* (32) cmd ::= REVOKE privileges ON priv_level FROM user_name */ + { 326, -1 }, /* (33) privileges ::= ALL */ + { 326, -1 }, /* (34) privileges ::= priv_type_list */ + { 328, -1 }, /* (35) priv_type_list ::= priv_type */ + { 328, -3 }, /* (36) priv_type_list ::= priv_type_list NK_COMMA priv_type */ + { 329, -1 }, /* (37) priv_type ::= READ */ + { 329, -1 }, /* (38) priv_type ::= WRITE */ + { 327, -3 }, /* (39) priv_level ::= NK_STAR NK_DOT NK_STAR */ + { 327, -3 }, /* (40) priv_level ::= db_name NK_DOT NK_STAR */ + { 319, -3 }, /* (41) cmd ::= CREATE DNODE dnode_endpoint */ + { 319, -5 }, /* (42) cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ + { 319, -4 }, /* (43) cmd ::= DROP DNODE NK_INTEGER force_opt */ + { 319, -4 }, /* (44) cmd ::= DROP DNODE dnode_endpoint force_opt */ + { 319, -4 }, /* (45) cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ + { 319, -5 }, /* (46) cmd ::= ALTER DNODE NK_INTEGER NK_STRING NK_STRING */ + { 319, -4 }, /* (47) cmd ::= ALTER ALL DNODES NK_STRING */ + { 319, -5 }, /* (48) cmd ::= ALTER ALL DNODES NK_STRING NK_STRING */ + { 331, -1 }, /* (49) dnode_endpoint ::= NK_STRING */ + { 331, -1 }, /* (50) dnode_endpoint ::= NK_ID */ + { 331, -1 }, /* (51) dnode_endpoint ::= NK_IPTOKEN */ + { 332, 0 }, /* (52) force_opt ::= */ + { 332, -1 }, /* (53) force_opt ::= FORCE */ + { 319, -3 }, /* (54) cmd ::= ALTER LOCAL NK_STRING */ + { 319, -4 }, /* (55) cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + { 319, -5 }, /* (56) cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (57) cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (58) cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (59) cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (60) cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (61) cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (62) cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (63) cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + { 319, -5 }, /* (64) cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ + { 319, -4 }, /* (65) cmd ::= DROP DATABASE exists_opt db_name */ + { 319, -2 }, /* (66) cmd ::= USE db_name */ + { 319, -4 }, /* (67) cmd ::= ALTER DATABASE db_name alter_db_options */ + { 319, -3 }, /* (68) cmd ::= FLUSH DATABASE db_name */ + { 319, -4 }, /* (69) cmd ::= TRIM DATABASE db_name speed_opt */ + { 333, -3 }, /* (70) not_exists_opt ::= IF NOT EXISTS */ + { 333, 0 }, /* (71) not_exists_opt ::= */ + { 335, -2 }, /* (72) exists_opt ::= IF EXISTS */ + { 335, 0 }, /* (73) exists_opt ::= */ + { 334, 0 }, /* (74) db_options ::= */ + { 334, -3 }, /* (75) db_options ::= db_options BUFFER NK_INTEGER */ + { 334, -3 }, /* (76) db_options ::= db_options CACHEMODEL NK_STRING */ + { 334, -3 }, /* (77) db_options ::= db_options CACHESIZE NK_INTEGER */ + { 334, -3 }, /* (78) db_options ::= db_options COMP NK_INTEGER */ + { 334, -3 }, /* (79) db_options ::= db_options DURATION NK_INTEGER */ + { 334, -3 }, /* (80) db_options ::= db_options DURATION NK_VARIABLE */ + { 334, -3 }, /* (81) db_options ::= db_options MAXROWS NK_INTEGER */ + { 334, -3 }, /* (82) db_options ::= db_options MINROWS NK_INTEGER */ + { 334, -3 }, /* (83) db_options ::= db_options KEEP integer_list */ + { 334, -3 }, /* (84) db_options ::= db_options KEEP variable_list */ + { 334, -3 }, /* (85) db_options ::= db_options PAGES NK_INTEGER */ + { 334, -3 }, /* (86) db_options ::= db_options PAGESIZE NK_INTEGER */ + { 334, -3 }, /* (87) db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ + { 334, -3 }, /* (88) db_options ::= db_options PRECISION NK_STRING */ + { 334, -3 }, /* (89) db_options ::= db_options REPLICA NK_INTEGER */ + { 334, -3 }, /* (90) db_options ::= db_options STRICT NK_STRING */ + { 334, -3 }, /* (91) db_options ::= db_options VGROUPS NK_INTEGER */ + { 334, -3 }, /* (92) db_options ::= db_options SINGLE_STABLE NK_INTEGER */ + { 334, -3 }, /* (93) db_options ::= db_options RETENTIONS retention_list */ + { 334, -3 }, /* (94) db_options ::= db_options SCHEMALESS NK_INTEGER */ + { 334, -3 }, /* (95) db_options ::= db_options WAL_LEVEL NK_INTEGER */ + { 334, -3 }, /* (96) db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ + { 334, -3 }, /* (97) db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ + { 334, -4 }, /* (98) db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + { 334, -3 }, /* (99) db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ + { 334, -4 }, /* (100) db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + { 334, -3 }, /* (101) db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ + { 334, -3 }, /* (102) db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ + { 334, -3 }, /* (103) db_options ::= db_options STT_TRIGGER NK_INTEGER */ + { 334, -3 }, /* (104) db_options ::= db_options TABLE_PREFIX NK_INTEGER */ + { 334, -3 }, /* (105) db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ + { 336, -1 }, /* (106) alter_db_options ::= alter_db_option */ + { 336, -2 }, /* (107) alter_db_options ::= alter_db_options alter_db_option */ + { 341, -2 }, /* (108) alter_db_option ::= BUFFER NK_INTEGER */ + { 341, -2 }, /* (109) alter_db_option ::= CACHEMODEL NK_STRING */ + { 341, -2 }, /* (110) alter_db_option ::= CACHESIZE NK_INTEGER */ + { 341, -2 }, /* (111) alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ + { 341, -2 }, /* (112) alter_db_option ::= KEEP integer_list */ + { 341, -2 }, /* (113) alter_db_option ::= KEEP variable_list */ + { 341, -2 }, /* (114) alter_db_option ::= PAGES NK_INTEGER */ + { 341, -2 }, /* (115) alter_db_option ::= REPLICA NK_INTEGER */ + { 341, -2 }, /* (116) alter_db_option ::= STRICT NK_STRING */ + { 341, -2 }, /* (117) alter_db_option ::= WAL_LEVEL NK_INTEGER */ + { 341, -2 }, /* (118) alter_db_option ::= STT_TRIGGER NK_INTEGER */ + { 338, -1 }, /* (119) integer_list ::= NK_INTEGER */ + { 338, -3 }, /* (120) integer_list ::= integer_list NK_COMMA NK_INTEGER */ + { 339, -1 }, /* (121) variable_list ::= NK_VARIABLE */ + { 339, -3 }, /* (122) variable_list ::= variable_list NK_COMMA NK_VARIABLE */ + { 340, -1 }, /* (123) retention_list ::= retention */ + { 340, -3 }, /* (124) retention_list ::= retention_list NK_COMMA retention */ + { 342, -3 }, /* (125) retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ + { 337, 0 }, /* (126) speed_opt ::= */ + { 337, -2 }, /* (127) speed_opt ::= MAX_SPEED NK_INTEGER */ + { 319, -9 }, /* (128) cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ + { 319, -3 }, /* (129) cmd ::= CREATE TABLE multi_create_clause */ + { 319, -9 }, /* (130) cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ + { 319, -3 }, /* (131) cmd ::= DROP TABLE multi_drop_clause */ + { 319, -4 }, /* (132) cmd ::= DROP STABLE exists_opt full_table_name */ + { 319, -3 }, /* (133) cmd ::= ALTER TABLE alter_table_clause */ + { 319, -3 }, /* (134) cmd ::= ALTER STABLE alter_table_clause */ + { 350, -2 }, /* (135) alter_table_clause ::= full_table_name alter_table_options */ + { 350, -5 }, /* (136) alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ + { 350, -4 }, /* (137) alter_table_clause ::= full_table_name DROP COLUMN column_name */ + { 350, -5 }, /* (138) alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ + { 350, -5 }, /* (139) alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ + { 350, -5 }, /* (140) alter_table_clause ::= full_table_name ADD TAG column_name type_name */ + { 350, -4 }, /* (141) alter_table_clause ::= full_table_name DROP TAG column_name */ + { 350, -5 }, /* (142) alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ + { 350, -5 }, /* (143) alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ + { 350, -6 }, /* (144) alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ + { 347, -1 }, /* (145) multi_create_clause ::= create_subtable_clause */ + { 347, -2 }, /* (146) multi_create_clause ::= multi_create_clause create_subtable_clause */ + { 355, -10 }, /* (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 */ + { 349, -1 }, /* (148) multi_drop_clause ::= drop_table_clause */ + { 349, -2 }, /* (149) multi_drop_clause ::= multi_drop_clause drop_table_clause */ + { 358, -2 }, /* (150) drop_table_clause ::= exists_opt full_table_name */ + { 356, 0 }, /* (151) specific_cols_opt ::= */ + { 356, -3 }, /* (152) specific_cols_opt ::= NK_LP col_name_list NK_RP */ + { 343, -1 }, /* (153) full_table_name ::= table_name */ + { 343, -3 }, /* (154) full_table_name ::= db_name NK_DOT table_name */ + { 344, -1 }, /* (155) column_def_list ::= column_def */ + { 344, -3 }, /* (156) column_def_list ::= column_def_list NK_COMMA column_def */ + { 361, -2 }, /* (157) column_def ::= column_name type_name */ + { 361, -4 }, /* (158) column_def ::= column_name type_name COMMENT NK_STRING */ + { 353, -1 }, /* (159) type_name ::= BOOL */ + { 353, -1 }, /* (160) type_name ::= TINYINT */ + { 353, -1 }, /* (161) type_name ::= SMALLINT */ + { 353, -1 }, /* (162) type_name ::= INT */ + { 353, -1 }, /* (163) type_name ::= INTEGER */ + { 353, -1 }, /* (164) type_name ::= BIGINT */ + { 353, -1 }, /* (165) type_name ::= FLOAT */ + { 353, -1 }, /* (166) type_name ::= DOUBLE */ + { 353, -4 }, /* (167) type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (168) type_name ::= TIMESTAMP */ + { 353, -4 }, /* (169) type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ + { 353, -2 }, /* (170) type_name ::= TINYINT UNSIGNED */ + { 353, -2 }, /* (171) type_name ::= SMALLINT UNSIGNED */ + { 353, -2 }, /* (172) type_name ::= INT UNSIGNED */ + { 353, -2 }, /* (173) type_name ::= BIGINT UNSIGNED */ + { 353, -1 }, /* (174) type_name ::= JSON */ + { 353, -4 }, /* (175) type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (176) type_name ::= MEDIUMBLOB */ + { 353, -1 }, /* (177) type_name ::= BLOB */ + { 353, -4 }, /* (178) type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ + { 353, -1 }, /* (179) type_name ::= DECIMAL */ + { 353, -4 }, /* (180) type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ + { 353, -6 }, /* (181) type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ + { 345, 0 }, /* (182) tags_def_opt ::= */ + { 345, -1 }, /* (183) tags_def_opt ::= tags_def */ + { 348, -4 }, /* (184) tags_def ::= TAGS NK_LP column_def_list NK_RP */ + { 346, 0 }, /* (185) table_options ::= */ + { 346, -3 }, /* (186) table_options ::= table_options COMMENT NK_STRING */ + { 346, -3 }, /* (187) table_options ::= table_options MAX_DELAY duration_list */ + { 346, -3 }, /* (188) table_options ::= table_options WATERMARK duration_list */ + { 346, -5 }, /* (189) table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ + { 346, -3 }, /* (190) table_options ::= table_options TTL NK_INTEGER */ + { 346, -5 }, /* (191) table_options ::= table_options SMA NK_LP col_name_list NK_RP */ + { 351, -1 }, /* (192) alter_table_options ::= alter_table_option */ + { 351, -2 }, /* (193) alter_table_options ::= alter_table_options alter_table_option */ + { 364, -2 }, /* (194) alter_table_option ::= COMMENT NK_STRING */ + { 364, -2 }, /* (195) alter_table_option ::= TTL NK_INTEGER */ + { 362, -1 }, /* (196) duration_list ::= duration_literal */ + { 362, -3 }, /* (197) duration_list ::= duration_list NK_COMMA duration_literal */ + { 363, -1 }, /* (198) rollup_func_list ::= rollup_func_name */ + { 363, -3 }, /* (199) rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ + { 366, -1 }, /* (200) rollup_func_name ::= function_name */ + { 366, -1 }, /* (201) rollup_func_name ::= FIRST */ + { 366, -1 }, /* (202) rollup_func_name ::= LAST */ + { 359, -1 }, /* (203) col_name_list ::= col_name */ + { 359, -3 }, /* (204) col_name_list ::= col_name_list NK_COMMA col_name */ + { 368, -1 }, /* (205) col_name ::= column_name */ + { 319, -2 }, /* (206) cmd ::= SHOW DNODES */ + { 319, -2 }, /* (207) cmd ::= SHOW USERS */ + { 319, -2 }, /* (208) cmd ::= SHOW DATABASES */ + { 319, -4 }, /* (209) cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ + { 319, -4 }, /* (210) cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ + { 319, -3 }, /* (211) cmd ::= SHOW db_name_cond_opt VGROUPS */ + { 319, -2 }, /* (212) cmd ::= SHOW MNODES */ + { 319, -2 }, /* (213) cmd ::= SHOW QNODES */ + { 319, -2 }, /* (214) cmd ::= SHOW FUNCTIONS */ + { 319, -5 }, /* (215) cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ + { 319, -2 }, /* (216) cmd ::= SHOW STREAMS */ + { 319, -2 }, /* (217) cmd ::= SHOW ACCOUNTS */ + { 319, -2 }, /* (218) cmd ::= SHOW APPS */ + { 319, -2 }, /* (219) cmd ::= SHOW CONNECTIONS */ + { 319, -2 }, /* (220) cmd ::= SHOW LICENCES */ + { 319, -2 }, /* (221) cmd ::= SHOW GRANTS */ + { 319, -4 }, /* (222) cmd ::= SHOW CREATE DATABASE db_name */ + { 319, -4 }, /* (223) cmd ::= SHOW CREATE TABLE full_table_name */ + { 319, -4 }, /* (224) cmd ::= SHOW CREATE STABLE full_table_name */ + { 319, -2 }, /* (225) cmd ::= SHOW QUERIES */ + { 319, -2 }, /* (226) cmd ::= SHOW SCORES */ + { 319, -2 }, /* (227) cmd ::= SHOW TOPICS */ + { 319, -2 }, /* (228) cmd ::= SHOW VARIABLES */ + { 319, -3 }, /* (229) cmd ::= SHOW CLUSTER VARIABLES */ + { 319, -3 }, /* (230) cmd ::= SHOW LOCAL VARIABLES */ + { 319, -5 }, /* (231) cmd ::= SHOW DNODE NK_INTEGER VARIABLES like_pattern_opt */ + { 319, -2 }, /* (232) cmd ::= SHOW BNODES */ + { 319, -2 }, /* (233) cmd ::= SHOW SNODES */ + { 319, -2 }, /* (234) cmd ::= SHOW CLUSTER */ + { 319, -2 }, /* (235) cmd ::= SHOW TRANSACTIONS */ + { 319, -4 }, /* (236) cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ + { 319, -2 }, /* (237) cmd ::= SHOW CONSUMERS */ + { 319, -2 }, /* (238) cmd ::= SHOW SUBSCRIPTIONS */ + { 319, -5 }, /* (239) cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ + { 319, -6 }, /* (240) cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ + { 319, -3 }, /* (241) cmd ::= SHOW VNODES NK_INTEGER */ + { 319, -3 }, /* (242) cmd ::= SHOW VNODES NK_STRING */ + { 369, 0 }, /* (243) db_name_cond_opt ::= */ + { 369, -2 }, /* (244) db_name_cond_opt ::= db_name NK_DOT */ + { 370, 0 }, /* (245) like_pattern_opt ::= */ + { 370, -2 }, /* (246) like_pattern_opt ::= LIKE NK_STRING */ + { 371, -1 }, /* (247) table_name_cond ::= table_name */ + { 372, 0 }, /* (248) from_db_opt ::= */ + { 372, -2 }, /* (249) from_db_opt ::= FROM db_name */ + { 319, -8 }, /* (250) cmd ::= CREATE SMA INDEX not_exists_opt full_table_name ON full_table_name index_options */ + { 319, -4 }, /* (251) cmd ::= DROP INDEX exists_opt full_table_name */ + { 373, -10 }, /* (252) index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ + { 373, -12 }, /* (253) 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 */ + { 374, -1 }, /* (254) func_list ::= func */ + { 374, -3 }, /* (255) func_list ::= func_list NK_COMMA func */ + { 377, -4 }, /* (256) func ::= function_name NK_LP expression_list NK_RP */ + { 376, 0 }, /* (257) sma_stream_opt ::= */ + { 376, -3 }, /* (258) sma_stream_opt ::= stream_options WATERMARK duration_literal */ + { 376, -3 }, /* (259) sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ + { 319, -6 }, /* (260) cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ + { 319, -7 }, /* (261) cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ + { 319, -9 }, /* (262) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ + { 319, -7 }, /* (263) cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ + { 319, -9 }, /* (264) cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ + { 319, -4 }, /* (265) cmd ::= DROP TOPIC exists_opt topic_name */ + { 319, -7 }, /* (266) cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ + { 319, -2 }, /* (267) cmd ::= DESC full_table_name */ + { 319, -2 }, /* (268) cmd ::= DESCRIBE full_table_name */ + { 319, -3 }, /* (269) cmd ::= RESET QUERY CACHE */ + { 319, -4 }, /* (270) cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ + { 382, 0 }, /* (271) analyze_opt ::= */ + { 382, -1 }, /* (272) analyze_opt ::= ANALYZE */ + { 383, 0 }, /* (273) explain_options ::= */ + { 383, -3 }, /* (274) explain_options ::= explain_options VERBOSE NK_BOOL */ + { 383, -3 }, /* (275) explain_options ::= explain_options RATIO NK_FLOAT */ + { 319, -10 }, /* (276) cmd ::= CREATE agg_func_opt FUNCTION not_exists_opt function_name AS NK_STRING OUTPUTTYPE type_name bufsize_opt */ + { 319, -4 }, /* (277) cmd ::= DROP FUNCTION exists_opt function_name */ + { 384, 0 }, /* (278) agg_func_opt ::= */ + { 384, -1 }, /* (279) agg_func_opt ::= AGGREGATE */ + { 385, 0 }, /* (280) bufsize_opt ::= */ + { 385, -2 }, /* (281) bufsize_opt ::= BUFSIZE NK_INTEGER */ + { 319, -11 }, /* (282) cmd ::= CREATE STREAM not_exists_opt stream_name stream_options INTO full_table_name tags_def_opt subtable_opt AS query_or_subquery */ + { 319, -4 }, /* (283) cmd ::= DROP STREAM exists_opt stream_name */ + { 378, 0 }, /* (284) stream_options ::= */ + { 378, -3 }, /* (285) stream_options ::= stream_options TRIGGER AT_ONCE */ + { 378, -3 }, /* (286) stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ + { 378, -4 }, /* (287) stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ + { 378, -3 }, /* (288) stream_options ::= stream_options WATERMARK duration_literal */ + { 378, -4 }, /* (289) stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ + { 378, -3 }, /* (290) stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ + { 387, 0 }, /* (291) subtable_opt ::= */ + { 387, -4 }, /* (292) subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + { 319, -3 }, /* (293) cmd ::= KILL CONNECTION NK_INTEGER */ + { 319, -3 }, /* (294) cmd ::= KILL QUERY NK_STRING */ + { 319, -3 }, /* (295) cmd ::= KILL TRANSACTION NK_INTEGER */ + { 319, -2 }, /* (296) cmd ::= BALANCE VGROUP */ + { 319, -4 }, /* (297) cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + { 319, -4 }, /* (298) cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ + { 319, -3 }, /* (299) cmd ::= SPLIT VGROUP NK_INTEGER */ + { 389, -2 }, /* (300) dnode_list ::= DNODE NK_INTEGER */ + { 389, -3 }, /* (301) dnode_list ::= dnode_list DNODE NK_INTEGER */ + { 319, -4 }, /* (302) cmd ::= DELETE FROM full_table_name where_clause_opt */ + { 319, -1 }, /* (303) cmd ::= query_or_subquery */ + { 319, -7 }, /* (304) cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ + { 319, -4 }, /* (305) cmd ::= INSERT INTO full_table_name query_or_subquery */ + { 322, -1 }, /* (306) literal ::= NK_INTEGER */ + { 322, -1 }, /* (307) literal ::= NK_FLOAT */ + { 322, -1 }, /* (308) literal ::= NK_STRING */ + { 322, -1 }, /* (309) literal ::= NK_BOOL */ + { 322, -2 }, /* (310) literal ::= TIMESTAMP NK_STRING */ + { 322, -1 }, /* (311) literal ::= duration_literal */ + { 322, -1 }, /* (312) literal ::= NULL */ + { 322, -1 }, /* (313) literal ::= NK_QUESTION */ + { 365, -1 }, /* (314) duration_literal ::= NK_VARIABLE */ + { 391, -1 }, /* (315) signed ::= NK_INTEGER */ + { 391, -2 }, /* (316) signed ::= NK_PLUS NK_INTEGER */ + { 391, -2 }, /* (317) signed ::= NK_MINUS NK_INTEGER */ + { 391, -1 }, /* (318) signed ::= NK_FLOAT */ + { 391, -2 }, /* (319) signed ::= NK_PLUS NK_FLOAT */ + { 391, -2 }, /* (320) signed ::= NK_MINUS NK_FLOAT */ + { 354, -1 }, /* (321) signed_literal ::= signed */ + { 354, -1 }, /* (322) signed_literal ::= NK_STRING */ + { 354, -1 }, /* (323) signed_literal ::= NK_BOOL */ + { 354, -2 }, /* (324) signed_literal ::= TIMESTAMP NK_STRING */ + { 354, -1 }, /* (325) signed_literal ::= duration_literal */ + { 354, -1 }, /* (326) signed_literal ::= NULL */ + { 354, -1 }, /* (327) signed_literal ::= literal_func */ + { 354, -1 }, /* (328) signed_literal ::= NK_QUESTION */ + { 393, -1 }, /* (329) literal_list ::= signed_literal */ + { 393, -3 }, /* (330) literal_list ::= literal_list NK_COMMA signed_literal */ + { 330, -1 }, /* (331) db_name ::= NK_ID */ + { 360, -1 }, /* (332) table_name ::= NK_ID */ + { 352, -1 }, /* (333) column_name ::= NK_ID */ + { 367, -1 }, /* (334) function_name ::= NK_ID */ + { 394, -1 }, /* (335) table_alias ::= NK_ID */ + { 395, -1 }, /* (336) column_alias ::= NK_ID */ + { 324, -1 }, /* (337) user_name ::= NK_ID */ + { 379, -1 }, /* (338) topic_name ::= NK_ID */ + { 386, -1 }, /* (339) stream_name ::= NK_ID */ + { 381, -1 }, /* (340) cgroup_name ::= NK_ID */ + { 396, -1 }, /* (341) expr_or_subquery ::= expression */ + { 396, -1 }, /* (342) expr_or_subquery ::= subquery */ + { 388, -1 }, /* (343) expression ::= literal */ + { 388, -1 }, /* (344) expression ::= pseudo_column */ + { 388, -1 }, /* (345) expression ::= column_reference */ + { 388, -1 }, /* (346) expression ::= function_expression */ + { 388, -1 }, /* (347) expression ::= case_when_expression */ + { 388, -3 }, /* (348) expression ::= NK_LP expression NK_RP */ + { 388, -2 }, /* (349) expression ::= NK_PLUS expr_or_subquery */ + { 388, -2 }, /* (350) expression ::= NK_MINUS expr_or_subquery */ + { 388, -3 }, /* (351) expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + { 388, -3 }, /* (352) expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + { 388, -3 }, /* (353) expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + { 388, -3 }, /* (354) expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + { 388, -3 }, /* (355) expression ::= expr_or_subquery NK_REM expr_or_subquery */ + { 388, -3 }, /* (356) expression ::= column_reference NK_ARROW NK_STRING */ + { 388, -3 }, /* (357) expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + { 388, -3 }, /* (358) expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + { 357, -1 }, /* (359) expression_list ::= expr_or_subquery */ + { 357, -3 }, /* (360) expression_list ::= expression_list NK_COMMA expr_or_subquery */ + { 399, -1 }, /* (361) column_reference ::= column_name */ + { 399, -3 }, /* (362) column_reference ::= table_name NK_DOT column_name */ + { 398, -1 }, /* (363) pseudo_column ::= ROWTS */ + { 398, -1 }, /* (364) pseudo_column ::= TBNAME */ + { 398, -3 }, /* (365) pseudo_column ::= table_name NK_DOT TBNAME */ + { 398, -1 }, /* (366) pseudo_column ::= QSTART */ + { 398, -1 }, /* (367) pseudo_column ::= QEND */ + { 398, -1 }, /* (368) pseudo_column ::= QDURATION */ + { 398, -1 }, /* (369) pseudo_column ::= WSTART */ + { 398, -1 }, /* (370) pseudo_column ::= WEND */ + { 398, -1 }, /* (371) pseudo_column ::= WDURATION */ + { 398, -1 }, /* (372) pseudo_column ::= IROWTS */ + { 398, -1 }, /* (373) pseudo_column ::= QTAGS */ + { 400, -4 }, /* (374) function_expression ::= function_name NK_LP expression_list NK_RP */ + { 400, -4 }, /* (375) function_expression ::= star_func NK_LP star_func_para_list NK_RP */ + { 400, -6 }, /* (376) function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ + { 400, -1 }, /* (377) function_expression ::= literal_func */ + { 392, -3 }, /* (378) literal_func ::= noarg_func NK_LP NK_RP */ + { 392, -1 }, /* (379) literal_func ::= NOW */ + { 404, -1 }, /* (380) noarg_func ::= NOW */ + { 404, -1 }, /* (381) noarg_func ::= TODAY */ + { 404, -1 }, /* (382) noarg_func ::= TIMEZONE */ + { 404, -1 }, /* (383) noarg_func ::= DATABASE */ + { 404, -1 }, /* (384) noarg_func ::= CLIENT_VERSION */ + { 404, -1 }, /* (385) noarg_func ::= SERVER_VERSION */ + { 404, -1 }, /* (386) noarg_func ::= SERVER_STATUS */ + { 404, -1 }, /* (387) noarg_func ::= CURRENT_USER */ + { 404, -1 }, /* (388) noarg_func ::= USER */ + { 402, -1 }, /* (389) star_func ::= COUNT */ + { 402, -1 }, /* (390) star_func ::= FIRST */ + { 402, -1 }, /* (391) star_func ::= LAST */ + { 402, -1 }, /* (392) star_func ::= LAST_ROW */ + { 403, -1 }, /* (393) star_func_para_list ::= NK_STAR */ + { 403, -1 }, /* (394) star_func_para_list ::= other_para_list */ + { 405, -1 }, /* (395) other_para_list ::= star_func_para */ + { 405, -3 }, /* (396) other_para_list ::= other_para_list NK_COMMA star_func_para */ + { 406, -1 }, /* (397) star_func_para ::= expr_or_subquery */ + { 406, -3 }, /* (398) star_func_para ::= table_name NK_DOT NK_STAR */ + { 401, -4 }, /* (399) case_when_expression ::= CASE when_then_list case_when_else_opt END */ + { 401, -5 }, /* (400) case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ + { 407, -1 }, /* (401) when_then_list ::= when_then_expr */ + { 407, -2 }, /* (402) when_then_list ::= when_then_list when_then_expr */ + { 410, -4 }, /* (403) when_then_expr ::= WHEN common_expression THEN common_expression */ + { 408, 0 }, /* (404) case_when_else_opt ::= */ + { 408, -2 }, /* (405) case_when_else_opt ::= ELSE common_expression */ + { 411, -3 }, /* (406) predicate ::= expr_or_subquery compare_op expr_or_subquery */ + { 411, -5 }, /* (407) predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + { 411, -6 }, /* (408) predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + { 411, -3 }, /* (409) predicate ::= expr_or_subquery IS NULL */ + { 411, -4 }, /* (410) predicate ::= expr_or_subquery IS NOT NULL */ + { 411, -3 }, /* (411) predicate ::= expr_or_subquery in_op in_predicate_value */ + { 412, -1 }, /* (412) compare_op ::= NK_LT */ + { 412, -1 }, /* (413) compare_op ::= NK_GT */ + { 412, -1 }, /* (414) compare_op ::= NK_LE */ + { 412, -1 }, /* (415) compare_op ::= NK_GE */ + { 412, -1 }, /* (416) compare_op ::= NK_NE */ + { 412, -1 }, /* (417) compare_op ::= NK_EQ */ + { 412, -1 }, /* (418) compare_op ::= LIKE */ + { 412, -2 }, /* (419) compare_op ::= NOT LIKE */ + { 412, -1 }, /* (420) compare_op ::= MATCH */ + { 412, -1 }, /* (421) compare_op ::= NMATCH */ + { 412, -1 }, /* (422) compare_op ::= CONTAINS */ + { 413, -1 }, /* (423) in_op ::= IN */ + { 413, -2 }, /* (424) in_op ::= NOT IN */ + { 414, -3 }, /* (425) in_predicate_value ::= NK_LP literal_list NK_RP */ + { 415, -1 }, /* (426) boolean_value_expression ::= boolean_primary */ + { 415, -2 }, /* (427) boolean_value_expression ::= NOT boolean_primary */ + { 415, -3 }, /* (428) boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + { 415, -3 }, /* (429) boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + { 416, -1 }, /* (430) boolean_primary ::= predicate */ + { 416, -3 }, /* (431) boolean_primary ::= NK_LP boolean_value_expression NK_RP */ + { 409, -1 }, /* (432) common_expression ::= expr_or_subquery */ + { 409, -1 }, /* (433) common_expression ::= boolean_value_expression */ + { 417, 0 }, /* (434) from_clause_opt ::= */ + { 417, -2 }, /* (435) from_clause_opt ::= FROM table_reference_list */ + { 418, -1 }, /* (436) table_reference_list ::= table_reference */ + { 418, -3 }, /* (437) table_reference_list ::= table_reference_list NK_COMMA table_reference */ + { 419, -1 }, /* (438) table_reference ::= table_primary */ + { 419, -1 }, /* (439) table_reference ::= joined_table */ + { 420, -2 }, /* (440) table_primary ::= table_name alias_opt */ + { 420, -4 }, /* (441) table_primary ::= db_name NK_DOT table_name alias_opt */ + { 420, -2 }, /* (442) table_primary ::= subquery alias_opt */ + { 420, -1 }, /* (443) table_primary ::= parenthesized_joined_table */ + { 422, 0 }, /* (444) alias_opt ::= */ + { 422, -1 }, /* (445) alias_opt ::= table_alias */ + { 422, -2 }, /* (446) alias_opt ::= AS table_alias */ + { 423, -3 }, /* (447) parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + { 423, -3 }, /* (448) parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ + { 421, -6 }, /* (449) joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ + { 424, 0 }, /* (450) join_type ::= */ + { 424, -1 }, /* (451) join_type ::= INNER */ + { 426, -12 }, /* (452) 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 */ + { 427, 0 }, /* (453) set_quantifier_opt ::= */ + { 427, -1 }, /* (454) set_quantifier_opt ::= DISTINCT */ + { 427, -1 }, /* (455) set_quantifier_opt ::= ALL */ + { 428, -1 }, /* (456) select_list ::= select_item */ + { 428, -3 }, /* (457) select_list ::= select_list NK_COMMA select_item */ + { 436, -1 }, /* (458) select_item ::= NK_STAR */ + { 436, -1 }, /* (459) select_item ::= common_expression */ + { 436, -2 }, /* (460) select_item ::= common_expression column_alias */ + { 436, -3 }, /* (461) select_item ::= common_expression AS column_alias */ + { 436, -3 }, /* (462) select_item ::= table_name NK_DOT NK_STAR */ + { 390, 0 }, /* (463) where_clause_opt ::= */ + { 390, -2 }, /* (464) where_clause_opt ::= WHERE search_condition */ + { 429, 0 }, /* (465) partition_by_clause_opt ::= */ + { 429, -3 }, /* (466) partition_by_clause_opt ::= PARTITION BY partition_list */ + { 437, -1 }, /* (467) partition_list ::= partition_item */ + { 437, -3 }, /* (468) partition_list ::= partition_list NK_COMMA partition_item */ + { 438, -1 }, /* (469) partition_item ::= expr_or_subquery */ + { 438, -2 }, /* (470) partition_item ::= expr_or_subquery column_alias */ + { 438, -3 }, /* (471) partition_item ::= expr_or_subquery AS column_alias */ + { 433, 0 }, /* (472) twindow_clause_opt ::= */ + { 433, -6 }, /* (473) twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ + { 433, -4 }, /* (474) twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ + { 433, -6 }, /* (475) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ + { 433, -8 }, /* (476) twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ + { 375, 0 }, /* (477) sliding_opt ::= */ + { 375, -4 }, /* (478) sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ + { 432, 0 }, /* (479) fill_opt ::= */ + { 432, -4 }, /* (480) fill_opt ::= FILL NK_LP fill_mode NK_RP */ + { 432, -6 }, /* (481) fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ + { 439, -1 }, /* (482) fill_mode ::= NONE */ + { 439, -1 }, /* (483) fill_mode ::= PREV */ + { 439, -1 }, /* (484) fill_mode ::= NULL */ + { 439, -1 }, /* (485) fill_mode ::= LINEAR */ + { 439, -1 }, /* (486) fill_mode ::= NEXT */ + { 434, 0 }, /* (487) group_by_clause_opt ::= */ + { 434, -3 }, /* (488) group_by_clause_opt ::= GROUP BY group_by_list */ + { 440, -1 }, /* (489) group_by_list ::= expr_or_subquery */ + { 440, -3 }, /* (490) group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ + { 435, 0 }, /* (491) having_clause_opt ::= */ + { 435, -2 }, /* (492) having_clause_opt ::= HAVING search_condition */ + { 430, 0 }, /* (493) range_opt ::= */ + { 430, -6 }, /* (494) range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ + { 431, 0 }, /* (495) every_opt ::= */ + { 431, -4 }, /* (496) every_opt ::= EVERY NK_LP duration_literal NK_RP */ + { 441, -4 }, /* (497) query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + { 442, -1 }, /* (498) query_simple ::= query_specification */ + { 442, -1 }, /* (499) query_simple ::= union_query_expression */ + { 446, -4 }, /* (500) union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ + { 446, -3 }, /* (501) union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ + { 447, -1 }, /* (502) query_simple_or_subquery ::= query_simple */ + { 447, -1 }, /* (503) query_simple_or_subquery ::= subquery */ + { 380, -1 }, /* (504) query_or_subquery ::= query_expression */ + { 380, -1 }, /* (505) query_or_subquery ::= subquery */ + { 443, 0 }, /* (506) order_by_clause_opt ::= */ + { 443, -3 }, /* (507) order_by_clause_opt ::= ORDER BY sort_specification_list */ + { 444, 0 }, /* (508) slimit_clause_opt ::= */ + { 444, -2 }, /* (509) slimit_clause_opt ::= SLIMIT NK_INTEGER */ + { 444, -4 }, /* (510) slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + { 444, -4 }, /* (511) slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 445, 0 }, /* (512) limit_clause_opt ::= */ + { 445, -2 }, /* (513) limit_clause_opt ::= LIMIT NK_INTEGER */ + { 445, -4 }, /* (514) limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ + { 445, -4 }, /* (515) limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + { 397, -3 }, /* (516) subquery ::= NK_LP query_expression NK_RP */ + { 397, -3 }, /* (517) subquery ::= NK_LP subquery NK_RP */ + { 425, -1 }, /* (518) search_condition ::= common_expression */ + { 448, -1 }, /* (519) sort_specification_list ::= sort_specification */ + { 448, -3 }, /* (520) sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ + { 449, -3 }, /* (521) sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ + { 450, 0 }, /* (522) ordering_specification_opt ::= */ + { 450, -1 }, /* (523) ordering_specification_opt ::= ASC */ + { 450, -1 }, /* (524) ordering_specification_opt ::= DESC */ + { 451, 0 }, /* (525) null_ordering_opt ::= */ + { 451, -2 }, /* (526) null_ordering_opt ::= NULLS FIRST */ + { 451, -2 }, /* (527) null_ordering_opt ::= NULLS LAST */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -3592,11 +3708,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,319,&yymsp[0].minor); + yy_destructor(yypParser,320,&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,320,&yymsp[0].minor); + yy_destructor(yypParser,321,&yymsp[0].minor); break; case 2: /* account_options ::= */ { } @@ -3610,20 +3726,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,319,&yymsp[-2].minor); +{ yy_destructor(yypParser,320,&yymsp[-2].minor); { } - yy_destructor(yypParser,321,&yymsp[0].minor); + yy_destructor(yypParser,322,&yymsp[0].minor); } break; case 12: /* alter_account_options ::= alter_account_option */ -{ yy_destructor(yypParser,322,&yymsp[0].minor); +{ yy_destructor(yypParser,323,&yymsp[0].minor); { } } break; case 13: /* alter_account_options ::= alter_account_options alter_account_option */ -{ yy_destructor(yypParser,320,&yymsp[-1].minor); +{ yy_destructor(yypParser,321,&yymsp[-1].minor); { } - yy_destructor(yypParser,322,&yymsp[0].minor); + yy_destructor(yypParser,323,&yymsp[0].minor); } break; case 14: /* alter_account_option ::= PASS literal */ @@ -3637,72 +3753,72 @@ 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,321,&yymsp[0].minor); + yy_destructor(yypParser,322,&yymsp[0].minor); break; case 24: /* cmd ::= CREATE USER user_name PASS NK_STRING sysinfo_opt */ -{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy29, &yymsp[-1].minor.yy0, yymsp[0].minor.yy503); } +{ pCxt->pRootNode = createCreateUserStmt(pCxt, &yymsp[-3].minor.yy481, &yymsp[-1].minor.yy0, yymsp[0].minor.yy607); } break; case 25: /* cmd ::= ALTER USER user_name PASS NK_STRING */ -{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy29, TSDB_ALTER_USER_PASSWD, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, 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.yy29, TSDB_ALTER_USER_ENABLE, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, 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.yy29, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createAlterUserStmt(pCxt, &yymsp[-2].minor.yy481, TSDB_ALTER_USER_SYSINFO, &yymsp[0].minor.yy0); } break; case 28: /* cmd ::= DROP USER user_name */ -{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createDropUserStmt(pCxt, &yymsp[0].minor.yy481); } break; case 29: /* sysinfo_opt ::= */ -{ yymsp[1].minor.yy503 = 1; } +{ yymsp[1].minor.yy607 = 1; } break; case 30: /* sysinfo_opt ::= SYSINFO NK_INTEGER */ -{ yymsp[-1].minor.yy503 = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); } +{ yymsp[-1].minor.yy607 = 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.yy9, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createGrantStmt(pCxt, yymsp[-4].minor.yy37, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; case 32: /* cmd ::= REVOKE privileges ON priv_level FROM user_name */ -{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy9, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } +{ pCxt->pRootNode = createRevokeStmt(pCxt, yymsp[-4].minor.yy37, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; case 33: /* privileges ::= ALL */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_ALL; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_ALL; } break; case 34: /* privileges ::= priv_type_list */ case 35: /* priv_type_list ::= priv_type */ yytestcase(yyruleno==35); -{ yylhsminor.yy9 = yymsp[0].minor.yy9; } - yymsp[0].minor.yy9 = yylhsminor.yy9; +{ yylhsminor.yy37 = yymsp[0].minor.yy37; } + yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 36: /* priv_type_list ::= priv_type_list NK_COMMA priv_type */ -{ yylhsminor.yy9 = yymsp[-2].minor.yy9 | yymsp[0].minor.yy9; } - yymsp[-2].minor.yy9 = yylhsminor.yy9; +{ yylhsminor.yy37 = yymsp[-2].minor.yy37 | yymsp[0].minor.yy37; } + yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 37: /* priv_type ::= READ */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_READ; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_READ; } break; case 38: /* priv_type ::= WRITE */ -{ yymsp[0].minor.yy9 = PRIVILEGE_TYPE_WRITE; } +{ yymsp[0].minor.yy37 = PRIVILEGE_TYPE_WRITE; } break; case 39: /* priv_level ::= NK_STAR NK_DOT NK_STAR */ -{ yylhsminor.yy29 = yymsp[-2].minor.yy0; } - yymsp[-2].minor.yy29 = yylhsminor.yy29; +{ yylhsminor.yy481 = yymsp[-2].minor.yy0; } + yymsp[-2].minor.yy481 = yylhsminor.yy481; break; case 40: /* priv_level ::= db_name NK_DOT NK_STAR */ -{ yylhsminor.yy29 = yymsp[-2].minor.yy29; } - yymsp[-2].minor.yy29 = yylhsminor.yy29; +{ yylhsminor.yy481 = yymsp[-2].minor.yy481; } + yymsp[-2].minor.yy481 = yylhsminor.yy481; break; case 41: /* cmd ::= CREATE DNODE dnode_endpoint */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy29, NULL); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[0].minor.yy481, NULL); } break; case 42: /* cmd ::= CREATE DNODE dnode_endpoint PORT NK_INTEGER */ -{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0); } +{ pCxt->pRootNode = createCreateDnodeStmt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0); } break; - case 43: /* cmd ::= DROP DNODE NK_INTEGER */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy0); } + case 43: /* cmd ::= DROP DNODE NK_INTEGER force_opt */ +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy777); } break; - case 44: /* cmd ::= DROP DNODE dnode_endpoint */ -{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[0].minor.yy29); } + case 44: /* cmd ::= DROP DNODE dnode_endpoint force_opt */ +{ pCxt->pRootNode = createDropDnodeStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy777); } break; case 45: /* cmd ::= ALTER DNODE NK_INTEGER NK_STRING */ { pCxt->pRootNode = createAlterDnodeStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, NULL); } @@ -3719,1388 +3835,1390 @@ static YYACTIONTYPE yy_reduce( case 49: /* dnode_endpoint ::= NK_STRING */ case 50: /* dnode_endpoint ::= NK_ID */ yytestcase(yyruleno==50); case 51: /* dnode_endpoint ::= NK_IPTOKEN */ yytestcase(yyruleno==51); - case 329: /* db_name ::= NK_ID */ yytestcase(yyruleno==329); - case 330: /* table_name ::= NK_ID */ yytestcase(yyruleno==330); - case 331: /* column_name ::= NK_ID */ yytestcase(yyruleno==331); - case 332: /* function_name ::= NK_ID */ yytestcase(yyruleno==332); - case 333: /* table_alias ::= NK_ID */ yytestcase(yyruleno==333); - case 334: /* column_alias ::= NK_ID */ yytestcase(yyruleno==334); - case 335: /* user_name ::= NK_ID */ yytestcase(yyruleno==335); - case 336: /* topic_name ::= NK_ID */ yytestcase(yyruleno==336); - case 337: /* stream_name ::= NK_ID */ yytestcase(yyruleno==337); - case 338: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==338); - case 378: /* noarg_func ::= NOW */ yytestcase(yyruleno==378); - case 379: /* noarg_func ::= TODAY */ yytestcase(yyruleno==379); - case 380: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==380); - case 381: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==381); - case 382: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==382); - case 383: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==383); - case 384: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==384); - case 385: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==385); - case 386: /* noarg_func ::= USER */ yytestcase(yyruleno==386); - case 387: /* star_func ::= COUNT */ yytestcase(yyruleno==387); - case 388: /* star_func ::= FIRST */ yytestcase(yyruleno==388); - case 389: /* star_func ::= LAST */ yytestcase(yyruleno==389); - case 390: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==390); -{ yylhsminor.yy29 = yymsp[0].minor.yy0; } - yymsp[0].minor.yy29 = yylhsminor.yy29; + case 331: /* db_name ::= NK_ID */ yytestcase(yyruleno==331); + case 332: /* table_name ::= NK_ID */ yytestcase(yyruleno==332); + case 333: /* column_name ::= NK_ID */ yytestcase(yyruleno==333); + case 334: /* function_name ::= NK_ID */ yytestcase(yyruleno==334); + case 335: /* table_alias ::= NK_ID */ yytestcase(yyruleno==335); + case 336: /* column_alias ::= NK_ID */ yytestcase(yyruleno==336); + case 337: /* user_name ::= NK_ID */ yytestcase(yyruleno==337); + case 338: /* topic_name ::= NK_ID */ yytestcase(yyruleno==338); + case 339: /* stream_name ::= NK_ID */ yytestcase(yyruleno==339); + case 340: /* cgroup_name ::= NK_ID */ yytestcase(yyruleno==340); + case 380: /* noarg_func ::= NOW */ yytestcase(yyruleno==380); + case 381: /* noarg_func ::= TODAY */ yytestcase(yyruleno==381); + case 382: /* noarg_func ::= TIMEZONE */ yytestcase(yyruleno==382); + case 383: /* noarg_func ::= DATABASE */ yytestcase(yyruleno==383); + case 384: /* noarg_func ::= CLIENT_VERSION */ yytestcase(yyruleno==384); + case 385: /* noarg_func ::= SERVER_VERSION */ yytestcase(yyruleno==385); + case 386: /* noarg_func ::= SERVER_STATUS */ yytestcase(yyruleno==386); + case 387: /* noarg_func ::= CURRENT_USER */ yytestcase(yyruleno==387); + case 388: /* noarg_func ::= USER */ yytestcase(yyruleno==388); + case 389: /* star_func ::= COUNT */ yytestcase(yyruleno==389); + case 390: /* star_func ::= FIRST */ yytestcase(yyruleno==390); + case 391: /* star_func ::= LAST */ yytestcase(yyruleno==391); + case 392: /* star_func ::= LAST_ROW */ yytestcase(yyruleno==392); +{ yylhsminor.yy481 = yymsp[0].minor.yy0; } + yymsp[0].minor.yy481 = yylhsminor.yy481; break; - case 52: /* cmd ::= ALTER LOCAL NK_STRING */ + case 52: /* force_opt ::= */ + case 71: /* not_exists_opt ::= */ yytestcase(yyruleno==71); + case 73: /* exists_opt ::= */ yytestcase(yyruleno==73); + case 271: /* analyze_opt ::= */ yytestcase(yyruleno==271); + case 278: /* agg_func_opt ::= */ yytestcase(yyruleno==278); + case 453: /* set_quantifier_opt ::= */ yytestcase(yyruleno==453); +{ yymsp[1].minor.yy777 = false; } + break; + case 53: /* force_opt ::= FORCE */ + case 272: /* analyze_opt ::= ANALYZE */ yytestcase(yyruleno==272); + case 279: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==279); + case 454: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==454); +{ yymsp[0].minor.yy777 = true; } + break; + case 54: /* cmd ::= ALTER LOCAL NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 53: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ + case 55: /* cmd ::= ALTER LOCAL NK_STRING NK_STRING */ { pCxt->pRootNode = createAlterLocalStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 54: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ + case 56: /* cmd ::= CREATE QNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_QNODE_STMT, &yymsp[0].minor.yy0); } break; - case 55: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ + case 57: /* cmd ::= DROP QNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_QNODE_STMT, &yymsp[0].minor.yy0); } break; - case 56: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ + case 58: /* cmd ::= CREATE BNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_BNODE_STMT, &yymsp[0].minor.yy0); } break; - case 57: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ + case 59: /* cmd ::= DROP BNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_BNODE_STMT, &yymsp[0].minor.yy0); } break; - case 58: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ + case 60: /* cmd ::= CREATE SNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_SNODE_STMT, &yymsp[0].minor.yy0); } break; - case 59: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ + case 61: /* cmd ::= DROP SNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_SNODE_STMT, &yymsp[0].minor.yy0); } break; - case 60: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ + case 62: /* cmd ::= CREATE MNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createCreateComponentNodeStmt(pCxt, QUERY_NODE_CREATE_MNODE_STMT, &yymsp[0].minor.yy0); } break; - case 61: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ + case 63: /* cmd ::= DROP MNODE ON DNODE NK_INTEGER */ { pCxt->pRootNode = createDropComponentNodeStmt(pCxt, QUERY_NODE_DROP_MNODE_STMT, &yymsp[0].minor.yy0); } break; - case 62: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ -{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy137, &yymsp[-1].minor.yy29, yymsp[0].minor.yy812); } + case 64: /* cmd ::= CREATE DATABASE not_exists_opt db_name db_options */ +{ pCxt->pRootNode = createCreateDatabaseStmt(pCxt, yymsp[-2].minor.yy777, &yymsp[-1].minor.yy481, yymsp[0].minor.yy232); } break; - case 63: /* cmd ::= DROP DATABASE exists_opt db_name */ -{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 65: /* cmd ::= DROP DATABASE exists_opt db_name */ +{ pCxt->pRootNode = createDropDatabaseStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 64: /* cmd ::= USE db_name */ -{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 66: /* cmd ::= USE db_name */ +{ pCxt->pRootNode = createUseDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 65: /* cmd ::= ALTER DATABASE db_name alter_db_options */ -{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy812); } + case 67: /* cmd ::= ALTER DATABASE db_name alter_db_options */ +{ pCxt->pRootNode = createAlterDatabaseStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy232); } break; - case 66: /* cmd ::= FLUSH DATABASE db_name */ -{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 68: /* cmd ::= FLUSH DATABASE db_name */ +{ pCxt->pRootNode = createFlushDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 67: /* cmd ::= TRIM DATABASE db_name speed_opt */ -{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy460); } + case 69: /* cmd ::= TRIM DATABASE db_name speed_opt */ +{ pCxt->pRootNode = createTrimDatabaseStmt(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy692); } break; - case 68: /* not_exists_opt ::= IF NOT EXISTS */ -{ yymsp[-2].minor.yy137 = true; } + case 70: /* not_exists_opt ::= IF NOT EXISTS */ +{ yymsp[-2].minor.yy777 = true; } break; - case 69: /* not_exists_opt ::= */ - case 71: /* exists_opt ::= */ yytestcase(yyruleno==71); - case 269: /* analyze_opt ::= */ yytestcase(yyruleno==269); - case 276: /* agg_func_opt ::= */ yytestcase(yyruleno==276); - case 451: /* set_quantifier_opt ::= */ yytestcase(yyruleno==451); -{ yymsp[1].minor.yy137 = false; } + case 72: /* exists_opt ::= IF EXISTS */ +{ yymsp[-1].minor.yy777 = true; } break; - case 70: /* exists_opt ::= IF EXISTS */ -{ yymsp[-1].minor.yy137 = true; } + case 74: /* db_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultDatabaseOptions(pCxt); } break; - case 72: /* db_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultDatabaseOptions(pCxt); } + case 75: /* db_options ::= db_options BUFFER NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 73: /* db_options ::= db_options BUFFER NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_BUFFER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 76: /* db_options ::= db_options CACHEMODEL NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 74: /* db_options ::= db_options CACHEMODEL NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_CACHEMODEL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 77: /* db_options ::= db_options CACHESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 75: /* db_options ::= db_options CACHESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_CACHESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 78: /* db_options ::= db_options COMP NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_COMP, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 76: /* db_options ::= db_options COMP NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_COMP, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 79: /* db_options ::= db_options DURATION NK_INTEGER */ + case 80: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==80); +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 77: /* db_options ::= db_options DURATION NK_INTEGER */ - case 78: /* db_options ::= db_options DURATION NK_VARIABLE */ yytestcase(yyruleno==78); -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_DAYS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 81: /* db_options ::= db_options MAXROWS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 79: /* db_options ::= db_options MAXROWS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_MAXROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 82: /* db_options ::= db_options MINROWS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 80: /* db_options ::= db_options MINROWS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_MINROWS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 83: /* db_options ::= db_options KEEP integer_list */ + case 84: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==84); +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_KEEP, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 81: /* db_options ::= db_options KEEP integer_list */ - case 82: /* db_options ::= db_options KEEP variable_list */ yytestcase(yyruleno==82); -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_KEEP, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 85: /* db_options ::= db_options PAGES NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 83: /* db_options ::= db_options PAGES NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PAGES, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 86: /* db_options ::= db_options PAGESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 84: /* db_options ::= db_options PAGESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 87: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 85: /* db_options ::= db_options TSDB_PAGESIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TSDB_PAGESIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 88: /* db_options ::= db_options PRECISION NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 86: /* db_options ::= db_options PRECISION NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_PRECISION, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 89: /* db_options ::= db_options REPLICA NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 87: /* db_options ::= db_options REPLICA NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_REPLICA, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 90: /* db_options ::= db_options STRICT NK_STRING */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 88: /* db_options ::= db_options STRICT NK_STRING */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_STRICT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 91: /* db_options ::= db_options VGROUPS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 89: /* db_options ::= db_options VGROUPS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_VGROUPS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 92: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 90: /* db_options ::= db_options SINGLE_STABLE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_SINGLE_STABLE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 93: /* db_options ::= db_options RETENTIONS retention_list */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_RETENTIONS, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 91: /* db_options ::= db_options RETENTIONS retention_list */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_RETENTIONS, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 94: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 92: /* db_options ::= db_options SCHEMALESS NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_SCHEMALESS, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 95: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 93: /* db_options ::= db_options WAL_LEVEL NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 96: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 94: /* db_options ::= db_options WAL_FSYNC_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_FSYNC, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 97: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 95: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_RETENTION_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 96: /* db_options ::= db_options WAL_RETENTION_PERIOD NK_MINUS NK_INTEGER */ + case 98: /* 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.yy812 = setDatabaseOption(pCxt, yymsp[-3].minor.yy812, DB_OPTION_WAL_RETENTION_PERIOD, &t); + yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-3].minor.yy232, DB_OPTION_WAL_RETENTION_PERIOD, &t); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 97: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 99: /* db_options ::= db_options WAL_RETENTION_SIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_RETENTION_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 98: /* db_options ::= db_options WAL_RETENTION_SIZE NK_MINUS NK_INTEGER */ + case 100: /* 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.yy812 = setDatabaseOption(pCxt, yymsp[-3].minor.yy812, DB_OPTION_WAL_RETENTION_SIZE, &t); + yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-3].minor.yy232, DB_OPTION_WAL_RETENTION_SIZE, &t); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 99: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 100: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 101: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 102: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 103: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ -{ yylhsminor.yy812 = setDatabaseOption(pCxt, yymsp[-2].minor.yy812, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 104: /* alter_db_options ::= alter_db_option */ -{ yylhsminor.yy812 = createAlterDatabaseOptions(pCxt); yylhsminor.yy812 = setAlterDatabaseOption(pCxt, yylhsminor.yy812, &yymsp[0].minor.yy245); } - yymsp[0].minor.yy812 = yylhsminor.yy812; - break; - case 105: /* alter_db_options ::= alter_db_options alter_db_option */ -{ yylhsminor.yy812 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy812, &yymsp[0].minor.yy245); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; - break; - case 106: /* alter_db_option ::= BUFFER NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 107: /* alter_db_option ::= CACHEMODEL NK_STRING */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 108: /* alter_db_option ::= CACHESIZE NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 109: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 110: /* alter_db_option ::= KEEP integer_list */ - case 111: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==111); -{ yymsp[-1].minor.yy245.type = DB_OPTION_KEEP; yymsp[-1].minor.yy245.pList = yymsp[0].minor.yy424; } - break; - case 112: /* alter_db_option ::= PAGES NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_PAGES; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 113: /* alter_db_option ::= REPLICA NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 114: /* alter_db_option ::= STRICT NK_STRING */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_STRICT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 115: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_WAL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 116: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } - break; - case 117: /* integer_list ::= NK_INTEGER */ -{ yylhsminor.yy424 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 118: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ - case 299: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==299); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 119: /* variable_list ::= NK_VARIABLE */ -{ yylhsminor.yy424 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 120: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 121: /* retention_list ::= retention */ - case 143: /* multi_create_clause ::= create_subtable_clause */ yytestcase(yyruleno==143); - case 146: /* multi_drop_clause ::= drop_table_clause */ yytestcase(yyruleno==146); - case 153: /* column_def_list ::= column_def */ yytestcase(yyruleno==153); - case 196: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==196); - case 201: /* col_name_list ::= col_name */ yytestcase(yyruleno==201); - case 252: /* func_list ::= func */ yytestcase(yyruleno==252); - case 327: /* literal_list ::= signed_literal */ yytestcase(yyruleno==327); - case 393: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==393); - case 399: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==399); - case 454: /* select_list ::= select_item */ yytestcase(yyruleno==454); - case 465: /* partition_list ::= partition_item */ yytestcase(yyruleno==465); - case 517: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==517); -{ yylhsminor.yy424 = createNodeList(pCxt, yymsp[0].minor.yy812); } - yymsp[0].minor.yy424 = yylhsminor.yy424; - break; - case 122: /* retention_list ::= retention_list NK_COMMA retention */ - case 154: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==154); - case 197: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==197); - case 202: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==202); - case 253: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==253); - case 328: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==328); - case 394: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==394); - case 455: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==455); - case 466: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==466); - case 518: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==518); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; - break; - case 123: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ -{ yylhsminor.yy812 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; - break; - case 124: /* speed_opt ::= */ - case 278: /* bufsize_opt ::= */ yytestcase(yyruleno==278); -{ yymsp[1].minor.yy460 = 0; } - break; - case 125: /* speed_opt ::= MAX_SPEED NK_INTEGER */ - case 279: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==279); -{ yymsp[-1].minor.yy460 = taosStr2Int32(yymsp[0].minor.yy0.z, NULL, 10); } - break; - case 126: /* cmd ::= CREATE TABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def_opt table_options */ - case 128: /* cmd ::= CREATE STABLE not_exists_opt full_table_name NK_LP column_def_list NK_RP tags_def table_options */ yytestcase(yyruleno==128); -{ pCxt->pRootNode = createCreateTableStmt(pCxt, yymsp[-6].minor.yy137, yymsp[-5].minor.yy812, yymsp[-3].minor.yy424, yymsp[-1].minor.yy424, yymsp[0].minor.yy812); } - break; - case 127: /* cmd ::= CREATE TABLE multi_create_clause */ -{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 129: /* cmd ::= DROP TABLE multi_drop_clause */ -{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy424); } - break; - case 130: /* cmd ::= DROP STABLE exists_opt full_table_name */ -{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } - break; - case 131: /* cmd ::= ALTER TABLE alter_table_clause */ - case 301: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==301); -{ pCxt->pRootNode = yymsp[0].minor.yy812; } - break; - case 132: /* cmd ::= ALTER STABLE alter_table_clause */ -{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy812); } - break; - case 133: /* alter_table_clause ::= full_table_name alter_table_options */ -{ yylhsminor.yy812 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; - break; - case 134: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 135: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ -{ yylhsminor.yy812 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy812, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 136: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 137: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ -{ yylhsminor.yy812 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 138: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 139: /* alter_table_clause ::= full_table_name DROP TAG column_name */ -{ yylhsminor.yy812 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy812, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; - break; - case 140: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ -{ yylhsminor.yy812 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 141: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ -{ yylhsminor.yy812 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy812, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; - break; - case 142: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ -{ yylhsminor.yy812 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy812, &yymsp[-2].minor.yy29, yymsp[0].minor.yy812); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; - break; - case 144: /* multi_create_clause ::= multi_create_clause create_subtable_clause */ - case 147: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==147); - case 400: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==400); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-1].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy424 = yylhsminor.yy424; + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 101: /* db_options ::= db_options WAL_ROLL_PERIOD NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_ROLL_PERIOD, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 102: /* db_options ::= db_options WAL_SEGMENT_SIZE NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_WAL_SEGMENT_SIZE, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 103: /* db_options ::= db_options STT_TRIGGER NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_STT_TRIGGER, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 104: /* db_options ::= db_options TABLE_PREFIX NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TABLE_PREFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 105: /* db_options ::= db_options TABLE_SUFFIX NK_INTEGER */ +{ yylhsminor.yy232 = setDatabaseOption(pCxt, yymsp[-2].minor.yy232, DB_OPTION_TABLE_SUFFIX, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 106: /* alter_db_options ::= alter_db_option */ +{ yylhsminor.yy232 = createAlterDatabaseOptions(pCxt); yylhsminor.yy232 = setAlterDatabaseOption(pCxt, yylhsminor.yy232, &yymsp[0].minor.yy101); } + yymsp[0].minor.yy232 = yylhsminor.yy232; + break; + case 107: /* alter_db_options ::= alter_db_options alter_db_option */ +{ yylhsminor.yy232 = setAlterDatabaseOption(pCxt, yymsp[-1].minor.yy232, &yymsp[0].minor.yy101); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; + break; + case 108: /* alter_db_option ::= BUFFER NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_BUFFER; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 109: /* alter_db_option ::= CACHEMODEL NK_STRING */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_CACHEMODEL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 110: /* alter_db_option ::= CACHESIZE NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_CACHESIZE; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 111: /* alter_db_option ::= WAL_FSYNC_PERIOD NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_FSYNC; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 112: /* alter_db_option ::= KEEP integer_list */ + case 113: /* alter_db_option ::= KEEP variable_list */ yytestcase(yyruleno==113); +{ yymsp[-1].minor.yy101.type = DB_OPTION_KEEP; yymsp[-1].minor.yy101.pList = yymsp[0].minor.yy288; } + break; + case 114: /* alter_db_option ::= PAGES NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_PAGES; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 115: /* alter_db_option ::= REPLICA NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_REPLICA; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 116: /* alter_db_option ::= STRICT NK_STRING */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_STRICT; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 117: /* alter_db_option ::= WAL_LEVEL NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_WAL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 118: /* alter_db_option ::= STT_TRIGGER NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = DB_OPTION_STT_TRIGGER; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } + break; + case 119: /* integer_list ::= NK_INTEGER */ +{ yylhsminor.yy288 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + break; + case 120: /* integer_list ::= integer_list NK_COMMA NK_INTEGER */ + case 301: /* dnode_list ::= dnode_list DNODE NK_INTEGER */ yytestcase(yyruleno==301); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + break; + case 121: /* variable_list ::= NK_VARIABLE */ +{ yylhsminor.yy288 = createNodeList(pCxt, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + break; + case 122: /* variable_list ::= variable_list NK_COMMA NK_VARIABLE */ +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + 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 198: /* rollup_func_list ::= rollup_func_name */ yytestcase(yyruleno==198); + case 203: /* col_name_list ::= col_name */ yytestcase(yyruleno==203); + case 254: /* func_list ::= func */ yytestcase(yyruleno==254); + case 329: /* literal_list ::= signed_literal */ yytestcase(yyruleno==329); + case 395: /* other_para_list ::= star_func_para */ yytestcase(yyruleno==395); + case 401: /* when_then_list ::= when_then_expr */ yytestcase(yyruleno==401); + case 456: /* select_list ::= select_item */ yytestcase(yyruleno==456); + case 467: /* partition_list ::= partition_item */ yytestcase(yyruleno==467); + case 519: /* sort_specification_list ::= sort_specification */ yytestcase(yyruleno==519); +{ yylhsminor.yy288 = createNodeList(pCxt, yymsp[0].minor.yy232); } + yymsp[0].minor.yy288 = yylhsminor.yy288; + 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 199: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==199); + case 204: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==204); + case 255: /* func_list ::= func_list NK_COMMA func */ yytestcase(yyruleno==255); + case 330: /* literal_list ::= literal_list NK_COMMA signed_literal */ yytestcase(yyruleno==330); + case 396: /* other_para_list ::= other_para_list NK_COMMA star_func_para */ yytestcase(yyruleno==396); + case 457: /* select_list ::= select_list NK_COMMA select_item */ yytestcase(yyruleno==457); + case 468: /* partition_list ::= partition_list NK_COMMA partition_item */ yytestcase(yyruleno==468); + case 520: /* sort_specification_list ::= sort_specification_list NK_COMMA sort_specification */ yytestcase(yyruleno==520); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; + break; + case 125: /* retention ::= NK_VARIABLE NK_COLON NK_VARIABLE */ +{ yylhsminor.yy232 = createNodeListNodeEx(pCxt, createDurationValueNode(pCxt, &yymsp[-2].minor.yy0), createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; + break; + case 126: /* speed_opt ::= */ + case 280: /* bufsize_opt ::= */ yytestcase(yyruleno==280); +{ yymsp[1].minor.yy692 = 0; } + break; + case 127: /* speed_opt ::= MAX_SPEED NK_INTEGER */ + case 281: /* bufsize_opt ::= BUFSIZE NK_INTEGER */ yytestcase(yyruleno==281); +{ yymsp[-1].minor.yy692 = 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.yy777, yymsp[-5].minor.yy232, yymsp[-3].minor.yy288, yymsp[-1].minor.yy288, yymsp[0].minor.yy232); } + break; + case 129: /* cmd ::= CREATE TABLE multi_create_clause */ +{ pCxt->pRootNode = createCreateMultiTableStmt(pCxt, yymsp[0].minor.yy288); } + break; + case 131: /* cmd ::= DROP TABLE multi_drop_clause */ +{ pCxt->pRootNode = createDropTableStmt(pCxt, yymsp[0].minor.yy288); } + break; + case 132: /* cmd ::= DROP STABLE exists_opt full_table_name */ +{ pCxt->pRootNode = createDropSuperTableStmt(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } + break; + case 133: /* cmd ::= ALTER TABLE alter_table_clause */ + case 303: /* cmd ::= query_or_subquery */ yytestcase(yyruleno==303); +{ pCxt->pRootNode = yymsp[0].minor.yy232; } + break; + case 134: /* cmd ::= ALTER STABLE alter_table_clause */ +{ pCxt->pRootNode = setAlterSuperTableType(yymsp[0].minor.yy232); } + break; + case 135: /* alter_table_clause ::= full_table_name alter_table_options */ +{ yylhsminor.yy232 = createAlterTableModifyOptions(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; + break; + case 136: /* alter_table_clause ::= full_table_name ADD COLUMN column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_ADD_COLUMN, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 137: /* alter_table_clause ::= full_table_name DROP COLUMN column_name */ +{ yylhsminor.yy232 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy232, TSDB_ALTER_TABLE_DROP_COLUMN, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 138: /* alter_table_clause ::= full_table_name MODIFY COLUMN column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 139: /* alter_table_clause ::= full_table_name RENAME COLUMN column_name column_name */ +{ yylhsminor.yy232 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_COLUMN_NAME, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 140: /* alter_table_clause ::= full_table_name ADD TAG column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_ADD_TAG, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 141: /* alter_table_clause ::= full_table_name DROP TAG column_name */ +{ yylhsminor.yy232 = createAlterTableDropCol(pCxt, yymsp[-3].minor.yy232, TSDB_ALTER_TABLE_DROP_TAG, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; + break; + case 142: /* alter_table_clause ::= full_table_name MODIFY TAG column_name type_name */ +{ yylhsminor.yy232 = createAlterTableAddModifyCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_TAG_BYTES, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 143: /* alter_table_clause ::= full_table_name RENAME TAG column_name column_name */ +{ yylhsminor.yy232 = createAlterTableRenameCol(pCxt, yymsp[-4].minor.yy232, TSDB_ALTER_TABLE_UPDATE_TAG_NAME, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; + break; + case 144: /* alter_table_clause ::= full_table_name SET TAG column_name NK_EQ signed_literal */ +{ yylhsminor.yy232 = createAlterTableSetTag(pCxt, yymsp[-5].minor.yy232, &yymsp[-2].minor.yy481, yymsp[0].minor.yy232); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; + 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 402: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==402); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-1].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy288 = yylhsminor.yy288; break; - case 145: /* 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.yy812 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy137, yymsp[-8].minor.yy812, yymsp[-6].minor.yy812, yymsp[-5].minor.yy424, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } - yymsp[-9].minor.yy812 = yylhsminor.yy812; + 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.yy232 = createCreateSubTableClause(pCxt, yymsp[-9].minor.yy777, yymsp[-8].minor.yy232, yymsp[-6].minor.yy232, yymsp[-5].minor.yy288, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } + yymsp[-9].minor.yy232 = yylhsminor.yy232; break; - case 148: /* drop_table_clause ::= exists_opt full_table_name */ -{ yylhsminor.yy812 = createDropTableClause(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 150: /* drop_table_clause ::= exists_opt full_table_name */ +{ yylhsminor.yy232 = createDropTableClause(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 149: /* specific_cols_opt ::= */ - case 180: /* tags_def_opt ::= */ yytestcase(yyruleno==180); - case 463: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==463); - case 485: /* group_by_clause_opt ::= */ yytestcase(yyruleno==485); - case 504: /* order_by_clause_opt ::= */ yytestcase(yyruleno==504); -{ yymsp[1].minor.yy424 = NULL; } + case 151: /* specific_cols_opt ::= */ + case 182: /* tags_def_opt ::= */ yytestcase(yyruleno==182); + case 465: /* partition_by_clause_opt ::= */ yytestcase(yyruleno==465); + case 487: /* group_by_clause_opt ::= */ yytestcase(yyruleno==487); + case 506: /* order_by_clause_opt ::= */ yytestcase(yyruleno==506); +{ yymsp[1].minor.yy288 = NULL; } break; - case 150: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ -{ yymsp[-2].minor.yy424 = yymsp[-1].minor.yy424; } + case 152: /* specific_cols_opt ::= NK_LP col_name_list NK_RP */ +{ yymsp[-2].minor.yy288 = yymsp[-1].minor.yy288; } break; - case 151: /* full_table_name ::= table_name */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy29, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 153: /* full_table_name ::= table_name */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, NULL, &yymsp[0].minor.yy481, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 152: /* full_table_name ::= db_name NK_DOT table_name */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29, NULL); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 154: /* full_table_name ::= db_name NK_DOT table_name */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481, NULL); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 155: /* column_def ::= column_name type_name */ -{ yylhsminor.yy812 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy29, yymsp[0].minor.yy484, NULL); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 157: /* column_def ::= column_name type_name */ +{ yylhsminor.yy232 = createColumnDefNode(pCxt, &yymsp[-1].minor.yy481, yymsp[0].minor.yy264, NULL); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 156: /* column_def ::= column_name type_name COMMENT NK_STRING */ -{ yylhsminor.yy812 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-2].minor.yy484, &yymsp[0].minor.yy0); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 158: /* column_def ::= column_name type_name COMMENT NK_STRING */ +{ yylhsminor.yy232 = createColumnDefNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-2].minor.yy264, &yymsp[0].minor.yy0); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 157: /* type_name ::= BOOL */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BOOL); } + case 159: /* type_name ::= BOOL */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BOOL); } break; - case 158: /* type_name ::= TINYINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_TINYINT); } + case 160: /* type_name ::= TINYINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_TINYINT); } break; - case 159: /* type_name ::= SMALLINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_SMALLINT); } + case 161: /* type_name ::= SMALLINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_SMALLINT); } break; - case 160: /* type_name ::= INT */ - case 161: /* type_name ::= INTEGER */ yytestcase(yyruleno==161); -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_INT); } + case 162: /* type_name ::= INT */ + case 163: /* type_name ::= INTEGER */ yytestcase(yyruleno==163); +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_INT); } break; - case 162: /* type_name ::= BIGINT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BIGINT); } + case 164: /* type_name ::= BIGINT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BIGINT); } break; - case 163: /* type_name ::= FLOAT */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_FLOAT); } + case 165: /* type_name ::= FLOAT */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_FLOAT); } break; - case 164: /* type_name ::= DOUBLE */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_DOUBLE); } + case 166: /* type_name ::= DOUBLE */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_DOUBLE); } break; - case 165: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } + case 167: /* type_name ::= BINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_BINARY, &yymsp[-1].minor.yy0); } break; - case 166: /* type_name ::= TIMESTAMP */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } + case 168: /* type_name ::= TIMESTAMP */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_TIMESTAMP); } break; - case 167: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } + case 169: /* type_name ::= NCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_NCHAR, &yymsp[-1].minor.yy0); } break; - case 168: /* type_name ::= TINYINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UTINYINT); } + case 170: /* type_name ::= TINYINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UTINYINT); } break; - case 169: /* type_name ::= SMALLINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_USMALLINT); } + case 171: /* type_name ::= SMALLINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_USMALLINT); } break; - case 170: /* type_name ::= INT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UINT); } + case 172: /* type_name ::= INT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UINT); } break; - case 171: /* type_name ::= BIGINT UNSIGNED */ -{ yymsp[-1].minor.yy484 = createDataType(TSDB_DATA_TYPE_UBIGINT); } + case 173: /* type_name ::= BIGINT UNSIGNED */ +{ yymsp[-1].minor.yy264 = createDataType(TSDB_DATA_TYPE_UBIGINT); } break; - case 172: /* type_name ::= JSON */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_JSON); } + case 174: /* type_name ::= JSON */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_JSON); } break; - case 173: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } + case 175: /* type_name ::= VARCHAR NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_VARCHAR, &yymsp[-1].minor.yy0); } break; - case 174: /* type_name ::= MEDIUMBLOB */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } + case 176: /* type_name ::= MEDIUMBLOB */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_MEDIUMBLOB); } break; - case 175: /* type_name ::= BLOB */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_BLOB); } + case 177: /* type_name ::= BLOB */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_BLOB); } break; - case 176: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } + case 178: /* type_name ::= VARBINARY NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createVarLenDataType(TSDB_DATA_TYPE_VARBINARY, &yymsp[-1].minor.yy0); } break; - case 177: /* type_name ::= DECIMAL */ -{ yymsp[0].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 179: /* type_name ::= DECIMAL */ +{ yymsp[0].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 178: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ -{ yymsp[-3].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 180: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_RP */ +{ yymsp[-3].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 179: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ -{ yymsp[-5].minor.yy484 = createDataType(TSDB_DATA_TYPE_DECIMAL); } + case 181: /* type_name ::= DECIMAL NK_LP NK_INTEGER NK_COMMA NK_INTEGER NK_RP */ +{ yymsp[-5].minor.yy264 = createDataType(TSDB_DATA_TYPE_DECIMAL); } break; - case 181: /* tags_def_opt ::= tags_def */ - case 392: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==392); -{ yylhsminor.yy424 = yymsp[0].minor.yy424; } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 183: /* tags_def_opt ::= tags_def */ + case 394: /* star_func_para_list ::= other_para_list */ yytestcase(yyruleno==394); +{ yylhsminor.yy288 = yymsp[0].minor.yy288; } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 182: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ -{ yymsp[-3].minor.yy424 = yymsp[-1].minor.yy424; } + case 184: /* tags_def ::= TAGS NK_LP column_def_list NK_RP */ +{ yymsp[-3].minor.yy288 = yymsp[-1].minor.yy288; } break; - case 183: /* table_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultTableOptions(pCxt); } + case 185: /* table_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultTableOptions(pCxt); } break; - case 184: /* table_options ::= table_options COMMENT NK_STRING */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 186: /* table_options ::= table_options COMMENT NK_STRING */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_COMMENT, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 185: /* table_options ::= table_options MAX_DELAY duration_list */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 187: /* table_options ::= table_options MAX_DELAY duration_list */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_MAXDELAY, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 186: /* table_options ::= table_options WATERMARK duration_list */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy424); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 188: /* table_options ::= table_options WATERMARK duration_list */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_WATERMARK, yymsp[0].minor.yy288); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 187: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-4].minor.yy812, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 189: /* table_options ::= table_options ROLLUP NK_LP rollup_func_list NK_RP */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-4].minor.yy232, TABLE_OPTION_ROLLUP, yymsp[-1].minor.yy288); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 188: /* table_options ::= table_options TTL NK_INTEGER */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-2].minor.yy812, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 190: /* table_options ::= table_options TTL NK_INTEGER */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-2].minor.yy232, TABLE_OPTION_TTL, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 189: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-4].minor.yy812, TABLE_OPTION_SMA, yymsp[-1].minor.yy424); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 191: /* table_options ::= table_options SMA NK_LP col_name_list NK_RP */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-4].minor.yy232, TABLE_OPTION_SMA, yymsp[-1].minor.yy288); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 190: /* alter_table_options ::= alter_table_option */ -{ yylhsminor.yy812 = createAlterTableOptions(pCxt); yylhsminor.yy812 = setTableOption(pCxt, yylhsminor.yy812, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 192: /* alter_table_options ::= alter_table_option */ +{ yylhsminor.yy232 = createAlterTableOptions(pCxt); yylhsminor.yy232 = setTableOption(pCxt, yylhsminor.yy232, yymsp[0].minor.yy101.type, &yymsp[0].minor.yy101.val); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 191: /* alter_table_options ::= alter_table_options alter_table_option */ -{ yylhsminor.yy812 = setTableOption(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy245.type, &yymsp[0].minor.yy245.val); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 193: /* alter_table_options ::= alter_table_options alter_table_option */ +{ yylhsminor.yy232 = setTableOption(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy101.type, &yymsp[0].minor.yy101.val); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 192: /* alter_table_option ::= COMMENT NK_STRING */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 194: /* alter_table_option ::= COMMENT NK_STRING */ +{ yymsp[-1].minor.yy101.type = TABLE_OPTION_COMMENT; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } break; - case 193: /* alter_table_option ::= TTL NK_INTEGER */ -{ yymsp[-1].minor.yy245.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy245.val = yymsp[0].minor.yy0; } + case 195: /* alter_table_option ::= TTL NK_INTEGER */ +{ yymsp[-1].minor.yy101.type = TABLE_OPTION_TTL; yymsp[-1].minor.yy101.val = yymsp[0].minor.yy0; } break; - case 194: /* duration_list ::= duration_literal */ - case 357: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==357); -{ yylhsminor.yy424 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 196: /* duration_list ::= duration_literal */ + case 359: /* expression_list ::= expr_or_subquery */ yytestcase(yyruleno==359); +{ yylhsminor.yy288 = createNodeList(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 195: /* duration_list ::= duration_list NK_COMMA duration_literal */ - case 358: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==358); -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 197: /* duration_list ::= duration_list NK_COMMA duration_literal */ + case 360: /* expression_list ::= expression_list NK_COMMA expr_or_subquery */ yytestcase(yyruleno==360); +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; break; - case 198: /* rollup_func_name ::= function_name */ -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[0].minor.yy29, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 200: /* rollup_func_name ::= function_name */ +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[0].minor.yy481, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 199: /* rollup_func_name ::= FIRST */ - case 200: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==200); -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 201: /* rollup_func_name ::= FIRST */ + case 202: /* rollup_func_name ::= LAST */ yytestcase(yyruleno==202); +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 203: /* col_name ::= column_name */ -{ yylhsminor.yy812 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy29); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 205: /* col_name ::= column_name */ +{ yylhsminor.yy232 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy481); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 204: /* cmd ::= SHOW DNODES */ + case 206: /* cmd ::= SHOW DNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DNODES_STMT); } break; - case 205: /* cmd ::= SHOW USERS */ + case 207: /* cmd ::= SHOW USERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_USERS_STMT); } break; - case 206: /* cmd ::= SHOW DATABASES */ + case 208: /* cmd ::= SHOW DATABASES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_DATABASES_STMT); } break; - case 207: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, OP_TYPE_LIKE); } + case 209: /* cmd ::= SHOW db_name_cond_opt TABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLES_STMT, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, OP_TYPE_LIKE); } break; - case 208: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, OP_TYPE_LIKE); } + case 210: /* cmd ::= SHOW db_name_cond_opt STABLES like_pattern_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_STABLES_STMT, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, OP_TYPE_LIKE); } break; - case 209: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy812, NULL, OP_TYPE_LIKE); } + case 211: /* cmd ::= SHOW db_name_cond_opt VGROUPS */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_VGROUPS_STMT, yymsp[-1].minor.yy232, NULL, OP_TYPE_LIKE); } break; - case 210: /* cmd ::= SHOW MNODES */ + case 212: /* cmd ::= SHOW MNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_MNODES_STMT); } break; - case 211: /* cmd ::= SHOW QNODES */ + case 213: /* cmd ::= SHOW QNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QNODES_STMT); } break; - case 212: /* cmd ::= SHOW FUNCTIONS */ + case 214: /* cmd ::= SHOW FUNCTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_FUNCTIONS_STMT); } break; - case 213: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 215: /* cmd ::= SHOW INDEXES FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_INDEXES_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 214: /* cmd ::= SHOW STREAMS */ + case 216: /* cmd ::= SHOW STREAMS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_STREAMS_STMT); } break; - case 215: /* cmd ::= SHOW ACCOUNTS */ + case 217: /* cmd ::= SHOW ACCOUNTS */ { pCxt->errCode = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_EXPRIE_STATEMENT); } break; - case 216: /* cmd ::= SHOW APPS */ + case 218: /* cmd ::= SHOW APPS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_APPS_STMT); } break; - case 217: /* cmd ::= SHOW CONNECTIONS */ + case 219: /* cmd ::= SHOW CONNECTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONNECTIONS_STMT); } break; - case 218: /* cmd ::= SHOW LICENCES */ - case 219: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==219); + case 220: /* cmd ::= SHOW LICENCES */ + case 221: /* cmd ::= SHOW GRANTS */ yytestcase(yyruleno==221); { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LICENCES_STMT); } break; - case 220: /* cmd ::= SHOW CREATE DATABASE db_name */ -{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy29); } + case 222: /* cmd ::= SHOW CREATE DATABASE db_name */ +{ pCxt->pRootNode = createShowCreateDatabaseStmt(pCxt, &yymsp[0].minor.yy481); } break; - case 221: /* cmd ::= SHOW CREATE TABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy812); } + case 223: /* cmd ::= SHOW CREATE TABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_TABLE_STMT, yymsp[0].minor.yy232); } break; - case 222: /* cmd ::= SHOW CREATE STABLE full_table_name */ -{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy812); } + case 224: /* cmd ::= SHOW CREATE STABLE full_table_name */ +{ pCxt->pRootNode = createShowCreateTableStmt(pCxt, QUERY_NODE_SHOW_CREATE_STABLE_STMT, yymsp[0].minor.yy232); } break; - case 223: /* cmd ::= SHOW QUERIES */ + case 225: /* cmd ::= SHOW QUERIES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_QUERIES_STMT); } break; - case 224: /* cmd ::= SHOW SCORES */ + case 226: /* cmd ::= SHOW SCORES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SCORES_STMT); } break; - case 225: /* cmd ::= SHOW TOPICS */ + case 227: /* cmd ::= SHOW TOPICS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TOPICS_STMT); } break; - case 226: /* cmd ::= SHOW VARIABLES */ - case 227: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==227); + case 228: /* cmd ::= SHOW VARIABLES */ + case 229: /* cmd ::= SHOW CLUSTER VARIABLES */ yytestcase(yyruleno==229); { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_VARIABLES_STMT); } break; - case 228: /* cmd ::= SHOW LOCAL VARIABLES */ + case 230: /* cmd ::= SHOW LOCAL VARIABLES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_LOCAL_VARIABLES_STMT); } break; - case 229: /* 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.yy812); } + case 231: /* 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.yy232); } break; - case 230: /* cmd ::= SHOW BNODES */ + case 232: /* cmd ::= SHOW BNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_BNODES_STMT); } break; - case 231: /* cmd ::= SHOW SNODES */ + case 233: /* cmd ::= SHOW SNODES */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SNODES_STMT); } break; - case 232: /* cmd ::= SHOW CLUSTER */ + case 234: /* cmd ::= SHOW CLUSTER */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CLUSTER_STMT); } break; - case 233: /* cmd ::= SHOW TRANSACTIONS */ + case 235: /* cmd ::= SHOW TRANSACTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_TRANSACTIONS_STMT); } break; - case 234: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ -{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy812); } + case 236: /* cmd ::= SHOW TABLE DISTRIBUTED full_table_name */ +{ pCxt->pRootNode = createShowTableDistributedStmt(pCxt, yymsp[0].minor.yy232); } break; - case 235: /* cmd ::= SHOW CONSUMERS */ + case 237: /* cmd ::= SHOW CONSUMERS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_CONSUMERS_STMT); } break; - case 236: /* cmd ::= SHOW SUBSCRIPTIONS */ + case 238: /* cmd ::= SHOW SUBSCRIPTIONS */ { pCxt->pRootNode = createShowStmt(pCxt, QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT); } break; - case 237: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 239: /* cmd ::= SHOW TAGS FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TAGS_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 238: /* cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ -{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLE_TAGS_STMT, yymsp[0].minor.yy812, yymsp[-1].minor.yy812, OP_TYPE_EQUAL); } + case 240: /* cmd ::= SHOW TABLE TAGS FROM table_name_cond from_db_opt */ +{ pCxt->pRootNode = createShowStmtWithCond(pCxt, QUERY_NODE_SHOW_TABLE_TAGS_STMT, yymsp[0].minor.yy232, yymsp[-1].minor.yy232, OP_TYPE_EQUAL); } break; - case 239: /* cmd ::= SHOW VNODES NK_INTEGER */ + case 241: /* cmd ::= SHOW VNODES NK_INTEGER */ { pCxt->pRootNode = createShowVnodesStmt(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0), NULL); } break; - case 240: /* cmd ::= SHOW VNODES NK_STRING */ + case 242: /* cmd ::= SHOW VNODES NK_STRING */ { pCxt->pRootNode = createShowVnodesStmt(pCxt, NULL, createValueNode(pCxt, TSDB_DATA_TYPE_VARCHAR, &yymsp[0].minor.yy0)); } break; - case 241: /* db_name_cond_opt ::= */ - case 246: /* from_db_opt ::= */ yytestcase(yyruleno==246); -{ yymsp[1].minor.yy812 = createDefaultDatabaseCondValue(pCxt); } + case 243: /* db_name_cond_opt ::= */ + case 248: /* from_db_opt ::= */ yytestcase(yyruleno==248); +{ yymsp[1].minor.yy232 = createDefaultDatabaseCondValue(pCxt); } break; - case 242: /* db_name_cond_opt ::= db_name NK_DOT */ -{ yylhsminor.yy812 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 244: /* db_name_cond_opt ::= db_name NK_DOT */ +{ yylhsminor.yy232 = createIdentifierValueNode(pCxt, &yymsp[-1].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 243: /* like_pattern_opt ::= */ - case 289: /* subtable_opt ::= */ yytestcase(yyruleno==289); - case 402: /* case_when_else_opt ::= */ yytestcase(yyruleno==402); - case 432: /* from_clause_opt ::= */ yytestcase(yyruleno==432); - case 461: /* where_clause_opt ::= */ yytestcase(yyruleno==461); - case 470: /* twindow_clause_opt ::= */ yytestcase(yyruleno==470); - case 475: /* sliding_opt ::= */ yytestcase(yyruleno==475); - case 477: /* fill_opt ::= */ yytestcase(yyruleno==477); - case 489: /* having_clause_opt ::= */ yytestcase(yyruleno==489); - case 491: /* range_opt ::= */ yytestcase(yyruleno==491); - case 493: /* every_opt ::= */ yytestcase(yyruleno==493); - case 506: /* slimit_clause_opt ::= */ yytestcase(yyruleno==506); - case 510: /* limit_clause_opt ::= */ yytestcase(yyruleno==510); -{ yymsp[1].minor.yy812 = NULL; } + case 245: /* like_pattern_opt ::= */ + case 291: /* subtable_opt ::= */ yytestcase(yyruleno==291); + case 404: /* case_when_else_opt ::= */ yytestcase(yyruleno==404); + case 434: /* from_clause_opt ::= */ yytestcase(yyruleno==434); + case 463: /* where_clause_opt ::= */ yytestcase(yyruleno==463); + case 472: /* twindow_clause_opt ::= */ yytestcase(yyruleno==472); + case 477: /* sliding_opt ::= */ yytestcase(yyruleno==477); + case 479: /* fill_opt ::= */ yytestcase(yyruleno==479); + case 491: /* having_clause_opt ::= */ yytestcase(yyruleno==491); + case 493: /* range_opt ::= */ yytestcase(yyruleno==493); + case 495: /* every_opt ::= */ yytestcase(yyruleno==495); + case 508: /* slimit_clause_opt ::= */ yytestcase(yyruleno==508); + case 512: /* limit_clause_opt ::= */ yytestcase(yyruleno==512); +{ yymsp[1].minor.yy232 = NULL; } break; - case 244: /* like_pattern_opt ::= LIKE NK_STRING */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + case 246: /* like_pattern_opt ::= LIKE NK_STRING */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } break; - case 245: /* table_name_cond ::= table_name */ -{ yylhsminor.yy812 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy29); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 247: /* table_name_cond ::= table_name */ +{ yylhsminor.yy232 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy481); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 247: /* from_db_opt ::= FROM db_name */ -{ yymsp[-1].minor.yy812 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy29); } + case 249: /* from_db_opt ::= FROM db_name */ +{ yymsp[-1].minor.yy232 = createIdentifierValueNode(pCxt, &yymsp[0].minor.yy481); } break; - case 248: /* 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.yy137, yymsp[-3].minor.yy812, yymsp[-1].minor.yy812, NULL, yymsp[0].minor.yy812); } + case 250: /* 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.yy777, yymsp[-3].minor.yy232, yymsp[-1].minor.yy232, NULL, yymsp[0].minor.yy232); } break; - case 249: /* cmd ::= DROP INDEX exists_opt full_table_name */ -{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy137, yymsp[0].minor.yy812); } + case 251: /* cmd ::= DROP INDEX exists_opt full_table_name */ +{ pCxt->pRootNode = createDropIndexStmt(pCxt, yymsp[-1].minor.yy777, yymsp[0].minor.yy232); } break; - case 250: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ -{ yymsp[-9].minor.yy812 = createIndexOption(pCxt, yymsp[-7].minor.yy424, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 252: /* index_options ::= FUNCTION NK_LP func_list NK_RP INTERVAL NK_LP duration_literal NK_RP sliding_opt sma_stream_opt */ +{ yymsp[-9].minor.yy232 = createIndexOption(pCxt, yymsp[-7].minor.yy288, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 251: /* 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.yy812 = createIndexOption(pCxt, yymsp[-9].minor.yy424, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 253: /* 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.yy232 = createIndexOption(pCxt, yymsp[-9].minor.yy288, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 254: /* func ::= function_name NK_LP expression_list NK_RP */ -{ yylhsminor.yy812 = createFunctionNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-1].minor.yy424); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 256: /* func ::= function_name NK_LP expression_list NK_RP */ +{ yylhsminor.yy232 = createFunctionNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-1].minor.yy288); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 255: /* sma_stream_opt ::= */ - case 282: /* stream_options ::= */ yytestcase(yyruleno==282); -{ yymsp[1].minor.yy812 = createStreamOptions(pCxt); } + case 257: /* sma_stream_opt ::= */ + case 284: /* stream_options ::= */ yytestcase(yyruleno==284); +{ yymsp[1].minor.yy232 = createStreamOptions(pCxt); } break; - case 256: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ - case 286: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==286); -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 258: /* sma_stream_opt ::= stream_options WATERMARK duration_literal */ + case 288: /* stream_options ::= stream_options WATERMARK duration_literal */ yytestcase(yyruleno==288); +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->pWatermark = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 257: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 259: /* sma_stream_opt ::= stream_options MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 258: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ -{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy137, &yymsp[-2].minor.yy29, yymsp[0].minor.yy812); } + case 260: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS query_or_subquery */ +{ pCxt->pRootNode = createCreateTopicStmtUseQuery(pCxt, yymsp[-3].minor.yy777, &yymsp[-2].minor.yy481, yymsp[0].minor.yy232); } break; - case 259: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy137, &yymsp[-3].minor.yy29, &yymsp[0].minor.yy29, false); } + case 261: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-4].minor.yy777, &yymsp[-3].minor.yy481, &yymsp[0].minor.yy481, false); } break; - case 260: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy137, &yymsp[-5].minor.yy29, &yymsp[0].minor.yy29, true); } + case 262: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS DATABASE db_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseDb(pCxt, yymsp[-6].minor.yy777, &yymsp[-5].minor.yy481, &yymsp[0].minor.yy481, true); } break; - case 261: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy137, &yymsp[-3].minor.yy29, yymsp[0].minor.yy812, false); } + case 263: /* cmd ::= CREATE TOPIC not_exists_opt topic_name AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-4].minor.yy777, &yymsp[-3].minor.yy481, yymsp[0].minor.yy232, false); } break; - case 262: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ -{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy137, &yymsp[-5].minor.yy29, yymsp[0].minor.yy812, true); } + case 264: /* cmd ::= CREATE TOPIC not_exists_opt topic_name WITH META AS STABLE full_table_name */ +{ pCxt->pRootNode = createCreateTopicStmtUseTable(pCxt, yymsp[-6].minor.yy777, &yymsp[-5].minor.yy481, yymsp[0].minor.yy232, true); } break; - case 263: /* cmd ::= DROP TOPIC exists_opt topic_name */ -{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 265: /* cmd ::= DROP TOPIC exists_opt topic_name */ +{ pCxt->pRootNode = createDropTopicStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 264: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ -{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy137, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29); } + case 266: /* cmd ::= DROP CONSUMER GROUP exists_opt cgroup_name ON topic_name */ +{ pCxt->pRootNode = createDropCGroupStmt(pCxt, yymsp[-3].minor.yy777, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481); } break; - case 265: /* cmd ::= DESC full_table_name */ - case 266: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==266); -{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy812); } + case 267: /* cmd ::= DESC full_table_name */ + case 268: /* cmd ::= DESCRIBE full_table_name */ yytestcase(yyruleno==268); +{ pCxt->pRootNode = createDescribeStmt(pCxt, yymsp[0].minor.yy232); } break; - case 267: /* cmd ::= RESET QUERY CACHE */ + case 269: /* cmd ::= RESET QUERY CACHE */ { pCxt->pRootNode = createResetQueryCacheStmt(pCxt); } break; - case 268: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ -{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy137, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 270: /* cmd ::= EXPLAIN analyze_opt explain_options query_or_subquery */ +{ pCxt->pRootNode = createExplainStmt(pCxt, yymsp[-2].minor.yy777, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 270: /* analyze_opt ::= ANALYZE */ - case 277: /* agg_func_opt ::= AGGREGATE */ yytestcase(yyruleno==277); - case 452: /* set_quantifier_opt ::= DISTINCT */ yytestcase(yyruleno==452); -{ yymsp[0].minor.yy137 = true; } + case 273: /* explain_options ::= */ +{ yymsp[1].minor.yy232 = createDefaultExplainOptions(pCxt); } break; - case 271: /* explain_options ::= */ -{ yymsp[1].minor.yy812 = createDefaultExplainOptions(pCxt); } + case 274: /* explain_options ::= explain_options VERBOSE NK_BOOL */ +{ yylhsminor.yy232 = setExplainVerbose(pCxt, yymsp[-2].minor.yy232, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 272: /* explain_options ::= explain_options VERBOSE NK_BOOL */ -{ yylhsminor.yy812 = setExplainVerbose(pCxt, yymsp[-2].minor.yy812, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 275: /* explain_options ::= explain_options RATIO NK_FLOAT */ +{ yylhsminor.yy232 = setExplainRatio(pCxt, yymsp[-2].minor.yy232, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 273: /* explain_options ::= explain_options RATIO NK_FLOAT */ -{ yylhsminor.yy812 = setExplainRatio(pCxt, yymsp[-2].minor.yy812, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 276: /* 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.yy777, yymsp[-8].minor.yy777, &yymsp[-5].minor.yy481, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy264, yymsp[0].minor.yy692); } break; - case 274: /* 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.yy137, yymsp[-8].minor.yy137, &yymsp[-5].minor.yy29, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy484, yymsp[0].minor.yy460); } + case 277: /* cmd ::= DROP FUNCTION exists_opt function_name */ +{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 275: /* cmd ::= DROP FUNCTION exists_opt function_name */ -{ pCxt->pRootNode = createDropFunctionStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 282: /* 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.yy777, &yymsp[-7].minor.yy481, yymsp[-4].minor.yy232, yymsp[-6].minor.yy232, yymsp[-3].minor.yy288, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } break; - case 280: /* 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.yy137, &yymsp[-7].minor.yy29, yymsp[-4].minor.yy812, yymsp[-6].minor.yy812, yymsp[-3].minor.yy424, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } + case 283: /* cmd ::= DROP STREAM exists_opt stream_name */ +{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy777, &yymsp[0].minor.yy481); } break; - case 281: /* cmd ::= DROP STREAM exists_opt stream_name */ -{ pCxt->pRootNode = createDropStreamStmt(pCxt, yymsp[-1].minor.yy137, &yymsp[0].minor.yy29); } + case 285: /* stream_options ::= stream_options TRIGGER AT_ONCE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 283: /* stream_options ::= stream_options TRIGGER AT_ONCE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->triggerType = STREAM_TRIGGER_AT_ONCE; yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 286: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 284: /* stream_options ::= stream_options TRIGGER WINDOW_CLOSE */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->triggerType = STREAM_TRIGGER_WINDOW_CLOSE; yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 287: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ +{ ((SStreamOptions*)yymsp[-3].minor.yy232)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy232)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); yylhsminor.yy232 = yymsp[-3].minor.yy232; } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 285: /* stream_options ::= stream_options TRIGGER MAX_DELAY duration_literal */ -{ ((SStreamOptions*)yymsp[-3].minor.yy812)->triggerType = STREAM_TRIGGER_MAX_DELAY; ((SStreamOptions*)yymsp[-3].minor.yy812)->pDelay = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); yylhsminor.yy812 = yymsp[-3].minor.yy812; } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 289: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ +{ ((SStreamOptions*)yymsp[-3].minor.yy232)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy232 = yymsp[-3].minor.yy232; } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 287: /* stream_options ::= stream_options IGNORE EXPIRED NK_INTEGER */ -{ ((SStreamOptions*)yymsp[-3].minor.yy812)->ignoreExpired = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy812 = yymsp[-3].minor.yy812; } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 290: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ +{ ((SStreamOptions*)yymsp[-2].minor.yy232)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy232 = yymsp[-2].minor.yy232; } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 288: /* stream_options ::= stream_options FILL_HISTORY NK_INTEGER */ -{ ((SStreamOptions*)yymsp[-2].minor.yy812)->fillHistory = taosStr2Int8(yymsp[0].minor.yy0.z, NULL, 10); yylhsminor.yy812 = yymsp[-2].minor.yy812; } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 292: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ + case 478: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==478); + case 496: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==496); +{ yymsp[-3].minor.yy232 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy232); } break; - case 290: /* subtable_opt ::= SUBTABLE NK_LP expression NK_RP */ - case 476: /* sliding_opt ::= SLIDING NK_LP duration_literal NK_RP */ yytestcase(yyruleno==476); - case 494: /* every_opt ::= EVERY NK_LP duration_literal NK_RP */ yytestcase(yyruleno==494); -{ yymsp[-3].minor.yy812 = releaseRawExprNode(pCxt, yymsp[-1].minor.yy812); } - break; - case 291: /* cmd ::= KILL CONNECTION NK_INTEGER */ + case 293: /* cmd ::= KILL CONNECTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_CONNECTION_STMT, &yymsp[0].minor.yy0); } break; - case 292: /* cmd ::= KILL QUERY NK_STRING */ + case 294: /* cmd ::= KILL QUERY NK_STRING */ { pCxt->pRootNode = createKillQueryStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 293: /* cmd ::= KILL TRANSACTION NK_INTEGER */ + case 295: /* cmd ::= KILL TRANSACTION NK_INTEGER */ { pCxt->pRootNode = createKillStmt(pCxt, QUERY_NODE_KILL_TRANSACTION_STMT, &yymsp[0].minor.yy0); } break; - case 294: /* cmd ::= BALANCE VGROUP */ + case 296: /* cmd ::= BALANCE VGROUP */ { pCxt->pRootNode = createBalanceVgroupStmt(pCxt); } break; - case 295: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ + case 297: /* cmd ::= MERGE VGROUP NK_INTEGER NK_INTEGER */ { pCxt->pRootNode = createMergeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0); } break; - case 296: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ -{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy424); } + case 298: /* cmd ::= REDISTRIBUTE VGROUP NK_INTEGER dnode_list */ +{ pCxt->pRootNode = createRedistributeVgroupStmt(pCxt, &yymsp[-1].minor.yy0, yymsp[0].minor.yy288); } break; - case 297: /* cmd ::= SPLIT VGROUP NK_INTEGER */ + case 299: /* cmd ::= SPLIT VGROUP NK_INTEGER */ { pCxt->pRootNode = createSplitVgroupStmt(pCxt, &yymsp[0].minor.yy0); } break; - case 298: /* dnode_list ::= DNODE NK_INTEGER */ -{ yymsp[-1].minor.yy424 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } + case 300: /* dnode_list ::= DNODE NK_INTEGER */ +{ yymsp[-1].minor.yy288 = createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &yymsp[0].minor.yy0)); } break; - case 300: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ -{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 302: /* cmd ::= DELETE FROM full_table_name where_clause_opt */ +{ pCxt->pRootNode = createDeleteStmt(pCxt, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 302: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy812, yymsp[-2].minor.yy424, yymsp[0].minor.yy812); } + case 304: /* cmd ::= INSERT INTO full_table_name NK_LP col_name_list NK_RP query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-4].minor.yy232, yymsp[-2].minor.yy288, yymsp[0].minor.yy232); } break; - case 303: /* cmd ::= INSERT INTO full_table_name query_or_subquery */ -{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy812, NULL, yymsp[0].minor.yy812); } + case 305: /* cmd ::= INSERT INTO full_table_name query_or_subquery */ +{ pCxt->pRootNode = createInsertStmt(pCxt, yymsp[-1].minor.yy232, NULL, yymsp[0].minor.yy232); } break; - case 304: /* literal ::= NK_INTEGER */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 306: /* literal ::= NK_INTEGER */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 305: /* literal ::= NK_FLOAT */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 307: /* literal ::= NK_FLOAT */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 306: /* literal ::= NK_STRING */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 308: /* literal ::= NK_STRING */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 307: /* literal ::= NK_BOOL */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 309: /* literal ::= NK_BOOL */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 308: /* literal ::= TIMESTAMP NK_STRING */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 310: /* literal ::= TIMESTAMP NK_STRING */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0)); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 309: /* literal ::= duration_literal */ - case 319: /* signed_literal ::= signed */ yytestcase(yyruleno==319); - case 339: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==339); - case 340: /* expr_or_subquery ::= subquery */ yytestcase(yyruleno==340); - case 341: /* expression ::= literal */ yytestcase(yyruleno==341); - case 342: /* expression ::= pseudo_column */ yytestcase(yyruleno==342); - case 343: /* expression ::= column_reference */ yytestcase(yyruleno==343); - case 344: /* expression ::= function_expression */ yytestcase(yyruleno==344); - case 345: /* expression ::= case_when_expression */ yytestcase(yyruleno==345); - case 375: /* function_expression ::= literal_func */ yytestcase(yyruleno==375); - case 424: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==424); - case 428: /* boolean_primary ::= predicate */ yytestcase(yyruleno==428); - case 430: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==430); - case 431: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==431); - case 434: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==434); - case 436: /* table_reference ::= table_primary */ yytestcase(yyruleno==436); - case 437: /* table_reference ::= joined_table */ yytestcase(yyruleno==437); - case 441: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==441); - case 496: /* query_simple ::= query_specification */ yytestcase(yyruleno==496); - case 497: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==497); - case 500: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==500); - case 502: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==502); -{ yylhsminor.yy812 = yymsp[0].minor.yy812; } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 311: /* literal ::= duration_literal */ + case 321: /* signed_literal ::= signed */ yytestcase(yyruleno==321); + case 341: /* expr_or_subquery ::= expression */ yytestcase(yyruleno==341); + case 342: /* expr_or_subquery ::= subquery */ yytestcase(yyruleno==342); + case 343: /* expression ::= literal */ yytestcase(yyruleno==343); + case 344: /* expression ::= pseudo_column */ yytestcase(yyruleno==344); + case 345: /* expression ::= column_reference */ yytestcase(yyruleno==345); + case 346: /* expression ::= function_expression */ yytestcase(yyruleno==346); + case 347: /* expression ::= case_when_expression */ yytestcase(yyruleno==347); + case 377: /* function_expression ::= literal_func */ yytestcase(yyruleno==377); + case 426: /* boolean_value_expression ::= boolean_primary */ yytestcase(yyruleno==426); + case 430: /* boolean_primary ::= predicate */ yytestcase(yyruleno==430); + case 432: /* common_expression ::= expr_or_subquery */ yytestcase(yyruleno==432); + case 433: /* common_expression ::= boolean_value_expression */ yytestcase(yyruleno==433); + case 436: /* table_reference_list ::= table_reference */ yytestcase(yyruleno==436); + case 438: /* table_reference ::= table_primary */ yytestcase(yyruleno==438); + case 439: /* table_reference ::= joined_table */ yytestcase(yyruleno==439); + case 443: /* table_primary ::= parenthesized_joined_table */ yytestcase(yyruleno==443); + case 498: /* query_simple ::= query_specification */ yytestcase(yyruleno==498); + case 499: /* query_simple ::= union_query_expression */ yytestcase(yyruleno==499); + case 502: /* query_simple_or_subquery ::= query_simple */ yytestcase(yyruleno==502); + case 504: /* query_or_subquery ::= query_expression */ yytestcase(yyruleno==504); +{ yylhsminor.yy232 = yymsp[0].minor.yy232; } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 310: /* literal ::= NULL */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 312: /* literal ::= NULL */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 311: /* literal ::= NK_QUESTION */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 313: /* literal ::= NK_QUESTION */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 312: /* duration_literal ::= NK_VARIABLE */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 314: /* duration_literal ::= NK_VARIABLE */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createDurationValueNode(pCxt, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 313: /* signed ::= NK_INTEGER */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 315: /* signed ::= NK_INTEGER */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 314: /* signed ::= NK_PLUS NK_INTEGER */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } + case 316: /* signed ::= NK_PLUS NK_INTEGER */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_UBIGINT, &yymsp[0].minor.yy0); } break; - case 315: /* signed ::= NK_MINUS NK_INTEGER */ + case 317: /* 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.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); + yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BIGINT, &t); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 316: /* signed ::= NK_FLOAT */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 318: /* signed ::= NK_FLOAT */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 317: /* signed ::= NK_PLUS NK_FLOAT */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } + case 319: /* signed ::= NK_PLUS NK_FLOAT */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &yymsp[0].minor.yy0); } break; - case 318: /* signed ::= NK_MINUS NK_FLOAT */ + case 320: /* 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.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); + yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_DOUBLE, &t); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 320: /* signed_literal ::= NK_STRING */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 322: /* signed_literal ::= NK_STRING */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 321: /* signed_literal ::= NK_BOOL */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 323: /* signed_literal ::= NK_BOOL */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_BOOL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 322: /* signed_literal ::= TIMESTAMP NK_STRING */ -{ yymsp[-1].minor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } + case 324: /* signed_literal ::= TIMESTAMP NK_STRING */ +{ yymsp[-1].minor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_TIMESTAMP, &yymsp[0].minor.yy0); } break; - case 323: /* signed_literal ::= duration_literal */ - case 325: /* signed_literal ::= literal_func */ yytestcase(yyruleno==325); - case 395: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==395); - case 457: /* select_item ::= common_expression */ yytestcase(yyruleno==457); - case 467: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==467); - case 501: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==501); - case 503: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==503); - case 516: /* search_condition ::= common_expression */ yytestcase(yyruleno==516); -{ yylhsminor.yy812 = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 325: /* signed_literal ::= duration_literal */ + case 327: /* signed_literal ::= literal_func */ yytestcase(yyruleno==327); + case 397: /* star_func_para ::= expr_or_subquery */ yytestcase(yyruleno==397); + case 459: /* select_item ::= common_expression */ yytestcase(yyruleno==459); + case 469: /* partition_item ::= expr_or_subquery */ yytestcase(yyruleno==469); + case 503: /* query_simple_or_subquery ::= subquery */ yytestcase(yyruleno==503); + case 505: /* query_or_subquery ::= subquery */ yytestcase(yyruleno==505); + case 518: /* search_condition ::= common_expression */ yytestcase(yyruleno==518); +{ yylhsminor.yy232 = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 324: /* signed_literal ::= NULL */ -{ yylhsminor.yy812 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 326: /* signed_literal ::= NULL */ +{ yylhsminor.yy232 = createValueNode(pCxt, TSDB_DATA_TYPE_NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 326: /* signed_literal ::= NK_QUESTION */ -{ yylhsminor.yy812 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 328: /* signed_literal ::= NK_QUESTION */ +{ yylhsminor.yy232 = createPlaceholderValueNode(pCxt, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 346: /* expression ::= NK_LP expression NK_RP */ - case 429: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==429); - case 515: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==515); -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 348: /* expression ::= NK_LP expression NK_RP */ + case 431: /* boolean_primary ::= NK_LP boolean_value_expression NK_RP */ yytestcase(yyruleno==431); + case 517: /* subquery ::= NK_LP subquery NK_RP */ yytestcase(yyruleno==517); +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 347: /* expression ::= NK_PLUS expr_or_subquery */ + case 349: /* expression ::= NK_PLUS expr_or_subquery */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 348: /* expression ::= NK_MINUS expr_or_subquery */ + case 350: /* expression ::= NK_MINUS expr_or_subquery */ { - SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy812), NULL)); + SToken t = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &t, createOperatorNode(pCxt, OP_TYPE_MINUS, releaseRawExprNode(pCxt, yymsp[0].minor.yy232), NULL)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 349: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ + case 351: /* expression ::= expr_or_subquery NK_PLUS expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_ADD, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 350: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ + case 352: /* expression ::= expr_or_subquery NK_MINUS expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_SUB, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 351: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ + case 353: /* expression ::= expr_or_subquery NK_STAR expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_MULTI, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 352: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ + case 354: /* expression ::= expr_or_subquery NK_SLASH expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_DIV, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 353: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ + case 355: /* expression ::= expr_or_subquery NK_REM expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_REM, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 354: /* expression ::= column_reference NK_ARROW NK_STRING */ + case 356: /* expression ::= column_reference NK_ARROW NK_STRING */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_JSON_GET_VALUE, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[0].minor.yy0))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 355: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ + case 357: /* expression ::= expr_or_subquery NK_BITAND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 356: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ + case 358: /* expression ::= expr_or_subquery NK_BITOR expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, OP_TYPE_BIT_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 359: /* column_reference ::= column_name */ -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy29, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy29)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 361: /* column_reference ::= column_name */ +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy481, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy481)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 360: /* column_reference ::= table_name NK_DOT column_name */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29, createColumnNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy29)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 362: /* column_reference ::= table_name NK_DOT column_name */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481, createColumnNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy481)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 361: /* pseudo_column ::= ROWTS */ - case 362: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==362); - case 364: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==364); - case 365: /* pseudo_column ::= QEND */ yytestcase(yyruleno==365); - case 366: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==366); - case 367: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==367); - case 368: /* pseudo_column ::= WEND */ yytestcase(yyruleno==368); - case 369: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==369); - case 370: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==370); - case 371: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==371); - case 377: /* literal_func ::= NOW */ yytestcase(yyruleno==377); -{ yylhsminor.yy812 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 363: /* pseudo_column ::= ROWTS */ + case 364: /* pseudo_column ::= TBNAME */ yytestcase(yyruleno==364); + case 366: /* pseudo_column ::= QSTART */ yytestcase(yyruleno==366); + case 367: /* pseudo_column ::= QEND */ yytestcase(yyruleno==367); + case 368: /* pseudo_column ::= QDURATION */ yytestcase(yyruleno==368); + case 369: /* pseudo_column ::= WSTART */ yytestcase(yyruleno==369); + case 370: /* pseudo_column ::= WEND */ yytestcase(yyruleno==370); + case 371: /* pseudo_column ::= WDURATION */ yytestcase(yyruleno==371); + case 372: /* pseudo_column ::= IROWTS */ yytestcase(yyruleno==372); + case 373: /* pseudo_column ::= QTAGS */ yytestcase(yyruleno==373); + case 379: /* literal_func ::= NOW */ yytestcase(yyruleno==379); +{ yylhsminor.yy232 = createRawExprNode(pCxt, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, NULL)); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 363: /* pseudo_column ::= table_name NK_DOT TBNAME */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy29)))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 365: /* pseudo_column ::= table_name NK_DOT TBNAME */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[0].minor.yy0, createNodeList(pCxt, createValueNode(pCxt, TSDB_DATA_TYPE_BINARY, &yymsp[-2].minor.yy481)))); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 372: /* function_expression ::= function_name NK_LP expression_list NK_RP */ - case 373: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==373); -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy29, yymsp[-1].minor.yy424)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 374: /* function_expression ::= function_name NK_LP expression_list NK_RP */ + case 375: /* function_expression ::= star_func NK_LP star_func_para_list NK_RP */ yytestcase(yyruleno==375); +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-3].minor.yy481, yymsp[-1].minor.yy288)); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 374: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy484)); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + case 376: /* function_expression ::= CAST NK_LP expr_or_subquery AS type_name NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0, createCastFunctionNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy264)); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 376: /* literal_func ::= noarg_func NK_LP NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy29, NULL)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 378: /* literal_func ::= noarg_func NK_LP NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0, createFunctionNode(pCxt, &yymsp[-2].minor.yy481, NULL)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 391: /* star_func_para_list ::= NK_STAR */ -{ yylhsminor.yy424 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 393: /* star_func_para_list ::= NK_STAR */ +{ yylhsminor.yy288 = createNodeList(pCxt, createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0)); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 396: /* star_func_para ::= table_name NK_DOT NK_STAR */ - case 460: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==460); -{ yylhsminor.yy812 = createColumnNode(pCxt, &yymsp[-2].minor.yy29, &yymsp[0].minor.yy0); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 398: /* star_func_para ::= table_name NK_DOT NK_STAR */ + case 462: /* select_item ::= table_name NK_DOT NK_STAR */ yytestcase(yyruleno==462); +{ yylhsminor.yy232 = createColumnNode(pCxt, &yymsp[-2].minor.yy481, &yymsp[0].minor.yy0); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 397: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy424, yymsp[-1].minor.yy812)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 399: /* case_when_expression ::= CASE when_then_list case_when_else_opt END */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, NULL, yymsp[-2].minor.yy288, yymsp[-1].minor.yy232)); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 398: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-2].minor.yy424, yymsp[-1].minor.yy812)); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + case 400: /* case_when_expression ::= CASE common_expression when_then_list case_when_else_opt END */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0, createCaseWhenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-2].minor.yy288, yymsp[-1].minor.yy232)); } + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 401: /* when_then_expr ::= WHEN common_expression THEN common_expression */ -{ yymsp[-3].minor.yy812 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812)); } + case 403: /* when_then_expr ::= WHEN common_expression THEN common_expression */ +{ yymsp[-3].minor.yy232 = createWhenThenNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232)); } break; - case 403: /* case_when_else_opt ::= ELSE common_expression */ -{ yymsp[-1].minor.yy812 = releaseRawExprNode(pCxt, yymsp[0].minor.yy812); } + case 405: /* case_when_else_opt ::= ELSE common_expression */ +{ yymsp[-1].minor.yy232 = releaseRawExprNode(pCxt, yymsp[0].minor.yy232); } break; - case 404: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ - case 409: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==409); + case 406: /* predicate ::= expr_or_subquery compare_op expr_or_subquery */ + case 411: /* predicate ::= expr_or_subquery in_op in_predicate_value */ yytestcase(yyruleno==411); { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy740, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createOperatorNode(pCxt, yymsp[-1].minor.yy4, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 405: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ + case 407: /* predicate ::= expr_or_subquery BETWEEN expr_or_subquery AND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy812), releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-4].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-4].minor.yy232), releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-4].minor.yy812 = yylhsminor.yy812; + yymsp[-4].minor.yy232 = yylhsminor.yy232; break; - case 406: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ + case 408: /* predicate ::= expr_or_subquery NOT BETWEEN expr_or_subquery AND expr_or_subquery */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-5].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createNotBetweenAnd(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 407: /* predicate ::= expr_or_subquery IS NULL */ + case 409: /* predicate ::= expr_or_subquery IS NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NULL, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), NULL)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 408: /* predicate ::= expr_or_subquery IS NOT NULL */ + case 410: /* predicate ::= expr_or_subquery IS NOT NULL */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL)); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-3].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &yymsp[0].minor.yy0, createOperatorNode(pCxt, OP_TYPE_IS_NOT_NULL, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL)); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 410: /* compare_op ::= NK_LT */ -{ yymsp[0].minor.yy740 = OP_TYPE_LOWER_THAN; } + case 412: /* compare_op ::= NK_LT */ +{ yymsp[0].minor.yy4 = OP_TYPE_LOWER_THAN; } break; - case 411: /* compare_op ::= NK_GT */ -{ yymsp[0].minor.yy740 = OP_TYPE_GREATER_THAN; } + case 413: /* compare_op ::= NK_GT */ +{ yymsp[0].minor.yy4 = OP_TYPE_GREATER_THAN; } break; - case 412: /* compare_op ::= NK_LE */ -{ yymsp[0].minor.yy740 = OP_TYPE_LOWER_EQUAL; } + case 414: /* compare_op ::= NK_LE */ +{ yymsp[0].minor.yy4 = OP_TYPE_LOWER_EQUAL; } break; - case 413: /* compare_op ::= NK_GE */ -{ yymsp[0].minor.yy740 = OP_TYPE_GREATER_EQUAL; } + case 415: /* compare_op ::= NK_GE */ +{ yymsp[0].minor.yy4 = OP_TYPE_GREATER_EQUAL; } break; - case 414: /* compare_op ::= NK_NE */ -{ yymsp[0].minor.yy740 = OP_TYPE_NOT_EQUAL; } + case 416: /* compare_op ::= NK_NE */ +{ yymsp[0].minor.yy4 = OP_TYPE_NOT_EQUAL; } break; - case 415: /* compare_op ::= NK_EQ */ -{ yymsp[0].minor.yy740 = OP_TYPE_EQUAL; } + case 417: /* compare_op ::= NK_EQ */ +{ yymsp[0].minor.yy4 = OP_TYPE_EQUAL; } break; - case 416: /* compare_op ::= LIKE */ -{ yymsp[0].minor.yy740 = OP_TYPE_LIKE; } + case 418: /* compare_op ::= LIKE */ +{ yymsp[0].minor.yy4 = OP_TYPE_LIKE; } break; - case 417: /* compare_op ::= NOT LIKE */ -{ yymsp[-1].minor.yy740 = OP_TYPE_NOT_LIKE; } + case 419: /* compare_op ::= NOT LIKE */ +{ yymsp[-1].minor.yy4 = OP_TYPE_NOT_LIKE; } break; - case 418: /* compare_op ::= MATCH */ -{ yymsp[0].minor.yy740 = OP_TYPE_MATCH; } + case 420: /* compare_op ::= MATCH */ +{ yymsp[0].minor.yy4 = OP_TYPE_MATCH; } break; - case 419: /* compare_op ::= NMATCH */ -{ yymsp[0].minor.yy740 = OP_TYPE_NMATCH; } + case 421: /* compare_op ::= NMATCH */ +{ yymsp[0].minor.yy4 = OP_TYPE_NMATCH; } break; - case 420: /* compare_op ::= CONTAINS */ -{ yymsp[0].minor.yy740 = OP_TYPE_JSON_CONTAINS; } + case 422: /* compare_op ::= CONTAINS */ +{ yymsp[0].minor.yy4 = OP_TYPE_JSON_CONTAINS; } break; - case 421: /* in_op ::= IN */ -{ yymsp[0].minor.yy740 = OP_TYPE_IN; } + case 423: /* in_op ::= IN */ +{ yymsp[0].minor.yy4 = OP_TYPE_IN; } break; - case 422: /* in_op ::= NOT IN */ -{ yymsp[-1].minor.yy740 = OP_TYPE_NOT_IN; } + case 424: /* in_op ::= NOT IN */ +{ yymsp[-1].minor.yy4 = OP_TYPE_NOT_IN; } break; - case 423: /* in_predicate_value ::= NK_LP literal_list NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 425: /* in_predicate_value ::= NK_LP literal_list NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, createNodeListNode(pCxt, yymsp[-1].minor.yy288)); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 425: /* boolean_value_expression ::= NOT boolean_primary */ + case 427: /* boolean_value_expression ::= NOT boolean_primary */ { - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy812), NULL)); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-1].minor.yy0, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, yymsp[0].minor.yy232), NULL)); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 426: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ + case 428: /* boolean_value_expression ::= boolean_value_expression OR boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 427: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ + case 429: /* boolean_value_expression ::= boolean_value_expression AND boolean_value_expression */ { - SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy812); - SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy812); - yylhsminor.yy812 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); + SToken s = getTokenFromRawExprNode(pCxt, yymsp[-2].minor.yy232); + SToken e = getTokenFromRawExprNode(pCxt, yymsp[0].minor.yy232); + yylhsminor.yy232 = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 433: /* from_clause_opt ::= FROM table_reference_list */ - case 462: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==462); - case 490: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==490); -{ yymsp[-1].minor.yy812 = yymsp[0].minor.yy812; } + case 435: /* from_clause_opt ::= FROM table_reference_list */ + case 464: /* where_clause_opt ::= WHERE search_condition */ yytestcase(yyruleno==464); + case 492: /* having_clause_opt ::= HAVING search_condition */ yytestcase(yyruleno==492); +{ yymsp[-1].minor.yy232 = yymsp[0].minor.yy232; } break; - case 435: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ -{ yylhsminor.yy812 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy812, yymsp[0].minor.yy812, NULL); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 437: /* table_reference_list ::= table_reference_list NK_COMMA table_reference */ +{ yylhsminor.yy232 = createJoinTableNode(pCxt, JOIN_TYPE_INNER, yymsp[-2].minor.yy232, yymsp[0].minor.yy232, NULL); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 438: /* table_primary ::= table_name alias_opt */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 440: /* table_primary ::= table_name alias_opt */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, NULL, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 439: /* table_primary ::= db_name NK_DOT table_name alias_opt */ -{ yylhsminor.yy812 = createRealTableNode(pCxt, &yymsp[-3].minor.yy29, &yymsp[-1].minor.yy29, &yymsp[0].minor.yy29); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 441: /* table_primary ::= db_name NK_DOT table_name alias_opt */ +{ yylhsminor.yy232 = createRealTableNode(pCxt, &yymsp[-3].minor.yy481, &yymsp[-1].minor.yy481, &yymsp[0].minor.yy481); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 440: /* table_primary ::= subquery alias_opt */ -{ yylhsminor.yy812 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 442: /* table_primary ::= subquery alias_opt */ +{ yylhsminor.yy232 = createTempTableNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 442: /* alias_opt ::= */ -{ yymsp[1].minor.yy29 = nil_token; } + case 444: /* alias_opt ::= */ +{ yymsp[1].minor.yy481 = nil_token; } break; - case 443: /* alias_opt ::= table_alias */ -{ yylhsminor.yy29 = yymsp[0].minor.yy29; } - yymsp[0].minor.yy29 = yylhsminor.yy29; + case 445: /* alias_opt ::= table_alias */ +{ yylhsminor.yy481 = yymsp[0].minor.yy481; } + yymsp[0].minor.yy481 = yylhsminor.yy481; break; - case 444: /* alias_opt ::= AS table_alias */ -{ yymsp[-1].minor.yy29 = yymsp[0].minor.yy29; } + case 446: /* alias_opt ::= AS table_alias */ +{ yymsp[-1].minor.yy481 = yymsp[0].minor.yy481; } break; - case 445: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ - case 446: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==446); -{ yymsp[-2].minor.yy812 = yymsp[-1].minor.yy812; } + case 447: /* parenthesized_joined_table ::= NK_LP joined_table NK_RP */ + case 448: /* parenthesized_joined_table ::= NK_LP parenthesized_joined_table NK_RP */ yytestcase(yyruleno==448); +{ yymsp[-2].minor.yy232 = yymsp[-1].minor.yy232; } break; - case 447: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ -{ yylhsminor.yy812 = createJoinTableNode(pCxt, yymsp[-4].minor.yy612, yymsp[-5].minor.yy812, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-5].minor.yy812 = yylhsminor.yy812; + case 449: /* joined_table ::= table_reference join_type JOIN table_reference ON search_condition */ +{ yylhsminor.yy232 = createJoinTableNode(pCxt, yymsp[-4].minor.yy700, yymsp[-5].minor.yy232, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-5].minor.yy232 = yylhsminor.yy232; break; - case 448: /* join_type ::= */ -{ yymsp[1].minor.yy612 = JOIN_TYPE_INNER; } + case 450: /* join_type ::= */ +{ yymsp[1].minor.yy700 = JOIN_TYPE_INNER; } break; - case 449: /* join_type ::= INNER */ -{ yymsp[0].minor.yy612 = JOIN_TYPE_INNER; } + case 451: /* join_type ::= INNER */ +{ yymsp[0].minor.yy700 = JOIN_TYPE_INNER; } break; - case 450: /* 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 452: /* 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.yy812 = createSelectStmt(pCxt, yymsp[-10].minor.yy137, yymsp[-9].minor.yy424, yymsp[-8].minor.yy812); - yymsp[-11].minor.yy812 = addWhereClause(pCxt, yymsp[-11].minor.yy812, yymsp[-7].minor.yy812); - yymsp[-11].minor.yy812 = addPartitionByClause(pCxt, yymsp[-11].minor.yy812, yymsp[-6].minor.yy424); - yymsp[-11].minor.yy812 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy812, yymsp[-2].minor.yy812); - yymsp[-11].minor.yy812 = addGroupByClause(pCxt, yymsp[-11].minor.yy812, yymsp[-1].minor.yy424); - yymsp[-11].minor.yy812 = addHavingClause(pCxt, yymsp[-11].minor.yy812, yymsp[0].minor.yy812); - yymsp[-11].minor.yy812 = addRangeClause(pCxt, yymsp[-11].minor.yy812, yymsp[-5].minor.yy812); - yymsp[-11].minor.yy812 = addEveryClause(pCxt, yymsp[-11].minor.yy812, yymsp[-4].minor.yy812); - yymsp[-11].minor.yy812 = addFillClause(pCxt, yymsp[-11].minor.yy812, yymsp[-3].minor.yy812); + yymsp[-11].minor.yy232 = createSelectStmt(pCxt, yymsp[-10].minor.yy777, yymsp[-9].minor.yy288, yymsp[-8].minor.yy232); + yymsp[-11].minor.yy232 = addWhereClause(pCxt, yymsp[-11].minor.yy232, yymsp[-7].minor.yy232); + yymsp[-11].minor.yy232 = addPartitionByClause(pCxt, yymsp[-11].minor.yy232, yymsp[-6].minor.yy288); + yymsp[-11].minor.yy232 = addWindowClauseClause(pCxt, yymsp[-11].minor.yy232, yymsp[-2].minor.yy232); + yymsp[-11].minor.yy232 = addGroupByClause(pCxt, yymsp[-11].minor.yy232, yymsp[-1].minor.yy288); + yymsp[-11].minor.yy232 = addHavingClause(pCxt, yymsp[-11].minor.yy232, yymsp[0].minor.yy232); + yymsp[-11].minor.yy232 = addRangeClause(pCxt, yymsp[-11].minor.yy232, yymsp[-5].minor.yy232); + yymsp[-11].minor.yy232 = addEveryClause(pCxt, yymsp[-11].minor.yy232, yymsp[-4].minor.yy232); + yymsp[-11].minor.yy232 = addFillClause(pCxt, yymsp[-11].minor.yy232, yymsp[-3].minor.yy232); } break; - case 453: /* set_quantifier_opt ::= ALL */ -{ yymsp[0].minor.yy137 = false; } + case 455: /* set_quantifier_opt ::= ALL */ +{ yymsp[0].minor.yy777 = false; } break; - case 456: /* select_item ::= NK_STAR */ -{ yylhsminor.yy812 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy812 = yylhsminor.yy812; + case 458: /* select_item ::= NK_STAR */ +{ yylhsminor.yy232 = createColumnNode(pCxt, NULL, &yymsp[0].minor.yy0); } + yymsp[0].minor.yy232 = yylhsminor.yy232; break; - case 458: /* select_item ::= common_expression column_alias */ - case 468: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==468); -{ yylhsminor.yy812 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-1].minor.yy812 = yylhsminor.yy812; + case 460: /* select_item ::= common_expression column_alias */ + case 470: /* partition_item ::= expr_or_subquery column_alias */ yytestcase(yyruleno==470); +{ yylhsminor.yy232 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-1].minor.yy232 = yylhsminor.yy232; break; - case 459: /* select_item ::= common_expression AS column_alias */ - case 469: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==469); -{ yylhsminor.yy812 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), &yymsp[0].minor.yy29); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 461: /* select_item ::= common_expression AS column_alias */ + case 471: /* partition_item ::= expr_or_subquery AS column_alias */ yytestcase(yyruleno==471); +{ yylhsminor.yy232 = setProjectionAlias(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), &yymsp[0].minor.yy481); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 464: /* partition_by_clause_opt ::= PARTITION BY partition_list */ - case 486: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==486); - case 505: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==505); -{ yymsp[-2].minor.yy424 = yymsp[0].minor.yy424; } + case 466: /* partition_by_clause_opt ::= PARTITION BY partition_list */ + case 488: /* group_by_clause_opt ::= GROUP BY group_by_list */ yytestcase(yyruleno==488); + case 507: /* order_by_clause_opt ::= ORDER BY sort_specification_list */ yytestcase(yyruleno==507); +{ yymsp[-2].minor.yy288 = yymsp[0].minor.yy288; } break; - case 471: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ -{ yymsp[-5].minor.yy812 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 473: /* twindow_clause_opt ::= SESSION NK_LP column_reference NK_COMMA duration_literal NK_RP */ +{ yymsp[-5].minor.yy232 = createSessionWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 472: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ -{ yymsp[-3].minor.yy812 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 474: /* twindow_clause_opt ::= STATE_WINDOW NK_LP expr_or_subquery NK_RP */ +{ yymsp[-3].minor.yy232 = createStateWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 473: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-5].minor.yy812 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), NULL, yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 475: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-5].minor.yy232 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), NULL, yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 474: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ -{ yymsp[-7].minor.yy812 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy812), releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), yymsp[-1].minor.yy812, yymsp[0].minor.yy812); } + case 476: /* twindow_clause_opt ::= INTERVAL NK_LP duration_literal NK_COMMA duration_literal NK_RP sliding_opt fill_opt */ +{ yymsp[-7].minor.yy232 = createIntervalWindowNode(pCxt, releaseRawExprNode(pCxt, yymsp[-5].minor.yy232), releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), yymsp[-1].minor.yy232, yymsp[0].minor.yy232); } break; - case 478: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ -{ yymsp[-3].minor.yy812 = createFillNode(pCxt, yymsp[-1].minor.yy594, NULL); } + case 480: /* fill_opt ::= FILL NK_LP fill_mode NK_RP */ +{ yymsp[-3].minor.yy232 = createFillNode(pCxt, yymsp[-1].minor.yy614, NULL); } break; - case 479: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ -{ yymsp[-5].minor.yy812 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy424)); } + case 481: /* fill_opt ::= FILL NK_LP VALUE NK_COMMA literal_list NK_RP */ +{ yymsp[-5].minor.yy232 = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, yymsp[-1].minor.yy288)); } break; - case 480: /* fill_mode ::= NONE */ -{ yymsp[0].minor.yy594 = FILL_MODE_NONE; } + case 482: /* fill_mode ::= NONE */ +{ yymsp[0].minor.yy614 = FILL_MODE_NONE; } break; - case 481: /* fill_mode ::= PREV */ -{ yymsp[0].minor.yy594 = FILL_MODE_PREV; } + case 483: /* fill_mode ::= PREV */ +{ yymsp[0].minor.yy614 = FILL_MODE_PREV; } break; - case 482: /* fill_mode ::= NULL */ -{ yymsp[0].minor.yy594 = FILL_MODE_NULL; } + case 484: /* fill_mode ::= NULL */ +{ yymsp[0].minor.yy614 = FILL_MODE_NULL; } break; - case 483: /* fill_mode ::= LINEAR */ -{ yymsp[0].minor.yy594 = FILL_MODE_LINEAR; } + case 485: /* fill_mode ::= LINEAR */ +{ yymsp[0].minor.yy614 = FILL_MODE_LINEAR; } break; - case 484: /* fill_mode ::= NEXT */ -{ yymsp[0].minor.yy594 = FILL_MODE_NEXT; } + case 486: /* fill_mode ::= NEXT */ +{ yymsp[0].minor.yy614 = FILL_MODE_NEXT; } break; - case 487: /* group_by_list ::= expr_or_subquery */ -{ yylhsminor.yy424 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); } - yymsp[0].minor.yy424 = yylhsminor.yy424; + case 489: /* group_by_list ::= expr_or_subquery */ +{ yylhsminor.yy288 = createNodeList(pCxt, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } + yymsp[0].minor.yy288 = yylhsminor.yy288; break; - case 488: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ -{ yylhsminor.yy424 = addNodeToList(pCxt, yymsp[-2].minor.yy424, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy812))); } - yymsp[-2].minor.yy424 = yylhsminor.yy424; + case 490: /* group_by_list ::= group_by_list NK_COMMA expr_or_subquery */ +{ yylhsminor.yy288 = addNodeToList(pCxt, yymsp[-2].minor.yy288, createGroupingSetNode(pCxt, releaseRawExprNode(pCxt, yymsp[0].minor.yy232))); } + yymsp[-2].minor.yy288 = yylhsminor.yy288; break; - case 492: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ -{ yymsp[-5].minor.yy812 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy812), releaseRawExprNode(pCxt, yymsp[-1].minor.yy812)); } + case 494: /* range_opt ::= RANGE NK_LP expr_or_subquery NK_COMMA expr_or_subquery NK_RP */ +{ yymsp[-5].minor.yy232 = createInterpTimeRange(pCxt, releaseRawExprNode(pCxt, yymsp[-3].minor.yy232), releaseRawExprNode(pCxt, yymsp[-1].minor.yy232)); } break; - case 495: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ + case 497: /* query_expression ::= query_simple order_by_clause_opt slimit_clause_opt limit_clause_opt */ { - yylhsminor.yy812 = addOrderByClause(pCxt, yymsp[-3].minor.yy812, yymsp[-2].minor.yy424); - yylhsminor.yy812 = addSlimitClause(pCxt, yylhsminor.yy812, yymsp[-1].minor.yy812); - yylhsminor.yy812 = addLimitClause(pCxt, yylhsminor.yy812, yymsp[0].minor.yy812); + yylhsminor.yy232 = addOrderByClause(pCxt, yymsp[-3].minor.yy232, yymsp[-2].minor.yy288); + yylhsminor.yy232 = addSlimitClause(pCxt, yylhsminor.yy232, yymsp[-1].minor.yy232); + yylhsminor.yy232 = addLimitClause(pCxt, yylhsminor.yy232, yymsp[0].minor.yy232); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 498: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ -{ yylhsminor.yy812 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-3].minor.yy812 = yylhsminor.yy812; + case 500: /* union_query_expression ::= query_simple_or_subquery UNION ALL query_simple_or_subquery */ +{ yylhsminor.yy232 = createSetOperator(pCxt, SET_OP_TYPE_UNION_ALL, yymsp[-3].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-3].minor.yy232 = yylhsminor.yy232; break; - case 499: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ -{ yylhsminor.yy812 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy812, yymsp[0].minor.yy812); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 501: /* union_query_expression ::= query_simple_or_subquery UNION query_simple_or_subquery */ +{ yylhsminor.yy232 = createSetOperator(pCxt, SET_OP_TYPE_UNION, yymsp[-2].minor.yy232, yymsp[0].minor.yy232); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 507: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ - case 511: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==511); -{ yymsp[-1].minor.yy812 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } + case 509: /* slimit_clause_opt ::= SLIMIT NK_INTEGER */ + case 513: /* limit_clause_opt ::= LIMIT NK_INTEGER */ yytestcase(yyruleno==513); +{ yymsp[-1].minor.yy232 = createLimitNode(pCxt, &yymsp[0].minor.yy0, NULL); } break; - case 508: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ - case 512: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==512); -{ yymsp[-3].minor.yy812 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } + case 510: /* slimit_clause_opt ::= SLIMIT NK_INTEGER SOFFSET NK_INTEGER */ + case 514: /* limit_clause_opt ::= LIMIT NK_INTEGER OFFSET NK_INTEGER */ yytestcase(yyruleno==514); +{ yymsp[-3].minor.yy232 = createLimitNode(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 509: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ - case 513: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==513); -{ yymsp[-3].minor.yy812 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } + case 511: /* slimit_clause_opt ::= SLIMIT NK_INTEGER NK_COMMA NK_INTEGER */ + case 515: /* limit_clause_opt ::= LIMIT NK_INTEGER NK_COMMA NK_INTEGER */ yytestcase(yyruleno==515); +{ yymsp[-3].minor.yy232 = createLimitNode(pCxt, &yymsp[0].minor.yy0, &yymsp[-2].minor.yy0); } break; - case 514: /* subquery ::= NK_LP query_expression NK_RP */ -{ yylhsminor.yy812 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy812); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 516: /* subquery ::= NK_LP query_expression NK_RP */ +{ yylhsminor.yy232 = createRawExprNodeExt(pCxt, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-1].minor.yy232); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 519: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ -{ yylhsminor.yy812 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy812), yymsp[-1].minor.yy38, yymsp[0].minor.yy757); } - yymsp[-2].minor.yy812 = yylhsminor.yy812; + case 521: /* sort_specification ::= expr_or_subquery ordering_specification_opt null_ordering_opt */ +{ yylhsminor.yy232 = createOrderByExprNode(pCxt, releaseRawExprNode(pCxt, yymsp[-2].minor.yy232), yymsp[-1].minor.yy866, yymsp[0].minor.yy833); } + yymsp[-2].minor.yy232 = yylhsminor.yy232; break; - case 520: /* ordering_specification_opt ::= */ -{ yymsp[1].minor.yy38 = ORDER_ASC; } + case 522: /* ordering_specification_opt ::= */ +{ yymsp[1].minor.yy866 = ORDER_ASC; } break; - case 521: /* ordering_specification_opt ::= ASC */ -{ yymsp[0].minor.yy38 = ORDER_ASC; } + case 523: /* ordering_specification_opt ::= ASC */ +{ yymsp[0].minor.yy866 = ORDER_ASC; } break; - case 522: /* ordering_specification_opt ::= DESC */ -{ yymsp[0].minor.yy38 = ORDER_DESC; } + case 524: /* ordering_specification_opt ::= DESC */ +{ yymsp[0].minor.yy866 = ORDER_DESC; } break; - case 523: /* null_ordering_opt ::= */ -{ yymsp[1].minor.yy757 = NULL_ORDER_DEFAULT; } + case 525: /* null_ordering_opt ::= */ +{ yymsp[1].minor.yy833 = NULL_ORDER_DEFAULT; } break; - case 524: /* null_ordering_opt ::= NULLS FIRST */ -{ yymsp[-1].minor.yy757 = NULL_ORDER_FIRST; } + case 526: /* null_ordering_opt ::= NULLS FIRST */ +{ yymsp[-1].minor.yy833 = NULL_ORDER_FIRST; } break; - case 525: /* null_ordering_opt ::= NULLS LAST */ -{ yymsp[-1].minor.yy757 = NULL_ORDER_LAST; } + case 527: /* null_ordering_opt ::= NULLS LAST */ +{ yymsp[-1].minor.yy833 = NULL_ORDER_LAST; } break; default: break; diff --git a/source/libs/parser/test/parInitialDTest.cpp b/source/libs/parser/test/parInitialDTest.cpp index c7865f3da3..3ded71242b 100644 --- a/source/libs/parser/test/parInitialDTest.cpp +++ b/source/libs/parser/test/parInitialDTest.cpp @@ -87,7 +87,6 @@ TEST_F(ParserInitialDTest, dropConsumerGroup) { // todo DROP database -// todo DROP dnode TEST_F(ParserInitialDTest, dropDnode) { useDb("root", "test"); @@ -95,11 +94,15 @@ TEST_F(ParserInitialDTest, dropDnode) { auto clearDropDnodeReq = [&]() { memset(&expect, 0, sizeof(SDropDnodeReq)); }; - auto setDropDnodeReqById = [&](int32_t dnodeId) { expect.dnodeId = dnodeId; }; + auto setDropDnodeReqById = [&](int32_t dnodeId, bool force = false) { + expect.dnodeId = dnodeId; + expect.force = force; + }; - auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port) { + auto setDropDnodeReqByEndpoint = [&](const char* pFqdn, int32_t port, bool force = false) { strcpy(expect.fqdn, pFqdn); expect.port = port; + expect.force = force; }; setCheckDdlFunc([&](const SQuery* pQuery, ParserStage stage) { @@ -110,15 +113,24 @@ TEST_F(ParserInitialDTest, dropDnode) { ASSERT_EQ(req.dnodeId, expect.dnodeId); ASSERT_EQ(std::string(req.fqdn), std::string(expect.fqdn)); ASSERT_EQ(req.port, expect.port); + ASSERT_EQ(req.force, expect.force); }); setDropDnodeReqById(1); run("DROP DNODE 1"); clearDropDnodeReq(); + setDropDnodeReqById(2, true); + run("DROP DNODE 2 FORCE"); + clearDropDnodeReq(); + setDropDnodeReqByEndpoint("host1", 7030); run("DROP DNODE 'host1:7030'"); clearDropDnodeReq(); + + setDropDnodeReqByEndpoint("host2", 8030, true); + run("DROP DNODE 'host2:8030' FORCE"); + clearDropDnodeReq(); } // todo DROP function diff --git a/source/libs/sync/inc/syncEnv.h b/source/libs/sync/inc/syncEnv.h index 2a37e000e2..55ce1470ce 100644 --- a/source/libs/sync/inc/syncEnv.h +++ b/source/libs/sync/inc/syncEnv.h @@ -20,21 +20,15 @@ extern "C" { #endif -#include -#include -#include #include "syncInt.h" -#include "taosdef.h" -#include "trpc.h" -#include "ttimer.h" -#define TIMER_MAX_MS 0x7FFFFFFF -#define ENV_TICK_TIMER_MS 1000 -#define PING_TIMER_MS 5000 -#define ELECT_TIMER_MS_MIN 5000 -#define ELECT_TIMER_MS_MAX (ELECT_TIMER_MS_MIN * 2) +#define TIMER_MAX_MS 0x7FFFFFFF +#define ENV_TICK_TIMER_MS 1000 +#define PING_TIMER_MS 5000 +#define ELECT_TIMER_MS_MIN 2500 +#define ELECT_TIMER_MS_MAX (ELECT_TIMER_MS_MIN * 2) #define ELECT_TIMER_MS_RANGE (ELECT_TIMER_MS_MAX - ELECT_TIMER_MS_MIN) -#define HEARTBEAT_TIMER_MS 900 +#define HEARTBEAT_TIMER_MS 1000 #define EMPTY_RAFT_ID ((SRaftId){.addr = 0, .vgId = 0}) @@ -57,12 +51,12 @@ typedef struct SSyncEnv { } SSyncEnv; -extern SSyncEnv* gSyncEnv; +SSyncEnv* syncEnv(); -int32_t syncEnvStart(); -int32_t syncEnvStop(); -int32_t syncEnvStartTimer(); -int32_t syncEnvStopTimer(); +int64_t syncNodeAdd(SSyncNode* pNode); +void syncNodeRemove(int64_t rid); +SSyncNode* syncNodeAcquire(int64_t rid); +void syncNodeRelease(SSyncNode* pNode); #ifdef __cplusplus } diff --git a/source/libs/sync/inc/syncInt.h b/source/libs/sync/inc/syncInt.h index ae053328ab..843dee1342 100644 --- a/source/libs/sync/inc/syncInt.h +++ b/source/libs/sync/inc/syncInt.h @@ -24,6 +24,8 @@ extern "C" { #include "syncTools.h" #include "tlog.h" #include "ttimer.h" +#include "taosdef.h" +#include "ttimer.h" // clang-format off #define sFatal(...) do { if (sDebugFlag & DEBUG_FATAL) { taosPrintLog("SYN FATAL ", DEBUG_FATAL, 255, __VA_ARGS__); }} while(0) @@ -255,9 +257,6 @@ void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* newConfig, Sync SyncIndex syncMinMatchIndex(SSyncNode* pSyncNode); char* syncNodePeerState2Str(const SSyncNode* pSyncNode); -SSyncNode* syncNodeAcquire(int64_t rid); -void syncNodeRelease(SSyncNode* pNode); - // raft state change -------------- void syncNodeUpdateTerm(SSyncNode* pSyncNode, SyncTerm term); void syncNodeUpdateTermWithoutStepDown(SSyncNode* pSyncNode, SyncTerm term); @@ -302,9 +301,6 @@ bool syncNodeNeedSendAppendEntries(SSyncNode* ths, const SRaftId* pDestId, const int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta); int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct SSnapshotMeta* sMeta); -void syncStartNormal(int64_t rid); -void syncStartStandBy(int64_t rid); - bool syncNodeCanChange(SSyncNode* pSyncNode); bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg); @@ -341,6 +337,8 @@ void syncLogRecvHeartbeat(SSyncNode* pSyncNode, const SyncHeartbeat* pMsg, const void syncLogSendHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s); void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* pMsg, const char* s); +void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s); + // for debug -------------- void syncNodePrint(SSyncNode* pObj); void syncNodePrint2(char* s, SSyncNode* pObj); diff --git a/source/libs/sync/src/syncEnv.c b/source/libs/sync/src/syncEnv.c index fb0bfb8bef..c55cd4fdac 100644 --- a/source/libs/sync/src/syncEnv.c +++ b/source/libs/sync/src/syncEnv.c @@ -13,118 +13,111 @@ * along with this program. If not, see . */ +#define _DEFAULT_SOURCE #include "syncEnv.h" -// #include +#include "tref.h" -SSyncEnv *gSyncEnv = NULL; +static SSyncEnv gSyncEnv = {0}; +static int32_t gNodeRefId = -1; +bool gRaftDetailLog = false; +static void syncEnvTick(void *param, void *tmrId); -// local function ----------------- -static SSyncEnv *doSyncEnvStart(); -static int32_t doSyncEnvStop(SSyncEnv *pSyncEnv); -static int32_t doSyncEnvStartTimer(SSyncEnv *pSyncEnv); -static int32_t doSyncEnvStopTimer(SSyncEnv *pSyncEnv); -static void syncEnvTick(void *param, void *tmrId); -// -------------------------------- +SSyncEnv *syncEnv() { return &gSyncEnv; } -bool syncEnvIsStart() { - if (gSyncEnv == NULL) { - return false; - } +bool syncIsInit() { return atomic_load_8(&gSyncEnv.isStart); } - return atomic_load_8(&(gSyncEnv->isStart)); -} +int32_t syncInit() { + if (syncIsInit()) return 0; -int32_t syncEnvStart() { - int32_t ret = 0; uint32_t seed = (uint32_t)(taosGetTimestampNs() & 0x00000000FFFFFFFF); taosSeedRand(seed); - // gSyncEnv = doSyncEnvStart(gSyncEnv); - gSyncEnv = doSyncEnvStart(); - ASSERT(gSyncEnv != NULL); - sTrace("sync env start ok"); - return ret; -} -int32_t syncEnvStop() { - int32_t ret = doSyncEnvStop(gSyncEnv); - return ret; -} - -int32_t syncEnvStartTimer() { - int32_t ret = doSyncEnvStartTimer(gSyncEnv); - return ret; -} - -int32_t syncEnvStopTimer() { - int32_t ret = doSyncEnvStopTimer(gSyncEnv); - return ret; -} - -// local function ----------------- -static void syncEnvTick(void *param, void *tmrId) { - SSyncEnv *pSyncEnv = (SSyncEnv *)param; - if (atomic_load_64(&pSyncEnv->envTickTimerLogicClockUser) <= atomic_load_64(&pSyncEnv->envTickTimerLogicClock)) { - ++(pSyncEnv->envTickTimerCounter); - sTrace("syncEnvTick do ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 - ", envTickTimerCounter:%" PRIu64 - ", " - "envTickTimerMS:%d, tmrId:%p", - pSyncEnv->envTickTimerLogicClockUser, pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerCounter, - pSyncEnv->envTickTimerMS, tmrId); - - // do something, tick ... - taosTmrReset(syncEnvTick, pSyncEnv->envTickTimerMS, pSyncEnv, pSyncEnv->pTimerManager, &pSyncEnv->pEnvTickTimer); - } else { - sTrace("syncEnvTick pass ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 - ", envTickTimerCounter:%" PRIu64 - ", " - "envTickTimerMS:%d, tmrId:%p", - pSyncEnv->envTickTimerLogicClockUser, pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerCounter, - pSyncEnv->envTickTimerMS, tmrId); - } -} - -static SSyncEnv *doSyncEnvStart() { - SSyncEnv *pSyncEnv = (SSyncEnv *)taosMemoryMalloc(sizeof(SSyncEnv)); - ASSERT(pSyncEnv != NULL); - memset(pSyncEnv, 0, sizeof(SSyncEnv)); - - pSyncEnv->envTickTimerCounter = 0; - pSyncEnv->envTickTimerMS = ENV_TICK_TIMER_MS; - pSyncEnv->FpEnvTickTimer = syncEnvTick; - atomic_store_64(&pSyncEnv->envTickTimerLogicClock, 0); - atomic_store_64(&pSyncEnv->envTickTimerLogicClockUser, 0); + memset(&gSyncEnv, 0, sizeof(SSyncEnv)); + gSyncEnv.envTickTimerCounter = 0; + gSyncEnv.envTickTimerMS = ENV_TICK_TIMER_MS; + gSyncEnv.FpEnvTickTimer = syncEnvTick; + atomic_store_64(&gSyncEnv.envTickTimerLogicClock, 0); + atomic_store_64(&gSyncEnv.envTickTimerLogicClockUser, 0); // start tmr thread - pSyncEnv->pTimerManager = taosTmrInit(1000, 50, 10000, "SYNC-ENV"); + gSyncEnv.pTimerManager = taosTmrInit(1000, 50, 10000, "SYNC-ENV"); + atomic_store_8(&gSyncEnv.isStart, 1); - atomic_store_8(&(pSyncEnv->isStart), 1); - return pSyncEnv; -} - -static int32_t doSyncEnvStop(SSyncEnv *pSyncEnv) { - ASSERT(pSyncEnv == gSyncEnv); - if (pSyncEnv != NULL) { - atomic_store_8(&(pSyncEnv->isStart), 0); - taosTmrCleanUp(pSyncEnv->pTimerManager); - taosMemoryFree(pSyncEnv); + gNodeRefId = taosOpenRef(200, (RefFp)syncNodeClose); + if (gNodeRefId < 0) { + sError("failed to init node ref"); + syncCleanUp(); + return -1; } - gSyncEnv = NULL; + + sDebug("sync rsetId:%d is open", gNodeRefId); return 0; } -static int32_t doSyncEnvStartTimer(SSyncEnv *pSyncEnv) { - int32_t ret = 0; - taosTmrReset(pSyncEnv->FpEnvTickTimer, pSyncEnv->envTickTimerMS, pSyncEnv, pSyncEnv->pTimerManager, - &pSyncEnv->pEnvTickTimer); - atomic_store_64(&pSyncEnv->envTickTimerLogicClock, pSyncEnv->envTickTimerLogicClockUser); - return ret; +void syncCleanUp() { + atomic_store_8(&gSyncEnv.isStart, 0); + taosTmrCleanUp(gSyncEnv.pTimerManager); + memset(&gSyncEnv, 0, sizeof(SSyncEnv)); + + if (gNodeRefId != -1) { + sDebug("sync rsetId:%d is closed", gNodeRefId); + taosCloseRef(gNodeRefId); + gNodeRefId = -1; + } } -static int32_t doSyncEnvStopTimer(SSyncEnv *pSyncEnv) { +int64_t syncNodeAdd(SSyncNode *pNode) { + pNode->rid = taosAddRef(gNodeRefId, pNode); + if (pNode->rid < 0) return -1; + + sDebug("vgId:%d, sync rid:%" PRId64 " is added to rsetId:%d", pNode->vgId, pNode->rid, gNodeRefId); + return pNode->rid; +} + +void syncNodeRemove(int64_t rid) { taosRemoveRef(gNodeRefId, rid); } + +SSyncNode *syncNodeAcquire(int64_t rid) { + SSyncNode *pNode = taosAcquireRef(gNodeRefId, rid); + if (pNode == NULL) { + sTrace("failed to acquire node from refId:%" PRId64, rid); + } + + return pNode; +} + +void syncNodeRelease(SSyncNode *pNode) { taosReleaseRef(gNodeRefId, pNode->rid); } + +#if 0 +void syncEnvStartTimer() { + taosTmrReset(gSyncEnv.FpEnvTickTimer, gSyncEnv.envTickTimerMS, &gSyncEnv, gSyncEnv.pTimerManager, + &gSyncEnv.pEnvTickTimer); + atomic_store_64(&gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerLogicClockUser); +} + +void syncEnvStopTimer() { int32_t ret = 0; - atomic_add_fetch_64(&pSyncEnv->envTickTimerLogicClockUser, 1); - taosTmrStop(pSyncEnv->pEnvTickTimer); - pSyncEnv->pEnvTickTimer = NULL; + atomic_add_fetch_64(&gSyncEnv.envTickTimerLogicClockUser, 1); + taosTmrStop(gSyncEnv.pEnvTickTimer); + gSyncEnv.pEnvTickTimer = NULL; return ret; } +#endif + +static void syncEnvTick(void *param, void *tmrId) { + SSyncEnv *pSyncEnv = param; + if (atomic_load_64(&gSyncEnv.envTickTimerLogicClockUser) <= atomic_load_64(&gSyncEnv.envTickTimerLogicClock)) { + gSyncEnv.envTickTimerCounter++; + sTrace("syncEnvTick do ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 + ", envTickTimerCounter:%" PRIu64 ", envTickTimerMS:%d, tmrId:%p", + gSyncEnv.envTickTimerLogicClockUser, gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerCounter, + gSyncEnv.envTickTimerMS, tmrId); + + // do something, tick ... + taosTmrReset(syncEnvTick, gSyncEnv.envTickTimerMS, pSyncEnv, gSyncEnv.pTimerManager, &gSyncEnv.pEnvTickTimer); + } else { + sTrace("syncEnvTick pass ... envTickTimerLogicClockUser:%" PRIu64 ", envTickTimerLogicClock:%" PRIu64 + ", envTickTimerCounter:%" PRIu64 ", envTickTimerMS:%d, tmrId:%p", + gSyncEnv.envTickTimerLogicClockUser, gSyncEnv.envTickTimerLogicClock, gSyncEnv.envTickTimerCounter, + gSyncEnv.envTickTimerMS, tmrId); + } +} diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c index b77652bc81..139e4be1b9 100644 --- a/source/libs/sync/src/syncMain.c +++ b/source/libs/sync/src/syncMain.c @@ -33,11 +33,6 @@ #include "syncTimeout.h" #include "syncUtil.h" #include "syncVoteMgr.h" -#include "tref.h" - -bool gRaftDetailLog = false; - -static int32_t tsNodeRefId = -1; // ------ local funciton --------- // enqueue message ---- @@ -47,143 +42,42 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId); static int32_t syncNodeEqNoop(SSyncNode* ths); static int32_t syncNodeAppendNoop(SSyncNode* ths); static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId); +static bool syncIsConfigChanged(const SSyncCfg* pOldCfg, const SSyncCfg* pNewCfg); // process message ---- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg); -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg); - -// --------------------------------- -static void syncNodeFreeCb(void* param) { - syncNodeClose(param); - param = NULL; -} - -int32_t syncInit() { - int32_t ret = 0; - - if (!syncEnvIsStart()) { - tsNodeRefId = taosOpenRef(200, syncNodeFreeCb); - if (tsNodeRefId < 0) { - sError("failed to init node ref"); - syncCleanUp(); - ret = -1; - } else { - sDebug("sync rsetId:%d is open", tsNodeRefId); - ret = syncEnvStart(); - } - } - - return ret; -} - -void syncCleanUp() { - int32_t ret = syncEnvStop(); - ASSERT(ret == 0); - - if (tsNodeRefId != -1) { - sDebug("sync rsetId:%d is closed", tsNodeRefId); - taosCloseRef(tsNodeRefId); - tsNodeRefId = -1; - } -} +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg); +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg); int64_t syncOpen(SSyncInfo* pSyncInfo) { - SSyncNode* pSyncNode = syncNodeOpen(pSyncInfo); - if (pSyncNode == NULL) { + SSyncNode* pNode = syncNodeOpen(pSyncInfo); + if (pNode == NULL) { sError("vgId:%d, failed to open sync node", pSyncInfo->vgId); return -1; } - pSyncNode->rid = taosAddRef(tsNodeRefId, pSyncNode); - if (pSyncNode->rid < 0) { - syncNodeClose(pSyncNode); - pSyncNode = NULL; + pNode->rid = syncNodeAdd(pNode); + if (pNode->rid < 0) { + syncNodeClose(pNode); return -1; } - sDebug("vgId:%d, sync rid:%" PRId64 " is added to rsetId:%d", pSyncInfo->vgId, pSyncNode->rid, tsNodeRefId); - return pSyncNode->rid; + return pNode->rid; } void syncStart(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; + SSyncNode* pNode = syncNodeAcquire(rid); + if (pNode != NULL) { + syncNodeStart(pNode); + syncNodeRelease(pNode); } - - if (pSyncNode->pRaftCfg->isStandBy) { - syncNodeStartStandBy(pSyncNode); - } else { - syncNodeStart(pSyncNode); - } - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); -} - -void syncStartNormal(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; - } - syncNodeStart(pSyncNode); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); -} - -void syncStartStandBy(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - return; - } - syncNodeStartStandBy(pSyncNode); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); } void syncStop(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) return; - int32_t vgId = pSyncNode->vgId; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - - taosRemoveRef(tsNodeRefId, rid); - sDebug("vgId:%d, sync rid:%" PRId64 " is removed from rsetId:%d", vgId, rid, tsNodeRefId); -} - -int32_t syncSetStandby(int64_t rid) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); - if (pSyncNode == NULL) { - terrno = TSDB_CODE_SYN_INTERNAL_ERROR; - sError("failed to set standby since accquire ref error, rid:%" PRId64, rid); - return -1; + SSyncNode* pNode = syncNodeAcquire(rid); + if (pNode != NULL) { + syncNodeRelease(pNode); + syncNodeRemove(rid); } - - if (pSyncNode->state != TAOS_SYNC_STATE_FOLLOWER) { - if (pSyncNode->state == TAOS_SYNC_STATE_LEADER) { - terrno = TSDB_CODE_SYN_IS_LEADER; - } else { - terrno = TSDB_CODE_SYN_STANDBY_NOT_READY; - } - sError("failed to set standby since it is not follower, state:%s rid:%" PRId64, syncStr(pSyncNode->state), rid); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - return -1; - } - - // state change - pSyncNode->state = TAOS_SYNC_STATE_FOLLOWER; - syncNodeStopHeartbeatTimer(pSyncNode); - - // reset elect timer, long enough - int32_t electMS = TIMER_MAX_MS; - int32_t ret = syncNodeRestartElectTimer(pSyncNode, electMS); - ASSERT(ret == 0); - - pSyncNode->pRaftCfg->isStandBy = 1; - raftCfgPersist(pSyncNode->pRaftCfg); - - taosReleaseRef(tsNodeRefId, pSyncNode->rid); - sInfo("vgId:%d, set to standby", pSyncNode->vgId); - return 0; } bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg) { @@ -204,7 +98,7 @@ bool syncNodeCheckNewConfig(SSyncNode* pSyncNode, const SSyncCfg* pNewCfg) { } int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -213,7 +107,7 @@ int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg int32_t ret = 0; if (!syncNodeCheckNewConfig(pSyncNode, pNewCfg)) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_NEW_CONFIG_ERROR; sError("invalid new config. vgId:%d", pSyncNode->vgId); return -1; @@ -227,12 +121,12 @@ int32_t syncReconfigBuild(int64_t rid, const SSyncCfg* pNewCfg, SRpcMsg* pRpcMsg snprintf(pRpcMsg->pCont, pRpcMsg->contLen, "%s", newconfig); taosMemoryFree(newconfig); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -240,7 +134,7 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { ASSERT(rid == pSyncNode->rid); if (!syncNodeCheckNewConfig(pSyncNode, pNewCfg)) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_NEW_CONFIG_ERROR; sError("invalid new config. vgId:%d", pSyncNode->vgId); return -1; @@ -259,7 +153,7 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { taosMemoryFree(newconfig); ret = syncNodePropose(pSyncNode, &rpcMsg, false); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; #else syncNodeUpdateNewConfigIndex(pSyncNode, pNewCfg); @@ -275,13 +169,13 @@ int32_t syncReconfig(int64_t rid, SSyncCfg* pNewCfg) { syncNodeReplicate(pSyncNode); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; #endif } int32_t syncLeaderTransfer(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -289,12 +183,12 @@ int32_t syncLeaderTransfer(int64_t rid) { ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodeLeaderTransfer(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -302,7 +196,7 @@ int32_t syncLeaderTransferTo(int64_t rid, SNodeInfo newLeader) { ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodeLeaderTransferTo(pSyncNode, newLeader); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } @@ -358,7 +252,7 @@ char* syncNodePeerState2Str(const SSyncNode* pSyncNode) { } int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -382,7 +276,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { logNum, isEmpty); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -411,7 +305,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { syncNodeEventLog(pSyncNode, logBuf); } while (0); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } } @@ -424,7 +318,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { lastApplyIndex, pSyncNode->minMatchIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -433,7 +327,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { snprintf(logBuf, sizeof(logBuf), "new-snapshot-index:%" PRId64 " candidate, do not delete wal", lastApplyIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } else { @@ -442,7 +336,7 @@ int32_t syncBeginSnapshot(int64_t rid, int64_t lastApplyIndex) { lastApplyIndex); syncNodeEventLog(pSyncNode, logBuf); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -491,12 +385,12 @@ _DEL_WAL: } } while (0); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return code; } int32_t syncEndSnapshot(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; @@ -508,9 +402,9 @@ int32_t syncEndSnapshot(int64_t rid) { SSyncLogStoreData* pData = pSyncNode->pLogStore->data; code = walEndSnapshot(pData->pWal); if (code != 0) { - sError("vgId:%d, wal snapshot end error since:%s", pSyncNode->vgId, terrstr(terrno)); + sError("vgId:%d, wal snapshot end error since:%s", pSyncNode->vgId, terrstr()); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return -1; } else { do { @@ -524,10 +418,24 @@ int32_t syncEndSnapshot(int64_t rid) { } } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return code; } +int32_t syncStepDown(int64_t rid, SyncTerm newTerm) { + SSyncNode* pSyncNode = syncNodeAcquire(rid); + if (pSyncNode == NULL) { + terrno = TSDB_CODE_SYN_INTERNAL_ERROR; + return -1; + } + ASSERT(rid == pSyncNode->rid); + + syncNodeStepDown(pSyncNode, newTerm); + + syncNodeRelease(pSyncNode); + return 0; +} + int32_t syncNodeLeaderTransfer(SSyncNode* pSyncNode) { if (pSyncNode->peersNum == 0) { sDebug("only one replica, cannot leader transfer"); @@ -569,19 +477,19 @@ int32_t syncNodeLeaderTransferTo(SSyncNode* pSyncNode, SNodeInfo newLeader) { } bool syncCanLeaderTransfer(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); if (pSyncNode->replicaNum == 1) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return false; } if (pSyncNode->state == TAOS_SYNC_STATE_FOLLOWER) { - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return true; } @@ -596,7 +504,7 @@ bool syncCanLeaderTransfer(int64_t rid) { } } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return matchOK; } @@ -606,25 +514,25 @@ int32_t syncForwardToPeer(int64_t rid, SRpcMsg* pMsg, bool isWeak) { } ESyncState syncGetMyRole(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); ESyncState state = pSyncNode->state; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return state; } bool syncIsReady(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool b = (pSyncNode->state == TAOS_SYNC_STATE_LEADER) && pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); // if false, set error code if (false == b) { @@ -638,14 +546,14 @@ bool syncIsReady(int64_t rid) { } bool syncIsRestoreFinish(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool b = pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return b; } @@ -654,7 +562,7 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho return -1; } - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -666,7 +574,7 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho if (pEntry != NULL) { syncEntryDestory(pEntry); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return -1; } ASSERT(pEntry != NULL); @@ -677,12 +585,12 @@ int32_t syncGetSnapshotByIndex(int64_t rid, SyncIndex index, SSnapshot* pSnapsho pSnapshot->lastConfigIndex = syncNodeGetSnapshotConfigIndex(pSyncNode, index); syncEntryDestory(pEntry); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -691,12 +599,12 @@ int32_t syncGetSnapshotMeta(int64_t rid, struct SSnapshotMeta* sMeta) { sTrace("vgId:%d, get snapshot meta, lastConfigIndex:%" PRId64, pSyncNode->vgId, pSyncNode->pRaftCfg->lastConfigIndex); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct SSnapshotMeta* sMeta) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return -1; } @@ -715,7 +623,7 @@ int32_t syncGetSnapshotMetaByIndex(int64_t rid, SyncIndex snapshotIndex, struct sTrace("vgId:%d, get snapshot meta by index:%" PRId64 " lcindex:%" PRId64, pSyncNode->vgId, snapshotIndex, sMeta->lastConfigIndex); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return 0; } @@ -741,67 +649,67 @@ const char* syncGetMyRoleStr(int64_t rid) { } bool syncRestoreFinish(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return false; } ASSERT(rid == pSyncNode->rid); bool restoreFinish = pSyncNode->restoreFinish; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return restoreFinish; } SyncTerm syncGetMyTerm(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); SyncTerm term = pSyncNode->pRaftStore->currentTerm; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return term; } SyncIndex syncGetLastIndex(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return SYNC_INDEX_INVALID; } ASSERT(rid == pSyncNode->rid); SyncIndex lastIndex = syncNodeGetLastIndex(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return lastIndex; } SyncIndex syncGetCommitIndex(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return SYNC_INDEX_INVALID; } ASSERT(rid == pSyncNode->rid); SyncIndex cmtIndex = pSyncNode->commitIndex; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return cmtIndex; } SyncGroupId syncGetVgId(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } ASSERT(rid == pSyncNode->rid); SyncGroupId vgId = pSyncNode->vgId; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return vgId; } void syncGetEpSet(int64_t rid, SEpSet* pEpSet) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { memset(pEpSet, 0, sizeof(*pEpSet)); return; @@ -817,11 +725,11 @@ void syncGetEpSet(int64_t rid, SEpSet* pEpSet) { pEpSet->inUse = pSyncNode->pRaftCfg->cfg.myIndex; sInfo("vgId:%d, sync get epset in-use:%d", pSyncNode->vgId, pEpSet->inUse); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { memset(pEpSet, 0, sizeof(*pEpSet)); return; @@ -840,11 +748,11 @@ void syncGetRetryEpSet(int64_t rid, SEpSet* pEpSet) { } sInfo("vgId:%d, sync get retry epset in-use:%d", pSyncNode->vgId, pEpSet->inUse); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } @@ -856,12 +764,12 @@ int32_t syncGetRespRpc(int64_t rid, uint64_t index, SRpcMsg* msg) { memcpy(msg, &(stub.rpcMsg), sizeof(SRpcMsg)); } - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return TAOS_SYNC_STATE_ERROR; } @@ -874,12 +782,12 @@ int32_t syncGetAndDelRespRpc(int64_t rid, uint64_t index, SRpcHandleInfo* pInfo) } sTrace("vgId:%d, get seq:%" PRIu64 " rpc handle:%p", pSyncNode->vgId, index, pInfo->handle); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { sTrace("syncSetQ get pSyncNode is NULL, rid:%" PRId64, rid); return; @@ -887,24 +795,24 @@ void syncSetMsgCb(int64_t rid, const SMsgCb* msgcb) { ASSERT(rid == pSyncNode->rid); pSyncNode->msgcb = msgcb; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } char* sync2SimpleStr(int64_t rid) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { sTrace("syncSetRpc get pSyncNode is NULL, rid:%" PRId64, rid); return NULL; } ASSERT(rid == pSyncNode->rid); char* s = syncNode2SimpleStr(pSyncNode); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return s; } void setPingTimerMS(int64_t rid, int32_t pingTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } @@ -912,22 +820,22 @@ void setPingTimerMS(int64_t rid, int32_t pingTimerMS) { pSyncNode->pingBaseLine = pingTimerMS; pSyncNode->pingTimerMS = pingTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void setElectTimerMS(int64_t rid, int32_t electTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } ASSERT(rid == pSyncNode->rid); pSyncNode->electBaseLine = electTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) { - SSyncNode* pSyncNode = (SSyncNode*)taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { return; } @@ -935,20 +843,20 @@ void setHeartbeatTimerMS(int64_t rid, int32_t hbTimerMS) { pSyncNode->hbBaseLine = hbTimerMS; pSyncNode->heartbeatTimerMS = hbTimerMS; - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); } int32_t syncPropose(int64_t rid, SRpcMsg* pMsg, bool isWeak) { - SSyncNode* pSyncNode = taosAcquireRef(tsNodeRefId, rid); + SSyncNode* pSyncNode = syncNodeAcquire(rid); if (pSyncNode == NULL) { - taosReleaseRef(tsNodeRefId, rid); + syncNodeRelease(pSyncNode); terrno = TSDB_CODE_SYN_INTERNAL_ERROR; return -1; } ASSERT(rid == pSyncNode->rid); int32_t ret = syncNodePropose(pSyncNode, pMsg, isWeak); - taosReleaseRef(tsNodeRefId, pSyncNode->rid); + syncNodeRelease(pSyncNode); return ret; } @@ -1070,7 +978,7 @@ int32_t syncHbTimerInit(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer, SRaftId de int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { int32_t ret = 0; - if (syncEnvIsStart()) { + if (syncIsInit()) { SSyncHbTimerData* pData = taosMemoryMalloc(sizeof(SSyncHbTimerData)); pData->pSyncNode = pSyncNode; pData->pTimer = pSyncTimer; @@ -1078,7 +986,7 @@ int32_t syncHbTimerStart(SSyncNode* pSyncNode, SSyncTimer* pSyncTimer) { pData->logicClock = pSyncTimer->logicClock; pSyncTimer->pData = pData; - taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, gSyncEnv->pTimerManager, &pSyncTimer->pTimer); + taosTmrReset(pSyncTimer->timerCb, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer); } else { sError("vgId:%d, start ctrl hb timer error, sync env is stop", pSyncNode->vgId); } @@ -1132,7 +1040,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) { sError("vgId:%d, failed to open raft cfg file at %s", pSyncNode->vgId, pSyncNode->configPath); goto _error; } - if (pSyncInfo->syncCfg.replicaNum > 0 && pSyncInfo->syncCfg.replicaNum != pSyncNode->pRaftCfg->cfg.replicaNum) { + + if (pSyncInfo->syncCfg.replicaNum > 0 && syncIsConfigChanged(&pSyncNode->pRaftCfg->cfg, &pSyncInfo->syncCfg)) { sInfo("vgId:%d, use sync config from input options and write to cfg file", pSyncNode->vgId); pSyncNode->pRaftCfg->cfg = pSyncInfo->syncCfg; if (raftCfgPersist(pSyncNode->pRaftCfg) != 0) { @@ -1327,8 +1236,8 @@ SSyncNode* syncNodeOpen(SSyncInfo* pSyncInfo) { } // init callback - pSyncNode->FpOnPing = syncNodeOnPingCb; - pSyncNode->FpOnPingReply = syncNodeOnPingReplyCb; + pSyncNode->FpOnPing = syncNodeOnPing; + pSyncNode->FpOnPingReply = syncNodeOnPingReply; pSyncNode->FpOnClientRequest = syncNodeOnClientRequest; pSyncNode->FpOnTimeout = syncNodeOnTimer; pSyncNode->FpOnSnapshot = syncNodeOnSnapshot; @@ -1542,8 +1451,8 @@ int32_t syncNodePingAll(SSyncNode* pSyncNode) { // timer control -------------- int32_t syncNodeStartPingTimer(SSyncNode* pSyncNode) { int32_t ret = 0; - if (syncEnvIsStart()) { - taosTmrReset(pSyncNode->FpPingTimerCB, pSyncNode->pingTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(pSyncNode->FpPingTimerCB, pSyncNode->pingTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pPingTimer); atomic_store_64(&pSyncNode->pingTimerLogicClock, pSyncNode->pingTimerLogicClockUser); } else { @@ -1562,7 +1471,7 @@ int32_t syncNodeStopPingTimer(SSyncNode* pSyncNode) { int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) { int32_t ret = 0; - if (syncEnvIsStart()) { + if (syncIsInit()) { pSyncNode->electTimerMS = ms; SElectTimer* pElectTimer = taosMemoryMalloc(sizeof(SElectTimer)); @@ -1570,7 +1479,7 @@ int32_t syncNodeStartElectTimer(SSyncNode* pSyncNode, int32_t ms) { pElectTimer->pSyncNode = pSyncNode; pElectTimer->pData = NULL; - taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, pElectTimer, gSyncEnv->pTimerManager, + taosTmrReset(pSyncNode->FpElectTimerCB, pSyncNode->electTimerMS, pElectTimer, syncEnv()->pTimerManager, &pSyncNode->pElectTimer); } else { @@ -1618,8 +1527,8 @@ int32_t syncNodeResetElectTimer(SSyncNode* pSyncNode) { static int32_t syncNodeDoStartHeartbeatTimer(SSyncNode* pSyncNode) { int32_t ret = 0; - if (syncEnvIsStart()) { - taosTmrReset(pSyncNode->FpHeartbeatTimerCB, pSyncNode->heartbeatTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(pSyncNode->FpHeartbeatTimerCB, pSyncNode->heartbeatTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pHeartbeatTimer); atomic_store_64(&pSyncNode->heartbeatTimerLogicClock, pSyncNode->heartbeatTimerLogicClockUser); } else { @@ -2095,12 +2004,11 @@ static bool syncIsConfigChanged(const SSyncCfg* pOldCfg, const SSyncCfg* pNewCfg void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* pNewConfig, SyncIndex lastConfigChangeIndex) { SSyncCfg oldConfig = pSyncNode->pRaftCfg->cfg; -#if 1 if (!syncIsConfigChanged(&oldConfig, pNewConfig)) { sInfo("vgId:1, sync not reconfig since not changed"); return; } -#endif + pSyncNode->pRaftCfg->cfg = *pNewConfig; pSyncNode->pRaftCfg->lastConfigIndex = lastConfigChangeIndex; @@ -2311,17 +2219,6 @@ _END: return; } -SSyncNode* syncNodeAcquire(int64_t rid) { - SSyncNode* pNode = taosAcquireRef(tsNodeRefId, rid); - if (pNode == NULL) { - sTrace("failed to acquire node from refId:%" PRId64, rid); - } - - return pNode; -} - -void syncNodeRelease(SSyncNode* pNode) { taosReleaseRef(tsNodeRefId, pNode->rid); } - // raft state change -------------- void syncNodeUpdateTerm(SSyncNode* pSyncNode, SyncTerm term) { if (term > pSyncNode->pRaftStore->currentTerm) { @@ -2772,8 +2669,8 @@ static void syncNodeEqPingTimer(void* param, void* tmrId) { } syncTimeoutDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqPingTimer, pSyncNode->pingTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqPingTimer, pSyncNode->pingTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pPingTimer); } else { sError("sync env is stop, syncNodeEqPingTimer"); @@ -2793,7 +2690,7 @@ static void syncNodeEqElectTimer(void* param, void* tmrId) { pSyncNode->vgId, pSyncNode); SRpcMsg rpcMsg; syncTimeout2RpcMsg(pSyncMsg, &rpcMsg); - if (pSyncNode->FpEqMsg != NULL) { + if (pSyncNode->FpEqMsg != NULL && pSyncNode->msgcb != NULL && pSyncNode->msgcb->putToQueueFp != NULL) { int32_t code = pSyncNode->FpEqMsg(pSyncNode->msgcb, &rpcMsg); if (code != 0) { sError("vgId:%d, sync enqueue elect msg error, code:%d", pSyncNode->vgId, code); @@ -2818,9 +2715,9 @@ static void syncNodeEqElectTimer(void* param, void* tmrId) { #if 0 // reset timer ms - if (syncEnvIsStart() && pSyncNode->electBaseLine > 0) { + if (syncIsInit() && pSyncNode->electBaseLine > 0) { pSyncNode->electTimerMS = syncUtilElectRandomMS(pSyncNode->electBaseLine, 2 * pSyncNode->electBaseLine); - taosTmrReset(syncNodeEqElectTimer, pSyncNode->electTimerMS, pSyncNode, gSyncEnv->pTimerManager, + taosTmrReset(syncNodeEqElectTimer, pSyncNode->electTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pElectTimer); } else { sError("sync env is stop, syncNodeEqElectTimer"); @@ -2855,8 +2752,8 @@ static void syncNodeEqHeartbeatTimer(void* param, void* tmrId) { } syncTimeoutDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqHeartbeatTimer, pSyncNode->heartbeatTimerMS, pSyncNode, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqHeartbeatTimer, pSyncNode->heartbeatTimerMS, pSyncNode, syncEnv()->pTimerManager, &pSyncNode->pHeartbeatTimer); } else { sError("sync env is stop, syncNodeEqHeartbeatTimer"); @@ -2916,8 +2813,8 @@ static void syncNodeEqPeerHeartbeatTimer(void* param, void* tmrId) { syncHeartbeatDestroy(pSyncMsg); - if (syncEnvIsStart()) { - taosTmrReset(syncNodeEqPeerHeartbeatTimer, pSyncTimer->timerMS, pData, gSyncEnv->pTimerManager, + if (syncIsInit()) { + taosTmrReset(syncNodeEqPeerHeartbeatTimer, pSyncTimer->timerMS, pData, syncEnv()->pTimerManager, &pSyncTimer->pTimer); } else { sError("sync env is stop, syncNodeEqHeartbeatTimer"); @@ -3003,18 +2900,19 @@ static int32_t syncNodeAppendNoop(SSyncNode* ths) { } // on message ---- -int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg) { - // log state +int32_t syncNodeOnPing(SSyncNode* ths, SyncPing* pMsg) { + sTrace("vgId:%d, recv sync-ping", ths->vgId); + SyncPingReply* pMsgReply = syncPingReplyBuild3(&ths->myRaftId, &pMsg->srcId, ths->vgId); SRpcMsg rpcMsg; syncPingReply2RpcMsg(pMsgReply, &rpcMsg); /* - // htonl - SMsgHead* pHead = rpcMsg.pCont; - pHead->contLen = htonl(pHead->contLen); - pHead->vgId = htonl(pHead->vgId); -*/ + // htonl + SMsgHead* pHead = rpcMsg.pCont; + pHead->contLen = htonl(pHead->contLen); + pHead->vgId = htonl(pHead->vgId); + */ syncNodeSendMsgById(&pMsgReply->destId, ths, &rpcMsg); syncPingReplyDestroy(pMsgReply); @@ -3022,9 +2920,9 @@ int32_t syncNodeOnPingCb(SSyncNode* ths, SyncPing* pMsg) { return 0; } -int32_t syncNodeOnPingReplyCb(SSyncNode* ths, SyncPingReply* pMsg) { +int32_t syncNodeOnPingReply(SSyncNode* ths, SyncPingReply* pMsg) { int32_t ret = 0; - syncPingReplyLog2("==syncNodeOnPingReplyCb==", pMsg); + sTrace("vgId:%d, recv sync-ping-reply", ths->vgId); return ret; } @@ -3040,12 +2938,6 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) { SRpcMsg rpcMsg; syncHeartbeatReply2RpcMsg(pMsgReply, &rpcMsg); -#if 1 - if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) { - syncNodeStepDown(ths, pMsg->term); - } -#endif - if (pMsg->term == ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_LEADER) { syncNodeResetElectTimer(ths); ths->minMatchIndex = pMsg->minMatchIndex; @@ -3057,6 +2949,28 @@ int32_t syncNodeOnHeartbeat(SSyncNode* ths, SyncHeartbeat* pMsg) { #endif } + if (pMsg->term >= ths->pRaftStore->currentTerm && ths->state != TAOS_SYNC_STATE_FOLLOWER) { + // syncNodeStepDown(ths, pMsg->term); + SyncLocalCmd* pSyncMsg = syncLocalCmdBuild(ths->vgId); + pSyncMsg->cmd = SYNC_LOCAL_CMD_STEP_DOWN; + pSyncMsg->sdNewTerm = pMsg->term; + + SRpcMsg rpcMsgLocalCmd; + syncLocalCmd2RpcMsg(pSyncMsg, &rpcMsgLocalCmd); + + if (ths->FpEqMsg != NULL && ths->msgcb != NULL) { + int32_t code = ths->FpEqMsg(ths->msgcb, &rpcMsgLocalCmd); + if (code != 0) { + sError("vgId:%d, sync enqueue step-down msg error, code:%d", ths->vgId, code); + rpcFreeCont(rpcMsgLocalCmd.pCont); + } else { + sTrace("vgId:%d, sync enqueue step-down msg, new-term: %" PRIu64, ths->vgId, pSyncMsg->sdNewTerm); + } + } + + syncLocalCmdDestroy(pSyncMsg); + } + /* // htonl SMsgHead* pHead = rpcMsg.pCont; @@ -3080,6 +2994,19 @@ int32_t syncNodeOnHeartbeatReply(SSyncNode* ths, SyncHeartbeatReply* pMsg) { return 0; } +int32_t syncNodeOnLocalCmd(SSyncNode* ths, SyncLocalCmd* pMsg) { + syncLogRecvLocalCmd(ths, pMsg, ""); + + if (pMsg->cmd == SYNC_LOCAL_CMD_STEP_DOWN) { + syncNodeStepDown(ths, pMsg->sdNewTerm); + + } else { + syncNodeErrorLog(ths, "error local cmd"); + } + + return 0; +} + // TLA+ Spec // ClientRequest(i, v) == // /\ state[i] = Leader @@ -3375,8 +3302,13 @@ int32_t syncNodeDoCommit(SSyncNode* ths, SyncIndex beginIndex, SyncIndex endInde pEntry = (SSyncRaftEntry*)taosLRUCacheValue(pCache, h); } else { code = ths->pLogStore->syncLogGetEntry(ths->pLogStore, i, &pEntry); - ASSERT(code == 0); - ASSERT(pEntry != NULL); + // ASSERT(code == 0); + // ASSERT(pEntry != NULL); + if (code != 0 || pEntry == NULL) { + syncNodeErrorLog(ths, "get log entry error"); + sFatal("vgId:%d, get log entry %" PRId64 " error when commit since %s", ths->vgId, i, terrstr()); + continue; + } } SRpcMsg rpcMsg; @@ -3737,4 +3669,11 @@ void syncLogRecvHeartbeatReply(SSyncNode* pSyncNode, const SyncHeartbeatReply* p snprintf(logBuf, sizeof(logBuf), "recv sync-heartbeat-reply from %s:%d {term:%" PRIu64 ", pterm:%" PRIu64 "}, %s", host, port, pMsg->term, pMsg->privateTerm, s); syncNodeEventLog(pSyncNode, logBuf); +} + +void syncLogRecvLocalCmd(SSyncNode* pSyncNode, const SyncLocalCmd* pMsg, const char* s) { + char logBuf[256]; + snprintf(logBuf, sizeof(logBuf), "recv sync-local-cmd {cmd:%d-%s, sd-new-term:%" PRIu64 "}, %s", pMsg->cmd, + syncLocalCmdGetStr(pMsg->cmd), pMsg->sdNewTerm, s); + syncNodeEventLog(pSyncNode, logBuf); } \ No newline at end of file diff --git a/source/libs/sync/src/syncMessage.c b/source/libs/sync/src/syncMessage.c index 7a8ea0c4d7..f9609d9c39 100644 --- a/source/libs/sync/src/syncMessage.c +++ b/source/libs/sync/src/syncMessage.c @@ -3095,3 +3095,161 @@ void syncReconfigFinishLog2(char* s, const SyncReconfigFinish* pMsg) { taosMemoryFree(serialized); } } + +// --------------------------------------------- +const char* syncLocalCmdGetStr(int32_t cmd) { + if (cmd == SYNC_LOCAL_CMD_STEP_DOWN) { + return "step-down"; + } + + return "unknown-local-cmd"; +} + +SyncLocalCmd* syncLocalCmdBuild(int32_t vgId) { + uint32_t bytes = sizeof(SyncLocalCmd); + SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); + memset(pMsg, 0, bytes); + pMsg->bytes = bytes; + pMsg->vgId = vgId; + pMsg->msgType = TDMT_SYNC_LOCAL_CMD; + return pMsg; +} + +void syncLocalCmdDestroy(SyncLocalCmd* pMsg) { + if (pMsg != NULL) { + taosMemoryFree(pMsg); + } +} + +void syncLocalCmdSerialize(const SyncLocalCmd* pMsg, char* buf, uint32_t bufLen) { + ASSERT(pMsg->bytes <= bufLen); + memcpy(buf, pMsg, pMsg->bytes); +} + +void syncLocalCmdDeserialize(const char* buf, uint32_t len, SyncLocalCmd* pMsg) { + memcpy(pMsg, buf, len); + ASSERT(len == pMsg->bytes); +} + +char* syncLocalCmdSerialize2(const SyncLocalCmd* pMsg, uint32_t* len) { + char* buf = taosMemoryMalloc(pMsg->bytes); + ASSERT(buf != NULL); + syncLocalCmdSerialize(pMsg, buf, pMsg->bytes); + if (len != NULL) { + *len = pMsg->bytes; + } + return buf; +} + +SyncLocalCmd* syncLocalCmdDeserialize2(const char* buf, uint32_t len) { + uint32_t bytes = *((uint32_t*)buf); + SyncLocalCmd* pMsg = taosMemoryMalloc(bytes); + ASSERT(pMsg != NULL); + syncLocalCmdDeserialize(buf, len, pMsg); + ASSERT(len == pMsg->bytes); + return pMsg; +} + +void syncLocalCmd2RpcMsg(const SyncLocalCmd* pMsg, SRpcMsg* pRpcMsg) { + memset(pRpcMsg, 0, sizeof(*pRpcMsg)); + pRpcMsg->msgType = pMsg->msgType; + pRpcMsg->contLen = pMsg->bytes; + pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen); + syncLocalCmdSerialize(pMsg, pRpcMsg->pCont, pRpcMsg->contLen); +} + +void syncLocalCmdFromRpcMsg(const SRpcMsg* pRpcMsg, SyncLocalCmd* pMsg) { + syncLocalCmdDeserialize(pRpcMsg->pCont, pRpcMsg->contLen, pMsg); +} + +SyncLocalCmd* syncLocalCmdFromRpcMsg2(const SRpcMsg* pRpcMsg) { + SyncLocalCmd* pMsg = syncLocalCmdDeserialize2(pRpcMsg->pCont, pRpcMsg->contLen); + ASSERT(pMsg != NULL); + return pMsg; +} + +cJSON* syncLocalCmd2Json(const SyncLocalCmd* pMsg) { + char u64buf[128]; + cJSON* pRoot = cJSON_CreateObject(); + + if (pMsg != NULL) { + cJSON_AddNumberToObject(pRoot, "bytes", pMsg->bytes); + cJSON_AddNumberToObject(pRoot, "vgId", pMsg->vgId); + cJSON_AddNumberToObject(pRoot, "msgType", pMsg->msgType); + + cJSON* pSrcId = cJSON_CreateObject(); + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->srcId.addr); + cJSON_AddStringToObject(pSrcId, "addr", u64buf); + { + uint64_t u64 = pMsg->srcId.addr; + cJSON* pTmp = pSrcId; + char host[128]; + uint16_t port; + syncUtilU642Addr(u64, host, sizeof(host), &port); + cJSON_AddStringToObject(pTmp, "addr_host", host); + cJSON_AddNumberToObject(pTmp, "addr_port", port); + } + cJSON_AddNumberToObject(pSrcId, "vgId", pMsg->srcId.vgId); + cJSON_AddItemToObject(pRoot, "srcId", pSrcId); + + cJSON* pDestId = cJSON_CreateObject(); + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->destId.addr); + cJSON_AddStringToObject(pDestId, "addr", u64buf); + { + uint64_t u64 = pMsg->destId.addr; + cJSON* pTmp = pDestId; + char host[128]; + uint16_t port; + syncUtilU642Addr(u64, host, sizeof(host), &port); + cJSON_AddStringToObject(pTmp, "addr_host", host); + cJSON_AddNumberToObject(pTmp, "addr_port", port); + } + cJSON_AddNumberToObject(pDestId, "vgId", pMsg->destId.vgId); + cJSON_AddItemToObject(pRoot, "destId", pDestId); + + cJSON_AddNumberToObject(pRoot, "cmd", pMsg->cmd); + + snprintf(u64buf, sizeof(u64buf), "%" PRIu64, pMsg->sdNewTerm); + cJSON_AddStringToObject(pRoot, "sd-new-term", u64buf); + } + + cJSON* pJson = cJSON_CreateObject(); + cJSON_AddItemToObject(pJson, "SyncLocalCmd2Json", pRoot); + return pJson; +} + +char* syncLocalCmd2Str(const SyncLocalCmd* pMsg) { + cJSON* pJson = syncLocalCmd2Json(pMsg); + char* serialized = cJSON_Print(pJson); + cJSON_Delete(pJson); + return serialized; +} + +// for debug ---------------------- +void syncLocalCmdPrint(const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + printf("syncLocalCmdPrint | len:%d | %s \n", (int32_t)strlen(serialized), serialized); + fflush(NULL); + taosMemoryFree(serialized); +} + +void syncLocalCmdPrint2(char* s, const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + printf("syncLocalCmdPrint2 | len:%d | %s | %s \n", (int32_t)strlen(serialized), s, serialized); + fflush(NULL); + taosMemoryFree(serialized); +} + +void syncLocalCmdLog(const SyncLocalCmd* pMsg) { + char* serialized = syncLocalCmd2Str(pMsg); + sTrace("syncLocalCmdLog | len:%d | %s", (int32_t)strlen(serialized), serialized); + taosMemoryFree(serialized); +} + +void syncLocalCmdLog2(char* s, const SyncLocalCmd* pMsg) { + if (gRaftDetailLog) { + char* serialized = syncLocalCmd2Str(pMsg); + sTrace("syncLocalCmdLog2 | len:%d | %s | %s", (int32_t)strlen(serialized), s, serialized); + taosMemoryFree(serialized); + } +} \ No newline at end of file diff --git a/source/libs/sync/src/syncReplication.c b/source/libs/sync/src/syncReplication.c index 7296e30e02..af53123421 100644 --- a/source/libs/sync/src/syncReplication.c +++ b/source/libs/sync/src/syncReplication.c @@ -57,7 +57,7 @@ int32_t syncNodeReplicateOne(SSyncNode* pSyncNode, SRaftId* pDestId) { SyncIndex logEndIndex = pSyncNode->pLogStore->syncLogEndIndex(pSyncNode->pLogStore); if (nextIndex < logStartIndex || nextIndex - 1 > logEndIndex) { char logBuf[128]; - snprintf(logBuf, sizeof(logBuf), "start snapshot for next-index:%" PRId64 ", start:%" PRId64 ", end:%" PRId64, + snprintf(logBuf, sizeof(logBuf), "maybe start snapshot for next-index:%" PRId64 ", start:%" PRId64 ", end:%" PRId64, nextIndex, logStartIndex, logEndIndex); syncNodeEventLog(pSyncNode, logBuf); diff --git a/source/libs/sync/src/syncTimeout.c b/source/libs/sync/src/syncTimeout.c index 5ff73a6406..1c08217099 100644 --- a/source/libs/sync/src/syncTimeout.c +++ b/source/libs/sync/src/syncTimeout.c @@ -76,7 +76,7 @@ int32_t syncNodeTimerRoutine(SSyncNode* ths) { SSyncLogStoreData* pData = ths->pLogStore->data; int32_t code = walEndSnapshot(pData->pWal); if (code != 0) { - sError("vgId:%d, wal snapshot end error since:%s", ths->vgId, terrstr(terrno)); + sError("vgId:%d, timer wal snapshot end error since:%s", ths->vgId, terrstr()); return -1; } else { do { diff --git a/source/libs/sync/test/CMakeLists.txt b/source/libs/sync/test/CMakeLists.txt index b9cc7a391d..26dd32942b 100644 --- a/source/libs/sync/test/CMakeLists.txt +++ b/source/libs/sync/test/CMakeLists.txt @@ -59,6 +59,7 @@ add_executable(syncRestoreFromSnapshot "") add_executable(syncRaftCfgIndexTest "") add_executable(syncHeartbeatTest "") add_executable(syncHeartbeatReplyTest "") +add_executable(syncLocalCmdTest "") target_sources(syncTest @@ -305,6 +306,10 @@ target_sources(syncHeartbeatReplyTest PRIVATE "syncHeartbeatReplyTest.cpp" ) +target_sources(syncLocalCmdTest + PRIVATE + "syncLocalCmdTest.cpp" +) target_include_directories(syncTest @@ -612,6 +617,11 @@ target_include_directories(syncHeartbeatReplyTest "${TD_SOURCE_DIR}/include/libs/sync" "${CMAKE_CURRENT_SOURCE_DIR}/../inc" ) +target_include_directories(syncLocalCmdTest + PUBLIC + "${TD_SOURCE_DIR}/include/libs/sync" + "${CMAKE_CURRENT_SOURCE_DIR}/../inc" +) target_link_libraries(syncTest @@ -858,6 +868,10 @@ target_link_libraries(syncHeartbeatReplyTest sync gtest_main ) +target_link_libraries(syncLocalCmdTest + sync + gtest_main +) enable_testing() diff --git a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp index 95677e592b..8f16be27e7 100644 --- a/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp +++ b/source/libs/sync/test/syncConfigChangeSnapshotTest.cpp @@ -270,7 +270,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncConfigChangeTest.cpp b/source/libs/sync/test/syncConfigChangeTest.cpp index c04ab9b000..d1244546c9 100644 --- a/source/libs/sync/test/syncConfigChangeTest.cpp +++ b/source/libs/sync/test/syncConfigChangeTest.cpp @@ -191,7 +191,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncElectTest.cpp b/source/libs/sync/test/syncElectTest.cpp index 862f7bd0ba..d09879a699 100644 --- a/source/libs/sync/test/syncElectTest.cpp +++ b/source/libs/sync/test/syncElectTest.cpp @@ -98,7 +98,7 @@ int main(int argc, char** argv) { init(); int32_t ret = syncIOStart((char*)"127.0.0.1", gPorts[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); char walPath[128]; diff --git a/source/libs/sync/test/syncEncodeTest.cpp b/source/libs/sync/test/syncEncodeTest.cpp index 8b209c4c9e..fdb5cf7ac8 100644 --- a/source/libs/sync/test/syncEncodeTest.cpp +++ b/source/libs/sync/test/syncEncodeTest.cpp @@ -152,7 +152,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); taosRemoveDir("./wal_test"); @@ -186,7 +186,7 @@ int main(int argc, char **argv) { int32_t code = pSyncNode->pLogStore->syncLogGetEntry(pSyncNode->pLogStore, pEntry->index, &pEntry); ASSERT(code == 0); - syncEntryLog2((char *)"==pEntry2==", pEntry2); + syncEntryLog2((char *)"==pEntry==", pEntry); // step5 uint32_t len; diff --git a/source/libs/sync/test/syncEnqTest.cpp b/source/libs/sync/test/syncEnqTest.cpp index 8461bfe9b7..191e245b1e 100644 --- a/source/libs/sync/test/syncEnqTest.cpp +++ b/source/libs/sync/test/syncEnqTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncEnvTest.cpp b/source/libs/sync/test/syncEnvTest.cpp index a7a819e046..404ab32d58 100644 --- a/source/libs/sync/test/syncEnvTest.cpp +++ b/source/libs/sync/test/syncEnvTest.cpp @@ -22,7 +22,7 @@ int main() { logTest(); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); for (int i = 0; i < 5; ++i) { @@ -37,8 +37,6 @@ int main() { taosMsleep(5000); } - ret = syncEnvStop(); - assert(ret == 0); - + syncCleanUp(); return 0; } diff --git a/source/libs/sync/test/syncIOSendMsgTest.cpp b/source/libs/sync/test/syncIOSendMsgTest.cpp index 630d96054b..4a457136c2 100644 --- a/source/libs/sync/test/syncIOSendMsgTest.cpp +++ b/source/libs/sync/test/syncIOSendMsgTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncIndexTest.cpp b/source/libs/sync/test/syncIndexTest.cpp index 93cd5f79f0..763117c0c9 100644 --- a/source/libs/sync/test/syncIndexTest.cpp +++ b/source/libs/sync/test/syncIndexTest.cpp @@ -13,7 +13,7 @@ void print(SHashObj *pNextIndex) { SRaftId *pRaftId = (SRaftId *)key; - printf("key:<" PRIu64 ", %d>, value:%" PRIu64 " \n", pRaftId->addr, pRaftId->vgId, *p); + printf("key:<%" PRIu64 ", %d>, value:%" PRIu64 " \n", pRaftId->addr, pRaftId->vgId, *p); p = (uint64_t *)taosHashIterate(pNextIndex, p); } } diff --git a/source/libs/sync/test/syncInitTest.cpp b/source/libs/sync/test/syncInitTest.cpp index d0843151f4..d654ad06fe 100644 --- a/source/libs/sync/test/syncInitTest.cpp +++ b/source/libs/sync/test/syncInitTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); @@ -91,7 +91,7 @@ int main(int argc, char** argv) { initRaftId(pSyncNode); syncNodeClose(pSyncNode); - syncEnvStop(); + syncCleanUp(); // syncIOStop(); // taosCloseLog(); diff --git a/source/libs/sync/test/syncLocalCmdTest.cpp b/source/libs/sync/test/syncLocalCmdTest.cpp new file mode 100644 index 0000000000..de908bf9c1 --- /dev/null +++ b/source/libs/sync/test/syncLocalCmdTest.cpp @@ -0,0 +1,100 @@ +#include +#include +#include "syncIO.h" +#include "syncInt.h" +#include "syncMessage.h" +#include "syncUtil.h" + +void logTest() { + sTrace("--- sync log test: trace"); + sDebug("--- sync log test: debug"); + sInfo("--- sync log test: info"); + sWarn("--- sync log test: warn"); + sError("--- sync log test: error"); + sFatal("--- sync log test: fatal"); +} + +SyncLocalCmd *createMsg() { + SyncLocalCmd *pMsg = syncLocalCmdBuild(1000); + pMsg->srcId.addr = syncUtilAddr2U64("127.0.0.1", 1234); + pMsg->srcId.vgId = 100; + pMsg->destId.addr = syncUtilAddr2U64("127.0.0.1", 5678); + pMsg->destId.vgId = 100; + pMsg->sdNewTerm = 123; + pMsg->cmd = SYNC_LOCAL_CMD_STEP_DOWN; + + return pMsg; +} + +void test1() { + SyncLocalCmd *pMsg = createMsg(); + syncLocalCmdLog2((char *)"test1:", pMsg); + syncLocalCmdDestroy(pMsg); +} + +void test2() { + SyncLocalCmd *pMsg = createMsg(); + uint32_t len = pMsg->bytes; + char *serialized = (char *)taosMemoryMalloc(len); + syncLocalCmdSerialize(pMsg, serialized, len); + SyncLocalCmd *pMsg2 = syncLocalCmdBuild(1000); + syncLocalCmdDeserialize(serialized, len, pMsg2); + syncLocalCmdLog2((char *)"test2: syncLocalCmdSerialize -> syncLocalCmdDeserialize ", pMsg2); + + taosMemoryFree(serialized); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); +} + +void test3() { + SyncLocalCmd *pMsg = createMsg(); + uint32_t len; + char *serialized = syncLocalCmdSerialize2(pMsg, &len); + SyncLocalCmd *pMsg2 = syncLocalCmdDeserialize2(serialized, len); + syncLocalCmdLog2((char *)"test3: syncLocalCmdSerialize3 -> syncLocalCmdDeserialize2 ", pMsg2); + + taosMemoryFree(serialized); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); +} + +void test4() { + SyncLocalCmd *pMsg = createMsg(); + SRpcMsg rpcMsg; + syncLocalCmd2RpcMsg(pMsg, &rpcMsg); + SyncLocalCmd *pMsg2 = (SyncLocalCmd *)taosMemoryMalloc(rpcMsg.contLen); + syncLocalCmdFromRpcMsg(&rpcMsg, pMsg2); + syncLocalCmdLog2((char *)"test4: syncLocalCmd2RpcMsg -> syncLocalCmdFromRpcMsg ", pMsg2); + + rpcFreeCont(rpcMsg.pCont); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); +} + +void test5() { + SyncLocalCmd *pMsg = createMsg(); + SRpcMsg rpcMsg; + syncLocalCmd2RpcMsg(pMsg, &rpcMsg); + SyncLocalCmd *pMsg2 = syncLocalCmdFromRpcMsg2(&rpcMsg); + syncLocalCmdLog2((char *)"test5: syncLocalCmd2RpcMsg -> syncLocalCmdFromRpcMsg2 ", pMsg2); + + rpcFreeCont(rpcMsg.pCont); + syncLocalCmdDestroy(pMsg); + syncLocalCmdDestroy(pMsg2); +} + +int main() { + gRaftDetailLog = true; + + tsAsyncLog = 0; + sDebugFlag = DEBUG_TRACE + DEBUG_SCREEN + DEBUG_FILE; + logTest(); + + test1(); + test2(); + test3(); + test4(); + test5(); + + return 0; +} diff --git a/source/libs/sync/test/syncPingSelfTest.cpp b/source/libs/sync/test/syncPingSelfTest.cpp index 99287bf7b0..f44cbb04d5 100644 --- a/source/libs/sync/test/syncPingSelfTest.cpp +++ b/source/libs/sync/test/syncPingSelfTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncPingTimerTest.cpp b/source/libs/sync/test/syncPingTimerTest.cpp index cd9440e3e2..fd6342aa84 100644 --- a/source/libs/sync/test/syncPingTimerTest.cpp +++ b/source/libs/sync/test/syncPingTimerTest.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncPingTimerTest2.cpp b/source/libs/sync/test/syncPingTimerTest2.cpp index fa09d04368..295003dff3 100644 --- a/source/libs/sync/test/syncPingTimerTest2.cpp +++ b/source/libs/sync/test/syncPingTimerTest2.cpp @@ -81,7 +81,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncRaftIdCheck.cpp b/source/libs/sync/test/syncRaftIdCheck.cpp index 65da0f6631..e7ef69da20 100644 --- a/source/libs/sync/test/syncRaftIdCheck.cpp +++ b/source/libs/sync/test/syncRaftIdCheck.cpp @@ -15,7 +15,7 @@ int main(int argc, char** argv) { char host[128]; uint16_t port; syncUtilU642Addr(u64, host, sizeof(host), &port); - printf("" PRIu64 " -> %s:%d \n", u64, host, port); + printf("%" PRIu64 " -> %s:%d \n", u64, host, port); } else if (argc == 3) { uint64_t u64; diff --git a/source/libs/sync/test/syncRaftLogTest3.cpp b/source/libs/sync/test/syncRaftLogTest3.cpp index fd4cade31c..1171ef8785 100644 --- a/source/libs/sync/test/syncRaftLogTest3.cpp +++ b/source/libs/sync/test/syncRaftLogTest3.cpp @@ -97,8 +97,8 @@ void test1() { sTrace("lastIndex: %" PRId64, lastIndex); sTrace("lastTerm: %" PRIu64, lastTerm); sTrace("syncStartIndex: %" PRId64, syncStartIndex); - sTrace("" PRId64 "'s preIndex: %" PRId64, testIndex, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, testIndex, preTerm); + sTrace("testIndex: %" PRId64 " preIndex: %" PRId64, testIndex, preIndex); + sTrace("testIndex: %" PRId64 " preTerm: %" PRIu64, testIndex, preTerm); if (gAssert) { assert(lastIndex == -1); @@ -170,8 +170,8 @@ void test2() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); if (gAssert) { SyncIndex preIndexArr[12] = {-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; @@ -292,8 +292,8 @@ void test4() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); } logStoreDestory(pLogStore); @@ -354,8 +354,8 @@ void test5() { SyncIndex preIndex = syncNodeGetPreIndex(pSyncNode, i); SyncTerm preTerm = syncNodeGetPreTerm(pSyncNode, i); - sTrace("" PRId64 "'s preIndex: %" PRId64, i, preIndex); - sTrace("" PRId64 "'s preTerm: %" PRIu64, i, preTerm); + sTrace("i: %" PRId64 " preIndex: %" PRId64, i, preIndex); + sTrace("i: %" PRId64 " preTerm: %" PRIu64, i, preTerm); if (gAssert) { SyncIndex preIndexArr[12] = {9999, 9999, 9999, 9999, 9999, 9999, 5, 6, 7, 8, 9, 10}; diff --git a/source/libs/sync/test/syncReplicateTest.cpp b/source/libs/sync/test/syncReplicateTest.cpp index d3ba4bc136..adb3deb22d 100644 --- a/source/libs/sync/test/syncReplicateTest.cpp +++ b/source/libs/sync/test/syncReplicateTest.cpp @@ -145,7 +145,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = 9999; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncRespMgrTest.cpp b/source/libs/sync/test/syncRespMgrTest.cpp index 35daff796f..cad6eec91d 100644 --- a/source/libs/sync/test/syncRespMgrTest.cpp +++ b/source/libs/sync/test/syncRespMgrTest.cpp @@ -58,18 +58,18 @@ void syncRespMgrGetTest(uint64_t i) { if (ret == 1) { printStub(&stub); } else if (ret == 0) { - printf("" PRId64 " notFound \n", i); + printf("%" PRId64 " notFound \n", i); } } void syncRespMgrGetAndDelTest(uint64_t i) { - printf("------syncRespMgrGetAndDelTest-------" PRIu64 "-- \n", i); + printf("------syncRespMgrGetAndDelTest-------%" PRIu64 "-- \n", i); SRespStub stub; int32_t ret = syncRespMgrGetAndDel(pMgr, i, &stub); if (ret == 1) { printStub(&stub); } else if (ret == 0) { - printf("" PRId64 " notFound \n", i); + printf("%" PRId64 " notFound \n", i); } } diff --git a/source/libs/sync/test/syncSnapshotTest.cpp b/source/libs/sync/test/syncSnapshotTest.cpp index 3dc8518072..50771ac476 100644 --- a/source/libs/sync/test/syncSnapshotTest.cpp +++ b/source/libs/sync/test/syncSnapshotTest.cpp @@ -179,7 +179,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); // taosRemoveDir(pWalDir); diff --git a/source/libs/sync/test/syncTestTool.cpp b/source/libs/sync/test/syncTestTool.cpp index 1cdecfe5b3..bdb4d7d2d8 100644 --- a/source/libs/sync/test/syncTestTool.cpp +++ b/source/libs/sync/test/syncTestTool.cpp @@ -154,7 +154,7 @@ int32_t SnapshotDoWrite(struct SSyncFSM* pFsm, void* pWriter, void* pBuf, int32_ void RestoreFinishCb(struct SSyncFSM* pFsm) { sTrace("==callback== ==RestoreFinishCb== pFsm:%p", pFsm); } void ReConfigCb(struct SSyncFSM* pFsm, const SRpcMsg* pMsg, SReConfigCbMeta* cbMeta) { - char* s = syncCfg2Str(&(cbMeta.newCfg)); + char* s = syncCfg2Str(&(cbMeta->newCfg)); sTrace("==callback== ==ReConfigCb== flag:0x%lX, index:%" PRId64 ", code:%d, currentTerm:%" PRIu64 ", term:%" PRIu64 ", newCfg:%s", cbMeta->flag, cbMeta->index, cbMeta->code, cbMeta->currentTerm, cbMeta->term, s); @@ -308,7 +308,7 @@ SRpcMsg* createRpcMsg(int i, int count, int myIndex) { pMsg->msgType = TDMT_VND_SUBMIT; pMsg->contLen = 256; pMsg->pCont = rpcMallocCont(pMsg->contLen); - snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-" PRId64, myIndex, i, count, + snprintf((char*)(pMsg->pCont), pMsg->contLen, "value-myIndex:%u-%d-%d-%" PRId64, myIndex, i, count, taosGetTimestampMs()); return pMsg; } diff --git a/source/libs/sync/test/syncVotesGrantedTest.cpp b/source/libs/sync/test/syncVotesGrantedTest.cpp index d4885d0316..e2e8748697 100644 --- a/source/libs/sync/test/syncVotesGrantedTest.cpp +++ b/source/libs/sync/test/syncVotesGrantedTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncVotesRespondTest.cpp b/source/libs/sync/test/syncVotesRespondTest.cpp index 77262dfc65..881a5331b1 100644 --- a/source/libs/sync/test/syncVotesRespondTest.cpp +++ b/source/libs/sync/test/syncVotesRespondTest.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) { int32_t ret = syncIOStart((char*)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); SSyncNode* pSyncNode = syncInitTest(); diff --git a/source/libs/sync/test/syncWriteTest.cpp b/source/libs/sync/test/syncWriteTest.cpp index b185f52f75..fee98ddd52 100644 --- a/source/libs/sync/test/syncWriteTest.cpp +++ b/source/libs/sync/test/syncWriteTest.cpp @@ -154,7 +154,7 @@ int main(int argc, char **argv) { int32_t ret = syncIOStart((char *)"127.0.0.1", ports[myIndex]); assert(ret == 0); - ret = syncEnvStart(); + ret = syncInit(); assert(ret == 0); taosRemoveDir("./wal_test"); diff --git a/source/libs/tfs/test/tfsTest.cpp b/source/libs/tfs/test/tfsTest.cpp index f4b0adf1f7..df37630fd7 100644 --- a/source/libs/tfs/test/tfsTest.cpp +++ b/source/libs/tfs/test/tfsTest.cpp @@ -42,7 +42,7 @@ TEST_F(TfsTest, 01_Open_Close) { STfs *pTfs = tfsOpen(&dCfg, 1); ASSERT_EQ(pTfs, nullptr); - taosMkDir(root); + taosMulMkDir(root); pTfs = tfsOpen(&dCfg, 1); ASSERT_NE(pTfs, nullptr); diff --git a/source/libs/transport/inc/transComm.h b/source/libs/transport/inc/transComm.h index b83f84e3f2..2354f0f959 100644 --- a/source/libs/transport/inc/transComm.h +++ b/source/libs/transport/inc/transComm.h @@ -428,6 +428,7 @@ void transDestoryExHandle(void* handle); int32_t transGetRefMgt(); int32_t transGetInstMgt(); +void transHttpEnvDestroy(); #ifdef __cplusplus } #endif diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c index 92989a45f5..00854b5ee5 100644 --- a/source/libs/transport/src/thttp.c +++ b/source/libs/transport/src/thttp.c @@ -20,21 +20,52 @@ #include "thttp.h" #include "taoserror.h" #include "tlog.h" +#include "transComm.h" // clang-format on #define HTTP_RECV_BUF_SIZE 1024 +typedef struct SHttpModule { + uv_loop_t* loop; + SAsyncPool* asyncPool; + TdThread thread; +} SHttpModule; + +typedef struct SHttpMsg { + queue q; + char* server; + int32_t port; + char* cont; + int32_t len; + EHttpCompFlag flag; + int8_t quit; + SHttpModule* http; + +} SHttpMsg; + typedef struct SHttpClient { - uv_connect_t conn; - uv_tcp_t tcp; - uv_write_t req; - uv_buf_t* wbuf; - char* rbuf; - char* addr; - uint16_t port; + uv_connect_t conn; + uv_tcp_t tcp; + uv_write_t req; + uv_buf_t* wbuf; + char* rbuf; + char* addr; + uint16_t port; + struct sockaddr_in dest; } SHttpClient; +static TdThreadOnce transHttpInit = PTHREAD_ONCE_INIT; +static SHttpModule* thttp = NULL; +static void transHttpEnvInit(); + +static void httpHandleReq(SHttpMsg* msg); +static void httpHandleQuit(SHttpMsg* msg); +static int32_t httpSendQuit(); + +static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, + EHttpCompFlag flag); + static int32_t taosBuildHttpHeader(const char* server, int32_t contLen, char* pHead, int32_t headLen, EHttpCompFlag flag) { if (flag == HTTP_FLAT) { @@ -53,6 +84,7 @@ static int32_t taosBuildHttpHeader(const char* server, int32_t contLen, char* pH "Content-Length: %d\n\n", server, contLen); } else { + terrno = TSDB_CODE_INVALID_CFG; return -1; } } @@ -126,88 +158,10 @@ _OVER: return code; } -static FORCE_INLINE void destroyHttpClient(SHttpClient* cli) { - taosMemoryFree(cli->wbuf); - taosMemoryFree(cli->rbuf); - taosMemoryFree(cli->addr); - taosMemoryFree(cli); -} -static FORCE_INLINE void clientCloseCb(uv_handle_t* handle) { - SHttpClient* cli = handle->data; - destroyHttpClient(cli); -} -static FORCE_INLINE void clientAllocBuffCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { - SHttpClient* cli = handle->data; - buf->base = cli->rbuf; - buf->len = HTTP_RECV_BUF_SIZE; -} -static FORCE_INLINE void clientRecvCb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { - SHttpClient* cli = handle->data; - if (nread < 0) { - uError("http-report recv error:%s", uv_err_name(nread)); - } else { - uTrace("http-report succ to recv %d bytes", (int32_t)nread); - } - if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { - uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); - } -} -static void clientSentCb(uv_write_t* req, int32_t status) { - SHttpClient* cli = req->data; - if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); - uError("http-report failed to send data %s", uv_strerror(status)); - if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { - uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); - } - return; - } else { - uTrace("http-report succ to send data"); - } - status = uv_read_start((uv_stream_t*)&cli->tcp, clientAllocBuffCb, clientRecvCb); - if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); - uError("http-report failed to recv data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); - if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { - uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); - } - } -} -static void clientConnCb(uv_connect_t* req, int32_t status) { - SHttpClient* cli = req->data; - if (status != 0) { - terrno = TAOS_SYSTEM_ERROR(status); - uError("http-report failed to conn to server, reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); - if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { - uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); - } - return; - } - status = uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->wbuf, 2, clientSentCb); - if (0 != status) { - terrno = TAOS_SYSTEM_ERROR(status); - uError("http-report failed to send data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); - if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { - uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); - } else { - destroyHttpClient(cli); - } - } -} - static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, struct sockaddr_in* dest) { uint32_t ip = taosGetIpv4FromFqdn(server); if (ip == 0xffffffff) { - terrno = TAOS_SYSTEM_ERROR(errno); - uError("http-report failed to get http server:%s since %s", server, errno == 0 ? "invalid http server" : terrstr()); + tError("http-report failed to get http server:%s since %s", server, errno == 0 ? "invalid http server" : terrstr()); return -1; } char buf[128] = {0}; @@ -215,27 +169,206 @@ static FORCE_INLINE int32_t taosBuildDstAddr(const char* server, uint16_t port, uv_ip4_addr(buf, port, dest); return 0; } -int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { - struct sockaddr_in dest = {0}; - if (taosBuildDstAddr(server, port, &dest) < 0) { - return -1; - } - if (flag == HTTP_GZIP) { - int32_t dstLen = taosCompressHttpRport(pCont, contLen); - if (dstLen > 0) { - contLen = dstLen; + +static void* httpThread(void* arg) { + SHttpModule* http = (SHttpModule*)arg; + setThreadName("http-cli-send-thread"); + uv_run(http->loop, UV_RUN_DEFAULT); + return NULL; +} + +static void httpDestroyMsg(SHttpMsg* msg) { + if (msg == NULL) return; + + taosMemoryFree(msg->server); + taosMemoryFree(msg->cont); + taosMemoryFree(msg); +} +static void httpAsyncCb(uv_async_t* handle) { + SAsyncItem* item = handle->data; + SHttpModule* http = item->pThrd; + + SHttpMsg *msg = NULL, *quitMsg = NULL; + + queue wq; + taosThreadMutexLock(&item->mtx); + QUEUE_MOVE(&item->qmsg, &wq); + taosThreadMutexUnlock(&item->mtx); + + int count = 0; + while (!QUEUE_IS_EMPTY(&wq)) { + queue* h = QUEUE_HEAD(&wq); + QUEUE_REMOVE(h); + msg = QUEUE_DATA(h, SHttpMsg, q); + if (msg->quit) { + quitMsg = msg; } else { - flag = HTTP_FLAT; + httpHandleReq(msg); } } - terrno = 0; + if (quitMsg) httpHandleQuit(quitMsg); +} - char header[2048] = {0}; - int32_t headLen = taosBuildHttpHeader(server, contLen, header, sizeof(header), flag); +static FORCE_INLINE void destroyHttpClient(SHttpClient* cli) { + taosMemoryFree(cli->wbuf[0].base); + taosMemoryFree(cli->wbuf[1].base); + taosMemoryFree(cli->wbuf); + taosMemoryFree(cli->rbuf); + taosMemoryFree(cli->addr); + taosMemoryFree(cli); +} + +static FORCE_INLINE void clientCloseCb(uv_handle_t* handle) { + SHttpClient* cli = handle->data; + destroyHttpClient(cli); +} + +static FORCE_INLINE void clientAllocBuffCb(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { + SHttpClient* cli = handle->data; + buf->base = cli->rbuf; + buf->len = HTTP_RECV_BUF_SIZE; +} + +static FORCE_INLINE void clientRecvCb(uv_stream_t* handle, ssize_t nread, const uv_buf_t* buf) { + SHttpClient* cli = handle->data; + if (nread < 0) { + tError("http-report recv error:%s", uv_err_name(nread)); + } else { + tTrace("http-report succ to recv %d bytes", (int32_t)nread); + } + if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { + uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); + } +} +static void clientSentCb(uv_write_t* req, int32_t status) { + SHttpClient* cli = req->data; + if (status != 0) { + tError("http-report failed to send data, reason: %s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { + uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); + } + return; + } else { + tTrace("http-report succ to send data"); + } + status = uv_read_start((uv_stream_t*)&cli->tcp, clientAllocBuffCb, clientRecvCb); + if (status != 0) { + tError("http-report failed to recv data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { + uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); + } + } +} +static void clientConnCb(uv_connect_t* req, int32_t status) { + SHttpClient* cli = req->data; + if (status != 0) { + tError("http-report failed to conn to server, reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { + uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); + } + return; + } + status = uv_write(&cli->req, (uv_stream_t*)&cli->tcp, cli->wbuf, 2, clientSentCb); + if (0 != status) { + tError("http-report failed to send data,reason:%s, dst:%s:%d", uv_strerror(status), cli->addr, cli->port); + if (!uv_is_closing((uv_handle_t*)&cli->tcp)) { + uv_close((uv_handle_t*)&cli->tcp, clientCloseCb); + } + } +} + +int32_t httpSendQuit() { + SHttpMsg* msg = taosMemoryCalloc(1, sizeof(SHttpMsg)); + msg->quit = 1; + + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + httpDestroyMsg(msg); + tError("http-report already released"); + return -1; + } else { + msg->http = load; + } + transAsyncSend(load->asyncPool, &(msg->q)); + return 0; +} + +static int32_t taosSendHttpReportImpl(const char* server, uint16_t port, char* pCont, int32_t contLen, + EHttpCompFlag flag) { + SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg)); + msg->server = strdup(server); + msg->port = port; + msg->cont = taosMemoryMalloc(contLen); + memcpy(msg->cont, pCont, contLen); + msg->len = contLen; + msg->flag = flag; + msg->quit = 0; + + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + httpDestroyMsg(msg); + tError("http-report already released"); + return -1; + } else { + msg->http = load; + transAsyncSend(load->asyncPool, &(msg->q)); + } + + return 0; +} + +static void httpDestroyClientCb(uv_handle_t* handle) { + SHttpClient* http = handle->data; + destroyHttpClient(http); +} +static void httpWalkCb(uv_handle_t* handle, void* arg) { + // impl later + if (!uv_is_closing(handle)) { + uv_handle_type type = uv_handle_get_type(handle); + if (uv_handle_get_type(handle) == UV_TCP) { + uv_close(handle, httpDestroyClientCb); + } else { + uv_close(handle, NULL); + } + } + return; +} +static void httpHandleQuit(SHttpMsg* msg) { + SHttpModule* http = msg->http; + taosMemoryFree(msg); + + uv_walk(http->loop, httpWalkCb, NULL); +} +static void httpHandleReq(SHttpMsg* msg) { + SHttpModule* http = msg->http; + + struct sockaddr_in dest = {0}; + if (taosBuildDstAddr(msg->server, msg->port, &dest) < 0) { + goto END; + } + if (msg->flag == HTTP_GZIP) { + int32_t dstLen = taosCompressHttpRport(msg->cont, msg->len); + if (dstLen > 0) { + msg->len = dstLen; + } else { + msg->flag = HTTP_FLAT; + } + if (dstLen < 0) { + goto END; + } + } + + int32_t len = 2048; + char* header = taosMemoryCalloc(1, len); + int32_t headLen = taosBuildHttpHeader(msg->server, msg->len, header, len, msg->flag); + if (headLen < 0) { + taosMemoryFree(header); + goto END; + } uv_buf_t* wb = taosMemoryCalloc(2, sizeof(uv_buf_t)); - wb[0] = uv_buf_init((char*)header, headLen); // stack var - wb[1] = uv_buf_init((char*)pCont, contLen); // heap var + wb[0] = uv_buf_init((char*)header, strlen(header)); // heap var + wb[1] = uv_buf_init((char*)msg->cont, msg->len); // heap var SHttpClient* cli = taosMemoryCalloc(1, sizeof(SHttpClient)); cli->conn.data = cli; @@ -243,41 +376,71 @@ int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32 cli->req.data = cli; cli->wbuf = wb; cli->rbuf = taosMemoryCalloc(1, HTTP_RECV_BUF_SIZE); - cli->addr = tstrdup(server); - cli->port = port; + cli->addr = msg->server; + cli->port = msg->port; + cli->dest = dest; + + taosMemoryFree(msg); + + uv_tcp_init(http->loop, &cli->tcp); - uv_loop_t* loop = taosMemoryMalloc(sizeof(uv_loop_t)); - int err = uv_loop_init(loop); - if (err != 0) { - uError("http-report failed to init uv_loop, reason: %s", uv_strerror(err)); - taosMemoryFree(loop); - terrno = TAOS_SYSTEM_ERROR(err); - destroyHttpClient(cli); - return terrno; - } - uv_tcp_init(loop, &cli->tcp); // set up timeout to avoid stuck; int32_t fd = taosCreateSocketWithTimeout(5); - - int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); + int ret = uv_tcp_open((uv_tcp_t*)&cli->tcp, fd); if (ret != 0) { - uError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); + tError("http-report failed to open socket, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, cli->port); destroyHttpClient(cli); - uv_stop(loop); - terrno = TAOS_SYSTEM_ERROR(ret); - } else { - ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&dest, clientConnCb); - if (ret != 0) { - uError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, - cli->port); - destroyHttpClient(cli); - uv_stop(loop); - terrno = TAOS_SYSTEM_ERROR(ret); - } + return; } - uv_run(loop, UV_RUN_DEFAULT); - uv_loop_close(loop); - taosMemoryFree(loop); - return terrno; + ret = uv_tcp_connect(&cli->conn, &cli->tcp, (const struct sockaddr*)&cli->dest, clientConnCb); + if (ret != 0) { + tError("http-report failed to connect to http-server, reason:%s, dst:%s:%d", uv_strerror(ret), cli->addr, + cli->port); + destroyHttpClient(cli); + } + return; + +END: + tError("http-report failed to report, reason: %s, addr: %s:%d", terrstr(), msg->server, msg->port); + httpDestroyMsg(msg); +} + +int32_t taosSendHttpReport(const char* server, uint16_t port, char* pCont, int32_t contLen, EHttpCompFlag flag) { + taosThreadOnce(&transHttpInit, transHttpEnvInit); + return taosSendHttpReportImpl(server, port, pCont, contLen, flag); +} + +static void transHttpEnvInit() { + SHttpModule* http = taosMemoryMalloc(sizeof(SHttpModule)); + + http->loop = taosMemoryMalloc(sizeof(uv_loop_t)); + uv_loop_init(http->loop); + + http->asyncPool = transAsyncPoolCreate(http->loop, 1, http, httpAsyncCb); + + int err = taosThreadCreate(&http->thread, NULL, httpThread, (void*)http); + if (err != 0) { + taosMemoryFree(http->loop); + taosMemoryFree(http); + http = NULL; + } + atomic_store_ptr(&thttp, http); +} + +void transHttpEnvDestroy() { + SHttpModule* load = atomic_load_ptr(&thttp); + if (load == NULL) { + return; + } + httpSendQuit(); + taosThreadJoin(load->thread, NULL); + + TRANS_DESTROY_ASYNC_POOL_MSG(load->asyncPool, SHttpMsg, httpDestroyMsg); + transAsyncPoolDestroy(load->asyncPool); + uv_loop_close(load->loop); + taosMemoryFree(load->loop); + taosMemoryFree(load); + + atomic_store_ptr(&thttp, NULL); } diff --git a/source/libs/transport/src/trans.c b/source/libs/transport/src/trans.c index 756a8ff2cf..d3db4879d1 100644 --- a/source/libs/transport/src/trans.c +++ b/source/libs/transport/src/trans.c @@ -172,6 +172,8 @@ int32_t rpcInit() { } void rpcCleanup(void) { transCleanup(); + transHttpEnvDestroy(); + return; } diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c index 28660934f8..97915e1ded 100644 --- a/source/libs/transport/src/transCli.c +++ b/source/libs/transport/src/transCli.c @@ -187,18 +187,8 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { snprintf(key, sizeof(key), "%s:%d", ip, (int)port); \ } while (0) -#define CONN_HOST_THREAD_IDX1(idx, exh, refId, pThrd) \ - do { \ - if (exh == NULL) { \ - idx = -1; \ - } else { \ - ASYNC_CHECK_HANDLE((exh), refId); \ - pThrd = (SCliThrd*)(exh)->pThrd; \ - } \ - } while (0) -#define CONN_PERSIST_TIME(para) ((para) <= 90000 ? 90000 : (para)) -#define CONN_GET_HOST_THREAD(conn) (conn ? ((SCliConn*)conn)->hostThrd : NULL) -#define CONN_GET_INST_LABEL(conn) (((STrans*)(((SCliThrd*)(conn)->hostThrd)->pTransInst))->label) +#define CONN_PERSIST_TIME(para) ((para) <= 90000 ? 90000 : (para)) +#define CONN_GET_INST_LABEL(conn) (((STrans*)(((SCliThrd*)(conn)->hostThrd)->pTransInst))->label) #define CONN_GET_MSGCTX_BY_AHANDLE(conn, ahandle) \ do { \ @@ -217,6 +207,7 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { tDebug("msg found, %" PRIu64 "", ahandle); \ } \ } while (0) + #define CONN_GET_NEXT_SENDMSG(conn) \ do { \ int i = 0; \ @@ -231,21 +222,6 @@ static void cliReleaseUnfinishedMsg(SCliConn* conn) { } \ } while (0) -#define CONN_HANDLE_THREAD_QUIT(thrd) \ - do { \ - if (thrd->quit) { \ - return; \ - } \ - } while (0) - -#define CONN_HANDLE_BROKEN(conn) \ - do { \ - if (conn->broken) { \ - cliHandleExcept(conn); \ - return; \ - } \ - } while (0) - #define CONN_SET_PERSIST_BY_APP(conn) \ do { \ if (conn->status == ConnNormal) { \ diff --git a/source/libs/transport/src/transSvr.c b/source/libs/transport/src/transSvr.c index 6819068b64..b829251ccd 100644 --- a/source/libs/transport/src/transSvr.c +++ b/source/libs/transport/src/transSvr.c @@ -655,7 +655,7 @@ void uvOnAcceptCb(uv_stream_t* stream, int status) { uv_tcp_init(pObj->loop, cli); if (uv_accept(stream, (uv_stream_t*)cli) == 0) { -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) if (pObj->numOfWorkerReady < pObj->numOfThreads) { tError("worker-threads are not ready for all, need %d instead of %d.", pObj->numOfThreads, pObj->numOfWorkerReady); @@ -779,7 +779,7 @@ static bool addHandleToWorkloop(SWorkThrd* pThrd, char* pipeName) { return false; } -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) uv_pipe_init(pThrd->loop, pThrd->pipe, 1); #else uv_pipe_init(pThrd->loop, pThrd->pipe, 1); @@ -799,7 +799,7 @@ static bool addHandleToWorkloop(SWorkThrd* pThrd, char* pipeName) { QUEUE_INIT(&pThrd->conn); pThrd->asyncPool = transAsyncPoolCreate(pThrd->loop, 5, pThrd, uvWorkerAsyncCb); -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) uv_pipe_connect(&pThrd->connect_req, pThrd->pipe, pipeName, uvOnPipeConnectionCb); #else uv_read_start((uv_stream_t*)pThrd->pipe, uvAllocConnBufferCb, uvOnConnectionCb); @@ -976,17 +976,18 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, uv_loop_init(srv->loop); char pipeName[PATH_MAX]; -#ifdef WINDOWS +#if defined(WINDOWS) || defined(DARWIN) int ret = uv_pipe_init(srv->loop, &srv->pipeListen, 0); if (ret != 0) { tError("failed to init pipe, errmsg: %s", uv_err_name(ret)); goto End; } - +#if defined(WINDOWS) snprintf(pipeName, sizeof(pipeName), "\\\\?\\pipe\\trans.rpc.%d-%" PRIu64, taosSafeRand(), GetCurrentProcessId()); - // char pipeName[PATH_MAX] = {0}; - // snprintf(pipeName, sizeof(pipeName), "%s%spipe.trans.rpc.%08d-%" PRIu64, tsTempDir, TD_DIRSEP, taosSafeRand(), - // taosGetSelfPthreadId()); +#elif defined(DARWIN) + snprintf(pipeName, sizeof(pipeName), "%s%spipe.trans.rpc.%08d-%" PRIu64, tsTempDir, TD_DIRSEP, taosSafeRand(), + taosGetSelfPthreadId()); +#endif ret = uv_pipe_bind(&srv->pipeListen, pipeName); if (ret != 0) { @@ -1036,7 +1037,7 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, srv->pThreadObj[i] = thrd; uv_os_sock_t fds[2]; - if (uv_socketpair(AF_UNIX, SOCK_STREAM, fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE) != 0) { + if (uv_socketpair(SOCK_STREAM, 0, fds, UV_NONBLOCK_PIPE, UV_NONBLOCK_PIPE) != 0) { goto End; } @@ -1059,8 +1060,8 @@ void* transInitServer(uint32_t ip, uint32_t port, char* label, int numOfThreads, goto End; } } - #endif + if (false == taosValidIpAndPort(srv->ip, srv->port)) { terrno = TAOS_SYSTEM_ERROR(errno); tError("invalid ip/port, %d:%d, reason:%s", srv->ip, srv->port, terrstr()); diff --git a/source/os/src/osMemory.c b/source/os/src/osMemory.c index 75a963d5c7..78fa362179 100644 --- a/source/os/src/osMemory.c +++ b/source/os/src/osMemory.c @@ -336,3 +336,12 @@ int64_t taosMemorySize(void *ptr) { #endif #endif } + +void taosMemoryTrim(int32_t size) { +#if defined(WINDOWS) || defined(DARWIN) + // do nothing + return; +#else + malloc_trim(size); +#endif +} diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c index 0bf9e7cc33..712ff8feba 100644 --- a/source/util/src/tconfig.c +++ b/source/util/src/tconfig.c @@ -915,7 +915,7 @@ int32_t cfgLoadFromApollUrl(SConfig *pConfig, const char *url) { int32_t olen, vlen, vlen2, vlen3; int32_t code = 0; if (url == NULL || strlen(url) == 0) { - uInfo("fail to load apoll url"); + uInfo("apoll url not load"); return 0; } diff --git a/source/util/src/tref.c b/source/util/src/tref.c index c984ef3f34..aa741b909a 100644 --- a/source/util/src/tref.c +++ b/source/util/src/tref.c @@ -57,7 +57,7 @@ static void taosIncRsetCount(SRefSet *pSet); static void taosDecRsetCount(SRefSet *pSet); static int32_t taosDecRefCount(int32_t rsetId, int64_t rid, int32_t remove); -int32_t taosOpenRef(int32_t max, void (*fp)(void *)) { +int32_t taosOpenRef(int32_t max, RefFp fp) { SRefNode **nodeList; SRefSet *pSet; int64_t *lockedBy; 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 8509136a34..23b6341e66 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 @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py b/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py index 1d21c517e6..4473ff2c2d 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/commandline.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py b/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py index 9104d63096..4f8e94a887 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/custom_col_tag.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py index c68375894c..95afdc413e 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/default_json.py @@ -23,7 +23,7 @@ class TDTestCase: [TD-11510] taosBenchmark test cases """ - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/demo.py b/tests/develop-test/5-taos-tools/taosbenchmark/demo.py index a44ad4c1d0..90d0ffd8b1 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/demo.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/demo.py @@ -27,7 +27,7 @@ class TDTestCase: """ return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) 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 38332f7b64..7437b46353 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 @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py b/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py index ebddff5643..a706967bc1 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/invalid_commandline.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py b/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py index 5f25e0229b..3b9123974f 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/json_tag.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py index 47a60e4757..dbddb840ca 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/limit_offset_json.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) 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 84d9433967..7f0b082e33 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/query_json.py @@ -29,7 +29,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py index 772bb11df4..5b59d84b79 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sample_csv_json.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py index fec9376529..ee7bb8a925 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_interlace.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py index 557d2a4884..d7ccdc2716 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_json_alltypes.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py b/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py index 8ff56b5339..7b0f5d1672 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/sml_telnet_alltypes.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py b/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py index 3f0a05b665..1588b4077c 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/taosadapter_json.py @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py index 7aa0575f77..b8d4c35e58 100644 --- a/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py +++ b/tests/develop-test/5-taos-tools/taosbenchmark/telnet_tcp.py @@ -25,7 +25,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py index 33ba4034ec..09976953e1 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestInspect.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py index 75885edf9f..7eaddd9e2d 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBigInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py index 41d4ba128d..c70748e9c2 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBinary.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py index 043fb49af3..eb4b8a364a 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeBool.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py index 1eaa2bbfff..70501965fe 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeDouble.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py index 4373aa5669..5e551a373c 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeFloat.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py index 45009a716a..f2d4c4f814 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py index d1c4313c40..5971902cb6 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeJson.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py index 941de25683..f2dca23488 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeSmallInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py index e5392d38fe..6f2781d645 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeTinyInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py index dd8dd5d76d..b226204654 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedBigInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py index eacd1bb7dd..766110d74e 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py index ea362ad2b4..242681b0fc 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedSmallInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py index a3ffc13d62..d512cba97c 100644 --- a/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py +++ b/tests/develop-test/5-taos-tools/taosdump/taosdumpTestTypeUnsignedTinyInt.py @@ -27,7 +27,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVarl=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.tmpdir = "tmp" diff --git a/tests/develop-test/test.py b/tests/develop-test/test.py index 5dc6139410..b25bda4a3b 100644 --- a/tests/develop-test/test.py +++ b/tests/develop-test/test.py @@ -72,8 +72,9 @@ if __name__ == "__main__": queryPolicy = 1 createDnodeNums = 1 restful = False - opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:', [ - 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate']) + replicaVar = 1 + opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:n:', [ + 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate','replicaVar']) for key, value in opts: if key in ['-h', '--help']: tdLog.printNoPrefix( @@ -95,8 +96,7 @@ if __name__ == "__main__": tdLog.printNoPrefix('-C create Dnode Numbers in one cluster') tdLog.printNoPrefix('-R restful realization form') tdLog.printNoPrefix('-D taosadapter update cfg dict ') - - + tdLog.printNoPrefix('-n the number of replicas') sys.exit(0) if key in ['-r', '--restart']: @@ -168,6 +168,9 @@ if __name__ == "__main__": print('adapter cfg update convert fail.') sys.exit(0) + if key in ['-n', '--replicaVar']: + replicaVar = value + if not execCmd == "": if restful: tAdapter.init(deployPath) @@ -194,7 +197,7 @@ if __name__ == "__main__": processID = subprocess.check_output(psCmd, shell=True) for port in range(6030, 6041): - usePortPID = "lsof -i tcp:%d | grep LISTEn | awk '{print $2}'" % port + usePortPID = "lsof -i tcp:%d | grep LISTEN | awk '{print $2}'" % port processID = subprocess.check_output(usePortPID, shell=True) if processID: @@ -206,11 +209,13 @@ if __name__ == "__main__": time.sleep(2) if restful: - toBeKilled = "taosadapter" + toBeKilled = "taosadapt" - killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled + # killCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}' | xargs kill -TERM > /dev/null 2>&1" % toBeKilled + killCmd = f"pkill {toBeKilled}" psCmd = "ps -ef|grep -w %s| grep -v grep | awk '{print $2}'" % toBeKilled + # psCmd = f"pgrep {toBeKilled}" processID = subprocess.check_output(psCmd, shell=True) while(processID): @@ -218,15 +223,15 @@ if __name__ == "__main__": time.sleep(1) processID = subprocess.check_output(psCmd, shell=True) - for port in range(6030, 6041): - usePortPID = "lsof -i tcp:%d | grep LISTEn | awk '{print $2}'" % port - processID = subprocess.check_output(usePortPID, shell=True) + port = 6041 + usePortPID = f"lsof -i tcp:{port} | grep LISTEN | awk '{{print $2}}'" + processID = subprocess.check_output(usePortPID, shell=True) - if processID: - killCmd = "kill -TERM %s" % processID - os.system(killCmd) - fuserCmd = "fuser -k -n tcp %d" % port - os.system(fuserCmd) + if processID: + killCmd = f"kill -TERM {processID}" + os.system(killCmd) + fuserCmd = f"fuser -k -n tcp {port}" + os.system(fuserCmd) tdLog.info('stop taosadapter') @@ -319,7 +324,7 @@ if __name__ == "__main__": for dnode in tdDnodes.dnodes: tdDnodes.starttaosd(dnode.index) tdCases.logSql(logSql) - + if restful: tAdapter.deploy(adapter_cfg_dict) tAdapter.start() @@ -339,6 +344,26 @@ if __name__ == "__main__": print("check dnode ready") except Exception as r: print(r) + if queryPolicy != 1: + queryPolicy=int(queryPolicy) + if restful: + conn = taosrest.connect(url=f"http://{host}:6041") + else: + conn = taos.connect(host,config=tdDnodes.getSimCfgPath()) + + cursor = conn.cursor() + cursor.execute("create qnode on dnode 1") + cursor.execute(f'alter local "queryPolicy" "{queryPolicy}"') + cursor.execute("show local variables") + res = cursor.fetchall() + for i in range(cursor.rowcount): + if res[i][0] == "queryPolicy" : + if int(res[i][1]) == int(queryPolicy): + tdLog.success(f'alter queryPolicy to {queryPolicy} successfully') + else: + tdLog.debug(res) + tdLog.exit(f"alter queryPolicy to {queryPolicy} failed") + if ucase is not None and hasattr(ucase, 'noConn') and ucase.noConn == True: conn = None else: @@ -453,6 +478,26 @@ if __name__ == "__main__": except Exception as r: print(r) + if queryPolicy != 1: + queryPolicy=int(queryPolicy) + if restful: + conn = taosrest.connect(url=f"http://{host}:6041") + else: + conn = taos.connect(host,config=tdDnodes.getSimCfgPath()) + + cursor = conn.cursor() + cursor.execute("create qnode on dnode 1") + cursor.execute(f'alter local "queryPolicy" "{queryPolicy}"') + cursor.execute("show local variables") + res = cursor.fetchall() + for i in range(cursor.rowcount): + if res[i][0] == "queryPolicy" : + if int(res[i][1]) == int(queryPolicy): + tdLog.success(f'alter queryPolicy to {queryPolicy} successfully') + else: + tdLog.debug(res) + tdLog.exit(f"alter queryPolicy to {queryPolicy} failed") + if testCluster: tdLog.info("Procedures for testing cluster") @@ -470,7 +515,7 @@ if __name__ == "__main__": if fileName == "all": tdCases.runAllLinux(conn) else: - tdCases.runOneLinux(conn, fileName) + tdCases.runOneLinux(conn, fileName, replicaVar) if restart: if fileName == "all": @@ -487,7 +532,7 @@ if __name__ == "__main__": conn = taosrest.connect(url=f"http://{host}:6041") tdLog.info("Procedures for tdengine deployed in %s" % (host)) tdLog.info("query test after taosd restart") - tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py") + tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py", replicaVar) else: tdLog.info("not need to query") diff --git a/tests/pytest/util/cases.py b/tests/pytest/util/cases.py index 2bfd8efdcd..3eb5cf2548 100644 --- a/tests/pytest/util/cases.py +++ b/tests/pytest/util/cases.py @@ -63,14 +63,14 @@ class TDCases: tdLog.info("total %d Linux test case(s) executed" % (runNum)) - def runOneLinux(self, conn, fileName): + def runOneLinux(self, conn, fileName, replicaVar): testModule = self.__dynamicLoadModule(fileName) runNum = 0 for tmp in self.linuxCases: if tmp.name.find(fileName) != -1: case = testModule.TDTestCase() - case.init(conn, self._logSql) + case.init(conn, self._logSql, replicaVar) try: case.run() except Exception as e: diff --git a/tests/script/jenkins/basic.txt b/tests/script/jenkins/basic.txt index 93a54b6c7d..1a80aa0681 100644 --- a/tests/script/jenkins/basic.txt +++ b/tests/script/jenkins/basic.txt @@ -48,6 +48,7 @@ ./test.sh -f tsim/dnode/drop_dnode_has_vnode_replica3.sim ./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica1.sim ./test.sh -f tsim/dnode/drop_dnode_has_multi_vnode_replica3.sim +./test.sh -f tsim/dnode/drop_dnode_force.sim ./test.sh -f tsim/dnode/offline_reason.sim ./test.sh -f tsim/dnode/redistribute_vgroup_replica1.sim ./test.sh -f tsim/dnode/redistribute_vgroup_replica3_v1_leader.sim diff --git a/tests/script/tsim/dnode/drop_dnode_force.sim b/tests/script/tsim/dnode/drop_dnode_force.sim new file mode 100644 index 0000000000..10edacf3aa --- /dev/null +++ b/tests/script/tsim/dnode/drop_dnode_force.sim @@ -0,0 +1,301 @@ +system sh/stop_dnodes.sh +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/cfg.sh -n dnode1 -c supportVnodes -v 0 +system sh/exec.sh -n dnode1 -s start +system sh/exec.sh -n dnode2 -s start +system sh/exec.sh -n dnode3 -s start +system sh/exec.sh -n dnode4 -s start +sql connect + +print =============== step1 create dnode2 dnode3 dnode4 dnode 5 +sql create dnode $hostname port 7200 +sql create dnode $hostname port 7300 +sql create dnode $hostname port 7400 +sql create dnode $hostname port 7500 + +$x = 0 +step1: + $ = $x + 1 + sleep 1000 + if $x == 10 then + print ====> dnode not online! + return -1 + endi +sql select * from information_schema.ins_dnodes +print ===> $data00 $data01 $data02 $data03 $data04 $data05 +print ===> $data10 $data11 $data12 $data13 $data14 $data15 +if $rows != 5 then + return -1 +endi +if $data(1)[4] != ready then + goto step1 +endi +if $data(2)[4] != ready then + goto step1 +endi +if $data(3)[4] != ready then + goto step1 +endi +if $data(4)[4] != ready then + goto step1 +endi +if $data(5)[4] != offline then + goto step1 +endi + +print =============== step2 create database +sql create database d1 vgroups 1 replica 3 +sql use d1 +sql create table d1.st0 (ts timestamp, i int) tags (j int) +sql create table d1.c0 using st0 tags(0) +sql create table d1.c1 using st0 tags(1) +sql create table d1.c2 using st0 tags(2) +sql create table d1.c3 using st0 tags(3) +sql create table d1.c4 using st0 tags(4) +sql create table d1.c5 using st0 tags(5) +sql create table d1.c6 using st0 tags(6) +sql create table d1.c7 using st0 tags(7) +sql create table d1.c8 using st0 tags(8) +sql create table d1.c9 using st0 tags(9) +sql show d1.tables +if $rows != 10 then + return -1 +endi +print d1.rows ===> $rows +sql select * from information_schema.ins_tables where stable_name = 'st0' and db_name = 'd1' +if $rows != 10 then + return -1 +endi + +sql create database d2 vgroups 3 replica 1 +sql use d2 +sql create table d2.st1 (ts timestamp, i int) tags (j int) +sql create table d2.c10 using st1 tags(0) +sql create table d2.c11 using st1 tags(1) +sql create table d2.c12 using st1 tags(2) +sql create table d2.c13 using st1 tags(3) +sql create table d2.c14 using st1 tags(4) +sql create table d2.c15 using st1 tags(5) +sql create table d2.c16 using st1 tags(6) +sql create table d2.c17 using st1 tags(7) +sql create table d2.c18 using st1 tags(8) +sql create table d2.c19 using st1 tags(9) +sql create table d2.c190 using st1 tags(9) +sql show d2.tables +if $rows != 11 then + return -1 +endi +sql reset query cache +sql select * from information_schema.ins_tables where stable_name = 'st1' and db_name = 'd2' +print d2.st1.tables ===> $rows +if $rows != 11 then + return -1 +endi + +sql create table d2.st2 (ts timestamp, i int) tags (j int) +sql create table d2.c20 using st2 tags(0) +sql create table d2.c21 using st2 tags(1) +sql create table d2.c22 using st2 tags(2) +sql create table d2.c23 using st2 tags(3) +sql create table d2.c24 using st2 tags(4) +sql create table d2.c25 using st2 tags(5) +sql create table d2.c26 using st2 tags(6) +sql create table d2.c27 using st2 tags(7) +sql create table d2.c28 using st2 tags(8) +sql create table d2.c29 using st2 tags(9) +sql create table d2.c290 using st2 tags(9) +sql create table d2.c291 using st2 tags(9) +sql show d2.tables +if $rows != 23 then + return -1 +endi +sql reset query cache +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ===> $rows +if $rows != 12 then + return -1 +endi + +print =============== step3: create qnode snode on dnode 2 +sql create qnode on dnode 2 +sql create snode on dnode 2 +sql select * from information_schema.ins_qnodes +if $rows != 1 then + return -1 +endi +sql show snodes +if $rows != 1 then + return -1 +endi + +print =============== step4: create mnode on dnode 2 +sql create mnode on dnode 3 +sql create mnode on dnode 2 +$x = 0 +step4: + $x = $x + 1 + sleep 1000 + if $x == 10 then + return -1 + endi +sql select * from information_schema.ins_mnodes -x step4 +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +print $data[2][0] $data[2][1] $data[2][2] $data[2][3] $data[1][4] +#if $data(1)[2] != leader then +# goto step4 +#endi +if $data(2)[2] != follower then + goto step4 +endi +#if $data(3)[2] != follower then +# goto step4 +#endi + +print =============== step5: create dnode 5 +system sh/exec.sh -n dnode2 -s stop -x SIGINT +system sh/exec.sh -n dnode5 -s start +$x = 0 +step5: + $ = $x + 1 + sleep 1000 + if $x == 10 then + print ====> dnode not online! + return -1 + endi +sql select * from information_schema.ins_dnodes +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 $data34 $data35 +print ===> $data40 $data41 $data42 $data43 $data44 $data45 +if $rows != 5 then + return -1 +endi +if $data(1)[4] != ready then + goto step5 +endi +if $data(2)[4] != offline then + goto step5 +endi +if $data(3)[4] != ready then + goto step5 +endi +if $data(4)[4] != ready then + goto step5 +endi +if $data(5)[4] != ready then + goto step5 +endi + +print =============== step5: drop dnode 2 +sql_error drop dnode 2 +sql drop dnode 2 force + +print select * from information_schema.ins_dnodes; +sql select * from information_schema.ins_dnodes; +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +if $rows != 4 then + return -1 +endi + +print select * from information_schema.ins_mnodes; +sql select * from information_schema.ins_mnodes +print $data[0][0] $data[0][1] $data[0][2] $data[0][3] $data[0][4] +print $data[1][0] $data[1][1] $data[1][2] $data[1][3] $data[1][4] +if $rows != 2 then + return -1 +endi +if $data(1)[2] != leader then + return -1 +endi + +sql select * from information_schema.ins_qnodes +if $rows != 0 then + return -1 +endi +sql show snodes +if $rows != 0 then + return -1 +endi + +print =============== step6: check d1 +sql reset query cache +sql show d1.tables +if $rows != 10 then + return -1 +endi + +print =============== step7: check d2 +sql show d2.tables +print ===> d2.tables: $rows remained +if $rows > 23 then + return -1 +endi +if $rows <= 0 then + return -1 +endi + +print =============== step8: drop stable and recreate it +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ==> $rows + +sql drop table d2.st2; +sql create table d2.st2 (ts timestamp, i int) tags (j int) +sql create table d2.c20 using st2 tags(0) +sql create table d2.c21 using st2 tags(1) +sql create table d2.c22 using st2 tags(2) +sql create table d2.c23 using st2 tags(3) +sql create table d2.c24 using st2 tags(4) +sql create table d2.c25 using st2 tags(5) +sql create table d2.c26 using st2 tags(6) +sql create table d2.c27 using st2 tags(7) +sql create table d2.c28 using st2 tags(8) +sql create table d2.c29 using st2 tags(9) +sql create table d2.c30 using st2 tags(9) +sql create table d2.c31 using st2 tags(9) +sql create table d2.c32 using st2 tags(9) + +sql select * from information_schema.ins_tables where stable_name = 'st2' and db_name = 'd2' +print d2.st2.tables ==> $rows +if $rows != 13 then + return -1 +endi + +print =============== step9: alter stable +return +print By modifying the stable, the missing stable information can be reconstructed in the vnode. +print However, currently, getting the stable meta from the vnode, and return the table not exist +print To handle this, we need to modify the way stable-meta is fetched + +sql select * from information_schema.ins_tables where stable_name = 'st1' and db_name = 'd2' +print d2.st1.tables ==> $rows +$remains = $rows + +sql alter table d2.st1 add column b smallint +return +sql create table d2.c30 using st tags(0) +sql create table d2.c31 using st tags(1) +sql create table d2.c32 using st tags(2) +sql create table d2.c33 using st tags(3) +sql create table d2.c34 using st tags(4) +sql create table d2.c35 using st tags(5) +sql create table d2.c36 using st tags(6) +sql create table d2.c37 using st tags(7) +sql create table d2.c38 using st tags(8) +sql create table d2.c39 using st tags(9) +sql show d2.tables +print d2.st1.tables ==> $rows + +$total = $remains + 10 +if $rows != $total then + return -1 +endi + +system sh/exec.sh -n dnode1 -s stop -x SIGINT +system sh/exec.sh -n dnode2 -s stop -x SIGINT diff --git a/tests/script/tsim/parser/function.sim b/tests/script/tsim/parser/function.sim index 0002a5d095..e3ef94e1cc 100644 --- a/tests/script/tsim/parser/function.sim +++ b/tests/script/tsim/parser/function.sim @@ -995,3 +995,22 @@ endi if $data00 != 0.000000000 then return -1 endi + +sql create table ft1(ts timestamp, a int, b int , c int, d double); + +sql insert into ft1 values(1648791213000,1,2,3,1.0); +sql_error select sum(_wduration), a from ft1 state_window(a); + +sql_error select count(_wduration), a from ft1 state_window(a); + +sql_error select max(_wduration), a from ft1 state_window(a); + +sql_error select sum(1 + _wduration), a from ft1 state_window(a); + +sql_error select sum(cast(_wstart as bigint)), a from ft1 state_window(a); + +sql_error select sum(cast(_wend as bigint)), a from ft1 state_window(a); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(_wduration) from ft1 interval(10s); + +sql_error create stream streams1 trigger at_once into streamt as select _wstart, sum(cast(_wend as bigint)) from ft1 interval(10s); \ No newline at end of file diff --git a/tests/script/tsim/stream/scalar.sim b/tests/script/tsim/stream/scalar.sim new file mode 100644 index 0000000000..e211357276 --- /dev/null +++ b/tests/script/tsim/stream/scalar.sim @@ -0,0 +1,94 @@ +$loop_all = 0 +looptest: + +system sh/stop_dnodes.sh +system sh/deploy.sh -n dnode1 -i 1 +system sh/exec.sh -n dnode1 -s start +sleep 50 +sql connect + +sql drop database if exists test; +sql create database test vgroups 1; +sql use test; +sql create stable st(ts timestamp,a int,b int,c int, d double) tags(ta int,tb int,tc int); +sql create table t1 using st tags(1,1,1); +sql create table t2 using st tags(2,2,2); +sql create stream streams0 into streamt0 as select ts c1, a, abs(b) c4 from t1 partition by a; +sql create stream streams1 into streamt1 as select ts c1, a, abs(b) c4 from t1; +sql create stream streams2 into streamt2 as select ts c1, a, abs(b) c4 from st partition by tbname; + +sql insert into t1 values(1648791213000,1,1,1,1); +sql insert into t1 values(1648791213001,1,1,1,1); +sql insert into t1 values(1648791213002,1,1,1,1); + +sql insert into t2 values(1648791213000,1,2,2,2); +sql insert into t2 values(1648791213001,1,1,1,1); +sql insert into t2 values(1648791213002,1,1,1,1); + +sql insert into t1 values(1648791213001,2,11,11,11); + + +$loop_count = 0 +loop1: + +sleep 200 + +sql select * from streamt0 order by a desc; + +$loop_count = $loop_count + 1 + +if $loop_count == 10 then + return -1 +endi + +if $rows != 3 then + print ======streamt0=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt0=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt0=data02=$data02 + goto loop1 +endi + + +sql select * from streamt1 order by a desc; + +if $rows != 3 then + print ======streamt1=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt1=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt1=data02=$data02 + goto loop1 +endi + +sql select * from streamt2 order by a desc; + +if $rows != 6 then + print ======streamt2=rows=$rows + goto loop1 +endi + +if $data01 != 2 then + print ======streamt2=data01=$data01 + goto loop1 +endi + +if $data02 != 11 then + print ======streamt2=data02=$data02 + goto loop1 +endi + +system sh/stop_dnodes.sh \ No newline at end of file diff --git a/tests/system-test/0-others/cachemodel.py b/tests/system-test/0-others/cachemodel.py index 42c52a2f3c..53834f792d 100644 --- a/tests/system-test/0-others/cachemodel.py +++ b/tests/system-test/0-others/cachemodel.py @@ -14,7 +14,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), True) diff --git a/tests/system-test/0-others/compatibility.py b/tests/system-test/0-others/compatibility.py index e81579a9e4..88fbcd179d 100644 --- a/tests/system-test/0-others/compatibility.py +++ b/tests/system-test/0-others/compatibility.py @@ -22,7 +22,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index 6eefc3db24..fe470c442e 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/show.py b/tests/system-test/0-others/show.py index c25d1d1f33..6ce8872cda 100644 --- a/tests/system-test/0-others/show.py +++ b/tests/system-test/0-others/show.py @@ -20,7 +20,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/0-others/sysinfo.py b/tests/system-test/0-others/sysinfo.py index a4716dd544..b9ea39fc84 100644 --- a/tests/system-test/0-others/sysinfo.py +++ b/tests/system-test/0-others/sysinfo.py @@ -20,7 +20,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db' diff --git a/tests/system-test/0-others/taosShell.py b/tests/system-test/0-others/taosShell.py index 879d78e7ac..accb49dbfb 100644 --- a/tests/system-test/0-others/taosShell.py +++ b/tests/system-test/0-others/taosShell.py @@ -108,7 +108,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosShellError.py b/tests/system-test/0-others/taosShellError.py index 0dca5ff40f..e8271387a8 100644 --- a/tests/system-test/0-others/taosShellError.py +++ b/tests/system-test/0-others/taosShellError.py @@ -110,7 +110,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosShellNetChk.py b/tests/system-test/0-others/taosShellNetChk.py index 80f6a6bc30..72c06f71be 100644 --- a/tests/system-test/0-others/taosShellNetChk.py +++ b/tests/system-test/0-others/taosShellNetChk.py @@ -110,7 +110,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdMonitor.py b/tests/system-test/0-others/taosdMonitor.py index 96e057c9f8..a9907419e4 100644 --- a/tests/system-test/0-others/taosdMonitor.py +++ b/tests/system-test/0-others/taosdMonitor.py @@ -284,7 +284,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdShell.py b/tests/system-test/0-others/taosdShell.py index c992834918..83b4956c9b 100644 --- a/tests/system-test/0-others/taosdShell.py +++ b/tests/system-test/0-others/taosdShell.py @@ -44,7 +44,7 @@ class TDTestCase: # print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/taosdlog.py b/tests/system-test/0-others/taosdlog.py index bd3d6b9b4c..ba265abc2d 100644 --- a/tests/system-test/0-others/taosdlog.py +++ b/tests/system-test/0-others/taosdlog.py @@ -10,7 +10,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/telemetry.py b/tests/system-test/0-others/telemetry.py index 812b8b40c5..021b9aed2c 100644 --- a/tests/system-test/0-others/telemetry.py +++ b/tests/system-test/0-others/telemetry.py @@ -173,7 +173,7 @@ class TDTestCase: print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/0-others/udfTest.py b/tests/system-test/0-others/udfTest.py index c4c40348b8..a58e22ba1c 100644 --- a/tests/system-test/0-others/udfTest.py +++ b/tests/system-test/0-others/udfTest.py @@ -13,7 +13,7 @@ import subprocess class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_cfg1.py b/tests/system-test/0-others/udf_cfg1.py index e6ab57b488..9b1874d576 100644 --- a/tests/system-test/0-others/udf_cfg1.py +++ b/tests/system-test/0-others/udf_cfg1.py @@ -15,7 +15,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143, "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "fnDebugFlag": 143 ,"udf":0} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_cfg2.py b/tests/system-test/0-others/udf_cfg2.py index 3f8ba37491..67848a9430 100644 --- a/tests/system-test/0-others/udf_cfg2.py +++ b/tests/system-test/0-others/udf_cfg2.py @@ -15,7 +15,7 @@ class TDTestCase: updatecfgDict = {'debugFlag': 143, "cDebugFlag": 143, "uDebugFlag": 143, "rpcDebugFlag": 143, "tmrDebugFlag": 143, "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "fnDebugFlag": 143 ,"udf":1} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_cluster.py b/tests/system-test/0-others/udf_cluster.py index 1ca1738332..a20bc128a2 100644 --- a/tests/system-test/0-others/udf_cluster.py +++ b/tests/system-test/0-others/udf_cluster.py @@ -19,7 +19,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.depoly_cluster(3) diff --git a/tests/system-test/0-others/udf_create.py b/tests/system-test/0-others/udf_create.py index 788202eb1b..736943cc56 100644 --- a/tests/system-test/0-others/udf_create.py +++ b/tests/system-test/0-others/udf_create.py @@ -15,7 +15,7 @@ import threading class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/udf_restart_taosd.py b/tests/system-test/0-others/udf_restart_taosd.py index b860a0dfab..02c59c21e1 100644 --- a/tests/system-test/0-others/udf_restart_taosd.py +++ b/tests/system-test/0-others/udf_restart_taosd.py @@ -12,7 +12,7 @@ import subprocess class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index a20b7b17bc..c6a1a7eac2 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -154,7 +154,7 @@ class User: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/1-insert/alter_database.py b/tests/system-test/1-insert/alter_database.py index d3a55ee0a6..6d9e04ec42 100644 --- a/tests/system-test/1-insert/alter_database.py +++ b/tests/system-test/1-insert/alter_database.py @@ -11,7 +11,7 @@ from util.cases import * from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.buffer_boundary = [3,4097,8193,12289,16384] diff --git a/tests/system-test/1-insert/alter_stable.py b/tests/system-test/1-insert/alter_stable.py index b66cbb89c0..77ff6ae0f8 100644 --- a/tests/system-test/1-insert/alter_stable.py +++ b/tests/system-test/1-insert/alter_stable.py @@ -20,7 +20,7 @@ from util.sqlset import * from util import constant from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/alter_table.py b/tests/system-test/1-insert/alter_table.py index 5fbfff9909..aed4089cfa 100644 --- a/tests/system-test/1-insert/alter_table.py +++ b/tests/system-test/1-insert/alter_table.py @@ -21,7 +21,7 @@ from util.common import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/block_wise.py b/tests/system-test/1-insert/block_wise.py index b5ee2706dd..bb35154746 100644 --- a/tests/system-test/1-insert/block_wise.py +++ b/tests/system-test/1-insert/block_wise.py @@ -142,7 +142,7 @@ class BSMAschema: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.precision = "ms" diff --git a/tests/system-test/1-insert/create_retentions.py b/tests/system-test/1-insert/create_retentions.py index 54abcec391..d16e506b53 100644 --- a/tests/system-test/1-insert/create_retentions.py +++ b/tests/system-test/1-insert/create_retentions.py @@ -44,9 +44,9 @@ NTBNAME = "nt1" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") - tdSql.init(conn.cursor(), False) + tdSql.init(conn.cursor(), True) @property def create_databases_sql_err(self): diff --git a/tests/system-test/1-insert/database_pre_suf.py b/tests/system-test/1-insert/database_pre_suf.py index 770819a317..c921619e56 100755 --- a/tests/system-test/1-insert/database_pre_suf.py +++ b/tests/system-test/1-insert/database_pre_suf.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/1-insert/db_tb_name_check.py b/tests/system-test/1-insert/db_tb_name_check.py index 5017fde68a..fd0bd43b01 100644 --- a/tests/system-test/1-insert/db_tb_name_check.py +++ b/tests/system-test/1-insert/db_tb_name_check.py @@ -31,7 +31,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.special_name = ['!','@','#','$','%','^','&','*','(',')','[',']','{','}',\ diff --git a/tests/system-test/1-insert/delete_data.py b/tests/system-test/1-insert/delete_data.py index f620a4b18a..d935a08133 100644 --- a/tests/system-test/1-insert/delete_data.py +++ b/tests/system-test/1-insert/delete_data.py @@ -23,7 +23,7 @@ from util.common import * from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/1-insert/influxdb_line_taosc_insert.py b/tests/system-test/1-insert/influxdb_line_taosc_insert.py index cae4294bc9..82db318c2b 100644 --- a/tests/system-test/1-insert/influxdb_line_taosc_insert.py +++ b/tests/system-test/1-insert/influxdb_line_taosc_insert.py @@ -29,7 +29,7 @@ if platform.system().lower() == 'windows': sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) self._conn = conn diff --git a/tests/system-test/1-insert/insertWithMoreVgroup.py b/tests/system-test/1-insert/insertWithMoreVgroup.py index b80a5f9a4a..9d033ff6e5 100644 --- a/tests/system-test/1-insert/insertWithMoreVgroup.py +++ b/tests/system-test/1-insert/insertWithMoreVgroup.py @@ -62,7 +62,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/insert_drop.py b/tests/system-test/1-insert/insert_drop.py index 3e30e94a6b..d063501484 100644 --- a/tests/system-test/1-insert/insert_drop.py +++ b/tests/system-test/1-insert/insert_drop.py @@ -8,7 +8,7 @@ import threading class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/1-insert/keep_expired.py b/tests/system-test/1-insert/keep_expired.py index d02c9fbd5c..00cbc771c5 100644 --- a/tests/system-test/1-insert/keep_expired.py +++ b/tests/system-test/1-insert/keep_expired.py @@ -7,7 +7,7 @@ import time class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self.dbname = "test" diff --git a/tests/system-test/1-insert/mutil_stage.py b/tests/system-test/1-insert/mutil_stage.py index 63317e8036..08f0ba8313 100644 --- a/tests/system-test/1-insert/mutil_stage.py +++ b/tests/system-test/1-insert/mutil_stage.py @@ -57,7 +57,7 @@ DATA_PRE2 = f"data2" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.taos_cfg_path = tdDnodes.dnodes[0].cfgPath diff --git a/tests/system-test/1-insert/mutipythonnodebugtaosd.py b/tests/system-test/1-insert/mutipythonnodebugtaosd.py index 8aea53cd92..1f568fdea1 100644 --- a/tests/system-test/1-insert/mutipythonnodebugtaosd.py +++ b/tests/system-test/1-insert/mutipythonnodebugtaosd.py @@ -60,7 +60,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) # tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/opentsdb_json_taosc_insert.py b/tests/system-test/1-insert/opentsdb_json_taosc_insert.py index 3b01784000..9be51eb445 100644 --- a/tests/system-test/1-insert/opentsdb_json_taosc_insert.py +++ b/tests/system-test/1-insert/opentsdb_json_taosc_insert.py @@ -24,7 +24,7 @@ import threading import json class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) self._conn = conn diff --git a/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py b/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py index 209cfb724e..ab11691cf8 100644 --- a/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py +++ b/tests/system-test/1-insert/opentsdb_telnet_line_taosc_insert.py @@ -28,7 +28,7 @@ if platform.system().lower() == 'windows': sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) self._conn = conn diff --git a/tests/system-test/1-insert/table_comment.py b/tests/system-test/1-insert/table_comment.py index a0ae364fcd..2a8aa9b26a 100644 --- a/tests/system-test/1-insert/table_comment.py +++ b/tests/system-test/1-insert/table_comment.py @@ -20,7 +20,7 @@ from util.sql import * from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # prepare data diff --git a/tests/system-test/1-insert/table_param_ttl.py b/tests/system-test/1-insert/table_param_ttl.py index 21c591b07e..a184c51178 100644 --- a/tests/system-test/1-insert/table_param_ttl.py +++ b/tests/system-test/1-insert/table_param_ttl.py @@ -18,7 +18,7 @@ from util.common import * class TDTestCase: updatecfgDict = {'ttlUnit':5,'ttlPushInterval':3} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ntbname = 'ntb' diff --git a/tests/system-test/1-insert/tb_100w_data_order.py b/tests/system-test/1-insert/tb_100w_data_order.py index d489ba21bc..85fe559cc2 100644 --- a/tests/system-test/1-insert/tb_100w_data_order.py +++ b/tests/system-test/1-insert/tb_100w_data_order.py @@ -5,7 +5,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/1-insert/test_stmt_muti_insert_query.py b/tests/system-test/1-insert/test_stmt_muti_insert_query.py index 7ddc0e60bd..89beb30dc9 100644 --- a/tests/system-test/1-insert/test_stmt_muti_insert_query.py +++ b/tests/system-test/1-insert/test_stmt_muti_insert_query.py @@ -57,7 +57,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/test_stmt_set_tbname_tag.py b/tests/system-test/1-insert/test_stmt_set_tbname_tag.py index 321dc88cd7..535a65ffed 100644 --- a/tests/system-test/1-insert/test_stmt_set_tbname_tag.py +++ b/tests/system-test/1-insert/test_stmt_set_tbname_tag.py @@ -57,7 +57,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/1-insert/time_range_wise.py b/tests/system-test/1-insert/time_range_wise.py index 3188583181..1499c178d4 100644 --- a/tests/system-test/1-insert/time_range_wise.py +++ b/tests/system-test/1-insert/time_range_wise.py @@ -134,7 +134,7 @@ class SMAschema: class TDTestCase: updatecfgDict = {"querySmaOptimize": 1} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.precision = "ms" diff --git a/tests/system-test/1-insert/update_data.py b/tests/system-test/1-insert/update_data.py index 0d8576b00d..d6b37db8b1 100644 --- a/tests/system-test/1-insert/update_data.py +++ b/tests/system-test/1-insert/update_data.py @@ -20,7 +20,7 @@ from util.sql import * from util.common import * from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.setsql = TDSetSql() diff --git a/tests/system-test/1-insert/update_data_muti_rows.py b/tests/system-test/1-insert/update_data_muti_rows.py index 623dc497ea..af78ba5d19 100644 --- a/tests/system-test/1-insert/update_data_muti_rows.py +++ b/tests/system-test/1-insert/update_data_muti_rows.py @@ -23,7 +23,7 @@ from util.common import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/Now.py b/tests/system-test/2-query/Now.py index 35291856f2..0e514cf43b 100644 --- a/tests/system-test/2-query/Now.py +++ b/tests/system-test/2-query/Now.py @@ -7,7 +7,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/Timediff.py b/tests/system-test/2-query/Timediff.py index 1f73215dd5..c126ce926a 100644 --- a/tests/system-test/2-query/Timediff.py +++ b/tests/system-test/2-query/Timediff.py @@ -4,7 +4,7 @@ from util.cases import * from util.gettime import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.get_time = GetTime() diff --git a/tests/system-test/2-query/To_iso8601.py b/tests/system-test/2-query/To_iso8601.py index ccc26e9b1b..bf4fe404aa 100644 --- a/tests/system-test/2-query/To_iso8601.py +++ b/tests/system-test/2-query/To_iso8601.py @@ -10,7 +10,7 @@ import os class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.rowNum = 10 diff --git a/tests/system-test/2-query/To_unixtimestamp.py b/tests/system-test/2-query/To_unixtimestamp.py index 64f7b18e41..df99b08862 100644 --- a/tests/system-test/2-query/To_unixtimestamp.py +++ b/tests/system-test/2-query/To_unixtimestamp.py @@ -10,7 +10,7 @@ from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/Today.py b/tests/system-test/2-query/Today.py index 0124c5bbac..0f89a378be 100644 --- a/tests/system-test/2-query/Today.py +++ b/tests/system-test/2-query/Today.py @@ -10,7 +10,7 @@ import pandas as pd class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.today_date = datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d"), "%Y-%m-%d") diff --git a/tests/system-test/2-query/abs.py b/tests/system-test/2-query/abs.py index c9fc025b97..6bc9457264 100644 --- a/tests/system-test/2-query/abs.py +++ b/tests/system-test/2-query/abs.py @@ -14,7 +14,7 @@ class TDTestCase: # "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, # "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "udfDebugFlag": 143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/and_or_for_byte.py b/tests/system-test/2-query/and_or_for_byte.py index 7d156da379..682d729f0e 100644 --- a/tests/system-test/2-query/and_or_for_byte.py +++ b/tests/system-test/2-query/and_or_for_byte.py @@ -14,7 +14,7 @@ class TDTestCase: # "jniDebugFlag": 143, "simDebugFlag": 143, "dDebugFlag": 143, "dDebugFlag": 143, "vDebugFlag": 143, "mDebugFlag": 143, "qDebugFlag": 143, # "wDebugFlag": 143, "sDebugFlag": 143, "tsdbDebugFlag": 143, "tqDebugFlag": 143, "fsDebugFlag": 143, "udfDebugFlag": 143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/apercentile.py b/tests/system-test/2-query/apercentile.py index 128a03937a..8997238d7b 100644 --- a/tests/system-test/2-query/apercentile.py +++ b/tests/system-test/2-query/apercentile.py @@ -18,7 +18,7 @@ import numpy as np from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),False) self.rowNum = 10 diff --git a/tests/system-test/2-query/arccos.py b/tests/system-test/2-query/arccos.py index 1787521517..69e42a3911 100644 --- a/tests/system-test/2-query/arccos.py +++ b/tests/system-test/2-query/arccos.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/arcsin.py b/tests/system-test/2-query/arcsin.py index 127419029b..57d08d0587 100644 --- a/tests/system-test/2-query/arcsin.py +++ b/tests/system-test/2-query/arcsin.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/arctan.py b/tests/system-test/2-query/arctan.py index e6ae16b8d9..64a29f7ccb 100644 --- a/tests/system-test/2-query/arctan.py +++ b/tests/system-test/2-query/arctan.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/avg.py b/tests/system-test/2-query/avg.py index 5ba0a91a7e..e7086744f8 100644 --- a/tests/system-test/2-query/avg.py +++ b/tests/system-test/2-query/avg.py @@ -10,7 +10,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/between.py b/tests/system-test/2-query/between.py index a9dde5617d..dd7dda668b 100644 --- a/tests/system-test/2-query/between.py +++ b/tests/system-test/2-query/between.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/bottom.py b/tests/system-test/2-query/bottom.py index e75fde3ed4..4c352b619f 100644 --- a/tests/system-test/2-query/bottom.py +++ b/tests/system-test/2-query/bottom.py @@ -21,7 +21,7 @@ from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/cast.py b/tests/system-test/2-query/cast.py index caaa075fd4..b5881221f4 100644 --- a/tests/system-test/2-query/cast.py +++ b/tests/system-test/2-query/cast.py @@ -12,7 +12,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.dbname = "db" diff --git a/tests/system-test/2-query/ceil.py b/tests/system-test/2-query/ceil.py index 6777b449f9..221b571e8e 100644 --- a/tests/system-test/2-query/ceil.py +++ b/tests/system-test/2-query/ceil.py @@ -13,7 +13,7 @@ class TDTestCase: # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/char_length.py b/tests/system-test/2-query/char_length.py index c0883e665e..e8546ca72e 100644 --- a/tests/system-test/2-query/char_length.py +++ b/tests/system-test/2-query/char_length.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/check_tsdb.py b/tests/system-test/2-query/check_tsdb.py index f504a55dcd..0cbbc60171 100644 --- a/tests/system-test/2-query/check_tsdb.py +++ b/tests/system-test/2-query/check_tsdb.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/concat.py b/tests/system-test/2-query/concat.py index 23b964012a..dc05a17185 100644 --- a/tests/system-test/2-query/concat.py +++ b/tests/system-test/2-query/concat.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat2.py b/tests/system-test/2-query/concat2.py index 5442220076..1316a3a228 100644 --- a/tests/system-test/2-query/concat2.py +++ b/tests/system-test/2-query/concat2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat_ws.py b/tests/system-test/2-query/concat_ws.py index ad784d92ec..8443d41818 100644 --- a/tests/system-test/2-query/concat_ws.py +++ b/tests/system-test/2-query/concat_ws.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/concat_ws2.py b/tests/system-test/2-query/concat_ws2.py index caaae6cecb..38b93660e1 100644 --- a/tests/system-test/2-query/concat_ws2.py +++ b/tests/system-test/2-query/concat_ws2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/cos.py b/tests/system-test/2-query/cos.py index ab6814727e..2675c34266 100644 --- a/tests/system-test/2-query/cos.py +++ b/tests/system-test/2-query/cos.py @@ -12,7 +12,7 @@ class TDTestCase: # updatecfgDict = {'debugFlag': 143 ,"cDebugFlag":143,"uDebugFlag":143 ,"rpcDebugFlag":143 , "tmrDebugFlag":143 , # "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, # "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"udfDebugFlag":143} - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/count.py b/tests/system-test/2-query/count.py index 4d2a1cf07c..6362974d0b 100644 --- a/tests/system-test/2-query/count.py +++ b/tests/system-test/2-query/count.py @@ -3,7 +3,7 @@ from util.sql import * from util.cases import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),False) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/count_partition.py b/tests/system-test/2-query/count_partition.py index 90a6d9225b..4ab51c4efe 100644 --- a/tests/system-test/2-query/count_partition.py +++ b/tests/system-test/2-query/count_partition.py @@ -4,7 +4,7 @@ from util.sql import * from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/csum.py b/tests/system-test/2-query/csum.py index 83aaca8f12..fb828b85df 100644 --- a/tests/system-test/2-query/csum.py +++ b/tests/system-test/2-query/csum.py @@ -26,7 +26,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/db.py b/tests/system-test/2-query/db.py index f2d85ebf65..aea16dd162 100644 --- a/tests/system-test/2-query/db.py +++ b/tests/system-test/2-query/db.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/diff.py b/tests/system-test/2-query/diff.py index 9334fcca5e..74dae9d0fd 100644 --- a/tests/system-test/2-query/diff.py +++ b/tests/system-test/2-query/diff.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/distinct.py b/tests/system-test/2-query/distinct.py index 7214caec96..c7c6e1c9b0 100644 --- a/tests/system-test/2-query/distinct.py +++ b/tests/system-test/2-query/distinct.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/distribute_agg_apercentile.py b/tests/system-test/2-query/distribute_agg_apercentile.py index 9b8ec2ece8..d2364df65a 100644 --- a/tests/system-test/2-query/distribute_agg_apercentile.py +++ b/tests/system-test/2-query/distribute_agg_apercentile.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_avg.py b/tests/system-test/2-query/distribute_agg_avg.py index c54b89a2ba..4b5d3d8c5a 100644 --- a/tests/system-test/2-query/distribute_agg_avg.py +++ b/tests/system-test/2-query/distribute_agg_avg.py @@ -9,7 +9,7 @@ import platform class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_count.py b/tests/system-test/2-query/distribute_agg_count.py index f61b6d7c2e..e6cf718c05 100644 --- a/tests/system-test/2-query/distribute_agg_count.py +++ b/tests/system-test/2-query/distribute_agg_count.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_max.py b/tests/system-test/2-query/distribute_agg_max.py index 51b0ad4f94..92188bd765 100644 --- a/tests/system-test/2-query/distribute_agg_max.py +++ b/tests/system-test/2-query/distribute_agg_max.py @@ -9,7 +9,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_min.py b/tests/system-test/2-query/distribute_agg_min.py index 543142ddfa..afc42755b3 100644 --- a/tests/system-test/2-query/distribute_agg_min.py +++ b/tests/system-test/2-query/distribute_agg_min.py @@ -9,7 +9,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_spread.py b/tests/system-test/2-query/distribute_agg_spread.py index 222bd7315e..ab073c76a2 100644 --- a/tests/system-test/2-query/distribute_agg_spread.py +++ b/tests/system-test/2-query/distribute_agg_spread.py @@ -8,7 +8,7 @@ import random class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to execute {__file__}") tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_stddev.py b/tests/system-test/2-query/distribute_agg_stddev.py index 6b77fc7368..ae9479dcdd 100644 --- a/tests/system-test/2-query/distribute_agg_stddev.py +++ b/tests/system-test/2-query/distribute_agg_stddev.py @@ -9,7 +9,7 @@ import math class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/distribute_agg_sum.py b/tests/system-test/2-query/distribute_agg_sum.py index 9be4602fd9..59804b7dc5 100644 --- a/tests/system-test/2-query/distribute_agg_sum.py +++ b/tests/system-test/2-query/distribute_agg_sum.py @@ -9,7 +9,7 @@ import platform class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/elapsed.py b/tests/system-test/2-query/elapsed.py index 6a3c574346..d31df49a8e 100644 --- a/tests/system-test/2-query/elapsed.py +++ b/tests/system-test/2-query/elapsed.py @@ -20,7 +20,7 @@ from util.sql import * from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/explain.py b/tests/system-test/2-query/explain.py index 21e16fab43..1126e23f06 100644 --- a/tests/system-test/2-query/explain.py +++ b/tests/system-test/2-query/explain.py @@ -30,7 +30,7 @@ ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_C DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/first.py b/tests/system-test/2-query/first.py index 1aa51f8bb7..9523527076 100644 --- a/tests/system-test/2-query/first.py +++ b/tests/system-test/2-query/first.py @@ -23,7 +23,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/floor.py b/tests/system-test/2-query/floor.py index 793a56c1e5..65974ff2e9 100644 --- a/tests/system-test/2-query/floor.py +++ b/tests/system-test/2-query/floor.py @@ -12,7 +12,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/function_diff.py b/tests/system-test/2-query/function_diff.py index 946453bb23..7f11b12e89 100644 --- a/tests/system-test/2-query/function_diff.py +++ b/tests/system-test/2-query/function_diff.py @@ -26,7 +26,7 @@ from util.dnodes import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/function_null.py b/tests/system-test/2-query/function_null.py index 93b46d2da1..3a74ca268f 100644 --- a/tests/system-test/2-query/function_null.py +++ b/tests/system-test/2-query/function_null.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/function_stateduration.py b/tests/system-test/2-query/function_stateduration.py index fec09e786b..8f25595713 100644 --- a/tests/system-test/2-query/function_stateduration.py +++ b/tests/system-test/2-query/function_stateduration.py @@ -5,7 +5,7 @@ from util.cases import * DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/histogram.py b/tests/system-test/2-query/histogram.py index 7a6d5b4083..ecbb7fe927 100644 --- a/tests/system-test/2-query/histogram.py +++ b/tests/system-test/2-query/histogram.py @@ -144,7 +144,7 @@ class Hsgschema: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) @@ -306,7 +306,9 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="USER_INPUT", user_input="[0,3,6,9,'a']", normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="USER_INPUT", user_input="['a']", normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin=['{"start": 1, "width": 3, "count": 10, "infinity": false}'], normalized=1 ) ) - err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='[{"start": 1, "width": 3, "count": 10, "infinity": false}]', normalized=1 ) ) + # err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": 2, "count": 10, "infinity": false}', normalized=1 , "123" ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": float("inf"), "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": float("inf"), "width": 10, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"begin": 1, "width": 3, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "length": 3, "count": 10, "infinity": false}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="linear_bin", linear_bin='{"start": 1, "width": 3, "num": 10, "infinity": false}', normalized=1 ) ) @@ -325,6 +327,11 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin=['{"start": 1, "factor": 4, "count": 4, "infinity": true}'], normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='[{"start": 1, "factor": 4, "count": 4, "infinity": true}]', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"begin": 1, "factor": 4, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 0, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 0, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "width": NULL, "count": 4, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "step": 4, "count": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 4, "num": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 4, "count": 4, "witgnull": true}', normalized=1 ) ) @@ -338,6 +345,13 @@ class TDTestCase: err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": -10, "count": 4, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 0, "infinity": true}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": -10, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10001, "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": "123", "infinity": true}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": float("inf"), "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": float("inf"), "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": float("inf"), "factor": 10, "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": float("-inf"), "factor": 10, "count": 10, "infinity": false}', normalized=1 ) ) + err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": "true"}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": null}', normalized=1 ) ) err_sqls.append( Hsgschema( col=INT_COL, bin_type="log_bin", log_bin='{"start": 1, "factor": 10, "count": 10, "infinity": false}', where_clause=f"count({INT_COL}) >= 0 ") ) @@ -452,6 +466,21 @@ class TDTestCase: tdSql.checkData(0, 0, '{"lower_bin":0, "upper_bin":3, "count":3}') tdSql.checkData(1, 0, '{"lower_bin":3, "upper_bin":6, "count":3}') tdSql.checkData(2, 0, '{"lower_bin":6, "upper_bin":9, "count":3}') + + #error sql + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": 20, "infinity": false}', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": -10, "infinity": false}', 0 ) from {dbname}.nt1 where c_int < 10") + + # tdSql.error(f"SELECT HISTOGRAM(c_int, 'linear_bin', '{"start": -200, "width": 100, "count": 1001, "infinity": false}', 0 ) from {dbname}.nt1 where c_int < 10") + + tdSql.error(f"SELECT HISTOGRAM(c_int, 'log_bin', '[0,3,6,9]', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + + tdSql.error(f"SELECT HISTOGRAM(c_int, 'USER_INPUT', '[0,3,6,9]', 0 ,1 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM(c_int, 'USER_INPUT', '[0,3,6,9]' ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM('123', 'USER_INPUT', '[0,3,6,9]', 0 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM('123', 123 ,123 ,123 ) from {dbname}.nt1 where c_int < 10") + tdSql.error(f"SELECT HISTOGRAM(123, '123' ,'123' ,'123' ) from {dbname}.nt1 where c_int < 10") # if (4 != numOfParams) # tdSql.error("select HISTOGRAM(c_int, \"linear_bin\", \"{\"start\": -200, \"width\": 100, \"count\": 20, \"infinity\": false}\", 1 , InvalidNumber) from db.stb1 where c_int < 10") diff --git a/tests/system-test/2-query/hyperloglog.py b/tests/system-test/2-query/hyperloglog.py index 68f7ebdf2e..eff687cba7 100644 --- a/tests/system-test/2-query/hyperloglog.py +++ b/tests/system-test/2-query/hyperloglog.py @@ -31,7 +31,7 @@ class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/interp.py b/tests/system-test/2-query/interp.py index 3a05583418..780565c778 100644 --- a/tests/system-test/2-query/interp.py +++ b/tests/system-test/2-query/interp.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file @@ -36,7 +36,7 @@ class TDTestCase: tdSql.execute(f"insert into {dbname}.{tbname} values ('2020-02-01 00:00:05', 5, 5, 5, 5, 5.0, 5.0, true, 'varchar', 'nchar')") tdSql.execute(f"insert into {dbname}.{tbname} values ('2020-02-01 00:00:10', 10, 10, 10, 10, 10.0, 10.0, true, 'varchar', 'nchar')") tdSql.execute(f"insert into {dbname}.{tbname} values ('2020-02-01 00:00:15', 15, 15, 15, 15, 15.0, 15.0, true, 'varchar', 'nchar')") - + tdSql.execute(f"insert into {dbname}.{tbname} (ts) values (now)") tdLog.printNoPrefix("==========step3:fill null") @@ -886,7 +886,7 @@ class TDTestCase: tdSql.query(f"select interp(c0),interp(c1),interp(c2),interp(c3),interp(c4),interp(c5) from {dbname}.{tbname} range('2020-02-09 00:00:05', '2020-02-13 00:00:05') every(1d) fill(linear)") tdSql.checkRows(3) tdSql.checkCols(6) - + for i in range (tdSql.queryCols): tdSql.checkData(0, i, 13) diff --git a/tests/system-test/2-query/irate.py b/tests/system-test/2-query/irate.py index 408f4b3749..7b3ec10a8d 100644 --- a/tests/system-test/2-query/irate.py +++ b/tests/system-test/2-query/irate.py @@ -11,7 +11,7 @@ import random ,math class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) self.tb_nums = 10 diff --git a/tests/system-test/2-query/join.py b/tests/system-test/2-query/join.py index 9d30e1946a..04b4fa89a2 100644 --- a/tests/system-test/2-query/join.py +++ b/tests/system-test/2-query/join.py @@ -63,7 +63,7 @@ class DataSet: class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/join2.py b/tests/system-test/2-query/join2.py index 5c8fe0f0f9..79cc62e4bc 100644 --- a/tests/system-test/2-query/join2.py +++ b/tests/system-test/2-query/join2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/json_tag.py b/tests/system-test/2-query/json_tag.py index d9715579ae..c6f1e5076d 100644 --- a/tests/system-test/2-query/json_tag.py +++ b/tests/system-test/2-query/json_tag.py @@ -13,7 +13,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/json_tag_large_tables.py b/tests/system-test/2-query/json_tag_large_tables.py index 9164c108f9..06170e0adf 100644 --- a/tests/system-test/2-query/json_tag_large_tables.py +++ b/tests/system-test/2-query/json_tag_large_tables.py @@ -30,7 +30,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): 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)) diff --git a/tests/system-test/2-query/last.py b/tests/system-test/2-query/last.py index ac1b679181..0561dc9695 100644 --- a/tests/system-test/2-query/last.py +++ b/tests/system-test/2-query/last.py @@ -8,7 +8,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/last_row.py b/tests/system-test/2-query/last_row.py index 6286852641..333c1516b3 100644 --- a/tests/system-test/2-query/last_row.py +++ b/tests/system-test/2-query/last_row.py @@ -11,7 +11,7 @@ import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), True) self.tb_nums = 10 diff --git a/tests/system-test/2-query/leastsquares.py b/tests/system-test/2-query/leastsquares.py index fe7188a545..8870e416f8 100644 --- a/tests/system-test/2-query/leastsquares.py +++ b/tests/system-test/2-query/leastsquares.py @@ -29,7 +29,7 @@ ALL_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, BOOL_C DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/length.py b/tests/system-test/2-query/length.py index 1761572245..44c951dd4a 100644 --- a/tests/system-test/2-query/length.py +++ b/tests/system-test/2-query/length.py @@ -23,7 +23,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/log.py b/tests/system-test/2-query/log.py index 7e44d8dfd6..11a0a9c317 100644 --- a/tests/system-test/2-query/log.py +++ b/tests/system-test/2-query/log.py @@ -11,7 +11,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/lower.py b/tests/system-test/2-query/lower.py index 0e33e3834e..f8ac1ab217 100644 --- a/tests/system-test/2-query/lower.py +++ b/tests/system-test/2-query/lower.py @@ -22,7 +22,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/ltrim.py b/tests/system-test/2-query/ltrim.py index 330f688990..ba769ba350 100644 --- a/tests/system-test/2-query/ltrim.py +++ b/tests/system-test/2-query/ltrim.py @@ -27,7 +27,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/mavg.py b/tests/system-test/2-query/mavg.py index b52217af9a..7f545f2048 100644 --- a/tests/system-test/2-query/mavg.py +++ b/tests/system-test/2-query/mavg.py @@ -27,7 +27,7 @@ from util.dnodes import * dbname = 'db' class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/max.py b/tests/system-test/2-query/max.py index f3f2fdb86b..ee75afb501 100644 --- a/tests/system-test/2-query/max.py +++ b/tests/system-test/2-query/max.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/max_partition.py b/tests/system-test/2-query/max_partition.py index 08bb7675ad..f50b9fb2bb 100644 --- a/tests/system-test/2-query/max_partition.py +++ b/tests/system-test/2-query/max_partition.py @@ -4,7 +4,7 @@ from util.sql import * from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/min.py b/tests/system-test/2-query/min.py index d97c4340f4..8849b14a33 100644 --- a/tests/system-test/2-query/min.py +++ b/tests/system-test/2-query/min.py @@ -6,7 +6,7 @@ import numpy as np class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/nestedQuery.py b/tests/system-test/2-query/nestedQuery.py index c6567a8e3b..4fbd840efe 100755 --- a/tests/system-test/2-query/nestedQuery.py +++ b/tests/system-test/2-query/nestedQuery.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/percentile.py b/tests/system-test/2-query/percentile.py index 3b027ed6a0..58660eec6a 100644 --- a/tests/system-test/2-query/percentile.py +++ b/tests/system-test/2-query/percentile.py @@ -21,7 +21,7 @@ from util.sqlset import TDSetSql class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/pow.py b/tests/system-test/2-query/pow.py index 3a795ed25d..f803da6176 100644 --- a/tests/system-test/2-query/pow.py +++ b/tests/system-test/2-query/pow.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/qnodeCluster.py b/tests/system-test/2-query/qnodeCluster.py index 9e49bff938..6f3856146d 100644 --- a/tests/system-test/2-query/qnodeCluster.py +++ b/tests/system-test/2-query/qnodeCluster.py @@ -26,7 +26,7 @@ class TDTestCase: updatecfgDict = {'keepColumnName': 1} updatecfgDict["clientCfg"] = clientCfgDict - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/queryQnode.py b/tests/system-test/2-query/queryQnode.py index 7bd573d7fc..e3f4732c08 100644 --- a/tests/system-test/2-query/queryQnode.py +++ b/tests/system-test/2-query/queryQnode.py @@ -64,7 +64,7 @@ class TDTestCase: return buildPath # init - def init(self, conn, logSql=True): + def init(self, conn, logSql=True, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) # tdSql.prepare() diff --git a/tests/system-test/2-query/query_cols_tags_and_or.py b/tests/system-test/2-query/query_cols_tags_and_or.py index af3fbb83c0..9fc016cb40 100644 --- a/tests/system-test/2-query/query_cols_tags_and_or.py +++ b/tests/system-test/2-query/query_cols_tags_and_or.py @@ -16,7 +16,7 @@ from util.sql import tdSql from util.common import tdCom import random class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): ## add for TD-6672 tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/round.py b/tests/system-test/2-query/round.py index 1d69d3c9af..8f969a71d7 100644 --- a/tests/system-test/2-query/round.py +++ b/tests/system-test/2-query/round.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/rtrim.py b/tests/system-test/2-query/rtrim.py index 80307e8534..e4835fbd8e 100644 --- a/tests/system-test/2-query/rtrim.py +++ b/tests/system-test/2-query/rtrim.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/sample.py b/tests/system-test/2-query/sample.py index 7f1d7ab8c0..d1890d8623 100644 --- a/tests/system-test/2-query/sample.py +++ b/tests/system-test/2-query/sample.py @@ -24,7 +24,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/2-query/sin.py b/tests/system-test/2-query/sin.py index a1ba335487..46b1ac50ae 100644 --- a/tests/system-test/2-query/sin.py +++ b/tests/system-test/2-query/sin.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/smaTest.py b/tests/system-test/2-query/smaTest.py index 0217b6c28c..20ed103f8e 100644 --- a/tests/system-test/2-query/smaTest.py +++ b/tests/system-test/2-query/smaTest.py @@ -31,7 +31,7 @@ class TDTestCase: # updatecfgDict = {'fqdn': 135} # init - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) tdSql.prepare() @@ -78,7 +78,7 @@ class TDTestCase: def insert_data(self, tbname, ts_start, count): pre_insert = "insert into %s values"%tbname sql = pre_insert - tdLog.debug("doing insert table %s rows=%d ..."%(tbname, count)) + tdLog.debug("insert table %s rows=%d ..."%(tbname, count)) for i in range(count): sql += " (%d,%d)"%(ts_start + i*1000, i ) if i >0 and i%30000 == 0: @@ -94,7 +94,7 @@ class TDTestCase: def insert_data1(self, tbname, ts_start, count): pre_insert = "insert into %s values"%tbname sql = pre_insert - tdLog.debug("doing insert table %s rows=%d ..."%(tbname, count)) + tdLog.debug("insert table %s rows=%d ..."%(tbname, count)) for i in range(count): sql += " (%d,%d,%d)"%(ts_start + i*1000, i , i+1) if i >0 and i%30000 == 0: diff --git a/tests/system-test/2-query/sml.py b/tests/system-test/2-query/sml.py index 4dae2ad6c0..64fe92438c 100644 --- a/tests/system-test/2-query/sml.py +++ b/tests/system-test/2-query/sml.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/2-query/spread.py b/tests/system-test/2-query/spread.py index ffe86ff363..79881d7293 100644 --- a/tests/system-test/2-query/spread.py +++ b/tests/system-test/2-query/spread.py @@ -30,7 +30,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/sqrt.py b/tests/system-test/2-query/sqrt.py index 9597375885..4784b71fc6 100644 --- a/tests/system-test/2-query/sqrt.py +++ b/tests/system-test/2-query/sqrt.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/stablity.py b/tests/system-test/2-query/stablity.py index b434335970..3c8d18e9e6 100755 --- a/tests/system-test/2-query/stablity.py +++ b/tests/system-test/2-query/stablity.py @@ -28,7 +28,7 @@ class TDTestCase: "jniDebugFlag":143 ,"simDebugFlag":143,"dDebugFlag":143, "dDebugFlag":143,"vDebugFlag":143,"mDebugFlag":143,"qDebugFlag":143, "wDebugFlag":143,"sDebugFlag":143,"tsdbDebugFlag":143,"tqDebugFlag":143 ,"fsDebugFlag":143 ,"fnDebugFlag":143} - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/2-query/statecount.py b/tests/system-test/2-query/statecount.py index c73c955de4..1d9a04cc73 100644 --- a/tests/system-test/2-query/statecount.py +++ b/tests/system-test/2-query/statecount.py @@ -12,7 +12,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.ts = 1420041600000 # 2015-01-01 00:00:00 this is begin time for first record diff --git a/tests/system-test/2-query/stateduration.py b/tests/system-test/2-query/stateduration.py index b6ddff4017..009ec37764 100644 --- a/tests/system-test/2-query/stateduration.py +++ b/tests/system-test/2-query/stateduration.py @@ -17,7 +17,7 @@ from util.sql import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.ts = 1537146000000 diff --git a/tests/system-test/2-query/stddev.py b/tests/system-test/2-query/stddev.py index 837353dfc9..d044fb0dd7 100644 --- a/tests/system-test/2-query/stddev.py +++ b/tests/system-test/2-query/stddev.py @@ -20,7 +20,7 @@ from util.sql import * from util.common import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.dbname = 'db_test' diff --git a/tests/system-test/2-query/substr.py b/tests/system-test/2-query/substr.py index ea55c5e44e..9b317aeab6 100644 --- a/tests/system-test/2-query/substr.py +++ b/tests/system-test/2-query/substr.py @@ -29,7 +29,7 @@ LENS = 6 class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(),False) diff --git a/tests/system-test/2-query/sum.py b/tests/system-test/2-query/sum.py index dbc79e25f5..ec1f60a720 100644 --- a/tests/system-test/2-query/sum.py +++ b/tests/system-test/2-query/sum.py @@ -24,7 +24,7 @@ DBNAME = "db" class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/tail.py b/tests/system-test/2-query/tail.py index 687023f57e..3d5ecfaa9a 100644 --- a/tests/system-test/2-query/tail.py +++ b/tests/system-test/2-query/tail.py @@ -11,7 +11,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/tan.py b/tests/system-test/2-query/tan.py index 683cee37ff..203f149712 100644 --- a/tests/system-test/2-query/tan.py +++ b/tests/system-test/2-query/tan.py @@ -10,7 +10,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, powSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/timetruncate.py b/tests/system-test/2-query/timetruncate.py index 4cc6b27d64..917b98daa9 100644 --- a/tests/system-test/2-query/timetruncate.py +++ b/tests/system-test/2-query/timetruncate.py @@ -7,7 +7,7 @@ import time from datetime import datetime from util.gettime import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) print(conn) diff --git a/tests/system-test/2-query/timezone.py b/tests/system-test/2-query/timezone.py index 9a4953909c..0a2da114de 100644 --- a/tests/system-test/2-query/timezone.py +++ b/tests/system-test/2-query/timezone.py @@ -11,7 +11,7 @@ if platform.system().lower() == 'windows': class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/top.py b/tests/system-test/2-query/top.py index 7fd143f683..1cba18c2e2 100644 --- a/tests/system-test/2-query/top.py +++ b/tests/system-test/2-query/top.py @@ -19,7 +19,7 @@ from util.sql import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.setsql = TDSetSql() diff --git a/tests/system-test/2-query/tsbsQuery.py b/tests/system-test/2-query/tsbsQuery.py index 04a80a74ad..c4604799a1 100644 --- a/tests/system-test/2-query/tsbsQuery.py +++ b/tests/system-test/2-query/tsbsQuery.py @@ -20,7 +20,7 @@ class TDTestCase: updatecfgDict = {'keepColumnName': 1} updatecfgDict["clientCfg"] = clientCfgDict - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/ttl_comment.py b/tests/system-test/2-query/ttl_comment.py index 187df2e2d3..fabd641da7 100644 --- a/tests/system-test/2-query/ttl_comment.py +++ b/tests/system-test/2-query/ttl_comment.py @@ -24,7 +24,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/2-query/twa.py b/tests/system-test/2-query/twa.py index a499c17efb..1fd3b8fdda 100644 --- a/tests/system-test/2-query/twa.py +++ b/tests/system-test/2-query/twa.py @@ -9,7 +9,7 @@ import math class TDTestCase: updatecfgDict = {"maxTablesPerVnode":2 ,"minTablesPerVnode":2,"tableIncStepPerVnode":2 } - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor()) self.vnode_disbutes = None diff --git a/tests/system-test/2-query/union.py b/tests/system-test/2-query/union.py index 4040bb71cb..737817f262 100644 --- a/tests/system-test/2-query/union.py +++ b/tests/system-test/2-query/union.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union1.py b/tests/system-test/2-query/union1.py index ea6940246e..1ca25e7844 100644 --- a/tests/system-test/2-query/union1.py +++ b/tests/system-test/2-query/union1.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union2.py b/tests/system-test/2-query/union2.py index 2d5e2f70bf..c063b5c383 100644 --- a/tests/system-test/2-query/union2.py +++ b/tests/system-test/2-query/union2.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union3.py b/tests/system-test/2-query/union3.py index 30a15e7624..3322f30359 100644 --- a/tests/system-test/2-query/union3.py +++ b/tests/system-test/2-query/union3.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/union4.py b/tests/system-test/2-query/union4.py index 4b2fba4272..2da83d8190 100644 --- a/tests/system-test/2-query/union4.py +++ b/tests/system-test/2-query/union4.py @@ -26,7 +26,7 @@ TS_TYPE_COL = [ TS_COL, ] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/unique.py b/tests/system-test/2-query/unique.py index 92eacd99ea..b954fd004b 100644 --- a/tests/system-test/2-query/unique.py +++ b/tests/system-test/2-query/unique.py @@ -12,7 +12,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/upper.py b/tests/system-test/2-query/upper.py index f15a6f3ba7..cc5347774c 100644 --- a/tests/system-test/2-query/upper.py +++ b/tests/system-test/2-query/upper.py @@ -22,7 +22,7 @@ TS_TYPE_COL = [TS_COL] class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/2-query/varchar.py b/tests/system-test/2-query/varchar.py index 17c3ea6333..3d5f443b3c 100644 --- a/tests/system-test/2-query/varchar.py +++ b/tests/system-test/2-query/varchar.py @@ -9,7 +9,7 @@ from util.cases import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) diff --git a/tests/system-test/5-taos-tools/TD-12478.py b/tests/system-test/5-taos-tools/TD-12478.py index 69849d3c7a..576e59f339 100644 --- a/tests/system-test/5-taos-tools/TD-12478.py +++ b/tests/system-test/5-taos-tools/TD-12478.py @@ -36,7 +36,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py b/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py index 8c62f713b8..8cb58b8d70 100644 --- a/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py +++ b/tests/system-test/5-taos-tools/taosdump/taosdumpTestColTag.py @@ -28,7 +28,7 @@ class TDTestCase: ''' return - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/6-cluster/5dnode1mnode.py b/tests/system-test/6-cluster/5dnode1mnode.py index 367d0bfbd7..f2c0bf9902 100644 --- a/tests/system-test/6-cluster/5dnode1mnode.py +++ b/tests/system-test/6-cluster/5dnode1mnode.py @@ -21,7 +21,7 @@ class MyDnodes(TDDnodes): class TDTestCase: noConn = True - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.depoly_cluster(5) diff --git a/tests/system-test/6-cluster/5dnode2mnode.py b/tests/system-test/6-cluster/5dnode2mnode.py index 7cbadde8bf..6054ef69f8 100644 --- a/tests/system-test/6-cluster/5dnode2mnode.py +++ b/tests/system-test/6-cluster/5dnode2mnode.py @@ -20,7 +20,7 @@ from clusterCommonCreate import * from clusterCommonCheck import * class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py b/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py index 909decc195..e591114ef4 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py +++ b/tests/system-test/6-cluster/5dnode3mnodeAdd1Ddnoe.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeDrop.py b/tests/system-test/6-cluster/5dnode3mnodeDrop.py index 33dc3ebaac..52f734b534 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeDrop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeDrop.py @@ -22,7 +22,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None diff --git a/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py b/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py index 74a7c32206..2b013704f2 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeDropInsert.py @@ -26,7 +26,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None self.ts = 1500000000000 diff --git a/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py b/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py index 2e107561b5..1590a5948b 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRecreateMnode.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py index 3fe6a689cb..52c9773544 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertData.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py index 0d56729280..4d641b0e27 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py +++ b/tests/system-test/6-cluster/5dnode3mnodeRestartDnodeInsertDataAsync.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py index a215a74559..eba456d1c2 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py index 9df1ffb3df..1949157191 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py index caaf1dd898..382144b69c 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopDnodeInsertData.py @@ -26,7 +26,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py index 58ed8cde63..9acb313203 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py @@ -25,13 +25,12 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + 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 = replicaVar def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -88,7 +87,7 @@ class TDTestCase: vnodeNumbers = int(dnodeNumbers-mnodeNums) allDbNumbers=(paraDict['dbNumbers']*restartNumbers) allStbNumbers=(paraDict['stbNumbers']*restartNumbers) - + paraDict['replica']=int(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) @@ -172,7 +171,7 @@ class TDTestCase: def run(self): # print(self.master_dnode.cfgDict) - self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=5,stopRole='mnode') + self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=1,stopRole='mnode') def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py index 3dc3e7ec65..e8e3b217a1 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py @@ -25,12 +25,12 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + 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 = replicaVar def getBuildPath(self): selfPath = os.path.dirname(os.path.realpath(__file__)) @@ -88,7 +88,7 @@ class TDTestCase: vnodeNumbers = int(dnodeNumbers-mnodeNums) allDbNumbers=(paraDict['dbNumbers']*restartNumbers) 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) @@ -170,7 +170,7 @@ class TDTestCase: def run(self): # print(self.master_dnode.cfgDict) - self.fiveDnodeThreeMnode(dnodeNumbers=5,mnodeNums=3,restartNumbers=3,stopRole='mnode') + self.fiveDnodeThreeMnode(dnodeNumbers=6,mnodeNums=3,restartNumbers=3,stopRole='mnode') def stop(self): tdSql.close() diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py index 9a94632a12..14ae1a8a48 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py index 6fbe262b8e..056e3225e8 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py index 56bafe8abc..5fd79e4296 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateStb.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None tdSql.init(conn.cursor()) diff --git a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py b/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py index 539e5e38a7..a34895ff42 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeSeperate1VnodeStopInsert.py @@ -25,7 +25,7 @@ import ctypes class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") # tdSql.init(conn.cursor()) # self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStop.py b/tests/system-test/6-cluster/5dnode3mnodeStop.py index c43d41199b..531688710a 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStop.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py index 584dd645f6..76ff746b2e 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStop2Follower.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py b/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py index 5638b01070..142f88c0d9 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopConnect.py @@ -25,7 +25,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py b/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py index 6daa4c260a..afa1c3dcc3 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopFollowerLeader.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py b/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py index dcd9e56a64..780255604d 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopInsert.py @@ -26,7 +26,7 @@ class MyDnodes(TDDnodes): class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") self.TDDnodes = None diff --git a/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py b/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py index 1644686568..97134ac2d1 100644 --- a/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py +++ b/tests/system-test/6-cluster/5dnode3mnodeStopLoop.py @@ -24,7 +24,7 @@ from multiprocessing import Process class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/clusterCommonCreate.py b/tests/system-test/6-cluster/clusterCommonCreate.py index 299829144e..6c2017f91c 100644 --- a/tests/system-test/6-cluster/clusterCommonCreate.py +++ b/tests/system-test/6-cluster/clusterCommonCreate.py @@ -33,7 +33,7 @@ from util.common import * # INSERT_DATA = 3 class ClusterComCreate: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdSql.init(conn.cursor()) # tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py index 8d07dc6b38..435701bd8f 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_createDb_replica1.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py index 470278cd8e..f0d5e8328a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py index 0484ee9f33..8d0801500e 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica1_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py index 60e3167304..379615d358 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas.py @@ -18,7 +18,7 @@ import subprocess sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py index 0557836ab2..240169dbb6 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_force_stop_all_dnodes.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py index 8523ac72a4..25b5de5afa 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py index 8e7ac388fb..ab5359601a 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_all_vnode.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py index 37c00c4b8d..4eec3c348d 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_follower.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py index f1ff805f08..0fe18ab705 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_querys_loop_restart_leader.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py index 07231555fe..75a7ca51b6 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_all_dnodes.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py index 80d367db01..e9c63151f3 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_sync.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py index 55a2318817..5dd57542b3 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py index 489e2acd43..fd00e89216 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_follower_unsync_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py index ee0ab26f4c..f98e2c07b5 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader.py @@ -19,7 +19,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py index c7895abe04..5be2b67c31 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_insertdatas_stop_leader_forece_stop.py @@ -19,7 +19,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py index aca188824d..e8fa3099e9 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_mnode3_insertdatas_querys.py @@ -18,7 +18,7 @@ import subprocess ,threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py index fa69643079..21d0c2d2b8 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py index 0ef8db9c0f..ff6ce98c81 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_follower_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py index f26df70c4e..e36f488c2b 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py index 2f57af39b0..050b98024d 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_querydatas_stop_leader_force_stop.py @@ -21,7 +21,7 @@ import threading sys.path.append(os.path.dirname(__file__)) class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py index 221053d165..d086743306 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups.py @@ -17,7 +17,7 @@ import socket import subprocess class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py index 05ec8efcd2..b9d3afa765 100644 --- a/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py +++ b/tests/system-test/6-cluster/vnode/4dnode1mnode_basic_replica3_vgroups_stopOne.py @@ -19,7 +19,7 @@ import socket import subprocess class TDTestCase: - def init(self,conn ,logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) self.host = socket.gethostname() diff --git a/tests/system-test/7-tmq/basic5.py b/tests/system-test/7-tmq/basic5.py index 9531541f13..d1985c6567 100644 --- a/tests/system-test/7-tmq/basic5.py +++ b/tests/system-test/7-tmq/basic5.py @@ -26,7 +26,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/create_wrong_topic.py b/tests/system-test/7-tmq/create_wrong_topic.py index d18cb0260e..dbdcedcbe8 100644 --- a/tests/system-test/7-tmq/create_wrong_topic.py +++ b/tests/system-test/7-tmq/create_wrong_topic.py @@ -13,7 +13,7 @@ from util.dnodes import * from util.sqlset import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug("start to execute %s" % __file__) tdSql.init(conn.cursor(),logSql) self.setsql = TDSetSql() diff --git a/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py b/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py index 4add73ec2b..484969010c 100644 --- a/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py +++ b/tests/system-test/7-tmq/dataFromTsdbNWal-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/dataFromTsdbNWal.py b/tests/system-test/7-tmq/dataFromTsdbNWal.py index 950c8fdcf6..ed22df2b07 100644 --- a/tests/system-test/7-tmq/dataFromTsdbNWal.py +++ b/tests/system-test/7-tmq/dataFromTsdbNWal.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/db.py b/tests/system-test/7-tmq/db.py index da5d7fefd2..17668d8d03 100644 --- a/tests/system-test/7-tmq/db.py +++ b/tests/system-test/7-tmq/db.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py b/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py index fc4fdcecf9..af6c51d947 100644 --- a/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py +++ b/tests/system-test/7-tmq/dropDbR3ConflictTransaction.py @@ -26,7 +26,7 @@ class TDTestCase: self.ctbNum = 2 self.rowsPerTbl = 2 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/schema.py b/tests/system-test/7-tmq/schema.py index 34d36e5792..2a67cd1bc1 100644 --- a/tests/system-test/7-tmq/schema.py +++ b/tests/system-test/7-tmq/schema.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/stbFilter.py b/tests/system-test/7-tmq/stbFilter.py index 4942a39db4..0f0e7c5287 100644 --- a/tests/system-test/7-tmq/stbFilter.py +++ b/tests/system-test/7-tmq/stbFilter.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/stbTagFilter-1ctb.py b/tests/system-test/7-tmq/stbTagFilter-1ctb.py index 6cb152342b..0ef454f3e2 100644 --- a/tests/system-test/7-tmq/stbTagFilter-1ctb.py +++ b/tests/system-test/7-tmq/stbTagFilter-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/stbTagFilter-multiCtb.py b/tests/system-test/7-tmq/stbTagFilter-multiCtb.py index 9053bf2620..0ec114d3bd 100644 --- a/tests/system-test/7-tmq/stbTagFilter-multiCtb.py +++ b/tests/system-test/7-tmq/stbTagFilter-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/subscribeDb.py b/tests/system-test/7-tmq/subscribeDb.py index ba46f72695..3790bd1690 100644 --- a/tests/system-test/7-tmq/subscribeDb.py +++ b/tests/system-test/7-tmq/subscribeDb.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file @@ -209,7 +209,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("1-insert process end, and start to check consume result") expectRows = 1 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -310,7 +310,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("2-insert process end, and start to check consume result") expectRows = 2 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -379,7 +379,7 @@ class TDTestCase: # wait for data ready prepareEnvThread.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("3-insert process end, and start to check consume result") expectRows = 2 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 @@ -459,7 +459,7 @@ class TDTestCase: prepareEnvThread.join() prepareEnvThread2.join() - tdLog.info("insert process end, and start to check consume result") + tdLog.info("4-insert process end, and start to check consume result") expectRows = 1 resultList = self.selectConsumeResult(expectRows) totalConsumeRows = 0 diff --git a/tests/system-test/7-tmq/subscribeDb0.py b/tests/system-test/7-tmq/subscribeDb0.py index 7720001fbb..81d824156d 100644 --- a/tests/system-test/7-tmq/subscribeDb0.py +++ b/tests/system-test/7-tmq/subscribeDb0.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb1.py b/tests/system-test/7-tmq/subscribeDb1.py index 404938158f..02e72d0475 100644 --- a/tests/system-test/7-tmq/subscribeDb1.py +++ b/tests/system-test/7-tmq/subscribeDb1.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb2.py b/tests/system-test/7-tmq/subscribeDb2.py index 4702aef035..edf1a8ec80 100644 --- a/tests/system-test/7-tmq/subscribeDb2.py +++ b/tests/system-test/7-tmq/subscribeDb2.py @@ -21,7 +21,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb3.py b/tests/system-test/7-tmq/subscribeDb3.py index 0ff609ab6b..34df61dc09 100644 --- a/tests/system-test/7-tmq/subscribeDb3.py +++ b/tests/system-test/7-tmq/subscribeDb3.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeDb4.py b/tests/system-test/7-tmq/subscribeDb4.py index d253c34a53..27efbee016 100644 --- a/tests/system-test/7-tmq/subscribeDb4.py +++ b/tests/system-test/7-tmq/subscribeDb4.py @@ -51,7 +51,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/7-tmq/subscribeStb.py b/tests/system-test/7-tmq/subscribeStb.py index 2757e590a3..213f9aa89c 100644 --- a/tests/system-test/7-tmq/subscribeStb.py +++ b/tests/system-test/7-tmq/subscribeStb.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb0.py b/tests/system-test/7-tmq/subscribeStb0.py index 26e834ae2c..0c188754b2 100644 --- a/tests/system-test/7-tmq/subscribeStb0.py +++ b/tests/system-test/7-tmq/subscribeStb0.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb1.py b/tests/system-test/7-tmq/subscribeStb1.py index 0c49636b15..4d5407e927 100644 --- a/tests/system-test/7-tmq/subscribeStb1.py +++ b/tests/system-test/7-tmq/subscribeStb1.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb2.py b/tests/system-test/7-tmq/subscribeStb2.py index 2cbb16ec00..bb38a981d3 100644 --- a/tests/system-test/7-tmq/subscribeStb2.py +++ b/tests/system-test/7-tmq/subscribeStb2.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb3.py b/tests/system-test/7-tmq/subscribeStb3.py index 9c1b3fd241..32272491c6 100644 --- a/tests/system-test/7-tmq/subscribeStb3.py +++ b/tests/system-test/7-tmq/subscribeStb3.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/subscribeStb4.py b/tests/system-test/7-tmq/subscribeStb4.py index 33f4c4af1a..e347d27ac1 100644 --- a/tests/system-test/7-tmq/subscribeStb4.py +++ b/tests/system-test/7-tmq/subscribeStb4.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmq3mnodeSwitch.py b/tests/system-test/7-tmq/tmq3mnodeSwitch.py index 7ba914c05c..837317e5d7 100644 --- a/tests/system-test/7-tmq/tmq3mnodeSwitch.py +++ b/tests/system-test/7-tmq/tmq3mnodeSwitch.py @@ -32,7 +32,7 @@ class TDTestCase: self.portStep = 100 self.dnodeOfLeader = 0 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqAlterSchema.py b/tests/system-test/7-tmq/tmqAlterSchema.py index 232a1e11fa..3bff0e4754 100644 --- a/tests/system-test/7-tmq/tmqAlterSchema.py +++ b/tests/system-test/7-tmq/tmqAlterSchema.py @@ -32,7 +32,7 @@ class TDTestCase: self.portStep = 100 self.dnodeOfLeader = 0 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqAutoCreateTbl.py b/tests/system-test/7-tmq/tmqAutoCreateTbl.py index ce2cad4b14..568e49388b 100644 --- a/tests/system-test/7-tmq/tmqAutoCreateTbl.py +++ b/tests/system-test/7-tmq/tmqAutoCreateTbl.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 500 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqCheckData.py b/tests/system-test/7-tmq/tmqCheckData.py index 9338debfa6..9995af15c2 100644 --- a/tests/system-test/7-tmq/tmqCheckData.py +++ b/tests/system-test/7-tmq/tmqCheckData.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqCheckData1.py b/tests/system-test/7-tmq/tmqCheckData1.py index 7c236bbe8b..5b055cf725 100644 --- a/tests/system-test/7-tmq/tmqCheckData1.py +++ b/tests/system-test/7-tmq/tmqCheckData1.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqCommon.py b/tests/system-test/7-tmq/tmqCommon.py index b1455ebe48..e71e4d257d 100644 --- a/tests/system-test/7-tmq/tmqCommon.py +++ b/tests/system-test/7-tmq/tmqCommon.py @@ -37,7 +37,7 @@ from util.common import * # INSERT_DATA = 3 class TMQCom: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdSql.init(conn.cursor()) # tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py index 20b0c65c71..655097c924 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py index 494952ecd5..709464fc1e 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py index 666ca6ca64..09ad6e38c9 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 150 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py index e4ce3b0f77..95e060d581 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg-mutilCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 70 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py index da7d9e4651..fc3437613b 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb-mutilVg.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb.py b/tests/system-test/7-tmq/tmqConsFromTsdb.py index b3bb5f84e4..73af4d196f 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py index 07fb9c7751..20db44ef19 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 1000000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py index 313ff7476e..bd42f74c03 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 100000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py index 05f7030169..2eb1a7c52a 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb-funcNFilter.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 4000 self.rowsPerTbl = 150 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py index 232d90848f..351a10ed1f 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg-mutilCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 3000 self.rowsPerTbl = 70 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py index 5841c6d605..6504274993 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1-mutilVg.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsFromTsdb1.py b/tests/system-test/7-tmq/tmqConsFromTsdb1.py index d0ab8d4fe3..2cfb6581d8 100644 --- a/tests/system-test/7-tmq/tmqConsFromTsdb1.py +++ b/tests/system-test/7-tmq/tmqConsFromTsdb1.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 10 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqConsumerGroup.py b/tests/system-test/7-tmq/tmqConsumerGroup.py index b5cbfb8a51..5c7d21069b 100644 --- a/tests/system-test/7-tmq/tmqConsumerGroup.py +++ b/tests/system-test/7-tmq/tmqConsumerGroup.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqDelete-1ctb.py b/tests/system-test/7-tmq/tmqDelete-1ctb.py index 8329b00145..7509e43af7 100644 --- a/tests/system-test/7-tmq/tmqDelete-1ctb.py +++ b/tests/system-test/7-tmq/tmqDelete-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDelete-multiCtb.py b/tests/system-test/7-tmq/tmqDelete-multiCtb.py index c9d90b45be..ded6fe94d7 100644 --- a/tests/system-test/7-tmq/tmqDelete-multiCtb.py +++ b/tests/system-test/7-tmq/tmqDelete-multiCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDnode.py b/tests/system-test/7-tmq/tmqDnode.py index 802993e924..921e543e2d 100644 --- a/tests/system-test/7-tmq/tmqDnode.py +++ b/tests/system-test/7-tmq/tmqDnode.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqDnodeRestart.py b/tests/system-test/7-tmq/tmqDnodeRestart.py index 925692dbb8..205f513351 100644 --- a/tests/system-test/7-tmq/tmqDnodeRestart.py +++ b/tests/system-test/7-tmq/tmqDnodeRestart.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py b/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py index b952dc2d57..0d75df58f9 100644 --- a/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqDropNtb-snapshot0.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 10 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py b/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py index 4cb208b616..79cb79a83c 100644 --- a/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqDropNtb-snapshot1.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 10 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqDropStb.py b/tests/system-test/7-tmq/tmqDropStb.py index b172224c2a..7679f0ca44 100644 --- a/tests/system-test/7-tmq/tmqDropStb.py +++ b/tests/system-test/7-tmq/tmqDropStb.py @@ -51,7 +51,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/7-tmq/tmqDropStbCtb.py b/tests/system-test/7-tmq/tmqDropStbCtb.py index 704811d083..95780538d1 100644 --- a/tests/system-test/7-tmq/tmqDropStbCtb.py +++ b/tests/system-test/7-tmq/tmqDropStbCtb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqError.py b/tests/system-test/7-tmq/tmqError.py index 27f1e39ddd..5c858d0dce 100644 --- a/tests/system-test/7-tmq/tmqError.py +++ b/tests/system-test/7-tmq/tmqError.py @@ -29,7 +29,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file @@ -244,7 +244,7 @@ class TDTestCase: tmqCom.insertConsumerInfo(consumerId, expectrowcnt,topicList,keyList,ifcheckdata,ifManualCommit) tdLog.info("start consume processor") - pollDelay = 9000000 # Forever loop + paraDict['pollDelay'] = 9000000 # Forever loop showMsg = 1 showRow = 1 #self.startTmqSimProcess(buildPath,cfgPath,pollDelay,parameterDict["dbName"],showMsg, showRow) diff --git a/tests/system-test/7-tmq/tmqModule.py b/tests/system-test/7-tmq/tmqModule.py index 1ff47da159..0063edce56 100644 --- a/tests/system-test/7-tmq/tmqModule.py +++ b/tests/system-test/7-tmq/tmqModule.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqShow.py b/tests/system-test/7-tmq/tmqShow.py index f348173d6d..0a21680e78 100644 --- a/tests/system-test/7-tmq/tmqShow.py +++ b/tests/system-test/7-tmq/tmqShow.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file @@ -138,8 +138,9 @@ class TDTestCase: tdSql.query("show subscriptions") # tdLog.debug(tdSql.queryResult) rows = tdSql.getRows() - tdLog.info("show subscriptions rows: %d"%rows) - if rows != paraDict['vgroups'] * len(topicNameList): + expectSubscriptions = paraDict['vgroups'] * len(topicNameList) + tdLog.info("show subscriptions rows: %d, expect Subscriptions: %d"%(rows,expectSubscriptions)) + if rows != expectSubscriptions: tdLog.exit("show subscriptions rows error") pThread.join() diff --git a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py index c5f98bc3a0..7e14f2568d 100644 --- a/tests/system-test/7-tmq/tmqSubscribeStb-r3.py +++ b/tests/system-test/7-tmq/tmqSubscribeStb-r3.py @@ -27,7 +27,7 @@ class TDTestCase: self.ctbNum = 1000 self.rowsPerTbl = 100 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file @@ -100,7 +100,7 @@ class TDTestCase: # tmqCom.insert_data_with_autoCreateTbl(tsql=tdSql,dbName=paraDict["dbName"],stbName=paraDict["stbName"],ctbPrefix="ctbx", # ctbNum=paraDict["ctbNum"],rowsPerTbl=paraDict["rowsPerTbl"],batchNum=paraDict["batchNum"], # startTs=paraDict["startTs"],ctbStartIdx=paraDict['ctbStartIdx']) - tmqCom.asyncInsertDataByInterlace(paraDict) + pThread = tmqCom.asyncInsertDataByInterlace(paraDict) tdLog.info("wait some data inserted") exitFlag = 1 @@ -128,6 +128,7 @@ class TDTestCase: cluster.dnodes[4].stoptaosd() cluster.dnodes[4].starttaosd() + pThread.join() # tdLog.info("restart taosd to ensure that the data falls into the disk") # tdSql.query("flush database %s"%(paraDict['dbName'])) return @@ -290,6 +291,7 @@ class TDTestCase: def run(self): self.prepareTestEnv() self.tmqCase1() + self.prepareTestEnv() self.tmqCase2() def stop(self): diff --git a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py index f70c6ad49b..8158249fa6 100644 --- a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot0.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py index 58cdc775ee..97e50cf654 100644 --- a/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqUdf-multCtb-snapshot1.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUdf.py b/tests/system-test/7-tmq/tmqUdf.py index 5eac0ae69d..d081423142 100644 --- a/tests/system-test/7-tmq/tmqUdf.py +++ b/tests/system-test/7-tmq/tmqUdf.py @@ -23,7 +23,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/7-tmq/tmqUpdate-1ctb.py b/tests/system-test/7-tmq/tmqUpdate-1ctb.py index 12de04cd9c..a95920b7c4 100644 --- a/tests/system-test/7-tmq/tmqUpdate-1ctb.py +++ b/tests/system-test/7-tmq/tmqUpdate-1ctb.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 1 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py index 02641d8bcb..0ced8fc34b 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot0.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py index baeb70e656..bdcbb9578e 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb-snapshot1.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdate-multiCtb.py b/tests/system-test/7-tmq/tmqUpdate-multiCtb.py index bde266e634..df150130c0 100644 --- a/tests/system-test/7-tmq/tmqUpdate-multiCtb.py +++ b/tests/system-test/7-tmq/tmqUpdate-multiCtb.py @@ -22,7 +22,7 @@ class TDTestCase: self.rowsPerTbl = 1000 self.autoCtbPrefix = 'aCtb' - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmqUpdateWithConsume.py b/tests/system-test/7-tmq/tmqUpdateWithConsume.py index be07ba13a9..dbeac427ac 100644 --- a/tests/system-test/7-tmq/tmqUpdateWithConsume.py +++ b/tests/system-test/7-tmq/tmqUpdateWithConsume.py @@ -21,7 +21,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 1000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/7-tmq/tmq_taosx.py b/tests/system-test/7-tmq/tmq_taosx.py index 626e935733..fd7e1b7bb1 100644 --- a/tests/system-test/7-tmq/tmq_taosx.py +++ b/tests/system-test/7-tmq/tmq_taosx.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15517.py b/tests/system-test/99-TDcase/TD-15517.py index fe2d9b9041..e45a54c272 100644 --- a/tests/system-test/99-TDcase/TD-15517.py +++ b/tests/system-test/99-TDcase/TD-15517.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15554.py b/tests/system-test/99-TDcase/TD-15554.py index 16a34086b7..02654b5703 100644 --- a/tests/system-test/99-TDcase/TD-15554.py +++ b/tests/system-test/99-TDcase/TD-15554.py @@ -19,7 +19,7 @@ class TDTestCase: #updatecfgDict["clientCfg"] = clientCfgDict #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15557.py b/tests/system-test/99-TDcase/TD-15557.py index 243a0a4d7e..ca29e1282f 100644 --- a/tests/system-test/99-TDcase/TD-15557.py +++ b/tests/system-test/99-TDcase/TD-15557.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-15563.py b/tests/system-test/99-TDcase/TD-15563.py index 74b5472d89..6b37f25bb6 100644 --- a/tests/system-test/99-TDcase/TD-15563.py +++ b/tests/system-test/99-TDcase/TD-15563.py @@ -20,7 +20,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-16025.py b/tests/system-test/99-TDcase/TD-16025.py index 4cf94f5daf..0adc313429 100644 --- a/tests/system-test/99-TDcase/TD-16025.py +++ b/tests/system-test/99-TDcase/TD-16025.py @@ -27,7 +27,7 @@ class TDTestCase: #updatecfgDict["rpcDebugFlag"] = rpcDebugFlagVal #print ("===================: ", updatecfgDict) - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-16821.py b/tests/system-test/99-TDcase/TD-16821.py index 31c1c34485..b2b5e3f425 100644 --- a/tests/system-test/99-TDcase/TD-16821.py +++ b/tests/system-test/99-TDcase/TD-16821.py @@ -15,7 +15,7 @@ sys.path.append("./7-tmq") from tmqCommon import * class TDTestCase: - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor()) #tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/99-TDcase/TD-17255.py b/tests/system-test/99-TDcase/TD-17255.py index 5d18fee8d2..bcf02b654f 100644 --- a/tests/system-test/99-TDcase/TD-17255.py +++ b/tests/system-test/99-TDcase/TD-17255.py @@ -20,7 +20,7 @@ class TDTestCase: self.ctbNum = 100 self.rowsPerTbl = 10000 - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") tdSql.init(conn.cursor(), False) diff --git a/tests/system-test/99-TDcase/TD-17699.py b/tests/system-test/99-TDcase/TD-17699.py index 40650e4b92..d4c4a4cc32 100644 --- a/tests/system-test/99-TDcase/TD-17699.py +++ b/tests/system-test/99-TDcase/TD-17699.py @@ -52,7 +52,7 @@ class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") logSql = False tdSql.init(conn.cursor(), logSql) diff --git a/tests/system-test/99-TDcase/TD-19201.py b/tests/system-test/99-TDcase/TD-19201.py index 26caa27815..0fd86bf6b4 100644 --- a/tests/system-test/99-TDcase/TD-19201.py +++ b/tests/system-test/99-TDcase/TD-19201.py @@ -13,7 +13,7 @@ from util.dnodes import * class TDTestCase: hostname = socket.gethostname() - def init(self, conn, logSql): + def init(self, conn, logSql, replicaVar=1): tdLog.debug(f"start to excute {__file__}") #tdSql.init(conn.cursor()) tdSql.init(conn.cursor(), logSql) # output sql.txt file diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh old mode 100644 new mode 100755 index 6b87377df7..8529f8d99b --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -239,7 +239,8 @@ python3 ./test.py -f 6-cluster/5dnode3mnodeStopLoop.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateDb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopVnodeCreateDb.py -N 5 -M 3 -python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 5 -M 3 +python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 6 -M 3 +python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateDbRep3.py -N 6 -M 3 -n 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopDnodeCreateStb.py -N 5 -M 3 python3 ./test.py -f 6-cluster/5dnode3mnodeSep1VnodeStopMnodeCreateStb.py -N 5 -M 3 diff --git a/tests/system-test/test.py b/tests/system-test/test.py index dd49f037bd..b25bda4a3b 100644 --- a/tests/system-test/test.py +++ b/tests/system-test/test.py @@ -72,8 +72,9 @@ if __name__ == "__main__": queryPolicy = 1 createDnodeNums = 1 restful = False - opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:', [ - 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate']) + replicaVar = 1 + opts, args = getopt.gnu_getopt(sys.argv[1:], 'f:p:m:l:scghrd:k:e:N:M:Q:C:RD:n:', [ + 'file=', 'path=', 'master', 'logSql', 'stop', 'cluster', 'valgrind', 'help', 'restart', 'updateCfgDict', 'killv', 'execCmd','dnodeNums','mnodeNums','queryPolicy','createDnodeNums','restful','adaptercfgupdate','replicaVar']) for key, value in opts: if key in ['-h', '--help']: tdLog.printNoPrefix( @@ -95,8 +96,7 @@ if __name__ == "__main__": tdLog.printNoPrefix('-C create Dnode Numbers in one cluster') tdLog.printNoPrefix('-R restful realization form') tdLog.printNoPrefix('-D taosadapter update cfg dict ') - - + tdLog.printNoPrefix('-n the number of replicas') sys.exit(0) if key in ['-r', '--restart']: @@ -168,6 +168,9 @@ if __name__ == "__main__": print('adapter cfg update convert fail.') sys.exit(0) + if key in ['-n', '--replicaVar']: + replicaVar = value + if not execCmd == "": if restful: tAdapter.init(deployPath) @@ -512,7 +515,7 @@ if __name__ == "__main__": if fileName == "all": tdCases.runAllLinux(conn) else: - tdCases.runOneLinux(conn, fileName) + tdCases.runOneLinux(conn, fileName, replicaVar) if restart: if fileName == "all": @@ -529,7 +532,7 @@ if __name__ == "__main__": conn = taosrest.connect(url=f"http://{host}:6041") tdLog.info("Procedures for tdengine deployed in %s" % (host)) tdLog.info("query test after taosd restart") - tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py") + tdCases.runOneLinux(conn, sp[0] + "_" + "restart.py", replicaVar) else: tdLog.info("not need to query") diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index e01796617d..79be05e9fc 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -86,9 +86,34 @@ ELSE () ) MESSAGE("CURRENT SOURCE DIR ${CMAKE_CURRENT_SOURCE_DIR}") - include(ExternalProject) + IF (TD_WINDOWS) + INCLUDE(ExternalProject) + ExternalProject_Add(taosadapter + PREFIX "taosadapter" + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosadapter + BUILD_ALWAYS off + DEPENDS taos + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND cmake -E echo "taosadapter no need cmake to config" + PATCH_COMMAND + COMMAND git clean -f -d + BUILD_COMMAND + COMMAND set CGO_CFLAGS=-I${CMAKE_CURRENT_SOURCE_DIR}/../include/client + COMMAND set CGO_LDFLAGS=-L${CMAKE_BINARY_DIR}/build/lib + COMMAND go build -a -o taosadapter.exe -ldflags "-s -w -X github.com/taosdata/taosadapter/v3/version.Version=${taos_version} -X github.com/taosdata/taosadapter/v3/version.CommitID=${taosadapter_commit_sha1}" + COMMAND go build -a -o taosadapter-debug.exe -ldflags "-X github.com/taosdata/taosadapter/v3/version.Version=${taos_version} -X github.com/taosdata/taosadapter/v3/version.CommitID=${taosadapter_commit_sha1}" - ExternalProject_Add(taosadapter + INSTALL_COMMAND + COMMAND cmake -E time upx taosadapter ||: + COMMAND cmake -E copy taosadapter.exe ${CMAKE_BINARY_DIR}/build/bin + COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy ./example/config/taosadapter.toml ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy ./taosadapter.service ${CMAKE_BINARY_DIR}/test/cfg/ + COMMAND cmake -E copy taosadapter-debug.exe ${CMAKE_BINARY_DIR}/build/bin + ) + ELSE (TD_WINDOWS) + INCLUDE(ExternalProject) + ExternalProject_Add(taosadapter PREFIX "taosadapter" SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/taosadapter BUILD_ALWAYS off @@ -108,4 +133,5 @@ ELSE () COMMAND cmake -E copy ./taosadapter.service ${CMAKE_BINARY_DIR}/test/cfg/ COMMAND cmake -E copy taosadapter-debug ${CMAKE_BINARY_DIR}/build/bin ) + ENDIF (TD_WINDOWS) ENDIF ()