diff --git a/tests/test/c/CMakeLists.txt b/tests/test/c/CMakeLists.txt index 9f34d6b7749ee91577732cfca9ccaf3d48df0bd8..8189dd4d09d8643b740e4c43a0076286c1c5a9e6 100644 --- a/tests/test/c/CMakeLists.txt +++ b/tests/test/c/CMakeLists.txt @@ -11,4 +11,7 @@ IF ((TD_LINUX_64) OR (TD_LINUX_32 AND TD_ARM)) add_executable(insertPerRow insertPerRow.c) target_link_libraries(insertPerRow taos_static pthread) + + add_executable(importOneRow importOneRow.c) + target_link_libraries(importOneRow taos_static pthread) ENDIF() diff --git a/tests/test/c/importOneRow.c b/tests/test/c/importOneRow.c new file mode 100644 index 0000000000000000000000000000000000000000..ee548a4df17b802a08a5408761547eea9929ab6a --- /dev/null +++ b/tests/test/c/importOneRow.c @@ -0,0 +1,119 @@ +/* + * 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 . + */ + +#define _DEFAULT_SOURCE +#include "os.h" +#include "taos.h" +#include "tlog.h" +#include "ttimer.h" +#include "tutil.h" + +void taos_error(TAOS *taos); +void* taos_execute(void *param); + +typedef struct { + pthread_t pid; + int index; +} ThreadObj; + +int threadNum = 1; +int rowNum = 1000; +int replica = 1; + +int main(int argc, char *argv[]) { + if (argc == 1) { + printf("usage: %s rowNum threadNum replica configDir\n", argv[0]); + printf("default rowNum %d\n", rowNum); + printf("default threadNum %d\n", threadNum); + printf("default replica %d\n", replica); + exit(0); + } + + // a simple way to parse input parameters + if (argc >= 2) rowNum = atoi(argv[1]); + if (argc >= 3) threadNum = atoi(argv[2]); + if (argc >= 4) replica = atoi(argv[3]); + if (argc >= 5) strcpy(configDir, argv[4]); + + printf("rowNum:%d threadNum:%d replica:%d\n", threadNum, rowNum, replica); + + taos_init(); + + ThreadObj *threads = calloc(threadNum, sizeof(ThreadObj)); + for (int i = 0; i < threadNum; ++i) { + ThreadObj * pthread = threads + i; + pthread_attr_t thattr; + pthread->index = i; + pthread_attr_init(&thattr); + pthread_attr_setdetachstate(&thattr, PTHREAD_CREATE_JOINABLE); + pthread_create(&pthread->pid, &thattr, taos_execute, pthread); + } + + for (int i = 0; i < threadNum; i++) { + pthread_join(threads[i].pid, NULL); + } + + printf("all finished\n"); + + return 0; +} + +void taos_error(TAOS *con) { + fprintf(stderr, "TDengine error: %s\n", taos_errstr(con)); + taos_close(con); + exit(1); +} + +void* taos_execute(void *param) { + ThreadObj *pThread = (ThreadObj *)param; + + void *taos = taos_connect(tsMasterIp, tsDefaultUser, tsDefaultPass, NULL, 0); + if (taos == NULL) taos_error(taos); + + char sql[1024] = {0}; + sprintf(sql, "create database if not exists db replica %d", replica); + taos_query(taos, sql); + + sprintf(sql, "create table if not exists db.t%d (ts timestamp, i int, j float, k double)", pThread->index); + taos_query(taos, sql); + + int64_t timestamp = 1530374400000L; + + sprintf(sql, "insert into db.t%d values(%ld, %d, %d, %d)", pThread->index, timestamp, 0, 0, 0); + int code = taos_query(taos, sql); + if (code != 0) printf("error code:%d, sql:%s\n", code, sql); + int affectrows = taos_affected_rows(taos); + if (affectrows != 1) printf("affect rows:%d, sql:%s\n", affectrows, sql); + + timestamp -= 1000; + + int total_affect_rows = affectrows; + + for (int i = 1; i < rowNum; ++i) { + sprintf(sql, "import into db.t%d values(%ld, %d, %d, %d)", pThread->index, timestamp, i, i, i); + code = taos_query(taos, sql); + if (code != 0) printf("error code:%d, sql:%s\n", code, sql); + int affectrows = taos_affected_rows(taos); + if (affectrows != 1) printf("affect rows:%d, sql:%s\n", affectrows, sql); + + total_affect_rows += affectrows; + + timestamp -= 1000; + } + + printf("thread:%d run finished total_affect_rows:%d\n", pThread->index, total_affect_rows); + + return NULL; +}