提交 4a75ebe4 编写于 作者: S shenglian zhou

create child table with tags

上级 3d25ecdf
...@@ -377,39 +377,66 @@ int32_t getChildTableName(TAOS_SML_DATA_POINT* point, char* tableName, int* tabl ...@@ -377,39 +377,66 @@ int32_t getChildTableName(TAOS_SML_DATA_POINT* point, char* tableName, int* tabl
return 0; 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 numTags = taosArrayGetSize(tagsSchema);
size_t numCols = taosArrayGetSize(colsSchema); char sql[TSDB_MAX_BINARY_LEN] = {0};
sprintf(result, "insert into ? using %s", sTableName); 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), "("); snprintf(sql+strlen(sql), freeBytes-strlen(sql), "(");
// for (int i = 0; i < numTags; ++i) { for (int i = 0; i < numTags; ++i) {
// SSchema* tagSchema = taosArrayGet(tagsSchema, i); SSchema* tagSchema = taosArrayGet(tagsSchema, i);
// snprintf(result+strlen(result), freeBytes-strlen(result), "%s,", tagSchema->name); snprintf(sql+strlen(sql), freeBytes-strlen(sql), "%s,", tagSchema->name);
// } }
// snprintf(result + strlen(result)-1, freeBytes-strlen(result)+1, ")"); 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) { 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) { for (int i = 0; i < numCols; ++i) {
SSchema* colSchema = taosArrayGet(colsSchema, 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) { 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, ")"); snprintf(sql + strlen(sql)-1, freeBytes-strlen(sql)+1, ")");
return 0;
}
int32_t insertBatch(TAOS* taos, char* sql, char* cTableName, SArray* tagsBind, SArray* rowsBind) {
TAOS_STMT* stmt = taos_stmt_init(taos); TAOS_STMT* stmt = taos_stmt_init(taos);
int32_t code; int32_t code;
code = taos_stmt_prepare(stmt, sql, strlen(sql)); code = taos_stmt_prepare(stmt, sql, strlen(sql));
...@@ -418,7 +445,7 @@ int32_t insertBatch(TAOS* taos, char* sql, char* cTableName, SArray* tagsBind, S ...@@ -418,7 +445,7 @@ int32_t insertBatch(TAOS* taos, char* sql, char* cTableName, SArray* tagsBind, S
return code; return code;
} }
code = taos_stmt_set_tbname_tags(stmt, cTableName, TARRAY_GET_START(tagsBind)); code = taos_stmt_set_tbname(stmt, cTableName);
if (code != 0) { if (code != 0) {
printf("%s", taos_stmt_errstr(stmt)); printf("%s", taos_stmt_errstr(stmt));
return code; return code;
...@@ -478,7 +505,6 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints) ...@@ -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); TAOS_SML_DATA_POINT * point = taosArrayGetP(cTablePoints, 0);
int32_t numTags = taosArrayGetSize(point->schema->tags); int32_t numTags = taosArrayGetSize(point->schema->tags);
int32_t numCols = taosArrayGetSize(point->schema->fields); int32_t numCols = taosArrayGetSize(point->schema->fields);
char* stableName = point->stableName;
char* ctableName = point->childTableName; char* ctableName = point->childTableName;
SArray* tagBinds = taosArrayInit(numTags, sizeof(TAOS_BIND)); SArray* tagBinds = taosArrayInit(numTags, sizeof(TAOS_BIND));
...@@ -523,9 +549,8 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints) ...@@ -523,9 +549,8 @@ int32_t insertPoints(TAOS* taos, TAOS_SML_DATA_POINT* points, int32_t numPoints)
taosArrayPush(rowsBind, &colBinds); taosArrayPush(rowsBind, &colBinds);
} }
char sql[TSDB_MAX_BINARY_LEN]; creatChildTableIfNotExists(taos, point->childTableName, point->stableName, point->schema->tags, tagBinds);
getPreparedSQL(stableName, point->schema->tags, point->schema->fields, sql, TSDB_MAX_BINARY_LEN); insertBatch(taos, ctableName, point->schema->fields, rowsBind);
insertBatch(taos, sql, ctableName, tagBinds, rowsBind);
pCTablePoints = taosHashIterate(cname2points, pCTablePoints); pCTablePoints = taosHashIterate(cname2points, pCTablePoints);
} }
......
...@@ -956,7 +956,7 @@ int32_t verify_schema_less(TAOS* taos) { ...@@ -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 1626006833640",
"st,t1=4i,t2=5,t3=\"t4\" c1=3i,c3=L\"passitagain\",c2=true,c4=5 1626006833642" "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; return code;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册