commit
d9c8642df9
|
@ -29,6 +29,7 @@
|
|||
#include <iconv.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "os.h"
|
||||
#include "taos.h"
|
||||
#include "taosdef.h"
|
||||
#include "taosmsg.h"
|
||||
|
@ -191,7 +192,7 @@ struct arguments {
|
|||
char *user;
|
||||
char *password;
|
||||
uint16_t port;
|
||||
char cversion[TSDB_FILENAME_LEN+1];
|
||||
char cversion[12];
|
||||
uint16_t mysqlFlag;
|
||||
// output file
|
||||
char outpath[TSDB_FILENAME_LEN+1];
|
||||
|
@ -248,7 +249,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||
fprintf(stderr, "Invalid client vesion %s\n", arg);
|
||||
return -1;
|
||||
}
|
||||
strcpy(arguments->cversion, full_path.we_wordv[0]);
|
||||
tstrncpy(arguments->cversion, full_path.we_wordv[0], 11);
|
||||
wordfree(&full_path);
|
||||
break;
|
||||
// output file path
|
||||
|
@ -257,7 +258,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||
fprintf(stderr, "Invalid path %s\n", arg);
|
||||
return -1;
|
||||
}
|
||||
strcpy(arguments->outpath, full_path.we_wordv[0]);
|
||||
tstrncpy(arguments->outpath, full_path.we_wordv[0], TSDB_FILENAME_LEN);
|
||||
wordfree(&full_path);
|
||||
break;
|
||||
case 'i':
|
||||
|
@ -266,7 +267,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||
fprintf(stderr, "Invalid path %s\n", arg);
|
||||
return -1;
|
||||
}
|
||||
strcpy(arguments->inpath, full_path.we_wordv[0]);
|
||||
tstrncpy(arguments->inpath, full_path.we_wordv[0], TSDB_FILENAME_LEN);
|
||||
wordfree(&full_path);
|
||||
break;
|
||||
case 'c':
|
||||
|
@ -430,7 +431,7 @@ int main(int argc, char *argv[]) {
|
|||
printf("==============================\n");
|
||||
|
||||
if (tsArguments.cversion[0] != 0){
|
||||
strcpy(version, tsArguments.cversion);
|
||||
tstrncpy(version, tsArguments.cversion, 11);
|
||||
}
|
||||
|
||||
if (taosCheckParam(&tsArguments) < 0) {
|
||||
|
@ -513,7 +514,7 @@ int taosGetTableRecordInfo(char *table, STableRecordInfo *pTableRecordInfo, TAOS
|
|||
while ((row = taos_fetch_row(result)) != NULL) {
|
||||
isSet = true;
|
||||
pTableRecordInfo->isMetric = true;
|
||||
strcpy(pTableRecordInfo->tableRecord.metric, table);
|
||||
tstrncpy(pTableRecordInfo->tableRecord.metric, table, TSDB_TABLE_NAME_LEN);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -541,9 +542,9 @@ int32_t taosSaveAllNormalTableToTempFile(TAOS *taosCon, char*meter, char* metric
|
|||
}
|
||||
}
|
||||
|
||||
memset(tableRecord.name, 0, sizeof(STableRecord));
|
||||
strcpy(tableRecord.name, meter);
|
||||
strcpy(tableRecord.metric, metric);
|
||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||
tstrncpy(tableRecord.name, meter, TSDB_TABLE_NAME_LEN);
|
||||
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
||||
|
||||
taosTWrite(*fd, &tableRecord, sizeof(STableRecord));
|
||||
return 0;
|
||||
|
@ -587,7 +588,7 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
|||
taos_free_result(result);
|
||||
for (int32_t loopCnt = 0; loopCnt < numOfThread; loopCnt++) {
|
||||
sprintf(tmpFileName, ".tables.tmp.%d", loopCnt);
|
||||
remove(tmpFileName);
|
||||
(void)remove(tmpFileName);
|
||||
}
|
||||
free(tmpCommand);
|
||||
return -1;
|
||||
|
@ -597,8 +598,8 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
|||
}
|
||||
|
||||
memset(tableRecord.name, 0, sizeof(STableRecord));
|
||||
strncpy(tableRecord.name, (char *)row[0], fields[0].bytes);
|
||||
strcpy(tableRecord.metric, metric);
|
||||
tstrncpy(tableRecord.name, (char *)row[0], fields[0].bytes);
|
||||
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
||||
|
||||
taosTWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||
|
||||
|
@ -606,12 +607,16 @@ int32_t taosSaveTableOfMetricToTempFile(TAOS *taosCon, char* metric, struct argu
|
|||
|
||||
if (numOfTable >= arguments->table_batch) {
|
||||
numOfTable = 0;
|
||||
taosClose(fd);
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
}
|
||||
taosClose(fd);
|
||||
fd = -1;
|
||||
|
||||
if (fd >= 0) {
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
taos_free_result(result);
|
||||
|
||||
*totalNumOfThread = numOfThread;
|
||||
|
@ -852,7 +857,7 @@ int taosGetTableDes(char *table, STableDef *tableDes, TAOS* taosCon, bool isSupe
|
|||
|
||||
TAOS_FIELD *fields = taos_fetch_fields(tmpResult);
|
||||
|
||||
strcpy(tableDes->name, table);
|
||||
tstrncpy(tableDes->name, table, TSDB_COL_NAME_LEN);
|
||||
|
||||
while ((row = taos_fetch_row(tmpResult)) != NULL) {
|
||||
strncpy(tableDes->cols[count].field, (char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX],
|
||||
|
@ -1056,6 +1061,7 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
|||
fp = fopen(tmpFileName, "w");
|
||||
if (fp == NULL) {
|
||||
fprintf(stderr, "failed to open file %s\n", tmpFileName);
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1067,16 +1073,20 @@ void* taosDumpOutWorkThreadFp(void *arg)
|
|||
if (code != 0) {
|
||||
fprintf(stderr, "invalid database %s\n", pThread->dbName);
|
||||
taos_free_result(tmpResult);
|
||||
fclose(fp);
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fprintf(fp, "USE %s\n\n", pThread->dbName);
|
||||
while (read(fd, &tableRecord, sizeof(STableRecord)) > 0) {
|
||||
while (1) {
|
||||
ssize_t readLen = read(fd, &tableRecord, sizeof(STableRecord));
|
||||
if (readLen <= 0) break;
|
||||
taosDumpTable(tableRecord.name, tableRecord.metric, &tsArguments, fp, pThread->taosCon);
|
||||
}
|
||||
|
||||
taos_free_result(tmpResult);
|
||||
taosClose(fd);
|
||||
close(fd);
|
||||
fclose(fp);
|
||||
|
||||
return NULL;
|
||||
|
@ -1090,7 +1100,7 @@ static void taosStartDumpOutWorkThreads(struct arguments* args, int32_t numOfTh
|
|||
SThreadParaObj *pThread = threadObj + t;
|
||||
pThread->threadIndex = t;
|
||||
pThread->totalThreads = numOfThread;
|
||||
strcpy(pThread->dbName, dbName);
|
||||
tstrncpy(pThread->dbName, dbName, TSDB_TABLE_NAME_LEN);
|
||||
pThread->taosCon = taos_connect(args->host, args->user, args->password, NULL, args->port);
|
||||
|
||||
if (pThread->taosCon == NULL) {
|
||||
|
@ -1189,7 +1199,7 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
|||
fprintf(stderr, "failed to open temp file: %s\n", tmpFileName);
|
||||
taos_free_result(tmpResult);
|
||||
free(tmpCommand);
|
||||
remove(".stables.tmp");
|
||||
(void)remove(".stables.tmp");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
@ -1200,14 +1210,17 @@ int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE *fp)
|
|||
}
|
||||
|
||||
taos_free_result(tmpResult);
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
(void)lseek(fd, 0, SEEK_SET);
|
||||
|
||||
while (read(fd, &tableRecord, sizeof(STableRecord)) > 0) {
|
||||
while (1) {
|
||||
ssize_t readLen = read(fd, &tableRecord, sizeof(STableRecord));
|
||||
if (readLen <= 0) break;
|
||||
|
||||
(void)taosDumpStable(tableRecord.name, fp, taosCon);
|
||||
}
|
||||
|
||||
taosClose(fd);
|
||||
remove(".stables.tmp");
|
||||
close(fd);
|
||||
(void)remove(".stables.tmp");
|
||||
|
||||
free(tmpCommand);
|
||||
return 0;
|
||||
|
@ -1269,7 +1282,7 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
|||
taos_free_result(tmpResult);
|
||||
for (int32_t loopCnt = 0; loopCnt < numOfThread; loopCnt++) {
|
||||
sprintf(tmpFileName, ".tables.tmp.%d", loopCnt);
|
||||
remove(tmpFileName);
|
||||
(void)remove(tmpFileName);
|
||||
}
|
||||
free(tmpCommand);
|
||||
return -1;
|
||||
|
@ -1279,8 +1292,8 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
|||
}
|
||||
|
||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||
strncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
||||
strncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX], fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes);
|
||||
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX], fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes);
|
||||
tstrncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX], fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes);
|
||||
|
||||
taosTWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||
|
||||
|
@ -1288,19 +1301,23 @@ int taosDumpDb(SDbInfo *dbInfo, struct arguments *arguments, FILE *fp, TAOS *tao
|
|||
|
||||
if (numOfTable >= arguments->table_batch) {
|
||||
numOfTable = 0;
|
||||
taosClose(fd);
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
}
|
||||
taosClose(fd);
|
||||
fd = -1;
|
||||
|
||||
if (fd >= 0) {
|
||||
close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
taos_free_result(tmpResult);
|
||||
|
||||
// start multi threads to dumpout
|
||||
taosStartDumpOutWorkThreads(arguments, numOfThread, dbInfo->name);
|
||||
for (int loopCnt = 0; loopCnt < numOfThread; loopCnt++) {
|
||||
sprintf(tmpFileName, ".tables.tmp.%d", loopCnt);
|
||||
remove(tmpFileName);
|
||||
(void)remove(tmpFileName);
|
||||
}
|
||||
|
||||
free(tmpCommand);
|
||||
|
@ -1718,6 +1735,10 @@ int convertNCharToReadable(char *str, int size, char *buf, int bufsize) {
|
|||
while (size > 0) {
|
||||
if (*pstr == '\0') break;
|
||||
int byte_width = mbtowc(&wc, pstr, MB_CUR_MAX);
|
||||
if (byte_width < 0) {
|
||||
fprintf(stderr, "mbtowc() return fail.\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if ((int)wc < 256) {
|
||||
pbuf = stpcpy(pbuf, ascii_literal_list[(int)wc]);
|
||||
|
@ -1736,16 +1757,16 @@ int convertNCharToReadable(char *str, int size, char *buf, int bufsize) {
|
|||
void taosDumpCharset(FILE *fp) {
|
||||
char charsetline[256];
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
(void)fseek(fp, 0, SEEK_SET);
|
||||
sprintf(charsetline, "#!%s\n", tsCharset);
|
||||
fwrite(charsetline, strlen(charsetline), 1, fp);
|
||||
(void)fwrite(charsetline, strlen(charsetline), 1, fp);
|
||||
}
|
||||
|
||||
void taosLoadFileCharset(FILE *fp, char *fcharset) {
|
||||
char * line = NULL;
|
||||
size_t line_size = 0;
|
||||
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
(void)fseek(fp, 0, SEEK_SET);
|
||||
ssize_t size = getline(&line, &line_size, fp);
|
||||
if (size <= 2) {
|
||||
goto _exit_no_charset;
|
||||
|
@ -1764,7 +1785,7 @@ void taosLoadFileCharset(FILE *fp, char *fcharset) {
|
|||
return;
|
||||
|
||||
_exit_no_charset:
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
(void)fseek(fp, 0, SEEK_SET);
|
||||
*fcharset = '\0';
|
||||
taosTFree(line);
|
||||
return;
|
||||
|
@ -1825,6 +1846,7 @@ static void taosParseDirectory(const char *directoryName, const char *prefix, ch
|
|||
|
||||
if (fileNum != totalFiles) {
|
||||
fprintf(stderr, "ERROR: directory:%s changed while read\n", directoryName);
|
||||
pclose(fp);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
char version[12] = "2.0.0.0";
|
||||
char compatible_version[12] = "2.0.0.0";
|
||||
char gitinfo[48] = "3264067e97300c84caa61ac909d548c9ca56de6b";
|
||||
char gitinfoOfInternal[48] = "da88f4a2474737d1f9c76adcf0ff7fd0975e7342";
|
||||
char buildinfo[64] = "Built by root at 2020-04-01 14:38";
|
||||
char gitinfo[48] = "8df8b7d9930342dd34ba13df160a7d538fad7bc7";
|
||||
char gitinfoOfInternal[48] = "bad4f040145fba581d1ab0c5dd718a5ede3e209f";
|
||||
char buildinfo[64] = "Built by root at 2020-08-03 17:23";
|
||||
|
||||
void libtaos_1_6_5_4_Linux_x64() {};
|
||||
void libtaos_2_0_0_0_Linux_x64() {};
|
||||
|
|
Loading…
Reference in New Issue