diff --git a/cmake/cmake.version b/cmake/cmake.version
index a30618157b..d0d455c73d 100644
--- a/cmake/cmake.version
+++ b/cmake/cmake.version
@@ -2,7 +2,7 @@
IF (DEFINED VERNUMBER)
SET(TD_VER_NUMBER ${VERNUMBER})
ELSE ()
- SET(TD_VER_NUMBER "3.0.2.5")
+ SET(TD_VER_NUMBER "3.0.2.6")
ENDIF ()
IF (DEFINED VERCOMPATIBLE)
diff --git a/cmake/taostools_CMakeLists.txt.in b/cmake/taostools_CMakeLists.txt.in
index ae3b626f88..db2ae92f6e 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 61cbfd2
+ GIT_TAG 1e15545
SOURCE_DIR "${TD_SOURCE_DIR}/tools/taos-tools"
BINARY_DIR ""
#BUILD_IN_SOURCE TRUE
diff --git a/docs/en/07-develop/07-tmq.mdx b/docs/en/07-develop/07-tmq.mdx
index 92db7d4cbf..c85109d3c5 100644
--- a/docs/en/07-develop/07-tmq.mdx
+++ b/docs/en/07-develop/07-tmq.mdx
@@ -222,7 +222,7 @@ A database including one supertable and two subtables is created as follows:
```sql
DROP DATABASE IF EXISTS tmqdb;
CREATE DATABASE tmqdb;
-CREATE TABLE tmqdb.stb (ts TIMESTAMP, c1 INT, c2 FLOAT, c3 VARCHAR(16) TAGS(t1 INT, t3 VARCHAR(16));
+CREATE TABLE tmqdb.stb (ts TIMESTAMP, c1 INT, c2 FLOAT, c3 VARCHAR(16)) TAGS(t1 INT, t3 VARCHAR(16));
CREATE TABLE tmqdb.ctb0 USING tmqdb.stb TAGS(0, "subtable0");
CREATE TABLE tmqdb.ctb1 USING tmqdb.stb TAGS(1, "subtable1");
INSERT INTO tmqdb.ctb0 VALUES(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00');
diff --git a/docs/en/07-develop/_sub_java.mdx b/docs/en/07-develop/_sub_java.mdx
index d14b5fd609..09dacd8568 100644
--- a/docs/en/07-develop/_sub_java.mdx
+++ b/docs/en/07-develop/_sub_java.mdx
@@ -1,11 +1,28 @@
-```java
-{{#include docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java}}
-{{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}}
-{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
-```
-```java
-{{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}}
-```
-```java
-{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
-```
\ No newline at end of file
+
+
+
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java}}
+ ```
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}}
+ ```
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
+ ```
+
+
+
+
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/WebsocketSubscribeDemo.java}}
+ ```
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}}
+ ```
+ ```java
+ {{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
+ ```
+
+
+
diff --git a/docs/en/14-reference/03-connector/04-java.mdx b/docs/en/14-reference/03-connector/04-java.mdx
index 61ce166069..36992da636 100644
--- a/docs/en/14-reference/03-connector/04-java.mdx
+++ b/docs/en/14-reference/03-connector/04-java.mdx
@@ -696,6 +696,9 @@ TaosConsumer consumer = new TaosConsumer<>(config);
- enable.auto.commit: Specifies whether to commit automatically.
- group.id: consumer: Specifies the group that the consumer is in.
- value.deserializer: To deserialize the results, you can inherit `com.taosdata.jdbc.tmq.ReferenceDeserializer` and specify the result set bean. You can also inherit `com.taosdata.jdbc.tmq.Deserializer` and perform custom deserialization based on the SQL result set.
+- td.connect.type: Specifies the type connect with TDengine, `jni` or `WebSocket`. default is `jni`
+- httpConnectTimeout:WebSocket connection timeout in milliseconds, the default value is 5000 ms. It only takes effect when using WebSocket type.
+- messageWaitTimeout:socket timeout in milliseconds, the default value is 10000 ms. It only takes effect when using WebSocket type.
- For more information, see [Consumer Parameters](../../../develop/tmq).
#### Subscribe to consume data
@@ -724,6 +727,11 @@ For more information, see [Data Subscription](../../../develop/tmq).
### Usage examples
+
+
+
+In addition to the native connection, the Java Connector also supports subscribing via websocket.
+
```java
public abstract class ConsumerLoop {
private final TaosConsumer consumer;
@@ -795,6 +803,87 @@ public abstract class ConsumerLoop {
}
```
+
+
+
+```java
+public abstract class ConsumerLoop {
+ private final TaosConsumer consumer;
+ private final List topics;
+ private final AtomicBoolean shutdown;
+ private final CountDownLatch shutdownLatch;
+
+ public ConsumerLoop() throws SQLException {
+ Properties config = new Properties();
+ config.setProperty("bootstrap.servers", "localhost:6041");
+ config.setProperty("td.connect.type", "ws");
+ config.setProperty("msg.with.table.name", "true");
+ config.setProperty("enable.auto.commit", "true");
+ config.setProperty("group.id", "group2");
+ config.setProperty("value.deserializer", "com.taosdata.jdbc.tmq.ConsumerTest.ConsumerLoop$ResultDeserializer");
+
+ this.consumer = new TaosConsumer<>(config);
+ this.topics = Collections.singletonList("topic_speed");
+ this.shutdown = new AtomicBoolean(false);
+ this.shutdownLatch = new CountDownLatch(1);
+ }
+
+ public abstract void process(ResultBean result);
+
+ public void pollData() throws SQLException {
+ try {
+ consumer.subscribe(topics);
+
+ while (!shutdown.get()) {
+ ConsumerRecords records = consumer.poll(Duration.ofMillis(100));
+ for (ResultBean record : records) {
+ process(record);
+ }
+ }
+ consumer.unsubscribe();
+ } finally {
+ consumer.close();
+ shutdownLatch.countDown();
+ }
+ }
+
+ public void shutdown() throws InterruptedException {
+ shutdown.set(true);
+ shutdownLatch.await();
+ }
+
+ public static class ResultDeserializer extends ReferenceDeserializer {
+
+ }
+
+ public static class ResultBean {
+ private Timestamp ts;
+ private int speed;
+
+ public Timestamp getTs() {
+ return ts;
+ }
+
+ public void setTs(Timestamp ts) {
+ this.ts = ts;
+ }
+
+ public int getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(int speed) {
+ this.speed = speed;
+ }
+ }
+}
+```
+
+
+
+
+> **Note**: The value of value.deserializer should be adjusted based on the package path of the test environment.
+
### Use with connection pool
#### HikariCP
@@ -878,8 +967,8 @@ The source code of the sample application is under `TDengine/examples/JDBC`:
| taos-jdbcdriver version | major changes |
| :---------------------: | :--------------------------------------------: |
-| 3.0.3 | fix timestamp resolution error for REST connection in jdk17+ version |
-| 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.1.0 | JDBC REST connection supports subscription over WebSocket |
+| 3.0.1 - 3.0.4 | fix the resultSet data is parsed incorrectly sometimes. 3.0.1 is compiled on JDK 11, you are advised to use other version in the JDK 8 environment |
| 3.0.0 | Support for TDengine 3.0 |
| 2.0.42 | fix wasNull interface return value in WebSocket connection |
| 2.0.41 | fix decode method of username and password in REST connection |
diff --git a/docs/en/28-releases/01-tdengine.md b/docs/en/28-releases/01-tdengine.md
index 0c5ccf3aef..6a62108062 100644
--- a/docs/en/28-releases/01-tdengine.md
+++ b/docs/en/28-releases/01-tdengine.md
@@ -10,6 +10,10 @@ For TDengine 2.x installation packages by version, please visit [here](https://w
import Release from "/components/ReleaseV3";
+## 3.0.2.6
+
+
+
## 3.0.2.5
diff --git a/docs/en/28-releases/02-tools.md b/docs/en/28-releases/02-tools.md
index 29dd605c8c..91eb0c9b8d 100644
--- a/docs/en/28-releases/02-tools.md
+++ b/docs/en/28-releases/02-tools.md
@@ -10,6 +10,10 @@ For other historical version installers, please visit [here](https://www.taosdat
import Release from "/components/ReleaseV3";
+## 2.4.6
+
+
+
## 2.4.3
diff --git a/docs/examples/java/pom.xml b/docs/examples/java/pom.xml
index 634c3f75a8..01d0ce936c 100644
--- a/docs/examples/java/pom.xml
+++ b/docs/examples/java/pom.xml
@@ -1,6 +1,7 @@
-
4.0.0
@@ -17,13 +18,13 @@
-
+
com.taosdata.jdbc
taos-jdbcdriver
- 3.0.0
+ 3.1.0
-
+
junit
junit
@@ -32,4 +33,4 @@
-
+
\ No newline at end of file
diff --git a/docs/examples/java/src/main/java/com/taos/example/WebsocketSubscribeDemo.java b/docs/examples/java/src/main/java/com/taos/example/WebsocketSubscribeDemo.java
new file mode 100644
index 0000000000..d953a73641
--- /dev/null
+++ b/docs/examples/java/src/main/java/com/taos/example/WebsocketSubscribeDemo.java
@@ -0,0 +1,79 @@
+package com.taos.example;
+
+import com.taosdata.jdbc.tmq.ConsumerRecords;
+import com.taosdata.jdbc.tmq.TMQConstants;
+import com.taosdata.jdbc.tmq.TaosConsumer;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.time.Duration;
+import java.util.Collections;
+import java.util.Properties;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class WebsocketSubscribeDemo {
+ private static final String TOPIC = "tmq_topic_ws";
+ private static final String DB_NAME = "meters_ws";
+ private static final AtomicBoolean shutdown = new AtomicBoolean(false);
+
+ public static void main(String[] args) {
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+ public void run() {
+ shutdown.set(true);
+ }
+ }, 3_000);
+ try {
+ // prepare
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ String jdbcUrl = "jdbc:TAOS-RS://127.0.0.1:6041/?user=root&password=taosdata&batchfetch=true";
+ try (Connection connection = DriverManager.getConnection(jdbcUrl);
+ Statement statement = connection.createStatement()) {
+ statement.executeUpdate("drop topic if exists " + TOPIC);
+ statement.executeUpdate("drop database if exists " + DB_NAME);
+ statement.executeUpdate("create database " + DB_NAME);
+ statement.executeUpdate("use " + DB_NAME);
+ statement.executeUpdate(
+ "CREATE TABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT) TAGS (`groupid` INT, `location` BINARY(24))");
+ statement.executeUpdate("CREATE TABLE `d0` USING `meters` TAGS(0, 'California.LosAngles')");
+ statement.executeUpdate("INSERT INTO `d0` values(now - 10s, 0.32, 116)");
+ statement.executeUpdate("INSERT INTO `d0` values(now - 8s, NULL, NULL)");
+ statement.executeUpdate(
+ "INSERT INTO `d1` USING `meters` TAGS(1, 'California.SanFrancisco') values(now - 9s, 10.1, 119)");
+ statement.executeUpdate(
+ "INSERT INTO `d1` values (now-8s, 10, 120) (now - 6s, 10, 119) (now - 4s, 11.2, 118)");
+ // create topic
+ statement.executeUpdate("create topic " + TOPIC + " as select * from meters");
+ }
+
+ // create consumer
+ Properties properties = new Properties();
+ properties.setProperty(TMQConstants.BOOTSTRAP_SERVERS, "127.0.0.1:6041");
+ properties.setProperty(TMQConstants.CONNECT_TYPE, "ws");
+ properties.setProperty(TMQConstants.MSG_WITH_TABLE_NAME, "true");
+ properties.setProperty(TMQConstants.ENABLE_AUTO_COMMIT, "true");
+ properties.setProperty(TMQConstants.GROUP_ID, "test");
+ properties.setProperty(TMQConstants.VALUE_DESERIALIZER,
+ "com.taos.example.MetersDeserializer");
+
+ // poll data
+ try (TaosConsumer consumer = new TaosConsumer<>(properties)) {
+ consumer.subscribe(Collections.singletonList(TOPIC));
+ while (!shutdown.get()) {
+ ConsumerRecords meters = consumer.poll(Duration.ofMillis(100));
+ for (Meters meter : meters) {
+ System.out.println(meter);
+ }
+ }
+ consumer.unsubscribe();
+ }
+ } catch (ClassNotFoundException | SQLException e) {
+ e.printStackTrace();
+ }
+ timer.cancel();
+ }
+}
diff --git a/docs/examples/java/src/test/java/com/taos/test/TestAll.java b/docs/examples/java/src/test/java/com/taos/test/TestAll.java
index 8d201da074..f24156d8b1 100644
--- a/docs/examples/java/src/test/java/com/taos/test/TestAll.java
+++ b/docs/examples/java/src/test/java/com/taos/test/TestAll.java
@@ -64,21 +64,15 @@ public class TestAll {
@Test
public void testSubscribe() {
-
- Thread thread = new Thread(() -> {
- try {
- Thread.sleep(1000);
- insertData();
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- });
- thread.start();
SubscribeDemo.main(args);
}
+
+ @Test
+ public void testSubscribeOverWebsocket() {
+ WebsocketSubscribeDemo.main(args);
+ }
+
@Test
public void testSchemaless() throws SQLException {
LineProtocolExample.main(args);
diff --git a/docs/zh/07-develop/_sub_java.mdx b/docs/zh/07-develop/_sub_java.mdx
index e7de158cc8..9f1fa5bdd9 100644
--- a/docs/zh/07-develop/_sub_java.mdx
+++ b/docs/zh/07-develop/_sub_java.mdx
@@ -1,3 +1,6 @@
+
+
+
```java
{{#include docs/examples/java/src/main/java/com/taos/example/SubscribeDemo.java}}
```
@@ -6,4 +9,20 @@
```
```java
{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
-```
\ No newline at end of file
+```
+
+
+
+
+```java
+{{#include docs/examples/java/src/main/java/com/taos/example/WebsocketSubscribeDemo.java}}
+```
+```java
+{{#include docs/examples/java/src/main/java/com/taos/example/MetersDeserializer.java}}
+```
+```java
+{{#include docs/examples/java/src/main/java/com/taos/example/Meters.java}}
+```
+
+
+
diff --git a/docs/zh/08-connector/14-java.mdx b/docs/zh/08-connector/14-java.mdx
index fc6dc57138..061475f51e 100644
--- a/docs/zh/08-connector/14-java.mdx
+++ b/docs/zh/08-connector/14-java.mdx
@@ -699,7 +699,10 @@ TaosConsumer consumer = new TaosConsumer<>(config);
- enable.auto.commit: 是否允许自动提交。
- group.id: consumer: 所在的 group。
- value.deserializer: 结果集反序列化方法,可以继承 `com.taosdata.jdbc.tmq.ReferenceDeserializer`,并指定结果集 bean,实现反序列化。也可以继承 `com.taosdata.jdbc.tmq.Deserializer`,根据 SQL 的 resultSet 自定义反序列化方式。
-- 其他参数请参考:[Consumer 参数列表](../../../develop/tmq#创建-consumer-以及consumer-group)
+- td.connect.type: 连接方式。jni:表示使用动态库连接的方式,ws/WebSocket:表示使用 WebSocket 进行数据通信。默认为 jni 方式。
+- httpConnectTimeout:创建连接超时参数,单位 ms,默认为 5000 ms。仅在 WebSocket 连接下有效。
+- messageWaitTimeout:数据传输超时参数,单位 ms,默认为 10000 ms。仅在 WebSocket 连接下有效。
+其他参数请参考:[Consumer 参数列表](../../../develop/tmq#创建-consumer-以及consumer-group)
#### 订阅消费数据
@@ -727,6 +730,9 @@ consumer.close()
### 使用示例如下:
+
+
+
```java
public abstract class ConsumerLoop {
private final TaosConsumer consumer;
@@ -798,6 +804,89 @@ public abstract class ConsumerLoop {
}
```
+
+
+
+除了原生的连接方式,Java 连接器还支持通过 WebSocket 订阅数据。
+
+```java
+public abstract class ConsumerLoop {
+ private final TaosConsumer consumer;
+ private final List topics;
+ private final AtomicBoolean shutdown;
+ private final CountDownLatch shutdownLatch;
+
+ public ConsumerLoop() throws SQLException {
+ Properties config = new Properties();
+ config.setProperty("bootstrap.servers", "localhost:6041");
+ config.setProperty("td.connect.type", "ws");
+ config.setProperty("msg.with.table.name", "true");
+ config.setProperty("enable.auto.commit", "true");
+ config.setProperty("group.id", "group2");
+ config.setProperty("value.deserializer", "com.taosdata.jdbc.tmq.ConsumerTest.ConsumerLoop$ResultDeserializer");
+
+ this.consumer = new TaosConsumer<>(config);
+ this.topics = Collections.singletonList("topic_speed");
+ this.shutdown = new AtomicBoolean(false);
+ this.shutdownLatch = new CountDownLatch(1);
+ }
+
+ public abstract void process(ResultBean result);
+
+ public void pollData() throws SQLException {
+ try {
+ consumer.subscribe(topics);
+
+ while (!shutdown.get()) {
+ ConsumerRecords records = consumer.poll(Duration.ofMillis(100));
+ for (ResultBean record : records) {
+ process(record);
+ }
+ }
+ consumer.unsubscribe();
+ } finally {
+ consumer.close();
+ shutdownLatch.countDown();
+ }
+ }
+
+ public void shutdown() throws InterruptedException {
+ shutdown.set(true);
+ shutdownLatch.await();
+ }
+
+ public static class ResultDeserializer extends ReferenceDeserializer {
+
+ }
+
+ public static class ResultBean {
+ private Timestamp ts;
+ private int speed;
+
+ public Timestamp getTs() {
+ return ts;
+ }
+
+ public void setTs(Timestamp ts) {
+ this.ts = ts;
+ }
+
+ public int getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(int speed) {
+ this.speed = speed;
+ }
+ }
+}
+```
+
+
+
+
+> **注意**:这里的 value.deserializer 配置参数值应该根据测试环境的包路径做相应的调整。
+
### 与连接池使用
#### HikariCP
@@ -881,8 +970,8 @@ public static void main(String[] args) throws Exception {
| taos-jdbcdriver 版本 | 主要变化 |
| :------------------: | :----------------------------: |
-| 3.0.3 | 修复 REST 连接在 jdk17+ 版本时间戳解析错误问题 |
-| 3.0.1 - 3.0.2 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用 3.0.2 版本 |
+| 3.1.0 | WebSocket 连接支持订阅功能 |
+| 3.0.1 - 3.0.4 | 修复一些情况下结果集数据解析错误的问题。3.0.1 在 JDK 11 环境编译,JDK 8 环境下建议使用其他版本 |
| 3.0.0 | 支持 TDengine 3.0 |
| 2.0.42 | 修在 WebSocket 连接中 wasNull 接口返回值 |
| 2.0.41 | 修正 REST 连接中用户名和密码转码方式 |
diff --git a/docs/zh/28-releases/01-tdengine.md b/docs/zh/28-releases/01-tdengine.md
index cf7bf83164..c9505d95a5 100644
--- a/docs/zh/28-releases/01-tdengine.md
+++ b/docs/zh/28-releases/01-tdengine.md
@@ -10,6 +10,10 @@ TDengine 2.x 各版本安装包请访问[这里](https://www.taosdata.com/all-do
import Release from "/components/ReleaseV3";
+## 3.0.2.6
+
+
+
## 3.0.2.5
diff --git a/docs/zh/28-releases/02-tools.md b/docs/zh/28-releases/02-tools.md
index 5f277b4873..69d35f95c8 100644
--- a/docs/zh/28-releases/02-tools.md
+++ b/docs/zh/28-releases/02-tools.md
@@ -10,6 +10,10 @@ taosTools 各版本安装包下载链接如下:
import Release from "/components/ReleaseV3";
+## 2.4.6
+
+
+
## 2.4.3
diff --git a/examples/c/tmq.c b/examples/c/tmq.c
index eb41ad039a..1e3a828e02 100644
--- a/examples/c/tmq.c
+++ b/examples/c/tmq.c
@@ -191,21 +191,45 @@ tmq_t* build_consumer() {
tmq_conf_res_t code;
tmq_conf_t* conf = tmq_conf_new();
code = tmq_conf_set(conf, "enable.auto.commit", "true");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "auto.commit.interval.ms", "1000");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "group.id", "cgrpName");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "client.id", "user defined name");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "td.connect.user", "root");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "td.connect.pass", "taosdata");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "auto.offset.reset", "earliest");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
code = tmq_conf_set(conf, "experimental.snapshot.enable", "false");
- if (TMQ_CONF_OK != code) return NULL;
+ if (TMQ_CONF_OK != code) {
+ tmq_conf_destroy(conf);
+ return NULL;
+ }
tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL);
diff --git a/include/common/tcommon.h b/include/common/tcommon.h
index f4e13509c2..2a40976a8b 100644
--- a/include/common/tcommon.h
+++ b/include/common/tcommon.h
@@ -205,7 +205,7 @@ typedef struct SDataBlockInfo {
STimeWindow calWin; // used for stream, do not serialize
TSKEY watermark; // used for stream
- char parTbName[TSDB_TABLE_NAME_LEN]; // used for stream partition
+ char parTbName[TSDB_TABLE_NAME_LEN]; // used for stream partition
} SDataBlockInfo;
typedef struct SSDataBlock {
@@ -291,7 +291,6 @@ typedef struct STableBlockDistInfo {
uint16_t numOfFiles;
uint32_t numOfTables;
uint32_t numOfBlocks;
- uint32_t numOfVgroups;
uint64_t totalSize;
uint64_t totalRows;
int32_t maxRows;
@@ -301,6 +300,7 @@ typedef struct STableBlockDistInfo {
int32_t firstSeekTimeUs;
uint32_t numOfInmemRows;
uint32_t numOfSmallBlocks;
+ uint32_t numOfVgroups;
int32_t blockRowsHisto[20];
} STableBlockDistInfo;
@@ -341,7 +341,7 @@ typedef struct SExprInfo {
typedef struct {
const char* key;
- size_t keyLen;
+ size_t keyLen;
uint8_t type;
union {
const char* value;
@@ -385,9 +385,9 @@ typedef struct STUidTagInfo {
#define TABLE_NAME_COLUMN_INDEX 6
// stream create table block column
-#define UD_TABLE_NAME_COLUMN_INDEX 0
-#define UD_GROUPID_COLUMN_INDEX 1
-#define UD_TAG_COLUMN_INDEX 2
+#define UD_TABLE_NAME_COLUMN_INDEX 0
+#define UD_GROUPID_COLUMN_INDEX 1
+#define UD_TAG_COLUMN_INDEX 2
#ifdef __cplusplus
}
diff --git a/include/common/tmsg.h b/include/common/tmsg.h
index 77b9d2d681..d389d572f6 100644
--- a/include/common/tmsg.h
+++ b/include/common/tmsg.h
@@ -2850,7 +2850,7 @@ typedef struct {
char dbFName[TSDB_DB_FNAME_LEN];
char stbName[TSDB_TABLE_NAME_LEN];
char colName[TSDB_COL_NAME_LEN];
- char idxName[TSDB_COL_NAME_LEN];
+ char idxName[TSDB_INDEX_FNAME_LEN];
int8_t idxType;
} SCreateTagIndexReq;
diff --git a/include/os/osMemory.h b/include/os/osMemory.h
index 3b9c0fe94b..3f57c72933 100644
--- a/include/os/osMemory.h
+++ b/include/os/osMemory.h
@@ -29,6 +29,7 @@ extern "C" {
#define calloc CALLOC_FUNC_TAOS_FORBID
#define realloc REALLOC_FUNC_TAOS_FORBID
#define free FREE_FUNC_TAOS_FORBID
+#define strdup STRDUP_FUNC_TAOS_FORBID
#endif // ifndef ALLOW_FORBID_FUNC
#endif // if !defined(WINDOWS)
@@ -38,7 +39,7 @@ int32_t taosMemoryDbgInitRestore();
void *taosMemoryMalloc(int64_t size);
void *taosMemoryCalloc(int64_t num, int64_t size);
void *taosMemoryRealloc(void *ptr, int64_t size);
-void *taosMemoryStrDup(const char *ptr);
+char *taosStrdup(const char *ptr);
void taosMemoryFree(void *ptr);
int64_t taosMemorySize(void *ptr);
void taosPrintBackTrace();
diff --git a/packaging/docker/DockerfileCloud b/packaging/docker/DockerfileCloud
deleted file mode 100644
index fa8fcabf34..0000000000
--- a/packaging/docker/DockerfileCloud
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM ubuntu:18.04
-
-WORKDIR /root
-
-ARG pkgFile
-ARG dirName
-ARG cpuType
-RUN echo ${pkgFile} && echo ${dirName}
-
-RUN apt update
-RUN apt install -y curl
-
-COPY ${pkgFile} /root/
-ENV TINI_VERSION v0.19.0
-ENV TAOS_DISABLE_ADAPTER 1
-ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${cpuType} /tini
-ENV DEBIAN_FRONTEND=noninteractive
-WORKDIR /root/
-RUN tar -zxf ${pkgFile} && cd /root/${dirName}/ && /bin/bash install.sh -e no && cd /root && rm /root/${pkgFile} && rm -rf /root/${dirName} && apt-get update && apt-get install -y locales tzdata netcat && locale-gen en_US.UTF-8 && apt-get clean && rm -rf /var/lib/apt/lists/ && chmod +x /tini
-
-ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib" \
- LC_CTYPE=en_US.UTF-8 \
- LANG=en_US.UTF-8 \
- LC_ALL=en_US.UTF-8
-COPY ./run.sh /usr/bin/
-COPY ./bin/* /usr/bin/
-
-ENTRYPOINT ["/tini", "--", "/usr/bin/entrypoint.sh"]
-CMD ["bash", "-c", "/usr/bin/run.sh"]
-VOLUME [ "/var/lib/taos", "/var/log/taos" ]
diff --git a/source/client/src/clientHb.c b/source/client/src/clientHb.c
index 3cb8a2e1bd..0c16d658fe 100644
--- a/source/client/src/clientHb.c
+++ b/source/client/src/clientHb.c
@@ -758,7 +758,7 @@ static void *hbThreadFunc(void *param) {
pInfo->msgInfo.pData = buf;
pInfo->msgInfo.len = tlen;
pInfo->msgType = TDMT_MND_HEARTBEAT;
- pInfo->param = strdup(pAppHbMgr->key);
+ pInfo->param = taosStrdup(pAppHbMgr->key);
pInfo->paramFreeFp = taosMemoryFree;
pInfo->requestId = generateRequestId();
pInfo->requestObjRefId = 0;
@@ -826,7 +826,7 @@ SAppHbMgr *appHbMgrInit(SAppInstInfo *pAppInstInfo, char *key) {
pAppHbMgr->connKeyCnt = 0;
pAppHbMgr->reportCnt = 0;
pAppHbMgr->reportBytes = 0;
- pAppHbMgr->key = strdup(key);
+ pAppHbMgr->key = taosStrdup(key);
// init app info
pAppHbMgr->pAppInstInfo = pAppInstInfo;
diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c
index f63069d08b..a6d2fad816 100644
--- a/source/client/src/clientImpl.c
+++ b/source/client/src/clientImpl.c
@@ -52,7 +52,7 @@ static bool validateDbName(const char* db) { return stringLengthCheck(db, TSDB_D
static char* getClusterKey(const char* user, const char* auth, const char* ip, int32_t port) {
char key[512] = {0};
snprintf(key, sizeof(key), "%s:%s:%s:%d", user, auth, ip, port);
- return strdup(key);
+ return taosStrdup(key);
}
bool chkRequestKilled(void* param) {
diff --git a/source/client/src/clientTmq.c b/source/client/src/clientTmq.c
index 540cec1de3..c507bf0c89 100644
--- a/source/client/src/clientTmq.c
+++ b/source/client/src/clientTmq.c
@@ -330,15 +330,15 @@ tmq_conf_res_t tmq_conf_set(tmq_conf_t* conf, const char* key, const char* value
}
if (strcmp(key, "td.connect.ip") == 0) {
- conf->ip = strdup(value);
+ conf->ip = taosStrdup(value);
return TMQ_CONF_OK;
}
if (strcmp(key, "td.connect.user") == 0) {
- conf->user = strdup(value);
+ conf->user = taosStrdup(value);
return TMQ_CONF_OK;
}
if (strcmp(key, "td.connect.pass") == 0) {
- conf->pass = strdup(value);
+ conf->pass = taosStrdup(value);
return TMQ_CONF_OK;
}
if (strcmp(key, "td.connect.port") == 0) {
@@ -346,7 +346,7 @@ tmq_conf_res_t tmq_conf_set(tmq_conf_t* conf, const char* key, const char* value
return TMQ_CONF_OK;
}
if (strcmp(key, "td.connect.db") == 0) {
- /*conf->db = strdup(value);*/
+ /*conf->db = taosStrdup(value);*/
return TMQ_CONF_OK;
}
@@ -361,7 +361,7 @@ tmq_list_t* tmq_list_new() {
int32_t tmq_list_append(tmq_list_t* list, const char* src) {
SArray* container = &list->container;
if (src == NULL || src[0] == 0) return -1;
- char* topic = strdup(src);
+ char* topic = taosStrdup(src);
if (topic[0] != '`') {
strtolower(topic, src);
}
diff --git a/source/common/src/tdatablock.c b/source/common/src/tdatablock.c
index e866203372..15aa7b4297 100644
--- a/source/common/src/tdatablock.c
+++ b/source/common/src/tdatablock.c
@@ -1033,6 +1033,7 @@ SHelper* createTupleIndex_rv(int32_t numOfRows, SArray* pOrderInfo, SSDataBlock*
offset += pInfo->pColData->info.bytes;
}
+ taosMemoryFree(buf);
return phelper;
}
@@ -2370,7 +2371,11 @@ _end:
taosArrayDestroy(pVals);
if (terrno != 0) {
*ppReq = NULL;
- if (pReq) tDestroySSubmitReq2(pReq, TSDB_MSG_FLG_ENCODE);
+ if (pReq) {
+ tDestroySSubmitReq2(pReq, TSDB_MSG_FLG_ENCODE);
+ taosMemoryFreeClear(pReq);
+ }
+
return TSDB_CODE_FAILED;
}
*ppReq = pReq;
diff --git a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
index 8049db9c78..8008e5f810 100644
--- a/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
+++ b/source/dnode/mgmt/mgmt_vnode/src/vmInt.c
@@ -53,7 +53,7 @@ int32_t vmOpenVnode(SVnodeMgmt *pMgmt, SWrapperCfg *pCfg, SVnode *pImpl) {
pVnode->vgVersion = pCfg->vgVersion;
pVnode->refCount = 0;
pVnode->dropped = 0;
- pVnode->path = tstrdup(pCfg->path);
+ pVnode->path = taosStrdup(pCfg->path);
pVnode->pImpl = pImpl;
if (pVnode->path == NULL) {
diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
index 3dd8a19d92..d884120147 100644
--- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
+++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c
@@ -124,7 +124,7 @@ int32_t dmInitDnode(SDnode *pDnode) {
taosThreadRwlockInit(&pWrapper->lock, NULL);
snprintf(path, sizeof(path), "%s%s%s", tsDataDir, TD_DIRSEP, pWrapper->name);
- pWrapper->path = strdup(path);
+ pWrapper->path = taosStrdup(path);
if (pWrapper->path == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
goto _OVER;
diff --git a/source/dnode/mgmt/node_mgmt/src/dmTransport.c b/source/dnode/mgmt/node_mgmt/src/dmTransport.c
index 8abce50cf0..23a047d49a 100644
--- a/source/dnode/mgmt/node_mgmt/src/dmTransport.c
+++ b/source/dnode/mgmt/node_mgmt/src/dmTransport.c
@@ -93,18 +93,30 @@ static void dmProcessRpcMsg(SDnode *pDnode, SRpcMsg *pRpc, SEpSet *pEpSet) {
break;
}
- if (pDnode->status != DND_STAT_RUNNING) {
- if (pRpc->msgType == TDMT_DND_SERVER_STATUS) {
- dmProcessServerStartupStatus(pDnode, pRpc);
- return;
- } else {
- if (pDnode->status == DND_STAT_INIT) {
- terrno = TSDB_CODE_APP_IS_STARTING;
+/*
+pDnode is null, TD-22618
+at trans.c line 91
+before this line, dmProcessRpcMsg callback is set
+after this line, parent is set
+so when dmProcessRpcMsg is called, pDonde is still null.
+*/
+ if (pDnode != NULL){
+ if(pDnode->status != DND_STAT_RUNNING) {
+ if (pRpc->msgType == TDMT_DND_SERVER_STATUS) {
+ dmProcessServerStartupStatus(pDnode, pRpc);
+ return;
} else {
- terrno = TSDB_CODE_APP_IS_STOPPING;
+ if (pDnode->status == DND_STAT_INIT) {
+ terrno = TSDB_CODE_APP_IS_STARTING;
+ } else {
+ terrno = TSDB_CODE_APP_IS_STOPPING;
+ }
+ goto _OVER;
}
- goto _OVER;
- }
+ }
+ } else {
+ terrno = TSDB_CODE_APP_IS_STARTING;
+ goto _OVER;
}
if (pRpc->pCont == NULL && (IsReq(pRpc) || pRpc->contLen != 0)) {
diff --git a/source/dnode/mnode/impl/src/mndConsumer.c b/source/dnode/mnode/impl/src/mndConsumer.c
index eb4fc3cdad..900a7acda4 100644
--- a/source/dnode/mnode/impl/src/mndConsumer.c
+++ b/source/dnode/mnode/impl/src/mndConsumer.c
@@ -577,7 +577,7 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
subscribe.topicNames = NULL;
for (int32_t i = 0; i < newTopicNum; i++) {
- char *newTopicCopy = strdup(taosArrayGetP(newSub, i));
+ char *newTopicCopy = taosStrdup(taosArrayGetP(newSub, i));
taosArrayPush(pConsumerNew->assignedTopics, &newTopicCopy);
}
@@ -605,7 +605,7 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
pConsumerNew->updateType = CONSUMER_UPDATE__MODIFY;
for (int32_t i = 0; i < newTopicNum; i++) {
- char *newTopicCopy = strdup(taosArrayGetP(newSub, i));
+ char *newTopicCopy = taosStrdup(taosArrayGetP(newSub, i));
taosArrayPush(pConsumerNew->assignedTopics, &newTopicCopy);
}
@@ -617,12 +617,12 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
int32_t i = 0, j = 0;
while (i < oldTopicNum || j < newTopicNum) {
if (i >= oldTopicNum) {
- char *newTopicCopy = strdup(taosArrayGetP(newSub, j));
+ char *newTopicCopy = taosStrdup(taosArrayGetP(newSub, j));
taosArrayPush(pConsumerNew->rebNewTopics, &newTopicCopy);
j++;
continue;
} else if (j >= newTopicNum) {
- char *oldTopicCopy = strdup(taosArrayGetP(pConsumerOld->currentTopics, i));
+ char *oldTopicCopy = taosStrdup(taosArrayGetP(pConsumerOld->currentTopics, i));
taosArrayPush(pConsumerNew->rebRemovedTopics, &oldTopicCopy);
i++;
continue;
@@ -635,12 +635,12 @@ static int32_t mndProcessSubscribeReq(SRpcMsg *pMsg) {
j++;
continue;
} else if (comp < 0) {
- char *oldTopicCopy = strdup(oldTopic);
+ char *oldTopicCopy = taosStrdup(oldTopic);
taosArrayPush(pConsumerNew->rebRemovedTopics, &oldTopicCopy);
i++;
continue;
} else {
- char *newTopicCopy = strdup(newTopic);
+ char *newTopicCopy = taosStrdup(newTopic);
taosArrayPush(pConsumerNew->rebNewTopics, &newTopicCopy);
j++;
continue;
@@ -808,7 +808,7 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
int32_t sz = taosArrayGetSize(pOldConsumer->currentTopics);
/*pOldConsumer->rebRemovedTopics = taosArrayInit(sz, sizeof(void *));*/
for (int32_t i = 0; i < sz; i++) {
- char *topic = strdup(taosArrayGetP(pOldConsumer->currentTopics, i));
+ char *topic = taosStrdup(taosArrayGetP(pOldConsumer->currentTopics, i));
taosArrayPush(pOldConsumer->rebRemovedTopics, &topic);
}
@@ -821,7 +821,7 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
int32_t sz = taosArrayGetSize(pOldConsumer->assignedTopics);
for (int32_t i = 0; i < sz; i++) {
- char *topic = strdup(taosArrayGetP(pOldConsumer->assignedTopics, i));
+ char *topic = taosStrdup(taosArrayGetP(pOldConsumer->assignedTopics, i));
taosArrayPush(pOldConsumer->rebNewTopics, &topic);
}
@@ -837,7 +837,7 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
/*A(taosArrayGetSize(pNewConsumer->rebNewTopics) == 1);*/
/*A(taosArrayGetSize(pNewConsumer->rebRemovedTopics) == 0);*/
- char *addedTopic = strdup(taosArrayGetP(pNewConsumer->rebNewTopics, 0));
+ char *addedTopic = taosStrdup(taosArrayGetP(pNewConsumer->rebNewTopics, 0));
// not exist in current topic
bool existing = false;
@@ -864,6 +864,8 @@ static int32_t mndConsumerActionUpdate(SSdb *pSdb, SMqConsumerObj *pOldConsumer,
if (!existing) {
taosArrayPush(pOldConsumer->currentTopics, &addedTopic);
taosArraySort(pOldConsumer->currentTopics, taosArrayCompareString);
+ } else {
+ taosMemoryFree(addedTopic);
}
// set status
diff --git a/source/dnode/mnode/impl/src/mndDef.c b/source/dnode/mnode/impl/src/mndDef.c
index 38001a97bb..fb81a764f1 100644
--- a/source/dnode/mnode/impl/src/mndDef.c
+++ b/source/dnode/mnode/impl/src/mndDef.c
@@ -181,7 +181,7 @@ SMqVgEp *tCloneSMqVgEp(const SMqVgEp *pVgEp) {
SMqVgEp *pVgEpNew = taosMemoryMalloc(sizeof(SMqVgEp));
if (pVgEpNew == NULL) return NULL;
pVgEpNew->vgId = pVgEp->vgId;
- pVgEpNew->qmsg = strdup(pVgEp->qmsg);
+ pVgEpNew->qmsg = taosStrdup(pVgEp->qmsg);
pVgEpNew->epSet = pVgEp->epSet;
return pVgEpNew;
}
diff --git a/source/dnode/mnode/impl/src/mndDump.c b/source/dnode/mnode/impl/src/mndDump.c
index 7d0f5742f8..44a7d49fff 100644
--- a/source/dnode/mnode/impl/src/mndDump.c
+++ b/source/dnode/mnode/impl/src/mndDump.c
@@ -629,7 +629,7 @@ void mndDumpSdb() {
}
taosWriteFile(pFile, pCont, contLen);
taosWriteFile(pFile, "\n", 1);
- taosFsyncFile(pFile);
+ UNUSED(taosFsyncFile(pFile));
taosCloseFile(&pFile);
tjsonDelete(json);
taosMemoryFree(pCont);
diff --git a/source/dnode/mnode/impl/src/mndMain.c b/source/dnode/mnode/impl/src/mndMain.c
index 70ba7ed4ef..53a5548b2f 100644
--- a/source/dnode/mnode/impl/src/mndMain.c
+++ b/source/dnode/mnode/impl/src/mndMain.c
@@ -322,7 +322,7 @@ static void mndCleanupTimer(SMnode *pMnode) {
}
static int32_t mndCreateDir(SMnode *pMnode, const char *path) {
- pMnode->path = strdup(path);
+ pMnode->path = taosStrdup(path);
if (pMnode->path == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -716,7 +716,7 @@ int32_t mndProcessRpcMsg(SRpcMsg *pMsg) {
} else if (code == 0) {
mGTrace("msg:%p, successfully processed", pMsg);
} else {
- mGError("msg:%p, failed to process since %s, app:%p type:%s", pMsg, terrstr(), pMsg->info.ahandle,
+ mGError("msg:%p, failed to process since %s, app:%p type:%s", pMsg, tstrerror(code), pMsg->info.ahandle,
TMSG_INFO(pMsg->msgType));
}
diff --git a/source/dnode/mnode/impl/src/mndScheduler.c b/source/dnode/mnode/impl/src/mndScheduler.c
index bdef8000bd..64a69d57f3 100644
--- a/source/dnode/mnode/impl/src/mndScheduler.c
+++ b/source/dnode/mnode/impl/src/mndScheduler.c
@@ -587,7 +587,7 @@ int32_t mndSchedInitSubEp(SMnode* pMnode, const SMqTopicObj* pTopic, SMqSubscrib
return -1;
}
} else {
- pVgEp->qmsg = strdup("");
+ pVgEp->qmsg = taosStrdup("");
}
sdbRelease(pSdb, pVgroup);
diff --git a/source/dnode/mnode/impl/src/mndSma.c b/source/dnode/mnode/impl/src/mndSma.c
index c10851cfad..171fa7c5d1 100644
--- a/source/dnode/mnode/impl/src/mndSma.c
+++ b/source/dnode/mnode/impl/src/mndSma.c
@@ -552,14 +552,14 @@ static int32_t mndCreateSma(SMnode *pMnode, SRpcMsg *pReq, SMCreateSmaReq *pCrea
streamObj.sourceDbUid = pDb->uid;
streamObj.targetDbUid = pDb->uid;
streamObj.version = 1;
- streamObj.sql = strdup(pCreate->sql);
+ streamObj.sql = taosStrdup(pCreate->sql);
streamObj.smaId = smaObj.uid;
streamObj.watermark = pCreate->watermark;
streamObj.deleteMark = pCreate->deleteMark;
streamObj.fillHistory = STREAM_FILL_HISTORY_ON;
streamObj.trigger = STREAM_TRIGGER_WINDOW_CLOSE;
streamObj.triggerParam = pCreate->maxDelay;
- streamObj.ast = strdup(smaObj.ast);
+ streamObj.ast = taosStrdup(smaObj.ast);
// check the maxDelay
if (streamObj.triggerParam < TSDB_MIN_ROLLUP_MAX_DELAY) {
diff --git a/source/dnode/mnode/impl/src/mndStb.c b/source/dnode/mnode/impl/src/mndStb.c
index 499136084e..4b43432f1b 100644
--- a/source/dnode/mnode/impl/src/mndStb.c
+++ b/source/dnode/mnode/impl/src/mndStb.c
@@ -893,7 +893,7 @@ static int32_t mndProcessTtlTimer(SRpcMsg *pReq) {
static int32_t mndFindSuperTableTagIndex(const SStbObj *pStb, const char *tagName) {
for (int32_t tag = 0; tag < pStb->numOfTags; tag++) {
- if (strcasecmp(pStb->pTags[tag].name, tagName) == 0) {
+ if (strcmp(pStb->pTags[tag].name, tagName) == 0) {
return tag;
}
}
@@ -903,7 +903,7 @@ static int32_t mndFindSuperTableTagIndex(const SStbObj *pStb, const char *tagNam
static int32_t mndFindSuperTableColumnIndex(const SStbObj *pStb, const char *colName) {
for (int32_t col = 0; col < pStb->numOfColumns; col++) {
- if (strcasecmp(pStb->pColumns[col].name, colName) == 0) {
+ if (strcmp(pStb->pColumns[col].name, colName) == 0) {
return col;
}
}
@@ -1734,7 +1734,7 @@ static int32_t mndBuildStbCfgImp(SDbObj *pDb, SStbObj *pStb, const char *tbName,
pRsp->ttl = pStb->ttl;
pRsp->commentLen = pStb->commentLen;
if (pStb->commentLen > 0) {
- pRsp->pComment = strdup(pStb->comment);
+ pRsp->pComment = taosStrdup(pStb->comment);
}
for (int32_t i = 0; i < pStb->numOfColumns; ++i) {
diff --git a/source/dnode/mnode/impl/src/mndStream.c b/source/dnode/mnode/impl/src/mndStream.c
index 47ebdd706d..dbfe7b53de 100644
--- a/source/dnode/mnode/impl/src/mndStream.c
+++ b/source/dnode/mnode/impl/src/mndStream.c
@@ -354,7 +354,7 @@ static int32_t mndBuildStreamObjFromCreateReq(SMnode *pMnode, SStreamObj *pObj,
int32_t dataIndex = 0;
for (int16_t i = 0; i < pObj->outputSchema.nCols; i++) {
SColLocation *pos = taosArrayGet(pCreate->fillNullCols, nullIndex);
- if (i < pos->slotId) {
+ if (nullIndex >= numOfNULL || i < pos->slotId) {
pFullSchema[i].bytes = pObj->outputSchema.pSchema[dataIndex].bytes;
pFullSchema[i].colId = i + 1; // pObj->outputSchema.pSchema[dataIndex].colId;
pFullSchema[i].flags = pObj->outputSchema.pSchema[dataIndex].flags;
@@ -722,8 +722,10 @@ static int32_t mndProcessCreateStreamReq(SRpcMsg *pReq) {
mInfo("trans:%d, used to create stream:%s", pTrans->id, createStreamReq.name);
mndTransSetDbName(pTrans, createStreamReq.sourceDB, streamObj.targetDb);
- if (mndTrancCheckConflict(pMnode, pTrans) != 0) goto _OVER;
-
+ if (mndTrancCheckConflict(pMnode, pTrans) != 0) {
+ mndTransDrop(pTrans);
+ goto _OVER;
+ }
// create stb for stream
if (createStreamReq.createStb == STREAM_CREATE_STABLE_TRUE &&
mndCreateStbForStream(pMnode, pTrans, &streamObj, pReq->info.conn.user) < 0) {
diff --git a/source/dnode/mnode/impl/src/mndTopic.c b/source/dnode/mnode/impl/src/mndTopic.c
index 96dba24566..2c5c4788af 100644
--- a/source/dnode/mnode/impl/src/mndTopic.c
+++ b/source/dnode/mnode/impl/src/mndTopic.c
@@ -379,7 +379,7 @@ static int32_t mndCreateTopic(SMnode *pMnode, SRpcMsg *pReq, SCMCreateTopicReq *
topicObj.uid = mndGenerateUid(pCreate->name, strlen(pCreate->name));
topicObj.dbUid = pDb->uid;
topicObj.version = 1;
- topicObj.sql = strdup(pCreate->sql);
+ topicObj.sql = taosStrdup(pCreate->sql);
topicObj.sqlLen = strlen(pCreate->sql) + 1;
topicObj.subType = pCreate->subType;
topicObj.withMeta = pCreate->withMeta;
@@ -392,7 +392,7 @@ static int32_t mndCreateTopic(SMnode *pMnode, SRpcMsg *pReq, SCMCreateTopicReq *
}
if (pCreate->subType == TOPIC_SUB_TYPE__COLUMN) {
- topicObj.ast = strdup(pCreate->ast);
+ topicObj.ast = taosStrdup(pCreate->ast);
topicObj.astLen = strlen(pCreate->ast) + 1;
qDebugL("ast %s", topicObj.ast);
diff --git a/source/dnode/mnode/impl/test/trans/trans2.cpp b/source/dnode/mnode/impl/test/trans/trans2.cpp
index 89c2b6931a..2d03631a37 100644
--- a/source/dnode/mnode/impl/test/trans/trans2.cpp
+++ b/source/dnode/mnode/impl/test/trans/trans2.cpp
@@ -124,7 +124,7 @@ class MndTestTrans2 : public ::testing::Test {
mndTransAppendUndolog(pTrans, pUndoRaw);
sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED);
- char *param = strdup("====> test log <=====");
+ char *param = taosStrdup("====> test log <=====");
mndTransSetCb(pTrans, TRANS_START_FUNC_TEST, TRANS_STOP_FUNC_TEST, param, strlen(param) + 1);
if (pDb != NULL) {
@@ -157,7 +157,7 @@ class MndTestTrans2 : public ::testing::Test {
mndTransAppendUndolog(pTrans, pUndoRaw);
sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED);
- char *param = strdup("====> test action <=====");
+ char *param = taosStrdup("====> test action <=====");
mndTransSetCb(pTrans, TRANS_START_FUNC_TEST, TRANS_STOP_FUNC_TEST, param, strlen(param) + 1);
{
@@ -229,7 +229,7 @@ class MndTestTrans2 : public ::testing::Test {
mndTransAppendUndolog(pTrans, pUndoRaw);
sdbSetRawStatus(pUndoRaw, SDB_STATUS_DROPPED);
- char *param = strdup("====> test log <=====");
+ char *param = taosStrdup("====> test log <=====");
mndTransSetCb(pTrans, TRANS_START_FUNC_TEST, TRANS_STOP_FUNC_TEST, param, strlen(param) + 1);
int32_t code = mndTransPrepare(pMnode, pTrans);
diff --git a/source/dnode/mnode/sdb/src/sdb.c b/source/dnode/mnode/sdb/src/sdb.c
index 648ccff432..bb8040da07 100644
--- a/source/dnode/mnode/sdb/src/sdb.c
+++ b/source/dnode/mnode/sdb/src/sdb.c
@@ -30,9 +30,9 @@ SSdb *sdbInit(SSdbOpt *pOption) {
char path[PATH_MAX + 100] = {0};
snprintf(path, sizeof(path), "%s%sdata", pOption->path, TD_DIRSEP);
- pSdb->currDir = strdup(path);
+ pSdb->currDir = taosStrdup(path);
snprintf(path, sizeof(path), "%s%stmp", pOption->path, TD_DIRSEP);
- pSdb->tmpDir = strdup(path);
+ pSdb->tmpDir = taosStrdup(path);
if (pSdb->currDir == NULL || pSdb->tmpDir == NULL) {
sdbCleanup(pSdb);
terrno = TSDB_CODE_OUT_OF_MEMORY;
diff --git a/source/dnode/mnode/sdb/src/sdbFile.c b/source/dnode/mnode/sdb/src/sdbFile.c
index c2d7a9757a..c2df5205d6 100644
--- a/source/dnode/mnode/sdb/src/sdbFile.c
+++ b/source/dnode/mnode/sdb/src/sdbFile.c
@@ -521,7 +521,7 @@ static SSdbIter *sdbCreateIter(SSdb *pSdb) {
char name[PATH_MAX + 100] = {0};
snprintf(name, sizeof(name), "%s%ssdb.data.%" PRIu64, pSdb->tmpDir, TD_DIRSEP, (uint64_t)pIter);
- pIter->name = strdup(name);
+ pIter->name = taosStrdup(name);
if (pIter->name == NULL) {
taosMemoryFree(pIter);
terrno = TSDB_CODE_OUT_OF_MEMORY;
diff --git a/source/dnode/snode/src/snode.c b/source/dnode/snode/src/snode.c
index 1d2f4da26b..d4ca81a6a9 100644
--- a/source/dnode/snode/src/snode.c
+++ b/source/dnode/snode/src/snode.c
@@ -104,7 +104,7 @@ SSnode *sndOpen(const char *path, const SSnodeOpt *pOption) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
- pSnode->path = strdup(path);
+ pSnode->path = taosStrdup(path);
if (pSnode->path == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
goto FAIL;
diff --git a/source/dnode/vnode/src/meta/metaQuery.c b/source/dnode/vnode/src/meta/metaQuery.c
index 91518f7a0b..4b1163bb11 100644
--- a/source/dnode/vnode/src/meta/metaQuery.c
+++ b/source/dnode/vnode/src/meta/metaQuery.c
@@ -706,7 +706,7 @@ int32_t metaGetTbTSchemaEx(SMeta *pMeta, tb_uid_t suid, tb_uid_t uid, int32_t sv
}
}
- if (ASSERTS(sver > 0, __FILE__, __LINE__, "failed to get table schema version: %d", sver)) {
+ if (ASSERTS(sver > 0, "failed to get table schema version: %d", sver)) {
code = TSDB_CODE_NOT_FOUND;
goto _exit;
}
diff --git a/source/dnode/vnode/src/meta/metaSnapshot.c b/source/dnode/vnode/src/meta/metaSnapshot.c
index 6e505dfde5..67ade45732 100644
--- a/source/dnode/vnode/src/meta/metaSnapshot.c
+++ b/source/dnode/vnode/src/meta/metaSnapshot.c
@@ -252,7 +252,7 @@ static void saveSuperTableInfoForChildTable(SMetaEntry* me, SHashObj* suidInfo)
return;
}
STableInfoForChildTable dataTmp = {0};
- dataTmp.tableName = strdup(me->name);
+ dataTmp.tableName = taosStrdup(me->name);
dataTmp.schemaRow = tCloneSSchemaWrapper(&me->stbEntry.schemaRow);
dataTmp.tagRow = tCloneSSchemaWrapper(&me->stbEntry.schemaTag);
diff --git a/source/dnode/vnode/src/sma/smaRollup.c b/source/dnode/vnode/src/sma/smaRollup.c
index 809e553ab6..37ae7d895e 100644
--- a/source/dnode/vnode/src/sma/smaRollup.c
+++ b/source/dnode/vnode/src/sma/smaRollup.c
@@ -262,7 +262,7 @@ static int32_t tdSetRSmaInfoItemParams(SSma *pSma, SRSmaParam *param, SRSmaStat
// set the backend of stream state
tdRSmaQTaskInfoGetFullPathEx(TD_VID(pVnode), pRSmaInfo->suid, idx + 1, tfsGetPrimaryPath(pVnode->pTfs), taskInfDir);
if (!taosCheckExistFile(taskInfDir)) {
- char *s = strdup(taskInfDir);
+ char *s = taosStrdup(taskInfDir);
if (taosMulMkDir(taosDirName(s)) != 0) {
terrno = TAOS_SYSTEM_ERROR(errno);
taosMemoryFree(s);
diff --git a/source/dnode/vnode/src/sma/smaTimeRange.c b/source/dnode/vnode/src/sma/smaTimeRange.c
index e7f03d668e..5058a7fc76 100644
--- a/source/dnode/vnode/src/sma/smaTimeRange.c
+++ b/source/dnode/vnode/src/sma/smaTimeRange.c
@@ -208,7 +208,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema *
// set super table name
SName name = {0};
tNameFromString(&name, stbFullName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
- pCreateTbReq->ctb.stbName = strdup((char *)tNameGetTableName(&name)); // strdup(stbFullName);
+ pCreateTbReq->ctb.stbName = taosStrdup((char *)tNameGetTableName(&name)); // taosStrdup(stbFullName);
// set tag content
taosArrayClear(tagArray);
@@ -237,7 +237,7 @@ int32_t smaBlockToSubmit(SVnode *pVnode, const SArray *pBlocks, const STSchema *
// set table name
if (pDataBlock->info.parTbName[0]) {
- pCreateTbReq->name = strdup(pDataBlock->info.parTbName);
+ pCreateTbReq->name = taosStrdup(pDataBlock->info.parTbName);
} else {
pCreateTbReq->name = buildCtbNameByGroupId(stbFullName, pDataBlock->info.id.groupId);
}
diff --git a/source/dnode/vnode/src/tq/tq.c b/source/dnode/vnode/src/tq/tq.c
index 9bdd8f4bdf..b92e8a4792 100644
--- a/source/dnode/vnode/src/tq/tq.c
+++ b/source/dnode/vnode/src/tq/tq.c
@@ -78,7 +78,7 @@ STQ* tqOpen(const char* path, SVnode* pVnode) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return NULL;
}
- pTq->path = strdup(path);
+ pTq->path = taosStrdup(path);
pTq->pVnode = pVnode;
pTq->walLogLastVer = pVnode->pWal->vers.lastVer;
diff --git a/source/dnode/vnode/src/tq/tqExec.c b/source/dnode/vnode/src/tq/tqExec.c
index 7896b931dc..e92da7668a 100644
--- a/source/dnode/vnode/src/tq/tqExec.c
+++ b/source/dnode/vnode/src/tq/tqExec.c
@@ -52,7 +52,7 @@ static int32_t tqAddTbNameToRsp(const STQ* pTq, int64_t uid, STaosxRsp* pRsp, in
return -1;
}
for (int32_t i = 0; i < n; i++) {
- char* tbName = strdup(mr.me.name);
+ char* tbName = taosStrdup(mr.me.name);
taosArrayPush(pRsp->blockTbName, &tbName);
}
metaReaderClear(&mr);
@@ -157,7 +157,7 @@ int32_t tqScanTaosx(STQ* pTq, const STqHandle* pHandle, STaosxRsp* pRsp, SMqMeta
continue;
}
} else {
- char* tbName = strdup(qExtractTbnameFromTask(task));
+ char* tbName = taosStrdup(qExtractTbnameFromTask(task));
taosArrayPush(pRsp->blockTbName, &tbName);
}
}
diff --git a/source/dnode/vnode/src/tq/tqSink.c b/source/dnode/vnode/src/tq/tqSink.c
index 7a8d899a19..56684b691b 100644
--- a/source/dnode/vnode/src/tq/tqSink.c
+++ b/source/dnode/vnode/src/tq/tqSink.c
@@ -130,7 +130,7 @@ void tqSinkToTablePipeline(SStreamTask* pTask, void* vnode, int64_t ver, void* d
char* ctbName = NULL;
// set child table name
if (pDataBlock->info.parTbName[0]) {
- ctbName = strdup(pDataBlock->info.parTbName);
+ ctbName = taosStrdup(pDataBlock->info.parTbName);
} else {
ctbName = buildCtbNameByGroupId(stbFullName, pDataBlock->info.id.groupId);
}
@@ -155,7 +155,7 @@ void tqSinkToTablePipeline(SStreamTask* pTask, void* vnode, int64_t ver, void* d
// set super table name
SName name = {0};
tNameFromString(&name, stbFullName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
- createTbReq.ctb.stbName = strdup((char*)tNameGetTableName(&name)); // strdup(stbFullName);
+ createTbReq.ctb.stbName = taosStrdup((char*)tNameGetTableName(&name)); // taosStrdup(stbFullName);
createTbReq.name = ctbName;
ctbName = NULL;
@@ -453,7 +453,7 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
// set super table name
SName name = {0};
tNameFromString(&name, stbFullName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
- pCreateTbReq->ctb.stbName = strdup((char*)tNameGetTableName(&name)); // strdup(stbFullName);
+ pCreateTbReq->ctb.stbName = taosStrdup((char*)tNameGetTableName(&name)); // taosStrdup(stbFullName);
// set tag content
int32_t size = taosArrayGetSize(pDataBlock->pDataBlock);
@@ -497,7 +497,7 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
taosArrayPush(tagArray, &tagVal);
}
}
- pCreateTbReq->ctb.tagNum = size;
+ pCreateTbReq->ctb.tagNum = TMAX(size - UD_TAG_COLUMN_INDEX, 1);
STag* pTag = NULL;
tTagNew(tagArray, 1, false, &pTag);
@@ -507,18 +507,16 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
goto _end;
}
+
pCreateTbReq->ctb.pTag = (uint8_t*)pTag;
// set table name
- SColumnInfoData* pTbColInfo = taosArrayGet(pDataBlock->pDataBlock, UD_TABLE_NAME_COLUMN_INDEX);
- if (colDataIsNull_s(pTbColInfo, rowId)) {
+ if (!pDataBlock->info.parTbName[0]) {
SColumnInfoData* pGpIdColInfo = taosArrayGet(pDataBlock->pDataBlock, UD_GROUPID_COLUMN_INDEX);
void* pGpIdData = colDataGetData(pGpIdColInfo, rowId);
pCreateTbReq->name = buildCtbNameByGroupId(stbFullName, *(uint64_t*)pGpIdData);
} else {
- void* pTbData = colDataGetData(pTbColInfo, rowId);
- pCreateTbReq->name = taosMemoryCalloc(1, varDataLen(pTbData) + 1);
- memcpy(pCreateTbReq->name, varDataVal(pTbData), varDataLen(pTbData));
+ pCreateTbReq->name = taosStrdup(pDataBlock->info.parTbName);
}
taosArrayPush(reqs.pArray, pCreateTbReq);
}
@@ -544,7 +542,7 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
char* ctbName = NULL;
tqDebug("vgId:%d, stream write into %s, table auto created", TD_VID(pVnode), pDataBlock->info.parTbName);
if (pDataBlock->info.parTbName[0]) {
- ctbName = strdup(pDataBlock->info.parTbName);
+ ctbName = taosStrdup(pDataBlock->info.parTbName);
} else {
ctbName = buildCtbNameByGroupId(stbFullName, pDataBlock->info.id.groupId);
}
@@ -569,7 +567,7 @@ void tqSinkToTablePipeline2(SStreamTask* pTask, void* vnode, int64_t ver, void*
// set super table name
SName name = {0};
tNameFromString(&name, stbFullName, T_NAME_ACCT | T_NAME_DB | T_NAME_TABLE);
- pCreateTbReq->ctb.stbName = strdup((char*)tNameGetTableName(&name)); // strdup(stbFullName);
+ pCreateTbReq->ctb.stbName = taosStrdup((char*)tNameGetTableName(&name)); // taosStrdup(stbFullName);
// set tag content
tagArray = taosArrayInit(1, sizeof(STagVal));
diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c
index c05206785b..79e0ccc3e3 100644
--- a/source/dnode/vnode/src/tsdb/tsdbCache.c
+++ b/source/dnode/vnode/src/tsdb/tsdbCache.c
@@ -813,7 +813,8 @@ static int32_t getNextRowFromFS(void *iter, TSDBROW **ppRow) {
if (!state->pBlockData) {
state->pBlockData = &state->blockData;
- tBlockDataCreate(&state->blockData);
+ code = tBlockDataCreate(&state->blockData);
+ if (code) goto _err;
}
}
case SFSNEXTROW_BLOCKDATA:
diff --git a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c
index 6ea169a5e3..96dbdc390f 100644
--- a/source/dnode/vnode/src/tsdb/tsdbCacheRead.c
+++ b/source/dnode/vnode/src/tsdb/tsdbCacheRead.c
@@ -190,7 +190,7 @@ int32_t tsdbCacherowsReaderOpen(void* pVnode, int32_t type, void* pTableIdList,
return TSDB_CODE_OUT_OF_MEMORY;
}
- p->idstr = taosMemoryStrDup(idstr);
+ p->idstr = taosStrdup(idstr);
taosThreadMutexInit(&p->readerMutex, NULL);
*pReader = p;
@@ -433,8 +433,10 @@ _end:
tsdbUntakeReadSnap((STsdbReader*)pr, pr->pReadSnap, true);
taosThreadMutexUnlock(&pr->readerMutex);
- for (int32_t j = 0; j < pr->numOfCols; ++j) {
- taosMemoryFree(pRes[j]);
+ if (pRes != NULL) {
+ for (int32_t j = 0; j < pr->numOfCols; ++j) {
+ taosMemoryFree(pRes[j]);
+ }
}
taosMemoryFree(pRes);
diff --git a/source/dnode/vnode/src/tsdb/tsdbDataIter.c b/source/dnode/vnode/src/tsdb/tsdbDataIter.c
index 2f49781276..3299a2f497 100644
--- a/source/dnode/vnode/src/tsdb/tsdbDataIter.c
+++ b/source/dnode/vnode/src/tsdb/tsdbDataIter.c
@@ -219,7 +219,7 @@ static int32_t tsdbDataFileDataIterNext(STsdbDataIter2* pIter, STsdbFilterInfo*
}
ASSERT(pIter->rowInfo.suid == pIter->dIter.bData.suid);
- ASSERT(pIter->rowInfo.uid = pIter->dIter.bData.uid);
+ ASSERT(pIter->rowInfo.uid == pIter->dIter.bData.uid);
pIter->rowInfo.row = tsdbRowFromBlockData(&pIter->dIter.bData, pIter->dIter.iRow);
pIter->dIter.iRow++;
goto _exit;
diff --git a/source/dnode/vnode/src/tsdb/tsdbFile.c b/source/dnode/vnode/src/tsdb/tsdbFile.c
index 42728be657..6851bb2043 100644
--- a/source/dnode/vnode/src/tsdb/tsdbFile.c
+++ b/source/dnode/vnode/src/tsdb/tsdbFile.c
@@ -148,10 +148,10 @@ bool tsdbDelFileIsSame(SDelFile *pDelFile1, SDelFile *pDelFile2) { return pDelFi
int32_t tsdbDFileRollback(STsdb *pTsdb, SDFileSet *pSet, EDataFileT ftype) {
int32_t code = 0;
- int64_t size;
+ int64_t size = 0;
int64_t n;
TdFilePtr pFD;
- char fname[TSDB_FILENAME_LEN];
+ char fname[TSDB_FILENAME_LEN] = {0};
char hdr[TSDB_FHDR_SIZE] = {0};
// truncate
diff --git a/source/dnode/vnode/src/tsdb/tsdbMemTable.c b/source/dnode/vnode/src/tsdb/tsdbMemTable.c
index 3db9ff2b42..554ec0f1f9 100644
--- a/source/dnode/vnode/src/tsdb/tsdbMemTable.c
+++ b/source/dnode/vnode/src/tsdb/tsdbMemTable.c
@@ -473,7 +473,7 @@ static int32_t tbDataDoPut(SMemTable *pMemTable, STbData *pTbData, SMemSkipListN
int8_t forward) {
int32_t code = 0;
int8_t level;
- SMemSkipListNode *pNode;
+ SMemSkipListNode *pNode = NULL;
SVBufPool *pPool = pMemTable->pTsdb->pVnode->inUse;
int64_t nSize;
@@ -591,7 +591,9 @@ static int32_t tsdbInsertColDataToTable(SMemTable *pMemTable, STbData *pTbData,
pBlockData->aColData = vnodeBufPoolMalloc(pPool, sizeof(SColData) * pBlockData->nColData);
if (pBlockData->aColData == NULL) {
code = TSDB_CODE_OUT_OF_MEMORY;
+ goto _exit;
}
+
for (int32_t iColData = 0; iColData < pBlockData->nColData; ++iColData) {
code = tColDataCopy(&aColData[iColData + 1], &pBlockData->aColData[iColData], (xMallocFn)vnodeBufPoolMalloc, pPool);
if (code) goto _exit;
diff --git a/source/dnode/vnode/src/tsdb/tsdbRead.c b/source/dnode/vnode/src/tsdb/tsdbRead.c
index c83fdb2e4f..7a6e0df0a6 100644
--- a/source/dnode/vnode/src/tsdb/tsdbRead.c
+++ b/source/dnode/vnode/src/tsdb/tsdbRead.c
@@ -488,7 +488,7 @@ static int32_t initFilesetIterator(SFilesetIter* pIter, SArray* aDFileSet, STsdb
return TSDB_CODE_SUCCESS;
}
-static int32_t filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader, bool *hasNext) {
+static int32_t filesetIteratorNext(SFilesetIter* pIter, STsdbReader* pReader, bool* hasNext) {
bool asc = ASCENDING_TRAVERSE(pIter->order);
int32_t step = asc ? 1 : -1;
pIter->index += step;
@@ -677,7 +677,7 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
pReader->order = pCond->order;
pReader->capacity = capacity;
pReader->pResBlock = pResBlock;
- pReader->idStr = (idstr != NULL) ? strdup(idstr) : NULL;
+ pReader->idStr = (idstr != NULL) ? taosStrdup(idstr) : NULL;
pReader->verRange = getQueryVerRange(pVnode, pCond, level);
pReader->type = pCond->type;
pReader->window = updateQueryTimeWindow(pReader->pTsdb, &pCond->twindows);
@@ -874,7 +874,7 @@ static int32_t doLoadFileBlock(STsdbReader* pReader, SArray* pIndexList, SBlockN
pBlockNum->numOfBlocks += 1;
}
- if (pScanInfo->pBlockList != NULL && taosArrayGetSize(pScanInfo->pBlockList) > 0) {
+ if ((pScanInfo->pBlockList != NULL )&& (taosArrayGetSize(pScanInfo->pBlockList) > 0)) {
numOfQTable += 1;
}
}
@@ -2802,13 +2802,13 @@ static int32_t moveToNextFile(STsdbReader* pReader, SBlockNumber* pBlockNum) {
SArray* pIndexList = taosArrayInit(numOfTables, sizeof(SBlockIdx));
while (1) {
- bool hasNext = false;
+ bool hasNext = false;
int32_t code = filesetIteratorNext(&pStatus->fileIter, pReader, &hasNext);
if (code) {
taosArrayDestroy(pIndexList);
return code;
}
-
+
if (!hasNext) { // no data files on disk
break;
}
@@ -4532,7 +4532,7 @@ int32_t tsdbRetrieveDatablockSMA(STsdbReader* pReader, SSDataBlock* pDataBlock,
SSDataBlock* pResBlock = pReader->pResBlock;
if (pResBlock->pBlockAgg == NULL) {
size_t num = taosArrayGetSize(pResBlock->pDataBlock);
- pResBlock->pBlockAgg = taosMemoryCalloc(num, sizeof(SColumnDataAgg));
+ pResBlock->pBlockAgg = taosMemoryCalloc(num, POINTER_BYTES);
}
// do fill all null column value SMA info
@@ -4688,6 +4688,11 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader* pReader, STableBlockDistInfo* pTa
pTableBlockInfo->numOfVgroups = 1;
// find the start data block in file
+
+ tsdbAcquireReader(pReader);
+ if (pReader->suspended) {
+ tsdbReaderResume(pReader);
+ }
SReaderStatus* pStatus = &pReader->status;
STsdbCfg* pc = &pReader->pTsdb->pVnode->config.tsdbCfg;
@@ -4749,7 +4754,7 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader* pReader, STableBlockDistInfo* pTa
// tsdbDebug("%p %d blocks found in file for %d table(s), fid:%d, %s", pReader, numOfBlocks, numOfTables,
// pReader->pFileGroup->fid, pReader->idStr);
}
-
+ tsdbReleaseReader(pReader);
return code;
}
diff --git a/source/dnode/vnode/src/vnd/vnodeQuery.c b/source/dnode/vnode/src/vnd/vnodeQuery.c
index dac712b4e9..c017266839 100644
--- a/source/dnode/vnode/src/vnd/vnodeQuery.c
+++ b/source/dnode/vnode/src/vnd/vnodeQuery.c
@@ -197,7 +197,7 @@ int vnodeGetTableCfg(SVnode *pVnode, SRpcMsg *pMsg, bool direct) {
cfgRsp.ttl = mer1.me.ctbEntry.ttlDays;
cfgRsp.commentLen = mer1.me.ctbEntry.commentLen;
if (mer1.me.ctbEntry.commentLen > 0) {
- cfgRsp.pComment = strdup(mer1.me.ctbEntry.comment);
+ cfgRsp.pComment = taosStrdup(mer1.me.ctbEntry.comment);
}
STag *pTag = (STag *)mer1.me.ctbEntry.pTags;
cfgRsp.tagsLen = pTag->len;
@@ -208,7 +208,7 @@ int vnodeGetTableCfg(SVnode *pVnode, SRpcMsg *pMsg, bool direct) {
cfgRsp.ttl = mer1.me.ntbEntry.ttlDays;
cfgRsp.commentLen = mer1.me.ntbEntry.commentLen;
if (mer1.me.ntbEntry.commentLen > 0) {
- cfgRsp.pComment = strdup(mer1.me.ntbEntry.comment);
+ cfgRsp.pComment = taosStrdup(mer1.me.ntbEntry.comment);
}
} else {
ASSERT(0);
diff --git a/source/libs/catalog/src/ctgDbg.c b/source/libs/catalog/src/ctgDbg.c
index a6c0d1c401..6b870232c7 100644
--- a/source/libs/catalog/src/ctgDbg.c
+++ b/source/libs/catalog/src/ctgDbg.c
@@ -281,7 +281,7 @@ int32_t ctgdHandleDbgCommand(char *command) {
CTG_RET(TSDB_CODE_INVALID_PARA);
}
- char *dup = strdup(command);
+ char *dup = taosStrdup(command);
char *option = NULL;
char *param = NULL;
diff --git a/source/libs/catalog/src/ctgUtil.c b/source/libs/catalog/src/ctgUtil.c
index 3dd40a4139..cd9380778b 100644
--- a/source/libs/catalog/src/ctgUtil.c
+++ b/source/libs/catalog/src/ctgUtil.c
@@ -742,7 +742,7 @@ int32_t ctgUpdateMsgCtx(SCtgMsgCtx* pCtx, int32_t reqType, void* out, char* targ
pCtx->reqType = reqType;
pCtx->out = out;
if (target) {
- pCtx->target = strdup(target);
+ pCtx->target = taosStrdup(target);
if (NULL == pCtx->target) {
CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
}
@@ -759,7 +759,7 @@ int32_t ctgAddMsgCtx(SArray* pCtxs, int32_t reqType, void* out, char* target) {
ctx.reqType = reqType;
ctx.out = out;
if (target) {
- ctx.target = strdup(target);
+ ctx.target = taosStrdup(target);
if (NULL == ctx.target) {
CTG_ERR_RET(TSDB_CODE_OUT_OF_MEMORY);
}
@@ -1169,7 +1169,7 @@ int32_t ctgCloneTableIndex(SArray* pIndex, SArray** pRes) {
for (int32_t i = 0; i < num; ++i) {
STableIndexInfo* pInfo = taosArrayGet(pIndex, i);
pInfo = taosArrayPush(*pRes, pInfo);
- pInfo->expr = strdup(pInfo->expr);
+ pInfo->expr = taosStrdup(pInfo->expr);
}
return TSDB_CODE_SUCCESS;
@@ -1179,7 +1179,7 @@ int32_t ctgUpdateSendTargetInfo(SMsgSendInfo* pMsgSendInfo, int32_t msgType, cha
if (msgType == TDMT_VND_TABLE_META || msgType == TDMT_VND_TABLE_CFG || msgType == TDMT_VND_BATCH_META) {
pMsgSendInfo->target.type = TARGET_TYPE_VNODE;
pMsgSendInfo->target.vgId = vgId;
- pMsgSendInfo->target.dbFName = strdup(dbFName);
+ pMsgSendInfo->target.dbFName = taosStrdup(dbFName);
} else {
pMsgSendInfo->target.type = TARGET_TYPE_MNODE;
}
diff --git a/source/libs/executor/src/dataInserter.c b/source/libs/executor/src/dataInserter.c
index 16b43b560c..e9c46843c0 100644
--- a/source/libs/executor/src/dataInserter.c
+++ b/source/libs/executor/src/dataInserter.c
@@ -230,12 +230,19 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
case TSDB_DATA_TYPE_BLOB:
case TSDB_DATA_TYPE_JSON:
case TSDB_DATA_TYPE_MEDIUMBLOB:
- uError("the column type %" PRIi16 " is defined but not implemented yet", pColInfoData->info.type);
- ASSERT(0);
+ qError("the column type %" PRIi16 " is defined but not implemented yet", pColInfoData->info.type);
+ terrno = TSDB_CODE_APP_ERROR;
+ goto _end;
break;
default:
if (pColInfoData->info.type < TSDB_DATA_TYPE_MAX && pColInfoData->info.type > TSDB_DATA_TYPE_NULL) {
if (colDataIsNull_s(pColInfoData, j)) {
+ if (PRIMARYKEY_TIMESTAMP_COL_ID == pCol->colId) {
+ qError("NULL value for primary key");
+ terrno = TSDB_CODE_PAR_INCORRECT_TIMESTAMP_VAL;
+ goto _end;
+ }
+
SColVal cv = COL_VAL_NULL(pCol->colId, pCol->type); // should use pCol->type
taosArrayPush(pVals, &cv);
} else {
@@ -256,7 +263,8 @@ int32_t buildSubmitReqFromBlock(SDataInserterHandle* pInserter, SSubmitReq2** pp
}
} else {
uError("the column type %" PRIi16 " is undefined\n", pColInfoData->info.type);
- ASSERT(0);
+ terrno = TSDB_CODE_APP_ERROR;
+ goto _end;
}
break;
}
@@ -296,7 +304,7 @@ _end:
tDestroySSubmitReq2(pReq, TSDB_MSG_FLG_ENCODE);
taosMemoryFree(pReq);
}
- return TSDB_CODE_FAILED;
+ return terrno;
}
*ppReq = pReq;
return TSDB_CODE_SUCCESS;
diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c
index 639adb7ec6..745ae2ce8c 100644
--- a/source/libs/executor/src/executil.c
+++ b/source/libs/executor/src/executil.c
@@ -1148,7 +1148,6 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
if (TSDB_CODE_SUCCESS == code) {
REPLACE_NODE(pNew);
} else {
- taosMemoryFree(keyBuf);
nodesDestroyList(groupNew);
metaReaderClear(&mr);
return code;
@@ -1166,7 +1165,6 @@ int32_t getGroupIdFromTagsVal(void* pMeta, uint64_t uid, SNodeList* pGroupNode,
if (pValue->node.resType.type == TSDB_DATA_TYPE_JSON) {
if (tTagIsJson(data)) {
terrno = TSDB_CODE_QRY_JSON_IN_GROUP_ERROR;
- taosMemoryFree(keyBuf);
nodesDestroyList(groupNew);
metaReaderClear(&mr);
return terrno;
@@ -1531,7 +1529,7 @@ SqlFunctionCtx* createSqlFunctionCtx(SExprInfo* pExprInfo, int32_t numOfOutput,
fmGetFuncExecFuncs(pCtx->functionId, &pCtx->fpSet);
} else {
char* udfName = pExpr->pExpr->_function.pFunctNode->functionName;
- pCtx->udfName = strdup(udfName);
+ pCtx->udfName = taosStrdup(udfName);
fmGetUdafExecFuncs(pCtx->functionId, &pCtx->fpSet);
}
pCtx->fpSet.getEnv(pExpr->pExpr->_function.pFunctNode, &env);
diff --git a/source/libs/executor/src/executorimpl.c b/source/libs/executor/src/executorimpl.c
index e6ccb99b10..dd12baede3 100644
--- a/source/libs/executor/src/executorimpl.c
+++ b/source/libs/executor/src/executorimpl.c
@@ -2000,7 +2000,7 @@ static SExecTaskInfo* createExecTaskInfo(uint64_t queryId, uint64_t taskId, EOPT
setTaskStatus(pTaskInfo, TASK_NOT_COMPLETED);
- pTaskInfo->schemaInfo.dbname = strdup(dbFName);
+ pTaskInfo->schemaInfo.dbname = taosStrdup(dbFName);
pTaskInfo->execModel = model;
pTaskInfo->pTableInfoList = tableListCreate();
pTaskInfo->stopInfo.pStopInfo = taosArrayInit(4, sizeof(SExchangeOpStopInfo));
@@ -2026,7 +2026,7 @@ int32_t extractTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNode,
}
SSchemaInfo* pSchemaInfo = &pTaskInfo->schemaInfo;
- pSchemaInfo->tablename = strdup(mr.me.name);
+ pSchemaInfo->tablename = taosStrdup(mr.me.name);
if (mr.me.type == TSDB_SUPER_TABLE) {
pSchemaInfo->sw = tCloneSSchemaWrapper(&mr.me.stbEntry.schemaRow);
@@ -2035,7 +2035,11 @@ int32_t extractTableSchemaInfo(SReadHandle* pHandle, SScanPhysiNode* pScanNode,
tDecoderClear(&mr.coder);
tb_uid_t suid = mr.me.ctbEntry.suid;
- metaGetTableEntryByUidCache(&mr, suid);
+ code = metaGetTableEntryByUidCache(&mr, suid);
+ if (code != TSDB_CODE_SUCCESS) {
+ return terrno;
+ }
+
pSchemaInfo->sw = tCloneSSchemaWrapper(&mr.me.stbEntry.schemaRow);
pSchemaInfo->tversion = mr.me.stbEntry.schemaTag.version;
} else {
diff --git a/source/libs/executor/src/groupoperator.c b/source/libs/executor/src/groupoperator.c
index 9fd8f7d3a2..9357bf7f3a 100644
--- a/source/libs/executor/src/groupoperator.c
+++ b/source/libs/executor/src/groupoperator.c
@@ -992,32 +992,42 @@ void appendCreateTableRow(SStreamState* pState, SExprSupp* pTableSup, SExprSupp*
SSDataBlock* pTmpBlock = blockCopyOneRow(pSrcBlock, rowId);
memset(pTmpBlock->info.parTbName, 0, TSDB_TABLE_NAME_LEN);
pTmpBlock->info.id.groupId = groupId;
+ char* tbName = pSrcBlock->info.parTbName;
if (pTableSup->numOfExprs > 0) {
projectApplyFunctions(pTableSup->pExprInfo, pDestBlock, pTmpBlock, pTableSup->pCtx, pTableSup->numOfExprs, NULL);
SColumnInfoData* pTbCol = taosArrayGet(pDestBlock->pDataBlock, UD_TABLE_NAME_COLUMN_INDEX);
- void* pData = colDataGetVarData(pTbCol, pDestBlock->info.rows - 1);
- char* tbName = pSrcBlock->info.parTbName;
memset(tbName, 0, TSDB_TABLE_NAME_LEN);
- int32_t len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN - 1);
- memcpy(tbName, varDataVal(pData), len);
+ int32_t len = 0;
+ if (colDataIsNull_s(pTbCol, pDestBlock->info.rows - 1)) {
+ len = TMIN(sizeof(TSDB_DATA_NULL_STR), TSDB_TABLE_NAME_LEN - 1);
+ memcpy(tbName, TSDB_DATA_NULL_STR, len);
+ } else {
+ void* pData = colDataGetData(pTbCol, pDestBlock->info.rows - 1);
+ len = TMIN(varDataLen(pData), TSDB_TABLE_NAME_LEN - 1);
+ memcpy(tbName, varDataVal(pData), len);
+ }
streamStatePutParName(pState, groupId, tbName);
memcpy(pTmpBlock->info.parTbName, tbName, len);
pDestBlock->info.rows--;
} else {
void* pTbNameCol = taosArrayGet(pDestBlock->pDataBlock, UD_TABLE_NAME_COLUMN_INDEX);
colDataAppendNULL(pTbNameCol, pDestBlock->info.rows);
- pSrcBlock->info.parTbName[0] = 0;
+ tbName[0] = 0;
}
if (pTagSup->numOfExprs > 0) {
projectApplyFunctions(pTagSup->pExprInfo, pDestBlock, pTmpBlock, pTagSup->pCtx, pTagSup->numOfExprs, NULL);
pDestBlock->info.rows--;
+ } else {
+ memcpy(pDestBlock->info.parTbName, pTmpBlock->info.parTbName, TSDB_TABLE_NAME_LEN);
}
void* pGpIdCol = taosArrayGet(pDestBlock->pDataBlock, UD_GROUPID_COLUMN_INDEX);
colDataAppend(pGpIdCol, pDestBlock->info.rows, (const char*)&groupId, false);
pDestBlock->info.rows++;
blockDataDestroy(pTmpBlock);
+ } else {
+ memcpy(pSrcBlock->info.parTbName, pValue, TSDB_TABLE_NAME_LEN);
}
streamStateReleaseBuf(pState, NULL, pValue);
}
diff --git a/source/libs/executor/src/projectoperator.c b/source/libs/executor/src/projectoperator.c
index 5a221a0fbd..fe3ea660af 100644
--- a/source/libs/executor/src/projectoperator.c
+++ b/source/libs/executor/src/projectoperator.c
@@ -275,7 +275,6 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
// for stream interval
if (pBlock->info.type == STREAM_RETRIEVE || pBlock->info.type == STREAM_DELETE_RESULT ||
pBlock->info.type == STREAM_DELETE_DATA || pBlock->info.type == STREAM_CREATE_CHILD_TABLE) {
- // printDataBlock1(pBlock, "project1");
return pBlock;
}
diff --git a/source/libs/executor/src/scanoperator.c b/source/libs/executor/src/scanoperator.c
index 9a56512683..2503a9cc03 100644
--- a/source/libs/executor/src/scanoperator.c
+++ b/source/libs/executor/src/scanoperator.c
@@ -434,7 +434,7 @@ static void freeTableCachedVal(void* param) {
static STableCachedVal* createTableCacheVal(const SMetaReader* pMetaReader) {
STableCachedVal* pVal = taosMemoryMalloc(sizeof(STableCachedVal));
- pVal->pName = strdup(pMetaReader->me.name);
+ pVal->pName = taosStrdup(pMetaReader->me.name);
pVal->pTags = NULL;
// only child table has tag value
@@ -3050,8 +3050,8 @@ int32_t tblCountScanGetInputs(SNodeList* groupTags, SName* tableName, STableCoun
}
}
} else {
- strncpy(supp->dbNameFilter, tNameGetDbNameP(tableName), TSDB_DB_NAME_LEN);
- strncpy(supp->stbNameFilter, tNameGetTableName(tableName), TSDB_TABLE_NAME_LEN);
+ tstrncpy(supp->dbNameFilter, tNameGetDbNameP(tableName), TSDB_DB_NAME_LEN);
+ tstrncpy(supp->stbNameFilter, tNameGetTableName(tableName), TSDB_TABLE_NAME_LEN);
}
return TSDB_CODE_SUCCESS;
}
diff --git a/source/libs/executor/src/sortoperator.c b/source/libs/executor/src/sortoperator.c
index 98ef6b8a36..de84089040 100644
--- a/source/libs/executor/src/sortoperator.c
+++ b/source/libs/executor/src/sortoperator.c
@@ -46,8 +46,9 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode*
pOperator->pTaskInfo = pTaskInfo;
SDataBlockDescNode* pDescNode = pSortNode->node.pOutputDataBlockDesc;
- int32_t numOfCols = 0;
- SExprInfo* pExprInfo = createExprInfo(pSortNode->pExprs, NULL, &numOfCols);
+ int32_t numOfCols = 0;
+ pOperator->exprSupp.pExprInfo = createExprInfo(pSortNode->pExprs, NULL, &numOfCols);
+ pOperator->exprSupp.numOfExprs = numOfCols;
int32_t numOfOutputCols = 0;
int32_t code =
@@ -56,7 +57,8 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode*
goto _error;
}
- pOperator->exprSupp.pCtx = createSqlFunctionCtx(pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
+ pOperator->exprSupp.pCtx =
+ createSqlFunctionCtx(pOperator->exprSupp.pExprInfo, numOfCols, &pOperator->exprSupp.rowEntryInfoOffset);
initResultSizeInfo(&pOperator->resultInfo, 1024);
code = filterInitFromNode((SNode*)pSortNode->node.pConditions, &pOperator->exprSupp.pFilterInfo, 0);
if (code != TSDB_CODE_SUCCESS) {
@@ -68,8 +70,7 @@ SOperatorInfo* createSortOperatorInfo(SOperatorInfo* downstream, SSortPhysiNode*
initLimitInfo(pSortNode->node.pLimit, pSortNode->node.pSlimit, &pInfo->limitInfo);
setOperatorInfo(pOperator, "SortOperator", QUERY_NODE_PHYSICAL_PLAN_SORT, true, OP_NOT_OPENED, pInfo, pTaskInfo);
- pOperator->exprSupp.pExprInfo = pExprInfo;
- pOperator->exprSupp.numOfExprs = numOfCols;
+
// lazy evaluation for the following parameter since the input datablock is not known till now.
// pInfo->bufPageSize = rowSize < 1024 ? 1024 * 2 : rowSize * 2;
diff --git a/source/libs/executor/src/sysscanoperator.c b/source/libs/executor/src/sysscanoperator.c
index 1b2f135064..7a91f1d586 100644
--- a/source/libs/executor/src/sysscanoperator.c
+++ b/source/libs/executor/src/sysscanoperator.c
@@ -1608,9 +1608,7 @@ static void sysTableScanFillTbName(SOperatorInfo* pOperator, const SSysTableScan
if (pInfo->tbnameSlotId != -1) {
SColumnInfoData* pColumnInfoData = (SColumnInfoData*)taosArrayGet(pBlock->pDataBlock, pInfo->tbnameSlotId);
char varTbName[TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE] = {0};
- memcpy(varDataVal(varTbName), name, strlen(name));
- varDataSetLen(varTbName, strlen(name));
-
+ STR_TO_VARSTR(varTbName, name);
colDataAppendNItems(pColumnInfoData, 0, varTbName, pBlock->info.rows);
}
@@ -1711,7 +1709,7 @@ SOperatorInfo* createSysTableScanOperatorInfo(void* readHandle, SSystemTableScan
extractTbnameSlotId(pInfo, pScanNode);
pInfo->accountId = pScanPhyNode->accountId;
- pInfo->pUser = taosMemoryStrDup((void*)pUser);
+ pInfo->pUser = taosStrdup((void*)pUser);
pInfo->sysInfo = pScanPhyNode->sysInfo;
pInfo->showRewrite = pScanPhyNode->showRewrite;
pInfo->pRes = createDataBlockFromDescNode(pDescNode);
diff --git a/source/libs/executor/src/tsort.c b/source/libs/executor/src/tsort.c
index 90f20f40b8..6133a56282 100644
--- a/source/libs/executor/src/tsort.c
+++ b/source/libs/executor/src/tsort.c
@@ -90,7 +90,7 @@ SSortHandle* tsortCreateSortHandle(SArray* pSortInfo, int32_t type, int32_t page
tsortSetComparFp(pSortHandle, msortComparFn);
if (idstr != NULL) {
- pSortHandle->idStr = strdup(idstr);
+ pSortHandle->idStr = taosStrdup(idstr);
}
return pSortHandle;
@@ -212,6 +212,7 @@ static int32_t doAddToBuf(SSDataBlock* pDataBlock, SSortHandle* pHandle) {
int32_t pageId = -1;
void* pPage = getNewBufPage(pHandle->pBuf, &pageId);
if (pPage == NULL) {
+ taosArrayDestroy(pPageIdList);
blockDataDestroy(p);
return terrno;
}
diff --git a/source/libs/function/src/builtinsimpl.c b/source/libs/function/src/builtinsimpl.c
index 8e52ae5f30..0734ac3e45 100644
--- a/source/libs/function/src/builtinsimpl.c
+++ b/source/libs/function/src/builtinsimpl.c
@@ -775,13 +775,13 @@ int32_t maxFunction(SqlFunctionCtx* pCtx) {
static int32_t setNullSelectivityValue(SqlFunctionCtx* pCtx, SSDataBlock* pBlock, int32_t rowIndex);
static int32_t setSelectivityValue(SqlFunctionCtx* pCtx, SSDataBlock* pBlock, const STuplePos* pTuplePos,
- int32_t rowIndex);
+ int32_t rowIndex);
int32_t minmaxFunctionFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
int32_t code = TSDB_CODE_SUCCESS;
SResultRowEntryInfo* pEntryInfo = GET_RES_INFO(pCtx);
- SMinmaxResInfo* pRes = GET_ROWCELL_INTERBUF(pEntryInfo);
+ SMinmaxResInfo* pRes = GET_ROWCELL_INTERBUF(pEntryInfo);
int32_t slotId = pCtx->pExpr->base.resSchema.slotId;
int32_t currentRow = pBlock->info.rows;
@@ -795,7 +795,7 @@ int32_t minmaxFunctionFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
case TSDB_DATA_TYPE_UBIGINT:
case TSDB_DATA_TYPE_BIGINT:
((int64_t*)pCol->pData)[currentRow] = pRes->v;
-// colDataAppendInt64(pCol, currentRow, &pRes->v);
+ // colDataAppendInt64(pCol, currentRow, &pRes->v);
break;
case TSDB_DATA_TYPE_UINT:
case TSDB_DATA_TYPE_INT:
@@ -920,9 +920,7 @@ void appendSelectivityValue(SqlFunctionCtx* pCtx, int32_t rowIndex, int32_t pos)
}
}
-void replaceTupleData(STuplePos* pDestPos, STuplePos* pSourcePos) {
- *pDestPos = *pSourcePos;
-}
+void replaceTupleData(STuplePos* pDestPos, STuplePos* pSourcePos) { *pDestPos = *pSourcePos; }
int32_t minMaxCombine(SqlFunctionCtx* pDestCtx, SqlFunctionCtx* pSourceCtx, int32_t isMinFunc) {
SResultRowEntryInfo* pDResInfo = GET_RES_INFO(pDestCtx);
@@ -1686,63 +1684,59 @@ int32_t percentileFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
SPercentileInfo* ppInfo = (SPercentileInfo*)GET_ROWCELL_INTERBUF(pResInfo);
int32_t code = 0;
- double v = 0;
+ double v = 0;
tMemBucket* pMemBucket = ppInfo->pMemBucket;
- if (pMemBucket == NULL || pMemBucket->total == 0) { // check for null
- code = TSDB_CODE_FAILED;
- goto _fin_error;
- }
+ if (pMemBucket != NULL && pMemBucket->total > 0) { // check for null
+ if (pCtx->numOfParams > 2) {
+ char buf[512] = {0};
+ size_t len = 1;
- if (pCtx->numOfParams > 2) {
- char buf[512] = {0};
- size_t len = 1;
+ varDataVal(buf)[0] = '[';
+ for (int32_t i = 1; i < pCtx->numOfParams; ++i) {
+ SVariant* pVal = &pCtx->param[i].param;
- varDataVal(buf)[0] = '[';
- for (int32_t i = 1; i < pCtx->numOfParams; ++i) {
- SVariant* pVal = &pCtx->param[i].param;
+ GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
+
+ int32_t code = getPercentile(pMemBucket, v, &ppInfo->result);
+ if (code != TSDB_CODE_SUCCESS) {
+ goto _fin_error;
+ }
+
+ if (i == pCtx->numOfParams - 1) {
+ len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf]", ppInfo->result);
+ } else {
+ len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf, ", ppInfo->result);
+ }
+ }
+
+ int32_t slotId = pCtx->pExpr->base.resSchema.slotId;
+ SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId);
+
+ varDataSetLen(buf, len);
+ colDataAppend(pCol, pBlock->info.rows, buf, false);
+
+ tMemBucketDestroy(pMemBucket);
+ return pResInfo->numOfRes;
+ } else {
+ SVariant* pVal = &pCtx->param[1].param;
GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
- int32_t code = getPercentile(pMemBucket, v, &ppInfo->result);
+ code = getPercentile(pMemBucket, v, &ppInfo->result);
if (code != TSDB_CODE_SUCCESS) {
goto _fin_error;
}
- if (i == pCtx->numOfParams - 1) {
- len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf]", ppInfo->result);
- } else {
- len += snprintf(varDataVal(buf) + len, sizeof(buf) - VARSTR_HEADER_SIZE - len, "%.6lf, ", ppInfo->result);
- }
+ tMemBucketDestroy(pMemBucket);
+ return functionFinalize(pCtx, pBlock);
}
-
- int32_t slotId = pCtx->pExpr->base.resSchema.slotId;
- SColumnInfoData* pCol = taosArrayGet(pBlock->pDataBlock, slotId);
-
- varDataSetLen(buf, len);
- colDataAppend(pCol, pBlock->info.rows, buf, false);
-
- tMemBucketDestroy(pMemBucket);
- return pResInfo->numOfRes;
- } else {
- SVariant* pVal = &pCtx->param[1].param;
-
- GET_TYPED_DATA(v, double, pVal->nType, &pVal->i);
-
- code = getPercentile(pMemBucket, v, &ppInfo->result);
- if (code != TSDB_CODE_SUCCESS) {
- goto _fin_error;
- }
-
- tMemBucketDestroy(pMemBucket);
- return functionFinalize(pCtx, pBlock);
}
_fin_error:
tMemBucketDestroy(pMemBucket);
return code;
-
}
bool getApercentileFuncEnv(SFunctionNode* pFunc, SFuncExecEnv* pEnv) {
@@ -2103,7 +2097,7 @@ static void prepareBuf(SqlFunctionCtx* pCtx) {
}
static int32_t firstlastSaveTupleData(const SSDataBlock* pSrcBlock, int32_t rowIndex, SqlFunctionCtx* pCtx,
- SFirstLastRes* pInfo) {
+ SFirstLastRes* pInfo) {
int32_t code = TSDB_CODE_SUCCESS;
if (pCtx->subsidiaries.num <= 0) {
@@ -2156,7 +2150,8 @@ int32_t firstFunction(SqlFunctionCtx* pCtx) {
}
// All null data column, return directly.
- if (pInput->colDataSMAIsSet && (pInput->pColumnDataAgg[0]->numOfNull == pInput->totalRows) && pInputCol->hasNull == true) {
+ if (pInput->colDataSMAIsSet && (pInput->pColumnDataAgg[0]->numOfNull == pInput->totalRows) &&
+ pInputCol->hasNull == true) {
// save selectivity value for column consisted of all null values
int32_t code = firstlastSaveTupleData(pCtx->pSrcBlock, pInput->startRowIndex, pCtx, pInfo);
if (code != TSDB_CODE_SUCCESS) {
@@ -2272,7 +2267,8 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
}
// All null data column, return directly.
- if (pInput->colDataSMAIsSet && (pInput->pColumnDataAgg[0]->numOfNull == pInput->totalRows) && pInputCol->hasNull == true) {
+ if (pInput->colDataSMAIsSet && (pInput->pColumnDataAgg[0]->numOfNull == pInput->totalRows) &&
+ pInputCol->hasNull == true) {
// save selectivity value for column consisted of all null values
int32_t code = firstlastSaveTupleData(pCtx->pSrcBlock, pInput->startRowIndex, pCtx, pInfo);
if (code != TSDB_CODE_SUCCESS) {
@@ -2366,7 +2362,7 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
}
if (pResInfo->numOfRes == 0 || pInfo->ts < cts) {
- char* data = colDataGetData(pInputCol, chosen);
+ char* data = colDataGetData(pInputCol, chosen);
int32_t code = doSaveCurrentVal(pCtx, i, cts, type, data);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -2377,7 +2373,7 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
for (int32_t i = pInput->startRowIndex + round * 4; i < pInput->startRowIndex + pInput->numOfRows; ++i) {
if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
- char* data = colDataGetData(pInputCol, i);
+ char* data = colDataGetData(pInputCol, i);
int32_t code = doSaveCurrentVal(pCtx, i, pts[i], type, data);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -2394,7 +2390,7 @@ int32_t lastFunction(SqlFunctionCtx* pCtx) {
numOfElems++;
if (pResInfo->numOfRes == 0 || pInfo->ts < pts[i]) {
- char* data = colDataGetData(pInputCol, i);
+ char* data = colDataGetData(pInputCol, i);
int32_t code = doSaveCurrentVal(pCtx, i, pts[i], type, data);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -2441,7 +2437,7 @@ static int32_t firstLastTransferInfoImpl(SFirstLastRes* pInput, SFirstLastRes* p
}
static int32_t firstLastTransferInfo(SqlFunctionCtx* pCtx, SFirstLastRes* pInput, SFirstLastRes* pOutput, bool isFirst,
- int32_t rowIndex) {
+ int32_t rowIndex) {
if (TSDB_CODE_SUCCESS == firstLastTransferInfoImpl(pInput, pOutput, isFirst)) {
int32_t code = firstlastSaveTupleData(pCtx->pSrcBlock, rowIndex, pCtx, pOutput);
if (code != TSDB_CODE_SUCCESS) {
@@ -2468,7 +2464,7 @@ static int32_t firstLastFunctionMergeImpl(SqlFunctionCtx* pCtx, bool isFirstQuer
for (int32_t i = start; i < start + pInput->numOfRows; ++i) {
char* data = colDataGetData(pCol, i);
SFirstLastRes* pInputInfo = (SFirstLastRes*)varDataVal(data);
- int32_t code = firstLastTransferInfo(pCtx, pInputInfo, pInfo, isFirstQuery, i);
+ int32_t code = firstLastTransferInfo(pCtx, pInputInfo, pInfo, isFirstQuery, i);
if (code != TSDB_CODE_SUCCESS) {
return code;
}
@@ -2700,7 +2696,7 @@ static int32_t doSetPrevVal(SDiffInfo* pDiffInfo, int32_t type, const char* pv,
}
static int32_t doHandleDiff(SDiffInfo* pDiffInfo, int32_t type, const char* pv, SColumnInfoData* pOutput, int32_t pos,
- int32_t order, int64_t ts) {
+ int32_t order, int64_t ts) {
int32_t factor = (order == TSDB_ORDER_ASC) ? 1 : -1;
pDiffInfo->prevTs = ts;
switch (type) {
@@ -2908,8 +2904,8 @@ static STopBotRes* getTopBotOutputInfo(SqlFunctionCtx* pCtx) {
return pRes;
}
-static int32_t doAddIntoResult(SqlFunctionCtx* pCtx, void* pData, int32_t rowIndex, SSDataBlock* pSrcBlock, uint16_t type,
- uint64_t uid, SResultRowEntryInfo* pEntryInfo, bool isTopQuery);
+static int32_t doAddIntoResult(SqlFunctionCtx* pCtx, void* pData, int32_t rowIndex, SSDataBlock* pSrcBlock,
+ uint16_t type, uint64_t uid, SResultRowEntryInfo* pEntryInfo, bool isTopQuery);
static void addResult(SqlFunctionCtx* pCtx, STopBotResItem* pSourceItem, int16_t type, bool isTopQuery);
@@ -2930,7 +2926,7 @@ int32_t topFunction(SqlFunctionCtx* pCtx) {
}
numOfElems++;
- char* data = colDataGetData(pCol, i);
+ char* data = colDataGetData(pCol, i);
int32_t code = doAddIntoResult(pCtx, data, i, pCtx->pSrcBlock, pRes->type, pInput->uid, pResInfo, true);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -2964,7 +2960,7 @@ int32_t bottomFunction(SqlFunctionCtx* pCtx) {
}
numOfElems++;
- char* data = colDataGetData(pCol, i);
+ char* data = colDataGetData(pCol, i);
int32_t code = doAddIntoResult(pCtx, data, i, pCtx->pSrcBlock, pRes->type, pInput->uid, pResInfo, false);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -3016,7 +3012,7 @@ static int32_t topBotResComparFn(const void* p1, const void* p2, const void* par
}
int32_t doAddIntoResult(SqlFunctionCtx* pCtx, void* pData, int32_t rowIndex, SSDataBlock* pSrcBlock, uint16_t type,
- uint64_t uid, SResultRowEntryInfo* pEntryInfo, bool isTopQuery) {
+ uint64_t uid, SResultRowEntryInfo* pEntryInfo, bool isTopQuery) {
STopBotRes* pRes = getTopBotOutputInfo(pCtx);
SVariant val = {0};
@@ -3207,7 +3203,7 @@ static char* doLoadTupleData(SSerializeDataHandle* pHandle, const STuplePos* pPo
if (pPage == NULL) {
return NULL;
}
- char* p = pPage->data + pPos->offset;
+ char* p = pPage->data + pPos->offset;
releaseBufPage(pHandle->pBuf, pPage);
return p;
} else {
@@ -4668,7 +4664,7 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
continue;
}
- char* data = colDataGetData(pInputCol, i);
+ char* data = colDataGetData(pInputCol, i);
int32_t code = doReservoirSample(pCtx, pInfo, data, i);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -4688,7 +4684,7 @@ int32_t sampleFunction(SqlFunctionCtx* pCtx) {
}
int32_t sampleFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
- int32_t code = TSDB_CODE_SUCCESS;
+ int32_t code = TSDB_CODE_SUCCESS;
SResultRowEntryInfo* pEntryInfo = GET_RES_INFO(pCtx);
SSampleInfo* pInfo = getSampleOutputInfo(pCtx);
@@ -5022,7 +5018,7 @@ int32_t modeFunction(SqlFunctionCtx* pCtx) {
}
numOfElems++;
- char* data = colDataGetData(pInputCol, i);
+ char* data = colDataGetData(pInputCol, i);
int32_t code = doModeAdd(pInfo, i, pCtx, data);
if (code != TSDB_CODE_SUCCESS) {
return code;
@@ -5428,7 +5424,6 @@ int32_t blockDistFunction(SqlFunctionCtx* pCtx) {
pDistInfo->numOfBlocks += p1.numOfBlocks;
pDistInfo->numOfTables += p1.numOfTables;
pDistInfo->numOfInmemRows += p1.numOfInmemRows;
- pDistInfo->numOfVgroups += p1.numOfVgroups;
pDistInfo->totalSize += p1.totalSize;
pDistInfo->totalRows += p1.totalRows;
pDistInfo->numOfFiles += p1.numOfFiles;
@@ -5445,6 +5440,7 @@ int32_t blockDistFunction(SqlFunctionCtx* pCtx) {
pDistInfo->maxRows = p1.maxRows;
}
+ pDistInfo->numOfVgroups += (p1.numOfTables != 0 ? 1 : 0);
for (int32_t i = 0; i < tListLen(pDistInfo->blockRowsHisto); ++i) {
pDistInfo->blockRowsHisto[i] += p1.blockRowsHisto[i];
}
@@ -5463,7 +5459,6 @@ int32_t tSerializeBlockDistInfo(void* buf, int32_t bufLen, const STableBlockDist
if (tEncodeU16(&encoder, pInfo->numOfFiles) < 0) return -1;
if (tEncodeU32(&encoder, pInfo->numOfBlocks) < 0) return -1;
if (tEncodeU32(&encoder, pInfo->numOfTables) < 0) return -1;
- if (tEncodeU32(&encoder, pInfo->numOfVgroups) < 0) return -1;
if (tEncodeU64(&encoder, pInfo->totalSize) < 0) return -1;
if (tEncodeU64(&encoder, pInfo->totalRows) < 0) return -1;
@@ -5473,6 +5468,7 @@ int32_t tSerializeBlockDistInfo(void* buf, int32_t bufLen, const STableBlockDist
if (tEncodeI32(&encoder, pInfo->defMinRows) < 0) return -1;
if (tEncodeU32(&encoder, pInfo->numOfInmemRows) < 0) return -1;
if (tEncodeU32(&encoder, pInfo->numOfSmallBlocks) < 0) return -1;
+ if (tEncodeU32(&encoder, pInfo->numOfVgroups) < 0) return -1;
for (int32_t i = 0; i < tListLen(pInfo->blockRowsHisto); ++i) {
if (tEncodeI32(&encoder, pInfo->blockRowsHisto[i]) < 0) return -1;
@@ -5495,7 +5491,6 @@ int32_t tDeserializeBlockDistInfo(void* buf, int32_t bufLen, STableBlockDistInfo
if (tDecodeU16(&decoder, &pInfo->numOfFiles) < 0) return -1;
if (tDecodeU32(&decoder, &pInfo->numOfBlocks) < 0) return -1;
if (tDecodeU32(&decoder, &pInfo->numOfTables) < 0) return -1;
- if (tDecodeU32(&decoder, &pInfo->numOfVgroups) < 0) return -1;
if (tDecodeU64(&decoder, &pInfo->totalSize) < 0) return -1;
if (tDecodeU64(&decoder, &pInfo->totalRows) < 0) return -1;
@@ -5505,6 +5500,7 @@ int32_t tDeserializeBlockDistInfo(void* buf, int32_t bufLen, STableBlockDistInfo
if (tDecodeI32(&decoder, &pInfo->defMinRows) < 0) return -1;
if (tDecodeU32(&decoder, &pInfo->numOfInmemRows) < 0) return -1;
if (tDecodeU32(&decoder, &pInfo->numOfSmallBlocks) < 0) return -1;
+ if (tDecodeU32(&decoder, &pInfo->numOfVgroups) < 0) return -1;
for (int32_t i = 0; i < tListLen(pInfo->blockRowsHisto); ++i) {
if (tDecodeI32(&decoder, &pInfo->blockRowsHisto[i]) < 0) return -1;
diff --git a/source/libs/index/src/index.c b/source/libs/index/src/index.c
index a99c87b7f9..3ed66956e8 100644
--- a/source/libs/index/src/index.c
+++ b/source/libs/index/src/index.c
@@ -126,7 +126,7 @@ int indexOpen(SIndexOpts* opts, const char* path, SIndex** index) {
idx->colObj = taosHashInit(8, taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_ENTRY_LOCK);
idx->version = 1;
- idx->path = tstrdup(path);
+ idx->path = taosStrdup(path);
taosThreadMutexInit(&idx->mtx, NULL);
tsem_init(&idx->sem, 0, 0);
diff --git a/source/libs/index/src/indexCache.c b/source/libs/index/src/indexCache.c
index ffca6ad97f..8b0e712553 100644
--- a/source/libs/index/src/indexCache.c
+++ b/source/libs/index/src/indexCache.c
@@ -340,7 +340,7 @@ IndexCache* idxCacheCreate(SIndex* idx, uint64_t suid, const char* colName, int8
cache->mem = idxInternalCacheCreate(type);
cache->mem->pCache = cache;
- cache->colName = IDX_TYPE_CONTAIN_EXTERN_TYPE(type, TSDB_DATA_TYPE_JSON) ? tstrdup(JSON_COLUMN) : tstrdup(colName);
+ cache->colName = IDX_TYPE_CONTAIN_EXTERN_TYPE(type, TSDB_DATA_TYPE_JSON) ? taosStrdup(JSON_COLUMN) : taosStrdup(colName);
cache->type = type;
cache->index = idx;
cache->version = 0;
@@ -767,7 +767,7 @@ static bool idxCacheIteratorNext(Iterate* itera) {
iv->type = ct->operaType;
iv->ver = ct->version;
- iv->colVal = tstrdup(ct->colVal);
+ iv->colVal = taosStrdup(ct->colVal);
taosArrayPush(iv->val, &ct->uid);
}
return next;
diff --git a/source/libs/index/src/indexFstAutomation.c b/source/libs/index/src/indexFstAutomation.c
index 385e832763..0c96d1aa0a 100644
--- a/source/libs/index/src/indexFstAutomation.c
+++ b/source/libs/index/src/indexFstAutomation.c
@@ -164,7 +164,7 @@ FAutoCtx* automCtxCreate(void* data, AutomationType atype) {
// add more search type
}
- ctx->data = (data != NULL ? strdup((char*)data) : NULL);
+ ctx->data = (data != NULL ? taosStrdup((char*)data) : NULL);
ctx->type = atype;
ctx->stdata = (void*)sv;
return ctx;
diff --git a/source/libs/index/src/indexFstRegex.c b/source/libs/index/src/indexFstRegex.c
index e148f211f2..8b513bfb2b 100644
--- a/source/libs/index/src/indexFstRegex.c
+++ b/source/libs/index/src/indexFstRegex.c
@@ -23,7 +23,7 @@ FstRegex *regexCreate(const char *str) {
return NULL;
}
- regex->orig = tstrdup(str);
+ regex->orig = taosStrdup(str);
// construct insts based on str
SArray *insts = taosArrayInit(256, sizeof(uint8_t));
diff --git a/source/libs/index/src/indexTfile.c b/source/libs/index/src/indexTfile.c
index d921ca7103..cdd1cc7386 100644
--- a/source/libs/index/src/indexTfile.c
+++ b/source/libs/index/src/indexTfile.c
@@ -804,7 +804,7 @@ TFileValue* tfileValueCreate(char* val) {
if (tf == NULL) {
return NULL;
}
- tf->colVal = tstrdup(val);
+ tf->colVal = taosStrdup(val);
tf->tableId = taosArrayInit(32, sizeof(uint64_t));
return tf;
}
diff --git a/source/libs/index/test/fstTest.cc b/source/libs/index/test/fstTest.cc
index 4e9a853302..b889a2209a 100644
--- a/source/libs/index/test/fstTest.cc
+++ b/source/libs/index/test/fstTest.cc
@@ -599,7 +599,7 @@ void validateTFile(char* arg) {
std::thread threads[NUM_OF_THREAD];
// std::vector threads;
SIndex* index = (SIndex*)taosMemoryCalloc(1, sizeof(SIndex));
- index->path = strdup(arg);
+ index->path = taosStrdup(arg);
TFileReader* reader = tfileReaderOpen(index, 0, 20000000, "tag1");
for (int i = 0; i < NUM_OF_THREAD; i++) {
diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c
index 185f4428f2..b4f7ea866a 100644
--- a/source/libs/nodes/src/nodesCloneFuncs.c
+++ b/source/libs/nodes/src/nodesCloneFuncs.c
@@ -40,7 +40,7 @@
if (NULL == (pSrc)->fldname) { \
break; \
} \
- (pDst)->fldname = strdup((pSrc)->fldname); \
+ (pDst)->fldname = taosStrdup((pSrc)->fldname); \
if (NULL == (pDst)->fldname) { \
return TSDB_CODE_OUT_OF_MEMORY; \
} \
diff --git a/source/libs/nodes/test/nodesTestMain.cpp b/source/libs/nodes/test/nodesTestMain.cpp
index 0515e8bbc0..a7f9a06611 100644
--- a/source/libs/nodes/test/nodesTestMain.cpp
+++ b/source/libs/nodes/test/nodesTestMain.cpp
@@ -28,7 +28,7 @@ static EDealRes rewriterTest(SNode** pNode, void* pContext) {
}
SValueNode* pVal = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE);
string tmp = to_string(stoi(((SValueNode*)(pOp->pLeft))->literal) + stoi(((SValueNode*)(pOp->pRight))->literal));
- pVal->literal = strdup(tmp.c_str());
+ pVal->literal = taosStrdup(tmp.c_str());
nodesDestroyNode(*pNode);
*pNode = (SNode*)pVal;
}
@@ -40,12 +40,12 @@ TEST(NodesTest, traverseTest) {
SOperatorNode* pOp = (SOperatorNode*)pRoot;
SOperatorNode* pLeft = (SOperatorNode*)nodesMakeNode(QUERY_NODE_OPERATOR);
pLeft->pLeft = (SNode*)nodesMakeNode(QUERY_NODE_VALUE);
- ((SValueNode*)(pLeft->pLeft))->literal = strdup("10");
+ ((SValueNode*)(pLeft->pLeft))->literal = taosStrdup("10");
pLeft->pRight = (SNode*)nodesMakeNode(QUERY_NODE_VALUE);
- ((SValueNode*)(pLeft->pRight))->literal = strdup("5");
+ ((SValueNode*)(pLeft->pRight))->literal = taosStrdup("5");
pOp->pLeft = (SNode*)pLeft;
pOp->pRight = (SNode*)nodesMakeNode(QUERY_NODE_VALUE);
- ((SValueNode*)(pOp->pRight))->literal = strdup("3");
+ ((SValueNode*)(pOp->pRight))->literal = taosStrdup("3");
EXPECT_EQ(nodeType(pRoot), QUERY_NODE_OPERATOR);
EDealRes res = DEAL_RES_CONTINUE;
diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y
index b7f3465a4a..fb6d3bfdd9 100644
--- a/source/libs/parser/inc/sql.y
+++ b/source/libs/parser/inc/sql.y
@@ -301,7 +301,7 @@ create_subtable_clause(A) ::=
%type multi_drop_clause { SNodeList* }
%destructor multi_drop_clause { nodesDestroyList($$); }
multi_drop_clause(A) ::= drop_table_clause(B). { A = createNodeList(pCxt, B); }
-multi_drop_clause(A) ::= multi_drop_clause(B) drop_table_clause(C). { A = addNodeToList(pCxt, B, C); }
+multi_drop_clause(A) ::= multi_drop_clause(B) NK_COMMA drop_table_clause(C). { A = addNodeToList(pCxt, B, C); }
drop_table_clause(A) ::= exists_opt(B) full_table_name(C). { A = createDropTableClause(pCxt, B, C); }
diff --git a/source/libs/parser/src/parAstCreater.c b/source/libs/parser/src/parAstCreater.c
index 15a796e086..f613b1bd3d 100644
--- a/source/libs/parser/src/parAstCreater.c
+++ b/source/libs/parser/src/parAstCreater.c
@@ -355,7 +355,7 @@ SNode* createDefaultDatabaseCondValue(SAstCreateContext* pCxt) {
SValueNode* val = (SValueNode*)nodesMakeNode(QUERY_NODE_VALUE);
CHECK_OUT_OF_MEM(val);
- val->literal = strdup(pCxt->pQueryCxt->db);
+ val->literal = taosStrdup(pCxt->pQueryCxt->db);
CHECK_OUT_OF_MEM(val->literal);
val->isDuration = false;
val->translate = false;
diff --git a/source/libs/parser/src/parInsertSql.c b/source/libs/parser/src/parInsertSql.c
index e82b1edee1..3fbe23592a 100644
--- a/source/libs/parser/src/parInsertSql.c
+++ b/source/libs/parser/src/parInsertSql.c
@@ -449,7 +449,7 @@ static int32_t parseTagToken(const char** end, SToken* pToken, SSchema* pSchema,
if (pToken->n + VARSTR_HEADER_SIZE > pSchema->bytes) {
return generateSyntaxErrMsg(pMsgBuf, TSDB_CODE_PAR_VALUE_TOO_LONG, pSchema->name);
}
- val->pData = strdup(pToken->z);
+ val->pData = taosStrdup(pToken->z);
val->nData = pToken->n;
break;
}
diff --git a/source/libs/parser/src/parInsertUtil.c b/source/libs/parser/src/parInsertUtil.c
index 602d82cb38..52d3569dcd 100644
--- a/source/libs/parser/src/parInsertUtil.c
+++ b/source/libs/parser/src/parInsertUtil.c
@@ -144,10 +144,10 @@ int16_t insFindCol(SToken* pColname, int16_t start, int16_t end, SSchema* pSchem
void insBuildCreateTbReq(SVCreateTbReq* pTbReq, const char* tname, STag* pTag, int64_t suid, const char* sname,
SArray* tagName, uint8_t tagNum, int32_t ttl) {
pTbReq->type = TD_CHILD_TABLE;
- pTbReq->name = strdup(tname);
+ pTbReq->name = taosStrdup(tname);
pTbReq->ctb.suid = suid;
pTbReq->ctb.tagNum = tagNum;
- if (sname) pTbReq->ctb.stbName = strdup(sname);
+ if (sname) pTbReq->ctb.stbName = taosStrdup(sname);
pTbReq->ctb.pTag = (uint8_t*)pTag;
pTbReq->ctb.tagName = taosArrayDup(tagName, NULL);
pTbReq->ttl = ttl;
diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c
index 7b6f795ecf..589cab1a2f 100644
--- a/source/libs/parser/src/parTranslater.c
+++ b/source/libs/parser/src/parTranslater.c
@@ -1692,7 +1692,7 @@ static int32_t rewriteFuncToValue(STranslateContext* pCxt, char* pLiteral, SNode
static int32_t rewriteDatabaseFunc(STranslateContext* pCxt, SNode** pNode) {
char* pCurrDb = NULL;
if (NULL != pCxt->pParseCxt->db) {
- pCurrDb = taosMemoryStrDup((void*)pCxt->pParseCxt->db);
+ pCurrDb = taosStrdup((void*)pCxt->pParseCxt->db);
if (NULL == pCurrDb) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -1701,7 +1701,7 @@ static int32_t rewriteDatabaseFunc(STranslateContext* pCxt, SNode** pNode) {
}
static int32_t rewriteClentVersionFunc(STranslateContext* pCxt, SNode** pNode) {
- char* pVer = taosMemoryStrDup((void*)version);
+ char* pVer = taosStrdup((void*)version);
if (NULL == pVer) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -1709,7 +1709,7 @@ static int32_t rewriteClentVersionFunc(STranslateContext* pCxt, SNode** pNode) {
}
static int32_t rewriteServerVersionFunc(STranslateContext* pCxt, SNode** pNode) {
- char* pVer = taosMemoryStrDup((void*)pCxt->pParseCxt->svrVer);
+ char* pVer = taosStrdup((void*)pCxt->pParseCxt->svrVer);
if (NULL == pVer) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -1720,7 +1720,7 @@ static int32_t rewriteServerStatusFunc(STranslateContext* pCxt, SNode** pNode) {
if (pCxt->pParseCxt->nodeOffline) {
return TSDB_CODE_RPC_NETWORK_UNAVAIL;
}
- char* pStatus = taosMemoryStrDup((void*)"1");
+ char* pStatus = taosStrdup((void*)"1");
return rewriteFuncToValue(pCxt, pStatus, pNode);
}
@@ -1728,7 +1728,7 @@ static int32_t rewriteUserFunc(STranslateContext* pCxt, SNode** pNode) {
char userConn[TSDB_USER_LEN + 1 + TSDB_FQDN_LEN] = {0}; // format 'user@host'
int32_t len = snprintf(userConn, sizeof(userConn), "%s@", pCxt->pParseCxt->pUser);
taosGetFqdn(userConn + len);
- char* pUserConn = taosMemoryStrDup((void*)userConn);
+ char* pUserConn = taosStrdup((void*)userConn);
if (NULL == pUserConn) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -4910,7 +4910,7 @@ static int32_t buildCreateStbReq(STranslateContext* pCxt, SCreateTableStmt* pStm
pReq->numOfColumns = LIST_LENGTH(pStmt->pCols);
pReq->numOfTags = LIST_LENGTH(pStmt->pTags);
if (pStmt->pOptions->commentNull == false) {
- pReq->pComment = strdup(pStmt->pOptions->comment);
+ pReq->pComment = taosStrdup(pStmt->pOptions->comment);
if (NULL == pReq->pComment) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -4978,7 +4978,7 @@ static int32_t buildAlterSuperTableReq(STranslateContext* pCxt, SAlterTableStmt*
if (TSDB_ALTER_TABLE_UPDATE_OPTIONS == pStmt->alterType) {
// pAlterReq->ttl = pStmt->pOptions->ttl;
if (pStmt->pOptions->commentNull == false) {
- pAlterReq->comment = strdup(pStmt->pOptions->comment);
+ pAlterReq->comment = taosStrdup(pStmt->pOptions->comment);
if (NULL == pAlterReq->comment) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -5267,7 +5267,7 @@ static int32_t getSmaIndexDstVgId(STranslateContext* pCxt, const char* pDbName,
}
static int32_t getSmaIndexSql(STranslateContext* pCxt, char** pSql, int32_t* pLen) {
- *pSql = strdup(pCxt->pParseCxt->pSql);
+ *pSql = taosStrdup(pCxt->pParseCxt->pSql);
if (NULL == *pSql) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -5505,7 +5505,7 @@ static int32_t buildCreateTopicReq(STranslateContext* pCxt, SCreateTopicStmt* pS
pReq->igExists = pStmt->ignoreExists;
pReq->withMeta = pStmt->withMeta;
- pReq->sql = strdup(pCxt->pParseCxt->pSql);
+ pReq->sql = taosStrdup(pCxt->pParseCxt->pSql);
if (NULL == pReq->sql) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -6252,7 +6252,7 @@ static int32_t buildCreateStreamReq(STranslateContext* pCxt, SCreateStreamStmt*
int32_t code = buildCreateStreamQuery(pCxt, pStmt, pReq);
if (TSDB_CODE_SUCCESS == code) {
- pReq->sql = strdup(pCxt->pParseCxt->pSql);
+ pReq->sql = taosStrdup(pCxt->pParseCxt->pSql);
if (NULL == pReq->sql) {
code = TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7144,10 +7144,10 @@ static int32_t buildNormalTableBatchReq(int32_t acctId, const SCreateTableStmt*
SVCreateTbReq req = {0};
req.type = TD_NORMAL_TABLE;
- req.name = strdup(pStmt->tableName);
+ req.name = taosStrdup(pStmt->tableName);
req.ttl = pStmt->pOptions->ttl;
if (pStmt->pOptions->commentNull == false) {
- req.comment = strdup(pStmt->pOptions->comment);
+ req.comment = taosStrdup(pStmt->pOptions->comment);
if (NULL == req.comment) {
tdDestroySVCreateTbReq(&req);
return TSDB_CODE_OUT_OF_MEMORY;
@@ -7306,17 +7306,17 @@ static void addCreateTbReqIntoVgroup(int32_t acctId, SHashObj* pVgroupHashmap, S
struct SVCreateTbReq req = {0};
req.type = TD_CHILD_TABLE;
- req.name = strdup(pStmt->tableName);
+ req.name = taosStrdup(pStmt->tableName);
req.ttl = pStmt->pOptions->ttl;
if (pStmt->pOptions->commentNull == false) {
- req.comment = strdup(pStmt->pOptions->comment);
+ req.comment = taosStrdup(pStmt->pOptions->comment);
req.commentLen = strlen(pStmt->pOptions->comment);
} else {
req.commentLen = -1;
}
req.ctb.suid = suid;
req.ctb.tagNum = tagNum;
- req.ctb.stbName = strdup(sTableNmae);
+ req.ctb.stbName = taosStrdup(sTableNmae);
req.ctb.pTag = (uint8_t*)pTag;
req.ctb.tagName = taosArrayDup(tagName, NULL);
if (pStmt->ignoreExists) {
@@ -7798,7 +7798,7 @@ static int32_t buildUpdateTagValReq(STranslateContext* pCxt, SAlterTableStmt* pS
pStmt->colName);
}
- pReq->tagName = strdup(pStmt->colName);
+ pReq->tagName = taosStrdup(pStmt->colName);
if (NULL == pReq->tagName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7871,7 +7871,7 @@ static int32_t buildAddColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt, S
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_ROW_LENGTH, TSDB_MAX_BYTES_PER_ROW);
}
- pReq->colName = strdup(pStmt->colName);
+ pReq->colName = taosStrdup(pStmt->colName);
if (NULL == pReq->colName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7894,7 +7894,7 @@ static int32_t buildDropColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt,
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_CANNOT_DROP_PRIMARY_KEY);
}
- pReq->colName = strdup(pStmt->colName);
+ pReq->colName = taosStrdup(pStmt->colName);
if (NULL == pReq->colName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7919,7 +7919,7 @@ static int32_t buildUpdateColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_ROW_LENGTH, TSDB_MAX_BYTES_PER_ROW);
}
- pReq->colName = strdup(pStmt->colName);
+ pReq->colName = taosStrdup(pStmt->colName);
if (NULL == pReq->colName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7937,8 +7937,8 @@ static int32_t buildRenameColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_DUPLICATED_COLUMN);
}
- pReq->colName = strdup(pStmt->colName);
- pReq->colNewName = strdup(pStmt->newColName);
+ pReq->colName = taosStrdup(pStmt->colName);
+ pReq->colNewName = taosStrdup(pStmt->newColName);
if (NULL == pReq->colName || NULL == pReq->colNewName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -7955,7 +7955,7 @@ static int32_t buildUpdateOptionsReq(STranslateContext* pCxt, SAlterTableStmt* p
if (TSDB_CODE_SUCCESS == code) {
if (pStmt->pOptions->commentNull == false) {
- pReq->newComment = strdup(pStmt->pOptions->comment);
+ pReq->newComment = taosStrdup(pStmt->pOptions->comment);
if (NULL == pReq->newComment) {
code = TSDB_CODE_OUT_OF_MEMORY;
} else {
@@ -7971,7 +7971,7 @@ static int32_t buildUpdateOptionsReq(STranslateContext* pCxt, SAlterTableStmt* p
static int32_t buildAlterTbReq(STranslateContext* pCxt, SAlterTableStmt* pStmt, STableMeta* pTableMeta,
SVAlterTbReq* pReq) {
- pReq->tbName = strdup(pStmt->tableName);
+ pReq->tbName = taosStrdup(pStmt->tableName);
if (NULL == pReq->tbName) {
return TSDB_CODE_OUT_OF_MEMORY;
}
diff --git a/source/libs/parser/src/parUtil.c b/source/libs/parser/src/parUtil.c
index fa091901b6..89a42cb03c 100644
--- a/source/libs/parser/src/parUtil.c
+++ b/source/libs/parser/src/parUtil.c
@@ -971,7 +971,7 @@ static SArray* smaIndexesDup(SArray* pSrc) {
}
for (int32_t i = 0; i < size; ++i) {
STableIndexInfo* pIndex = taosArrayGet(pDst, i);
- pIndex->expr = taosMemoryStrDup(((STableIndexInfo*)taosArrayGet(pSrc, i))->expr);
+ pIndex->expr = taosStrdup(((STableIndexInfo*)taosArrayGet(pSrc, i))->expr);
if (NULL == pIndex->expr) {
taosArrayDestroyEx(pDst, destroySmaIndex);
return NULL;
diff --git a/source/libs/parser/src/sql.c b/source/libs/parser/src/sql.c
index f38233aa76..b6940f8395 100644
--- a/source/libs/parser/src/sql.c
+++ b/source/libs/parser/src/sql.c
@@ -139,17 +139,17 @@ typedef union {
#define ParseCTX_FETCH
#define ParseCTX_STORE
#define YYFALLBACK 1
-#define YYNSTATE 742
+#define YYNSTATE 743
#define YYNRULE 563
#define YYNTOKEN 328
-#define YY_MAX_SHIFT 741
-#define YY_MIN_SHIFTREDUCE 1101
-#define YY_MAX_SHIFTREDUCE 1663
-#define YY_ERROR_ACTION 1664
-#define YY_ACCEPT_ACTION 1665
-#define YY_NO_ACTION 1666
-#define YY_MIN_REDUCE 1667
-#define YY_MAX_REDUCE 2229
+#define YY_MAX_SHIFT 742
+#define YY_MIN_SHIFTREDUCE 1102
+#define YY_MAX_SHIFTREDUCE 1664
+#define YY_ERROR_ACTION 1665
+#define YY_ACCEPT_ACTION 1666
+#define YY_NO_ACTION 1667
+#define YY_MIN_REDUCE 1668
+#define YY_MAX_REDUCE 2230
/************* End control #defines *******************************************/
#define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
@@ -218,281 +218,281 @@ typedef union {
*********** Begin parsing tables **********************************************/
#define YY_ACTTAB_COUNT (2749)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 1940, 2205, 1799, 606, 481, 2200, 482, 1703, 490, 1810,
- /* 10 */ 482, 1703, 45, 43, 1591, 1938, 618, 31, 176, 178,
- /* 20 */ 379, 2204, 1440, 38, 37, 2201, 2203, 44, 42, 41,
- /* 30 */ 40, 39, 1861, 1521, 140, 1438, 1465, 2041, 1874, 347,
- /* 40 */ 1923, 2027, 38, 37, 612, 357, 44, 42, 41, 40,
- /* 50 */ 39, 424, 2023, 2205, 1872, 38, 37, 2200, 1516, 44,
- /* 60 */ 42, 41, 40, 39, 18, 499, 384, 1468, 2059, 1867,
- /* 70 */ 1869, 1446, 1665, 2204, 167, 606, 645, 2201, 2202, 1775,
- /* 80 */ 1153, 2009, 1152, 647, 45, 43, 2019, 2025, 360, 569,
- /* 90 */ 1134, 330, 379, 2200, 1440, 220, 14, 641, 340, 181,
- /* 100 */ 2137, 2138, 549, 138, 2142, 1521, 140, 1438, 2206, 182,
- /* 110 */ 601, 1154, 2040, 2201, 595, 547, 2076, 545, 738, 324,
- /* 120 */ 2042, 651, 2044, 2045, 646, 644, 641, 632, 2094, 1136,
- /* 130 */ 1516, 1139, 1140, 1523, 1524, 630, 18, 480, 392, 1550,
- /* 140 */ 485, 1709, 391, 1446, 1690, 1261, 673, 672, 671, 1265,
- /* 150 */ 670, 1267, 1268, 669, 1270, 666, 176, 1276, 663, 1278,
- /* 160 */ 1279, 660, 657, 1496, 1506, 1940, 606, 616, 14, 1522,
- /* 170 */ 1525, 267, 2137, 605, 382, 133, 604, 370, 1924, 2200,
- /* 180 */ 1937, 618, 161, 569, 1441, 617, 1439, 2200, 2009, 358,
- /* 190 */ 738, 1823, 630, 270, 593, 182, 1551, 140, 1872, 2201,
- /* 200 */ 595, 499, 2206, 182, 630, 1523, 1524, 2201, 595, 589,
- /* 210 */ 1444, 1445, 247, 1495, 1498, 1499, 1500, 1501, 1502, 1503,
- /* 220 */ 1504, 1505, 643, 639, 1514, 1515, 1517, 1518, 1519, 1520,
- /* 230 */ 2, 61, 497, 92, 1933, 1496, 1506, 584, 106, 685,
- /* 240 */ 122, 1522, 1525, 121, 120, 119, 118, 117, 116, 115,
- /* 250 */ 114, 113, 141, 1595, 351, 166, 1441, 1679, 1439, 1465,
- /* 260 */ 1813, 608, 180, 2137, 2138, 1464, 138, 2142, 48, 34,
- /* 270 */ 377, 1545, 1546, 1547, 1548, 1549, 1553, 1554, 1555, 1556,
- /* 280 */ 48, 61, 1444, 1445, 1221, 1495, 1498, 1499, 1500, 1501,
- /* 290 */ 1502, 1503, 1504, 1505, 643, 639, 1514, 1515, 1517, 1518,
- /* 300 */ 1519, 1520, 2, 2027, 11, 45, 43, 44, 42, 41,
- /* 310 */ 40, 39, 1465, 379, 2023, 1440, 352, 741, 350, 349,
- /* 320 */ 1223, 522, 590, 585, 578, 524, 1521, 1465, 1438, 489,
- /* 330 */ 2041, 295, 485, 1709, 606, 35, 288, 38, 37, 602,
- /* 340 */ 411, 44, 42, 41, 40, 39, 175, 523, 2019, 2025,
- /* 350 */ 361, 1516, 731, 727, 723, 719, 293, 18, 86, 641,
- /* 360 */ 487, 2059, 413, 409, 1446, 140, 483, 558, 416, 648,
- /* 370 */ 415, 2144, 136, 1153, 2009, 1152, 647, 45, 43, 1526,
- /* 380 */ 1466, 1816, 2205, 185, 11, 379, 9, 1440, 61, 14,
- /* 390 */ 279, 280, 65, 107, 414, 278, 286, 2141, 1521, 1467,
- /* 400 */ 1438, 633, 1497, 2101, 1154, 2040, 1736, 631, 1689, 2076,
- /* 410 */ 631, 738, 168, 2042, 651, 2044, 2045, 646, 1668, 641,
- /* 420 */ 185, 132, 677, 1516, 187, 1865, 1523, 1524, 520, 627,
- /* 430 */ 183, 2137, 2138, 185, 138, 2142, 1446, 631, 1821, 122,
- /* 440 */ 11, 1821, 121, 120, 119, 118, 117, 116, 115, 114,
- /* 450 */ 113, 132, 2009, 570, 2166, 194, 1496, 1506, 525, 1874,
- /* 460 */ 100, 46, 1522, 1525, 273, 635, 367, 2101, 1821, 272,
- /* 470 */ 1359, 1360, 535, 534, 533, 1872, 1653, 1441, 1797, 1439,
- /* 480 */ 137, 529, 1814, 738, 61, 528, 1403, 462, 241, 1904,
- /* 490 */ 527, 532, 83, 1304, 1305, 82, 526, 237, 1523, 1524,
- /* 500 */ 1868, 1869, 1466, 1444, 1445, 1660, 1495, 1498, 1499, 1500,
- /* 510 */ 1501, 1502, 1503, 1504, 1505, 643, 639, 1514, 1515, 1517,
- /* 520 */ 1518, 1519, 1520, 2, 535, 534, 533, 1446, 1496, 1506,
- /* 530 */ 1667, 1874, 137, 529, 1522, 1525, 631, 528, 345, 631,
- /* 540 */ 185, 685, 527, 532, 269, 198, 197, 1872, 526, 1441,
- /* 550 */ 54, 1439, 617, 422, 131, 130, 129, 128, 127, 126,
- /* 560 */ 125, 124, 123, 1414, 1415, 418, 676, 1821, 461, 417,
- /* 570 */ 1821, 41, 40, 39, 2041, 1444, 1445, 617, 1495, 1498,
- /* 580 */ 1499, 1500, 1501, 1502, 1503, 1504, 1505, 643, 639, 1514,
- /* 590 */ 1515, 1517, 1518, 1519, 1520, 2, 45, 43, 1467, 615,
- /* 600 */ 1919, 1933, 86, 1659, 379, 2059, 1440, 631, 594, 631,
- /* 610 */ 569, 190, 2200, 648, 2200, 1376, 1377, 1521, 2009, 1438,
- /* 620 */ 647, 423, 221, 432, 626, 1817, 1933, 593, 182, 2206,
- /* 630 */ 182, 61, 2201, 595, 2201, 595, 185, 171, 1821, 1688,
- /* 640 */ 1821, 442, 1516, 516, 512, 508, 504, 218, 631, 2040,
- /* 650 */ 441, 1375, 1378, 2076, 1619, 1446, 110, 2042, 651, 2044,
- /* 660 */ 2045, 646, 447, 641, 49, 371, 1531, 1687, 45, 43,
- /* 670 */ 2129, 2204, 1465, 164, 2128, 2125, 379, 697, 1440, 1821,
- /* 680 */ 46, 540, 1823, 2009, 87, 1686, 2144, 216, 1806, 1521,
- /* 690 */ 1685, 1438, 142, 38, 37, 2100, 550, 44, 42, 41,
- /* 700 */ 40, 39, 738, 581, 580, 1617, 1618, 1620, 1621, 1622,
- /* 710 */ 234, 2009, 2140, 1684, 1516, 38, 37, 1523, 1524, 44,
- /* 720 */ 42, 41, 40, 39, 236, 543, 33, 1446, 235, 2009,
- /* 730 */ 537, 1798, 38, 37, 2009, 233, 44, 42, 41, 40,
- /* 740 */ 39, 1683, 594, 269, 1552, 2144, 2200, 1496, 1506, 1874,
- /* 750 */ 631, 27, 14, 1522, 1525, 215, 209, 2009, 13, 12,
- /* 760 */ 214, 593, 182, 495, 448, 1873, 2201, 595, 1441, 382,
- /* 770 */ 1439, 2139, 69, 1588, 738, 68, 2059, 164, 1682, 207,
- /* 780 */ 1808, 1821, 1630, 185, 588, 2009, 1823, 89, 335, 1523,
- /* 790 */ 1524, 356, 1977, 551, 1444, 1445, 1468, 1495, 1498, 1499,
- /* 800 */ 1500, 1501, 1502, 1503, 1504, 1505, 643, 639, 1514, 1515,
- /* 810 */ 1517, 1518, 1519, 1520, 2, 1497, 185, 32, 1804, 1496,
- /* 820 */ 1506, 333, 2009, 1463, 683, 1522, 1525, 1557, 164, 587,
- /* 830 */ 455, 709, 707, 469, 1874, 152, 468, 1824, 238, 683,
- /* 840 */ 1441, 372, 1439, 154, 153, 680, 679, 678, 151, 1681,
- /* 850 */ 1872, 438, 1678, 470, 1564, 675, 440, 1919, 154, 153,
- /* 860 */ 680, 679, 678, 151, 531, 530, 1444, 1445, 192, 1495,
- /* 870 */ 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 643, 639,
- /* 880 */ 1514, 1515, 1517, 1518, 1519, 1520, 2, 698, 53, 1791,
- /* 890 */ 631, 681, 165, 2009, 1865, 1677, 2009, 308, 348, 1733,
- /* 900 */ 631, 38, 37, 1796, 498, 44, 42, 41, 40, 39,
- /* 910 */ 428, 306, 72, 242, 1818, 71, 1676, 1919, 642, 38,
- /* 920 */ 37, 1821, 1874, 44, 42, 41, 40, 39, 196, 383,
- /* 930 */ 51, 1821, 3, 203, 477, 475, 472, 597, 1872, 2009,
- /* 940 */ 466, 191, 524, 460, 459, 458, 457, 454, 453, 452,
- /* 950 */ 451, 450, 446, 445, 444, 443, 332, 435, 434, 433,
- /* 960 */ 2009, 430, 429, 346, 523, 715, 714, 713, 712, 389,
- /* 970 */ 61, 711, 710, 144, 705, 704, 703, 702, 701, 700,
- /* 980 */ 699, 156, 695, 694, 693, 388, 387, 690, 689, 688,
- /* 990 */ 687, 686, 631, 631, 1675, 38, 37, 564, 2002, 44,
- /* 1000 */ 42, 41, 40, 39, 1440, 631, 239, 565, 1607, 108,
- /* 1010 */ 2041, 683, 1995, 631, 631, 631, 1468, 1438, 1587, 628,
- /* 1020 */ 8, 1674, 1673, 1821, 1821, 1672, 1671, 629, 610, 614,
- /* 1030 */ 154, 153, 680, 679, 678, 151, 1821, 682, 2009, 1465,
- /* 1040 */ 1865, 2059, 1670, 569, 1821, 1821, 1821, 2200, 152, 609,
- /* 1050 */ 80, 79, 421, 1446, 2009, 189, 647, 631, 163, 2041,
- /* 1060 */ 399, 302, 2206, 182, 1851, 2009, 2009, 2201, 595, 2009,
- /* 1070 */ 2009, 283, 598, 2027, 331, 1139, 1140, 407, 1449, 405,
- /* 1080 */ 401, 397, 394, 414, 2023, 2040, 2009, 1680, 1821, 2076,
- /* 1090 */ 2059, 1812, 109, 2042, 651, 2044, 2045, 646, 648, 641,
- /* 1100 */ 738, 1409, 2023, 2009, 179, 647, 2129, 1776, 385, 631,
- /* 1110 */ 373, 2125, 2149, 1584, 425, 638, 164, 2028, 2019, 2025,
- /* 1120 */ 374, 631, 185, 386, 184, 1823, 2041, 426, 2023, 641,
- /* 1130 */ 2003, 146, 2155, 134, 2040, 289, 2019, 2025, 2076, 1710,
- /* 1140 */ 1821, 109, 2042, 651, 2044, 2045, 646, 641, 641, 2169,
- /* 1150 */ 152, 143, 1821, 149, 2100, 2129, 245, 2059, 2041, 373,
- /* 1160 */ 2125, 246, 2019, 2025, 73, 609, 1441, 2030, 1439, 1723,
- /* 1170 */ 2009, 226, 647, 641, 224, 569, 1716, 228, 230, 2200,
- /* 1180 */ 227, 229, 1497, 232, 1714, 553, 231, 552, 733, 2059,
- /* 1190 */ 264, 536, 1444, 1445, 2206, 182, 90, 648, 538, 2201,
- /* 1200 */ 595, 2040, 2009, 1412, 647, 2076, 541, 2041, 109, 2042,
- /* 1210 */ 651, 2044, 2045, 646, 81, 641, 2032, 63, 63, 251,
- /* 1220 */ 179, 152, 2129, 1662, 1663, 52, 373, 2125, 1584, 1452,
- /* 1230 */ 47, 276, 568, 2040, 70, 13, 12, 2076, 2059, 1448,
- /* 1240 */ 109, 2042, 651, 2044, 2045, 646, 648, 641, 2156, 1183,
- /* 1250 */ 582, 2009, 2220, 647, 2129, 105, 150, 556, 373, 2125,
- /* 1260 */ 152, 1542, 63, 47, 47, 102, 2041, 219, 258, 2163,
- /* 1270 */ 1616, 1615, 253, 691, 613, 655, 150, 152, 2060, 135,
- /* 1280 */ 150, 390, 2040, 1373, 281, 1184, 2076, 623, 1704, 109,
- /* 1290 */ 2042, 651, 2044, 2045, 646, 1202, 641, 2059, 692, 599,
- /* 1300 */ 2041, 2220, 569, 2129, 1928, 648, 2200, 373, 2125, 285,
- /* 1310 */ 2009, 1862, 647, 1254, 2159, 1558, 1507, 301, 2176, 607,
- /* 1320 */ 1200, 2206, 182, 263, 266, 1, 2201, 595, 1282, 1286,
- /* 1330 */ 1293, 2059, 1291, 155, 4, 393, 398, 344, 1396, 648,
- /* 1340 */ 296, 2040, 195, 427, 2009, 2076, 647, 1468, 109, 2042,
- /* 1350 */ 651, 2044, 2045, 646, 431, 641, 1929, 464, 436, 1463,
- /* 1360 */ 2220, 449, 2129, 1921, 463, 456, 373, 2125, 465, 473,
- /* 1370 */ 471, 200, 474, 2041, 476, 2040, 478, 576, 1469, 2076,
- /* 1380 */ 479, 488, 109, 2042, 651, 2044, 2045, 646, 1471, 641,
- /* 1390 */ 1451, 491, 376, 375, 2220, 206, 2129, 1466, 492, 208,
- /* 1400 */ 373, 2125, 1454, 1470, 2059, 493, 1472, 211, 494, 496,
- /* 1410 */ 517, 2194, 648, 1521, 1156, 1447, 518, 2009, 213, 647,
- /* 1420 */ 84, 85, 2041, 521, 500, 217, 519, 1986, 1811, 223,
- /* 1430 */ 334, 1983, 1807, 112, 225, 297, 555, 88, 1516, 1982,
- /* 1440 */ 559, 157, 148, 158, 1809, 557, 240, 243, 2040, 1805,
- /* 1450 */ 159, 1446, 2076, 2059, 566, 109, 2042, 651, 2044, 2045,
- /* 1460 */ 646, 648, 641, 160, 583, 2175, 2009, 2220, 647, 2129,
- /* 1470 */ 621, 2160, 2174, 373, 2125, 573, 563, 7, 2151, 592,
- /* 1480 */ 579, 2170, 362, 586, 2148, 574, 2041, 257, 572, 571,
- /* 1490 */ 172, 260, 249, 259, 603, 560, 600, 2040, 637, 252,
- /* 1500 */ 363, 2076, 1584, 139, 109, 2042, 651, 2044, 2045, 646,
- /* 1510 */ 265, 641, 1467, 271, 2223, 2199, 2104, 2059, 2129, 262,
- /* 1520 */ 611, 95, 373, 2125, 2145, 648, 1473, 298, 366, 1934,
- /* 1530 */ 2009, 624, 647, 619, 299, 620, 1948, 1947, 1946, 369,
- /* 1540 */ 625, 97, 99, 300, 60, 101, 2110, 1866, 653, 1822,
- /* 1550 */ 292, 734, 1792, 327, 2041, 2001, 261, 336, 337, 312,
- /* 1560 */ 737, 2040, 735, 303, 1455, 2076, 1450, 2000, 109, 2042,
- /* 1570 */ 651, 2044, 2045, 646, 305, 641, 307, 50, 1999, 77,
- /* 1580 */ 2102, 1996, 2129, 395, 2041, 2059, 373, 2125, 396, 1431,
- /* 1590 */ 1458, 1460, 1432, 648, 188, 326, 316, 400, 2009, 1994,
- /* 1600 */ 647, 404, 1993, 639, 1514, 1515, 1517, 1518, 1519, 1520,
- /* 1610 */ 402, 403, 406, 1992, 2041, 2059, 1991, 408, 410, 1990,
- /* 1620 */ 412, 78, 1399, 648, 1398, 1960, 1959, 1958, 2009, 2040,
- /* 1630 */ 647, 419, 420, 2076, 1957, 1956, 109, 2042, 651, 2044,
- /* 1640 */ 2045, 646, 1350, 641, 2041, 2059, 1912, 1911, 634, 1909,
- /* 1650 */ 2129, 145, 1908, 648, 373, 2125, 1907, 1910, 2009, 2040,
- /* 1660 */ 647, 1906, 1905, 2076, 193, 437, 110, 2042, 651, 2044,
- /* 1670 */ 2045, 646, 1903, 641, 1902, 2059, 1901, 1900, 2041, 439,
- /* 1680 */ 2129, 1914, 1899, 648, 636, 2125, 1898, 1897, 2009, 649,
- /* 1690 */ 647, 1896, 1895, 2076, 1894, 1893, 110, 2042, 651, 2044,
- /* 1700 */ 2045, 646, 1892, 641, 1891, 2041, 1890, 1889, 1888, 2059,
- /* 1710 */ 2129, 1887, 1886, 1885, 339, 2125, 1884, 648, 1883, 2040,
- /* 1720 */ 147, 1882, 2009, 2076, 647, 1913, 169, 2042, 651, 2044,
- /* 1730 */ 2045, 646, 1881, 641, 1880, 1879, 2059, 1352, 1878, 1877,
- /* 1740 */ 467, 1876, 1875, 1739, 648, 1229, 199, 1738, 201, 2009,
- /* 1750 */ 1737, 647, 2029, 2040, 2041, 202, 1735, 2076, 1699, 204,
- /* 1760 */ 168, 2042, 651, 2044, 2045, 646, 75, 641, 177, 1142,
- /* 1770 */ 484, 1141, 1698, 486, 1973, 1967, 205, 1955, 596, 2221,
- /* 1780 */ 2040, 212, 1954, 76, 2076, 2059, 1932, 110, 2042, 651,
- /* 1790 */ 2044, 2045, 646, 648, 641, 1800, 1176, 1734, 2009, 210,
- /* 1800 */ 647, 2129, 2167, 1732, 501, 503, 2126, 502, 1730, 506,
- /* 1810 */ 507, 505, 1728, 509, 1726, 510, 2041, 1713, 513, 511,
- /* 1820 */ 515, 514, 1712, 1695, 1802, 62, 1298, 1297, 1801, 2040,
- /* 1830 */ 1724, 222, 706, 2076, 1220, 1219, 318, 2042, 651, 2044,
- /* 1840 */ 2045, 646, 1218, 641, 1217, 1214, 708, 2059, 2041, 1212,
- /* 1850 */ 1213, 1211, 1717, 353, 354, 648, 539, 1715, 355, 1694,
- /* 1860 */ 2009, 542, 647, 1693, 544, 1692, 548, 111, 546, 1419,
- /* 1870 */ 1421, 1972, 1418, 1405, 55, 1966, 561, 1953, 1951, 2059,
- /* 1880 */ 591, 1423, 2205, 26, 368, 66, 162, 648, 16, 244,
- /* 1890 */ 19, 2040, 2009, 1632, 647, 2076, 575, 2041, 169, 2042,
- /* 1900 */ 651, 2044, 2045, 646, 577, 641, 567, 28, 58, 248,
- /* 1910 */ 562, 359, 5, 59, 2041, 250, 1614, 170, 255, 256,
- /* 1920 */ 6, 254, 20, 2040, 30, 64, 1647, 2076, 2059, 2030,
- /* 1930 */ 325, 2042, 651, 2044, 2045, 646, 645, 641, 29, 21,
- /* 1940 */ 1606, 2009, 1652, 647, 91, 2059, 2041, 1653, 17, 1646,
- /* 1950 */ 378, 2222, 364, 648, 1651, 1650, 365, 1581, 2009, 1580,
- /* 1960 */ 647, 1952, 57, 268, 1950, 56, 1949, 1931, 94, 93,
- /* 1970 */ 173, 2041, 2040, 274, 1930, 96, 2076, 2059, 287, 324,
- /* 1980 */ 2042, 651, 2044, 2045, 646, 648, 641, 275, 2095, 2040,
- /* 1990 */ 2009, 1612, 647, 2076, 102, 2041, 325, 2042, 651, 2044,
- /* 2000 */ 2045, 646, 2059, 641, 22, 277, 282, 380, 622, 67,
- /* 2010 */ 648, 12, 23, 1456, 1543, 2009, 1533, 647, 174, 284,
- /* 2020 */ 2041, 554, 1511, 98, 1532, 2076, 2059, 10, 320, 2042,
- /* 2030 */ 651, 2044, 2045, 646, 648, 641, 2079, 640, 36, 2009,
- /* 2040 */ 1509, 647, 1508, 1480, 15, 24, 2040, 186, 1488, 25,
- /* 2050 */ 2076, 2059, 654, 325, 2042, 651, 2044, 2045, 646, 648,
- /* 2060 */ 641, 650, 652, 381, 2009, 656, 647, 1283, 658, 659,
- /* 2070 */ 2040, 661, 1280, 1277, 2076, 662, 664, 309, 2042, 651,
- /* 2080 */ 2044, 2045, 646, 2041, 641, 1271, 665, 667, 1260, 1269,
- /* 2090 */ 668, 674, 290, 103, 104, 2040, 1292, 1275, 1274, 2076,
- /* 2100 */ 1273, 1272, 310, 2042, 651, 2044, 2045, 646, 74, 641,
- /* 2110 */ 2041, 1288, 1174, 684, 2059, 1208, 1207, 1206, 1205, 291,
- /* 2120 */ 1204, 1203, 648, 1201, 1227, 1199, 1198, 2009, 1197, 647,
- /* 2130 */ 696, 1195, 2041, 1194, 1193, 1192, 1191, 1190, 1189, 1224,
- /* 2140 */ 1222, 2059, 1186, 1185, 1182, 1181, 1180, 1179, 1731, 648,
- /* 2150 */ 716, 1729, 717, 718, 2009, 720, 647, 722, 2040, 1727,
- /* 2160 */ 724, 726, 2076, 2059, 721, 311, 2042, 651, 2044, 2045,
- /* 2170 */ 646, 648, 641, 1725, 725, 728, 2009, 729, 647, 1711,
- /* 2180 */ 730, 732, 1131, 1691, 294, 2040, 736, 740, 1442, 2076,
- /* 2190 */ 304, 739, 317, 2042, 651, 2044, 2045, 646, 1666, 641,
- /* 2200 */ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 2040, 1666, 1666,
- /* 2210 */ 1666, 2076, 2041, 1666, 321, 2042, 651, 2044, 2045, 646,
- /* 2220 */ 1666, 641, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 2041,
- /* 2230 */ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
- /* 2240 */ 1666, 1666, 1666, 2059, 1666, 1666, 2041, 1666, 1666, 1666,
- /* 2250 */ 1666, 648, 1666, 1666, 1666, 1666, 2009, 1666, 647, 1666,
- /* 2260 */ 2059, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 648, 1666,
- /* 2270 */ 1666, 1666, 1666, 2009, 1666, 647, 1666, 2059, 2041, 1666,
- /* 2280 */ 1666, 1666, 1666, 1666, 1666, 648, 1666, 2040, 1666, 1666,
- /* 2290 */ 2009, 2076, 647, 1666, 313, 2042, 651, 2044, 2045, 646,
- /* 2300 */ 1666, 641, 1666, 2041, 2040, 1666, 1666, 1666, 2076, 2059,
- /* 2310 */ 1666, 322, 2042, 651, 2044, 2045, 646, 648, 641, 1666,
- /* 2320 */ 1666, 2040, 2009, 1666, 647, 2076, 1666, 2041, 314, 2042,
- /* 2330 */ 651, 2044, 2045, 646, 2059, 641, 1666, 1666, 1666, 1666,
- /* 2340 */ 1666, 1666, 648, 1666, 1666, 1666, 1666, 2009, 1666, 647,
- /* 2350 */ 1666, 1666, 2041, 2040, 1666, 1666, 1666, 2076, 2059, 1666,
- /* 2360 */ 323, 2042, 651, 2044, 2045, 646, 648, 641, 1666, 1666,
- /* 2370 */ 1666, 2009, 1666, 647, 1666, 1666, 1666, 1666, 2040, 1666,
- /* 2380 */ 1666, 1666, 2076, 2059, 1666, 315, 2042, 651, 2044, 2045,
- /* 2390 */ 646, 648, 641, 1666, 1666, 1666, 2009, 1666, 647, 1666,
- /* 2400 */ 1666, 1666, 2040, 1666, 1666, 1666, 2076, 1666, 1666, 328,
- /* 2410 */ 2042, 651, 2044, 2045, 646, 2041, 641, 1666, 1666, 1666,
- /* 2420 */ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 2040, 1666, 1666,
- /* 2430 */ 1666, 2076, 1666, 1666, 329, 2042, 651, 2044, 2045, 646,
- /* 2440 */ 1666, 641, 2041, 1666, 1666, 1666, 2059, 1666, 1666, 1666,
- /* 2450 */ 1666, 1666, 1666, 1666, 648, 1666, 1666, 1666, 1666, 2009,
- /* 2460 */ 1666, 647, 1666, 1666, 2041, 1666, 1666, 1666, 1666, 1666,
- /* 2470 */ 1666, 1666, 1666, 2059, 1666, 1666, 1666, 1666, 1666, 1666,
- /* 2480 */ 1666, 648, 1666, 1666, 1666, 1666, 2009, 1666, 647, 1666,
- /* 2490 */ 2040, 1666, 1666, 1666, 2076, 2059, 1666, 2053, 2042, 651,
- /* 2500 */ 2044, 2045, 646, 648, 641, 1666, 1666, 1666, 2009, 1666,
- /* 2510 */ 647, 1666, 1666, 1666, 1666, 1666, 1666, 2040, 1666, 1666,
- /* 2520 */ 1666, 2076, 1666, 1666, 2052, 2042, 651, 2044, 2045, 646,
- /* 2530 */ 1666, 641, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 2040,
- /* 2540 */ 1666, 1666, 1666, 2076, 2041, 1666, 2051, 2042, 651, 2044,
- /* 2550 */ 2045, 646, 1666, 641, 1666, 1666, 1666, 1666, 1666, 1666,
- /* 2560 */ 1666, 2041, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
- /* 2570 */ 1666, 1666, 1666, 1666, 1666, 2059, 1666, 1666, 2041, 1666,
- /* 2580 */ 1666, 1666, 1666, 648, 1666, 1666, 1666, 1666, 2009, 1666,
- /* 2590 */ 647, 1666, 2059, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
- /* 2600 */ 648, 1666, 1666, 1666, 1666, 2009, 1666, 647, 1666, 2059,
- /* 2610 */ 2041, 1666, 1666, 1666, 1666, 1666, 1666, 648, 1666, 2040,
- /* 2620 */ 1666, 1666, 2009, 2076, 647, 1666, 341, 2042, 651, 2044,
- /* 2630 */ 2045, 646, 1666, 641, 1666, 2041, 2040, 1666, 1666, 1666,
- /* 2640 */ 2076, 2059, 1666, 342, 2042, 651, 2044, 2045, 646, 648,
- /* 2650 */ 641, 1666, 1666, 2040, 2009, 1666, 647, 2076, 1666, 2041,
- /* 2660 */ 338, 2042, 651, 2044, 2045, 646, 2059, 641, 1666, 1666,
- /* 2670 */ 1666, 1666, 1666, 1666, 648, 1666, 1666, 1666, 1666, 2009,
- /* 2680 */ 1666, 647, 1666, 1666, 1666, 2040, 1666, 1666, 1666, 2076,
- /* 2690 */ 2059, 1666, 343, 2042, 651, 2044, 2045, 646, 648, 641,
- /* 2700 */ 1666, 1666, 1666, 2009, 1666, 647, 1666, 1666, 1666, 1666,
- /* 2710 */ 649, 1666, 1666, 1666, 2076, 1666, 1666, 320, 2042, 651,
- /* 2720 */ 2044, 2045, 646, 1666, 641, 1666, 1666, 1666, 1666, 1666,
- /* 2730 */ 1666, 1666, 1666, 1666, 2040, 1666, 1666, 1666, 2076, 1666,
- /* 2740 */ 1666, 319, 2042, 651, 2044, 2045, 646, 1666, 641,
+ /* 0 */ 1941, 2206, 1798, 607, 482, 2201, 483, 1704, 491, 1811,
+ /* 10 */ 483, 1704, 45, 43, 1592, 1939, 619, 31, 176, 178,
+ /* 20 */ 380, 2205, 1441, 38, 37, 2202, 2204, 44, 42, 41,
+ /* 30 */ 40, 39, 1862, 1522, 139, 1439, 1466, 2042, 1875, 347,
+ /* 40 */ 1924, 2028, 38, 37, 613, 358, 44, 42, 41, 40,
+ /* 50 */ 39, 425, 2024, 2206, 1873, 38, 37, 2201, 1517, 44,
+ /* 60 */ 42, 41, 40, 39, 18, 686, 385, 1469, 2060, 1868,
+ /* 70 */ 1870, 1447, 1666, 2205, 167, 607, 646, 2202, 2203, 1776,
+ /* 80 */ 1154, 2010, 1153, 648, 45, 43, 2020, 2026, 361, 570,
+ /* 90 */ 1135, 330, 380, 2201, 1441, 220, 14, 642, 340, 181,
+ /* 100 */ 2138, 2139, 550, 137, 2143, 1522, 139, 1439, 2207, 182,
+ /* 110 */ 602, 1155, 2041, 2202, 596, 548, 2077, 546, 739, 324,
+ /* 120 */ 2043, 652, 2045, 2046, 647, 645, 642, 633, 2095, 1137,
+ /* 130 */ 1517, 1140, 1141, 1524, 1525, 631, 18, 481, 393, 1551,
+ /* 140 */ 486, 1710, 392, 1447, 1691, 1262, 674, 673, 672, 1266,
+ /* 150 */ 671, 1268, 1269, 670, 1271, 667, 176, 1277, 664, 1279,
+ /* 160 */ 1280, 661, 658, 1497, 1507, 1941, 607, 617, 14, 1523,
+ /* 170 */ 1526, 267, 2138, 606, 383, 133, 605, 371, 1925, 2201,
+ /* 180 */ 1938, 619, 161, 570, 1442, 618, 1440, 2201, 2010, 359,
+ /* 190 */ 739, 1824, 631, 270, 594, 182, 1552, 139, 1873, 2202,
+ /* 200 */ 596, 500, 2207, 182, 631, 1524, 1525, 2202, 596, 590,
+ /* 210 */ 1445, 1446, 247, 1496, 1499, 1500, 1501, 1502, 1503, 1504,
+ /* 220 */ 1505, 1506, 644, 640, 1515, 1516, 1518, 1519, 1520, 1521,
+ /* 230 */ 2, 61, 498, 92, 1934, 1497, 1507, 585, 106, 686,
+ /* 240 */ 122, 1523, 1526, 121, 120, 119, 118, 117, 116, 115,
+ /* 250 */ 114, 113, 140, 1596, 352, 166, 1442, 1680, 1440, 1466,
+ /* 260 */ 1814, 609, 180, 2138, 2139, 1465, 137, 2143, 48, 34,
+ /* 270 */ 378, 1546, 1547, 1548, 1549, 1550, 1554, 1555, 1556, 1557,
+ /* 280 */ 48, 61, 1445, 1446, 1222, 1496, 1499, 1500, 1501, 1502,
+ /* 290 */ 1503, 1504, 1505, 1506, 644, 640, 1515, 1516, 1518, 1519,
+ /* 300 */ 1520, 1521, 2, 2028, 11, 45, 43, 44, 42, 41,
+ /* 310 */ 40, 39, 1466, 380, 2024, 1441, 353, 742, 351, 350,
+ /* 320 */ 1224, 523, 591, 586, 579, 525, 1522, 1466, 1439, 490,
+ /* 330 */ 2042, 295, 486, 1710, 607, 35, 288, 38, 37, 603,
+ /* 340 */ 412, 44, 42, 41, 40, 39, 175, 524, 2020, 2026,
+ /* 350 */ 362, 1517, 732, 728, 724, 720, 293, 18, 86, 642,
+ /* 360 */ 488, 2060, 414, 410, 1447, 139, 484, 559, 417, 649,
+ /* 370 */ 416, 2145, 349, 1154, 2010, 1153, 648, 45, 43, 1527,
+ /* 380 */ 1467, 1817, 2206, 185, 11, 380, 9, 1441, 61, 14,
+ /* 390 */ 279, 280, 65, 107, 415, 278, 286, 2142, 1522, 1468,
+ /* 400 */ 1439, 634, 1498, 2102, 1155, 2041, 1737, 632, 1690, 2077,
+ /* 410 */ 632, 739, 168, 2043, 652, 2045, 2046, 647, 1669, 642,
+ /* 420 */ 185, 132, 678, 1517, 187, 1866, 1524, 1525, 521, 628,
+ /* 430 */ 183, 2138, 2139, 185, 137, 2143, 1447, 632, 1822, 122,
+ /* 440 */ 11, 1822, 121, 120, 119, 118, 117, 116, 115, 114,
+ /* 450 */ 113, 132, 2010, 571, 2167, 194, 1497, 1507, 526, 1875,
+ /* 460 */ 100, 46, 1523, 1526, 273, 636, 368, 2102, 1822, 272,
+ /* 470 */ 1360, 1361, 536, 535, 534, 1873, 1654, 1442, 2031, 1440,
+ /* 480 */ 136, 530, 1815, 739, 61, 529, 1404, 463, 241, 1905,
+ /* 490 */ 528, 533, 83, 1305, 1306, 82, 527, 237, 1524, 1525,
+ /* 500 */ 1869, 1870, 1467, 1445, 1446, 1661, 1496, 1499, 1500, 1501,
+ /* 510 */ 1502, 1503, 1504, 1505, 1506, 644, 640, 1515, 1516, 1518,
+ /* 520 */ 1519, 1520, 1521, 2, 536, 535, 534, 2033, 1497, 1507,
+ /* 530 */ 1668, 1875, 136, 530, 1523, 1526, 632, 529, 345, 632,
+ /* 540 */ 185, 1447, 528, 533, 269, 198, 197, 1873, 527, 1442,
+ /* 550 */ 54, 1440, 618, 423, 131, 130, 129, 128, 127, 126,
+ /* 560 */ 125, 124, 123, 1415, 1416, 419, 677, 1822, 462, 418,
+ /* 570 */ 1822, 41, 40, 39, 2042, 1445, 1446, 618, 1496, 1499,
+ /* 580 */ 1500, 1501, 1502, 1503, 1504, 1505, 1506, 644, 640, 1515,
+ /* 590 */ 1516, 1518, 1519, 1520, 1521, 2, 45, 43, 1468, 616,
+ /* 600 */ 1920, 1934, 86, 1660, 380, 2060, 1441, 632, 595, 632,
+ /* 610 */ 570, 190, 2201, 649, 2201, 1377, 1378, 1522, 2010, 1439,
+ /* 620 */ 648, 424, 221, 433, 627, 1818, 1934, 594, 182, 2207,
+ /* 630 */ 182, 61, 2202, 596, 2202, 596, 185, 171, 1822, 1689,
+ /* 640 */ 1822, 443, 1517, 517, 513, 509, 505, 218, 632, 2041,
+ /* 650 */ 442, 1376, 1379, 2077, 1620, 1447, 110, 2043, 652, 2045,
+ /* 660 */ 2046, 647, 448, 642, 49, 372, 1532, 1688, 45, 43,
+ /* 670 */ 2130, 2205, 1466, 164, 2129, 2126, 380, 698, 1441, 1822,
+ /* 680 */ 46, 541, 1824, 2010, 87, 1687, 2145, 216, 1807, 1522,
+ /* 690 */ 1686, 1439, 141, 38, 37, 2101, 551, 44, 42, 41,
+ /* 700 */ 40, 39, 739, 582, 581, 1618, 1619, 1621, 1622, 1623,
+ /* 710 */ 234, 2010, 2141, 1685, 1517, 38, 37, 1524, 1525, 44,
+ /* 720 */ 42, 41, 40, 39, 236, 544, 33, 1447, 235, 2010,
+ /* 730 */ 538, 1799, 38, 37, 2010, 233, 44, 42, 41, 40,
+ /* 740 */ 39, 1684, 595, 269, 1553, 2145, 2201, 1497, 1507, 1875,
+ /* 750 */ 632, 27, 14, 1523, 1526, 215, 209, 2010, 13, 12,
+ /* 760 */ 214, 594, 182, 496, 449, 1874, 2202, 596, 1442, 383,
+ /* 770 */ 1440, 2140, 69, 1589, 739, 68, 2060, 164, 1683, 207,
+ /* 780 */ 1809, 1822, 1631, 185, 589, 2010, 1824, 89, 335, 1524,
+ /* 790 */ 1525, 357, 1978, 552, 1445, 1446, 1469, 1496, 1499, 1500,
+ /* 800 */ 1501, 1502, 1503, 1504, 1505, 1506, 644, 640, 1515, 1516,
+ /* 810 */ 1518, 1519, 1520, 1521, 2, 1498, 185, 32, 1805, 1497,
+ /* 820 */ 1507, 333, 2010, 1464, 684, 1523, 1526, 1558, 164, 588,
+ /* 830 */ 456, 710, 708, 470, 1875, 152, 469, 1825, 238, 684,
+ /* 840 */ 1442, 373, 1440, 154, 153, 681, 680, 679, 151, 1682,
+ /* 850 */ 1873, 439, 1679, 471, 1565, 676, 441, 1920, 154, 153,
+ /* 860 */ 681, 680, 679, 151, 532, 531, 1445, 1446, 192, 1496,
+ /* 870 */ 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 644, 640,
+ /* 880 */ 1515, 1516, 1518, 1519, 1520, 1521, 2, 699, 53, 1792,
+ /* 890 */ 632, 682, 165, 2010, 1866, 1678, 2010, 308, 348, 1734,
+ /* 900 */ 632, 38, 37, 1797, 499, 44, 42, 41, 40, 39,
+ /* 910 */ 429, 306, 72, 242, 1819, 71, 1677, 1920, 643, 38,
+ /* 920 */ 37, 1822, 1875, 44, 42, 41, 40, 39, 196, 384,
+ /* 930 */ 51, 1822, 3, 203, 478, 476, 473, 598, 1873, 2010,
+ /* 940 */ 467, 191, 525, 461, 460, 459, 458, 455, 454, 453,
+ /* 950 */ 452, 451, 447, 446, 445, 444, 332, 436, 435, 434,
+ /* 960 */ 2010, 431, 430, 346, 524, 716, 715, 714, 713, 390,
+ /* 970 */ 61, 712, 711, 143, 706, 705, 704, 703, 702, 701,
+ /* 980 */ 700, 156, 696, 695, 694, 389, 388, 691, 690, 689,
+ /* 990 */ 688, 687, 632, 632, 1676, 38, 37, 565, 2003, 44,
+ /* 1000 */ 42, 41, 40, 39, 1441, 632, 239, 566, 1608, 108,
+ /* 1010 */ 2042, 684, 1996, 632, 632, 632, 1469, 1439, 1588, 629,
+ /* 1020 */ 8, 1675, 1674, 1822, 1822, 1673, 1672, 630, 611, 615,
+ /* 1030 */ 154, 153, 681, 680, 679, 151, 1822, 683, 2010, 1466,
+ /* 1040 */ 1866, 2060, 1671, 570, 1822, 1822, 1822, 2201, 152, 610,
+ /* 1050 */ 80, 79, 422, 1447, 2010, 189, 648, 632, 163, 2042,
+ /* 1060 */ 400, 302, 2207, 182, 1852, 2010, 2010, 2202, 596, 2010,
+ /* 1070 */ 2010, 283, 599, 2028, 331, 1140, 1141, 408, 1450, 406,
+ /* 1080 */ 402, 398, 395, 415, 2024, 2041, 2010, 1681, 1822, 2077,
+ /* 1090 */ 2060, 1813, 109, 2043, 652, 2045, 2046, 647, 649, 642,
+ /* 1100 */ 739, 1410, 2024, 2010, 179, 648, 2130, 1777, 386, 632,
+ /* 1110 */ 374, 2126, 2150, 1585, 426, 639, 164, 2029, 2020, 2026,
+ /* 1120 */ 375, 632, 185, 387, 184, 1824, 2042, 427, 2024, 642,
+ /* 1130 */ 2004, 145, 2156, 134, 2041, 289, 2020, 2026, 2077, 1800,
+ /* 1140 */ 1822, 109, 2043, 652, 2045, 2046, 647, 642, 642, 52,
+ /* 1150 */ 152, 142, 1822, 149, 2101, 2130, 569, 2060, 2042, 374,
+ /* 1160 */ 2126, 246, 2020, 2026, 73, 610, 1442, 1711, 1440, 1724,
+ /* 1170 */ 2010, 226, 648, 642, 224, 570, 1717, 228, 230, 2201,
+ /* 1180 */ 227, 229, 1498, 147, 232, 245, 554, 231, 553, 2060,
+ /* 1190 */ 2170, 537, 1445, 1446, 2207, 182, 1715, 649, 539, 2202,
+ /* 1200 */ 596, 2041, 2010, 1413, 648, 2077, 1449, 2042, 109, 2043,
+ /* 1210 */ 652, 2045, 2046, 647, 81, 642, 734, 63, 542, 63,
+ /* 1220 */ 179, 251, 2130, 1663, 1664, 90, 374, 2126, 1585, 1453,
+ /* 1230 */ 152, 47, 276, 2041, 70, 13, 12, 2077, 2060, 105,
+ /* 1240 */ 109, 2043, 652, 2045, 2046, 647, 649, 642, 2157, 102,
+ /* 1250 */ 264, 2010, 2221, 648, 2130, 583, 150, 557, 374, 2126,
+ /* 1260 */ 152, 1543, 63, 47, 47, 219, 2042, 258, 2061, 2164,
+ /* 1270 */ 1617, 656, 1616, 692, 253, 150, 152, 135, 1184, 150,
+ /* 1280 */ 391, 1929, 2041, 614, 1374, 281, 2077, 624, 1705, 109,
+ /* 1290 */ 2043, 652, 2045, 2046, 647, 1203, 642, 2060, 693, 600,
+ /* 1300 */ 2042, 2221, 570, 2130, 1863, 649, 2201, 374, 2126, 285,
+ /* 1310 */ 2010, 2160, 648, 1255, 1185, 1559, 1508, 301, 2177, 608,
+ /* 1320 */ 1201, 2207, 182, 263, 1283, 266, 2202, 596, 1287, 1294,
+ /* 1330 */ 1292, 2060, 155, 1, 399, 4, 394, 296, 344, 649,
+ /* 1340 */ 1397, 2041, 195, 428, 2010, 2077, 648, 1469, 109, 2043,
+ /* 1350 */ 652, 2045, 2046, 647, 432, 642, 1930, 1452, 437, 465,
+ /* 1360 */ 2221, 1464, 2130, 450, 1922, 457, 374, 2126, 464, 466,
+ /* 1370 */ 472, 474, 200, 2042, 475, 2041, 477, 577, 479, 2077,
+ /* 1380 */ 1470, 480, 109, 2043, 652, 2045, 2046, 647, 489, 642,
+ /* 1390 */ 1472, 206, 377, 376, 2221, 492, 2130, 1467, 493, 208,
+ /* 1400 */ 374, 2126, 1455, 1471, 2060, 494, 1473, 211, 495, 497,
+ /* 1410 */ 1157, 2195, 649, 1522, 518, 1448, 519, 2010, 213, 648,
+ /* 1420 */ 84, 85, 2042, 522, 217, 501, 520, 1987, 1812, 223,
+ /* 1430 */ 1808, 334, 225, 112, 1984, 1983, 556, 558, 1517, 88,
+ /* 1440 */ 240, 148, 157, 158, 1810, 1806, 297, 560, 2041, 159,
+ /* 1450 */ 160, 1447, 2077, 2060, 243, 109, 2043, 652, 2045, 2046,
+ /* 1460 */ 647, 649, 642, 561, 567, 584, 2010, 2221, 648, 2130,
+ /* 1470 */ 622, 2176, 564, 374, 2126, 2175, 574, 580, 593, 363,
+ /* 1480 */ 587, 2161, 575, 7, 2149, 2171, 2042, 2152, 573, 249,
+ /* 1490 */ 172, 257, 259, 252, 260, 572, 261, 2041, 638, 364,
+ /* 1500 */ 604, 2077, 2224, 1585, 109, 2043, 652, 2045, 2046, 647,
+ /* 1510 */ 601, 642, 138, 1468, 265, 262, 2105, 2060, 2130, 612,
+ /* 1520 */ 2200, 2146, 374, 2126, 367, 649, 271, 1474, 95, 1935,
+ /* 1530 */ 2010, 620, 648, 625, 298, 621, 1949, 1948, 1947, 299,
+ /* 1540 */ 370, 626, 97, 99, 1823, 60, 2111, 300, 101, 303,
+ /* 1550 */ 1793, 292, 735, 1867, 2042, 327, 736, 654, 738, 336,
+ /* 1560 */ 312, 2041, 326, 50, 1456, 2077, 1451, 316, 109, 2043,
+ /* 1570 */ 652, 2045, 2046, 647, 305, 642, 307, 2002, 2001, 2000,
+ /* 1580 */ 2103, 77, 2130, 337, 2042, 2060, 374, 2126, 1997, 396,
+ /* 1590 */ 1459, 1461, 397, 649, 1432, 1433, 188, 401, 2010, 1995,
+ /* 1600 */ 648, 405, 403, 640, 1515, 1516, 1518, 1519, 1520, 1521,
+ /* 1610 */ 404, 1994, 407, 1993, 2042, 2060, 409, 1992, 411, 1991,
+ /* 1620 */ 413, 78, 1400, 649, 1399, 1961, 1960, 1959, 2010, 2041,
+ /* 1630 */ 648, 420, 421, 2077, 1958, 1957, 109, 2043, 652, 2045,
+ /* 1640 */ 2046, 647, 1351, 642, 2042, 2060, 1913, 1912, 635, 1910,
+ /* 1650 */ 2130, 144, 1909, 649, 374, 2126, 1908, 1911, 2010, 2041,
+ /* 1660 */ 648, 1907, 1906, 2077, 193, 438, 110, 2043, 652, 2045,
+ /* 1670 */ 2046, 647, 1904, 642, 1903, 2060, 1902, 1901, 2042, 440,
+ /* 1680 */ 2130, 1915, 1900, 649, 637, 2126, 1899, 1898, 2010, 650,
+ /* 1690 */ 648, 1897, 1896, 2077, 1895, 1894, 110, 2043, 652, 2045,
+ /* 1700 */ 2046, 647, 1893, 642, 1892, 2042, 1891, 1890, 1889, 2060,
+ /* 1710 */ 2130, 1888, 1887, 1886, 339, 2126, 1885, 649, 1884, 2041,
+ /* 1720 */ 146, 1883, 2010, 2077, 648, 1914, 169, 2043, 652, 2045,
+ /* 1730 */ 2046, 647, 1882, 642, 1881, 1880, 2060, 1353, 1879, 1878,
+ /* 1740 */ 468, 1877, 1876, 1740, 649, 1230, 199, 1739, 201, 2010,
+ /* 1750 */ 1738, 648, 2030, 2041, 2042, 202, 1736, 2077, 1700, 204,
+ /* 1760 */ 168, 2043, 652, 2045, 2046, 647, 75, 642, 177, 1143,
+ /* 1770 */ 485, 1142, 1699, 487, 1974, 1968, 205, 1956, 597, 2222,
+ /* 1780 */ 2041, 212, 1955, 76, 2077, 2060, 1933, 110, 2043, 652,
+ /* 1790 */ 2045, 2046, 647, 649, 642, 1801, 1177, 1735, 2010, 210,
+ /* 1800 */ 648, 2130, 2168, 1733, 502, 504, 2127, 503, 1731, 507,
+ /* 1810 */ 508, 506, 1729, 510, 1727, 511, 2042, 1714, 514, 512,
+ /* 1820 */ 516, 515, 1713, 1696, 1803, 62, 1299, 1298, 1802, 2041,
+ /* 1830 */ 1725, 222, 707, 2077, 1221, 1220, 318, 2043, 652, 2045,
+ /* 1840 */ 2046, 647, 1219, 642, 1218, 1215, 709, 2060, 2042, 1213,
+ /* 1850 */ 1214, 1212, 1718, 354, 355, 649, 540, 1716, 356, 1695,
+ /* 1860 */ 2010, 543, 648, 1694, 545, 1693, 549, 111, 547, 1420,
+ /* 1870 */ 1422, 1973, 1419, 1406, 55, 1967, 562, 1954, 1952, 2060,
+ /* 1880 */ 592, 1424, 2206, 26, 369, 66, 162, 649, 16, 244,
+ /* 1890 */ 19, 2041, 2010, 1633, 648, 2077, 576, 2042, 169, 2043,
+ /* 1900 */ 652, 2045, 2046, 647, 578, 642, 568, 28, 58, 248,
+ /* 1910 */ 563, 360, 5, 59, 2042, 250, 1615, 170, 255, 256,
+ /* 1920 */ 6, 254, 20, 2041, 30, 64, 1648, 2077, 2060, 2031,
+ /* 1930 */ 325, 2043, 652, 2045, 2046, 647, 646, 642, 29, 21,
+ /* 1940 */ 1607, 2010, 1653, 648, 91, 2060, 2042, 1654, 17, 1647,
+ /* 1950 */ 379, 2223, 365, 649, 1652, 1651, 366, 1582, 2010, 1581,
+ /* 1960 */ 648, 1953, 57, 268, 1951, 56, 1950, 1932, 94, 93,
+ /* 1970 */ 173, 2042, 2041, 274, 1931, 96, 2077, 2060, 287, 324,
+ /* 1980 */ 2043, 652, 2045, 2046, 647, 649, 642, 275, 2096, 2041,
+ /* 1990 */ 2010, 1613, 648, 2077, 102, 2042, 325, 2043, 652, 2045,
+ /* 2000 */ 2046, 647, 2060, 642, 22, 277, 282, 381, 623, 67,
+ /* 2010 */ 649, 12, 23, 1457, 1544, 2010, 1534, 648, 174, 284,
+ /* 2020 */ 2042, 555, 1512, 98, 1533, 2077, 2060, 10, 320, 2043,
+ /* 2030 */ 652, 2045, 2046, 647, 649, 642, 2080, 641, 36, 2010,
+ /* 2040 */ 1510, 648, 1509, 1481, 15, 24, 2041, 186, 1489, 25,
+ /* 2050 */ 2077, 2060, 655, 325, 2043, 652, 2045, 2046, 647, 649,
+ /* 2060 */ 642, 651, 653, 382, 2010, 657, 648, 1284, 659, 660,
+ /* 2070 */ 2041, 662, 1281, 1278, 2077, 663, 665, 309, 2043, 652,
+ /* 2080 */ 2045, 2046, 647, 2042, 642, 1272, 666, 668, 1261, 1270,
+ /* 2090 */ 669, 675, 290, 103, 104, 2041, 1293, 1276, 1275, 2077,
+ /* 2100 */ 1274, 1273, 310, 2043, 652, 2045, 2046, 647, 74, 642,
+ /* 2110 */ 2042, 1289, 1175, 685, 2060, 1209, 1208, 1207, 1206, 291,
+ /* 2120 */ 1205, 1204, 649, 1202, 1228, 1200, 1199, 2010, 1198, 648,
+ /* 2130 */ 697, 1196, 2042, 1195, 1194, 1193, 1192, 1191, 1190, 1225,
+ /* 2140 */ 1223, 2060, 1187, 1186, 1183, 1182, 1181, 1180, 1732, 649,
+ /* 2150 */ 717, 1730, 718, 719, 2010, 721, 648, 723, 2041, 1728,
+ /* 2160 */ 725, 727, 2077, 2060, 722, 311, 2043, 652, 2045, 2046,
+ /* 2170 */ 647, 649, 642, 1726, 726, 729, 2010, 730, 648, 1712,
+ /* 2180 */ 731, 733, 1132, 1692, 294, 2041, 737, 741, 1443, 2077,
+ /* 2190 */ 304, 740, 317, 2043, 652, 2045, 2046, 647, 1667, 642,
+ /* 2200 */ 1667, 1667, 1667, 1667, 1667, 1667, 1667, 2041, 1667, 1667,
+ /* 2210 */ 1667, 2077, 2042, 1667, 321, 2043, 652, 2045, 2046, 647,
+ /* 2220 */ 1667, 642, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 2042,
+ /* 2230 */ 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667,
+ /* 2240 */ 1667, 1667, 1667, 2060, 1667, 1667, 2042, 1667, 1667, 1667,
+ /* 2250 */ 1667, 649, 1667, 1667, 1667, 1667, 2010, 1667, 648, 1667,
+ /* 2260 */ 2060, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 649, 1667,
+ /* 2270 */ 1667, 1667, 1667, 2010, 1667, 648, 1667, 2060, 2042, 1667,
+ /* 2280 */ 1667, 1667, 1667, 1667, 1667, 649, 1667, 2041, 1667, 1667,
+ /* 2290 */ 2010, 2077, 648, 1667, 313, 2043, 652, 2045, 2046, 647,
+ /* 2300 */ 1667, 642, 1667, 2042, 2041, 1667, 1667, 1667, 2077, 2060,
+ /* 2310 */ 1667, 322, 2043, 652, 2045, 2046, 647, 649, 642, 1667,
+ /* 2320 */ 1667, 2041, 2010, 1667, 648, 2077, 1667, 2042, 314, 2043,
+ /* 2330 */ 652, 2045, 2046, 647, 2060, 642, 1667, 1667, 1667, 1667,
+ /* 2340 */ 1667, 1667, 649, 1667, 1667, 1667, 1667, 2010, 1667, 648,
+ /* 2350 */ 1667, 1667, 2042, 2041, 1667, 1667, 1667, 2077, 2060, 1667,
+ /* 2360 */ 323, 2043, 652, 2045, 2046, 647, 649, 642, 1667, 1667,
+ /* 2370 */ 1667, 2010, 1667, 648, 1667, 1667, 1667, 1667, 2041, 1667,
+ /* 2380 */ 1667, 1667, 2077, 2060, 1667, 315, 2043, 652, 2045, 2046,
+ /* 2390 */ 647, 649, 642, 1667, 1667, 1667, 2010, 1667, 648, 1667,
+ /* 2400 */ 1667, 1667, 2041, 1667, 1667, 1667, 2077, 1667, 1667, 328,
+ /* 2410 */ 2043, 652, 2045, 2046, 647, 2042, 642, 1667, 1667, 1667,
+ /* 2420 */ 1667, 1667, 1667, 1667, 1667, 1667, 1667, 2041, 1667, 1667,
+ /* 2430 */ 1667, 2077, 1667, 1667, 329, 2043, 652, 2045, 2046, 647,
+ /* 2440 */ 1667, 642, 2042, 1667, 1667, 1667, 2060, 1667, 1667, 1667,
+ /* 2450 */ 1667, 1667, 1667, 1667, 649, 1667, 1667, 1667, 1667, 2010,
+ /* 2460 */ 1667, 648, 1667, 1667, 2042, 1667, 1667, 1667, 1667, 1667,
+ /* 2470 */ 1667, 1667, 1667, 2060, 1667, 1667, 1667, 1667, 1667, 1667,
+ /* 2480 */ 1667, 649, 1667, 1667, 1667, 1667, 2010, 1667, 648, 1667,
+ /* 2490 */ 2041, 1667, 1667, 1667, 2077, 2060, 1667, 2054, 2043, 652,
+ /* 2500 */ 2045, 2046, 647, 649, 642, 1667, 1667, 1667, 2010, 1667,
+ /* 2510 */ 648, 1667, 1667, 1667, 1667, 1667, 1667, 2041, 1667, 1667,
+ /* 2520 */ 1667, 2077, 1667, 1667, 2053, 2043, 652, 2045, 2046, 647,
+ /* 2530 */ 1667, 642, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 2041,
+ /* 2540 */ 1667, 1667, 1667, 2077, 2042, 1667, 2052, 2043, 652, 2045,
+ /* 2550 */ 2046, 647, 1667, 642, 1667, 1667, 1667, 1667, 1667, 1667,
+ /* 2560 */ 1667, 2042, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667,
+ /* 2570 */ 1667, 1667, 1667, 1667, 1667, 2060, 1667, 1667, 2042, 1667,
+ /* 2580 */ 1667, 1667, 1667, 649, 1667, 1667, 1667, 1667, 2010, 1667,
+ /* 2590 */ 648, 1667, 2060, 1667, 1667, 1667, 1667, 1667, 1667, 1667,
+ /* 2600 */ 649, 1667, 1667, 1667, 1667, 2010, 1667, 648, 1667, 2060,
+ /* 2610 */ 2042, 1667, 1667, 1667, 1667, 1667, 1667, 649, 1667, 2041,
+ /* 2620 */ 1667, 1667, 2010, 2077, 648, 1667, 341, 2043, 652, 2045,
+ /* 2630 */ 2046, 647, 1667, 642, 1667, 2042, 2041, 1667, 1667, 1667,
+ /* 2640 */ 2077, 2060, 1667, 342, 2043, 652, 2045, 2046, 647, 649,
+ /* 2650 */ 642, 1667, 1667, 2041, 2010, 1667, 648, 2077, 1667, 2042,
+ /* 2660 */ 338, 2043, 652, 2045, 2046, 647, 2060, 642, 1667, 1667,
+ /* 2670 */ 1667, 1667, 1667, 1667, 649, 1667, 1667, 1667, 1667, 2010,
+ /* 2680 */ 1667, 648, 1667, 1667, 1667, 2041, 1667, 1667, 1667, 2077,
+ /* 2690 */ 2060, 1667, 343, 2043, 652, 2045, 2046, 647, 649, 642,
+ /* 2700 */ 1667, 1667, 1667, 2010, 1667, 648, 1667, 1667, 1667, 1667,
+ /* 2710 */ 650, 1667, 1667, 1667, 2077, 1667, 1667, 320, 2043, 652,
+ /* 2720 */ 2045, 2046, 647, 1667, 642, 1667, 1667, 1667, 1667, 1667,
+ /* 2730 */ 1667, 1667, 1667, 1667, 2041, 1667, 1667, 1667, 2077, 1667,
+ /* 2740 */ 1667, 319, 2043, 652, 2045, 2046, 647, 1667, 642,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 377, 439, 0, 339, 335, 443, 337, 338, 335, 363,
@@ -542,14 +542,14 @@ static const YYCODETYPE yy_lookahead[] = {
/* 440 */ 232, 370, 24, 25, 26, 27, 28, 29, 30, 31,
/* 450 */ 32, 353, 375, 454, 455, 58, 163, 164, 360, 362,
/* 460 */ 343, 96, 169, 170, 166, 424, 369, 426, 370, 171,
- /* 470 */ 163, 164, 66, 67, 68, 378, 97, 184, 0, 186,
+ /* 470 */ 163, 164, 66, 67, 68, 378, 97, 184, 47, 186,
/* 480 */ 74, 75, 365, 118, 96, 79, 188, 80, 190, 0,
/* 490 */ 84, 85, 95, 133, 134, 98, 90, 127, 133, 134,
/* 500 */ 376, 377, 20, 210, 211, 176, 213, 214, 215, 216,
/* 510 */ 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- /* 520 */ 227, 228, 229, 230, 66, 67, 68, 71, 163, 164,
+ /* 520 */ 227, 228, 229, 230, 66, 67, 68, 96, 163, 164,
/* 530 */ 0, 362, 74, 75, 169, 170, 339, 79, 369, 339,
- /* 540 */ 248, 63, 84, 85, 165, 138, 139, 378, 90, 184,
+ /* 540 */ 248, 71, 84, 85, 165, 138, 139, 378, 90, 184,
/* 550 */ 353, 186, 339, 353, 24, 25, 26, 27, 28, 29,
/* 560 */ 30, 31, 32, 193, 194, 394, 107, 370, 161, 398,
/* 570 */ 370, 14, 15, 16, 331, 210, 211, 339, 213, 214,
@@ -609,54 +609,54 @@ static const YYCODETYPE yy_lookahead[] = {
/* 1110 */ 431, 432, 246, 247, 22, 64, 362, 364, 409, 410,
/* 1120 */ 411, 339, 248, 353, 445, 371, 331, 35, 375, 420,
/* 1130 */ 394, 42, 453, 44, 406, 353, 409, 410, 410, 0,
- /* 1140 */ 370, 413, 414, 415, 416, 417, 418, 420, 420, 385,
- /* 1150 */ 44, 423, 370, 425, 426, 427, 58, 362, 331, 431,
- /* 1160 */ 432, 165, 409, 410, 107, 370, 184, 47, 186, 0,
+ /* 1140 */ 370, 413, 414, 415, 416, 417, 418, 420, 420, 165,
+ /* 1150 */ 44, 423, 370, 425, 426, 427, 172, 362, 331, 431,
+ /* 1160 */ 432, 165, 409, 410, 107, 370, 184, 0, 186, 0,
/* 1170 */ 375, 100, 377, 420, 103, 439, 0, 100, 100, 443,
- /* 1180 */ 103, 103, 163, 100, 0, 196, 103, 198, 49, 362,
- /* 1190 */ 467, 22, 210, 211, 458, 459, 98, 370, 22, 463,
- /* 1200 */ 464, 406, 375, 97, 377, 410, 22, 331, 413, 414,
- /* 1210 */ 415, 416, 417, 418, 157, 420, 96, 44, 44, 44,
- /* 1220 */ 425, 44, 427, 133, 134, 165, 431, 432, 247, 186,
- /* 1230 */ 44, 44, 172, 406, 44, 1, 2, 410, 362, 35,
- /* 1240 */ 413, 414, 415, 416, 417, 418, 370, 420, 453, 35,
- /* 1250 */ 456, 375, 425, 377, 427, 96, 44, 394, 431, 432,
- /* 1260 */ 44, 210, 44, 44, 44, 106, 331, 341, 450, 442,
- /* 1270 */ 97, 97, 97, 13, 97, 44, 44, 44, 362, 44,
- /* 1280 */ 44, 341, 406, 97, 97, 71, 410, 97, 338, 413,
+ /* 1180 */ 103, 103, 163, 44, 100, 58, 196, 103, 198, 362,
+ /* 1190 */ 385, 22, 210, 211, 458, 459, 0, 370, 22, 463,
+ /* 1200 */ 464, 406, 375, 97, 377, 410, 35, 331, 413, 414,
+ /* 1210 */ 415, 416, 417, 418, 157, 420, 49, 44, 22, 44,
+ /* 1220 */ 425, 44, 427, 133, 134, 98, 431, 432, 247, 186,
+ /* 1230 */ 44, 44, 44, 406, 44, 1, 2, 410, 362, 96,
+ /* 1240 */ 413, 414, 415, 416, 417, 418, 370, 420, 453, 106,
+ /* 1250 */ 467, 375, 425, 377, 427, 456, 44, 394, 431, 432,
+ /* 1260 */ 44, 210, 44, 44, 44, 341, 331, 450, 362, 442,
+ /* 1270 */ 97, 44, 97, 13, 97, 44, 44, 44, 35, 44,
+ /* 1280 */ 341, 385, 406, 97, 97, 97, 410, 97, 338, 413,
/* 1290 */ 414, 415, 416, 417, 418, 35, 420, 362, 13, 271,
- /* 1300 */ 331, 425, 439, 427, 385, 370, 443, 431, 432, 97,
- /* 1310 */ 375, 374, 377, 97, 385, 97, 97, 97, 442, 441,
- /* 1320 */ 35, 458, 459, 433, 460, 444, 463, 464, 97, 97,
- /* 1330 */ 97, 362, 97, 97, 250, 408, 48, 407, 182, 370,
- /* 1340 */ 396, 406, 42, 382, 375, 410, 377, 20, 413, 414,
- /* 1350 */ 415, 416, 417, 418, 382, 420, 385, 162, 380, 20,
- /* 1360 */ 425, 339, 427, 339, 380, 382, 431, 432, 380, 94,
- /* 1370 */ 339, 339, 347, 331, 339, 406, 339, 442, 20, 410,
- /* 1380 */ 333, 333, 413, 414, 415, 416, 417, 418, 20, 420,
- /* 1390 */ 186, 401, 12, 13, 425, 345, 427, 20, 377, 345,
+ /* 1300 */ 331, 425, 439, 427, 374, 370, 443, 431, 432, 97,
+ /* 1310 */ 375, 385, 377, 97, 71, 97, 97, 97, 442, 441,
+ /* 1320 */ 35, 458, 459, 433, 97, 460, 463, 464, 97, 97,
+ /* 1330 */ 97, 362, 97, 444, 48, 250, 408, 396, 407, 370,
+ /* 1340 */ 182, 406, 42, 382, 375, 410, 377, 20, 413, 414,
+ /* 1350 */ 415, 416, 417, 418, 382, 420, 385, 186, 380, 162,
+ /* 1360 */ 425, 20, 427, 339, 339, 382, 431, 432, 380, 380,
+ /* 1370 */ 339, 94, 339, 331, 347, 406, 339, 442, 339, 410,
+ /* 1380 */ 20, 333, 413, 414, 415, 416, 417, 418, 333, 420,
+ /* 1390 */ 20, 345, 12, 13, 425, 401, 427, 20, 377, 345,
/* 1400 */ 431, 432, 22, 20, 362, 340, 20, 345, 395, 340,
- /* 1410 */ 342, 442, 370, 33, 52, 35, 342, 375, 345, 377,
- /* 1420 */ 345, 345, 331, 362, 339, 345, 333, 375, 362, 362,
- /* 1430 */ 333, 375, 362, 339, 362, 401, 199, 96, 58, 375,
- /* 1440 */ 189, 362, 403, 362, 362, 405, 343, 343, 406, 362,
- /* 1450 */ 362, 71, 410, 362, 339, 413, 414, 415, 416, 417,
- /* 1460 */ 418, 370, 420, 362, 258, 449, 375, 425, 377, 427,
- /* 1470 */ 257, 385, 449, 431, 432, 375, 377, 266, 452, 175,
- /* 1480 */ 375, 385, 375, 375, 442, 268, 331, 451, 267, 251,
- /* 1490 */ 449, 447, 390, 448, 272, 400, 270, 406, 118, 390,
- /* 1500 */ 275, 410, 247, 370, 413, 414, 415, 416, 417, 418,
- /* 1510 */ 461, 420, 20, 343, 468, 462, 425, 362, 427, 408,
- /* 1520 */ 339, 343, 431, 432, 412, 370, 20, 390, 340, 388,
- /* 1530 */ 375, 167, 377, 375, 390, 375, 375, 375, 375, 375,
- /* 1540 */ 387, 343, 343, 358, 96, 96, 430, 375, 366, 370,
- /* 1550 */ 343, 36, 352, 402, 331, 0, 446, 391, 391, 356,
- /* 1560 */ 333, 406, 334, 339, 184, 410, 186, 0, 413, 414,
- /* 1570 */ 415, 416, 417, 418, 344, 420, 329, 397, 0, 42,
- /* 1580 */ 425, 0, 427, 35, 331, 362, 431, 432, 204, 35,
- /* 1590 */ 210, 211, 35, 370, 35, 356, 356, 204, 375, 0,
- /* 1600 */ 377, 204, 0, 223, 224, 225, 226, 227, 228, 229,
- /* 1610 */ 35, 35, 204, 0, 331, 362, 0, 35, 22, 0,
+ /* 1410 */ 52, 442, 370, 33, 342, 35, 342, 375, 345, 377,
+ /* 1420 */ 345, 345, 331, 362, 345, 339, 333, 375, 362, 362,
+ /* 1430 */ 362, 333, 362, 339, 375, 375, 199, 405, 58, 96,
+ /* 1440 */ 343, 403, 362, 362, 362, 362, 401, 189, 406, 362,
+ /* 1450 */ 362, 71, 410, 362, 343, 413, 414, 415, 416, 417,
+ /* 1460 */ 418, 370, 420, 400, 339, 258, 375, 425, 377, 427,
+ /* 1470 */ 257, 449, 377, 431, 432, 449, 375, 375, 175, 375,
+ /* 1480 */ 375, 385, 268, 266, 442, 385, 331, 452, 267, 390,
+ /* 1490 */ 449, 451, 448, 390, 447, 251, 446, 406, 118, 275,
+ /* 1500 */ 272, 410, 468, 247, 413, 414, 415, 416, 417, 418,
+ /* 1510 */ 270, 420, 370, 20, 461, 408, 425, 362, 427, 339,
+ /* 1520 */ 462, 412, 431, 432, 340, 370, 343, 20, 343, 388,
+ /* 1530 */ 375, 375, 377, 167, 390, 375, 375, 375, 375, 390,
+ /* 1540 */ 375, 387, 343, 343, 370, 96, 430, 358, 96, 339,
+ /* 1550 */ 352, 343, 36, 375, 331, 402, 334, 366, 333, 391,
+ /* 1560 */ 356, 406, 356, 397, 184, 410, 186, 356, 413, 414,
+ /* 1570 */ 415, 416, 417, 418, 344, 420, 329, 0, 0, 0,
+ /* 1580 */ 425, 42, 427, 391, 331, 362, 431, 432, 0, 35,
+ /* 1590 */ 210, 211, 204, 370, 35, 35, 35, 204, 375, 0,
+ /* 1600 */ 377, 204, 35, 223, 224, 225, 226, 227, 228, 229,
+ /* 1610 */ 35, 0, 204, 0, 331, 362, 35, 0, 22, 0,
/* 1620 */ 35, 191, 186, 370, 184, 0, 0, 0, 375, 406,
/* 1630 */ 377, 180, 179, 410, 0, 0, 413, 414, 415, 416,
/* 1640 */ 417, 418, 47, 420, 331, 362, 0, 0, 425, 0,
@@ -771,7 +771,7 @@ static const YYCODETYPE yy_lookahead[] = {
/* 2730 */ 469, 469, 469, 469, 406, 469, 469, 469, 410, 469,
/* 2740 */ 469, 413, 414, 415, 416, 417, 418, 469, 420,
};
-#define YY_SHIFT_COUNT (741)
+#define YY_SHIFT_COUNT (742)
#define YY_SHIFT_MIN (0)
#define YY_SHIFT_MAX (2183)
static const unsigned short int yy_shift_ofst[] = {
@@ -788,68 +788,68 @@ static const unsigned short int yy_shift_ofst[] = {
/* 100 */ 115, 16, 115, 16, 16, 16, 115, 176, 803, 34,
/* 110 */ 34, 219, 458, 982, 982, 982, 982, 982, 982, 982,
/* 120 */ 982, 982, 982, 982, 982, 982, 982, 982, 982, 982,
- /* 130 */ 982, 982, 217, 379, 307, 360, 2, 249, 578, 578,
- /* 140 */ 578, 478, 152, 152, 249, 245, 245, 245, 260, 208,
- /* 150 */ 16, 456, 16, 456, 456, 459, 606, 36, 36, 36,
+ /* 130 */ 982, 982, 217, 379, 307, 360, 249, 578, 578, 578,
+ /* 140 */ 2, 152, 152, 249, 245, 245, 245, 138, 260, 208,
+ /* 150 */ 16, 470, 16, 470, 470, 459, 606, 36, 36, 36,
/* 160 */ 36, 36, 36, 36, 36, 298, 418, 406, 47, 329,
/* 170 */ 444, 60, 69, 239, 652, 353, 776, 1030, 834, 996,
- /* 180 */ 866, 981, 668, 866, 888, 769, 1019, 1084, 1288, 1156,
- /* 190 */ 1300, 1327, 1300, 1195, 1339, 1339, 1300, 1195, 1195, 1339,
- /* 200 */ 1275, 1339, 1339, 1339, 1358, 1358, 1368, 138, 1377, 138,
- /* 210 */ 1383, 1386, 138, 1383, 138, 138, 138, 1339, 138, 1362,
- /* 220 */ 1362, 1358, 16, 16, 16, 16, 16, 16, 16, 16,
- /* 230 */ 16, 16, 16, 1339, 1358, 456, 456, 456, 1237, 1341,
- /* 240 */ 1368, 176, 1251, 1377, 176, 1339, 1327, 1327, 456, 1206,
- /* 250 */ 1213, 456, 1206, 1213, 456, 456, 16, 1211, 1304, 1206,
- /* 260 */ 1217, 1221, 1238, 1084, 1225, 1222, 1226, 1255, 245, 1492,
- /* 270 */ 1339, 1383, 176, 176, 1506, 1213, 456, 456, 456, 456,
- /* 280 */ 456, 1213, 456, 1364, 176, 459, 176, 245, 1448, 1449,
- /* 290 */ 456, 606, 1339, 176, 1515, 1358, 2749, 2749, 2749, 2749,
+ /* 180 */ 866, 981, 668, 866, 888, 769, 1019, 1085, 1286, 1158,
+ /* 190 */ 1300, 1327, 1300, 1197, 1341, 1341, 1300, 1197, 1197, 1341,
+ /* 200 */ 1277, 1341, 1341, 1341, 1360, 1360, 1370, 138, 1377, 138,
+ /* 210 */ 1383, 1386, 138, 1383, 138, 138, 138, 1341, 138, 1358,
+ /* 220 */ 1358, 1360, 16, 16, 16, 16, 16, 16, 16, 16,
+ /* 230 */ 16, 16, 16, 1341, 1360, 470, 470, 470, 1237, 1343,
+ /* 240 */ 1370, 176, 1258, 1377, 176, 1341, 1327, 1327, 470, 1207,
+ /* 250 */ 1213, 470, 1207, 1213, 470, 470, 16, 1217, 1303, 1207,
+ /* 260 */ 1214, 1221, 1244, 1085, 1224, 1228, 1240, 1256, 245, 1493,
+ /* 270 */ 1341, 1383, 176, 176, 1507, 1213, 470, 470, 470, 470,
+ /* 280 */ 470, 1213, 470, 1366, 176, 459, 176, 245, 1449, 1452,
+ /* 290 */ 470, 606, 1341, 176, 1516, 1360, 2749, 2749, 2749, 2749,
/* 300 */ 2749, 2749, 2749, 2749, 2749, 899, 589, 530, 677, 685,
/* 310 */ 707, 911, 731, 15, 724, 893, 903, 987, 987, 987,
/* 320 */ 987, 987, 987, 987, 987, 987, 716, 596, 295, 295,
/* 330 */ 407, 161, 489, 397, 81, 370, 263, 263, 557, 757,
- /* 340 */ 582, 557, 557, 557, 1012, 791, 1092, 1089, 1057, 1071,
- /* 350 */ 1077, 1078, 1083, 1169, 1176, 1184, 989, 1004, 1106, 1098,
- /* 360 */ 1173, 1174, 1175, 1090, 1028, 66, 1060, 1177, 1186, 1187,
- /* 370 */ 1190, 1212, 1216, 1234, 1218, 1043, 1204, 1051, 1219, 1120,
- /* 380 */ 1220, 1231, 1232, 1233, 1235, 1236, 1159, 1260, 1285, 1214,
- /* 390 */ 1139, 1555, 1567, 1578, 1537, 1581, 1548, 1384, 1554, 1557,
- /* 400 */ 1559, 1393, 1599, 1575, 1576, 1397, 1602, 1408, 1613, 1582,
- /* 410 */ 1616, 1596, 1619, 1585, 1430, 1436, 1440, 1625, 1626, 1627,
- /* 420 */ 1451, 1453, 1634, 1635, 1595, 1646, 1647, 1649, 1609, 1652,
- /* 430 */ 1656, 1657, 1661, 1662, 1672, 1674, 1676, 1512, 1630, 1677,
- /* 440 */ 1527, 1681, 1682, 1686, 1687, 1691, 1692, 1694, 1695, 1702,
- /* 450 */ 1704, 1706, 1707, 1708, 1711, 1712, 1713, 1678, 1716, 1718,
- /* 460 */ 1721, 1725, 1732, 1734, 1715, 1735, 1738, 1739, 1604, 1741,
- /* 470 */ 1742, 1743, 1688, 1710, 1747, 1690, 1750, 1697, 1756, 1758,
- /* 480 */ 1717, 1727, 1724, 1705, 1755, 1723, 1757, 1726, 1772, 1736,
- /* 490 */ 1744, 1774, 1775, 1777, 1760, 1606, 1782, 1786, 1795, 1731,
- /* 500 */ 1797, 1803, 1769, 1759, 1766, 1808, 1776, 1761, 1771, 1812,
- /* 510 */ 1778, 1767, 1780, 1814, 1783, 1773, 1781, 1817, 1822, 1823,
- /* 520 */ 1824, 1720, 1728, 1791, 1805, 1828, 1799, 1800, 1807, 1809,
- /* 530 */ 1788, 1802, 1810, 1815, 1827, 1816, 1830, 1831, 1852, 1832,
- /* 540 */ 1806, 1857, 1836, 1826, 1859, 1829, 1863, 1833, 1865, 1844,
- /* 550 */ 1847, 1834, 1835, 1837, 1784, 1787, 1871, 1709, 1789, 1838,
- /* 560 */ 1875, 1699, 1854, 1745, 1722, 1877, 1878, 1746, 1733, 1879,
- /* 570 */ 1846, 1636, 1811, 1796, 1813, 1740, 1665, 1748, 1648, 1818,
- /* 580 */ 1864, 1869, 1819, 1821, 1825, 1842, 1843, 1874, 1872, 1882,
- /* 590 */ 1848, 1880, 1670, 1845, 1850, 1922, 1895, 1696, 1891, 1914,
- /* 600 */ 1917, 1919, 1920, 1921, 1860, 1862, 1916, 1719, 1918, 1923,
- /* 610 */ 1961, 1964, 1966, 1967, 1873, 1929, 1705, 1926, 1908, 1890,
- /* 620 */ 1894, 1909, 1910, 1840, 1913, 1974, 1936, 1853, 1927, 1888,
- /* 630 */ 1705, 1931, 1968, 1785, 1794, 1793, 2009, 1991, 1804, 1940,
- /* 640 */ 1925, 1941, 1943, 1942, 1945, 1971, 1948, 1949, 2000, 1946,
- /* 650 */ 2026, 1849, 1953, 1955, 1970, 2017, 2028, 1969, 1975, 2033,
- /* 660 */ 1973, 1976, 2036, 1979, 1988, 2041, 1990, 1992, 2052, 1994,
- /* 670 */ 1977, 1978, 1980, 1981, 2066, 1983, 1997, 2048, 1998, 2061,
- /* 680 */ 2012, 2048, 2048, 2089, 2047, 2049, 2080, 2081, 2082, 2083,
- /* 690 */ 2085, 2086, 2088, 2090, 2091, 2093, 2053, 2037, 2075, 2096,
- /* 700 */ 2098, 2099, 2113, 2101, 2102, 2103, 2068, 1788, 2105, 1802,
- /* 710 */ 2107, 2108, 2109, 2110, 2124, 2112, 2148, 2115, 2104, 2114,
- /* 720 */ 2151, 2120, 2116, 2118, 2159, 2125, 2126, 2122, 2173, 2140,
- /* 730 */ 2129, 2141, 2179, 2146, 2147, 2183, 2162, 2165, 2166, 2168,
- /* 740 */ 2170, 2167,
+ /* 340 */ 582, 557, 557, 557, 1012, 791, 1092, 1089, 1057, 1139,
+ /* 350 */ 1071, 1077, 1078, 1084, 1169, 1176, 1196, 990, 1004, 1106,
+ /* 360 */ 1127, 1173, 1175, 1177, 1090, 1028, 66, 984, 1186, 1187,
+ /* 370 */ 1188, 1190, 1212, 1216, 1234, 1218, 1043, 1171, 1051, 1219,
+ /* 380 */ 431, 1220, 1227, 1231, 1232, 1233, 1235, 1143, 1260, 1285,
+ /* 390 */ 1243, 1167, 1577, 1578, 1579, 1539, 1588, 1554, 1388, 1559,
+ /* 400 */ 1560, 1561, 1393, 1599, 1567, 1575, 1397, 1611, 1408, 1613,
+ /* 410 */ 1581, 1617, 1596, 1619, 1585, 1430, 1436, 1440, 1625, 1626,
+ /* 420 */ 1627, 1451, 1453, 1634, 1635, 1595, 1646, 1647, 1649, 1609,
+ /* 430 */ 1652, 1656, 1657, 1661, 1662, 1672, 1674, 1676, 1512, 1630,
+ /* 440 */ 1677, 1527, 1681, 1682, 1686, 1687, 1691, 1692, 1694, 1695,
+ /* 450 */ 1702, 1704, 1706, 1707, 1708, 1711, 1712, 1713, 1678, 1716,
+ /* 460 */ 1718, 1721, 1725, 1732, 1734, 1715, 1735, 1738, 1739, 1604,
+ /* 470 */ 1741, 1742, 1743, 1688, 1710, 1747, 1690, 1750, 1697, 1756,
+ /* 480 */ 1758, 1717, 1727, 1724, 1705, 1755, 1723, 1757, 1726, 1772,
+ /* 490 */ 1736, 1744, 1774, 1775, 1777, 1760, 1606, 1782, 1786, 1795,
+ /* 500 */ 1731, 1797, 1803, 1769, 1759, 1766, 1808, 1776, 1761, 1771,
+ /* 510 */ 1812, 1778, 1767, 1780, 1814, 1783, 1773, 1781, 1817, 1822,
+ /* 520 */ 1823, 1824, 1720, 1728, 1791, 1805, 1828, 1799, 1800, 1807,
+ /* 530 */ 1809, 1788, 1802, 1810, 1815, 1827, 1816, 1830, 1831, 1852,
+ /* 540 */ 1832, 1806, 1857, 1836, 1826, 1859, 1829, 1863, 1833, 1865,
+ /* 550 */ 1844, 1847, 1834, 1835, 1837, 1784, 1787, 1871, 1709, 1789,
+ /* 560 */ 1838, 1875, 1699, 1854, 1745, 1722, 1877, 1878, 1746, 1733,
+ /* 570 */ 1879, 1846, 1636, 1811, 1796, 1813, 1740, 1665, 1748, 1648,
+ /* 580 */ 1818, 1864, 1869, 1819, 1821, 1825, 1842, 1843, 1874, 1872,
+ /* 590 */ 1882, 1848, 1880, 1670, 1845, 1850, 1922, 1895, 1696, 1891,
+ /* 600 */ 1914, 1917, 1919, 1920, 1921, 1860, 1862, 1916, 1719, 1918,
+ /* 610 */ 1923, 1961, 1964, 1966, 1967, 1873, 1929, 1705, 1926, 1908,
+ /* 620 */ 1890, 1894, 1909, 1910, 1840, 1913, 1974, 1936, 1853, 1927,
+ /* 630 */ 1888, 1705, 1931, 1968, 1785, 1794, 1793, 2009, 1991, 1804,
+ /* 640 */ 1940, 1925, 1941, 1943, 1942, 1945, 1971, 1948, 1949, 2000,
+ /* 650 */ 1946, 2026, 1849, 1953, 1955, 1970, 2017, 2028, 1969, 1975,
+ /* 660 */ 2033, 1973, 1976, 2036, 1979, 1988, 2041, 1990, 1992, 2052,
+ /* 670 */ 1994, 1977, 1978, 1980, 1981, 2066, 1983, 1997, 2048, 1998,
+ /* 680 */ 2061, 2012, 2048, 2048, 2089, 2047, 2049, 2080, 2081, 2082,
+ /* 690 */ 2083, 2085, 2086, 2088, 2090, 2091, 2093, 2053, 2037, 2075,
+ /* 700 */ 2096, 2098, 2099, 2113, 2101, 2102, 2103, 2068, 1788, 2105,
+ /* 710 */ 1802, 2107, 2108, 2109, 2110, 2124, 2112, 2148, 2115, 2104,
+ /* 720 */ 2114, 2151, 2120, 2116, 2118, 2159, 2125, 2126, 2122, 2173,
+ /* 730 */ 2140, 2129, 2141, 2179, 2146, 2147, 2183, 2162, 2165, 2166,
+ /* 740 */ 2168, 2170, 2167,
};
#define YY_REDUCE_COUNT (304)
#define YY_REDUCE_MIN (-438)
@@ -868,101 +868,101 @@ static const short yy_reduce_ofst[] = {
/* 100 */ 674, 472, 782, 415, 560, 754, 770, -105, -288, -93,
/* 110 */ -93, -75, -272, -187, 77, 308, 336, 354, 359, 382,
/* 120 */ 410, 447, 518, 521, 564, 585, 663, 690, 691, 694,
- /* 130 */ 695, 711, -342, -41, -206, 124, 257, 516, -41, 274,
- /* 140 */ 333, 117, -23, 41, 483, 230, 487, 547, 434, 269,
+ /* 130 */ 695, 711, -342, -41, -206, 124, 516, -41, 274, 333,
+ /* 140 */ 117, -23, 41, 483, 230, 487, 547, 257, 434, 269,
/* 150 */ 466, 50, 387, 519, 665, 706, 537, -354, 325, 417,
- /* 160 */ 455, 492, 550, 555, 492, 598, 755, 756, 764, 723,
- /* 170 */ 794, 926, 818, 916, 916, 940, 919, 950, 937, 929,
- /* 180 */ 878, 878, 864, 878, 890, 881, 916, 927, 930, 944,
- /* 190 */ 961, 971, 972, 978, 1022, 1024, 983, 984, 988, 1031,
- /* 200 */ 1025, 1032, 1035, 1037, 1047, 1048, 990, 1050, 1021, 1054,
- /* 210 */ 1065, 1013, 1062, 1069, 1073, 1075, 1076, 1085, 1080, 1068,
- /* 220 */ 1074, 1093, 1061, 1066, 1067, 1070, 1072, 1079, 1081, 1082,
- /* 230 */ 1087, 1088, 1101, 1094, 1097, 1052, 1056, 1064, 1040, 1039,
- /* 240 */ 1034, 1103, 1095, 1099, 1104, 1115, 1086, 1096, 1100, 1016,
- /* 250 */ 1102, 1105, 1023, 1109, 1107, 1108, 916, 1026, 1036, 1041,
- /* 260 */ 1045, 1044, 1110, 1111, 1046, 1053, 1049, 878, 1133, 1112,
- /* 270 */ 1181, 1188, 1170, 1178, 1141, 1137, 1158, 1160, 1161, 1162,
- /* 280 */ 1163, 1144, 1164, 1153, 1198, 1185, 1199, 1179, 1116, 1182,
- /* 290 */ 1172, 1200, 1224, 1207, 1228, 1227, 1180, 1151, 1166, 1167,
- /* 300 */ 1203, 1239, 1240, 1230, 1247,
+ /* 160 */ 455, 492, 550, 555, 492, 598, 755, 756, 805, 783,
+ /* 170 */ 799, 924, 817, 906, 906, 939, 896, 950, 930, 926,
+ /* 180 */ 878, 878, 865, 878, 890, 889, 906, 928, 931, 941,
+ /* 190 */ 961, 971, 972, 978, 1024, 1025, 983, 988, 989, 1031,
+ /* 200 */ 1027, 1033, 1037, 1039, 1048, 1055, 994, 1046, 1021, 1054,
+ /* 210 */ 1065, 1013, 1062, 1069, 1073, 1075, 1076, 1086, 1079, 1072,
+ /* 220 */ 1074, 1093, 1061, 1066, 1067, 1068, 1070, 1080, 1081, 1082,
+ /* 230 */ 1083, 1087, 1088, 1094, 1098, 1052, 1059, 1060, 1032, 1038,
+ /* 240 */ 1045, 1097, 1063, 1095, 1111, 1125, 1096, 1100, 1101, 1022,
+ /* 250 */ 1099, 1102, 1026, 1103, 1104, 1105, 906, 1035, 1040, 1041,
+ /* 260 */ 1044, 1047, 1050, 1107, 1034, 1058, 1053, 878, 1142, 1109,
+ /* 270 */ 1180, 1184, 1183, 1185, 1141, 1144, 1156, 1160, 1161, 1162,
+ /* 280 */ 1163, 1149, 1165, 1154, 1199, 1189, 1200, 1174, 1116, 1191,
+ /* 290 */ 1178, 1198, 1210, 1208, 1222, 1225, 1166, 1153, 1168, 1192,
+ /* 300 */ 1204, 1206, 1211, 1230, 1247,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 10 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 20 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 30 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 40 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 50 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 60 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 70 */ 1664, 1664, 1664, 1922, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 80 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1743, 1664, 1664,
- /* 90 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 100 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1741, 1915, 2131,
- /* 110 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 120 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 130 */ 1664, 1664, 1664, 2143, 1664, 1664, 1743, 1664, 2143, 2143,
- /* 140 */ 2143, 1741, 2103, 2103, 1664, 1664, 1664, 1664, 1976, 1664,
- /* 150 */ 1664, 1664, 1664, 1664, 1664, 1850, 1664, 1664, 1664, 1664,
- /* 160 */ 1664, 1874, 1664, 1664, 1664, 1968, 1664, 1664, 2168, 2224,
- /* 170 */ 1664, 1664, 2171, 1664, 1664, 1664, 1927, 1664, 1803, 2158,
- /* 180 */ 2135, 2149, 2208, 2136, 2133, 2152, 1664, 2162, 1664, 1961,
- /* 190 */ 1920, 1664, 1920, 1917, 1664, 1664, 1920, 1917, 1917, 1664,
- /* 200 */ 1794, 1664, 1664, 1664, 1664, 1664, 1664, 1743, 1664, 1743,
- /* 210 */ 1664, 1664, 1743, 1664, 1743, 1743, 1743, 1664, 1743, 1721,
- /* 220 */ 1721, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 230 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1988, 1974,
- /* 240 */ 1664, 1741, 1970, 1664, 1741, 1664, 1664, 1664, 1664, 2179,
- /* 250 */ 2177, 1664, 2179, 2177, 1664, 1664, 1664, 2193, 2189, 2179,
- /* 260 */ 2197, 2195, 2164, 2162, 2227, 2214, 2210, 2149, 1664, 1664,
- /* 270 */ 1664, 1664, 1741, 1741, 1664, 2177, 1664, 1664, 1664, 1664,
- /* 280 */ 1664, 2177, 1664, 1664, 1741, 1664, 1741, 1664, 1664, 1819,
- /* 290 */ 1664, 1664, 1664, 1741, 1696, 1664, 1963, 1979, 1945, 1945,
- /* 300 */ 1853, 1853, 1853, 1744, 1669, 1664, 1664, 1664, 1664, 1664,
- /* 310 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 2192, 2191, 2058,
- /* 320 */ 1664, 2107, 2106, 2105, 2096, 2057, 1815, 1664, 2056, 2055,
- /* 330 */ 1664, 1664, 1664, 1664, 1664, 1664, 1936, 1935, 2049, 1664,
- /* 340 */ 1664, 2050, 2048, 2047, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 350 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 360 */ 1664, 1664, 1664, 1664, 2211, 2215, 1664, 1664, 1664, 1664,
- /* 370 */ 1664, 1664, 1664, 2132, 1664, 1664, 1664, 1664, 1664, 2031,
- /* 380 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 390 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 400 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 410 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 420 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 430 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 440 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 450 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 460 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 470 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 480 */ 1664, 1664, 1701, 2036, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 490 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 500 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 510 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 520 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 530 */ 1782, 1781, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 540 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 550 */ 1664, 1664, 1664, 1664, 2040, 1664, 1664, 1664, 1664, 1664,
- /* 560 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 2207,
- /* 570 */ 2165, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 580 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 2031,
- /* 590 */ 1664, 2190, 1664, 1664, 2205, 1664, 2209, 1664, 1664, 1664,
- /* 600 */ 1664, 1664, 1664, 1664, 2142, 2138, 1664, 1664, 2134, 1664,
- /* 610 */ 1664, 1664, 1664, 1664, 1664, 1664, 2039, 1664, 1664, 1664,
- /* 620 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 630 */ 2030, 1664, 2093, 1664, 1664, 1664, 2127, 1664, 1664, 2078,
- /* 640 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 2040,
- /* 650 */ 1664, 2043, 1664, 1664, 1664, 1664, 1664, 1847, 1664, 1664,
- /* 660 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 670 */ 1832, 1830, 1829, 1828, 1664, 1825, 1664, 1860, 1664, 1664,
- /* 680 */ 1664, 1856, 1855, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 690 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1762, 1664,
- /* 700 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1754, 1664, 1753,
- /* 710 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 720 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 730 */ 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664,
- /* 740 */ 1664, 1664,
+ /* 0 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 10 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 20 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 30 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 40 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 50 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 60 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 70 */ 1665, 1665, 1665, 1923, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 80 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1744, 1665, 1665,
+ /* 90 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 100 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1742, 1916, 2132,
+ /* 110 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 120 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 130 */ 1665, 1665, 1665, 2144, 1665, 1665, 1665, 2144, 2144, 2144,
+ /* 140 */ 1742, 2104, 2104, 1665, 1665, 1665, 1665, 1744, 1977, 1665,
+ /* 150 */ 1665, 1665, 1665, 1665, 1665, 1851, 1665, 1665, 1665, 1665,
+ /* 160 */ 1665, 1875, 1665, 1665, 1665, 1969, 1665, 1665, 2169, 2225,
+ /* 170 */ 1665, 1665, 2172, 1665, 1665, 1665, 1928, 1665, 1804, 2159,
+ /* 180 */ 2136, 2150, 2209, 2137, 2134, 2153, 1665, 2163, 1665, 1962,
+ /* 190 */ 1921, 1665, 1921, 1918, 1665, 1665, 1921, 1918, 1918, 1665,
+ /* 200 */ 1795, 1665, 1665, 1665, 1665, 1665, 1665, 1744, 1665, 1744,
+ /* 210 */ 1665, 1665, 1744, 1665, 1744, 1744, 1744, 1665, 1744, 1722,
+ /* 220 */ 1722, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 230 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1989, 1975,
+ /* 240 */ 1665, 1742, 1971, 1665, 1742, 1665, 1665, 1665, 1665, 2180,
+ /* 250 */ 2178, 1665, 2180, 2178, 1665, 1665, 1665, 2194, 2190, 2180,
+ /* 260 */ 2198, 2196, 2165, 2163, 2228, 2215, 2211, 2150, 1665, 1665,
+ /* 270 */ 1665, 1665, 1742, 1742, 1665, 2178, 1665, 1665, 1665, 1665,
+ /* 280 */ 1665, 2178, 1665, 1665, 1742, 1665, 1742, 1665, 1665, 1820,
+ /* 290 */ 1665, 1665, 1665, 1742, 1697, 1665, 1964, 1980, 1946, 1946,
+ /* 300 */ 1854, 1854, 1854, 1745, 1670, 1665, 1665, 1665, 1665, 1665,
+ /* 310 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 2193, 2192, 2059,
+ /* 320 */ 1665, 2108, 2107, 2106, 2097, 2058, 1816, 1665, 2057, 2056,
+ /* 330 */ 1665, 1665, 1665, 1665, 1665, 1665, 1937, 1936, 2050, 1665,
+ /* 340 */ 1665, 2051, 2049, 2048, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 350 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 360 */ 1665, 1665, 1665, 1665, 1665, 2212, 2216, 1665, 1665, 1665,
+ /* 370 */ 1665, 1665, 1665, 1665, 2133, 1665, 1665, 1665, 1665, 1665,
+ /* 380 */ 2032, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 390 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 400 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 410 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 420 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 430 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 440 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 450 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 460 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 470 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 480 */ 1665, 1665, 1665, 1702, 2037, 1665, 1665, 1665, 1665, 1665,
+ /* 490 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 500 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 510 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 520 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 530 */ 1665, 1783, 1782, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 540 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 550 */ 1665, 1665, 1665, 1665, 1665, 2041, 1665, 1665, 1665, 1665,
+ /* 560 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 570 */ 2208, 2166, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 580 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 590 */ 2032, 1665, 2191, 1665, 1665, 2206, 1665, 2210, 1665, 1665,
+ /* 600 */ 1665, 1665, 1665, 1665, 1665, 2143, 2139, 1665, 1665, 2135,
+ /* 610 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 2040, 1665, 1665,
+ /* 620 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 630 */ 1665, 2031, 1665, 2094, 1665, 1665, 1665, 2128, 1665, 1665,
+ /* 640 */ 2079, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 650 */ 2041, 1665, 2044, 1665, 1665, 1665, 1665, 1665, 1848, 1665,
+ /* 660 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 670 */ 1665, 1833, 1831, 1830, 1829, 1665, 1826, 1665, 1861, 1665,
+ /* 680 */ 1665, 1665, 1857, 1856, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 690 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1763,
+ /* 700 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1755, 1665,
+ /* 710 */ 1754, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 720 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 730 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665,
+ /* 740 */ 1665, 1665, 1665,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -2023,7 +2023,7 @@ static const char *const yyRuleName[] = {
/* 147 */ "multi_create_clause ::= multi_create_clause create_subtable_clause",
/* 148 */ "create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options",
/* 149 */ "multi_drop_clause ::= drop_table_clause",
- /* 150 */ "multi_drop_clause ::= multi_drop_clause drop_table_clause",
+ /* 150 */ "multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause",
/* 151 */ "drop_table_clause ::= exists_opt full_table_name",
/* 152 */ "specific_cols_opt ::=",
/* 153 */ "specific_cols_opt ::= NK_LP col_name_list NK_RP",
@@ -3203,7 +3203,7 @@ static const struct {
{ 357, -2 }, /* (147) multi_create_clause ::= multi_create_clause create_subtable_clause */
{ 365, -10 }, /* (148) create_subtable_clause ::= not_exists_opt full_table_name USING full_table_name specific_cols_opt TAGS NK_LP expression_list NK_RP table_options */
{ 359, -1 }, /* (149) multi_drop_clause ::= drop_table_clause */
- { 359, -2 }, /* (150) multi_drop_clause ::= multi_drop_clause drop_table_clause */
+ { 359, -3 }, /* (150) multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */
{ 368, -2 }, /* (151) drop_table_clause ::= exists_opt full_table_name */
{ 366, 0 }, /* (152) specific_cols_opt ::= */
{ 366, -3 }, /* (153) specific_cols_opt ::= NK_LP col_name_list NK_RP */
@@ -4138,6 +4138,7 @@ static YYACTIONTYPE yy_reduce(
yymsp[0].minor.yy110 = yylhsminor.yy110;
break;
case 125: /* retention_list ::= retention_list NK_COMMA retention */
+ case 150: /* multi_drop_clause ::= multi_drop_clause NK_COMMA drop_table_clause */ yytestcase(yyruleno==150);
case 157: /* column_def_list ::= column_def_list NK_COMMA column_def */ yytestcase(yyruleno==157);
case 201: /* rollup_func_list ::= rollup_func_list NK_COMMA rollup_func_name */ yytestcase(yyruleno==201);
case 206: /* col_name_list ::= col_name_list NK_COMMA col_name */ yytestcase(yyruleno==206);
@@ -4225,7 +4226,6 @@ static YYACTIONTYPE yy_reduce(
yymsp[-5].minor.yy42 = yylhsminor.yy42;
break;
case 147: /* multi_create_clause ::= multi_create_clause create_subtable_clause */
- case 150: /* multi_drop_clause ::= multi_drop_clause drop_table_clause */ yytestcase(yyruleno==150);
case 434: /* when_then_list ::= when_then_list when_then_expr */ yytestcase(yyruleno==434);
{ yylhsminor.yy110 = addNodeToList(pCxt, yymsp[-1].minor.yy110, yymsp[0].minor.yy42); }
yymsp[-1].minor.yy110 = yylhsminor.yy110;
diff --git a/source/libs/parser/test/mockCatalogService.cpp b/source/libs/parser/test/mockCatalogService.cpp
index 0d46b63278..71b7c1a678 100644
--- a/source/libs/parser/test/mockCatalogService.cpp
+++ b/source/libs/parser/test/mockCatalogService.cpp
@@ -331,7 +331,7 @@ class MockCatalogServiceImpl {
info.dstTbUid = getNextId();
info.dstVgId = pReq->dstVgId;
genEpSet(&info.epSet);
- info.expr = strdup(pReq->expr);
+ info.expr = taosStrdup(pReq->expr);
auto it = index_.find(pReq->stb);
if (index_.end() == it) {
index_.insert(std::make_pair(string(pReq->stb), std::vector{info}));
@@ -374,7 +374,7 @@ class MockCatalogServiceImpl {
STableIndexInfo* copyTableIndexInfo(STableIndexInfo* pDst, const STableIndexInfo* pSrc) const {
memcpy(pDst, pSrc, sizeof(STableIndexInfo));
- pDst->expr = strdup(pSrc->expr);
+ pDst->expr = taosStrdup(pSrc->expr);
return pDst;
}
diff --git a/source/libs/parser/test/parAlterToBalanceTest.cpp b/source/libs/parser/test/parAlterToBalanceTest.cpp
index a0de93782d..bfcf6ec27e 100644
--- a/source/libs/parser/test/parAlterToBalanceTest.cpp
+++ b/source/libs/parser/test/parAlterToBalanceTest.cpp
@@ -382,7 +382,7 @@ TEST_F(ParserInitialATest, alterSTable) {
expect.name[len] = '\0';
expect.alterType = alterType;
if (nullptr != pComment) {
- expect.comment = strdup(pComment);
+ expect.comment = taosStrdup(pComment);
expect.commentLen = strlen(pComment);
}
diff --git a/source/libs/parser/test/parInitialCTest.cpp b/source/libs/parser/test/parInitialCTest.cpp
index fab1fc4919..8ba5802ad6 100644
--- a/source/libs/parser/test/parInitialCTest.cpp
+++ b/source/libs/parser/test/parInitialCTest.cpp
@@ -603,7 +603,7 @@ TEST_F(ParserInitialCTest, createStable) {
expect.deleteMark2 = deleteMark2;
// expect.ttl = ttl;
if (nullptr != pComment) {
- expect.pComment = strdup(pComment);
+ expect.pComment = taosStrdup(pComment);
expect.commentLen = strlen(pComment);
}
};
@@ -780,7 +780,7 @@ TEST_F(ParserInitialCTest, createStream) {
snprintf(expect.sourceDB, sizeof(expect.sourceDB), "0.%s", pSrcDb);
snprintf(expect.targetStbFullName, sizeof(expect.targetStbFullName), "0.test.%s", pDstStb);
expect.igExists = igExists;
- expect.sql = strdup(pSql);
+ expect.sql = taosStrdup(pSql);
expect.createStb = STREAM_CREATE_STABLE_TRUE;
expect.triggerType = STREAM_TRIGGER_AT_ONCE;
expect.maxDelay = 0;
@@ -934,13 +934,13 @@ TEST_F(ParserInitialCTest, createTable) {
auto addCreateTbReq = [&](const char* pName, bool ignoreExists = false, int32_t ttl = TSDB_DEFAULT_TABLE_TTL,
const char* pComment = nullptr) {
SVCreateTbReq req = {0};
- req.name = strdup(pName);
+ req.name = taosStrdup(pName);
if (ignoreExists) {
req.flags |= TD_CREATE_IF_NOT_EXISTS;
}
req.ttl = ttl;
if (nullptr != pComment) {
- req.comment = strdup(pComment);
+ req.comment = taosStrdup(pComment);
req.commentLen = strlen(pComment);
}
++expect.nReqs;
diff --git a/source/libs/parser/test/parInitialDTest.cpp b/source/libs/parser/test/parInitialDTest.cpp
index 3d773d3510..203156ec88 100644
--- a/source/libs/parser/test/parInitialDTest.cpp
+++ b/source/libs/parser/test/parInitialDTest.cpp
@@ -245,6 +245,7 @@ TEST_F(ParserInitialDTest, dropTable) {
useDb("root", "test");
run("DROP TABLE t1");
+ run("DROP TABLE t1, st1s1, st1s2");
}
TEST_F(ParserInitialDTest, dropTopic) {
diff --git a/source/libs/qcom/src/queryUtil.c b/source/libs/qcom/src/queryUtil.c
index d8cd5f4e75..c68a08682c 100644
--- a/source/libs/qcom/src/queryUtil.c
+++ b/source/libs/qcom/src/queryUtil.c
@@ -420,7 +420,7 @@ end:
cJSON_Delete(json);
taosArrayDestroy(pTagVals);
if (string == NULL) {
- string = strdup(TSDB_DATA_NULL_STR_L);
+ string = taosStrdup(TSDB_DATA_NULL_STR_L);
}
return string;
}
@@ -510,20 +510,20 @@ int32_t cloneSVreateTbReq(SVCreateTbReq* pSrc, SVCreateTbReq** pDst) {
(*pDst)->flags = pSrc->flags;
if (pSrc->name) {
- (*pDst)->name = strdup(pSrc->name);
+ (*pDst)->name = taosStrdup(pSrc->name);
}
(*pDst)->uid = pSrc->uid;
(*pDst)->ctime = pSrc->ctime;
(*pDst)->ttl = pSrc->ttl;
(*pDst)->commentLen = pSrc->commentLen;
if (pSrc->comment) {
- (*pDst)->comment = strdup(pSrc->comment);
+ (*pDst)->comment = taosStrdup(pSrc->comment);
}
(*pDst)->type = pSrc->type;
if (pSrc->type == TSDB_CHILD_TABLE) {
if (pSrc->ctb.stbName) {
- (*pDst)->ctb.stbName = strdup(pSrc->ctb.stbName);
+ (*pDst)->ctb.stbName = taosStrdup(pSrc->ctb.stbName);
}
(*pDst)->ctb.tagNum = pSrc->ctb.tagNum;
(*pDst)->ctb.suid = pSrc->ctb.suid;
diff --git a/source/libs/qcom/src/querymsg.c b/source/libs/qcom/src/querymsg.c
index 2e4b000761..d2934e1ff8 100644
--- a/source/libs/qcom/src/querymsg.c
+++ b/source/libs/qcom/src/querymsg.c
@@ -527,7 +527,7 @@ int32_t queryProcessGetSerVerRsp(void *output, char *msg, int32_t msgSize) {
return code;
}
- *(char **)output = strdup(out.ver);
+ *(char **)output = taosStrdup(out.ver);
return code;
}
diff --git a/source/libs/scalar/src/filter.c b/source/libs/scalar/src/filter.c
index c0c8072d81..ee8e07cee3 100644
--- a/source/libs/scalar/src/filter.c
+++ b/source/libs/scalar/src/filter.c
@@ -3104,9 +3104,8 @@ static FORCE_INLINE bool filterExecuteImplIsNull(void *pinfo, int32_t numOfRows,
for (int32_t i = 0; i < numOfRows; ++i) {
uint32_t uidx = info->groups[0].unitIdxs[0];
- void *colData = colDataGetData((SColumnInfoData *)info->cunits[uidx].colData, i);
- p[i] = ((colData == NULL) || colDataIsNull((SColumnInfoData *)info->cunits[uidx].colData, 0, i, NULL));
+ p[i] = colDataIsNull((SColumnInfoData *)info->cunits[uidx].colData, 0, i, NULL);
if (p[i] == 0) {
all = false;
} else {
@@ -3130,9 +3129,8 @@ static FORCE_INLINE bool filterExecuteImplNotNull(void *pinfo, int32_t numOfRows
for (int32_t i = 0; i < numOfRows; ++i) {
uint32_t uidx = info->groups[0].unitIdxs[0];
- void *colData = colDataGetData((SColumnInfoData *)info->cunits[uidx].colData, i);
- p[i] = ((colData != NULL) && !colDataIsNull((SColumnInfoData *)info->cunits[uidx].colData, 0, i, NULL));
+ p[i] = !colDataIsNull((SColumnInfoData *)info->cunits[uidx].colData, 0, i, NULL);
if (p[i] == 0) {
all = false;
} else {
@@ -3162,13 +3160,13 @@ bool filterExecuteImplRange(void *pinfo, int32_t numOfRows, SColumnInfoData *pRe
for (int32_t i = 0; i < numOfRows; ++i) {
SColumnInfoData *pData = info->cunits[0].colData;
- void *colData = colDataGetData(pData, i);
- if (colData == NULL || colDataIsNull_s(pData, i)) {
+ if (colDataIsNull_s(pData, i)) {
all = false;
p[i] = 0;
continue;
}
+ void *colData = colDataGetData(pData, i);
p[i] = (*rfunc)(colData, colData, valData, valData2, func);
if (p[i] == 0) {
@@ -3194,13 +3192,13 @@ bool filterExecuteImplMisc(void *pinfo, int32_t numOfRows, SColumnInfoData *pRes
for (int32_t i = 0; i < numOfRows; ++i) {
uint32_t uidx = info->groups[0].unitIdxs[0];
- void *colData = colDataGetData((SColumnInfoData *)info->cunits[uidx].colData, i);
- if (colData == NULL || colDataIsNull_s((SColumnInfoData *)info->cunits[uidx].colData, i)) {
+ if (colDataIsNull_s((SColumnInfoData *)info->cunits[uidx].colData, i)) {
p[i] = 0;
all = false;
continue;
}
+ void *colData = colDataGetData((SColumnInfoData *)info->cunits[uidx].colData, i);
// match/nmatch for nchar type need convert from ucs4 to mbs
if (info->cunits[uidx].dataType == TSDB_DATA_TYPE_NCHAR &&
(info->cunits[uidx].optr == OP_TYPE_MATCH || info->cunits[uidx].optr == OP_TYPE_NMATCH)) {
@@ -3258,7 +3256,7 @@ bool filterExecuteImpl(void *pinfo, int32_t numOfRows, SColumnInfoData *pRes, SC
if (!isNull) {
colData = colDataGetData((SColumnInfoData *)(cunit->colData), i);
}
-
+
if (colData == NULL || isNull) {
p[i] = optr == OP_TYPE_IS_NULL ? true : false;
} else {
diff --git a/source/libs/scheduler/src/schJob.c b/source/libs/scheduler/src/schJob.c
index fb8a7a42ba..980a8ac6a1 100644
--- a/source/libs/scheduler/src/schJob.c
+++ b/source/libs/scheduler/src/schJob.c
@@ -716,7 +716,7 @@ int32_t schInitJob(int64_t *pJobId, SSchedulerReq *pReq) {
pJob->attr.localExec = pReq->localReq;
pJob->conn = *pReq->pConn;
if (pReq->sql) {
- pJob->sql = strdup(pReq->sql);
+ pJob->sql = taosStrdup(pReq->sql);
}
pJob->pDag = pReq->pDag;
pJob->allocatorRefId = nodesMakeAllocatorWeakRef(pReq->allocatorRefId);
diff --git a/source/libs/scheduler/src/schRemote.c b/source/libs/scheduler/src/schRemote.c
index 4e05e22474..6f4130fd9f 100644
--- a/source/libs/scheduler/src/schRemote.c
+++ b/source/libs/scheduler/src/schRemote.c
@@ -887,7 +887,7 @@ int32_t schUpdateSendTargetInfo(SMsgSendInfo *pMsgSendInfo, SQueryNodeAddr *addr
} else {
pMsgSendInfo->target.type = TARGET_TYPE_VNODE;
pMsgSendInfo->target.vgId = addr->nodeId;
- pMsgSendInfo->target.dbFName = strdup(pTask->plan->dbFName);
+ pMsgSendInfo->target.dbFName = taosStrdup(pTask->plan->dbFName);
}
return TSDB_CODE_SUCCESS;
diff --git a/source/libs/stream/src/streamMeta.c b/source/libs/stream/src/streamMeta.c
index 518ace8630..66d98e90bf 100644
--- a/source/libs/stream/src/streamMeta.c
+++ b/source/libs/stream/src/streamMeta.c
@@ -26,7 +26,7 @@ SStreamMeta* streamMetaOpen(const char* path, void* ahandle, FTaskExpand expandF
int32_t len = strlen(path) + 20;
char* streamPath = taosMemoryCalloc(1, len);
sprintf(streamPath, "%s/%s", path, "stream");
- pMeta->path = strdup(streamPath);
+ pMeta->path = taosStrdup(streamPath);
if (tdbOpen(pMeta->path, 16 * 1024, 1, &pMeta->db, 0) < 0) {
taosMemoryFree(streamPath);
goto _err;
diff --git a/source/libs/sync/inc/syncPipeline.h b/source/libs/sync/inc/syncPipeline.h
index 504a9f0bd7..a61138547d 100644
--- a/source/libs/sync/inc/syncPipeline.h
+++ b/source/libs/sync/inc/syncPipeline.h
@@ -68,7 +68,7 @@ void syncNodeLogReplMgrDestroy(SSyncNode* pNode);
// access
static FORCE_INLINE int64_t syncLogGetRetryBackoffTimeMs(SSyncLogReplMgr* pMgr) {
- return (1 << pMgr->retryBackoff) * SYNC_LOG_REPL_RETRY_WAIT_MS;
+ return ((int64_t)1 << pMgr->retryBackoff) * SYNC_LOG_REPL_RETRY_WAIT_MS;
}
static FORCE_INLINE int32_t syncLogGetNextRetryBackoff(SSyncLogReplMgr* pMgr) {
diff --git a/source/libs/sync/inc/syncRaftEntry.h b/source/libs/sync/inc/syncRaftEntry.h
index 58944eb08c..a39e043c52 100644
--- a/source/libs/sync/inc/syncRaftEntry.h
+++ b/source/libs/sync/inc/syncRaftEntry.h
@@ -49,39 +49,6 @@ static FORCE_INLINE bool syncLogIsReplicationBarrier(SSyncRaftEntry* pEntry) {
return pEntry->originalRpcType == TDMT_SYNC_NOOP;
}
-typedef struct SRaftEntryHashCache {
- SHashObj* pEntryHash;
- int32_t maxCount;
- int32_t currentCount;
- TdThreadMutex mutex;
- SSyncNode* pSyncNode;
-} SRaftEntryHashCache;
-
-SRaftEntryHashCache* raftCacheCreate(SSyncNode* pSyncNode, int32_t maxCount);
-void raftCacheDestroy(SRaftEntryHashCache* pCache);
-int32_t raftCachePutEntry(struct SRaftEntryHashCache* pCache, SSyncRaftEntry* pEntry);
-int32_t raftCacheGetEntry(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry);
-int32_t raftCacheGetEntryP(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry);
-int32_t raftCacheDelEntry(struct SRaftEntryHashCache* pCache, SyncIndex index);
-int32_t raftCacheGetAndDel(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry);
-int32_t raftCacheClear(struct SRaftEntryHashCache* pCache);
-
-typedef struct SRaftEntryCache {
- SSkipList* pSkipList;
- int32_t maxCount;
- int32_t currentCount;
- int32_t refMgr;
- TdThreadMutex mutex;
- SSyncNode* pSyncNode;
-} SRaftEntryCache;
-
-SRaftEntryCache* raftEntryCacheCreate(SSyncNode* pSyncNode, int32_t maxCount);
-void raftEntryCacheDestroy(SRaftEntryCache* pCache);
-int32_t raftEntryCachePutEntry(struct SRaftEntryCache* pCache, SSyncRaftEntry* pEntry);
-int32_t raftEntryCacheGetEntry(struct SRaftEntryCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry);
-int32_t raftEntryCacheGetEntryP(struct SRaftEntryCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry);
-int32_t raftEntryCacheClear(struct SRaftEntryCache* pCache, int32_t count);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/libs/sync/src/syncAppendEntries.c b/source/libs/sync/src/syncAppendEntries.c
index b04bcb86c6..bd1dae54d9 100644
--- a/source/libs/sync/src/syncAppendEntries.c
+++ b/source/libs/sync/src/syncAppendEntries.c
@@ -104,6 +104,8 @@ int32_t syncNodeOnAppendEntries(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
SyncAppendEntries* pMsg = pRpcMsg->pCont;
SRpcMsg rpcRsp = {0};
bool accepted = false;
+ SSyncRaftEntry* pEntry = NULL;
+
// if already drop replica, do not process
if (!syncNodeInRaftGroup(ths, &(pMsg->srcId))) {
syncLogRecvAppendEntries(ths, pMsg, "not in my config");
@@ -137,14 +139,13 @@ int32_t syncNodeOnAppendEntries(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
syncNodeStepDown(ths, pMsg->term);
syncNodeResetElectTimer(ths);
- if (pMsg->dataLen < (int32_t)sizeof(SSyncRaftEntry)) {
+ if (pMsg->dataLen < sizeof(SSyncRaftEntry)) {
sError("vgId:%d, incomplete append entries received. prev index:%" PRId64 ", term:%" PRId64 ", datalen:%d",
ths->vgId, pMsg->prevLogIndex, pMsg->prevLogTerm, pMsg->dataLen);
goto _IGNORE;
}
- SSyncRaftEntry* pEntry = syncBuildRaftEntryFromAppendEntries(pMsg);
-
+ pEntry = syncBuildRaftEntryFromAppendEntries(pMsg);
if (pEntry == NULL) {
sError("vgId:%d, failed to get raft entry from append entries since %s", ths->vgId, terrstr());
goto _IGNORE;
@@ -191,5 +192,6 @@ _out:
_IGNORE:
rpcFreeCont(rpcRsp.pCont);
+ syncEntryDestroy(pEntry);
return 0;
}
diff --git a/source/libs/sync/src/syncAppendEntriesReply.c b/source/libs/sync/src/syncAppendEntriesReply.c
index f81699b9f6..a60f43cd5e 100644
--- a/source/libs/sync/src/syncAppendEntriesReply.c
+++ b/source/libs/sync/src/syncAppendEntriesReply.c
@@ -40,7 +40,7 @@
//
int32_t syncNodeOnAppendEntriesReply(SSyncNode* ths, const SRpcMsg* pRpcMsg) {
- SyncAppendEntriesReply* pMsg = pRpcMsg->pCont;
+ SyncAppendEntriesReply* pMsg = (SyncAppendEntriesReply*)pRpcMsg->pCont;
int32_t ret = 0;
// if already drop replica, do not process
diff --git a/source/libs/sync/src/syncMain.c b/source/libs/sync/src/syncMain.c
index 5935f8393a..a54be57d8a 100644
--- a/source/libs/sync/src/syncMain.c
+++ b/source/libs/sync/src/syncMain.c
@@ -1126,29 +1126,18 @@ int32_t syncNodeStartStandBy(SSyncNode* pSyncNode) {
}
void syncNodePreClose(SSyncNode* pSyncNode) {
- if (pSyncNode != NULL && pSyncNode->pFsm != NULL && pSyncNode->pFsm->FpApplyQueueItems != NULL) {
- while (1) {
- int32_t aqItems = pSyncNode->pFsm->FpApplyQueueItems(pSyncNode->pFsm);
- sTrace("vgId:%d, pre close, %d items in apply queue", pSyncNode->vgId, aqItems);
- if (aqItems == 0 || aqItems == -1) {
- break;
- }
- taosMsleep(20);
- }
- }
+ ASSERT(pSyncNode != NULL);
+ ASSERT(pSyncNode->pFsm != NULL);
+ ASSERT(pSyncNode->pFsm->FpApplyQueueItems != NULL);
-#if 0
- if (pSyncNode->pNewNodeReceiver != NULL) {
- if (snapshotReceiverIsStart(pSyncNode->pNewNodeReceiver)) {
- snapshotReceiverStop(pSyncNode->pNewNodeReceiver);
+ while (1) {
+ int32_t aqItems = pSyncNode->pFsm->FpApplyQueueItems(pSyncNode->pFsm);
+ sTrace("vgId:%d, pre close, %d items in apply queue", pSyncNode->vgId, aqItems);
+ if (aqItems == 0 || aqItems == -1) {
+ break;
}
-
- sDebug("vgId:%d, snapshot receiver destroy while preclose sync node, data:%p", pSyncNode->vgId,
- pSyncNode->pNewNodeReceiver);
- snapshotReceiverDestroy(pSyncNode->pNewNodeReceiver);
- pSyncNode->pNewNodeReceiver = NULL;
+ taosMsleep(20);
}
-#endif
// stop elect timer
syncNodeStopElectTimer(pSyncNode);
@@ -1461,7 +1450,7 @@ void syncNodeDoConfigChange(SSyncNode* pSyncNode, SSyncCfg* pNewConfig, SyncInde
}
// log begin config change
- sNInfo(pSyncNode, "begin do config change, from %d to %d", pSyncNode->vgId, oldConfig.replicaNum,
+ sNInfo(pSyncNode, "begin do config change, from %d to %d, replicas:%d", pSyncNode->vgId, oldConfig.replicaNum,
pNewConfig->replicaNum);
if (IamInNew) {
@@ -1742,8 +1731,7 @@ void syncNodeBecomeLeader(SSyncNode* pSyncNode, const char* debugStr) {
#endif
// close receiver
- if (pSyncNode != NULL && pSyncNode->pNewNodeReceiver != NULL &&
- snapshotReceiverIsStart(pSyncNode->pNewNodeReceiver)) {
+ if (snapshotReceiverIsStart(pSyncNode->pNewNodeReceiver)) {
snapshotReceiverStop(pSyncNode->pNewNodeReceiver);
}
diff --git a/source/libs/sync/src/syncPipeline.c b/source/libs/sync/src/syncPipeline.c
index c9ff2d2dcc..040ea71182 100644
--- a/source/libs/sync/src/syncPipeline.c
+++ b/source/libs/sync/src/syncPipeline.c
@@ -901,7 +901,7 @@ int32_t syncLogReplMgrProcessReplyAsNormal(SSyncLogReplMgr* pMgr, SSyncNode* pNo
int64_t firstSentMs = pMgr->states[pMgr->startIndex % pMgr->size].timeMs;
int64_t lastSentMs = pMgr->states[(pMgr->endIndex - 1) % pMgr->size].timeMs;
int64_t timeDiffMs = lastSentMs - firstSentMs;
- if (timeDiffMs > 0 && timeDiffMs < (SYNC_LOG_REPL_RETRY_WAIT_MS << (pMgr->retryBackoff - 1))) {
+ if (timeDiffMs > 0 && timeDiffMs < ((int64_t)SYNC_LOG_REPL_RETRY_WAIT_MS << (pMgr->retryBackoff - 1))) {
pMgr->retryBackoff -= 1;
}
}
@@ -928,10 +928,6 @@ SSyncLogReplMgr* syncLogReplMgrCreate() {
ASSERT(pMgr->size == TSDB_SYNC_LOG_BUFFER_SIZE);
return pMgr;
-
-_err:
- taosMemoryFree(pMgr);
- return NULL;
}
void syncLogReplMgrDestroy(SSyncLogReplMgr* pMgr) {
diff --git a/source/libs/sync/src/syncRaftCfg.c b/source/libs/sync/src/syncRaftCfg.c
index 806949c81e..f780e255ce 100644
--- a/source/libs/sync/src/syncRaftCfg.c
+++ b/source/libs/sync/src/syncRaftCfg.c
@@ -224,7 +224,7 @@ _OVER:
int32_t syncAddCfgIndex(SSyncNode *pNode, SyncIndex cfgIndex) {
SRaftCfg *pCfg = &pNode->raftCfg;
- if (pCfg->configIndexCount <= MAX_CONFIG_INDEX_COUNT) {
+ if (pCfg->configIndexCount < MAX_CONFIG_INDEX_COUNT) {
return -1;
}
diff --git a/source/libs/sync/src/syncRaftEntry.c b/source/libs/sync/src/syncRaftEntry.c
index 623f1b77a4..3e63e2fb8e 100644
--- a/source/libs/sync/src/syncRaftEntry.c
+++ b/source/libs/sync/src/syncRaftEntry.c
@@ -102,344 +102,3 @@ void syncEntry2OriginalRpc(const SSyncRaftEntry* pEntry, SRpcMsg* pRpcMsg) {
pRpcMsg->pCont = rpcMallocCont(pRpcMsg->contLen);
memcpy(pRpcMsg->pCont, pEntry->data, pRpcMsg->contLen);
}
-
-SRaftEntryHashCache* raftCacheCreate(SSyncNode* pSyncNode, int32_t maxCount) {
- SRaftEntryHashCache* pCache = taosMemoryMalloc(sizeof(SRaftEntryHashCache));
- if (pCache == NULL) {
- sError("vgId:%d, raft cache create error", pSyncNode->vgId);
- return NULL;
- }
-
- pCache->pEntryHash =
- taosHashInit(sizeof(SyncIndex), taosGetDefaultHashFunction(TSDB_DATA_TYPE_BINARY), true, HASH_NO_LOCK);
- if (pCache->pEntryHash == NULL) {
- sError("vgId:%d, raft cache create hash error", pSyncNode->vgId);
- return NULL;
- }
-
- taosThreadMutexInit(&(pCache->mutex), NULL);
- pCache->maxCount = maxCount;
- pCache->currentCount = 0;
- pCache->pSyncNode = pSyncNode;
-
- return pCache;
-}
-
-void raftCacheDestroy(SRaftEntryHashCache* pCache) {
- if (pCache != NULL) {
- taosThreadMutexLock(&pCache->mutex);
- taosHashCleanup(pCache->pEntryHash);
- taosThreadMutexUnlock(&pCache->mutex);
- taosThreadMutexDestroy(&(pCache->mutex));
- taosMemoryFree(pCache);
- }
-}
-
-// success, return 1
-// max count, return 0
-// error, return -1
-int32_t raftCachePutEntry(struct SRaftEntryHashCache* pCache, SSyncRaftEntry* pEntry) {
- taosThreadMutexLock(&pCache->mutex);
-
- if (pCache->currentCount >= pCache->maxCount) {
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
- }
-
- taosHashPut(pCache->pEntryHash, &(pEntry->index), sizeof(pEntry->index), pEntry, pEntry->bytes);
- ++(pCache->currentCount);
-
- sNTrace(pCache->pSyncNode, "raft cache add, type:%s,%d, type2:%s,%d, index:%" PRId64 ", bytes:%d",
- TMSG_INFO(pEntry->msgType), pEntry->msgType, TMSG_INFO(pEntry->originalRpcType), pEntry->originalRpcType,
- pEntry->index, pEntry->bytes);
- taosThreadMutexUnlock(&pCache->mutex);
- return 1;
-}
-
-// success, return 0
-// error, return -1
-// not exist, return -1, terrno = TSDB_CODE_WAL_LOG_NOT_EXIST
-int32_t raftCacheGetEntry(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry) {
- if (ppEntry == NULL) {
- return -1;
- }
- *ppEntry = NULL;
-
- taosThreadMutexLock(&pCache->mutex);
- void* pTmp = taosHashGet(pCache->pEntryHash, &index, sizeof(index));
- if (pTmp != NULL) {
- SSyncRaftEntry* pEntry = pTmp;
- *ppEntry = taosMemoryMalloc(pEntry->bytes);
- memcpy(*ppEntry, pTmp, pEntry->bytes);
-
- sNTrace(pCache->pSyncNode, "raft cache get, type:%s,%d, type2:%s,%d, index:%" PRId64,
- TMSG_INFO((*ppEntry)->msgType), (*ppEntry)->msgType, TMSG_INFO((*ppEntry)->originalRpcType),
- (*ppEntry)->originalRpcType, (*ppEntry)->index);
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
- }
-
- taosThreadMutexUnlock(&pCache->mutex);
- terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
- return -1;
-}
-
-// success, return 0
-// error, return -1
-// not exist, return -1, terrno = TSDB_CODE_WAL_LOG_NOT_EXIST
-int32_t raftCacheGetEntryP(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry) {
- if (ppEntry == NULL) {
- return -1;
- }
- *ppEntry = NULL;
-
- taosThreadMutexLock(&pCache->mutex);
- void* pTmp = taosHashGet(pCache->pEntryHash, &index, sizeof(index));
- if (pTmp != NULL) {
- SSyncRaftEntry* pEntry = pTmp;
- *ppEntry = pEntry;
-
- sNTrace(pCache->pSyncNode, "raft cache get, type:%s,%d, type2:%s,%d, index:%" PRId64,
- TMSG_INFO((*ppEntry)->msgType), (*ppEntry)->msgType, TMSG_INFO((*ppEntry)->originalRpcType),
- (*ppEntry)->originalRpcType, (*ppEntry)->index);
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
- }
-
- taosThreadMutexUnlock(&pCache->mutex);
- terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
- return -1;
-}
-
-int32_t raftCacheDelEntry(struct SRaftEntryHashCache* pCache, SyncIndex index) {
- taosThreadMutexLock(&pCache->mutex);
- taosHashRemove(pCache->pEntryHash, &index, sizeof(index));
- --(pCache->currentCount);
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
-}
-
-int32_t raftCacheGetAndDel(struct SRaftEntryHashCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry) {
- if (ppEntry == NULL) {
- return -1;
- }
- *ppEntry = NULL;
-
- taosThreadMutexLock(&pCache->mutex);
- void* pTmp = taosHashGet(pCache->pEntryHash, &index, sizeof(index));
- if (pTmp != NULL) {
- SSyncRaftEntry* pEntry = pTmp;
- *ppEntry = taosMemoryMalloc(pEntry->bytes);
- memcpy(*ppEntry, pTmp, pEntry->bytes);
-
- sNTrace(pCache->pSyncNode, "raft cache get-and-del, type:%s,%d, type2:%s,%d, index:%" PRId64,
- TMSG_INFO((*ppEntry)->msgType), (*ppEntry)->msgType, TMSG_INFO((*ppEntry)->originalRpcType),
- (*ppEntry)->originalRpcType, (*ppEntry)->index);
-
- taosHashRemove(pCache->pEntryHash, &index, sizeof(index));
- --(pCache->currentCount);
-
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
- }
-
- taosThreadMutexUnlock(&pCache->mutex);
- terrno = TSDB_CODE_WAL_LOG_NOT_EXIST;
- return -1;
-}
-
-int32_t raftCacheClear(struct SRaftEntryHashCache* pCache) {
- taosThreadMutexLock(&pCache->mutex);
- taosHashClear(pCache->pEntryHash);
- pCache->currentCount = 0;
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
-}
-
-static char* keyFn(const void* pData) {
- SSyncRaftEntry* pEntry = (SSyncRaftEntry*)pData;
- return (char*)(&(pEntry->index));
-}
-
-static int cmpFn(const void* p1, const void* p2) { return memcmp(p1, p2, sizeof(SyncIndex)); }
-
-static void freeRaftEntry(void* param) {
- SSyncRaftEntry* pEntry = (SSyncRaftEntry*)param;
- syncEntryDestroy(pEntry);
-}
-
-SRaftEntryCache* raftEntryCacheCreate(SSyncNode* pSyncNode, int32_t maxCount) {
- SRaftEntryCache* pCache = taosMemoryMalloc(sizeof(SRaftEntryCache));
- if (pCache == NULL) {
- sError("vgId:%d, raft cache create error", pSyncNode->vgId);
- return NULL;
- }
-
- pCache->pSkipList =
- tSkipListCreate(MAX_SKIP_LIST_LEVEL, TSDB_DATA_TYPE_BINARY, sizeof(SyncIndex), cmpFn, SL_ALLOW_DUP_KEY, keyFn);
- if (pCache->pSkipList == NULL) {
- sError("vgId:%d, raft cache create hash error", pSyncNode->vgId);
- return NULL;
- }
-
- taosThreadMutexInit(&(pCache->mutex), NULL);
- pCache->refMgr = taosOpenRef(10, freeRaftEntry);
- pCache->maxCount = maxCount;
- pCache->currentCount = 0;
- pCache->pSyncNode = pSyncNode;
-
- return pCache;
-}
-
-void raftEntryCacheDestroy(SRaftEntryCache* pCache) {
- if (pCache != NULL) {
- taosThreadMutexLock(&pCache->mutex);
- tSkipListDestroy(pCache->pSkipList);
- if (pCache->refMgr != -1) {
- taosCloseRef(pCache->refMgr);
- pCache->refMgr = -1;
- }
- taosThreadMutexUnlock(&pCache->mutex);
- taosThreadMutexDestroy(&(pCache->mutex));
- taosMemoryFree(pCache);
- }
-}
-
-// success, return 1
-// max count, return 0
-// error, return -1
-int32_t raftEntryCachePutEntry(struct SRaftEntryCache* pCache, SSyncRaftEntry* pEntry) {
- taosThreadMutexLock(&pCache->mutex);
-
- if (pCache->currentCount >= pCache->maxCount) {
- taosThreadMutexUnlock(&pCache->mutex);
- return 0;
- }
-
- SSkipListNode* pSkipListNode = tSkipListPut(pCache->pSkipList, pEntry);
- ASSERT(pSkipListNode != NULL);
- ++(pCache->currentCount);
-
- pEntry->rid = taosAddRef(pCache->refMgr, pEntry);
- ASSERT(pEntry->rid >= 0);
-
- sNTrace(pCache->pSyncNode, "raft cache add, type:%s,%d, type2:%s,%d, index:%" PRId64 ", bytes:%d",
- TMSG_INFO(pEntry->msgType), pEntry->msgType, TMSG_INFO(pEntry->originalRpcType), pEntry->originalRpcType,
- pEntry->index, pEntry->bytes);
- taosThreadMutexUnlock(&pCache->mutex);
- return 1;
-}
-
-// find one, return 1
-// not found, return 0
-// error, return -1
-int32_t raftEntryCacheGetEntry(struct SRaftEntryCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry) {
- ASSERT(ppEntry != NULL);
- SSyncRaftEntry* pEntry = NULL;
- int32_t code = raftEntryCacheGetEntryP(pCache, index, &pEntry);
- if (code == 1) {
- int32_t bytes = (int32_t)pEntry->bytes;
- *ppEntry = taosMemoryMalloc((int64_t)bytes);
- memcpy(*ppEntry, pEntry, pEntry->bytes);
- (*ppEntry)->rid = -1;
- } else {
- *ppEntry = NULL;
- }
- return code;
-}
-
-// find one, return 1
-// not found, return 0
-// error, return -1
-int32_t raftEntryCacheGetEntryP(struct SRaftEntryCache* pCache, SyncIndex index, SSyncRaftEntry** ppEntry) {
- taosThreadMutexLock(&pCache->mutex);
-
- SyncIndex index2 = index;
- int32_t code = 0;
-
- SArray* entryPArray = tSkipListGet(pCache->pSkipList, (char*)(&index2));
- int32_t arraySize = taosArrayGetSize(entryPArray);
- if (arraySize == 1) {
- SSkipListNode** ppNode = (SSkipListNode**)taosArrayGet(entryPArray, 0);
- ASSERT(*ppNode != NULL);
- *ppEntry = (SSyncRaftEntry*)SL_GET_NODE_DATA(*ppNode);
- taosAcquireRef(pCache->refMgr, (*ppEntry)->rid);
- code = 1;
-
- } else if (arraySize == 0) {
- code = 0;
-
- } else {
- ASSERT(0);
-
- code = -1;
- }
- taosArrayDestroy(entryPArray);
-
- taosThreadMutexUnlock(&pCache->mutex);
- return code;
-}
-
-// count = -1, clear all
-// count >= 0, clear count
-// return -1, error
-// return delete count
-int32_t raftEntryCacheClear(struct SRaftEntryCache* pCache, int32_t count) {
- taosThreadMutexLock(&pCache->mutex);
- int32_t returnCnt = 0;
-
- if (count == -1) {
- // clear all
- SSkipListIterator* pIter = tSkipListCreateIter(pCache->pSkipList);
- while (tSkipListIterNext(pIter)) {
- SSkipListNode* pNode = tSkipListIterGet(pIter);
- ASSERT(pNode != NULL);
- SSyncRaftEntry* pEntry = (SSyncRaftEntry*)SL_GET_NODE_DATA(pNode);
- syncEntryDestroy(pEntry);
- ++returnCnt;
- }
- tSkipListDestroyIter(pIter);
-
- tSkipListDestroy(pCache->pSkipList);
- pCache->pSkipList =
- tSkipListCreate(MAX_SKIP_LIST_LEVEL, TSDB_DATA_TYPE_BINARY, sizeof(SyncIndex), cmpFn, SL_ALLOW_DUP_KEY, keyFn);
- ASSERT(pCache->pSkipList != NULL);
-
- } else {
- // clear count
- int i = 0;
- SSkipListIterator* pIter = tSkipListCreateIter(pCache->pSkipList);
- SArray* delNodeArray = taosArrayInit(0, sizeof(SSkipListNode*));
-
- // free entry
- while (tSkipListIterNext(pIter)) {
- SSkipListNode* pNode = tSkipListIterGet(pIter);
- ASSERT(pNode != NULL);
- if (i++ >= count) {
- break;
- }
-
- // sDebug("push pNode:%p", pNode);
- taosArrayPush(delNodeArray, &pNode);
- ++returnCnt;
- SSyncRaftEntry* pEntry = (SSyncRaftEntry*)SL_GET_NODE_DATA(pNode);
-
- // syncEntryDestroy(pEntry);
- taosRemoveRef(pCache->refMgr, pEntry->rid);
- }
- tSkipListDestroyIter(pIter);
-
- // delete skiplist node
- int32_t arraySize = taosArrayGetSize(delNodeArray);
- for (int32_t i = 0; i < arraySize; ++i) {
- SSkipListNode** ppNode = taosArrayGet(delNodeArray, i);
- // sDebug("get pNode:%p", *ppNode);
- tSkipListRemoveNode(pCache->pSkipList, *ppNode);
- }
- taosArrayDestroy(delNodeArray);
- }
-
- pCache->currentCount -= returnCnt;
- taosThreadMutexUnlock(&pCache->mutex);
- return returnCnt;
-}
diff --git a/source/libs/sync/src/syncSnapshot.c b/source/libs/sync/src/syncSnapshot.c
index a83a19928e..381327d4d7 100644
--- a/source/libs/sync/src/syncSnapshot.c
+++ b/source/libs/sync/src/syncSnapshot.c
@@ -168,17 +168,19 @@ static int32_t snapshotSend(SSyncSnapshotSender *pSender) {
if (pSender->blockLen > 0) {
// has read data
- sSDebug(pSender, "snapshot sender continue to read, blockLen:%d seq:%d", pSender->blockLen, pSender->seq);
+ sSDebug(pSender, "vgId:%d, snapshot sender continue to read, blockLen:%d seq:%d", pSender->pSyncNode->vgId,
+ pSender->blockLen, pSender->seq);
} else {
// read finish, update seq to end
pSender->seq = SYNC_SNAPSHOT_SEQ_END;
- sSInfo(pSender, "snapshot sender read to the end, blockLen:%d seq:%d", pSender->blockLen, pSender->seq);
+ sSInfo(pSender, "vgId:%d, snapshot sender read to the end, blockLen:%d seq:%d", pSender->pSyncNode->vgId,
+ pSender->blockLen, pSender->seq);
}
// build msg
SRpcMsg rpcMsg = {0};
if (syncBuildSnapshotSend(&rpcMsg, pSender->blockLen, pSender->pSyncNode->vgId) != 0) {
- sSError(pSender, "snapshot sender build msg failed since %s", pSender->pSyncNode->vgId, terrstr());
+ sSError(pSender, "vgId:%d, snapshot sender build msg failed since %s", pSender->pSyncNode->vgId, terrstr());
return -1;
}
@@ -340,11 +342,13 @@ void snapshotReceiverDestroy(SSyncSnapshotReceiver *pReceiver) {
taosMemoryFree(pReceiver);
}
-bool snapshotReceiverIsStart(SSyncSnapshotReceiver *pReceiver) { return pReceiver->start; }
+bool snapshotReceiverIsStart(SSyncSnapshotReceiver *pReceiver) {
+ return (pReceiver != NULL ? pReceiver->start : false);
+}
static int32_t snapshotReceiverStartWriter(SSyncSnapshotReceiver *pReceiver, SyncSnapshotSend *pBeginMsg) {
if (pReceiver->pWriter != NULL) {
- sRError(pReceiver, "vgId:%d, snapshot receiver writer is not null");
+ sRError(pReceiver, "vgId:%d, snapshot receiver writer is not null", pReceiver->pSyncNode->vgId);
terrno = TSDB_CODE_SYN_INTERNAL_ERROR;
return -1;
}
@@ -851,8 +855,8 @@ static int32_t syncNodeOnSnapshotPrepRsp(SSyncNode *pSyncNode, SSyncSnapshotSend
pMsg->snapBeginIndex, snapshot.lastApplyIndex, snapshot.lastApplyTerm);
if (pMsg->snapBeginIndex > snapshot.lastApplyIndex) {
- sSError(pSender, "prepare snapshot failed since beginIndex:%d larger than applyIndex:%d", pMsg->snapBeginIndex,
- snapshot.lastApplyIndex);
+ sSError(pSender, "prepare snapshot failed since beginIndex:%" PRId64 " larger than applyIndex:%" PRId64,
+ pMsg->snapBeginIndex, snapshot.lastApplyIndex);
terrno = TSDB_CODE_SYN_INTERNAL_ERROR;
return -1;
}
@@ -966,7 +970,8 @@ int32_t syncNodeOnSnapshotRsp(SSyncNode *pSyncNode, const SRpcMsg *pRpcMsg) {
if (pSender->pReader == NULL || pSender->finish) {
syncLogRecvSyncSnapshotRsp(pSyncNode, pMsg, "snapshot sender invalid");
- sSError(pSender, "snapshot sender invalid, pReader:%p finish:%d", pMsg->code, pSender->pReader, pSender->finish);
+ sSError(pSender, "snapshot sender invalid error:%s 0x%x, pReader:%p finish:%d", tstrerror(pMsg->code), pMsg->code,
+ pSender->pReader, pSender->finish);
terrno = pMsg->code;
goto _ERROR;
}
diff --git a/source/libs/tfs/src/tfs.c b/source/libs/tfs/src/tfs.c
index bbe8f3eeac..86b36b9b12 100644
--- a/source/libs/tfs/src/tfs.c
+++ b/source/libs/tfs/src/tfs.c
@@ -240,7 +240,7 @@ int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) {
if (tfsMkdirAt(pTfs, rname, diskId) < 0) {
if (errno == ENOENT) {
// Try to create upper
- char *s = strdup(rname);
+ char *s = taosStrdup(rname);
// Make a copy of dirname(s) because the implementation of 'dirname' differs on different platforms.
// Some platform may modify the contents of the string passed into dirname(). Others may return a pointer to
@@ -248,7 +248,7 @@ int32_t tfsMkdirRecurAt(STfs *pTfs, const char *rname, SDiskID diskId) {
// the pointer directly in this recursion.
// See
// https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dirname.3.html
- char *dir = strdup(taosDirName(s));
+ char *dir = taosStrdup(taosDirName(s));
if (tfsMkdirRecurAt(pTfs, dir, diskId) < 0) {
taosMemoryFree(s);
diff --git a/source/libs/tfs/src/tfsDisk.c b/source/libs/tfs/src/tfsDisk.c
index ff40529ab2..3717bf1a6d 100644
--- a/source/libs/tfs/src/tfsDisk.c
+++ b/source/libs/tfs/src/tfsDisk.c
@@ -23,7 +23,7 @@ STfsDisk *tfsNewDisk(int32_t level, int32_t id, const char *path) {
return NULL;
}
- pDisk->path = strdup(path);
+ pDisk->path = taosStrdup(path);
if (pDisk->path == NULL) {
taosMemoryFree(pDisk);
terrno = TSDB_CODE_OUT_OF_MEMORY;
diff --git a/source/libs/transport/src/thttp.c b/source/libs/transport/src/thttp.c
index 8e5f79137f..bab86948fa 100644
--- a/source/libs/transport/src/thttp.c
+++ b/source/libs/transport/src/thttp.c
@@ -298,8 +298,8 @@ int32_t httpSendQuit() {
static int32_t taosSendHttpReportImpl(const char* server, const char* uri, uint16_t port, char* pCont, int32_t contLen,
EHttpCompFlag flag) {
SHttpMsg* msg = taosMemoryMalloc(sizeof(SHttpMsg));
- msg->server = strdup(server);
- msg->uri = strdup(uri);
+ msg->server = taosStrdup(server);
+ msg->uri = taosStrdup(uri);
msg->port = port;
msg->cont = taosMemoryMalloc(contLen);
memcpy(msg->cont, pCont, contLen);
diff --git a/source/libs/transport/src/transCli.c b/source/libs/transport/src/transCli.c
index 7e1aeafaad..6f6e8bcfd4 100644
--- a/source/libs/transport/src/transCli.c
+++ b/source/libs/transport/src/transCli.c
@@ -1014,7 +1014,7 @@ static void cliHandleBatchReq(SCliBatch* pBatch, SCliThrd* pThrd) {
if (conn == NULL) {
conn = cliCreateConn(pThrd);
conn->pBatch = pBatch;
- conn->ip = strdup(pList->dst);
+ conn->ip = taosStrdup(pList->dst);
uint32_t ipaddr = cliGetIpFromFqdnCache(pThrd->fqdn2ipCache, pList->ip);
if (ipaddr == 0xffffffff) {
@@ -1391,7 +1391,7 @@ void cliHandleReq(SCliMsg* pMsg, SCliThrd* pThrd) {
uint16_t port = EPSET_GET_INUSE_PORT(&pCtx->epSet);
CONN_CONSTRUCT_HASH_KEY(key, fqdn, port);
- conn->ip = strdup(key);
+ conn->ip = taosStrdup(key);
uint32_t ipaddr = cliGetIpFromFqdnCache(pThrd->fqdn2ipCache, fqdn);
if (ipaddr == 0xffffffff) {
@@ -1503,8 +1503,8 @@ static void cliBatchDealReq(queue* wq, SCliThrd* pThrd) {
pBatchList->batchLenLimit = pInst->batchSize;
pBatchList->len += 1;
- pBatchList->ip = strdup(ip);
- pBatchList->dst = strdup(key);
+ pBatchList->ip = taosStrdup(ip);
+ pBatchList->dst = taosStrdup(key);
pBatchList->port = port;
SCliBatch* pBatch = taosMemoryCalloc(1, sizeof(SCliBatch));
diff --git a/source/libs/wal/src/walMeta.c b/source/libs/wal/src/walMeta.c
index ee56479a31..cda7e35b0f 100644
--- a/source/libs/wal/src/walMeta.c
+++ b/source/libs/wal/src/walMeta.c
@@ -913,7 +913,7 @@ int walLoadMeta(SWal* pWal) {
int64_t fileSize = 0;
taosStatFile(fnameStr, &fileSize, NULL);
if (fileSize == 0) {
- taosRemoveFile(fnameStr);
+ (void)taosRemoveFile(fnameStr);
wDebug("vgId:%d, wal find empty meta ver %d", pWal->cfg.vgId, metaVer);
return -1;
}
diff --git a/source/libs/wal/src/walWrite.c b/source/libs/wal/src/walWrite.c
index 958e7dc23d..701d8da8c0 100644
--- a/source/libs/wal/src/walWrite.c
+++ b/source/libs/wal/src/walWrite.c
@@ -63,7 +63,7 @@ int32_t walRestoreFromSnapshot(SWal *pWal, int64_t ver) {
wInfo("vgId:%d, restore from snapshot, remove file %s", pWal->cfg.vgId, fnameStr);
}
}
- walRemoveMeta(pWal);
+ (void)walRemoveMeta(pWal);
pWal->writeCur = -1;
pWal->totSize = 0;
diff --git a/source/os/src/osDir.c b/source/os/src/osDir.c
index 331d241745..3d63da7ba3 100644
--- a/source/os/src/osDir.c
+++ b/source/os/src/osDir.c
@@ -89,6 +89,8 @@ typedef struct dirent TdDirEntry;
#endif
+#define TDDIRMAXLEN 1024
+
void taosRemoveDir(const char *dirname) {
TdDirPtr pDir = taosOpenDir(dirname);
if (pDir == NULL) return;
@@ -133,8 +135,8 @@ int32_t taosMkDir(const char *dirname) {
}
int32_t taosMulMkDir(const char *dirname) {
- if (dirname == NULL) return -1;
- char temp[1024];
+ if (dirname == NULL || strlen(dirname) >= TDDIRMAXLEN) return -1;
+ char temp[TDDIRMAXLEN];
char *pos = temp;
int32_t code = 0;
#ifdef WINDOWS
@@ -192,8 +194,8 @@ int32_t taosMulMkDir(const char *dirname) {
}
int32_t taosMulModeMkDir(const char *dirname, int mode) {
- if (dirname == NULL) return -1;
- char temp[1024];
+ if (dirname == NULL || strlen(dirname) >= TDDIRMAXLEN) return -1;
+ char temp[TDDIRMAXLEN];
char *pos = temp;
int32_t code = 0;
#ifdef WINDOWS
@@ -204,8 +206,7 @@ int32_t taosMulModeMkDir(const char *dirname, int mode) {
#endif
if (taosDirExist(temp)) {
- chmod(temp, mode);
- return code;
+ return chmod(temp, mode);
}
if (strncmp(temp, TD_DIRSEP, 1) == 0) {
@@ -247,12 +248,10 @@ int32_t taosMulModeMkDir(const char *dirname, int mode) {
}
if (code < 0 && errno == EEXIST) {
- chmod(temp, mode);
- return 0;
+ return chmod(temp, mode);
}
- chmod(temp, mode);
- return code;
+ return chmod(temp, mode);
}
void taosRemoveOldFiles(const char *dirname, int32_t keepDays) {
diff --git a/source/os/src/osFile.c b/source/os/src/osFile.c
index 8cc9885adb..aab547223f 100644
--- a/source/os/src/osFile.c
+++ b/source/os/src/osFile.c
@@ -132,15 +132,20 @@ int64_t taosCopyFile(const char *from, const char *to) {
if (bytes < sizeof(buffer)) break;
}
- taosFsyncFile(pFileTo);
+ int code = taosFsyncFile(pFileTo);
taosCloseFile(&pFileFrom);
taosCloseFile(&pFileTo);
+
+ if (code != 0) {
+ return -1;
+ }
return size;
_err:
if (pFileFrom != NULL) taosCloseFile(&pFileFrom);
if (pFileTo != NULL) taosCloseFile(&pFileTo);
+ /* coverity[+retval] */
taosRemoveFile(to);
return -1;
#endif
@@ -151,7 +156,7 @@ TdFilePtr taosCreateFile(const char *path, int32_t tdFileOptions) {
if (!fp) {
if (errno == ENOENT) {
// Try to create directory recursively
- char *s = strdup(path);
+ char *s = taosStrdup(path);
if (taosMulMkDir(taosDirName(s)) != 0) {
taosMemoryFree(s);
return NULL;
@@ -506,13 +511,13 @@ int64_t taosPWriteFile(TdFilePtr pFile, const void *buf, int64_t count, int64_t
}
int64_t taosLSeekFile(TdFilePtr pFile, int64_t offset, int32_t whence) {
+ if (pFile == NULL || pFile->fd < 0) {
+ return -1;
+ }
#if FILE_WITH_LOCK
taosThreadRwlockRdlock(&(pFile->rwlock));
#endif
ASSERT(pFile->fd >= 0); // Please check if you have closed the file.
- if (pFile->fd < 0) {
- return -1;
- }
#ifdef WINDOWS
int64_t ret = _lseeki64(pFile->fd, offset, whence);
#else
diff --git a/source/os/src/osLocale.c b/source/os/src/osLocale.c
index b4a2845e96..7008c38576 100644
--- a/source/os/src/osLocale.c
+++ b/source/os/src/osLocale.c
@@ -59,11 +59,11 @@ char *taosCharsetReplace(char *charsetstr) {
for (int32_t i = 0; i < tListLen(charsetRep); ++i) {
if (strcasecmp(charsetRep[i].oldCharset, charsetstr) == 0) {
- return strdup(charsetRep[i].newCharset);
+ return taosStrdup(charsetRep[i].newCharset);
}
}
- return strdup(charsetstr);
+ return taosStrdup(charsetstr);
}
/**
diff --git a/source/os/src/osMemory.c b/source/os/src/osMemory.c
index c641d893a1..1ae4afe0e0 100644
--- a/source/os/src/osMemory.c
+++ b/source/os/src/osMemory.c
@@ -312,15 +312,15 @@ void *taosMemoryRealloc(void *ptr, int64_t size) {
#endif
}
-void *taosMemoryStrDup(const char *ptr) {
+char *taosStrdup(const char *ptr) {
#ifdef USE_TD_MEMORY
if (ptr == NULL) return NULL;
TdMemoryInfoPtr pTdMemoryInfo = (TdMemoryInfoPtr)((char *)ptr - sizeof(TdMemoryInfo));
ASSERT(pTdMemoryInfo->symbol == TD_MEMORY_SYMBOL);
if (pTdMemoryInfo->symbol != TD_MEMORY_SYMBOL) {
-+ return NULL;
-+ }
+ return NULL;
+ }
void *tmp = tstrdup(pTdMemoryInfo);
if (tmp == NULL) return NULL;
diff --git a/source/os/src/osSocket.c b/source/os/src/osSocket.c
index fac547ca99..7d2c8aa4e5 100644
--- a/source/os/src/osSocket.c
+++ b/source/os/src/osSocket.c
@@ -745,8 +745,10 @@ bool taosValidIpAndPort(uint32_t ip, uint16_t port) {
#endif
serverAdd.sin_port = (uint16_t)htons(port);
- if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 2) {
- // printf("failed to open TCP socket: %d (%s)", errno, strerror(errno));
+ fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ if (fd < 0) { // exception
+ return false;
+ } else if (fd <= 2) { // in, out, err
taosCloseSocketNoCheck1(fd);
return false;
}
diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c
index 6471dad033..52309a7b35 100644
--- a/source/os/src/osSysinfo.c
+++ b/source/os/src/osSysinfo.c
@@ -439,11 +439,14 @@ int32_t taosGetCpuInfo(char *cpuModel, int32_t maxLen, float *numOfCores) {
if (code != 0 && (done & 1) == 0) {
TdFilePtr pFile1 = taosOpenFile("/proc/device-tree/model", TD_FILE_READ | TD_FILE_STREAM);
- if (pFile1 == NULL) return code;
- taosGetsFile(pFile1, maxLen, cpuModel);
- taosCloseFile(&pFile1);
- code = 0;
- done |= 1;
+ if (pFile1 != NULL) {
+ ssize_t bytes = taosGetsFile(pFile1, maxLen, cpuModel);
+ taosCloseFile(&pFile);
+ if (bytes > 0) {
+ code = 0;
+ done |= 1;
+ }
+ }
}
if (code != 0 && (done & 1) == 0) {
@@ -498,7 +501,7 @@ void taosGetCpuUsage(double *cpu_system, double *cpu_engine) {
curSysTotal = curSysUsed + sysCpu.idle;
curProcTotal = procCpu.utime + procCpu.stime + procCpu.cutime + procCpu.cstime;
- if (curSysTotal > lastSysTotal && curSysUsed >= lastSysUsed && curProcTotal >= lastProcTotal) {
+ if (curSysTotal - lastSysTotal > 0 && curSysUsed >= lastSysUsed && curProcTotal >= lastProcTotal) {
if (cpu_system != NULL) {
*cpu_system = (curSysUsed - lastSysUsed) / (double)(curSysTotal - lastSysTotal) * 100;
}
@@ -610,12 +613,6 @@ int32_t taosGetProcMemory(int64_t *usedKB) {
}
}
- if (strlen(line) < 0) {
- // printf("read file:%s failed", tsProcMemFile);
- taosCloseFile(&pFile);
- return -1;
- }
-
char tmp[10];
sscanf(line, "%s %" PRId64, tmp, usedKB);
diff --git a/source/os/src/osTimezone.c b/source/os/src/osTimezone.c
index ab5600744c..ad223bff27 100644
--- a/source/os/src/osTimezone.c
+++ b/source/os/src/osTimezone.c
@@ -909,7 +909,7 @@ void taosGetSystemTimezone(char *outTimezoneStr, enum TdTimezone *tsTimezone) {
char buf[4096] = {0};
char *tz = NULL;
{
- int n = readlink("/etc/localtime", buf, sizeof(buf));
+ int n = readlink("/etc/localtime", buf, sizeof(buf)-1);
if (n < 0) {
printf("read /etc/localtime error, reason:%s", strerror(errno));
diff --git a/source/util/src/tcache.c b/source/util/src/tcache.c
index 761da6986b..1d480e7beb 100644
--- a/source/util/src/tcache.c
+++ b/source/util/src/tcache.c
@@ -391,7 +391,7 @@ SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInMs, bool extendLi
return NULL;
}
- pCacheObj->name = strdup(cacheName);
+ pCacheObj->name = taosStrdup(cacheName);
doRegisterCacheObj(pCacheObj);
return pCacheObj;
}
diff --git a/source/util/src/tconfig.c b/source/util/src/tconfig.c
index 609a386367..c15bd96903 100644
--- a/source/util/src/tconfig.c
+++ b/source/util/src/tconfig.c
@@ -109,7 +109,7 @@ int32_t cfgGetSize(SConfig *pCfg) { return taosArrayGetSize(pCfg->array); }
static int32_t cfgCheckAndSetTimezone(SConfigItem *pItem, const char *timezone) {
cfgFreeItem(pItem);
- pItem->str = strdup(timezone);
+ pItem->str = taosStrdup(timezone);
if (pItem->str == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -120,7 +120,7 @@ static int32_t cfgCheckAndSetTimezone(SConfigItem *pItem, const char *timezone)
static int32_t cfgCheckAndSetCharset(SConfigItem *pItem, const char *charset) {
cfgFreeItem(pItem);
- pItem->str = strdup(charset);
+ pItem->str = taosStrdup(charset);
if (pItem->str == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -131,7 +131,7 @@ static int32_t cfgCheckAndSetCharset(SConfigItem *pItem, const char *charset) {
static int32_t cfgCheckAndSetLocale(SConfigItem *pItem, const char *locale) {
cfgFreeItem(pItem);
- pItem->str = strdup(locale);
+ pItem->str = taosStrdup(locale);
if (pItem->str == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -149,7 +149,7 @@ static int32_t cfgCheckAndSetDir(SConfigItem *pItem, const char *inputDir) {
}
taosMemoryFreeClear(pItem->str);
- pItem->str = strdup(fullDir);
+ pItem->str = taosStrdup(fullDir);
if (pItem->str == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -215,7 +215,7 @@ static int32_t cfgSetFloat(SConfigItem *pItem, const char *value, ECfgSrcType st
}
static int32_t cfgSetString(SConfigItem *pItem, const char *value, ECfgSrcType stype) {
- char *tmp = strdup(value);
+ char *tmp = taosStrdup(value);
if (tmp == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
uError("cfg:%s, type:%s src:%s value:%s failed to dup since %s", pItem->name, cfgDtypeStr(pItem->dtype),
@@ -358,7 +358,7 @@ SConfigItem *cfgGetItem(SConfig *pCfg, const char *name) {
static int32_t cfgAddItem(SConfig *pCfg, SConfigItem *pItem, const char *name) {
pItem->stype = CFG_STYPE_DEFAULT;
- pItem->name = strdup(name);
+ pItem->name = taosStrdup(name);
if (pItem->name == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
@@ -417,7 +417,7 @@ int32_t cfgAddFloat(SConfig *pCfg, const char *name, float defaultVal, double mi
int32_t cfgAddString(SConfig *pCfg, const char *name, const char *defaultVal, bool tsc) {
SConfigItem item = {.dtype = CFG_DTYPE_STRING, .tsc = tsc};
- item.str = strdup(defaultVal);
+ item.str = taosStrdup(defaultVal);
if (item.str == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
return -1;
diff --git a/source/util/src/tjson.c b/source/util/src/tjson.c
index 27d14d05b1..cf740995ea 100644
--- a/source/util/src/tjson.c
+++ b/source/util/src/tjson.c
@@ -192,7 +192,7 @@ int32_t tjsonDupStringValue(const SJson* pJson, const char* pName, char** pVal)
if (NULL == p) {
return TSDB_CODE_SUCCESS;
}
- *pVal = strdup(p);
+ *pVal = taosStrdup(p);
return TSDB_CODE_SUCCESS;
}
diff --git a/source/util/src/tpagedbuf.c b/source/util/src/tpagedbuf.c
index 6bcf4ad39b..fa8b5d33b7 100644
--- a/source/util/src/tpagedbuf.c
+++ b/source/util/src/tpagedbuf.c
@@ -55,7 +55,7 @@ static int32_t createDiskFile(SDiskbasedBuf* pBuf) {
if (pBuf->path == NULL) { // prepare the file name when needed it
char path[PATH_MAX] = {0};
taosGetTmpfilePath(pBuf->prefix, "paged-buf", path);
- pBuf->path = taosMemoryStrDup(path);
+ pBuf->path = taosStrdup(path);
if (pBuf->path == NULL) {
return TSDB_CODE_OUT_OF_MEMORY;
}
@@ -351,7 +351,7 @@ int32_t createDiskbasedBuf(SDiskbasedBuf** pBuf, int32_t pagesize, int32_t inMem
pPBuf->totalBufSize = 0;
pPBuf->allocateId = -1;
pPBuf->pFile = NULL;
- pPBuf->id = strdup(id);
+ pPBuf->id = taosStrdup(id);
pPBuf->fileSize = 0;
pPBuf->pFree = taosArrayInit(4, sizeof(SFreeListItem));
pPBuf->freePgList = tdListNew(POINTER_BYTES);
@@ -391,7 +391,7 @@ _error:
return TSDB_CODE_OUT_OF_MEMORY;
}
-static char* doExtractPage(SDiskbasedBuf* pBuf) {
+static char* doExtractPage(SDiskbasedBuf* pBuf, bool* newPage) {
char* availablePage = NULL;
if (NO_IN_MEM_AVAILABLE_PAGES(pBuf)) {
availablePage = evictBufPage(pBuf);
@@ -405,6 +405,7 @@ static char* doExtractPage(SDiskbasedBuf* pBuf) {
if (availablePage == NULL) {
terrno = TSDB_CODE_OUT_OF_MEMORY;
}
+ *newPage = true;
}
return availablePage;
@@ -413,7 +414,8 @@ static char* doExtractPage(SDiskbasedBuf* pBuf) {
void* getNewBufPage(SDiskbasedBuf* pBuf, int32_t* pageId) {
pBuf->statis.getPages += 1;
- char* availablePage = doExtractPage(pBuf);
+ bool newPage = false;
+ char* availablePage = doExtractPage(pBuf, &newPage);
if (availablePage == NULL) {
return NULL;
}
@@ -432,6 +434,9 @@ void* getNewBufPage(SDiskbasedBuf* pBuf, int32_t* pageId) {
// register page id info
pi = registerNewPageInfo(pBuf, *pageId);
if (pi == NULL) {
+ if (newPage) {
+ taosMemoryFree(availablePage);
+ }
return NULL;
}
@@ -492,7 +497,8 @@ void* getBufPage(SDiskbasedBuf* pBuf, int32_t id) {
ASSERT((!BUF_PAGE_IN_MEM(*pi)) && (*pi)->pn == NULL &&
(((*pi)->length >= 0 && (*pi)->offset >= 0) || ((*pi)->length == -1 && (*pi)->offset == -1)));
- (*pi)->pData = doExtractPage(pBuf);
+ bool newPage = false;
+ (*pi)->pData = doExtractPage(pBuf, &newPage);
// failed to evict buffer page, return with error code.
if ((*pi)->pData == NULL) {
@@ -509,6 +515,10 @@ void* getBufPage(SDiskbasedBuf* pBuf, int32_t id) {
if (HAS_DATA_IN_DISK(*pi)) {
int32_t code = loadPageFromDisk(pBuf, *pi);
if (code != 0) {
+ if (newPage) {
+ taosMemoryFree((*pi)->pData);
+ }
+
terrno = code;
return NULL;
}
diff --git a/source/util/src/tutil.c b/source/util/src/tutil.c
index 55d7d4f6e7..1f9ca7407e 100644
--- a/source/util/src/tutil.c
+++ b/source/util/src/tutil.c
@@ -118,7 +118,7 @@ char **strsplit(char *z, const char *delim, int32_t *num) {
if ((*num) >= size) {
size = (size << 1);
split = taosMemoryRealloc(split, POINTER_BYTES * size);
- ASSERTS(NULL != split, "realloc memory failed. size=%d", POINTER_BYTES * size);
+ ASSERTS(NULL != split, "realloc memory failed. size=%d", (int32_t) POINTER_BYTES * size);
}
}
diff --git a/tests/script/sh/checkAsan.sh b/tests/script/sh/checkAsan.sh
index 20d1359da8..8d58ff9135 100755
--- a/tests/script/sh/checkAsan.sh
+++ b/tests/script/sh/checkAsan.sh
@@ -54,7 +54,7 @@ python_error=`cat ${LOG_DIR}/*.info | grep -w "stack" | wc -l`
# /home/chr/TDengine/source/libs/scalar/src/filter.c:3149:14: runtime error: applying non-zero offset 18446744073709551615 to null pointer
# /home/TDinternal/community/source/libs/scalar/src/sclvector.c:1109:66: runtime error: signed integer overflow: 9223372034707292160 + 1676867897049 cannot be represented in type 'long int'
-runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type"| grep -v "signed integer overflow" |grep -v "strerror.c"| grep -v "asan_malloc_linux.cc" |grep -v "filter.c:3149:14" |wc -l`
+runtime_error=`cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type"| grep -v "signed integer overflow" |grep -v "strerror.c"| grep -v "asan_malloc_linux.cc" |wc -l`
echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m"
echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m"
diff --git a/tests/script/tsim/stream/checkStreamSTable.sim b/tests/script/tsim/stream/checkStreamSTable.sim
index fda78af621..288dd35cfe 100644
--- a/tests/script/tsim/stream/checkStreamSTable.sim
+++ b/tests/script/tsim/stream/checkStreamSTable.sim
@@ -301,7 +301,7 @@ print $data00, $data01, $data02, $data03
print $data10, $data11, $data12, $data13
print $data20, $data21, $data22, $data23
-loop2:
+loop3:
sleep 300
@@ -317,47 +317,182 @@ if $rows != 2 then
print $data00, $data01, $data02, $data03
print $data10, $data11, $data12, $data13
print $data20, $data21, $data22, $data23
- goto loop2
+ goto loop3
endi
if $data01 != 10 then
print =====data01=$data01
- goto loop2
+ goto loop3
endi
if $data02 != 20 then
print =====data02=$data02
- goto loop2
+ goto loop3
endi
if $data03 != 1 then
print =====data03=$data03
- goto loop2
+ goto loop3
endi
if $data04 != NULL then
print =====data04=$data04
- goto loop2
+ goto loop3
endi
if $data11 != 40 then
print =====data11=$data11
- goto loop2
+ goto loop3
endi
if $data12 != 50 then
print =====data12=$data12
- goto loop2
+ goto loop3
endi
if $data13 != 1 then
print =====data13=$data13
- goto loop2
+ goto loop3
endi
if $data14 != NULL then
print =====data14=$data14
- goto loop2
+ goto loop3
+endi
+
+print ===== step7
+
+sql create database result5 vgroups 1;
+
+sql create database test5 vgroups 4;
+sql use test5;
+
+sql create stable st(ts timestamp,a int,b int,c int) tags(ta int,tb int,tc int);
+sql create table t1 using st tags(1,2,3);
+sql create table t2 using st tags(4,5,6);
+
+sql create stable result5.streamt5(ts timestamp,a int,b int,c int, d int) tags(tg1 int,tg2 int,tg3 int);
+
+sql create stream streams5 trigger at_once into result5.streamt5(ts,c,a,b) tags(tg2, tg3, tg1) subtable( concat("tbl-", cast(tg3 as varchar(10)) ) ) as select _wstart, count(*) c1, max(a),min(b) c2 from st partition by ta+1 as tg1, cast(tb as bigint) as tg2, a as tg3 session(ts, 10s);
+
+sql insert into t1 values(1648791213000,NULL,NULL,NULL);
+
+$loop_count = 0
+
+print select _wstart, count(*) c1, max(a),min(b) c2 from st partition by ta+1 as tg1, cast(tb as bigint) as tg2, a as tg3 session(ts, 10s);
+sql select _wstart, count(*) c1, max(a),min(b) c2 from st partition by ta+1 as tg1, cast(tb as bigint) as tg2, a as tg3 session(ts, 10s);
+print $data00, $data01, $data02, $data03
+print $data10, $data11, $data12, $data13
+print $data20, $data21, $data22, $data23
+
+loop4:
+
+sleep 300
+
+$loop_count = $loop_count + 1
+if $loop_count == 10 then
+ return -1
+endi
+
+print sql select * from result5.streamt5 order by tg1;
+sql select * from result5.streamt5 order by tg1;
+print $data00, $data01, $data02, $data03 $data04 $data05 $data06 $data07
+print $data10, $data11, $data12, $data13
+print $data20, $data21, $data22, $data23
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop4
+endi
+
+if $data01 != NULL then
+ print =====data01=$data01
+ goto loop4
+endi
+
+if $data02 != NULL then
+ print =====data02=$data02
+ goto loop4
+endi
+
+if $data03 != 1 then
+ print =====data03=$data03
+ goto loop4
+endi
+
+if $data04 != NULL then
+ print =====data04=$data04
+ goto loop4
+endi
+
+if $data05 != 2 then
+ print =====data05=$data05
+ goto loop4
+endi
+
+if $data06 != 2 then
+ print =====data06=$data06
+ goto loop4
+endi
+
+if $data07 != NULL then
+ print =====data07=$data07
+ goto loop4
+endi
+
+sql drop stream if exists streams4;
+sql drop stream if exists streams5;
+sql drop database if exists test4;
+sql drop database if exists test5;
+sql drop database if exists result4;
+sql drop database if exists result5;
+
+print ===== step8
+
+sql drop stream if exists streams8;
+sql drop database if exists test8;
+sql create database test8 vgroups 1;
+sql use test8;
+sql create table t1(ts timestamp, a int, b int , c int, d double);
+sql create stream streams8 trigger at_once into streamt8 as select _wstart as ts, count(*) c1, count(d) c2, count(c) c3 from t1 partition by tbname interval(10s) ;
+
+sql drop stream streams8;
+sql create stream streams71 trigger at_once into streamt8(ts, c2) tags(group_id)as select _wstart, count(*) from t1 partition by tbname as group_id interval(10s);
+
+sql insert into t1 values(1648791233000,1,2,3,1.0);
+
+loop8:
+
+sleep 300
+
+$loop_count = $loop_count + 1
+if $loop_count == 10 then
+ return -1
+endi
+
+sql select * from streamt8;
+print $data00, $data01, $data02, $data03
+print $data10, $data11, $data12, $data13
+print $data20, $data21, $data22, $data23
+
+if $rows != 1 then
+ print =====rows=$rows
+ goto loop8
+endi
+
+if $data01 != NULL then
+ print =====data01=$data01
+ goto loop8
+endi
+
+if $data02 != 1 then
+ print =====data02=$data02
+ goto loop8
+endi
+
+if $data03 != NULL then
+ print =====data03=$data03
+ goto loop8
endi
print ======over
diff --git a/tests/script/tsim/stream/udTableAndTag0.sim b/tests/script/tsim/stream/udTableAndTag0.sim
index bfc299df0f..8bf34dc54c 100644
--- a/tests/script/tsim/stream/udTableAndTag0.sim
+++ b/tests/script/tsim/stream/udTableAndTag0.sim
@@ -39,7 +39,10 @@ sql select table_name from information_schema.ins_tables where db_name="result"
if $rows != 2 then
print =====rows=$rows
- print $data00 $data10
+ print $data00
+ print $data10
+ print $data20
+ print $data30
goto loop0
endi
diff --git a/tests/system-test/0-others/taosShell.py b/tests/system-test/0-others/taosShell.py
index 5c7bb0443a..1227378799 100644
--- a/tests/system-test/0-others/taosShell.py
+++ b/tests/system-test/0-others/taosShell.py
@@ -373,7 +373,7 @@ class TDTestCase:
version = 'version: ' + version
retVal = retVal.replace("\n", "")
retVal = retVal.replace("\r", "")
- if retVal != version:
+ if retVal.startswith(version) == False:
print ("return version: [%s]"%retVal)
print ("dict version: [%s]"%version)
tdLog.exit("taos -V version not match")
diff --git a/tests/system-test/7-tmq/subscribeDb4.py b/tests/system-test/7-tmq/subscribeDb4.py
index 7f5169361c..c14d3b27b1 100644
--- a/tests/system-test/7-tmq/subscribeDb4.py
+++ b/tests/system-test/7-tmq/subscribeDb4.py
@@ -31,7 +31,8 @@ class TDTestCase:
'startTs': 1640966400000, # 2022-01-01 00:00:00.000
'pollDelay': 20,
'showMsg': 1,
- 'showRow': 1}
+ 'showRow': 1,
+ 'snapshot': 1}
cdbName = 'cdb'
# some parameter to consumer processor
@@ -42,7 +43,7 @@ class TDTestCase:
ifManualCommit = 1
groupId = 'group.id:cgrp1'
autoCommit = 'enable.auto.commit:true'
- autoCommitInterval = 'auto.commit.interval.ms:1000'
+ autoCommitInterval = 'auto.commit.interval.ms:100'
autoOffset = 'auto.offset.reset:earliest'
pollDelay = 20
@@ -86,7 +87,7 @@ class TDTestCase:
tmqCom.insertConsumerInfo(self.consumerId, self.expectrowcnt,topicList,keyList,self.ifcheckdata,self.ifManualCommit)
tdLog.info("start consume processor")
- tmqCom.startTmqSimProcess(self.pollDelay,self.paraDict["dbName"],self.showMsg, self.showRow,self.cdbName)
+ tmqCom.startTmqSimProcess(self.pollDelay,self.paraDict["dbName"],self.showMsg, self.showRow,self.cdbName,0,0,self.paraDict["snapshot"])
tdLog.info("After waiting for a commit notify, drop one stable")
#time.sleep(3)
diff --git a/tests/system-test/7-tmq/tmqCommon.py b/tests/system-test/7-tmq/tmqCommon.py
index 4cda062401..895da95e5d 100644
--- a/tests/system-test/7-tmq/tmqCommon.py
+++ b/tests/system-test/7-tmq/tmqCommon.py
@@ -151,7 +151,7 @@ class TMQCom:
if tdSql.getData(i, 1) == 0:
loopFlag = 0
break
- time.sleep(0.1)
+ time.sleep(0.02)
return
def getStartCommitNotifyFromTmqsim(self,cdbName='cdb',rows=2):
@@ -165,7 +165,7 @@ class TMQCom:
if tdSql.getData(i, 1) == 1:
loopFlag = 0
break
- time.sleep(0.1)
+ time.sleep(0.02)
return
def create_database(self,tsql, dbName,dropFlag=1,vgroups=4,replica=1):
diff --git a/tools/shell/inc/shellInt.h b/tools/shell/inc/shellInt.h
index 1fe09f5863..113853bd83 100644
--- a/tools/shell/inc/shellInt.h
+++ b/tools/shell/inc/shellInt.h
@@ -86,7 +86,7 @@ typedef struct {
const char* promptContinue;
const char* osname;
int32_t promptSize;
- char programVersion[32];
+ char programVersion[256];
} SShellOsDetails;
typedef struct {
diff --git a/tools/shell/src/shellArguments.c b/tools/shell/src/shellArguments.c
index 0612c2f455..19275cce82 100644
--- a/tools/shell/src/shellArguments.c
+++ b/tools/shell/src/shellArguments.c
@@ -413,7 +413,9 @@ int32_t shellParseArgs(int32_t argc, char *argv[]) {
sprintf(shell.info.promptHeader, "%s> ", cusPrompt);
shell.info.promptContinue = TAOS_CONSOLE_PROMPT_CONTINUE;
shell.info.promptSize = strlen(shell.info.promptHeader);
- snprintf(shell.info.programVersion, sizeof(shell.info.programVersion), "version: %s", version);
+ snprintf(shell.info.programVersion, sizeof(shell.info.programVersion),
+ "version: %s compatible_version: %s\ngitinfo: %s\nbuildInfo: %s", version, compatible_version, gitinfo,
+ buildinfo);
#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32)
shell.info.osname = "Windows";
diff --git a/tools/shell/src/shellAuto.c b/tools/shell/src/shellAuto.c
index 72386ba688..1d872e3f0d 100644
--- a/tools/shell/src/shellAuto.c
+++ b/tools/shell/src/shellAuto.c
@@ -911,7 +911,7 @@ char* matchNextPrefix(STire* tire, char* pre) {
if (cursorVar == -1) {
// first
cursorVar = 0;
- return strdup(match->head->word);
+ return taosStrdup(match->head->word);
}
// according to cursorVar , calculate next one
@@ -927,7 +927,7 @@ char* matchNextPrefix(STire* tire, char* pre) {
cursorVar = i;
}
- return strdup(item->word);
+ return taosStrdup(item->word);
}
// check end item
@@ -935,7 +935,7 @@ char* matchNextPrefix(STire* tire, char* pre) {
// if cursorVar > var list count, return last and reset cursorVar
cursorVar = -1;
- return strdup(item->word);
+ return taosStrdup(item->word);
}
// move next
@@ -1536,7 +1536,7 @@ bool matchSelectQuery(TAOS* con, SShellCmd* cmd) {
// if is input create fields or tags area, return true
bool isCreateFieldsArea(char* p) {
// put to while, support like create table st(ts timestamp, bin1 binary(16), bin2 + blank + TAB
- char* p1 = strdup(p);
+ char* p1 = taosStrdup(p);
bool ret = false;
while (1) {
char* left = strrchr(p1, '(');
diff --git a/tools/shell/src/shellEngine.c b/tools/shell/src/shellEngine.c
index 54d31cdb74..655fef383e 100644
--- a/tools/shell/src/shellEngine.c
+++ b/tools/shell/src/shellEngine.c
@@ -127,7 +127,7 @@ void shellRecordCommandToHistory(char *command) {
if (pHistory->hist[pHistory->hend] != NULL) {
taosMemoryFreeClear(pHistory->hist[pHistory->hend]);
}
- pHistory->hist[pHistory->hend] = strdup(command);
+ pHistory->hist[pHistory->hend] = taosStrdup(command);
pHistory->hend = (pHistory->hend + 1) % SHELL_MAX_HISTORY_SIZE;
if (pHistory->hend == pHistory->hstart) {
@@ -821,7 +821,7 @@ void shellReadHistory() {
while ((read_size = taosGetsFile(pFile, TSDB_MAX_ALLOWED_SQL_LEN, line)) != -1) {
line[read_size - 1] = '\0';
taosMemoryFree(pHistory->hist[pHistory->hend]);
- pHistory->hist[pHistory->hend] = strdup(line);
+ pHistory->hist[pHistory->hend] = taosStrdup(line);
pHistory->hend = (pHistory->hend + 1) % SHELL_MAX_HISTORY_SIZE;
@@ -845,6 +845,8 @@ void shellReadHistory() {
i = (i + SHELL_MAX_HISTORY_SIZE - 1) % SHELL_MAX_HISTORY_SIZE;
}
taosFprintfFile(pFile, "%s\n", pHistory->hist[endIndex]);
+
+ /* coverity[+retval] */
taosFsyncFile(pFile);
taosCloseFile(&pFile);
}
@@ -1105,7 +1107,7 @@ int32_t shellExecute() {
if (runOnce) {
if (pArgs->commands != NULL) {
printf("%s%s\r\n", shell.info.promptHeader, pArgs->commands);
- char *cmd = strdup(pArgs->commands);
+ char *cmd = taosStrdup(pArgs->commands);
shellRunCommand(cmd, true);
taosMemoryFree(cmd);
}
diff --git a/tools/shell/src/shellTire.c b/tools/shell/src/shellTire.c
index 0ce0588cce..a8726f3126 100644
--- a/tools/shell/src/shellTire.c
+++ b/tools/shell/src/shellTire.c
@@ -75,7 +75,7 @@ void freeTire(STire* tire) {
// insert a new word to list
bool insertToList(STire* tire, char* word) {
StrName* p = (StrName*)taosMemoryMalloc(sizeof(StrName));
- p->name = strdup(word);
+ p->name = taosStrdup(word);
p->next = NULL;
if (tire->head == NULL) {
@@ -218,7 +218,7 @@ void addWordToMatch(SMatch* match, char* word) {
// malloc new
SMatchNode* node = (SMatchNode*)taosMemoryMalloc(sizeof(SMatchNode));
memset(node, 0, sizeof(SMatchNode));
- node->word = strdup(word);
+ node->word = taosStrdup(word);
// append to match
if (match->head == NULL) {
diff --git a/utils/test/c/tmqSim.c b/utils/test/c/tmqSim.c
index 9c1dc2e063..8f7768635b 100644
--- a/utils/test/c/tmqSim.c
+++ b/utils/test/c/tmqSim.c
@@ -1381,7 +1381,7 @@ void startOmbConsume() {
printf("SQL: %s\n", sql);
queryDbExec(taos, sql, NO_INSERT_TYPE);
- int32_t producerRate = ceil(g_stConfInfo.producerRate / g_stConfInfo.producers);
+ int32_t producerRate = ceil(((double)g_stConfInfo.producerRate) / g_stConfInfo.producers);
printf("==== create %d produce thread ====\n", g_stConfInfo.producers);
for (int32_t i = 0; i < g_stConfInfo.producers; ++i) {
diff --git a/utils/test/c/tmq_taosx_ci.c b/utils/test/c/tmq_taosx_ci.c
index fb05ae262b..3d458d90c1 100644
--- a/utils/test/c/tmq_taosx_ci.c
+++ b/utils/test/c/tmq_taosx_ci.c
@@ -21,20 +21,20 @@
#include "taos.h"
#include "types.h"
-static int running = 1;
-TdFilePtr g_fp = NULL;
-typedef struct{
+static int running = 1;
+TdFilePtr g_fp = NULL;
+typedef struct {
bool snapShot;
bool dropTable;
bool subTable;
int srcVgroups;
int dstVgroups;
char dir[64];
-}Config;
+} Config;
Config g_conf = {0};
-static TAOS* use_db(){
+static TAOS* use_db() {
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
if (pConn == NULL) {
return NULL;
@@ -53,12 +53,12 @@ static void msg_process(TAOS_RES* msg) {
printf("-----------topic-------------: %s\n", tmq_get_topic_name(msg));
printf("db: %s\n", tmq_get_db_name(msg));
printf("vg: %d\n", tmq_get_vgroup_id(msg));
- TAOS *pConn = use_db();
+ TAOS* pConn = use_db();
if (tmq_get_res_type(msg) == TMQ_RES_TABLE_META || tmq_get_res_type(msg) == TMQ_RES_METADATA) {
char* result = tmq_get_json_meta(msg);
if (result) {
printf("meta result: %s\n", result);
- if(g_fp && strcmp(result, "") != 0){
+ if (g_fp && strcmp(result, "") != 0) {
taosFprintfFile(g_fp, result);
taosFprintfFile(g_fp, "\n");
}
@@ -77,24 +77,23 @@ static void msg_process(TAOS_RES* msg) {
taos_close(pConn);
}
-int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
-
+int buildDatabase(TAOS* pConn, TAOS_RES* pRes) {
/* test for TD-20612 start*/
- pRes = taos_query(pConn,"create table tb1 (ts timestamp, c1 int, c2 int)");
+ pRes = taos_query(pConn, "create table tb1 (ts timestamp, c1 int, c2 int)");
if (taos_errno(pRes) != 0) {
printf("failed to create super table st1, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
- pRes = taos_query(pConn,"insert into tb1 (ts, c1) values(1669092069069, 0)");
+ pRes = taos_query(pConn, "insert into tb1 (ts, c1) values(1669092069069, 0)");
if (taos_errno(pRes) != 0) {
printf("failed to create super table st1, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
- pRes = taos_query(pConn,"insert into tb1 (ts, c2) values(1669092069069, 1)");
+ pRes = taos_query(pConn, "insert into tb1 (ts, c2) values(1669092069069, 1)");
if (taos_errno(pRes) != 0) {
printf("failed to create super table st1, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -154,7 +153,10 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- pRes = taos_query(pConn, "insert into ct3 values(1626006833600, 5, 6, 'c') ct1 values(1626006833601, 2, 3, 'sds') (1626006833602, 4, 5, 'ddd') ct0 values(1626006833603, 4, 3, 'hwj') ct1 values(now+5s, 23, 32, 's21ds')");
+ pRes = taos_query(
+ pConn,
+ "insert into ct3 values(1626006833600, 5, 6, 'c') ct1 values(1626006833601, 2, 3, 'sds') (1626006833602, 4, 5, "
+ "'ddd') ct0 values(1626006833603, 4, 3, 'hwj') ct1 values(now+5s, 23, 32, 's21ds')");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ct3, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -175,7 +177,9 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- pRes = taos_query(pConn, "insert into ct3 values(1626006833605, 53, 63, 'cffffffffffffffffffffffffffff', 8989898899999) (1626006833609, 51, 62, 'c333', 940)");
+ pRes = taos_query(pConn,
+ "insert into ct3 values(1626006833605, 53, 63, 'cffffffffffffffffffffffffffff', 8989898899999) "
+ "(1626006833609, 51, 62, 'c333', 940)");
if (taos_errno(pRes) != 0) {
printf("failed to insert into ct3, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -210,8 +214,8 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- if(g_conf.dropTable){
- pRes = taos_query(pConn, "drop table ct3 ct1");
+ if (g_conf.dropTable) {
+ pRes = taos_query(pConn, "drop table ct3, ct1");
if (taos_errno(pRes) != 0) {
printf("failed to drop child table ct3, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -275,7 +279,7 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- if(g_conf.dropTable){
+ if (g_conf.dropTable) {
pRes = taos_query(pConn, "drop table n1");
if (taos_errno(pRes) != 0) {
printf("failed to drop normal table n1, reason:%s\n", taos_errstr(pRes));
@@ -319,7 +323,7 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- if(g_conf.dropTable){
+ if (g_conf.dropTable) {
pRes = taos_query(pConn,
"create stable if not exists st1 (ts timestamp, c1 int, c2 float, c3 binary(16)) tags(t1 int, t3 "
"nchar(8), t4 bool)");
@@ -355,16 +359,22 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- pRes = taos_query(pConn, "create table if not exists stt1 using stt tags(2, \"stt1\", true) sttb1 using sttb tags(4, \"sttb1\", true) "
- "stt2 using stt tags(43, \"stt2\", false) sttb2 using sttb tags(54, \"sttb2\", true)");
+ pRes = taos_query(
+ pConn,
+ "create table if not exists stt1 using stt tags(2, \"stt1\", true) sttb1 using sttb tags(4, \"sttb1\", true) "
+ "stt2 using stt tags(43, \"stt2\", false) sttb2 using sttb tags(54, \"sttb2\", true)");
if (taos_errno(pRes) != 0) {
printf("failed to create child table stt1, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
- pRes = taos_query(pConn, "insert into stt1 values(now + 2s, 3, 2, 'stt1') stt3 using stt tags(23, \"stt3\", true) values(now + 1s, 1, 2, 'stt3') sttb3 using sttb tags(4, \"sttb3\", true) values(now + 2s, 13, 22, 'sttb3') "
- "stt4 using stt tags(433, \"stt4\", false) values(now + 3s, 21, 21, 'stt4') sttb4 using sttb tags(543, \"sttb4\", true) values(now + 4s, 16, 25, 'sttb4')");
+ pRes =
+ taos_query(pConn,
+ "insert into stt1 values(now + 2s, 3, 2, 'stt1') stt3 using stt tags(23, \"stt3\", true) values(now + "
+ "1s, 1, 2, 'stt3') sttb3 using sttb tags(4, \"sttb3\", true) values(now + 2s, 13, 22, 'sttb3') "
+ "stt4 using stt tags(433, \"stt4\", false) values(now + 3s, 21, 21, 'stt4') sttb4 using sttb "
+ "tags(543, \"sttb4\", true) values(now + 4s, 16, 25, 'sttb4')");
if (taos_errno(pRes) != 0) {
printf("failed to create child table stt1, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -374,8 +384,10 @@ int buildDatabase(TAOS* pConn, TAOS_RES* pRes){
return 0;
}
-int buildStable(TAOS* pConn, TAOS_RES* pRes){
- pRes = taos_query(pConn, "CREATE STABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT) TAGS (`groupid` INT, `location` VARCHAR(16))");
+int buildStable(TAOS* pConn, TAOS_RES* pRes) {
+ pRes = taos_query(pConn,
+ "CREATE STABLE `meters` (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT) TAGS "
+ "(`groupid` INT, `location` VARCHAR(16))");
if (taos_errno(pRes) != 0) {
printf("failed to create super table meters, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -396,7 +408,9 @@ int buildStable(TAOS* pConn, TAOS_RES* pRes){
}
taos_free_result(pRes);
- pRes = taos_query(pConn, "create stream meters_summary_s into meters_summary as select _wstart, max(current) as current, groupid, location from meters partition by groupid, location interval(10m)");
+ pRes = taos_query(pConn,
+ "create stream meters_summary_s into meters_summary as select _wstart, max(current) as current, "
+ "groupid, location from meters partition by groupid, location interval(10m)");
if (taos_errno(pRes) != 0) {
printf("failed to create super table meters_summary, reason:%s\n", taos_errstr(pRes));
return -1;
@@ -471,9 +485,9 @@ int32_t init_env() {
}
taos_free_result(pRes);
- if(g_conf.subTable){
+ if (g_conf.subTable) {
buildStable(pConn, pRes);
- }else{
+ } else {
buildDatabase(pConn, pRes);
}
@@ -496,14 +510,14 @@ int32_t create_topic() {
}
taos_free_result(pRes);
- if(g_conf.subTable){
+ if (g_conf.subTable) {
pRes = taos_query(pConn, "create topic meters_summary_t1 with meta as stable meters_summary");
if (taos_errno(pRes) != 0) {
printf("failed to create topic meters_summary_t1, reason:%s\n", taos_errstr(pRes));
return -1;
}
taos_free_result(pRes);
- }else{
+ } else {
pRes = taos_query(pConn, "create topic topic_db with meta as database abc1");
if (taos_errno(pRes) != 0) {
printf("failed to create topic topic_db, reason:%s\n", taos_errstr(pRes));
@@ -530,7 +544,7 @@ tmq_t* build_consumer() {
tmq_conf_set(conf, "enable.auto.commit", "true");
tmq_conf_set(conf, "enable.heartbeat.background", "true");
- if(g_conf.snapShot){
+ if (g_conf.snapShot) {
tmq_conf_set(conf, "experimental.snapshot.enable", "true");
}
@@ -543,9 +557,9 @@ tmq_t* build_consumer() {
tmq_list_t* build_topic_list() {
tmq_list_t* topic_list = tmq_list_new();
- if(g_conf.subTable){
+ if (g_conf.subTable) {
tmq_list_append(topic_list, "meters_summary_t1");
- }else{
+ } else {
tmq_list_append(topic_list, "topic_db");
}
return topic_list;
@@ -566,7 +580,7 @@ void basic_consume_loop(tmq_t* tmq, tmq_list_t* topics) {
cnt++;
msg_process(tmqmessage);
taos_free_result(tmqmessage);
- }else{
+ } else {
break;
}
}
@@ -582,10 +596,10 @@ void initLogFile() {
char f1[256] = {0};
char f2[256] = {0};
- if(g_conf.snapShot){
+ if (g_conf.snapShot) {
sprintf(f1, "%s/../log/tmq_taosx_tmp_snapshot.source", g_conf.dir);
sprintf(f2, "%s/../log/tmq_taosx_tmp_snapshot.result", g_conf.dir);
- }else{
+ } else {
sprintf(f1, "%s/../log/tmq_taosx_tmp.source", g_conf.dir);
sprintf(f2, "%s/../log/tmq_taosx_tmp.result", g_conf.dir);
}
@@ -603,84 +617,169 @@ void initLogFile() {
exit(-1);
}
- if(g_conf.snapShot){
- if(g_conf.subTable){
- char *result[] = {
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"meters_summary\",\"columns\":[{\"name\":\"_wstart\",\"type\":9},{\"name\":\"current\",\"type\":6},{\"name\":\"groupid\",\"type\":4},{\"name\":\"location\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"group_id\",\"type\":14}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"t_d2a450ee819dcf7576f0282d9ac22dbc\",\"using\":\"meters_summary\",\"tagNum\":1,\"tags\":[{\"name\":\"group_id\",\"type\":14,\"value\":1.313555008277358e+19}],\"createList\":[]}"
- };
- for(int i = 0; i < sizeof(result)/sizeof(result[0]); i++){
+ if (g_conf.snapShot) {
+ if (g_conf.subTable) {
+ char* result[] = {
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"meters_summary\",\"columns\":[{\"name\":\"_"
+ "wstart\",\"type\":9},{\"name\":\"current\",\"type\":6},{\"name\":\"groupid\",\"type\":4},{\"name\":"
+ "\"location\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"group_id\",\"type\":14}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"t_d2a450ee819dcf7576f0282d9ac22dbc\",\"using\":"
+ "\"meters_summary\",\"tagNum\":1,\"tags\":[{\"name\":\"group_id\",\"type\":14,\"value\":1.313555008277358e+"
+ "19}],\"createList\":[]}"};
+ for (int i = 0; i < sizeof(result) / sizeof(result[0]); i++) {
taosFprintfFile(pFile2, result[i]);
taosFprintfFile(pFile2, "\n");
}
- }else{
- char *result[] = {
- "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"tb1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":4}],\"tags\":[]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"st1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":64},{\"name\":\"c4\",\"type\":5}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1},{\"name\":\"t2\",\"type\":8,\"length\":64}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct0\",\"using\":\"st1\",\"tagNum\":4,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":1000},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"ttt\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct1\",\"using\":\"st1\",\"tagNum\":4,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2000}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct2\",\"using\":\"st1\",\"tagNum\":4,\"tags\":[],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"using\":\"st1\",\"tagNum\":4,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":5000}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c2\",\"type\":10,\"length\":8},{\"name\":\"cc3\",\"type\":5}],\"tags\":[]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"jt\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"i\",\"type\":4}],\"tags\":[{\"name\":\"t\",\"type\":15}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt1\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[{\"name\":\"t\",\"type\":15,\"value\":\"{\\\"k1\\\":1,\\\"k2\\\":\\\"hello\\\"}\"}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt2\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"stt\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1}]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"sttb\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt1\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb1\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt2\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":43},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb2\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":54},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt3\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb3\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt4\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":433},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb4\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":543},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}"
- };
- for(int i = 0; i < sizeof(result)/sizeof(result[0]); i++){
+ } else {
+ char* result[] = {
+ "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"tb1\",\"columns\":[{\"name\":\"ts\",\"type\":"
+ "9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":4}],\"tags\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"st1\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":64},{"
+ "\"name\":\"c4\",\"type\":5}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":"
+ "8},{\"name\":\"t4\",\"type\":1},{\"name\":\"t2\",\"type\":8,\"length\":64}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct0\",\"using\":\"st1\",\"tagNum\":4,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":1000},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"ttt\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct1\",\"using\":\"st1\",\"tagNum\":4,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":2000}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct2\",\"using\":\"st1\",\"tagNum\":4,\"tags\":["
+ "],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"using\":\"st1\",\"tagNum\":4,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":5000}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c2\",\"type\":10,\"length\":8},{\"name\":\"cc3\",\"type\":5}],\"tags\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"jt\",\"columns\":[{\"name\":\"ts\",\"type\":9},"
+ "{\"name\":\"i\",\"type\":4}],\"tags\":[{\"name\":\"t\",\"type\":15}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt1\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[{"
+ "\"name\":\"t\",\"type\":15,\"value\":\"{\\\"k1\\\":1,\\\"k2\\\":\\\"hello\\\"}\"}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt2\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[]"
+ ",\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"stt\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":"
+ "1}]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"sttb\",\"columns\":[{\"name\":\"ts\",\"type\":"
+ "9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":"
+ "1}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt1\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt1\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb1\",\"using\":\"sttb\",\"tagNum\":3,"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb1\\\"\"}"
+ ",{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt2\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":43},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt2\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":0}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb2\",\"using\":\"sttb\",\"tagNum\":3,"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":54},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt3\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt3\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb3\",\"using\":\"sttb\",\"tagNum\":3,"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb3\\\"\"}"
+ ",{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt4\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":433},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt4\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":0}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"sttb4\",\"using\":\"sttb\",\"tagNum\":3,"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":543},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}"};
+ for (int i = 0; i < sizeof(result) / sizeof(result[0]); i++) {
taosFprintfFile(pFile2, result[i]);
taosFprintfFile(pFile2, "\n");
}
}
- }else{
- if(g_conf.subTable){
- char *result[] = {
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"meters_summary\",\"columns\":[{\"name\":\"_wstart\",\"type\":9},{\"name\":\"current\",\"type\":6},{\"name\":\"groupid\",\"type\":4},{\"name\":\"location\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"group_id\",\"type\":14}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"t_d2a450ee819dcf7576f0282d9ac22dbc\",\"using\":\"meters_summary\",\"tagNum\":1,\"tags\":[{\"name\":\"group_id\",\"type\":14,\"value\":1.313555008277358e+19}],\"createList\":[]}"
- };
+ } else {
+ if (g_conf.subTable) {
+ char* result[] = {
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"meters_summary\",\"columns\":[{\"name\":\"_"
+ "wstart\",\"type\":9},{\"name\":\"current\",\"type\":6},{\"name\":\"groupid\",\"type\":4},{\"name\":"
+ "\"location\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"group_id\",\"type\":14}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"t_d2a450ee819dcf7576f0282d9ac22dbc\",\"using\":"
+ "\"meters_summary\",\"tagNum\":1,\"tags\":[{\"name\":\"group_id\",\"type\":14,\"value\":1.313555008277358e+"
+ "19}],\"createList\":[]}"};
- for(int i = 0; i < sizeof(result)/sizeof(result[0]); i++){
+ for (int i = 0; i < sizeof(result) / sizeof(result[0]); i++) {
taosFprintfFile(pFile2, result[i]);
taosFprintfFile(pFile2, "\n");
}
- }else{
- char *result[] = {
- "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"tb1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":4}],\"tags\":[]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"st1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct0\",\"using\":\"st1\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":1000},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"ttt\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct1\",\"using\":\"st1\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2000}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct2\",\"using\":\"st1\",\"tagNum\":3,\"tags\":[],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"using\":\"st1\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":3000}],\"createList\":[]}",
- "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":5,\"colName\":\"c4\",\"colType\":5}",
- "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":7,\"colName\":\"c3\",\"colType\":8,\"colLength\":64}",
- "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":1,\"colName\":\"t2\",\"colType\":8,\"colLength\":64}",
- "{\"type\":\"alter\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"alterType\":4,\"colName\":\"t1\",\"colValue\":\"5000\",\"colValueNull\":false}",
+ } else {
+ char* result[] = {
+ "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"tb1\",\"columns\":[{\"name\":\"ts\",\"type\":"
+ "9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":4}],\"tags\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"st1\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":"
+ "1}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct0\",\"using\":\"st1\",\"tagNum\":3,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":1000},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"ttt\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct1\",\"using\":\"st1\",\"tagNum\":3,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":2000}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct2\",\"using\":\"st1\",\"tagNum\":3,\"tags\":["
+ "],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"using\":\"st1\",\"tagNum\":3,\"tags\":["
+ "{\"name\":\"t1\",\"type\":4,\"value\":3000}],\"createList\":[]}",
+ "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":5,\"colName\":\"c4\","
+ "\"colType\":5}",
+ "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":7,\"colName\":\"c3\","
+ "\"colType\":8,\"colLength\":64}",
+ "{\"type\":\"alter\",\"tableType\":\"super\",\"tableName\":\"st1\",\"alterType\":1,\"colName\":\"t2\","
+ "\"colType\":8,\"colLength\":64}",
+ "{\"type\":\"alter\",\"tableType\":\"child\",\"tableName\":\"ct3\",\"alterType\":4,\"colName\":\"t1\","
+ "\"colValue\":\"5000\",\"colValueNull\":false}",
"{\"type\":\"delete\",\"sql\":\"delete from `ct3` where `ts` >= 1626006833600 and `ts` <= 1626006833605\"}",
- "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":10,\"length\":4}],\"tags\":[]}",
- "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":5,\"colName\":\"c3\",\"colType\":5}",
- "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":7,\"colName\":\"c2\",\"colType\":10,\"colLength\":8}",
- "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":10,\"colName\":\"c3\",\"colNewName\":\"cc3\"}",
+ "{\"type\":\"create\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":10,\"length\":4}],\"tags\":[]}",
+ "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":5,\"colName\":\"c3\","
+ "\"colType\":5}",
+ "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":7,\"colName\":\"c2\","
+ "\"colType\":10,\"colLength\":8}",
+ "{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":10,\"colName\":\"c3\","
+ "\"colNewName\":\"cc3\"}",
"{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":9}",
"{\"type\":\"alter\",\"tableType\":\"normal\",\"tableName\":\"n1\",\"alterType\":6,\"colName\":\"c1\"}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"jt\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"i\",\"type\":4}],\"tags\":[{\"name\":\"t\",\"type\":15}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt1\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[{\"name\":\"t\",\"type\":15,\"value\":\"{\\\"k1\\\":1,\\\"k2\\\":\\\"hello\\\"}\"}],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt2\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[],\"createList\":[]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"stt\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1}]}",
- "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"sttb\",\"columns\":[{\"name\":\"ts\",\"type\":9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":1}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt1\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[{\"tableName\":\"stt1\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"sttb1\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"stt2\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":43},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}]},{\"tableName\":\"sttb2\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":54},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]}]}",
- "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt3\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[{\"tableName\":\"stt3\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"sttb3\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"stt4\",\"using\":\"stt\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":433},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}]},{\"tableName\":\"sttb4\",\"using\":\"sttb\",\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":543},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"sttb4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]}]}"
- };
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"jt\",\"columns\":[{\"name\":\"ts\",\"type\":9},"
+ "{\"name\":\"i\",\"type\":4}],\"tags\":[{\"name\":\"t\",\"type\":15}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt1\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[{"
+ "\"name\":\"t\",\"type\":15,\"value\":\"{\\\"k1\\\":1,\\\"k2\\\":\\\"hello\\\"}\"}],\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"jt2\",\"using\":\"jt\",\"tagNum\":1,\"tags\":[]"
+ ",\"createList\":[]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"stt\",\"columns\":[{\"name\":\"ts\",\"type\":9}"
+ ",{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":"
+ "1}]}",
+ "{\"type\":\"create\",\"tableType\":\"super\",\"tableName\":\"sttb\",\"columns\":[{\"name\":\"ts\",\"type\":"
+ "9},{\"name\":\"c1\",\"type\":4},{\"name\":\"c2\",\"type\":6},{\"name\":\"c3\",\"type\":8,\"length\":16}],"
+ "\"tags\":[{\"name\":\"t1\",\"type\":4},{\"name\":\"t3\",\"type\":10,\"length\":8},{\"name\":\"t4\",\"type\":"
+ "1}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt1\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt1\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[{\"tableName\":\"stt1\",\"using\":\"stt\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":2},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"stt1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"sttb1\",\"using\":\"sttb\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb1\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"stt2\",\"using\":\"stt\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":43},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"stt2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}]},{\"tableName\":\"sttb2\",\"using\":\"sttb\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":54},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb2\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]}]}",
+ "{\"type\":\"create\",\"tableType\":\"child\",\"tableName\":\"stt3\",\"using\":\"stt\",\"tagNum\":3,\"tags\":"
+ "[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":\"\\\"stt3\\\"\"},{"
+ "\"name\":\"t4\",\"type\":1,\"value\":1}],\"createList\":[{\"tableName\":\"stt3\",\"using\":\"stt\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":23},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"stt3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"sttb3\",\"using\":\"sttb\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":4},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb3\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]},{\"tableName\":\"stt4\",\"using\":\"stt\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":433},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"stt4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":0}]},{\"tableName\":\"sttb4\",\"using\":\"sttb\","
+ "\"tagNum\":3,\"tags\":[{\"name\":\"t1\",\"type\":4,\"value\":543},{\"name\":\"t3\",\"type\":10,\"value\":"
+ "\"\\\"sttb4\\\"\"},{\"name\":\"t4\",\"type\":1,\"value\":1}]}]}"};
- for(int i = 0; i < sizeof(result)/sizeof(result[0]); i++){
+ for (int i = 0; i < sizeof(result) / sizeof(result[0]); i++) {
taosFprintfFile(pFile2, result[i]);
taosFprintfFile(pFile2, "\n");
}
@@ -692,23 +791,23 @@ void initLogFile() {
int main(int argc, char* argv[]) {
for (int32_t i = 1; i < argc; i++) {
- if(strcmp(argv[i], "-c") == 0){
+ if (strcmp(argv[i], "-c") == 0) {
tstrncpy(g_conf.dir, argv[++i], sizeof(g_conf.dir));
- }else if(strcmp(argv[i], "-s") == 0){
+ } else if (strcmp(argv[i], "-s") == 0) {
g_conf.snapShot = true;
- }else if(strcmp(argv[i], "-d") == 0){
+ } else if (strcmp(argv[i], "-d") == 0) {
g_conf.dropTable = true;
- }else if(strcmp(argv[i], "-sv") == 0){
+ } else if (strcmp(argv[i], "-sv") == 0) {
g_conf.srcVgroups = atol(argv[++i]);
- }else if(strcmp(argv[i], "-dv") == 0){
+ } else if (strcmp(argv[i], "-dv") == 0) {
g_conf.dstVgroups = atol(argv[++i]);
- }else if(strcmp(argv[i], "-t") == 0){
+ } else if (strcmp(argv[i], "-t") == 0) {
g_conf.subTable = true;
}
}
printf("env init\n");
- if(strlen(g_conf.dir) != 0){
+ if (strlen(g_conf.dir) != 0) {
initLogFile();
}
diff --git a/utils/tsim/src/simExe.c b/utils/tsim/src/simExe.c
index 258c611557..d82c948cf7 100644
--- a/utils/tsim/src/simExe.c
+++ b/utils/tsim/src/simExe.c
@@ -31,7 +31,7 @@ void simLogSql(char *sql, bool useSharp) {
taosFprintfFile(pFile, "%s;\n", sql);
}
- taosFsyncFile(pFile);
+ UNUSED(taosFsyncFile(pFile));
}
}