Merge branch 'master' into feature/TD-5739
This commit is contained in:
commit
ae30c6f4ea
|
@ -231,8 +231,8 @@ static struct argp_option options[] = {
|
||||||
{"schemaonly", 's', 0, 0, "Only dump schema.", 2},
|
{"schemaonly", 's', 0, 0, "Only dump schema.", 2},
|
||||||
{"without-property", 'N', 0, 0, "Dump schema without properties.", 2},
|
{"without-property", 'N', 0, 0, "Dump schema without properties.", 2},
|
||||||
{"avro", 'V', 0, 0, "Dump apache avro format data file. By default, dump sql command sequence.", 2},
|
{"avro", 'V', 0, 0, "Dump apache avro format data file. By default, dump sql command sequence.", 2},
|
||||||
{"start-time", 'S', "START_TIME", 0, "Start time to dump. Either epoch or ISO8601/RFC3339 format is acceptable. ISO8601 format example: 2017-10-01T18:00:00.000+0800 or 2017-10-0100:00:00.000+0800 or '2017-10-01 00:00:00.000+0800'", 4},
|
{"start-time", 'S', "START_TIME", 0, "Start time to dump. Either epoch or ISO8601/RFC3339 format is acceptable. ISO8601 format example: 2017-10-01T18:00:00.000+0800 or '2017-10-01 00:00:00.000+0800'", 4},
|
||||||
{"end-time", 'E', "END_TIME", 0, "End time to dump. Either epoch or ISO8601/RFC3339 format is acceptable. ISO8601 format example: 2017-10-01T18:00:00.000+0800 or 2017-10-0100:00:00.000+0800 or '2017-10-01 00:00:00.000+0800'", 5},
|
{"end-time", 'E', "END_TIME", 0, "End time to dump. Either epoch or ISO8601/RFC3339 format is acceptable. ISO8601 format example: 2017-10-01T18:00:00.000+0800 or '2017-10-01 00:00:00.000+0800'", 5},
|
||||||
#if TSDB_SUPPORT_NANOSECOND == 1
|
#if TSDB_SUPPORT_NANOSECOND == 1
|
||||||
{"precision", 'C', "PRECISION", 0, "Specify precision for converting human-readable time to epoch. Valid value is one of ms, us, and ns. Default is ms.", 6},
|
{"precision", 'C', "PRECISION", 0, "Specify precision for converting human-readable time to epoch. Valid value is one of ms, us, and ns. Default is ms.", 6},
|
||||||
#else
|
#else
|
||||||
|
@ -307,7 +307,7 @@ static void taosDumpCreateTableClause(STableDef *tableDes, int numOfCols,
|
||||||
FILE *fp, char* dbName);
|
FILE *fp, char* dbName);
|
||||||
static void taosDumpCreateMTableClause(STableDef *tableDes, char *metric,
|
static void taosDumpCreateMTableClause(STableDef *tableDes, char *metric,
|
||||||
int numOfCols, FILE *fp, char* dbName);
|
int numOfCols, FILE *fp, char* dbName);
|
||||||
static int32_t taosDumpTable(char *table, char *metric,
|
static int32_t taosDumpTable(char *tbName, char *metric,
|
||||||
FILE *fp, TAOS* taosCon, char* dbName);
|
FILE *fp, TAOS* taosCon, char* dbName);
|
||||||
static int taosDumpTableData(FILE *fp, char *tbName,
|
static int taosDumpTableData(FILE *fp, char *tbName,
|
||||||
TAOS* taosCon, char* dbName,
|
TAOS* taosCon, char* dbName,
|
||||||
|
@ -340,7 +340,7 @@ struct arguments g_args = {
|
||||||
false, // schemeonly
|
false, // schemeonly
|
||||||
true, // with_property
|
true, // with_property
|
||||||
false, // avro format
|
false, // avro format
|
||||||
-INT64_MAX, // start_time
|
-INT64_MAX, // start_time
|
||||||
INT64_MAX, // end_time
|
INT64_MAX, // end_time
|
||||||
"ms", // precision
|
"ms", // precision
|
||||||
1, // data_batch
|
1, // data_batch
|
||||||
|
@ -798,11 +798,11 @@ static int taosGetTableRecordInfo(
|
||||||
tstrncpy(pTableRecordInfo->tableRecord.name,
|
tstrncpy(pTableRecordInfo->tableRecord.name,
|
||||||
(char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
(char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
||||||
min(TSDB_TABLE_NAME_LEN,
|
min(TSDB_TABLE_NAME_LEN,
|
||||||
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes) + 1);
|
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes + 1));
|
||||||
tstrncpy(pTableRecordInfo->tableRecord.metric,
|
tstrncpy(pTableRecordInfo->tableRecord.metric,
|
||||||
(char *)row[TSDB_SHOW_TABLES_METRIC_INDEX],
|
(char *)row[TSDB_SHOW_TABLES_METRIC_INDEX],
|
||||||
min(TSDB_TABLE_NAME_LEN,
|
min(TSDB_TABLE_NAME_LEN,
|
||||||
fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes) + 1);
|
fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes + 1));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -945,7 +945,7 @@ static int32_t taosSaveTableOfMetricToTempFile(
|
||||||
|
|
||||||
int32_t numOfThread = *totalNumOfThread;
|
int32_t numOfThread = *totalNumOfThread;
|
||||||
int subFd = -1;
|
int subFd = -1;
|
||||||
for (; numOfThread < maxThreads; numOfThread++) {
|
for (; numOfThread <= maxThreads; numOfThread++) {
|
||||||
memset(tmpBuf, 0, MAX_FILE_NAME_LEN);
|
memset(tmpBuf, 0, MAX_FILE_NAME_LEN);
|
||||||
sprintf(tmpBuf, ".tables.tmp.%d", numOfThread);
|
sprintf(tmpBuf, ".tables.tmp.%d", numOfThread);
|
||||||
subFd = open(tmpBuf, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH);
|
subFd = open(tmpBuf, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH);
|
||||||
|
@ -1084,7 +1084,7 @@ _dump_db_point:
|
||||||
}
|
}
|
||||||
|
|
||||||
tstrncpy(g_dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX],
|
tstrncpy(g_dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX],
|
||||||
min(TSDB_DB_NAME_LEN, fields[TSDB_SHOW_DB_NAME_INDEX].bytes) + 1);
|
min(TSDB_DB_NAME_LEN, fields[TSDB_SHOW_DB_NAME_INDEX].bytes + 1));
|
||||||
if (g_args.with_property) {
|
if (g_args.with_property) {
|
||||||
g_dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
g_dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
||||||
g_dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]);
|
g_dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]);
|
||||||
|
@ -1093,7 +1093,7 @@ _dump_db_point:
|
||||||
g_dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]);
|
g_dbInfos[count]->days = *((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]);
|
||||||
|
|
||||||
tstrncpy(g_dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX],
|
tstrncpy(g_dbInfos[count]->keeplist, (char *)row[TSDB_SHOW_DB_KEEP_INDEX],
|
||||||
min(32, fields[TSDB_SHOW_DB_KEEP_INDEX].bytes) + 1);
|
min(32, fields[TSDB_SHOW_DB_KEEP_INDEX].bytes + 1));
|
||||||
//g_dbInfos[count]->daysToKeep = *((int16_t *)row[TSDB_SHOW_DB_KEEP_INDEX]);
|
//g_dbInfos[count]->daysToKeep = *((int16_t *)row[TSDB_SHOW_DB_KEEP_INDEX]);
|
||||||
//g_dbInfos[count]->daysToKeep1;
|
//g_dbInfos[count]->daysToKeep1;
|
||||||
//g_dbInfos[count]->daysToKeep2;
|
//g_dbInfos[count]->daysToKeep2;
|
||||||
|
@ -1107,7 +1107,7 @@ _dump_db_point:
|
||||||
g_dbInfos[count]->cachelast = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_CACHELAST_INDEX]));
|
g_dbInfos[count]->cachelast = (int8_t)(*((int8_t *)row[TSDB_SHOW_DB_CACHELAST_INDEX]));
|
||||||
|
|
||||||
tstrncpy(g_dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX],
|
tstrncpy(g_dbInfos[count]->precision, (char *)row[TSDB_SHOW_DB_PRECISION_INDEX],
|
||||||
min(8, fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes) + 1);
|
min(8, fields[TSDB_SHOW_DB_PRECISION_INDEX].bytes + 1));
|
||||||
//g_dbInfos[count]->precision = *((int8_t *)row[TSDB_SHOW_DB_PRECISION_INDEX]);
|
//g_dbInfos[count]->precision = *((int8_t *)row[TSDB_SHOW_DB_PRECISION_INDEX]);
|
||||||
g_dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]);
|
g_dbInfos[count]->update = *((int8_t *)row[TSDB_SHOW_DB_UPDATE_INDEX]);
|
||||||
}
|
}
|
||||||
|
@ -1237,7 +1237,7 @@ _exit_failure:
|
||||||
|
|
||||||
static int taosGetTableDes(
|
static int taosGetTableDes(
|
||||||
char* dbName, char *table,
|
char* dbName, char *table,
|
||||||
STableDef *tableDes, TAOS* taosCon, bool isSuperTable) {
|
STableDef *stableDes, TAOS* taosCon, bool isSuperTable) {
|
||||||
TAOS_ROW row = NULL;
|
TAOS_ROW row = NULL;
|
||||||
TAOS_RES* res = NULL;
|
TAOS_RES* res = NULL;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
@ -1256,18 +1256,18 @@ static int taosGetTableDes(
|
||||||
|
|
||||||
TAOS_FIELD *fields = taos_fetch_fields(res);
|
TAOS_FIELD *fields = taos_fetch_fields(res);
|
||||||
|
|
||||||
tstrncpy(tableDes->name, table, TSDB_TABLE_NAME_LEN);
|
tstrncpy(stableDes->name, table, TSDB_TABLE_NAME_LEN);
|
||||||
while ((row = taos_fetch_row(res)) != NULL) {
|
while ((row = taos_fetch_row(res)) != NULL) {
|
||||||
tstrncpy(tableDes->cols[count].field,
|
tstrncpy(stableDes->cols[count].field,
|
||||||
(char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX],
|
(char *)row[TSDB_DESCRIBE_METRIC_FIELD_INDEX],
|
||||||
min(TSDB_COL_NAME_LEN + 1,
|
min(TSDB_COL_NAME_LEN + 1,
|
||||||
fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes + 1));
|
fields[TSDB_DESCRIBE_METRIC_FIELD_INDEX].bytes + 1));
|
||||||
tstrncpy(tableDes->cols[count].type,
|
tstrncpy(stableDes->cols[count].type,
|
||||||
(char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX],
|
(char *)row[TSDB_DESCRIBE_METRIC_TYPE_INDEX],
|
||||||
min(16, fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes + 1));
|
min(16, fields[TSDB_DESCRIBE_METRIC_TYPE_INDEX].bytes + 1));
|
||||||
tableDes->cols[count].length =
|
stableDes->cols[count].length =
|
||||||
*((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]);
|
*((int *)row[TSDB_DESCRIBE_METRIC_LENGTH_INDEX]);
|
||||||
tstrncpy(tableDes->cols[count].note,
|
tstrncpy(stableDes->cols[count].note,
|
||||||
(char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX],
|
(char *)row[TSDB_DESCRIBE_METRIC_NOTE_INDEX],
|
||||||
min(COL_NOTE_LEN,
|
min(COL_NOTE_LEN,
|
||||||
fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes + 1));
|
fields[TSDB_DESCRIBE_METRIC_NOTE_INDEX].bytes + 1));
|
||||||
|
@ -1284,11 +1284,11 @@ static int taosGetTableDes(
|
||||||
|
|
||||||
// if chidl-table have tag, using select tagName from table to get tagValue
|
// if chidl-table have tag, using select tagName from table to get tagValue
|
||||||
for (int i = 0 ; i < count; i++) {
|
for (int i = 0 ; i < count; i++) {
|
||||||
if (strcmp(tableDes->cols[i].note, "TAG") != 0) continue;
|
if (strcmp(stableDes->cols[i].note, "TAG") != 0) continue;
|
||||||
|
|
||||||
|
|
||||||
sprintf(sqlstr, "select %s from %s.%s",
|
sprintf(sqlstr, "select %s from %s.%s",
|
||||||
tableDes->cols[i].field, dbName, table);
|
stableDes->cols[i].field, dbName, table);
|
||||||
|
|
||||||
res = taos_query(taosCon, sqlstr);
|
res = taos_query(taosCon, sqlstr);
|
||||||
code = taos_errno(res);
|
code = taos_errno(res);
|
||||||
|
@ -1310,7 +1310,7 @@ static int taosGetTableDes(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (row[0] == NULL) {
|
if (row[0] == NULL) {
|
||||||
sprintf(tableDes->cols[i].note, "%s", "NULL");
|
sprintf(stableDes->cols[i].note, "%s", "NULL");
|
||||||
taos_free_result(res);
|
taos_free_result(res);
|
||||||
res = NULL;
|
res = NULL;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1321,47 +1321,47 @@ static int taosGetTableDes(
|
||||||
//int32_t* length = taos_fetch_lengths(tmpResult);
|
//int32_t* length = taos_fetch_lengths(tmpResult);
|
||||||
switch (fields[0].type) {
|
switch (fields[0].type) {
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
sprintf(tableDes->cols[i].note, "%d",
|
sprintf(stableDes->cols[i].note, "%d",
|
||||||
((((int32_t)(*((char *)row[0]))) == 1) ? 1 : 0));
|
((((int32_t)(*((char *)row[0]))) == 1) ? 1 : 0));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
sprintf(tableDes->cols[i].note, "%d", *((int8_t *)row[0]));
|
sprintf(stableDes->cols[i].note, "%d", *((int8_t *)row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
sprintf(tableDes->cols[i].note, "%d", *((int16_t *)row[0]));
|
sprintf(stableDes->cols[i].note, "%d", *((int16_t *)row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_INT:
|
case TSDB_DATA_TYPE_INT:
|
||||||
sprintf(tableDes->cols[i].note, "%d", *((int32_t *)row[0]));
|
sprintf(stableDes->cols[i].note, "%d", *((int32_t *)row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
sprintf(tableDes->cols[i].note, "%" PRId64 "", *((int64_t *)row[0]));
|
sprintf(stableDes->cols[i].note, "%" PRId64 "", *((int64_t *)row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_FLOAT:
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
sprintf(tableDes->cols[i].note, "%f", GET_FLOAT_VAL(row[0]));
|
sprintf(stableDes->cols[i].note, "%f", GET_FLOAT_VAL(row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
sprintf(tableDes->cols[i].note, "%f", GET_DOUBLE_VAL(row[0]));
|
sprintf(stableDes->cols[i].note, "%f", GET_DOUBLE_VAL(row[0]));
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BINARY:
|
case TSDB_DATA_TYPE_BINARY:
|
||||||
{
|
{
|
||||||
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
memset(stableDes->cols[i].note, 0, sizeof(stableDes->cols[i].note));
|
||||||
tableDes->cols[i].note[0] = '\'';
|
stableDes->cols[i].note[0] = '\'';
|
||||||
char tbuf[COL_NOTE_LEN];
|
char tbuf[COL_NOTE_LEN];
|
||||||
converStringToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
converStringToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
||||||
char* pstr = stpcpy(&(tableDes->cols[i].note[1]), tbuf);
|
char* pstr = stpcpy(&(stableDes->cols[i].note[1]), tbuf);
|
||||||
*(pstr++) = '\'';
|
*(pstr++) = '\'';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_NCHAR:
|
case TSDB_DATA_TYPE_NCHAR:
|
||||||
{
|
{
|
||||||
memset(tableDes->cols[i].note, 0, sizeof(tableDes->cols[i].note));
|
memset(stableDes->cols[i].note, 0, sizeof(stableDes->cols[i].note));
|
||||||
char tbuf[COL_NOTE_LEN-2]; // need reserve 2 bytes for ' '
|
char tbuf[COL_NOTE_LEN-2]; // need reserve 2 bytes for ' '
|
||||||
convertNCharToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
convertNCharToReadable((char *)row[0], length[0], tbuf, COL_NOTE_LEN);
|
||||||
sprintf(tableDes->cols[i].note, "\'%s\'", tbuf);
|
sprintf(stableDes->cols[i].note, "\'%s\'", tbuf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
sprintf(tableDes->cols[i].note, "%" PRId64 "", *(int64_t *)row[0]);
|
sprintf(stableDes->cols[i].note, "%" PRId64 "", *(int64_t *)row[0]);
|
||||||
#if 0
|
#if 0
|
||||||
if (!g_args.mysqlFlag) {
|
if (!g_args.mysqlFlag) {
|
||||||
sprintf(tableDes->cols[i].note, "%" PRId64 "", *(int64_t *)row[0]);
|
sprintf(tableDes->cols[i].note, "%" PRId64 "", *(int64_t *)row[0]);
|
||||||
|
@ -1386,7 +1386,7 @@ static int taosGetTableDes(
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int convertSchemaToAvroSchema(STableDef *tableDes, char **avroSchema)
|
static int convertSchemaToAvroSchema(STableDef *stableDes, char **avroSchema)
|
||||||
{
|
{
|
||||||
errorPrint("%s() LN%d TODO: covert table schema to avro schema\n",
|
errorPrint("%s() LN%d TODO: covert table schema to avro schema\n",
|
||||||
__func__, __LINE__);
|
__func__, __LINE__);
|
||||||
|
@ -1394,7 +1394,7 @@ static int convertSchemaToAvroSchema(STableDef *tableDes, char **avroSchema)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t taosDumpTable(
|
static int32_t taosDumpTable(
|
||||||
char *table, char *metric,
|
char *tbName, char *metric,
|
||||||
FILE *fp, TAOS* taosCon, char* dbName) {
|
FILE *fp, TAOS* taosCon, char* dbName) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
@ -1415,7 +1415,7 @@ static int32_t taosDumpTable(
|
||||||
memset(tableDes, 0, sizeof(STableDef) + sizeof(SColDes) * TSDB_MAX_COLUMNS);
|
memset(tableDes, 0, sizeof(STableDef) + sizeof(SColDes) * TSDB_MAX_COLUMNS);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
count = taosGetTableDes(dbName, table, tableDes, taosCon, false);
|
count = taosGetTableDes(dbName, tbName, tableDes, taosCon, false);
|
||||||
|
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
free(tableDes);
|
free(tableDes);
|
||||||
|
@ -1426,7 +1426,7 @@ static int32_t taosDumpTable(
|
||||||
taosDumpCreateMTableClause(tableDes, metric, count, fp, dbName);
|
taosDumpCreateMTableClause(tableDes, metric, count, fp, dbName);
|
||||||
|
|
||||||
} else { // dump table definition
|
} else { // dump table definition
|
||||||
count = taosGetTableDes(dbName, table, tableDes, taosCon, false);
|
count = taosGetTableDes(dbName, tbName, tableDes, taosCon, false);
|
||||||
|
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
free(tableDes);
|
free(tableDes);
|
||||||
|
@ -1446,7 +1446,7 @@ static int32_t taosDumpTable(
|
||||||
|
|
||||||
int32_t ret = 0;
|
int32_t ret = 0;
|
||||||
if (!g_args.schemaonly) {
|
if (!g_args.schemaonly) {
|
||||||
ret = taosDumpTableData(fp, table, taosCon, dbName,
|
ret = taosDumpTableData(fp, tbName, taosCon, dbName,
|
||||||
jsonAvroSchema);
|
jsonAvroSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1648,26 +1648,27 @@ static void taosStartDumpOutWorkThreads(int32_t numOfThread, char *dbName)
|
||||||
static int32_t taosDumpStable(char *table, FILE *fp,
|
static int32_t taosDumpStable(char *table, FILE *fp,
|
||||||
TAOS* taosCon, char* dbName) {
|
TAOS* taosCon, char* dbName) {
|
||||||
|
|
||||||
uint64_t sizeOfTableDes = (uint64_t)(sizeof(STableDef) + sizeof(SColDes) * TSDB_MAX_COLUMNS);
|
uint64_t sizeOfTableDes =
|
||||||
STableDef *tableDes = (STableDef *)calloc(1, sizeOfTableDes);
|
(uint64_t)(sizeof(STableDef) + sizeof(SColDes) * TSDB_MAX_COLUMNS);
|
||||||
if (NULL == tableDes) {
|
STableDef *stableDes = (STableDef *)calloc(1, sizeOfTableDes);
|
||||||
|
if (NULL == stableDes) {
|
||||||
errorPrint("%s() LN%d, failed to allocate %"PRIu64" memory\n",
|
errorPrint("%s() LN%d, failed to allocate %"PRIu64" memory\n",
|
||||||
__func__, __LINE__, sizeOfTableDes);
|
__func__, __LINE__, sizeOfTableDes);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int count = taosGetTableDes(dbName, table, tableDes, taosCon, true);
|
int count = taosGetTableDes(dbName, table, stableDes, taosCon, true);
|
||||||
|
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
free(tableDes);
|
free(stableDes);
|
||||||
errorPrint("%s() LN%d, failed to get stable[%s] schema\n",
|
errorPrint("%s() LN%d, failed to get stable[%s] schema\n",
|
||||||
__func__, __LINE__, table);
|
__func__, __LINE__, table);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosDumpCreateTableClause(tableDes, count, fp, dbName);
|
taosDumpCreateTableClause(stableDes, count, fp, dbName);
|
||||||
|
|
||||||
free(tableDes);
|
free(stableDes);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1707,7 +1708,7 @@ static int32_t taosDumpCreateSuperTableClause(TAOS* taosCon, char* dbName, FILE
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
||||||
min(TSDB_TABLE_NAME_LEN,
|
min(TSDB_TABLE_NAME_LEN,
|
||||||
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes) + 1);
|
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes + 1));
|
||||||
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1782,10 +1783,10 @@ static int taosDumpDb(SDbInfo *dbInfo, FILE *fp, TAOS *taosCon) {
|
||||||
memset(&tableRecord, 0, sizeof(STableRecord));
|
memset(&tableRecord, 0, sizeof(STableRecord));
|
||||||
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
tstrncpy(tableRecord.name, (char *)row[TSDB_SHOW_TABLES_NAME_INDEX],
|
||||||
min(TSDB_TABLE_NAME_LEN,
|
min(TSDB_TABLE_NAME_LEN,
|
||||||
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes) + 1);
|
fields[TSDB_SHOW_TABLES_NAME_INDEX].bytes + 1));
|
||||||
tstrncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX],
|
tstrncpy(tableRecord.metric, (char *)row[TSDB_SHOW_TABLES_METRIC_INDEX],
|
||||||
min(TSDB_TABLE_NAME_LEN,
|
min(TSDB_TABLE_NAME_LEN,
|
||||||
fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes) + 1);
|
fields[TSDB_SHOW_TABLES_METRIC_INDEX].bytes + 1));
|
||||||
|
|
||||||
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
taosWrite(fd, &tableRecord, sizeof(STableRecord));
|
||||||
|
|
||||||
|
@ -1865,52 +1866,52 @@ static int taosDumpDb(SDbInfo *dbInfo, FILE *fp, TAOS *taosCon) {
|
||||||
|
|
||||||
static void taosDumpCreateTableClause(STableDef *tableDes, int numOfCols,
|
static void taosDumpCreateTableClause(STableDef *tableDes, int numOfCols,
|
||||||
FILE *fp, char* dbName) {
|
FILE *fp, char* dbName) {
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
int count_temp = 0;
|
int count_temp = 0;
|
||||||
char sqlstr[COMMAND_SIZE];
|
char sqlstr[COMMAND_SIZE];
|
||||||
|
|
||||||
char* pstr = sqlstr;
|
char* pstr = sqlstr;
|
||||||
|
|
||||||
pstr += sprintf(sqlstr, "CREATE TABLE IF NOT EXISTS %s.%s",
|
pstr += sprintf(sqlstr, "CREATE TABLE IF NOT EXISTS %s.%s",
|
||||||
dbName, tableDes->name);
|
dbName, tableDes->name);
|
||||||
|
|
||||||
for (; counter < numOfCols; counter++) {
|
for (; counter < numOfCols; counter++) {
|
||||||
if (tableDes->cols[counter].note[0] != '\0') break;
|
if (tableDes->cols[counter].note[0] != '\0') break;
|
||||||
|
|
||||||
if (counter == 0) {
|
if (counter == 0) {
|
||||||
pstr += sprintf(pstr, " (%s %s",
|
pstr += sprintf(pstr, " (%s %s",
|
||||||
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
||||||
} else {
|
} else {
|
||||||
pstr += sprintf(pstr, ", %s %s",
|
pstr += sprintf(pstr, ", %s %s",
|
||||||
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcasecmp(tableDes->cols[counter].type, "binary") == 0 ||
|
||||||
|
strcasecmp(tableDes->cols[counter].type, "nchar") == 0) {
|
||||||
|
pstr += sprintf(pstr, "(%d)", tableDes->cols[counter].length);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(tableDes->cols[counter].type, "binary") == 0 ||
|
count_temp = counter;
|
||||||
strcasecmp(tableDes->cols[counter].type, "nchar") == 0) {
|
|
||||||
pstr += sprintf(pstr, "(%d)", tableDes->cols[counter].length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
count_temp = counter;
|
for (; counter < numOfCols; counter++) {
|
||||||
|
if (counter == count_temp) {
|
||||||
|
pstr += sprintf(pstr, ") TAGS (%s %s",
|
||||||
|
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
||||||
|
} else {
|
||||||
|
pstr += sprintf(pstr, ", %s %s",
|
||||||
|
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
||||||
|
}
|
||||||
|
|
||||||
for (; counter < numOfCols; counter++) {
|
if (strcasecmp(tableDes->cols[counter].type, "binary") == 0 ||
|
||||||
if (counter == count_temp) {
|
strcasecmp(tableDes->cols[counter].type, "nchar") == 0) {
|
||||||
pstr += sprintf(pstr, ") TAGS (%s %s",
|
pstr += sprintf(pstr, "(%d)", tableDes->cols[counter].length);
|
||||||
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
}
|
||||||
} else {
|
|
||||||
pstr += sprintf(pstr, ", %s %s",
|
|
||||||
tableDes->cols[counter].field, tableDes->cols[counter].type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(tableDes->cols[counter].type, "binary") == 0 ||
|
pstr += sprintf(pstr, ");");
|
||||||
strcasecmp(tableDes->cols[counter].type, "nchar") == 0) {
|
|
||||||
pstr += sprintf(pstr, "(%d)", tableDes->cols[counter].length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pstr += sprintf(pstr, ");");
|
fprintf(fp, "%s\n\n", sqlstr);
|
||||||
|
|
||||||
fprintf(fp, "%s\n\n", sqlstr);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void taosDumpCreateMTableClause(STableDef *tableDes, char *metric,
|
static void taosDumpCreateMTableClause(STableDef *tableDes, char *metric,
|
||||||
|
|
Loading…
Reference in New Issue