From 3d70319913feb1a486f47542e4b9e3412e045bcc Mon Sep 17 00:00:00 2001 From: shenglian zhou Date: Mon, 12 Jul 2021 09:17:15 +0800 Subject: [PATCH] create child table with tags --- src/client/src/tscParseLineProtocol.c | 73 ++++++++++++++++++--------- tests/examples/c/apitest.c | 2 +- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/client/src/tscParseLineProtocol.c b/src/client/src/tscParseLineProtocol.c index 1fde741c2b..dd0e64ba84 100644 --- a/src/client/src/tscParseLineProtocol.c +++ b/src/client/src/tscParseLineProtocol.c @@ -377,39 +377,66 @@ int32_t getChildTableName(TAOS_SML_DATA_POINT* point, char* tableName, int* tabl return 0; } -int32_t getPreparedSQL(const char* sTableName, SArray* tagsSchema, SArray* colsSchema, char* result, int16_t freeBytes) { +int32_t creatChildTableIfNotExists(TAOS* taos, const char* cTableName, const char* sTableName, SArray* tagsSchema, SArray* tagsBind) { size_t numTags = taosArrayGetSize(tagsSchema); - size_t numCols = taosArrayGetSize(colsSchema); - sprintf(result, "insert into ? using %s", sTableName); + char sql[TSDB_MAX_BINARY_LEN] = {0}; + int freeBytes = TSDB_MAX_BINARY_LEN; + sprintf(sql, "create table if not exists %s using %s", cTableName, sTableName); -// snprintf(result+strlen(result), freeBytes-strlen(result), "("); -// for (int i = 0; i < numTags; ++i) { -// SSchema* tagSchema = taosArrayGet(tagsSchema, i); -// snprintf(result+strlen(result), freeBytes-strlen(result), "%s,", tagSchema->name); -// } -// snprintf(result + strlen(result)-1, freeBytes-strlen(result)+1, ")"); + snprintf(sql+strlen(sql), freeBytes-strlen(sql), "("); + for (int i = 0; i < numTags; ++i) { + SSchema* tagSchema = taosArrayGet(tagsSchema, i); + snprintf(sql+strlen(sql), freeBytes-strlen(sql), "%s,", tagSchema->name); + } + snprintf(sql + strlen(sql) - 1, freeBytes-strlen(sql)+1, ")"); - snprintf(result + strlen(result), freeBytes-strlen(result), " tags ("); + snprintf(sql + strlen(sql), freeBytes-strlen(sql), " tags ("); for (int i = 0; i < numTags; ++i) { - snprintf(result+strlen(result), freeBytes-strlen(result), "?,"); + snprintf(sql+strlen(sql), freeBytes-strlen(sql), "?,"); } - snprintf(result + strlen(result)-1, freeBytes-strlen(result)+1, ") ("); + snprintf(sql + strlen(sql) - 1, freeBytes-strlen(sql)+1, ")"); + + TAOS_STMT* stmt = taos_stmt_init(taos); + int32_t code; + code = taos_stmt_prepare(stmt, sql, strlen(sql)); + if (code != 0) { + printf("%s", taos_stmt_errstr(stmt)); + return code; + } + + code = taos_stmt_bind_param(stmt, TARRAY_GET_START(tagsBind)); + if (code != 0) { + printf("%s", taos_stmt_errstr(stmt)); + return code; + } + + code = taos_stmt_execute(stmt); + if (code != 0) { + printf("%s", taos_stmt_errstr(stmt)); + return code; + } + TAOS_RES* res = taos_stmt_use_result(stmt); + return taos_errno(res); +} + +int32_t insertBatch(TAOS* taos, char* cTableName, SArray* colsSchema, SArray* rowsBind) { + size_t numCols = taosArrayGetSize(colsSchema); + char sql[TSDB_MAX_BINARY_LEN]; + int32_t freeBytes = TSDB_MAX_BINARY_LEN; + sprintf(sql, "insert into ? ("); for (int i = 0; i < numCols; ++i) { SSchema* colSchema = taosArrayGet(colsSchema, i); - snprintf(result+strlen(result), freeBytes-strlen(result), "%s,", colSchema->name); + snprintf(sql+strlen(sql), freeBytes-strlen(sql), "%s,", colSchema->name); } - snprintf(result + strlen(result)-1, freeBytes-strlen(result)+1, ") values ("); + snprintf(sql + strlen(sql)-1, freeBytes-strlen(sql)+1, ") values ("); for (int i = 0; i < numCols; ++i) { - snprintf(result+strlen(result), freeBytes-strlen(result), "?,"); + snprintf(sql+strlen(sql), freeBytes-strlen(sql), "?,"); } - snprintf(result + strlen(result)-1, freeBytes-strlen(result)+1, ")"); - return 0; -} + snprintf(sql + strlen(sql)-1, freeBytes-strlen(sql)+1, ")"); -int32_t insertBatch(TAOS* taos, char* sql, char* cTableName, SArray* tagsBind, SArray* rowsBind) { TAOS_STMT* stmt = taos_stmt_init(taos); int32_t code; code = taos_stmt_prepare(stmt, sql, strlen(sql)); @@ -418,7 +445,7 @@ int32_t insertBatch(TAOS* taos, char* sql, char* cTableName, SArray* tagsBind, S return code; } - code = taos_stmt_set_tbname_tags(stmt, cTableName, TARRAY_GET_START(tagsBind)); + code = taos_stmt_set_tbname(stmt, cTableName); if (code != 0) { printf("%s", taos_stmt_errstr(stmt)); return code; @@ -478,7 +505,6 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints) TAOS_SML_DATA_POINT * point = taosArrayGetP(cTablePoints, 0); int32_t numTags = taosArrayGetSize(point->schema->tags); int32_t numCols = taosArrayGetSize(point->schema->fields); - char* stableName = point->stableName; char* ctableName = point->childTableName; SArray* tagBinds = taosArrayInit(numTags, sizeof(TAOS_BIND)); @@ -523,9 +549,8 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints) taosArrayPush(rowsBind, &colBinds); } - char sql[TSDB_MAX_BINARY_LEN]; - getPreparedSQL(stableName, point->schema->tags, point->schema->fields, sql, TSDB_MAX_BINARY_LEN); - insertBatch(taos, sql, ctableName, tagBinds, rowsBind); + creatChildTableIfNotExists(taos, point->childTableName, point->stableName, point->schema->tags, tagBinds); + insertBatch(taos, ctableName, point->schema->fields, rowsBind); pCTablePoints = taosHashIterate(cname2points, pCTablePoints); } diff --git a/tests/examples/c/apitest.c b/tests/examples/c/apitest.c index 04a03df6fa..5272dafaf1 100644 --- a/tests/examples/c/apitest.c +++ b/tests/examples/c/apitest.c @@ -956,7 +956,7 @@ int32_t verify_schema_less(TAOS* taos) { "st,t1=4i,t2=5,t3=\"t4\" c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833640", "st,t1=4i,t2=5,t3=\"t4\" c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833642" }; - int code = taos_insert_by_lines(taos, lines , 2); + int code = taos_insert_by_lines(taos, lines , 3); return code; } -- GitLab