From b913c0b94b211df032ae90e43c6c31ca58e4eb48 Mon Sep 17 00:00:00 2001 From: dapan1121 Date: Mon, 19 Aug 2024 16:51:39 +0800 Subject: [PATCH 1/6] fix: async fetch rows no callback issue --- source/client/src/clientImpl.c | 2 +- source/libs/scheduler/src/schJob.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source/client/src/clientImpl.c b/source/client/src/clientImpl.c index 664de5619f..a8f6239906 100644 --- a/source/client/src/clientImpl.c +++ b/source/client/src/clientImpl.c @@ -2928,7 +2928,7 @@ void taosAsyncFetchImpl(SRequestObj* pRequest, __taos_async_fn_t fp, void* param int32_t code = schedulerFetchRows(pRequest->body.queryJob, &req); if (TSDB_CODE_SUCCESS != code) { tscError("0x%" PRIx64 " failed to schedule fetch rows", pRequest->requestId); - pRequest->body.fetchFp(param, pRequest, code); + //pRequest->body.fetchFp(param, pRequest, code); } } diff --git a/source/libs/scheduler/src/schJob.c b/source/libs/scheduler/src/schJob.c index 58a0706223..9c9cce7516 100644 --- a/source/libs/scheduler/src/schJob.c +++ b/source/libs/scheduler/src/schJob.c @@ -519,7 +519,7 @@ void schPostJobRes(SSchJob *pJob, SCH_OP_TYPE op) { goto _return; } - if (op && pJob->opStatus.op != op) { + if (SCH_OP_NULL != op && pJob->opStatus.op != op) { SCH_JOB_ELOG("job in operation %s mis-match with expected %s", schGetOpStr(pJob->opStatus.op), schGetOpStr(op)); goto _return; } @@ -547,9 +547,10 @@ _return: int32_t schProcessOnJobFailure(SSchJob *pJob, int32_t errCode) { if (TSDB_CODE_SCH_IGNORE_ERROR == errCode) { + schPostJobRes(pJob, 0); return TSDB_CODE_SCH_IGNORE_ERROR; } - + schUpdateJobErrCode(pJob, errCode); int32_t code = atomic_load_32(&pJob->errCode); From 9ddfefc6bf893cef90a46b3c9b3a8d2212781258 Mon Sep 17 00:00:00 2001 From: Yaming Pei Date: Thu, 22 Aug 2024 11:26:11 +0800 Subject: [PATCH 2/6] optimized the cpp connector sample code page --- docs/en/14-reference/05-connectors/10-cpp.mdx | 20 +- {examples => docs/examples}/c/asyncdemo.c | 0 {examples => docs/examples}/c/demo.c | 0 {examples => docs/examples}/c/prepare.c | 0 {examples => docs/examples}/c/schemaless.c | 0 {examples => docs/examples}/c/stream_demo.c | 0 {examples => docs/examples}/c/tmq.c | 666 +++++++++--------- docs/zh/14-reference/05-connector/10-cpp.mdx | 25 +- examples/c/CMakeLists.txt | 78 -- examples/c/makefile | 27 - 10 files changed, 347 insertions(+), 469 deletions(-) rename {examples => docs/examples}/c/asyncdemo.c (100%) rename {examples => docs/examples}/c/demo.c (100%) rename {examples => docs/examples}/c/prepare.c (100%) rename {examples => docs/examples}/c/schemaless.c (100%) rename {examples => docs/examples}/c/stream_demo.c (100%) rename {examples => docs/examples}/c/tmq.c (96%) delete mode 100644 examples/c/CMakeLists.txt delete mode 100644 examples/c/makefile diff --git a/docs/en/14-reference/05-connectors/10-cpp.mdx b/docs/en/14-reference/05-connectors/10-cpp.mdx index b429afde97..441902ba21 100644 --- a/docs/en/14-reference/05-connectors/10-cpp.mdx +++ b/docs/en/14-reference/05-connectors/10-cpp.mdx @@ -71,9 +71,7 @@ This section shows sample code for standard access methods to TDengine clusters
Synchronous query -```c -{{#include examples/c/demo.c}} -``` +[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c)
@@ -82,9 +80,7 @@ This section shows sample code for standard access methods to TDengine clusters
Asynchronous queries -```c -{{#include examples/c/asyncdemo.c}} -``` +[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c)
@@ -93,9 +89,7 @@ This section shows sample code for standard access methods to TDengine clusters
Parameter Binding -```c -{{#include examples/c/prepare.c}} -``` +[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c)
@@ -104,9 +98,7 @@ This section shows sample code for standard access methods to TDengine clusters
Mode free write -```c -{{#include examples/c/schemaless.c}} -``` +[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c)
@@ -121,7 +113,7 @@ This section shows sample code for standard access methods to TDengine clusters :::info -More example code and downloads are available at [GitHub](https://github.com/taosdata/TDengine/tree/develop/examples/c). +More example code and downloads are available at [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c). You can find it in the installation directory under the `examples/c` path. This directory has a makefile and can be compiled under Linux/macOS by executing `make` directly. **Hint:** When compiling in an ARM environment, please remove `-msse4.2` from the makefile. This option is only supported on the x64/x86 hardware platforms. @@ -311,7 +303,7 @@ Starting with versions 2.1.1.0 and 2.1.2.0, TDengine has significantly improved Note: If `taos_stmt_execute()` succeeds, you can reuse the parsed result of `taos_stmt_prepare()` to bind new data in steps 3 to 6 if you don't need to change the SQL command. However, if there is an execution error, it is not recommended to continue working in the current context but release the resources and start again with `taos_stmt_init()` steps. -The specific functions related to the interface are as follows (see also the [prepare.c](https://github.com/taosdata/TDengine/blob/develop/examples/c/prepare.c) file for the way to use the corresponding functions) +The specific functions related to the interface are as follows (see also the [prepare.c](https://github.com/taosdata/TDengine/blob/develop/docs/examples/c/prepare.c) file for the way to use the corresponding functions) - `TAOS_STMT* taos_stmt_init(TAOS *taos)` diff --git a/examples/c/asyncdemo.c b/docs/examples/c/asyncdemo.c similarity index 100% rename from examples/c/asyncdemo.c rename to docs/examples/c/asyncdemo.c diff --git a/examples/c/demo.c b/docs/examples/c/demo.c similarity index 100% rename from examples/c/demo.c rename to docs/examples/c/demo.c diff --git a/examples/c/prepare.c b/docs/examples/c/prepare.c similarity index 100% rename from examples/c/prepare.c rename to docs/examples/c/prepare.c diff --git a/examples/c/schemaless.c b/docs/examples/c/schemaless.c similarity index 100% rename from examples/c/schemaless.c rename to docs/examples/c/schemaless.c diff --git a/examples/c/stream_demo.c b/docs/examples/c/stream_demo.c similarity index 100% rename from examples/c/stream_demo.c rename to docs/examples/c/stream_demo.c diff --git a/examples/c/tmq.c b/docs/examples/c/tmq.c similarity index 96% rename from examples/c/tmq.c rename to docs/examples/c/tmq.c index 15ab4fcfc9..46dd3bb551 100644 --- a/examples/c/tmq.c +++ b/docs/examples/c/tmq.c @@ -1,333 +1,333 @@ -/* - * Copyright (c) 2019 TAOS Data, Inc. - * - * This program is free software: you can use, redistribute, and/or modify - * it under the terms of the GNU Affero General Public License, version 3 - * or later ("AGPL"), as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#include -#include -#include "taos.h" - -static int running = 1; -const char* topic_name = "topicname"; - -static int32_t msg_process(TAOS_RES* msg) { - char buf[1024]; - int32_t rows = 0; - - const char* topicName = tmq_get_topic_name(msg); - const char* dbName = tmq_get_db_name(msg); - int32_t vgroupId = tmq_get_vgroup_id(msg); - - printf("topic: %s\n", topicName); - printf("db: %s\n", dbName); - printf("vgroup id: %d\n", vgroupId); - - while (1) { - TAOS_ROW row = taos_fetch_row(msg); - if (row == NULL) break; - - TAOS_FIELD* fields = taos_fetch_fields(msg); - int32_t numOfFields = taos_field_count(msg); - // int32_t* length = taos_fetch_lengths(msg); - int32_t precision = taos_result_precision(msg); - rows++; - taos_print_row(buf, row, fields, numOfFields); - printf("precision: %d, row content: %s\n", precision, buf); - } - - return rows; -} - -static int32_t init_env() { - TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); - if (pConn == NULL) { - return -1; - } - - TAOS_RES* pRes; - // drop database if exists - printf("create database\n"); - pRes = taos_query(pConn, "drop topic topicname"); - if (taos_errno(pRes) != 0) { - printf("error in drop topicname, reason:%s\n", taos_errstr(pRes)); - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "drop database if exists tmqdb"); - if (taos_errno(pRes) != 0) { - printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); - } - taos_free_result(pRes); - - // create database - pRes = taos_query(pConn, "create database tmqdb precision 'ns' WAL_RETENTION_PERIOD 3600"); - if (taos_errno(pRes) != 0) { - printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - // create super table - printf("create super table\n"); - pRes = taos_query( - pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))"); - if (taos_errno(pRes) != 0) { - printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - // create sub tables - printf("create sub tables\n"); - pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')"); - if (taos_errno(pRes) != 0) { - printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')"); - if (taos_errno(pRes) != 0) { - printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')"); - if (taos_errno(pRes) != 0) { - printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')"); - if (taos_errno(pRes) != 0) { - printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - // insert data - printf("insert data into sub tables\n"); - pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')"); - if (taos_errno(pRes) != 0) { - printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')"); - if (taos_errno(pRes) != 0) { - printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')"); - if (taos_errno(pRes) != 0) { - printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')"); - if (taos_errno(pRes) != 0) { - printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); - goto END; - } - taos_free_result(pRes); - taos_close(pConn); - return 0; - -END: - taos_free_result(pRes); - taos_close(pConn); - return -1; -} - -int32_t create_topic() { - printf("create topic\n"); - TAOS_RES* pRes; - TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); - if (pConn == NULL) { - return -1; - } - - pRes = taos_query(pConn, "use tmqdb"); - if (taos_errno(pRes) != 0) { - printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes)); - return -1; - } - taos_free_result(pRes); - - pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3, tbname from tmqdb.stb where c1 > 1"); - if (taos_errno(pRes) != 0) { - printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes)); - return -1; - } - taos_free_result(pRes); - - taos_close(pConn); - return 0; -} - -void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { - printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param); -} - -tmq_t* build_consumer() { - tmq_conf_res_t code; - tmq_t* tmq = NULL; - - tmq_conf_t* conf = tmq_conf_new(); - code = tmq_conf_set(conf, "enable.auto.commit", "true"); - 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) { - tmq_conf_destroy(conf); - return NULL; - } - code = tmq_conf_set(conf, "group.id", "cgrpName"); - 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) { - tmq_conf_destroy(conf); - return NULL; - } - code = tmq_conf_set(conf, "td.connect.user", "root"); - 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) { - tmq_conf_destroy(conf); - return NULL; - } - code = tmq_conf_set(conf, "auto.offset.reset", "earliest"); - if (TMQ_CONF_OK != code) { - tmq_conf_destroy(conf); - return NULL; - } - - tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); - tmq = tmq_consumer_new(conf, NULL, 0); - -_end: - tmq_conf_destroy(conf); - return tmq; -} - -tmq_list_t* build_topic_list() { - tmq_list_t* topicList = tmq_list_new(); - int32_t code = tmq_list_append(topicList, topic_name); - if (code) { - tmq_list_destroy(topicList); - return NULL; - } - return topicList; -} - -void basic_consume_loop(tmq_t* tmq) { - int32_t totalRows = 0; - int32_t msgCnt = 0; - int32_t timeout = 5000; - while (running) { - TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout); - if (tmqmsg) { - msgCnt++; - totalRows += msg_process(tmqmsg); - taos_free_result(tmqmsg); - } else { - break; - } - } - - fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows); -} - -void consume_repeatly(tmq_t* tmq) { - int32_t numOfAssignment = 0; - tmq_topic_assignment* pAssign = NULL; - - int32_t code = tmq_get_topic_assignment(tmq, topic_name, &pAssign, &numOfAssignment); - if (code != 0) { - fprintf(stderr, "failed to get assignment, reason:%s", tmq_err2str(code)); - } - - // seek to the earliest offset - for(int32_t i = 0; i < numOfAssignment; ++i) { - tmq_topic_assignment* p = &pAssign[i]; - - code = tmq_offset_seek(tmq, topic_name, p->vgId, p->begin); - if (code != 0) { - fprintf(stderr, "failed to seek to %d, reason:%s", (int)p->begin, tmq_err2str(code)); - } - } - - tmq_free_assignment(pAssign); - - // let's do it again - basic_consume_loop(tmq); -} - -int main(int argc, char* argv[]) { - int32_t code; - - if (init_env() < 0) { - return -1; - } - - if (create_topic() < 0) { - return -1; - } - - tmq_t* tmq = build_consumer(); - if (NULL == tmq) { - fprintf(stderr, "build_consumer() fail!\n"); - return -1; - } - - tmq_list_t* topic_list = build_topic_list(); - if (NULL == topic_list) { - return -1; - } - - if ((code = tmq_subscribe(tmq, topic_list))) { - fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code)); - } - - tmq_list_destroy(topic_list); - - basic_consume_loop(tmq); - - consume_repeatly(tmq); - - code = tmq_consumer_close(tmq); - if (code) { - fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code)); - } else { - fprintf(stderr, "Consumer closed\n"); - } - - return 0; -} +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include "taos.h" + +static int running = 1; +const char* topic_name = "topicname"; + +static int32_t msg_process(TAOS_RES* msg) { + char buf[1024]; + int32_t rows = 0; + + const char* topicName = tmq_get_topic_name(msg); + const char* dbName = tmq_get_db_name(msg); + int32_t vgroupId = tmq_get_vgroup_id(msg); + + printf("topic: %s\n", topicName); + printf("db: %s\n", dbName); + printf("vgroup id: %d\n", vgroupId); + + while (1) { + TAOS_ROW row = taos_fetch_row(msg); + if (row == NULL) break; + + TAOS_FIELD* fields = taos_fetch_fields(msg); + int32_t numOfFields = taos_field_count(msg); + // int32_t* length = taos_fetch_lengths(msg); + int32_t precision = taos_result_precision(msg); + rows++; + taos_print_row(buf, row, fields, numOfFields); + printf("precision: %d, row content: %s\n", precision, buf); + } + + return rows; +} + +static int32_t init_env() { + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + TAOS_RES* pRes; + // drop database if exists + printf("create database\n"); + pRes = taos_query(pConn, "drop topic topicname"); + if (taos_errno(pRes) != 0) { + printf("error in drop topicname, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "drop database if exists tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in drop tmqdb, reason:%s\n", taos_errstr(pRes)); + } + taos_free_result(pRes); + + // create database + pRes = taos_query(pConn, "create database tmqdb precision 'ns' WAL_RETENTION_PERIOD 3600"); + if (taos_errno(pRes) != 0) { + printf("error in create tmqdb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create super table + printf("create super table\n"); + pRes = taos_query( + pConn, "create table tmqdb.stb (ts timestamp, c1 int, c2 float, c3 varchar(16)) tags(t1 int, t3 varchar(16))"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table stb, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // create sub tables + printf("create sub tables\n"); + pRes = taos_query(pConn, "create table tmqdb.ctb0 using tmqdb.stb tags(0, 'subtable0')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb1 using tmqdb.stb tags(1, 'subtable1')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb1, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb2 using tmqdb.stb tags(2, 'subtable2')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb2, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create table tmqdb.ctb3 using tmqdb.stb tags(3, 'subtable3')"); + if (taos_errno(pRes) != 0) { + printf("failed to create super table ctb3, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + // insert data + printf("insert data into sub tables\n"); + pRes = taos_query(pConn, "insert into tmqdb.ctb0 values(now, 0, 0, 'a0')(now+1s, 0, 0, 'a00')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb1 values(now, 1, 1, 'a1')(now+1s, 11, 11, 'a11')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb2 values(now, 2, 2, 'a1')(now+1s, 22, 22, 'a22')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "insert into tmqdb.ctb3 values(now, 3, 3, 'a1')(now+1s, 33, 33, 'a33')"); + if (taos_errno(pRes) != 0) { + printf("failed to insert into ctb0, reason:%s\n", taos_errstr(pRes)); + goto END; + } + taos_free_result(pRes); + taos_close(pConn); + return 0; + +END: + taos_free_result(pRes); + taos_close(pConn); + return -1; +} + +int32_t create_topic() { + printf("create topic\n"); + TAOS_RES* pRes; + TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0); + if (pConn == NULL) { + return -1; + } + + pRes = taos_query(pConn, "use tmqdb"); + if (taos_errno(pRes) != 0) { + printf("error in use tmqdb, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + pRes = taos_query(pConn, "create topic topicname as select ts, c1, c2, c3, tbname from tmqdb.stb where c1 > 1"); + if (taos_errno(pRes) != 0) { + printf("failed to create topic topicname, reason:%s\n", taos_errstr(pRes)); + return -1; + } + taos_free_result(pRes); + + taos_close(pConn); + return 0; +} + +void tmq_commit_cb_print(tmq_t* tmq, int32_t code, void* param) { + printf("tmq_commit_cb_print() code: %d, tmq: %p, param: %p\n", code, tmq, param); +} + +tmq_t* build_consumer() { + tmq_conf_res_t code; + tmq_t* tmq = NULL; + + tmq_conf_t* conf = tmq_conf_new(); + code = tmq_conf_set(conf, "enable.auto.commit", "true"); + 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) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "group.id", "cgrpName"); + 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) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "td.connect.user", "root"); + 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) { + tmq_conf_destroy(conf); + return NULL; + } + code = tmq_conf_set(conf, "auto.offset.reset", "earliest"); + if (TMQ_CONF_OK != code) { + tmq_conf_destroy(conf); + return NULL; + } + + tmq_conf_set_auto_commit_cb(conf, tmq_commit_cb_print, NULL); + tmq = tmq_consumer_new(conf, NULL, 0); + +_end: + tmq_conf_destroy(conf); + return tmq; +} + +tmq_list_t* build_topic_list() { + tmq_list_t* topicList = tmq_list_new(); + int32_t code = tmq_list_append(topicList, topic_name); + if (code) { + tmq_list_destroy(topicList); + return NULL; + } + return topicList; +} + +void basic_consume_loop(tmq_t* tmq) { + int32_t totalRows = 0; + int32_t msgCnt = 0; + int32_t timeout = 5000; + while (running) { + TAOS_RES* tmqmsg = tmq_consumer_poll(tmq, timeout); + if (tmqmsg) { + msgCnt++; + totalRows += msg_process(tmqmsg); + taos_free_result(tmqmsg); + } else { + break; + } + } + + fprintf(stderr, "%d msg consumed, include %d rows\n", msgCnt, totalRows); +} + +void consume_repeatly(tmq_t* tmq) { + int32_t numOfAssignment = 0; + tmq_topic_assignment* pAssign = NULL; + + int32_t code = tmq_get_topic_assignment(tmq, topic_name, &pAssign, &numOfAssignment); + if (code != 0) { + fprintf(stderr, "failed to get assignment, reason:%s", tmq_err2str(code)); + } + + // seek to the earliest offset + for(int32_t i = 0; i < numOfAssignment; ++i) { + tmq_topic_assignment* p = &pAssign[i]; + + code = tmq_offset_seek(tmq, topic_name, p->vgId, p->begin); + if (code != 0) { + fprintf(stderr, "failed to seek to %d, reason:%s", (int)p->begin, tmq_err2str(code)); + } + } + + tmq_free_assignment(pAssign); + + // let's do it again + basic_consume_loop(tmq); +} + +int main(int argc, char* argv[]) { + int32_t code; + + if (init_env() < 0) { + return -1; + } + + if (create_topic() < 0) { + return -1; + } + + tmq_t* tmq = build_consumer(); + if (NULL == tmq) { + fprintf(stderr, "build_consumer() fail!\n"); + return -1; + } + + tmq_list_t* topic_list = build_topic_list(); + if (NULL == topic_list) { + return -1; + } + + if ((code = tmq_subscribe(tmq, topic_list))) { + fprintf(stderr, "Failed to tmq_subscribe(): %s\n", tmq_err2str(code)); + } + + tmq_list_destroy(topic_list); + + basic_consume_loop(tmq); + + consume_repeatly(tmq); + + code = tmq_consumer_close(tmq); + if (code) { + fprintf(stderr, "Failed to close consumer: %s\n", tmq_err2str(code)); + } else { + fprintf(stderr, "Consumer closed\n"); + } + + return 0; +} diff --git a/docs/zh/14-reference/05-connector/10-cpp.mdx b/docs/zh/14-reference/05-connector/10-cpp.mdx index be7e44812c..8d0ea8e9f2 100644 --- a/docs/zh/14-reference/05-connector/10-cpp.mdx +++ b/docs/zh/14-reference/05-connector/10-cpp.mdx @@ -45,9 +45,8 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一
同步查询 -```c -{{#include examples/c/demo.c}} -``` +请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) + 格式化输出不同类型字段函数 taos_print_row ```c int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) { @@ -144,9 +143,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
异步查询 -```c -{{#include examples/c/asyncdemo.c}} -``` +请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c)
@@ -155,9 +152,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
参数绑定 -```c -{{#include examples/c/prepare.c}} -``` +请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c)
@@ -166,9 +161,7 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
无模式写入 -```c -{{#include examples/c/schemaless.c}} -``` +请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c)
@@ -177,14 +170,12 @@ int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields)
订阅和消费 -```c - {{#include examples/c/tmq.c}} -``` +请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c)
:::info -更多示例代码及下载请见 [GitHub](https://github.com/taosdata/TDengine/tree/develop/examples/c)。 +更多示例代码及下载请见 [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c)。 也可以在安装目录下的 `examples/c` 路径下找到。 该目录下有 makefile,在 Linux/macOS 环境下,直接执行 make 就可以编译得到执行文件。 **提示:**在 ARM 环境下编译时,请将 makefile 中的 `-msse4.2` 去掉,这个选项只有在 x64/x86 硬件平台上才能支持。 @@ -403,7 +394,7 @@ TDengine 的异步 API 均采用非阻塞调用模式。应用程序可以用多 说明:如果 `taos_stmt_execute()` 执行成功,假如不需要改变 SQL 语句的话,那么是可以复用 `taos_stmt_prepare()` 的解析结果,直接进行第 3 ~ 6 步绑定新数据的。但如果执行出错,那么并不建议继续在当前的环境上下文下继续工作,而是建议释放资源,然后从 `taos_stmt_init()` 步骤重新开始。 -接口相关的具体函数如下(也可以参考 [prepare.c](https://github.com/taosdata/TDengine/blob/develop/examples/c/prepare.c) 文件中使用对应函数的方式): +接口相关的具体函数如下(也可以参考 [prepare.c](https://github.com/taosdata/TDengine/blob/develop/docs/examples/c/prepare.c) 文件中使用对应函数的方式): - `TAOS_STMT* taos_stmt_init(TAOS *taos)` - **接口说明**:初始化一个预编译的 SQL 语句对象。 diff --git a/examples/c/CMakeLists.txt b/examples/c/CMakeLists.txt deleted file mode 100644 index 07fc2fd71b..0000000000 --- a/examples/c/CMakeLists.txt +++ /dev/null @@ -1,78 +0,0 @@ -PROJECT(TDengine) - -IF (TD_LINUX) - INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc) - AUX_SOURCE_DIRECTORY(. SRC) - - add_executable(tmq "") - add_executable(stream_demo "") - add_executable(schemaless "") - add_executable(prepare "") - add_executable(demo "") - add_executable(asyncdemo "") - - target_sources(tmq - PRIVATE - "tmq.c" - ) - - target_sources(stream_demo - PRIVATE - "stream_demo.c" - ) - - target_sources(schemaless - PRIVATE - "schemaless.c" - ) - - target_sources(prepare - PRIVATE - "prepare.c" - ) - - target_sources(demo - PRIVATE - "demo.c" - ) - - target_sources(asyncdemo - PRIVATE - "asyncdemo.c" - ) - - target_link_libraries(tmq - taos - ) - - target_link_libraries(stream_demo - taos - ) - - target_link_libraries(schemaless - taos - ) - - target_link_libraries(prepare - taos - ) - - target_link_libraries(demo - taos - ) - - target_link_libraries(asyncdemo - taos - ) - - SET_TARGET_PROPERTIES(tmq PROPERTIES OUTPUT_NAME tmq) - SET_TARGET_PROPERTIES(stream_demo PROPERTIES OUTPUT_NAME stream_demo) - SET_TARGET_PROPERTIES(schemaless PROPERTIES OUTPUT_NAME schemaless) - SET_TARGET_PROPERTIES(prepare PROPERTIES OUTPUT_NAME prepare) - SET_TARGET_PROPERTIES(demo PROPERTIES OUTPUT_NAME demo) - SET_TARGET_PROPERTIES(asyncdemo PROPERTIES OUTPUT_NAME asyncdemo) -ENDIF () -IF (TD_DARWIN) - INCLUDE_DIRECTORIES(. ${TD_SOURCE_DIR}/src/inc ${TD_SOURCE_DIR}/src/client/inc ${TD_SOURCE_DIR}/inc) - AUX_SOURCE_DIRECTORY(. SRC) -ENDIF () diff --git a/examples/c/makefile b/examples/c/makefile deleted file mode 100644 index 244d13fad7..0000000000 --- a/examples/c/makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2017 by TAOS Technologies, Inc. -# todo: library dependency, header file dependency - -ROOT=./ -TARGET=exe -LFLAGS = '-Wl,-rpath,/usr/local/taos/driver/' -ltaos -lpthread -lm -lrt -CFLAGS = -O3 -g -Wall -Wno-deprecated -fPIC -Wno-unused-result -Wconversion \ - -Wno-char-subscripts -D_REENTRANT -Wno-format -D_REENTRANT -DLINUX \ - -Wno-unused-function -D_M_X64 -I/usr/local/taos/include -std=gnu99 \ - -I/usr/local/include/cjson -all: $(TARGET) - -exe: - gcc $(CFLAGS) ./asyncdemo.c -o $(ROOT)asyncdemo $(LFLAGS) - gcc $(CFLAGS) ./demo.c -o $(ROOT)demo $(LFLAGS) - gcc $(CFLAGS) ./prepare.c -o $(ROOT)prepare $(LFLAGS) - gcc $(CFLAGS) ./stream_demo.c -o $(ROOT)stream_demo $(LFLAGS) - gcc $(CFLAGS) ./tmq.c -o $(ROOT)tmq $(LFLAGS) - gcc $(CFLAGS) ./schemaless.c -o $(ROOT)schemaless $(LFLAGS) - -clean: - rm $(ROOT)asyncdemo - rm $(ROOT)demo - rm $(ROOT)prepare - rm $(ROOT)stream_demo - rm $(ROOT)tmq - rm $(ROOT)schemaless From d93e15b552eab4db969f0a8585f03787e5150f7a Mon Sep 17 00:00:00 2001 From: Yaming Pei Date: Thu, 22 Aug 2024 11:58:04 +0800 Subject: [PATCH 3/6] optimized the cpp connector sample code page --- docs/en/14-reference/05-connectors/10-cpp.mdx | 36 +---- docs/zh/14-reference/05-connector/10-cpp.mdx | 124 +----------------- 2 files changed, 10 insertions(+), 150 deletions(-) diff --git a/docs/en/14-reference/05-connectors/10-cpp.mdx b/docs/en/14-reference/05-connectors/10-cpp.mdx index 441902ba21..4b7fcc5456 100644 --- a/docs/en/14-reference/05-connectors/10-cpp.mdx +++ b/docs/en/14-reference/05-connectors/10-cpp.mdx @@ -68,49 +68,23 @@ This section shows sample code for standard access methods to TDengine clusters ### Synchronous query example -
-Synchronous query - -[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) - -
+- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) ### Asynchronous query example -
-Asynchronous queries - -[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) - -
+- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) ### Parameter binding example -
-Parameter Binding - -[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) - -
+- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) ### Pattern-free writing example -
-Mode free write - -[C example] (https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) - -
+- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) ### Subscription and consumption example -
-Subscribe and consume - -```c -``` - -
+- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) :::info More example code and downloads are available at [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c). diff --git a/docs/zh/14-reference/05-connector/10-cpp.mdx b/docs/zh/14-reference/05-connector/10-cpp.mdx index 8d0ea8e9f2..2e683931a1 100644 --- a/docs/zh/14-reference/05-connector/10-cpp.mdx +++ b/docs/zh/14-reference/05-connector/10-cpp.mdx @@ -42,137 +42,23 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一 ### 同步查询示例 -
-同步查询 - -请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) - -格式化输出不同类型字段函数 taos_print_row -```c -int taos_print_row(char *str, TAOS_ROW row, TAOS_FIELD *fields, int num_fields) { - int32_t len = 0; - for (int i = 0; i < num_fields; ++i) { - if (i > 0) { - str[len++] = ' '; - } - - if (row[i] == NULL) { - len += sprintf(str + len, "%s", TSDB_DATA_NULL_STR); - continue; - } - - switch (fields[i].type) { - case TSDB_DATA_TYPE_TINYINT: - len += sprintf(str + len, "%d", *((int8_t *)row[i])); - break; - - case TSDB_DATA_TYPE_UTINYINT: - len += sprintf(str + len, "%u", *((uint8_t *)row[i])); - break; - - case TSDB_DATA_TYPE_SMALLINT: - len += sprintf(str + len, "%d", *((int16_t *)row[i])); - break; - - case TSDB_DATA_TYPE_USMALLINT: - len += sprintf(str + len, "%u", *((uint16_t *)row[i])); - break; - - case TSDB_DATA_TYPE_INT: - len += sprintf(str + len, "%d", *((int32_t *)row[i])); - break; - - case TSDB_DATA_TYPE_UINT: - len += sprintf(str + len, "%u", *((uint32_t *)row[i])); - break; - - case TSDB_DATA_TYPE_BIGINT: - len += sprintf(str + len, "%" PRId64, *((int64_t *)row[i])); - break; - - case TSDB_DATA_TYPE_UBIGINT: - len += sprintf(str + len, "%" PRIu64, *((uint64_t *)row[i])); - break; - - case TSDB_DATA_TYPE_FLOAT: { - float fv = 0; - fv = GET_FLOAT_VAL(row[i]); - len += sprintf(str + len, "%f", fv); - } break; - - case TSDB_DATA_TYPE_DOUBLE: { - double dv = 0; - dv = GET_DOUBLE_VAL(row[i]); - len += sprintf(str + len, "%lf", dv); - } break; - - case TSDB_DATA_TYPE_BINARY: - case TSDB_DATA_TYPE_NCHAR: { - int32_t charLen = varDataLen((char *)row[i] - VARSTR_HEADER_SIZE); - if (fields[i].type == TSDB_DATA_TYPE_BINARY) { - assert(charLen <= fields[i].bytes && charLen >= 0); - } else { - assert(charLen <= fields[i].bytes * TSDB_NCHAR_SIZE && charLen >= 0); - } - - memcpy(str + len, row[i], charLen); - len += charLen; - } break; - - case TSDB_DATA_TYPE_TIMESTAMP: - len += sprintf(str + len, "%" PRId64, *((int64_t *)row[i])); - break; - - case TSDB_DATA_TYPE_BOOL: - len += sprintf(str + len, "%d", *((int8_t *)row[i])); - default: - break; - } - } - str[len] = 0; - - return len; -} - -``` - -
+- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) ### 异步查询示例 -
-异步查询 - -请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) - -
+- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) ### 参数绑定示例 -
-参数绑定 - -请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) - -
+- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) ### 无模式写入示例 -
-无模式写入 - -请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) - -
+- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) ### 订阅和消费示例 -
-订阅和消费 - -请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) - -
+- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) :::info 更多示例代码及下载请见 [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c)。 From 720ab674312e0811d32c724b390b9300f91311a0 Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Thu, 22 Aug 2024 17:28:05 +0800 Subject: [PATCH 4/6] enh: clear useless asserts --- source/common/src/tdataformat.c | 10 +++--- source/dnode/vnode/src/tsdb/tsdbSnapInfo.c | 27 +++++---------- source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c | 11 ------ source/dnode/vnode/src/tsdb/tsdbUtil.c | 34 +++++++++---------- source/dnode/vnode/src/vnd/vnodeCfg.c | 1 - source/dnode/vnode/src/vnd/vnodeSnapshot.c | 15 ++++---- source/dnode/vnode/src/vnd/vnodeSvr.c | 14 ++++++-- source/dnode/vnode/src/vnd/vnodeSync.c | 12 ++++--- source/util/src/tlrucache.c | 29 ---------------- 9 files changed, 56 insertions(+), 97 deletions(-) diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index f726a5430e..1df68b5389 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -1403,7 +1403,6 @@ void tRowKeyAssign(SRowKey *pDst, SRowKey *pSrc) { pVal->val = pSrc->pks[i].val; } else { pVal->nData = pSrc->pks[i].nData; - ASSERT(pSrc->pks[i].pData != NULL); (void)memcpy(pVal->pData, pSrc->pks[i].pData, pVal->nData); } } @@ -2517,7 +2516,7 @@ static FORCE_INLINE int32_t tColDataUpdateValue70(SColData *pColData, uint8_t *p return tColDataPutValue(pColData, pData, nData); } } else { - ASSERT(0); + return TSDB_CODE_INVALID_PARA; } return 0; } @@ -2760,7 +2759,9 @@ int32_t tColDataCompress(SColData *colData, SColDataCompressInfo *info, SBuffer int32_t code; SBuffer local; - ASSERT(colData->nVal > 0); + if (!(colData->nVal > 0)) { + return TSDB_CODE_INVALID_PARA; + } (*info) = (SColDataCompressInfo){ .cmprAlg = info->cmprAlg, @@ -3217,7 +3218,6 @@ void tColDataArrGetRowKey(SColData *aColData, int32_t nColData, int32_t iRow, SR for (int i = 1; i < nColData; i++) { if (aColData[i].cflag & COL_IS_KEY) { - ASSERT(aColData->flag == HAS_VALUE); tColDataGetValue4(&aColData[i], iRow, &cv); key->pks[key->numOfPKs++] = cv.value; } else { @@ -3379,8 +3379,6 @@ static void tColDataMergeImpl(SColData *pColData, int32_t iStart, int32_t iEnd / iv < (pColData->nVal - 1) ? pColData->aOffset[iv + 1] - pColData->aOffset[iv] : pColData->nData - pColData->aOffset[iv]); } - // TODO - ASSERT(0); } else { if (iv != iStart) { (void)memcpy(&pColData->pData[TYPE_BYTES[pColData->type] * iStart], diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapInfo.c b/source/dnode/vnode/src/tsdb/tsdbSnapInfo.c index decf276bc6..4a73f53c77 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapInfo.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapInfo.c @@ -92,7 +92,6 @@ static int32_t tsdbTFileSetToFSetPartition(STFileSet* fset, STsdbFSetPartition** for (int32_t ftype = TSDB_FTYPE_MIN; ftype < TSDB_FTYPE_MAX; ++ftype) { if (fset->farr[ftype] == NULL) continue; typ = tsdbFTypeToFRangeType(ftype); - ASSERT(typ < TSDB_FSET_RANGE_TYP_MAX); STFile* f = fset->farr[ftype]->f; if (f->maxVer > fset->maxVerValid) { corrupt = true; @@ -103,8 +102,7 @@ static int32_t tsdbTFileSetToFSetPartition(STFileSet* fset, STsdbFSetPartition** } count++; SVersionRange vr = {.minVer = f->minVer, .maxVer = f->maxVer}; - code = TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); - ASSERT(code == 0); + (void)TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); } typ = TSDB_FSET_RANGE_TYP_STT; @@ -122,14 +120,12 @@ static int32_t tsdbTFileSetToFSetPartition(STFileSet* fset, STsdbFSetPartition** } count++; SVersionRange vr = {.minVer = f->minVer, .maxVer = f->maxVer}; - code = TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); - ASSERT(code == 0); + (void)TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); } } if (corrupt && count == 0) { SVersionRange vr = {.minVer = VERSION_MIN, .maxVer = fset->maxVerValid}; - code = TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); - ASSERT(code == 0); + (void)TARRAY2_SORT_INSERT(&p->verRanges[typ], vr, tVersionRangeCmprFn); } ppSP[0] = p; return 0; @@ -186,8 +182,7 @@ int32_t tsdbFSetPartListToRangeDiff(STsdbFSetPartList* pList, TFileSetRangeArray r->sver = maxVerValid + 1; r->ever = VERSION_MAX; tsdbDebug("range diff fid:%" PRId64 ", sver:%" PRId64 ", ever:%" PRId64, part->fid, r->sver, r->ever); - int32_t code = TARRAY2_SORT_INSERT(pDiff, r, tsdbTFileSetRangeCmprFn); - ASSERT(code == 0); + (void)TARRAY2_SORT_INSERT(pDiff, r, tsdbTFileSetRangeCmprFn); } ppRanges[0] = pDiff; @@ -360,9 +355,7 @@ static STsdbFSetPartList* tsdbSnapGetFSetPartList(STFileSystem* fs) { terrno = code; break; } - ASSERT(pItem != NULL); - code = TARRAY2_SORT_INSERT(pList, pItem, tsdbFSetPartCmprFn); - ASSERT(code == 0); + (void)TARRAY2_SORT_INSERT(pList, pItem, tsdbFSetPartCmprFn); } (void)taosThreadMutexUnlock(&fs->tsdb->mutex); @@ -400,7 +393,9 @@ static int32_t tsdbPartitionInfoInit(SVnode* pVnode, STsdbPartitionInfo* pInfo) pInfo->vgId = TD_VID(pVnode); pInfo->tsdbMaxCnt = (!VND_IS_RSMA(pVnode) ? 1 : TSDB_RETENTION_MAX); - ASSERT(sizeof(pInfo->subTyps) == sizeof(subTyps)); + if (!(sizeof(pInfo->subTyps) == sizeof(subTyps))) { + return TSDB_CODE_INVALID_PARA; + } memcpy(pInfo->subTyps, (char*)subTyps, sizeof(subTyps)); // fset partition list @@ -437,8 +432,7 @@ static int32_t tsdbPartitionInfoSerialize(STsdbPartitionInfo* pInfo, uint8_t* bu for (int32_t j = 0; j < pInfo->tsdbMaxCnt; ++j) { SSyncTLV* pSubHead = (void*)((char*)buf + offset); int32_t valOffset = offset + sizeof(*pSubHead); - ASSERT(pSubHead->val == (char*)buf + valOffset); - int32_t code = tSerializeTsdbFSetPartList(pSubHead->val, bufLen - valOffset, pInfo->pLists[j], &tlen); + int32_t code = tSerializeTsdbFSetPartList(pSubHead->val, bufLen - valOffset, pInfo->pLists[j], &tlen); if (code) { tsdbError("vgId:%d, failed to serialize fset partition list of tsdb %d since %s", pInfo->vgId, j, terrstr()); return code; @@ -574,7 +568,6 @@ static int32_t tsdbSnapPrepDealWithSnapInfo(SVnode* pVnode, SSnapshot* pSnap, ST } int32_t tsdbSnapPrepDescription(SVnode* pVnode, SSnapshot* pSnap) { - ASSERT(pSnap->type == TDMT_SYNC_PREP_SNAPSHOT || pSnap->type == TDMT_SYNC_PREP_SNAPSHOT_REPLY); STsdbPartitionInfo partitionInfo = {0}; int code = 0; STsdbPartitionInfo* pInfo = &partitionInfo; @@ -616,7 +609,6 @@ int32_t tsdbSnapPrepDescription(SVnode* pVnode, SSnapshot* pSnap) { goto _out; } offset += tlen; - ASSERT(offset <= bufLen); if ((tlen = tsdbRepOptsSerialize(&opts, buf + offset, bufLen - offset)) < 0) { code = tlen; @@ -624,7 +616,6 @@ int32_t tsdbSnapPrepDescription(SVnode* pVnode, SSnapshot* pSnap) { goto _out; } offset += tlen; - ASSERT(offset <= bufLen); // set header of info data SSyncTLV* pHead = pSnap->data; diff --git a/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c b/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c index 5b69638b36..55ddf64421 100644 --- a/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c +++ b/source/dnode/vnode/src/tsdb/tsdbSnapshotRAW.c @@ -170,11 +170,8 @@ static int64_t tsdbSnapRAWReadPeek(SDataFileRAWReader* reader) { } static SDataFileRAWReader* tsdbSnapRAWReaderIterNext(STsdbSnapRAWReader* reader) { - ASSERT(reader->dataIter->idx <= reader->dataIter->count); - while (reader->dataIter->idx < reader->dataIter->count) { SDataFileRAWReader* dataReader = TARRAY2_GET(reader->dataReaderArr, reader->dataIter->idx); - ASSERT(dataReader); if (dataReader->ctx->offset < dataReader->config->file.size) { return dataReader; } @@ -196,7 +193,6 @@ static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** pp // prepare int64_t dataLength = tsdbSnapRAWReadPeek(dataReader); - ASSERT(dataLength > 0); void* pBuf = taosMemoryCalloc(1, sizeof(SSnapDataHdr) + sizeof(STsdbDataRAWBlockHeader) + dataLength); if (pBuf == NULL) { @@ -217,7 +213,6 @@ static int32_t tsdbSnapRAWReadNext(STsdbSnapRAWReader* reader, SSnapDataHdr** pp // finish dataReader->ctx->offset += pBlock->dataLength; - ASSERT(dataReader->ctx->offset <= dataReader->config->file.size); ppData[0] = pBuf; _exit: @@ -247,8 +242,6 @@ static int32_t tsdbSnapRAWReadBegin(STsdbSnapRAWReader* reader) { int32_t code = 0; int32_t lino = 0; - ASSERT(reader->ctx->fset == NULL); - if (reader->ctx->fsetArrIdx < TARRAY2_SIZE(reader->fsetArr)) { reader->ctx->fset = TARRAY2_GET(reader->fsetArr, reader->ctx->fsetArrIdx++); reader->ctx->isDataDone = false; @@ -409,8 +402,6 @@ static int32_t tsdbSnapRAWWriteFileSetBegin(STsdbSnapRAWWriter* writer, int32_t int32_t code = 0; int32_t lino = 0; - ASSERT(writer->ctx->fsetWriteBegin == false); - STFileSet* fset = &(STFileSet){.fid = fid}; writer->ctx->fid = fid; @@ -555,8 +546,6 @@ _exit: } int32_t tsdbSnapRAWWrite(STsdbSnapRAWWriter* writer, SSnapDataHdr* hdr) { - ASSERT(hdr->type == SNAP_DATA_RAW); - int32_t code = 0; int32_t lino = 0; diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index f70b0aad26..8820a026e9 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -403,8 +403,6 @@ static const int32_t BLOCK_WITH_ALG_VER = 2; int32_t tPutBlockCol(SBuffer *buffer, const SBlockCol *pBlockCol, int32_t ver, uint32_t defaultCmprAlg) { int32_t code; - ASSERT(pBlockCol->flag && (pBlockCol->flag != HAS_NONE)); - if ((code = tBufferPutI16v(buffer, pBlockCol->cid))) return code; if ((code = tBufferPutI8(buffer, pBlockCol->type))) return code; if ((code = tBufferPutI8(buffer, pBlockCol->cflag))) return code; @@ -443,8 +441,6 @@ int32_t tGetBlockCol(SBufferReader *br, SBlockCol *pBlockCol, int32_t ver, uint3 if ((code = tBufferGetI8(br, &pBlockCol->flag))) return code; if ((code = tBufferGetI32v(br, &pBlockCol->szOrigin))) return code; - ASSERT(pBlockCol->flag && (pBlockCol->flag != HAS_NONE)); - pBlockCol->szBitmap = 0; pBlockCol->szOffset = 0; pBlockCol->szValue = 0; @@ -647,7 +643,6 @@ void tColRowGetPrimaryKey(SBlockData *pBlock, int32_t irow, SRowKey *key) { if (pColData->cflag & COL_IS_KEY) { SColVal cv; tColDataGetValue(pColData, irow, &cv); - ASSERT(COL_VAL_IS_VALUE(&cv)); key->pks[key->numOfPKs] = cv.value; key->numOfPKs++; } else { @@ -748,8 +743,6 @@ int32_t tsdbRowMergerAdd(SRowMerger *pMerger, TSDBROW *pRow, STSchema *pTSchema) jCol = 0; pTColumn = &pTSchema->columns[jCol++]; - ASSERT(pTColumn->type == TSDB_DATA_TYPE_TIMESTAMP); - *pColVal = COL_VAL_VALUE(pTColumn->colId, ((SValue){.type = pTColumn->type, .val = key.ts})); if (taosArrayPush(pMerger->pArray, pColVal) == NULL) { code = terrno; @@ -800,8 +793,6 @@ int32_t tsdbRowMergerAdd(SRowMerger *pMerger, TSDBROW *pRow, STSchema *pTSchema) pMerger->version = key.version; return 0; } else { - ASSERT(((SColVal *)pMerger->pArray->pData)->value.val == key.ts); - for (iCol = 1; iCol < pMerger->pTSchema->numOfCols && jCol < pTSchema->numOfCols; ++iCol) { pTColumn = &pMerger->pTSchema->columns[iCol]; if (pTSchema->columns[jCol].colId < pTColumn->colId) { @@ -852,7 +843,7 @@ int32_t tsdbRowMergerAdd(SRowMerger *pMerger, TSDBROW *pRow, STSchema *pTSchema) } } } else { - ASSERT(0 && "dup versions not allowed"); + return TSDB_CODE_INVALID_PARA; } } @@ -1164,7 +1155,9 @@ int32_t tBlockDataInit(SBlockData *pBlockData, TABLEID *pId, STSchema *pTSchema, while (pTColumn->colId < aCid[iCid]) { iColumn++; - ASSERT(iColumn < pTSchema->numOfCols); + if (!(iColumn < pTSchema->numOfCols)) { + return TSDB_CODE_INVALID_PARA; + } pTColumn = &pTSchema->columns[iColumn]; } @@ -1272,7 +1265,9 @@ _exit: int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTSchema, int64_t uid) { int32_t code = 0; - ASSERT(pBlockData->suid || pBlockData->uid); + if (!(pBlockData->suid || pBlockData->uid)) { + return TSDB_CODE_INVALID_PARA; + } // uid if (pBlockData->uid == 0) { @@ -1299,7 +1294,7 @@ int32_t tBlockDataAppendRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS code = tBlockDataUpsertBlockRow(pBlockData, pRow->pBlockData, pRow->iRow, 0 /* append */); if (code) goto _exit; } else { - ASSERT(0); + return TSDB_CODE_INVALID_PARA; } pBlockData->nRow++; @@ -1357,7 +1352,6 @@ int32_t tBlockDataUpsertRow(SBlockData *pBlockData, TSDBROW *pRow, STSchema *pTS #endif SColData *tBlockDataGetColData(SBlockData *pBlockData, int16_t cid) { - ASSERT(cid != PRIMARYKEY_TIMESTAMP_COL_ID); int32_t lidx = 0; int32_t ridx = pBlockData->nColData - 1; @@ -1627,7 +1621,9 @@ static int32_t tBlockDataCompressKeyPart(SBlockData *bData, SDiskDataHdr *hdr, S // primary keys for (hdr->numOfPKs = 0; hdr->numOfPKs < bData->nColData; hdr->numOfPKs++) { - ASSERT(hdr->numOfPKs <= TD_MAX_PK_COLS); + if (!(hdr->numOfPKs <= TD_MAX_PK_COLS)) { + return TSDB_CODE_INVALID_PARA; + } SBlockCol *blockCol = &hdr->primaryBlockCols[hdr->numOfPKs]; SColData *colData = tBlockDataGetColDataByIdx(bData, hdr->numOfPKs); @@ -1762,8 +1758,12 @@ int32_t tBlockDataDecompressKeyPart(const SDiskDataHdr *hdr, SBufferReader *br, for (int i = 0; i < hdr->numOfPKs; i++) { const SBlockCol *blockCol = &hdr->primaryBlockCols[i]; - ASSERT(blockCol->flag == HAS_VALUE); - ASSERT(blockCol->cflag & COL_IS_KEY); + if (!(blockCol->flag == HAS_VALUE)) { + TSDB_CHECK_CODE(code = TSDB_CODE_FILE_CORRUPTED, lino, _exit); + } + if (!(blockCol->cflag & COL_IS_KEY)) { + TSDB_CHECK_CODE(code = TSDB_CODE_FILE_CORRUPTED, lino, _exit); + } code = tBlockDataDecompressColData(hdr, blockCol, br, blockData, assist); TSDB_CHECK_CODE(code, lino, _exit); diff --git a/source/dnode/vnode/src/vnd/vnodeCfg.c b/source/dnode/vnode/src/vnd/vnodeCfg.c index e2791d8a00..d90badc34c 100644 --- a/source/dnode/vnode/src/vnd/vnodeCfg.c +++ b/source/dnode/vnode/src/vnd/vnodeCfg.c @@ -248,7 +248,6 @@ int vnodeDecodeConfig(const SJson *pJson, void *pObj) { } for (int32_t i = 0; i < nRetention; ++i) { SJson *pNodeRetention = tjsonGetArrayItem(pNodeRetentions, i); - ASSERT(pNodeRetention != NULL); tjsonGetNumberValue(pNodeRetention, "freq", (pCfg->tsdbCfg.retentions)[i].freq, code); if (code) return code; tjsonGetNumberValue(pNodeRetention, "freqUnit", (pCfg->tsdbCfg.retentions)[i].freqUnit, code); diff --git a/source/dnode/vnode/src/vnd/vnodeSnapshot.c b/source/dnode/vnode/src/vnd/vnodeSnapshot.c index 28e7ae97ca..9a5b98e31b 100644 --- a/source/dnode/vnode/src/vnd/vnodeSnapshot.c +++ b/source/dnode/vnode/src/vnd/vnodeSnapshot.c @@ -73,7 +73,10 @@ struct SVSnapReader { }; static TFileSetRangeArray **vnodeSnapReaderGetTsdbRanges(SVSnapReader *pReader, int32_t tsdbTyp) { - ASSERTS(sizeof(pReader->pRsmaRanges) / sizeof(pReader->pRsmaRanges[0]) == 2, "Unexpected array size"); + if (!(sizeof(pReader->pRsmaRanges) / sizeof(pReader->pRsmaRanges[0]) == 2)) { + terrno = TSDB_CODE_INVALID_PARA; + return NULL; + } switch (tsdbTyp) { case SNAP_DATA_TSDB: return &pReader->pRanges; @@ -147,7 +150,6 @@ static int32_t vnodeSnapReaderDealWithSnapInfo(SVSnapReader *pReader, SSnapshotP pReader->tsdbRAWDone = true; } - ASSERT(pReader->tsdbDone != pReader->tsdbRAWDone); vInfo("vgId:%d, vnode snap writer enabled replication mode: %s", TD_VID(pVnode), (pReader->tsdbDone ? "raw" : "normal")); } @@ -177,7 +179,6 @@ int32_t vnodeSnapReaderOpen(SVnode *pVnode, SSnapshotParam *pParam, SVSnapReader // open tsdb snapshot raw reader if (!pReader->tsdbRAWDone) { - ASSERT(pReader->sver == 0); code = tsdbSnapRAWReaderOpen(pVnode->pTsdb, ever, SNAP_DATA_RAW, &pReader->pTsdbRAWReader); if (code) goto _exit; } @@ -339,7 +340,6 @@ int32_t vnodeSnapRead(SVSnapReader *pReader, uint8_t **ppData, uint32_t *nData) if (!pReader->tsdbRAWDone) { // open if not if (pReader->pTsdbRAWReader == NULL) { - ASSERT(pReader->sver == 0); code = tsdbSnapRAWReaderOpen(pReader->pVnode->pTsdb, pReader->ever, SNAP_DATA_RAW, &pReader->pTsdbRAWReader); TSDB_CHECK_CODE(code, lino, _exit); } @@ -518,7 +518,6 @@ struct SVSnapWriter { }; TFileSetRangeArray **vnodeSnapWriterGetTsdbRanges(SVSnapWriter *pWriter, int32_t tsdbTyp) { - ASSERTS(sizeof(pWriter->pRsmaRanges) / sizeof(pWriter->pRsmaRanges[0]) == 2, "Unexpected array size"); switch (tsdbTyp) { case SNAP_DATA_TSDB: return &pWriter->pRanges; @@ -674,7 +673,6 @@ int32_t vnodeSnapWriterClose(SVSnapWriter *pWriter, int8_t rollback, SSnapshot * // commit json if (!rollback) { - ASSERT(pVnode->config.vgId == pWriter->info.config.vgId); pWriter->info.state.committed = pWriter->ever; pVnode->config = pWriter->info.config; pVnode->state = (SVState){.committed = pWriter->info.state.committed, @@ -794,7 +792,9 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { SSnapDataHdr *pHdr = (SSnapDataHdr *)pData; SVnode *pVnode = pWriter->pVnode; - ASSERT(pHdr->size + sizeof(SSnapDataHdr) == nData); + if (!(pHdr->size + sizeof(SSnapDataHdr) == nData)) { + return TSDB_CODE_INVALID_PARA; + } if (pHdr->index != pWriter->index + 1) { vError("vgId:%d, unexpected vnode snapshot msg. index:%" PRId64 ", expected index:%" PRId64, TD_VID(pVnode), @@ -837,7 +837,6 @@ int32_t vnodeSnapWrite(SVSnapWriter *pWriter, uint8_t *pData, uint32_t nData) { case SNAP_DATA_RAW: { // tsdb if (pWriter->pTsdbSnapRAWWriter == NULL) { - ASSERT(pWriter->sver == 0); code = tsdbSnapRAWWriterOpen(pVnode->pTsdb, pWriter->ever, &pWriter->pTsdbSnapRAWWriter); TSDB_CHECK_CODE(code, lino, _exit); } diff --git a/source/dnode/vnode/src/vnd/vnodeSvr.c b/source/dnode/vnode/src/vnd/vnodeSvr.c index aae3da7ec4..75db6e2925 100644 --- a/source/dnode/vnode/src/vnd/vnodeSvr.c +++ b/source/dnode/vnode/src/vnd/vnodeSvr.c @@ -540,8 +540,13 @@ int32_t vnodeProcessWriteMsg(SVnode *pVnode, SRpcMsg *pMsg, int64_t ver, SRpcMsg TD_VID(pVnode), TMSG_INFO(pMsg->msgType), ver, pVnode->state.applied, pVnode->state.applyTerm, pMsg->info.conn.applyTerm); - ASSERT(pVnode->state.applyTerm <= pMsg->info.conn.applyTerm); - ASSERTS(pVnode->state.applied + 1 == ver, "applied:%" PRId64 ", ver:%" PRId64, pVnode->state.applied, ver); + if (!(pVnode->state.applyTerm <= pMsg->info.conn.applyTerm)) { + return terrno = TSDB_CODE_INTERNAL_ERROR; + } + + if (!(pVnode->state.applied + 1 == ver)) { + return terrno = TSDB_CODE_INTERNAL_ERROR; + } atomic_store_64(&pVnode->state.applied, ver); atomic_store_64(&pVnode->state.applyTerm, pMsg->info.conn.applyTerm); @@ -981,7 +986,10 @@ static int32_t vnodeProcessFetchTtlExpiredTbs(SVnode *pVnode, int64_t ver, void goto _end; } - ASSERT(ttlReq.nUids == taosArrayGetSize(ttlReq.pTbUids)); + if (!(ttlReq.nUids == taosArrayGetSize(ttlReq.pTbUids))) { + terrno = TSDB_CODE_INVALID_MSG; + goto _end; + } tb_uid_t suid; char ctbName[TSDB_TABLE_NAME_LEN]; diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 31e44f5912..8c41ceba57 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -117,7 +117,9 @@ static int32_t inline vnodeProposeMsg(SVnode *pVnode, SRpcMsg *pMsg, bool isWeak int32_t code = syncPropose(pVnode->sync, pMsg, isWeak, &seq); bool wait = (code == 0 && vnodeIsMsgBlock(pMsg->msgType)); if (wait) { - ASSERT(!pVnode->blocked); + if (pVnode->blocked) { + return TSDB_CODE_INTERNAL_ERROR; + } pVnode->blocked = true; pVnode->blockSec = taosGetTimestampSec(); pVnode->blockSeq = seq; @@ -175,7 +177,6 @@ static void inline vnodeProposeBatchMsg(SVnode *pVnode, SRpcMsg **pMsgArr, bool int32_t code = syncProposeBatch(pVnode->sync, pMsgArr, pIsWeakArr, *arrSize); bool wait = (code == 0 && vnodeIsBlockMsg(pLastMsg->msgType)); if (wait) { - ASSERT(!pVnode->blocked); pVnode->blocked = true; } (void)taosThreadMutexUnlock(&pVnode->lock); @@ -543,7 +544,11 @@ static void vnodeRestoreFinish(const SSyncFSM *pFsm, const SyncIndex commitIdx) do { appliedIdx = vnodeSyncAppliedIndex(pFsm); - ASSERT(appliedIdx <= commitIdx); + if (appliedIdx > commitIdx) { + vError("vgId:%d, restore failed since applied-index:%" PRId64 " is larger than commit-index:%" PRId64, vgId, + appliedIdx, commitIdx); + break; + } if (appliedIdx == commitIdx) { vInfo("vgId:%d, no items to be applied, restore finish", pVnode->config.vgId); break; @@ -555,7 +560,6 @@ static void vnodeRestoreFinish(const SSyncFSM *pFsm, const SyncIndex commitIdx) } } while (true); - ASSERT(commitIdx == vnodeSyncAppliedIndex(pFsm)); (void)walApplyVer(pVnode->pWal, commitIdx); pVnode->restored = true; diff --git a/source/util/src/tlrucache.c b/source/util/src/tlrucache.c index 9c783f0cf6..ddcf4aebfa 100644 --- a/source/util/src/tlrucache.c +++ b/source/util/src/tlrucache.c @@ -87,14 +87,11 @@ struct SLRUEntry { #define TAOS_LRU_ENTRY_REF(h) (++(h)->refs) static bool taosLRUEntryUnref(SLRUEntry *entry) { - // ASSERT(entry->refs > 0); --entry->refs; return entry->refs == 0; } static void taosLRUEntryFree(SLRUEntry *entry) { - // ASSERT(entry->refs == 0); - if (entry->deleter) { (*entry->deleter)(entry->keyData, entry->keyLength, entry->value, entry->ud); } @@ -129,7 +126,6 @@ static void taosLRUEntryTableApply(SLRUEntryTable *table, _taos_lru_table_func_t SLRUEntry *h = table->list[i]; while (h) { SLRUEntry *n = h->nextHash; - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(h)); func(h); h = n; } @@ -155,7 +151,6 @@ static int taosLRUEntryTableApplyF(SLRUEntryTable *table, _taos_lru_functor_t fu SLRUEntry *h = table->list[i]; while (h) { SLRUEntry *n = h->nextHash; - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(h)); ret = functor(h->keyData, h->keyLength, h->value, ud); if (ret) { return ret; @@ -205,7 +200,6 @@ static void taosLRUEntryTableResize(SLRUEntryTable *table) { ++count; } } - // ASSERT(table->elems == count); taosMemoryFree(table->list); table->list = newList; @@ -261,17 +255,13 @@ struct SLRUCacheShard { static void taosLRUCacheShardMaintainPoolSize(SLRUCacheShard *shard) { while (shard->highPriPoolUsage > shard->highPriPoolCapacity) { shard->lruLowPri = shard->lruLowPri->next; - // ASSERT(shard->lruLowPri != &shard->lru); TAOS_LRU_ENTRY_SET_IN_HIGH_POOL(shard->lruLowPri, false); - // ASSERT(shard->highPriPoolUsage >= shard->lruLowPri->totalCharge); shard->highPriPoolUsage -= shard->lruLowPri->totalCharge; } } static void taosLRUCacheShardLRUInsert(SLRUCacheShard *shard, SLRUEntry *e) { - // ASSERT(e->next == NULL && e->prev == NULL); - if (shard->highPriPoolRatio > 0 && (TAOS_LRU_ENTRY_IS_HIGH_PRI(e) || TAOS_LRU_ENTRY_HAS_HIT(e))) { e->next = &shard->lru; e->prev = shard->lru.prev; @@ -297,8 +287,6 @@ static void taosLRUCacheShardLRUInsert(SLRUCacheShard *shard, SLRUEntry *e) { } static void taosLRUCacheShardLRURemove(SLRUCacheShard *shard, SLRUEntry *e) { - // ASSERT(e->next && e->prev); - if (shard->lruLowPri == e) { shard->lruLowPri = e->prev; } @@ -306,10 +294,8 @@ static void taosLRUCacheShardLRURemove(SLRUCacheShard *shard, SLRUEntry *e) { e->prev->next = e->next; e->prev = e->next = NULL; - // ASSERT(shard->lruUsage >= e->totalCharge); shard->lruUsage -= e->totalCharge; if (TAOS_LRU_ENTRY_IN_HIGH_POOL(e)) { - // ASSERT(shard->highPriPoolUsage >= e->totalCharge); shard->highPriPoolUsage -= e->totalCharge; } } @@ -317,13 +303,11 @@ static void taosLRUCacheShardLRURemove(SLRUCacheShard *shard, SLRUEntry *e) { static void taosLRUCacheShardEvictLRU(SLRUCacheShard *shard, size_t charge, SArray *deleted) { while (shard->usage + charge > shard->capacity && shard->lru.next != &shard->lru) { SLRUEntry *old = shard->lru.next; - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(old) && !TAOS_LRU_ENTRY_HAS_REFS(old)); taosLRUCacheShardLRURemove(shard, old); (void)taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(old, false); - // ASSERT(shard->usage >= old->totalCharge); shard->usage -= old->totalCharge; (void)taosArrayPush(deleted, &old); @@ -414,11 +398,9 @@ static LRUStatus taosLRUCacheShardInsertEntry(SLRUCacheShard *shard, SLRUEntry * if (old != NULL) { status = TAOS_LRU_STATUS_OK_OVERWRITTEN; - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(old)); TAOS_LRU_ENTRY_SET_IN_CACHE(old, false); if (!TAOS_LRU_ENTRY_HAS_REFS(old)) { taosLRUCacheShardLRURemove(shard, old); - // ASSERT(shard->usage >= old->totalCharge); shard->usage -= old->totalCharge; (void)taosArrayPush(lastReferenceList, &old); @@ -479,7 +461,6 @@ static LRUHandle *taosLRUCacheShardLookup(SLRUCacheShard *shard, const void *key (void)taosThreadMutexLock(&shard->mutex); e = taosLRUEntryTableLookup(&shard->table, key, keyLen, hash); if (e != NULL) { - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(e)); if (!TAOS_LRU_ENTRY_HAS_REFS(e)) { taosLRUCacheShardLRURemove(shard, e); } @@ -498,12 +479,10 @@ static void taosLRUCacheShardErase(SLRUCacheShard *shard, const void *key, size_ SLRUEntry *e = taosLRUEntryTableRemove(&shard->table, key, keyLen, hash); if (e != NULL) { - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(e)); TAOS_LRU_ENTRY_SET_IN_CACHE(e, false); if (!TAOS_LRU_ENTRY_HAS_REFS(e)) { taosLRUCacheShardLRURemove(shard, e); - // ASSERT(shard->usage >= e->totalCharge); shard->usage -= e->totalCharge; lastReference = true; } @@ -535,11 +514,9 @@ static void taosLRUCacheShardEraseUnrefEntries(SLRUCacheShard *shard) { while (shard->lru.next != &shard->lru) { SLRUEntry *old = shard->lru.next; - // ASSERT(TAOS_LRU_ENTRY_IN_CACHE(old) && !TAOS_LRU_ENTRY_HAS_REFS(old)); taosLRUCacheShardLRURemove(shard, old); (void)taosLRUEntryTableRemove(&shard->table, old->keyData, old->keyLength, old->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(old, false); - // ASSERT(shard->usage >= old->totalCharge); shard->usage -= old->totalCharge; (void)taosArrayPush(lastReferenceList, &old); @@ -560,7 +537,6 @@ static bool taosLRUCacheShardRef(SLRUCacheShard *shard, LRUHandle *handle) { SLRUEntry *e = (SLRUEntry *)handle; (void)taosThreadMutexLock(&shard->mutex); - // ASSERT(TAOS_LRU_ENTRY_HAS_REFS(e)); TAOS_LRU_ENTRY_REF(e); (void)taosThreadMutexUnlock(&shard->mutex); @@ -581,8 +557,6 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b lastReference = taosLRUEntryUnref(e); if (lastReference && TAOS_LRU_ENTRY_IN_CACHE(e)) { if (shard->usage > shard->capacity || eraseIfLastRef) { - // ASSERT(shard->lru.next == &shard->lru || eraseIfLastRef); - (void)taosLRUEntryTableRemove(&shard->table, e->keyData, e->keyLength, e->hash); TAOS_LRU_ENTRY_SET_IN_CACHE(e, false); } else { @@ -593,7 +567,6 @@ static bool taosLRUCacheShardRelease(SLRUCacheShard *shard, LRUHandle *handle, b } if (lastReference && e->value) { - // ASSERT(shard->usage >= e->totalCharge); shard->usage -= e->totalCharge; } @@ -631,7 +604,6 @@ static size_t taosLRUCacheShardGetPinnedUsage(SLRUCacheShard *shard) { (void)taosThreadMutexLock(&shard->mutex); - // ASSERT(shard->usage >= shard->lruUsage); usage = shard->usage - shard->lruUsage; (void)taosThreadMutexUnlock(&shard->mutex); @@ -723,7 +695,6 @@ void taosLRUCacheCleanup(SLRUCache *cache) { if (cache) { if (cache->shards) { int numShards = cache->numShards; - // ASSERT(numShards > 0); for (int i = 0; i < numShards; ++i) { taosLRUCacheShardCleanup(&cache->shards[i]); } From 235fb59ede06b94d5469416d2d3394ed6390ccee Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Thu, 22 Aug 2024 18:02:23 +0800 Subject: [PATCH 5/6] fix: (ttl) continue flush cache after error occurs --- include/util/taoserror.h | 1 + source/dnode/vnode/src/meta/metaTtl.c | 36 ++++++++++++++++----------- source/util/src/terror.c | 5 ++-- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 1911c48d26..58f906e3f3 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -530,6 +530,7 @@ int32_t taosGetErrSize(); #define TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x0536) #define TSDB_CODE_VND_ARB_NOT_SYNCED TAOS_DEF_ERROR_CODE(0, 0x0537) // internal #define TSDB_CODE_VND_WRITE_DISABLED TAOS_DEF_ERROR_CODE(0, 0x0538) // internal +#define TSDB_CODE_VND_TTL_FLUSH_INCOMPLETION TAOS_DEF_ERROR_CODE(0, 0x0539) // internal // tsdb #define TSDB_CODE_TDB_INVALID_TABLE_ID TAOS_DEF_ERROR_CODE(0, 0x0600) diff --git a/source/dnode/vnode/src/meta/metaTtl.c b/source/dnode/vnode/src/meta/metaTtl.c index cd1aa7bcad..0b5b9280df 100644 --- a/source/dnode/vnode/src/meta/metaTtl.c +++ b/source/dnode/vnode/src/meta/metaTtl.c @@ -408,7 +408,7 @@ int32_t ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { int64_t startNs = taosGetTimestampNs(); int64_t endNs = startNs; - metaTrace("%s, ttl mgr flush start. dirty uids:%d", pTtlMgr->logPrefix, taosHashGetSize(pTtlMgr->pDirtyUids)); + metaTrace("%s, ttl mgr flush start. num of dirty uids:%d", pTtlMgr->logPrefix, taosHashGetSize(pTtlMgr->pDirtyUids)); int32_t code = TSDB_CODE_SUCCESS; @@ -419,13 +419,8 @@ int32_t ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { STtlCacheEntry *cacheEntry = taosHashGet(pTtlMgr->pTtlCache, pUid, sizeof(*pUid)); if (cacheEntry == NULL) { - metaInfo("%s, ttlMgr flush failed to get ttl cache, uid: %" PRId64 ", type: %d", pTtlMgr->logPrefix, *pUid, + metaError("%s, ttlMgr flush failed to get ttl cache, uid: %" PRId64 ", type: %d", pTtlMgr->logPrefix, *pUid, pEntry->type); - code = taosHashRemove(pTtlMgr->pDirtyUids, pUid, sizeof(*pUid)); - if (TSDB_CODE_SUCCESS != code) { - metaError("%s, ttlMgr flush failed to remove dirty uid since %s", pTtlMgr->logPrefix, tstrerror(code)); - goto _out; - } continue; } @@ -437,31 +432,35 @@ int32_t ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { if (pEntry->type == ENTRY_TYPE_UPSERT) { // delete old key & upsert new key - (void)tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); // maybe first insert, ignore error + code = tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); // maybe first insert, ignore error + if (TSDB_CODE_SUCCESS != code && TSDB_CODE_NOT_FOUND != code) { + metaError("%s, ttlMgr flush failed to delete since %s", pTtlMgr->logPrefix, tstrerror(code)); + continue; + } code = tdbTbUpsert(pTtlMgr->pTtlIdx, &ttlKeyDirty, sizeof(ttlKeyDirty), &cacheEntry->ttlDaysDirty, sizeof(cacheEntry->ttlDaysDirty), pTxn); if (TSDB_CODE_SUCCESS != code) { metaError("%s, ttlMgr flush failed to upsert since %s", pTtlMgr->logPrefix, tstrerror(code)); - goto _out; + continue; } cacheEntry->ttlDays = cacheEntry->ttlDaysDirty; cacheEntry->changeTimeMs = cacheEntry->changeTimeMsDirty; } else if (pEntry->type == ENTRY_TYPE_DELETE) { code = tdbTbDelete(pTtlMgr->pTtlIdx, &ttlKey, sizeof(ttlKey), pTxn); - if (TSDB_CODE_SUCCESS != code) { + if (TSDB_CODE_SUCCESS != code && TSDB_CODE_NOT_FOUND != code) { metaError("%s, ttlMgr flush failed to delete since %s", pTtlMgr->logPrefix, tstrerror(code)); - goto _out; + continue; } code = taosHashRemove(pTtlMgr->pTtlCache, pUid, sizeof(*pUid)); if (TSDB_CODE_SUCCESS != code) { metaError("%s, ttlMgr flush failed to remove cache since %s", pTtlMgr->logPrefix, tstrerror(code)); - goto _out; + continue; } } else { metaError("%s, ttlMgr flush failed, unknown type: %d", pTtlMgr->logPrefix, pEntry->type); - goto _out; + continue; } metaDebug("isdel:%d", pEntry->type == ENTRY_TYPE_DELETE); @@ -471,11 +470,18 @@ int32_t ttlMgrFlush(STtlManger *pTtlMgr, TXN *pTxn) { code = taosHashRemove(pTtlMgr->pDirtyUids, pUid, sizeof(*pUid)); if (TSDB_CODE_SUCCESS != code) { metaError("%s, ttlMgr flush failed to remove dirty uid since %s", pTtlMgr->logPrefix, tstrerror(code)); - goto _out; + continue; } } - taosHashClear(pTtlMgr->pDirtyUids); + int32_t count = taosHashGetSize(pTtlMgr->pDirtyUids); + if (count != 0) { + taosHashClear(pTtlMgr->pDirtyUids); + metaError("%s, ttlMgr flush failed, dirty uids not empty, count: %d", pTtlMgr->logPrefix, count); + code = TSDB_CODE_VND_TTL_FLUSH_INCOMPLETION; + + goto _out; + } code = TSDB_CODE_SUCCESS; diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 396abf21a7..0b6d2674fd 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -57,8 +57,8 @@ TAOS_DEFINE_ERROR(TSDB_CODE_RPC_MAX_SESSIONS, "rpc open too many ses TAOS_DEFINE_ERROR(TSDB_CODE_RPC_NETWORK_ERROR, "rpc network error") TAOS_DEFINE_ERROR(TSDB_CODE_RPC_NETWORK_BUSY, "rpc network busy") TAOS_DEFINE_ERROR(TSDB_CODE_HTTP_MODULE_QUIT, "http-report already quit") -TAOS_DEFINE_ERROR(TSDB_CODE_RPC_MODULE_QUIT, "rpc module already quit") -TAOS_DEFINE_ERROR(TSDB_CODE_RPC_ASYNC_MODULE_QUIT, "rpc async module already quit") +TAOS_DEFINE_ERROR(TSDB_CODE_RPC_MODULE_QUIT, "rpc module already quit") +TAOS_DEFINE_ERROR(TSDB_CODE_RPC_ASYNC_MODULE_QUIT, "rpc async module already quit") //common & util TAOS_DEFINE_ERROR(TSDB_CODE_TIME_UNSYNCED, "Client and server's time is not synchronized") @@ -411,6 +411,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_VND_META_DATA_UNSAFE_DELETE, "Single replica vnode TAOS_DEFINE_ERROR(TSDB_CODE_VND_ARB_NOT_SYNCED, "Vgroup peer is not synced") TAOS_DEFINE_ERROR(TSDB_CODE_VND_WRITE_DISABLED, "Vnode write is disabled for snapshot") TAOS_DEFINE_ERROR(TSDB_CODE_VND_COLUMN_COMPRESS_ALREADY_EXIST,"Same with old param") +TAOS_DEFINE_ERROR(TSDB_CODE_VND_TTL_FLUSH_INCOMPLETION, "Failed to flush all ttl modification to tdb") // tsdb From 3b6b873e33278e7c7c14d648b6c63fcbf5863f6a Mon Sep 17 00:00:00 2001 From: sheyanjie-qq <249478495@qq.com> Date: Thu, 22 Aug 2024 18:15:02 +0800 Subject: [PATCH 6/6] move sample code to docs/example --- docs/en/14-reference/05-connectors/10-cpp.mdx | 24 +--- .../en/14-reference/05-connectors/14-java.mdx | 4 +- .../en/14-reference/05-connectors/26-rust.mdx | 4 +- .../JDBC/JDBCDemo/README-jdbc-windows.md | 0 .../examples}/JDBC/JDBCDemo/pom.xml | 0 .../examples}/JDBC/JDBCDemo/readme.md | 0 .../com/taosdata/example/ConsumerLoop.java | 0 .../com/taosdata/example/GeometryDemo.java | 0 .../com/taosdata/example/JdbcBasicDemo.java | 0 .../java/com/taosdata/example/JdbcDemo.java | 0 .../com/taosdata/example/JdbcRestfulDemo.java | 0 .../example/ParameterBindingDemo.java | 0 .../example/ParameterBindingFullDemo.java | 0 .../main/java/com/taosdata/example/Util.java | 0 .../example/WSParameterBindingDemo.java | 0 .../example/WSParameterBindingFullDemo.java | 0 .../JDBC/SpringJdbcTemplate/.gitignore | 0 .../examples}/JDBC/SpringJdbcTemplate/pom.xml | 0 .../JDBC/SpringJdbcTemplate/readme.md | 0 .../taosdata/example/jdbcTemplate/App.java | 0 .../jdbcTemplate/dao/ExecuteAsStatement.java | 0 .../dao/ExecuteAsStatementImpl.java | 0 .../example/jdbcTemplate/dao/WeatherDao.java | 0 .../jdbcTemplate/dao/WeatherDaoImpl.java | 0 .../example/jdbcTemplate/domain/Weather.java | 0 .../src/main/resources/applicationContext.xml | 0 .../jdbcTemplate/BatcherInsertTest.java | 0 .../JDBC/connectionPools/README-cn.md | 0 .../examples}/JDBC/connectionPools/pom.xml | 0 .../taosdata/example/ConnectionPoolDemo.java | 0 .../java/com/taosdata/example/DruidDemo.java | 0 .../java/com/taosdata/example/HikariDemo.java | 0 .../com/taosdata/example/ProxoolDemo.java | 0 .../taosdata/example/common/InsertTask.java | 0 .../taosdata/example/pool/C3p0Builder.java | 0 .../taosdata/example/pool/DbcpBuilder.java | 0 .../example/pool/DruidPoolBuilder.java | 0 .../example/pool/HikariCpBuilder.java | 0 .../src/main/resources/log4j.properties | 0 .../src/main/resources/proxool.xml | 0 .../examples}/JDBC/consumer-demo/pom.xml | 0 .../examples}/JDBC/consumer-demo/readme.md | 0 .../src/main/java/com/taosdata/Bean.java | 0 .../java/com/taosdata/BeanDeserializer.java | 0 .../src/main/java/com/taosdata/Config.java | 0 .../main/java/com/taosdata/ConsumerDemo.java | 0 .../src/main/java/com/taosdata/Worker.java | 0 .../JDBC/mybatisplus-demo/.gitignore | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../examples}/JDBC/mybatisplus-demo/mvnw | 0 .../examples}/JDBC/mybatisplus-demo/mvnw.cmd | 0 .../examples}/JDBC/mybatisplus-demo/pom.xml | 0 .../examples}/JDBC/mybatisplus-demo/readme | 0 .../MybatisplusDemoApplication.java | 0 .../config/MybatisPlusConfig.java | 0 .../mybatisplusdemo/domain/Temperature.java | 0 .../mybatisplusdemo/domain/Weather.java | 0 .../mapper/TemperatureMapper.java | 0 .../mybatisplusdemo/mapper/WeatherMapper.java | 0 .../src/main/resources/application.yml | 0 .../mapper/TemperatureMapperTest.java | 0 .../mapper/WeatherMapperTest.java | 0 {examples => docs/examples}/JDBC/readme.md | 0 .../examples}/JDBC/springbootdemo/.gitignore | 0 .../examples}/JDBC/springbootdemo/mvnw | 0 .../examples}/JDBC/springbootdemo/mvnw.cmd | 0 .../examples}/JDBC/springbootdemo/pom.xml | 0 .../examples}/JDBC/springbootdemo/readme.md | 0 .../SpringbootdemoApplication.java | 0 .../controller/WeatherController.java | 0 .../springbootdemo/dao/WeatherMapper.java | 0 .../springbootdemo/dao/WeatherMapper.xml | 0 .../springbootdemo/domain/Weather.java | 0 .../service/WeatherService.java | 0 .../springbootdemo/util/TaosAspect.java | 0 .../src/main/resources/application.properties | 0 .../examples}/JDBC/taosdemo/.gitignore | 0 .../.mvn/wrapper/MavenWrapperDownloader.java | 0 .../taosdemo/.mvn/wrapper/maven-wrapper.jar | Bin .../.mvn/wrapper/maven-wrapper.properties | 0 .../examples}/JDBC/taosdemo/mvnw | 0 .../examples}/JDBC/taosdemo/mvnw.cmd | 0 .../examples}/JDBC/taosdemo/pom.xml | 0 .../examples}/JDBC/taosdemo/readme.md | 0 .../taosdemo/TaosDemoApplication.java | 0 .../components/DataSourceFactory.java | 0 .../components/JdbcTaosdemoConfig.java | 0 .../taosdemo/components/JsonConfig.java | 0 .../taosdata/taosdemo/dao/DatabaseMapper.java | 0 .../taosdemo/dao/DatabaseMapperImpl.java | 0 .../taosdata/taosdemo/dao/SubTableMapper.java | 0 .../taosdemo/dao/SubTableMapperImpl.java | 0 .../taosdemo/dao/SuperTableMapper.java | 0 .../taosdemo/dao/SuperTableMapperImpl.java | 0 .../taosdata/taosdemo/dao/TableMapper.java | 0 .../taosdemo/dao/TableMapperImpl.java | 0 .../taosdata/taosdemo/domain/FieldMeta.java | 0 .../taosdata/taosdemo/domain/FieldValue.java | 0 .../taosdata/taosdemo/domain/RowValue.java | 0 .../taosdemo/domain/SubTableMeta.java | 0 .../taosdemo/domain/SubTableValue.java | 0 .../taosdemo/domain/SuperTableMeta.java | 0 .../taosdata/taosdemo/domain/TableMeta.java | 0 .../taosdata/taosdemo/domain/TableValue.java | 0 .../com/taosdata/taosdemo/domain/TagMeta.java | 0 .../taosdata/taosdemo/domain/TagValue.java | 0 .../taosdemo/service/AbstractService.java | 0 .../taosdemo/service/DatabaseService.java | 0 .../taosdemo/service/QueryService.java | 0 .../taosdemo/service/SqlExecuteTask.java | 0 .../taosdemo/service/SubTableService.java | 0 .../taosdemo/service/SuperTableService.java | 0 .../taosdemo/service/TableService.java | 0 .../service/data/FieldValueGenerator.java | 0 .../service/data/SubTableMetaGenerator.java | 0 .../service/data/SubTableValueGenerator.java | 0 .../service/data/SuperTableMetaGenerator.java | 0 .../service/data/TagValueGenerator.java | 0 .../taosdemo/utils/DataGenerator.java | 0 .../com/taosdata/taosdemo/utils/Printer.java | 0 .../taosdata/taosdemo/utils/SqlSpeller.java | 0 .../taosdemo/utils/TaosConstants.java | 0 .../taosdemo/utils/TimeStampUtil.java | 0 .../src/main/resources/application.properties | 0 .../taosdemo/src/main/resources/insert.json | 0 .../src/main/resources/log4j.properties | 0 .../taosdemo/src/main/resources/query.json | 0 .../src/main/resources/templates/index.html | 0 .../taosdemo/service/DatabaseServiceTest.java | 0 .../taosdemo/service/QueryServiceTest.java | 0 .../taosdemo/service/SubTableServiceTest.java | 0 .../service/SuperTableServiceTest.java | 0 .../service/data/FieldValueGeneratorTest.java | 0 .../data/SubTableMetaGeneratorTest.java | 0 .../data/SuperTableMetaGeneratorImplTest.java | 0 .../service/data/TagValueGeneratorTest.java | 0 .../taosdemo/utils/DataGeneratorTest.java | 0 .../taosdemo/utils/SqlSpellerTest.java | 0 .../taosdemo/utils/TimeStampUtilTest.java | 0 .../rust/nativeexample}/examples/bind-tags.rs | 0 .../rust/nativeexample}/examples/bind.rs | 0 .../rust/nativeexample/examples/query2.rs | 0 .../rust/nativeexample}/examples/subscribe.rs | 0 .../rust/nativeexample/examples/tmq.rs | 123 +++++++++-------- .../examples/rust/restexample/examples/tmq.rs | 124 ++++++++++-------- docs/zh/14-reference/05-connector/10-cpp.mdx | 20 +-- docs/zh/14-reference/05-connector/14-java.mdx | 4 +- docs/zh/14-reference/05-connector/26-rust.mdx | 4 +- examples/rust/.gitignore | 2 - examples/rust/Cargo.toml | 18 --- examples/rust/src/main.rs | 3 - examples/rust/wrapper.h | 1 - 154 files changed, 156 insertions(+), 175 deletions(-) rename {examples => docs/examples}/JDBC/JDBCDemo/README-jdbc-windows.md (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/pom.xml (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/readme.md (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoop.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/GeometryDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingFullDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/Util.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingDemo.java (100%) rename {examples => docs/examples}/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingFullDemo.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/.gitignore (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/pom.xml (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/readme.md (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/App.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatement.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatementImpl.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDao.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDaoImpl.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/domain/Weather.java (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml (100%) rename {examples => docs/examples}/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/example/jdbcTemplate/BatcherInsertTest.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/README-cn.md (100%) rename {examples => docs/examples}/JDBC/connectionPools/pom.xml (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/ConnectionPoolDemo.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/DruidDemo.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/HikariDemo.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/ProxoolDemo.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/common/InsertTask.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/C3p0Builder.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DbcpBuilder.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DruidPoolBuilder.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/HikariCpBuilder.java (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/resources/log4j.properties (100%) rename {examples => docs/examples}/JDBC/connectionPools/src/main/resources/proxool.xml (100%) rename {examples => docs/examples}/JDBC/consumer-demo/pom.xml (100%) rename {examples => docs/examples}/JDBC/consumer-demo/readme.md (100%) rename {examples => docs/examples}/JDBC/consumer-demo/src/main/java/com/taosdata/Bean.java (100%) rename {examples => docs/examples}/JDBC/consumer-demo/src/main/java/com/taosdata/BeanDeserializer.java (100%) rename {examples => docs/examples}/JDBC/consumer-demo/src/main/java/com/taosdata/Config.java (100%) rename {examples => docs/examples}/JDBC/consumer-demo/src/main/java/com/taosdata/ConsumerDemo.java (100%) rename {examples => docs/examples}/JDBC/consumer-demo/src/main/java/com/taosdata/Worker.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/.gitignore (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.jar (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.properties (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/mvnw (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/mvnw.cmd (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/pom.xml (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/readme (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/MybatisplusDemoApplication.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/config/MybatisPlusConfig.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Temperature.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Weather.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapper.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapper.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/main/resources/application.yml (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapperTest.java (100%) rename {examples => docs/examples}/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapperTest.java (100%) rename {examples => docs/examples}/JDBC/readme.md (100%) rename {examples => docs/examples}/JDBC/springbootdemo/.gitignore (100%) rename {examples => docs/examples}/JDBC/springbootdemo/mvnw (100%) rename {examples => docs/examples}/JDBC/springbootdemo/mvnw.cmd (100%) rename {examples => docs/examples}/JDBC/springbootdemo/pom.xml (100%) rename {examples => docs/examples}/JDBC/springbootdemo/readme.md (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/util/TaosAspect.java (100%) rename {examples => docs/examples}/JDBC/springbootdemo/src/main/resources/application.properties (100%) rename {examples => docs/examples}/JDBC/taosdemo/.gitignore (100%) rename {examples => docs/examples}/JDBC/taosdemo/.mvn/wrapper/MavenWrapperDownloader.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.jar (100%) rename {examples => docs/examples}/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.properties (100%) rename {examples => docs/examples}/JDBC/taosdemo/mvnw (100%) rename {examples => docs/examples}/JDBC/taosdemo/mvnw.cmd (100%) rename {examples => docs/examples}/JDBC/taosdemo/pom.xml (100%) rename {examples => docs/examples}/JDBC/taosdemo/readme.md (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldMeta.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldValue.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableMeta.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableValue.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SuperTableMeta.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableMeta.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableValue.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagMeta.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagValue.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/AbstractService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/QueryService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SuperTableService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/TableService.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/FieldValueGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableMetaGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableValueGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SuperTableMetaGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/TagValueGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/DataGenerator.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/SqlSpeller.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TaosConstants.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TimeStampUtil.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/resources/application.properties (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/resources/insert.json (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/resources/log4j.properties (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/resources/query.json (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/main/resources/templates/index.html (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/DatabaseServiceTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/QueryServiceTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SubTableServiceTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SuperTableServiceTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/FieldValueGeneratorTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SubTableMetaGeneratorTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SuperTableMetaGeneratorImplTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/TagValueGeneratorTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/DataGeneratorTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/SqlSpellerTest.java (100%) rename {examples => docs/examples}/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/TimeStampUtilTest.java (100%) rename {examples/rust => docs/examples/rust/nativeexample}/examples/bind-tags.rs (100%) rename {examples/rust => docs/examples/rust/nativeexample}/examples/bind.rs (100%) rename examples/rust/examples/query.rs => docs/examples/rust/nativeexample/examples/query2.rs (100%) rename {examples/rust => docs/examples/rust/nativeexample}/examples/subscribe.rs (100%) delete mode 100644 examples/rust/.gitignore delete mode 100644 examples/rust/Cargo.toml delete mode 100644 examples/rust/src/main.rs delete mode 100644 examples/rust/wrapper.h diff --git a/docs/en/14-reference/05-connectors/10-cpp.mdx b/docs/en/14-reference/05-connectors/10-cpp.mdx index 4b7fcc5456..79ff00fd5b 100644 --- a/docs/en/14-reference/05-connectors/10-cpp.mdx +++ b/docs/en/14-reference/05-connectors/10-cpp.mdx @@ -64,27 +64,17 @@ In the above example code, `taos_connect()` establishes a connection to port 603 ## Sample program -This section shows sample code for standard access methods to TDengine clusters using the client driver. +This section shows sample code for standard access methods to TDengine clusters using the client driver. -### Synchronous query example +- [Synchronous query example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) -- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) +- [Asynchronous query example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) -### Asynchronous query example +- [Parameter binding example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) -- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) +- [Schemaless writing example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) -### Parameter binding example - -- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) - -### Pattern-free writing example - -- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) - -### Subscription and consumption example - -- [C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) +- [Subscription and consumption example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) :::info More example code and downloads are available at [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c). @@ -627,4 +617,4 @@ In addition to writing data using the SQL method or the parameter binding API, w - tmq_get_table_name : table name of result, NULL if failed - tmq_get_res_type : result type tmq_res_t - tmq_get_topic_name : topic name of result, NULL if failed - - tmq_get_db_name : db name of result, NULL if failed \ No newline at end of file + - tmq_get_db_name : db name of result, NULL if failed diff --git a/docs/en/14-reference/05-connectors/14-java.mdx b/docs/en/14-reference/05-connectors/14-java.mdx index 8192807c6d..46b13409a3 100644 --- a/docs/en/14-reference/05-connectors/14-java.mdx +++ b/docs/en/14-reference/05-connectors/14-java.mdx @@ -662,7 +662,7 @@ Example usage is as follows. ### More sample programs -The source code of the sample application is under `TDengine/examples/JDBC`: +The source code of the sample application is under `TDengine/docs/examples/JDBC`: - JDBCDemo: JDBC sample source code. - connectionPools: using taos-jdbcdriver in connection pools such as HikariCP, Druid, dbcp, c3p0, etc. @@ -671,7 +671,7 @@ The source code of the sample application is under `TDengine/examples/JDBC`: - springbootdemo: using taos-jdbcdriver in Springboot. - consumer-demo: consumer TDengine data example, the consumption rate can be controlled by parameters. -[JDBC example](https://github.com/taosdata/TDengine/tree/3.0/examples/JDBC) +[JDBC example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/JDBC) ## Frequently Asked Questions diff --git a/docs/en/14-reference/05-connectors/26-rust.mdx b/docs/en/14-reference/05-connectors/26-rust.mdx index 92a8e24dbb..68770a40e6 100644 --- a/docs/en/14-reference/05-connectors/26-rust.mdx +++ b/docs/en/14-reference/05-connectors/26-rust.mdx @@ -437,9 +437,9 @@ let taos = pool.get()?; ### More sample programs -The source code of the sample application is under `TDengine/examples/rust` : +The source code of the sample application is under `TDengine/docs/examples/rust` : -[rust example](https://github.com/taosdata/TDengine/tree/3.0/examples/rust) +[rust example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/rust) ## Frequently Asked Questions diff --git a/examples/JDBC/JDBCDemo/README-jdbc-windows.md b/docs/examples/JDBC/JDBCDemo/README-jdbc-windows.md similarity index 100% rename from examples/JDBC/JDBCDemo/README-jdbc-windows.md rename to docs/examples/JDBC/JDBCDemo/README-jdbc-windows.md diff --git a/examples/JDBC/JDBCDemo/pom.xml b/docs/examples/JDBC/JDBCDemo/pom.xml similarity index 100% rename from examples/JDBC/JDBCDemo/pom.xml rename to docs/examples/JDBC/JDBCDemo/pom.xml diff --git a/examples/JDBC/JDBCDemo/readme.md b/docs/examples/JDBC/JDBCDemo/readme.md similarity index 100% rename from examples/JDBC/JDBCDemo/readme.md rename to docs/examples/JDBC/JDBCDemo/readme.md diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoop.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoop.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoop.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ConsumerLoop.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/GeometryDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/GeometryDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/GeometryDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/GeometryDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcBasicDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingFullDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingFullDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingFullDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/ParameterBindingFullDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/Util.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/Util.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/Util.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/Util.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingDemo.java diff --git a/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingFullDemo.java b/docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingFullDemo.java similarity index 100% rename from examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingFullDemo.java rename to docs/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/WSParameterBindingFullDemo.java diff --git a/examples/JDBC/SpringJdbcTemplate/.gitignore b/docs/examples/JDBC/SpringJdbcTemplate/.gitignore similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/.gitignore rename to docs/examples/JDBC/SpringJdbcTemplate/.gitignore diff --git a/examples/JDBC/SpringJdbcTemplate/pom.xml b/docs/examples/JDBC/SpringJdbcTemplate/pom.xml similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/pom.xml rename to docs/examples/JDBC/SpringJdbcTemplate/pom.xml diff --git a/examples/JDBC/SpringJdbcTemplate/readme.md b/docs/examples/JDBC/SpringJdbcTemplate/readme.md similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/readme.md rename to docs/examples/JDBC/SpringJdbcTemplate/readme.md diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/App.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/App.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/App.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/App.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatement.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatement.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatement.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatement.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatementImpl.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatementImpl.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatementImpl.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/ExecuteAsStatementImpl.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDao.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDao.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDao.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDao.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDaoImpl.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDaoImpl.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDaoImpl.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/dao/WeatherDaoImpl.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/domain/Weather.java b/docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/domain/Weather.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/domain/Weather.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/java/com/taosdata/example/jdbcTemplate/domain/Weather.java diff --git a/examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml b/docs/examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml rename to docs/examples/JDBC/SpringJdbcTemplate/src/main/resources/applicationContext.xml diff --git a/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/example/jdbcTemplate/BatcherInsertTest.java b/docs/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/example/jdbcTemplate/BatcherInsertTest.java similarity index 100% rename from examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/example/jdbcTemplate/BatcherInsertTest.java rename to docs/examples/JDBC/SpringJdbcTemplate/src/test/java/com/taosdata/example/jdbcTemplate/BatcherInsertTest.java diff --git a/examples/JDBC/connectionPools/README-cn.md b/docs/examples/JDBC/connectionPools/README-cn.md similarity index 100% rename from examples/JDBC/connectionPools/README-cn.md rename to docs/examples/JDBC/connectionPools/README-cn.md diff --git a/examples/JDBC/connectionPools/pom.xml b/docs/examples/JDBC/connectionPools/pom.xml similarity index 100% rename from examples/JDBC/connectionPools/pom.xml rename to docs/examples/JDBC/connectionPools/pom.xml diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ConnectionPoolDemo.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ConnectionPoolDemo.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ConnectionPoolDemo.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ConnectionPoolDemo.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/DruidDemo.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/DruidDemo.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/DruidDemo.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/DruidDemo.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/HikariDemo.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/HikariDemo.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/HikariDemo.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/HikariDemo.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ProxoolDemo.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ProxoolDemo.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ProxoolDemo.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/ProxoolDemo.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/common/InsertTask.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/common/InsertTask.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/common/InsertTask.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/common/InsertTask.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/C3p0Builder.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/C3p0Builder.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/C3p0Builder.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/C3p0Builder.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DbcpBuilder.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DbcpBuilder.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DbcpBuilder.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DbcpBuilder.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DruidPoolBuilder.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DruidPoolBuilder.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DruidPoolBuilder.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/DruidPoolBuilder.java diff --git a/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/HikariCpBuilder.java b/docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/HikariCpBuilder.java similarity index 100% rename from examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/HikariCpBuilder.java rename to docs/examples/JDBC/connectionPools/src/main/java/com/taosdata/example/pool/HikariCpBuilder.java diff --git a/examples/JDBC/connectionPools/src/main/resources/log4j.properties b/docs/examples/JDBC/connectionPools/src/main/resources/log4j.properties similarity index 100% rename from examples/JDBC/connectionPools/src/main/resources/log4j.properties rename to docs/examples/JDBC/connectionPools/src/main/resources/log4j.properties diff --git a/examples/JDBC/connectionPools/src/main/resources/proxool.xml b/docs/examples/JDBC/connectionPools/src/main/resources/proxool.xml similarity index 100% rename from examples/JDBC/connectionPools/src/main/resources/proxool.xml rename to docs/examples/JDBC/connectionPools/src/main/resources/proxool.xml diff --git a/examples/JDBC/consumer-demo/pom.xml b/docs/examples/JDBC/consumer-demo/pom.xml similarity index 100% rename from examples/JDBC/consumer-demo/pom.xml rename to docs/examples/JDBC/consumer-demo/pom.xml diff --git a/examples/JDBC/consumer-demo/readme.md b/docs/examples/JDBC/consumer-demo/readme.md similarity index 100% rename from examples/JDBC/consumer-demo/readme.md rename to docs/examples/JDBC/consumer-demo/readme.md diff --git a/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Bean.java b/docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Bean.java similarity index 100% rename from examples/JDBC/consumer-demo/src/main/java/com/taosdata/Bean.java rename to docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Bean.java diff --git a/examples/JDBC/consumer-demo/src/main/java/com/taosdata/BeanDeserializer.java b/docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/BeanDeserializer.java similarity index 100% rename from examples/JDBC/consumer-demo/src/main/java/com/taosdata/BeanDeserializer.java rename to docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/BeanDeserializer.java diff --git a/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Config.java b/docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Config.java similarity index 100% rename from examples/JDBC/consumer-demo/src/main/java/com/taosdata/Config.java rename to docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Config.java diff --git a/examples/JDBC/consumer-demo/src/main/java/com/taosdata/ConsumerDemo.java b/docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/ConsumerDemo.java similarity index 100% rename from examples/JDBC/consumer-demo/src/main/java/com/taosdata/ConsumerDemo.java rename to docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/ConsumerDemo.java diff --git a/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Worker.java b/docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Worker.java similarity index 100% rename from examples/JDBC/consumer-demo/src/main/java/com/taosdata/Worker.java rename to docs/examples/JDBC/consumer-demo/src/main/java/com/taosdata/Worker.java diff --git a/examples/JDBC/mybatisplus-demo/.gitignore b/docs/examples/JDBC/mybatisplus-demo/.gitignore similarity index 100% rename from examples/JDBC/mybatisplus-demo/.gitignore rename to docs/examples/JDBC/mybatisplus-demo/.gitignore diff --git a/examples/JDBC/mybatisplus-demo/.mvn/wrapper/MavenWrapperDownloader.java b/docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/.mvn/wrapper/MavenWrapperDownloader.java rename to docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.jar b/docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.jar rename to docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.jar diff --git a/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.properties b/docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.properties rename to docs/examples/JDBC/mybatisplus-demo/.mvn/wrapper/maven-wrapper.properties diff --git a/examples/JDBC/mybatisplus-demo/mvnw b/docs/examples/JDBC/mybatisplus-demo/mvnw similarity index 100% rename from examples/JDBC/mybatisplus-demo/mvnw rename to docs/examples/JDBC/mybatisplus-demo/mvnw diff --git a/examples/JDBC/mybatisplus-demo/mvnw.cmd b/docs/examples/JDBC/mybatisplus-demo/mvnw.cmd similarity index 100% rename from examples/JDBC/mybatisplus-demo/mvnw.cmd rename to docs/examples/JDBC/mybatisplus-demo/mvnw.cmd diff --git a/examples/JDBC/mybatisplus-demo/pom.xml b/docs/examples/JDBC/mybatisplus-demo/pom.xml similarity index 100% rename from examples/JDBC/mybatisplus-demo/pom.xml rename to docs/examples/JDBC/mybatisplus-demo/pom.xml diff --git a/examples/JDBC/mybatisplus-demo/readme b/docs/examples/JDBC/mybatisplus-demo/readme similarity index 100% rename from examples/JDBC/mybatisplus-demo/readme rename to docs/examples/JDBC/mybatisplus-demo/readme diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/MybatisplusDemoApplication.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/MybatisplusDemoApplication.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/MybatisplusDemoApplication.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/MybatisplusDemoApplication.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/config/MybatisPlusConfig.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/config/MybatisPlusConfig.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/config/MybatisPlusConfig.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/config/MybatisPlusConfig.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Temperature.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Temperature.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Temperature.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Temperature.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Weather.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Weather.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Weather.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Weather.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapper.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapper.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapper.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapper.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapper.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapper.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapper.java rename to docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapper.java diff --git a/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml b/docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/main/resources/application.yml rename to docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml diff --git a/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapperTest.java b/docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapperTest.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapperTest.java rename to docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/TemperatureMapperTest.java diff --git a/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapperTest.java b/docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapperTest.java similarity index 100% rename from examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapperTest.java rename to docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/WeatherMapperTest.java diff --git a/examples/JDBC/readme.md b/docs/examples/JDBC/readme.md similarity index 100% rename from examples/JDBC/readme.md rename to docs/examples/JDBC/readme.md diff --git a/examples/JDBC/springbootdemo/.gitignore b/docs/examples/JDBC/springbootdemo/.gitignore similarity index 100% rename from examples/JDBC/springbootdemo/.gitignore rename to docs/examples/JDBC/springbootdemo/.gitignore diff --git a/examples/JDBC/springbootdemo/mvnw b/docs/examples/JDBC/springbootdemo/mvnw similarity index 100% rename from examples/JDBC/springbootdemo/mvnw rename to docs/examples/JDBC/springbootdemo/mvnw diff --git a/examples/JDBC/springbootdemo/mvnw.cmd b/docs/examples/JDBC/springbootdemo/mvnw.cmd similarity index 100% rename from examples/JDBC/springbootdemo/mvnw.cmd rename to docs/examples/JDBC/springbootdemo/mvnw.cmd diff --git a/examples/JDBC/springbootdemo/pom.xml b/docs/examples/JDBC/springbootdemo/pom.xml similarity index 100% rename from examples/JDBC/springbootdemo/pom.xml rename to docs/examples/JDBC/springbootdemo/pom.xml diff --git a/examples/JDBC/springbootdemo/readme.md b/docs/examples/JDBC/springbootdemo/readme.md similarity index 100% rename from examples/JDBC/springbootdemo/readme.md rename to docs/examples/JDBC/springbootdemo/readme.md diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/SpringbootdemoApplication.java diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/controller/WeatherController.java diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.java diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/dao/WeatherMapper.xml diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/domain/Weather.java diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/service/WeatherService.java diff --git a/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/util/TaosAspect.java b/docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/util/TaosAspect.java similarity index 100% rename from examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/util/TaosAspect.java rename to docs/examples/JDBC/springbootdemo/src/main/java/com/taosdata/example/springbootdemo/util/TaosAspect.java diff --git a/examples/JDBC/springbootdemo/src/main/resources/application.properties b/docs/examples/JDBC/springbootdemo/src/main/resources/application.properties similarity index 100% rename from examples/JDBC/springbootdemo/src/main/resources/application.properties rename to docs/examples/JDBC/springbootdemo/src/main/resources/application.properties diff --git a/examples/JDBC/taosdemo/.gitignore b/docs/examples/JDBC/taosdemo/.gitignore similarity index 100% rename from examples/JDBC/taosdemo/.gitignore rename to docs/examples/JDBC/taosdemo/.gitignore diff --git a/examples/JDBC/taosdemo/.mvn/wrapper/MavenWrapperDownloader.java b/docs/examples/JDBC/taosdemo/.mvn/wrapper/MavenWrapperDownloader.java similarity index 100% rename from examples/JDBC/taosdemo/.mvn/wrapper/MavenWrapperDownloader.java rename to docs/examples/JDBC/taosdemo/.mvn/wrapper/MavenWrapperDownloader.java diff --git a/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.jar b/docs/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.jar similarity index 100% rename from examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.jar rename to docs/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.jar diff --git a/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.properties b/docs/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.properties similarity index 100% rename from examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.properties rename to docs/examples/JDBC/taosdemo/.mvn/wrapper/maven-wrapper.properties diff --git a/examples/JDBC/taosdemo/mvnw b/docs/examples/JDBC/taosdemo/mvnw similarity index 100% rename from examples/JDBC/taosdemo/mvnw rename to docs/examples/JDBC/taosdemo/mvnw diff --git a/examples/JDBC/taosdemo/mvnw.cmd b/docs/examples/JDBC/taosdemo/mvnw.cmd similarity index 100% rename from examples/JDBC/taosdemo/mvnw.cmd rename to docs/examples/JDBC/taosdemo/mvnw.cmd diff --git a/examples/JDBC/taosdemo/pom.xml b/docs/examples/JDBC/taosdemo/pom.xml similarity index 100% rename from examples/JDBC/taosdemo/pom.xml rename to docs/examples/JDBC/taosdemo/pom.xml diff --git a/examples/JDBC/taosdemo/readme.md b/docs/examples/JDBC/taosdemo/readme.md similarity index 100% rename from examples/JDBC/taosdemo/readme.md rename to docs/examples/JDBC/taosdemo/readme.md diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/DataSourceFactory.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JdbcTaosdemoConfig.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/components/JsonConfig.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapper.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/DatabaseMapperImpl.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapper.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SubTableMapperImpl.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapper.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/SuperTableMapperImpl.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapper.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/dao/TableMapperImpl.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldMeta.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldMeta.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldMeta.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldMeta.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldValue.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldValue.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldValue.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/FieldValue.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/RowValue.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableMeta.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableMeta.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableMeta.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableMeta.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableValue.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableValue.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableValue.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SubTableValue.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SuperTableMeta.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SuperTableMeta.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SuperTableMeta.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/SuperTableMeta.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableMeta.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableMeta.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableMeta.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableMeta.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableValue.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableValue.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableValue.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TableValue.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagMeta.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagMeta.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagMeta.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagMeta.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagValue.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagValue.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagValue.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/domain/TagValue.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/AbstractService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/AbstractService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/AbstractService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/AbstractService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/DatabaseService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/QueryService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/QueryService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/QueryService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/QueryService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SubTableService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SuperTableService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SuperTableService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SuperTableService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SuperTableService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/TableService.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/TableService.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/TableService.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/TableService.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/FieldValueGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/FieldValueGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/FieldValueGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/FieldValueGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableMetaGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableMetaGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableMetaGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableMetaGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableValueGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableValueGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableValueGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SubTableValueGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SuperTableMetaGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SuperTableMetaGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SuperTableMetaGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/SuperTableMetaGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/TagValueGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/TagValueGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/TagValueGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/data/TagValueGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/DataGenerator.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/DataGenerator.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/DataGenerator.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/DataGenerator.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/Printer.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/SqlSpeller.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/SqlSpeller.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/SqlSpeller.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/SqlSpeller.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TaosConstants.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TaosConstants.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TaosConstants.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TaosConstants.java diff --git a/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TimeStampUtil.java b/docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TimeStampUtil.java similarity index 100% rename from examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TimeStampUtil.java rename to docs/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/utils/TimeStampUtil.java diff --git a/examples/JDBC/taosdemo/src/main/resources/application.properties b/docs/examples/JDBC/taosdemo/src/main/resources/application.properties similarity index 100% rename from examples/JDBC/taosdemo/src/main/resources/application.properties rename to docs/examples/JDBC/taosdemo/src/main/resources/application.properties diff --git a/examples/JDBC/taosdemo/src/main/resources/insert.json b/docs/examples/JDBC/taosdemo/src/main/resources/insert.json similarity index 100% rename from examples/JDBC/taosdemo/src/main/resources/insert.json rename to docs/examples/JDBC/taosdemo/src/main/resources/insert.json diff --git a/examples/JDBC/taosdemo/src/main/resources/log4j.properties b/docs/examples/JDBC/taosdemo/src/main/resources/log4j.properties similarity index 100% rename from examples/JDBC/taosdemo/src/main/resources/log4j.properties rename to docs/examples/JDBC/taosdemo/src/main/resources/log4j.properties diff --git a/examples/JDBC/taosdemo/src/main/resources/query.json b/docs/examples/JDBC/taosdemo/src/main/resources/query.json similarity index 100% rename from examples/JDBC/taosdemo/src/main/resources/query.json rename to docs/examples/JDBC/taosdemo/src/main/resources/query.json diff --git a/examples/JDBC/taosdemo/src/main/resources/templates/index.html b/docs/examples/JDBC/taosdemo/src/main/resources/templates/index.html similarity index 100% rename from examples/JDBC/taosdemo/src/main/resources/templates/index.html rename to docs/examples/JDBC/taosdemo/src/main/resources/templates/index.html diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/DatabaseServiceTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/DatabaseServiceTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/DatabaseServiceTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/DatabaseServiceTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/QueryServiceTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/QueryServiceTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/QueryServiceTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/QueryServiceTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SubTableServiceTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SubTableServiceTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SubTableServiceTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SubTableServiceTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SuperTableServiceTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SuperTableServiceTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SuperTableServiceTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/SuperTableServiceTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/FieldValueGeneratorTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/FieldValueGeneratorTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/FieldValueGeneratorTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/FieldValueGeneratorTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SubTableMetaGeneratorTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SubTableMetaGeneratorTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SubTableMetaGeneratorTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SubTableMetaGeneratorTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SuperTableMetaGeneratorImplTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SuperTableMetaGeneratorImplTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SuperTableMetaGeneratorImplTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/SuperTableMetaGeneratorImplTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/TagValueGeneratorTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/TagValueGeneratorTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/TagValueGeneratorTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/service/data/TagValueGeneratorTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/DataGeneratorTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/DataGeneratorTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/DataGeneratorTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/DataGeneratorTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/SqlSpellerTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/SqlSpellerTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/SqlSpellerTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/SqlSpellerTest.java diff --git a/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/TimeStampUtilTest.java b/docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/TimeStampUtilTest.java similarity index 100% rename from examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/TimeStampUtilTest.java rename to docs/examples/JDBC/taosdemo/src/test/java/com/taosdata/taosdemo/utils/TimeStampUtilTest.java diff --git a/examples/rust/examples/bind-tags.rs b/docs/examples/rust/nativeexample/examples/bind-tags.rs similarity index 100% rename from examples/rust/examples/bind-tags.rs rename to docs/examples/rust/nativeexample/examples/bind-tags.rs diff --git a/examples/rust/examples/bind.rs b/docs/examples/rust/nativeexample/examples/bind.rs similarity index 100% rename from examples/rust/examples/bind.rs rename to docs/examples/rust/nativeexample/examples/bind.rs diff --git a/examples/rust/examples/query.rs b/docs/examples/rust/nativeexample/examples/query2.rs similarity index 100% rename from examples/rust/examples/query.rs rename to docs/examples/rust/nativeexample/examples/query2.rs diff --git a/examples/rust/examples/subscribe.rs b/docs/examples/rust/nativeexample/examples/subscribe.rs similarity index 100% rename from examples/rust/examples/subscribe.rs rename to docs/examples/rust/nativeexample/examples/subscribe.rs diff --git a/docs/examples/rust/nativeexample/examples/tmq.rs b/docs/examples/rust/nativeexample/examples/tmq.rs index 800b66e8fe..d5feec1150 100644 --- a/docs/examples/rust/nativeexample/examples/tmq.rs +++ b/docs/examples/rust/nativeexample/examples/tmq.rs @@ -1,9 +1,9 @@ -use std::time::Duration; -use std::str::FromStr; -use chrono::Local; use chrono::DateTime; -use taos::*; +use chrono::Local; +use std::str::FromStr; use std::thread; +use std::time::Duration; +use taos::*; use tokio::runtime::Runtime; #[tokio::main] @@ -12,7 +12,7 @@ async fn main() -> anyhow::Result<()> { .filter_level(log::LevelFilter::Info) .init(); use taos_query::prelude::*; - // ANCHOR: create_consumer_dsn + // ANCHOR: create_consumer_dsn let dsn = "taos://localhost:6030".to_string(); println!("dsn: {}", dsn); let mut dsn = Dsn::from_str(&dsn)?; @@ -41,17 +41,25 @@ async fn main() -> anyhow::Result<()> { // ANCHOR: create_consumer_ac let group_id = "group1".to_string(); let client_id = "client1".to_string(); - dsn.params.insert("auto.offset.reset".to_string(), "latest".to_string()); - dsn.params.insert("msg.with.table.name".to_string(), "true".to_string()); - dsn.params.insert("enable.auto.commit".to_string(), "true".to_string()); - dsn.params.insert("auto.commit.interval.ms".to_string(), "1000".to_string()); + dsn.params + .insert("auto.offset.reset".to_string(), "latest".to_string()); + dsn.params + .insert("msg.with.table.name".to_string(), "true".to_string()); + dsn.params + .insert("enable.auto.commit".to_string(), "true".to_string()); + dsn.params + .insert("auto.commit.interval.ms".to_string(), "1000".to_string()); dsn.params.insert("group.id".to_string(), group_id.clone()); - dsn.params.insert("client.id".to_string(), client_id.clone()); + dsn.params + .insert("client.id".to_string(), client_id.clone()); let builder = TmqBuilder::from_dsn(&dsn)?; - let mut consumer = match builder.build().await{ + let mut consumer = match builder.build().await { Ok(consumer) => { - println!("Create consumer successfully, dsn: {}, groupId: {}, clientId: {}.", dsn, group_id, client_id); + println!( + "Create consumer successfully, dsn: {}, groupId: {}, clientId: {}.", + dsn, group_id, client_id + ); consumer } Err(err) => { @@ -61,10 +69,10 @@ async fn main() -> anyhow::Result<()> { }; // ANCHOR_END: create_consumer_ac - thread::spawn(move || { + let handle = thread::spawn(move || { let rt = Runtime::new().unwrap(); - rt.block_on(async { + tokio::time::sleep(Duration::from_secs(1)).await; let taos_insert = TaosBuilder::from_dsn(&dsn).unwrap().build().await.unwrap(); for i in 0..50 { let insert_sql = format!(r#"INSERT INTO @@ -77,16 +85,17 @@ async fn main() -> anyhow::Result<()> { tokio::time::sleep(Duration::from_millis(10)).await; } }); - - }).join().unwrap(); - + }); // ANCHOR: consume let topic = "topic_meters"; - match consumer.subscribe([topic]).await{ + match consumer.subscribe([topic]).await { Ok(_) => println!("Subscribe topics successfully."), Err(err) => { - eprintln!("Failed to subscribe topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", topic, group_id, client_id, err); + eprintln!( + "Failed to subscribe topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", + topic, group_id, client_id, err + ); return Err(err.into()); } } @@ -107,32 +116,36 @@ async fn main() -> anyhow::Result<()> { } consumer - .stream() - .try_for_each(|(offset, message)| async move { - let topic = offset.topic(); - // the vgroup id, like partition id in kafka. - let vgroup_id = offset.vgroup_id(); - println!("* in vgroup id {vgroup_id} of topic {topic}\n"); + .stream_with_timeout(Timeout::from_secs(10)) + .try_for_each(|(offset, message)| async move { + let topic = offset.topic(); + // the vgroup id, like partition id in kafka. + let vgroup_id = offset.vgroup_id(); + println!("* in vgroup id {vgroup_id} of topic {topic}\n"); - if let Some(data) = message.into_data() { - while let Some(block) = data.fetch_raw_block().await? { - let records: Vec = block.deserialize().try_collect()?; - // Add your data processing logic here - println!("** read {} records: {:#?}\n", records.len(), records); + if let Some(data) = message.into_data() { + while let Some(block) = data.fetch_raw_block().await? { + let records: Vec = block.deserialize().try_collect()?; + // Add your data processing logic here + println!("** read {} records: {:#?}\n", records.len(), records); + } } - } - Ok(()) - }) - .await.map_err(|e| { - eprintln!("Failed to poll data, topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", topic, group_id, client_id, e); - e - })?; + Ok(()) + }) + .await + .map_err(|e| { + eprintln!( + "Failed to poll data, topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", + topic, group_id, client_id, e + ); + e + })?; // ANCHOR_END: consume - // ANCHOR: consumer_commit_manually + // ANCHOR: consumer_commit_manually consumer - .stream() + .stream_with_timeout(Timeout::from_secs(10)) .try_for_each(|(offset, message)| async { // the vgroup id, like partition id in kafka. let vgroup_id = offset.vgroup_id(); @@ -162,12 +175,14 @@ async fn main() -> anyhow::Result<()> { })?; // ANCHOR_END: consumer_commit_manually - // ANCHOR: seek_offset - let assignments = match consumer.assignments().await{ + let assignments = match consumer.assignments().await { Some(assignments) => assignments, None => { - let error_message = format!("Failed to get assignments. topic: {}, groupId: {}, clientId: {}", topic, group_id, client_id); + let error_message = format!( + "Failed to get assignments. topic: {}, groupId: {}, clientId: {}", + topic, group_id, client_id + ); eprintln!("{}", error_message); return Err(anyhow::anyhow!(error_message)); } @@ -185,14 +200,10 @@ async fn main() -> anyhow::Result<()> { let end = assignment.end(); println!( "topic: {}, vgroup_id: {}, current offset: {}, begin {}, end: {}", - topic, - vgroup_id, - current, - begin, - end + topic, vgroup_id, current, begin, end ); - match consumer.offset_seek(topic, vgroup_id, begin).await{ + match consumer.offset_seek(topic, vgroup_id, begin).await { Ok(_) => (), Err(err) => { eprintln!("Failed to seek offset, topic: {}, groupId: {}, clientId: {}, vGroupId: {}, begin: {}, ErrMessage: {:?}", @@ -207,10 +218,13 @@ async fn main() -> anyhow::Result<()> { } println!("Assignment seek to beginning successfully."); // after seek offset - let assignments = match consumer.assignments().await{ + let assignments = match consumer.assignments().await { Some(assignments) => assignments, None => { - let error_message = format!("Failed to get assignments. topic: {}, groupId: {}, clientId: {}", topic, group_id, client_id); + let error_message = format!( + "Failed to get assignments. topic: {}, groupId: {}, clientId: {}", + topic, group_id, client_id + ); eprintln!("{}", error_message); return Err(anyhow::anyhow!(error_message)); } @@ -225,10 +239,9 @@ async fn main() -> anyhow::Result<()> { tokio::time::sleep(Duration::from_secs(1)).await; - taos.exec_many([ - "drop topic topic_meters", - "drop database power", - ]) - .await?; + handle.join().unwrap(); + + taos.exec_many(["drop topic topic_meters", "drop database power"]) + .await?; Ok(()) } diff --git a/docs/examples/rust/restexample/examples/tmq.rs b/docs/examples/rust/restexample/examples/tmq.rs index 0a41025955..61416133e3 100644 --- a/docs/examples/rust/restexample/examples/tmq.rs +++ b/docs/examples/rust/restexample/examples/tmq.rs @@ -1,9 +1,9 @@ -use std::time::Duration; -use std::str::FromStr; -use chrono::Local; use chrono::DateTime; -use taos::*; +use chrono::Local; +use std::str::FromStr; use std::thread; +use std::time::Duration; +use taos::*; use tokio::runtime::Runtime; #[tokio::main] @@ -12,7 +12,7 @@ async fn main() -> anyhow::Result<()> { .filter_level(log::LevelFilter::Info) .init(); use taos_query::prelude::*; - // ANCHOR: create_consumer_dsn + // ANCHOR: create_consumer_dsn let dsn = "ws://localhost:6041".to_string(); println!("dsn: {}", dsn); let mut dsn = Dsn::from_str(&dsn)?; @@ -41,17 +41,25 @@ async fn main() -> anyhow::Result<()> { // ANCHOR: create_consumer_ac let group_id = "group1".to_string(); let client_id = "client1".to_string(); - dsn.params.insert("auto.offset.reset".to_string(), "latest".to_string()); - dsn.params.insert("msg.with.table.name".to_string(), "true".to_string()); - dsn.params.insert("enable.auto.commit".to_string(), "true".to_string()); - dsn.params.insert("auto.commit.interval.ms".to_string(), "1000".to_string()); + dsn.params + .insert("auto.offset.reset".to_string(), "latest".to_string()); + dsn.params + .insert("msg.with.table.name".to_string(), "true".to_string()); + dsn.params + .insert("enable.auto.commit".to_string(), "true".to_string()); + dsn.params + .insert("auto.commit.interval.ms".to_string(), "1000".to_string()); dsn.params.insert("group.id".to_string(), group_id.clone()); - dsn.params.insert("client.id".to_string(), client_id.clone()); + dsn.params + .insert("client.id".to_string(), client_id.clone()); let builder = TmqBuilder::from_dsn(&dsn)?; - let mut consumer = match builder.build().await{ + let mut consumer = match builder.build().await { Ok(consumer) => { - println!("Create consumer successfully, dsn: {}, groupId: {}, clientId: {}.", dsn, group_id, client_id); + println!( + "Create consumer successfully, dsn: {}, groupId: {}, clientId: {}.", + dsn, group_id, client_id + ); consumer } Err(err) => { @@ -61,10 +69,10 @@ async fn main() -> anyhow::Result<()> { }; // ANCHOR_END: create_consumer_ac - thread::spawn(move || { + let handle = thread::spawn(move || { let rt = Runtime::new().unwrap(); - rt.block_on(async { + tokio::time::sleep(Duration::from_secs(1)).await; let taos_insert = TaosBuilder::from_dsn(&dsn).unwrap().build().await.unwrap(); for i in 0..50 { let insert_sql = format!(r#"INSERT INTO @@ -75,18 +83,20 @@ async fn main() -> anyhow::Result<()> { eprintln!("Failed to execute insert: {:?}", e); } tokio::time::sleep(Duration::from_millis(10)).await; + println!("Succed to execute insert 1 row"); } }); - - }).join().unwrap(); - + }); // ANCHOR: consume let topic = "topic_meters"; - match consumer.subscribe([topic]).await{ + match consumer.subscribe([topic]).await { Ok(_) => println!("Subscribe topics successfully."), Err(err) => { - eprintln!("Failed to subscribe topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", topic, group_id, client_id, err); + eprintln!( + "Failed to subscribe topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", + topic, group_id, client_id, err + ); return Err(err.into()); } } @@ -107,32 +117,36 @@ async fn main() -> anyhow::Result<()> { } consumer - .stream() - .try_for_each(|(offset, message)| async move { - let topic = offset.topic(); - // the vgroup id, like partition id in kafka. - let vgroup_id = offset.vgroup_id(); - println!("* in vgroup id {vgroup_id} of topic {topic}\n"); + .stream_with_timeout(Timeout::from_secs(10)) + .try_for_each(|(offset, message)| async move { + let topic = offset.topic(); + // the vgroup id, like partition id in kafka. + let vgroup_id = offset.vgroup_id(); + println!("* in vgroup id {vgroup_id} of topic {topic}\n"); - if let Some(data) = message.into_data() { - while let Some(block) = data.fetch_raw_block().await? { - let records: Vec = block.deserialize().try_collect()?; - // Add your data processing logic here - println!("** read {} records: {:#?}\n", records.len(), records); + if let Some(data) = message.into_data() { + while let Some(block) = data.fetch_raw_block().await? { + let records: Vec = block.deserialize().try_collect()?; + // Add your data processing logic here + println!("** read {} records: {:#?}\n", records.len(), records); + } } - } - Ok(()) - }) - .await.map_err(|e| { - eprintln!("Failed to poll data, topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", topic, group_id, client_id, e); - e - })?; + Ok(()) + }) + .await + .map_err(|e| { + eprintln!( + "Failed to poll data, topic: {}, groupId: {}, clientId: {}, ErrMessage: {:?}", + topic, group_id, client_id, e + ); + e + })?; // ANCHOR_END: consume - // ANCHOR: consumer_commit_manually + // ANCHOR: consumer_commit_manually consumer - .stream() + .stream_with_timeout(Timeout::from_secs(10)) .try_for_each(|(offset, message)| async { // the vgroup id, like partition id in kafka. let vgroup_id = offset.vgroup_id(); @@ -162,12 +176,14 @@ async fn main() -> anyhow::Result<()> { })?; // ANCHOR_END: consumer_commit_manually - // ANCHOR: seek_offset - let assignments = match consumer.assignments().await{ + let assignments = match consumer.assignments().await { Some(assignments) => assignments, None => { - let error_message = format!("Failed to get assignments. topic: {}, groupId: {}, clientId: {}", topic, group_id, client_id); + let error_message = format!( + "Failed to get assignments. topic: {}, groupId: {}, clientId: {}", + topic, group_id, client_id + ); eprintln!("{}", error_message); return Err(anyhow::anyhow!(error_message)); } @@ -185,14 +201,10 @@ async fn main() -> anyhow::Result<()> { let end = assignment.end(); println!( "topic: {}, vgroup_id: {}, current offset: {}, begin {}, end: {}", - topic, - vgroup_id, - current, - begin, - end + topic, vgroup_id, current, begin, end ); - match consumer.offset_seek(topic, vgroup_id, begin).await{ + match consumer.offset_seek(topic, vgroup_id, begin).await { Ok(_) => (), Err(err) => { eprintln!("Failed to seek offset, topic: {}, groupId: {}, clientId: {}, vGroupId: {}, begin: {}, ErrMessage: {:?}", @@ -207,10 +219,13 @@ async fn main() -> anyhow::Result<()> { } println!("Assignment seek to beginning successfully."); // after seek offset - let assignments = match consumer.assignments().await{ + let assignments = match consumer.assignments().await { Some(assignments) => assignments, None => { - let error_message = format!("Failed to get assignments. topic: {}, groupId: {}, clientId: {}", topic, group_id, client_id); + let error_message = format!( + "Failed to get assignments. topic: {}, groupId: {}, clientId: {}", + topic, group_id, client_id + ); eprintln!("{}", error_message); return Err(anyhow::anyhow!(error_message)); } @@ -225,10 +240,9 @@ async fn main() -> anyhow::Result<()> { tokio::time::sleep(Duration::from_secs(1)).await; - taos.exec_many([ - "drop topic topic_meters", - "drop database power", - ]) - .await?; + handle.join().unwrap(); + + taos.exec_many(["drop topic topic_meters", "drop database power"]) + .await?; Ok(()) } diff --git a/docs/zh/14-reference/05-connector/10-cpp.mdx b/docs/zh/14-reference/05-connector/10-cpp.mdx index 2e683931a1..e25cef1bf0 100644 --- a/docs/zh/14-reference/05-connector/10-cpp.mdx +++ b/docs/zh/14-reference/05-connector/10-cpp.mdx @@ -40,25 +40,15 @@ TDengine 客户端驱动的版本号与 TDengine 服务端的版本号是一一 本节展示了使用客户端驱动访问 TDengine 集群的常见访问方式的示例代码。 -### 同步查询示例 +- 同步查询示例:[同步查询](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) -- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/demo.c) +- 异步查询示例:[异步查询](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) -### 异步查询示例 +- 参数绑定示例:[参数绑定](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) -- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/asyncdemo.c) +- 无模式写入示例:[无模式写入](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) -### 参数绑定示例 - -- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/prepare.c) - -### 无模式写入示例 - -- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/schemaless.c) - -### 订阅和消费示例 - -- 请参考:[C example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) +- 订阅和消费示例:[订阅和消费](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/c/tmq.c) :::info 更多示例代码及下载请见 [GitHub](https://github.com/taosdata/TDengine/tree/develop/docs/examples/c)。 diff --git a/docs/zh/14-reference/05-connector/14-java.mdx b/docs/zh/14-reference/05-connector/14-java.mdx index a752867b3f..42322139a9 100644 --- a/docs/zh/14-reference/05-connector/14-java.mdx +++ b/docs/zh/14-reference/05-connector/14-java.mdx @@ -145,7 +145,7 @@ WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/w ## 示例程序汇总 -示例程序源码位于 `TDengine/examples/JDBC` 下: +示例程序源码位于 `TDengine/docs/examples/JDBC` 下: - JDBCDemo:JDBC 示例源程序。 - connectionPools:HikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。 @@ -154,7 +154,7 @@ WKB规范请参考[Well-Known Binary (WKB)](https://libgeos.org/specifications/w - springbootdemo: Springboot 中使用 taos-jdbcdriver。 - consumer-demo:Consumer 消费 TDengine 数据示例,可通过参数控制消费速度。 -请参考:[JDBC example](https://github.com/taosdata/TDengine/tree/3.0/examples/JDBC) +请参考:[JDBC example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/JDBC) ## 常见问题 diff --git a/docs/zh/14-reference/05-connector/26-rust.mdx b/docs/zh/14-reference/05-connector/26-rust.mdx index 6b0ec4a68d..25a90d4fab 100644 --- a/docs/zh/14-reference/05-connector/26-rust.mdx +++ b/docs/zh/14-reference/05-connector/26-rust.mdx @@ -85,9 +85,7 @@ TDengine 目前支持时间戳、数字、字符、布尔类型,与 Rust 对 ## 示例程序汇总 -示例程序源码位于 `TDengine/examples/rust` 下: - -请参考:[rust example](https://github.com/taosdata/TDengine/tree/3.0/examples/rust) +示例程序源码请参考:[rust example](https://github.com/taosdata/TDengine/tree/3.0/docs/examples/rust) ## 常见问题 diff --git a/examples/rust/.gitignore b/examples/rust/.gitignore deleted file mode 100644 index 96ef6c0b94..0000000000 --- a/examples/rust/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -Cargo.lock diff --git a/examples/rust/Cargo.toml b/examples/rust/Cargo.toml deleted file mode 100644 index 1ed73e2fde..0000000000 --- a/examples/rust/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "rust" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -taos = "*" - -[dev-dependencies] -chrono = "0.4" -itertools = "0.10.3" -pretty_env_logger = "0.4.0" -serde = { version = "1", features = ["derive"] } -serde_json = "1" -tokio = { version = "1", features = ["full"] } -anyhow = "1" diff --git a/examples/rust/src/main.rs b/examples/rust/src/main.rs deleted file mode 100644 index e7a11a969c..0000000000 --- a/examples/rust/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/examples/rust/wrapper.h b/examples/rust/wrapper.h deleted file mode 100644 index 78857597a9..0000000000 --- a/examples/rust/wrapper.h +++ /dev/null @@ -1 +0,0 @@ -#include