Merge branch 'master' of github.com:taosdata/TDengine into test/chr
This commit is contained in:
commit
288e8fcd39
70
.drone.yml
70
.drone.yml
|
@ -7,41 +7,22 @@ platform:
|
|||
arch: amd64
|
||||
|
||||
steps:
|
||||
- name: smoke_test
|
||||
image: python:3.8
|
||||
- name: build
|
||||
image: gcc
|
||||
commands:
|
||||
- apt-get update
|
||||
- apt-get install -y cmake build-essential gcc
|
||||
- pip3 install psutil
|
||||
- pip3 install guppy3
|
||||
- pip3 install src/connector/python/linux/python3/
|
||||
- apt-get install -y cmake build-essential
|
||||
- mkdir debug
|
||||
- cd debug
|
||||
- cmake ..
|
||||
- make
|
||||
- cd ../tests
|
||||
- ./test-all.sh smoke
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
- master
|
||||
|
||||
|
||||
- name: crash_gen
|
||||
image: python:3.8
|
||||
commands:
|
||||
- pip3 install requests
|
||||
- pip3 install src/connector/python/linux/python3/
|
||||
- pip3 install psutil
|
||||
- pip3 install guppy3
|
||||
- cd tests/pytest
|
||||
- ./crash_gen.sh -a -p -t 4 -s 2000
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
- master
|
||||
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
name: test_arm64
|
||||
|
@ -60,6 +41,9 @@ steps:
|
|||
- cd debug
|
||||
- cmake .. -DCPUTYPE=aarch64 > /dev/null
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
@ -82,6 +66,9 @@ steps:
|
|||
- cd debug
|
||||
- cmake .. -DCPUTYPE=aarch32 > /dev/null
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
@ -106,11 +93,13 @@ steps:
|
|||
- cd debug
|
||||
- cmake ..
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
- master
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
name: build_xenial
|
||||
|
@ -129,6 +118,9 @@ steps:
|
|||
- cd debug
|
||||
- cmake ..
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
@ -151,6 +143,32 @@ steps:
|
|||
- cd debug
|
||||
- cmake ..
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
- master
|
||||
---
|
||||
kind: pipeline
|
||||
name: build_centos7
|
||||
platform:
|
||||
os: linux
|
||||
arch: amd64
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: ansible/centos7-ansible
|
||||
commands:
|
||||
- yum install -y gcc gcc-c++ make cmake
|
||||
- mkdir debug
|
||||
- cd debug
|
||||
- cmake ..
|
||||
- make
|
||||
trigger:
|
||||
event:
|
||||
- pull_request
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
|
|
@ -298,7 +298,7 @@ STableMeta* createSuperTableMeta(STableMetaMsg* pChild);
|
|||
uint32_t tscGetTableMetaSize(STableMeta* pTableMeta);
|
||||
CChildTableMeta* tscCreateChildMeta(STableMeta* pTableMeta);
|
||||
uint32_t tscGetTableMetaMaxSize();
|
||||
int32_t tscCreateTableMetaFromCChildMeta(STableMeta* pChild, const char* name, void* buf);
|
||||
int32_t tscCreateTableMetaFromSTableMeta(STableMeta* pChild, const char* name, void* buf);
|
||||
STableMeta* tscTableMetaDup(STableMeta* pTableMeta);
|
||||
|
||||
|
||||
|
|
|
@ -67,14 +67,16 @@ typedef struct CChildTableMeta {
|
|||
int32_t vgId;
|
||||
STableId id;
|
||||
uint8_t tableType;
|
||||
char sTableName[TSDB_TABLE_FNAME_LEN]; //super table name, not full name
|
||||
char sTableName[TSDB_TABLE_FNAME_LEN]; // TODO: refactor super table name, not full name
|
||||
uint64_t suid; // super table id
|
||||
} CChildTableMeta;
|
||||
|
||||
typedef struct STableMeta {
|
||||
int32_t vgId;
|
||||
STableId id;
|
||||
uint8_t tableType;
|
||||
char sTableName[TSDB_TABLE_FNAME_LEN];
|
||||
char sTableName[TSDB_TABLE_FNAME_LEN]; // super table name
|
||||
uint64_t suid; // super table id
|
||||
int16_t sversion;
|
||||
int16_t tversion;
|
||||
STableComInfo tableInfo;
|
||||
|
|
|
@ -709,6 +709,9 @@ static int32_t doParseInsertStatement(SSqlCmd* pCmd, char **str, STableDataBlock
|
|||
|
||||
int32_t numOfRows = 0;
|
||||
code = tsParseValues(str, dataBuf, maxNumOfRows, pCmd, &numOfRows, tmpTokenBuf);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
|
||||
for (uint32_t i = 0; i < dataBuf->numOfParams; ++i) {
|
||||
SParamInfo *param = dataBuf->params + i;
|
||||
|
|
|
@ -54,14 +54,14 @@ void tscAddIntoSqlList(SSqlObj *pSql) {
|
|||
pSql->next = pObj->sqlList;
|
||||
if (pObj->sqlList) pObj->sqlList->prev = pSql;
|
||||
pObj->sqlList = pSql;
|
||||
pSql->queryId = queryId++;
|
||||
pSql->queryId = atomic_fetch_add_32(&queryId, 1);
|
||||
|
||||
pthread_mutex_unlock(&pObj->mutex);
|
||||
|
||||
pSql->stime = taosGetTimestampMs();
|
||||
pSql->listed = 1;
|
||||
|
||||
tscDebug("0x%"PRIx64" added into sqlList", pSql->self);
|
||||
tscDebug("0x%"PRIx64" added into sqlList, queryId:%u", pSql->self, pSql->queryId);
|
||||
}
|
||||
|
||||
void tscSaveSlowQueryFpCb(void *param, TAOS_RES *result, int code) {
|
||||
|
|
|
@ -94,6 +94,7 @@ STableMeta* tscCreateTableMetaFromMsg(STableMetaMsg* pTableMetaMsg) {
|
|||
|
||||
pTableMeta->tableType = pTableMetaMsg->tableType;
|
||||
pTableMeta->vgId = pTableMetaMsg->vgroup.vgId;
|
||||
pTableMeta->suid = pTableMetaMsg->suid;
|
||||
|
||||
pTableMeta->tableInfo = (STableComInfo) {
|
||||
.numOfTags = pTableMetaMsg->numOfTags,
|
||||
|
|
|
@ -1920,13 +1920,13 @@ int tscBuildHeartBeatMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
|||
int tscProcessTableMetaRsp(SSqlObj *pSql) {
|
||||
STableMetaMsg *pMetaMsg = (STableMetaMsg *)pSql->res.pRsp;
|
||||
|
||||
pMetaMsg->tid = htonl(pMetaMsg->tid);
|
||||
pMetaMsg->sversion = htons(pMetaMsg->sversion);
|
||||
pMetaMsg->tversion = htons(pMetaMsg->tversion);
|
||||
pMetaMsg->tid = htonl(pMetaMsg->tid);
|
||||
pMetaMsg->sversion = htons(pMetaMsg->sversion);
|
||||
pMetaMsg->tversion = htons(pMetaMsg->tversion);
|
||||
pMetaMsg->vgroup.vgId = htonl(pMetaMsg->vgroup.vgId);
|
||||
|
||||
pMetaMsg->uid = htobe64(pMetaMsg->uid);
|
||||
pMetaMsg->contLen = htons(pMetaMsg->contLen);
|
||||
pMetaMsg->uid = htobe64(pMetaMsg->uid);
|
||||
pMetaMsg->suid = pMetaMsg->suid;
|
||||
pMetaMsg->contLen = htons(pMetaMsg->contLen);
|
||||
pMetaMsg->numOfColumns = htons(pMetaMsg->numOfColumns);
|
||||
|
||||
if ((pMetaMsg->tableType != TSDB_SUPER_TABLE) &&
|
||||
|
@ -2537,19 +2537,16 @@ int32_t tscGetTableMeta(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) {
|
|||
pTableMetaInfo->pTableMeta = calloc(1, size);
|
||||
pTableMetaInfo->tableMetaSize = size;
|
||||
} else if (pTableMetaInfo->tableMetaSize < size) {
|
||||
char *tmp = realloc(pTableMetaInfo->pTableMeta, size);
|
||||
if (tmp == NULL) {
|
||||
char *tmp = realloc(pTableMetaInfo->pTableMeta, size);
|
||||
if (tmp == NULL) {
|
||||
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||
}
|
||||
pTableMetaInfo->pTableMeta = (STableMeta *)tmp;
|
||||
memset(pTableMetaInfo->pTableMeta, 0, size);
|
||||
pTableMetaInfo->tableMetaSize = size;
|
||||
} else {
|
||||
//uint32_t s = tscGetTableMetaSize(pTableMetaInfo->pTableMeta);
|
||||
memset(pTableMetaInfo->pTableMeta, 0, size);
|
||||
pTableMetaInfo->tableMetaSize = size;
|
||||
}
|
||||
|
||||
memset(pTableMetaInfo->pTableMeta, 0, size);
|
||||
pTableMetaInfo->tableMetaSize = size;
|
||||
|
||||
pTableMetaInfo->pTableMeta->tableType = -1;
|
||||
pTableMetaInfo->pTableMeta->tableInfo.numOfColumns = -1;
|
||||
|
||||
|
@ -2565,8 +2562,9 @@ int32_t tscGetTableMeta(SSqlObj *pSql, STableMetaInfo *pTableMetaInfo) {
|
|||
|
||||
STableMeta* pMeta = pTableMetaInfo->pTableMeta;
|
||||
if (pMeta->id.uid > 0) {
|
||||
// in case of child table, here only get the
|
||||
if (pMeta->tableType == TSDB_CHILD_TABLE) {
|
||||
int32_t code = tscCreateTableMetaFromCChildMeta(pTableMetaInfo->pTableMeta, name, buf);
|
||||
int32_t code = tscCreateTableMetaFromSTableMeta(pTableMetaInfo->pTableMeta, name, buf);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
return getTableMetaFromMnode(pSql, pTableMetaInfo);
|
||||
}
|
||||
|
|
|
@ -2431,15 +2431,15 @@ void tscDoQuery(SSqlObj* pSql) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (pCmd->command == TSDB_SQL_SELECT) {
|
||||
tscAddIntoSqlList(pSql);
|
||||
}
|
||||
|
||||
if (pCmd->dataSourceType == DATA_FROM_DATA_FILE) {
|
||||
tscImportDataFromFile(pSql);
|
||||
} else {
|
||||
SQueryInfo *pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
uint16_t type = pQueryInfo->type;
|
||||
|
||||
if ((pCmd->command == TSDB_SQL_SELECT) && (!TSDB_QUERY_HAS_TYPE(type, TSDB_QUERY_TYPE_SUBQUERY)) && (!TSDB_QUERY_HAS_TYPE(type, TSDB_QUERY_TYPE_STABLE_SUBQUERY))) {
|
||||
tscAddIntoSqlList(pSql);
|
||||
}
|
||||
|
||||
if (TSDB_QUERY_HAS_TYPE(type, TSDB_QUERY_TYPE_INSERT)) { // multi-vnodes insertion
|
||||
tscHandleMultivnodeInsert(pSql);
|
||||
|
@ -2941,22 +2941,25 @@ CChildTableMeta* tscCreateChildMeta(STableMeta* pTableMeta) {
|
|||
assert(pTableMeta != NULL);
|
||||
|
||||
CChildTableMeta* cMeta = calloc(1, sizeof(CChildTableMeta));
|
||||
|
||||
cMeta->tableType = TSDB_CHILD_TABLE;
|
||||
cMeta->vgId = pTableMeta->vgId;
|
||||
cMeta->id = pTableMeta->id;
|
||||
cMeta->vgId = pTableMeta->vgId;
|
||||
cMeta->id = pTableMeta->id;
|
||||
cMeta->suid = pTableMeta->suid;
|
||||
tstrncpy(cMeta->sTableName, pTableMeta->sTableName, TSDB_TABLE_FNAME_LEN);
|
||||
|
||||
return cMeta;
|
||||
}
|
||||
|
||||
int32_t tscCreateTableMetaFromCChildMeta(STableMeta* pChild, const char* name, void* buf) {
|
||||
int32_t tscCreateTableMetaFromSTableMeta(STableMeta* pChild, const char* name, void* buf) {
|
||||
assert(pChild != NULL && buf != NULL);
|
||||
|
||||
// uint32_t size = tscGetTableMetaMaxSize();
|
||||
STableMeta* p = buf;//calloc(1, size);
|
||||
|
||||
STableMeta* p = buf;
|
||||
taosHashGetClone(tscTableMetaInfo, pChild->sTableName, strnlen(pChild->sTableName, TSDB_TABLE_FNAME_LEN), NULL, p, -1);
|
||||
if (p->id.uid > 0) { // tableMeta exists, build child table meta and return
|
||||
|
||||
// tableMeta exists, build child table meta according to the super table meta
|
||||
// the uid need to be checked in addition to the general name of the super table.
|
||||
if (p->id.uid > 0 && pChild->suid == p->id.uid) {
|
||||
pChild->sversion = p->sversion;
|
||||
pChild->tversion = p->tversion;
|
||||
|
||||
|
@ -2964,13 +2967,9 @@ int32_t tscCreateTableMetaFromCChildMeta(STableMeta* pChild, const char* name, v
|
|||
int32_t total = pChild->tableInfo.numOfColumns + pChild->tableInfo.numOfTags;
|
||||
|
||||
memcpy(pChild->schema, p->schema, sizeof(SSchema) *total);
|
||||
|
||||
// tfree(p);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
} else { // super table has been removed, current tableMeta is also expired. remove it here
|
||||
taosHashRemove(tscTableMetaInfo, name, strnlen(name, TSDB_TABLE_FNAME_LEN));
|
||||
|
||||
// tfree(p);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ public abstract class TSDBConstants {
|
|||
public static final int JNI_FETCH_END = -6;
|
||||
public static final int JNI_OUT_OF_MEMORY = -7;
|
||||
// TSDB Data Types
|
||||
public static final int TSDB_DATA_TYPE_NULL = 0;
|
||||
public static final int TSDB_DATA_TYPE_BOOL = 1;
|
||||
public static final int TSDB_DATA_TYPE_TINYINT = 2;
|
||||
public static final int TSDB_DATA_TYPE_SMALLINT = 3;
|
||||
|
|
|
@ -6,11 +6,13 @@ import com.google.common.primitives.Ints;
|
|||
import com.google.common.primitives.Longs;
|
||||
import com.google.common.primitives.Shorts;
|
||||
import com.taosdata.jdbc.*;
|
||||
import com.taosdata.jdbc.utils.Utils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.*;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
|
@ -18,14 +20,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
private volatile boolean isClosed;
|
||||
private int pos = -1;
|
||||
|
||||
|
||||
private final String database;
|
||||
private final Statement statement;
|
||||
// data
|
||||
private final ArrayList<ArrayList<Object>> resultSet;
|
||||
private final ArrayList<ArrayList<Object>> resultSet = new ArrayList<>();
|
||||
// meta
|
||||
private ArrayList<String> columnNames;
|
||||
private ArrayList<Field> columns;
|
||||
private ArrayList<String> columnNames = new ArrayList<>();
|
||||
private ArrayList<Field> columns = new ArrayList<>();
|
||||
private RestfulResultSetMetaData metaData;
|
||||
|
||||
/**
|
||||
|
@ -37,10 +38,46 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
this.database = database;
|
||||
this.statement = statement;
|
||||
|
||||
// column metadata
|
||||
// get column metadata
|
||||
JSONArray columnMeta = resultJson.getJSONArray("column_meta");
|
||||
columnNames = new ArrayList<>();
|
||||
columns = new ArrayList<>();
|
||||
// get row data
|
||||
JSONArray data = resultJson.getJSONArray("data");
|
||||
if (data == null || data.isEmpty()) {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
this.resultSet.clear();
|
||||
return;
|
||||
}
|
||||
// get head
|
||||
JSONArray head = resultJson.getJSONArray("head");
|
||||
// get rows
|
||||
Integer rows = resultJson.getInteger("rows");
|
||||
// parse column_meta
|
||||
if (columnMeta != null) {
|
||||
parseColumnMeta_new(columnMeta);
|
||||
} else {
|
||||
parseColumnMeta_old(head, data, rows);
|
||||
}
|
||||
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
|
||||
// parse row data
|
||||
resultSet.clear();
|
||||
for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
|
||||
ArrayList row = new ArrayList();
|
||||
JSONArray jsonRow = data.getJSONArray(rowIndex);
|
||||
for (int colIndex = 0; colIndex < this.metaData.getColumnCount(); colIndex++) {
|
||||
row.add(parseColumnData(jsonRow, colIndex, columns.get(colIndex).taos_type));
|
||||
}
|
||||
resultSet.add(row);
|
||||
}
|
||||
}
|
||||
|
||||
/***
|
||||
* use this method after TDengine-2.0.18.0 to parse column meta, restful add column_meta in resultSet
|
||||
* @Param columnMeta
|
||||
*/
|
||||
private void parseColumnMeta_new(JSONArray columnMeta) throws SQLException {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
for (int colIndex = 0; colIndex < columnMeta.size(); colIndex++) {
|
||||
JSONArray col = columnMeta.getJSONArray(colIndex);
|
||||
String col_name = col.getString(0);
|
||||
|
@ -50,23 +87,55 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
columnNames.add(col_name);
|
||||
columns.add(new Field(col_name, col_type, col_length, "", taos_type));
|
||||
}
|
||||
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
|
||||
}
|
||||
|
||||
// row data
|
||||
JSONArray data = resultJson.getJSONArray("data");
|
||||
resultSet = new ArrayList<>();
|
||||
for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
|
||||
ArrayList row = new ArrayList();
|
||||
JSONArray jsonRow = data.getJSONArray(rowIndex);
|
||||
for (int colIndex = 0; colIndex < jsonRow.size(); colIndex++) {
|
||||
row.add(parseColumnData(jsonRow, colIndex, columns.get(colIndex).taos_type));
|
||||
/**
|
||||
* use this method before TDengine-2.0.18.0 to parse column meta
|
||||
*/
|
||||
private void parseColumnMeta_old(JSONArray head, JSONArray data, int rows) {
|
||||
columnNames.clear();
|
||||
columns.clear();
|
||||
for (int colIndex = 0; colIndex < head.size(); colIndex++) {
|
||||
String col_name = head.getString(colIndex);
|
||||
columnNames.add(col_name);
|
||||
|
||||
int col_type = Types.NULL;
|
||||
int col_length = 0;
|
||||
int taos_type = TSDBConstants.TSDB_DATA_TYPE_NULL;
|
||||
|
||||
JSONArray row0Json = data.getJSONArray(0);
|
||||
if (colIndex < row0Json.size()) {
|
||||
Object value = row0Json.get(colIndex);
|
||||
if (value instanceof Boolean) {
|
||||
col_type = Types.BOOLEAN;
|
||||
col_length = 1;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_BOOL;
|
||||
}
|
||||
if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long) {
|
||||
col_type = Types.BIGINT;
|
||||
col_length = 8;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_BIGINT;
|
||||
}
|
||||
if (value instanceof Float || value instanceof Double || value instanceof BigDecimal) {
|
||||
col_type = Types.DOUBLE;
|
||||
col_length = 8;
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_DOUBLE;
|
||||
}
|
||||
if (value instanceof String) {
|
||||
col_type = Types.NCHAR;
|
||||
col_length = ((String) value).length();
|
||||
taos_type = TSDBConstants.TSDB_DATA_TYPE_NCHAR;
|
||||
}
|
||||
}
|
||||
resultSet.add(row);
|
||||
columns.add(new Field(col_name, col_type, col_length, "", taos_type));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Object parseColumnData(JSONArray row, int colIndex, int taosType) throws SQLException {
|
||||
switch (taosType) {
|
||||
case TSDBConstants.TSDB_DATA_TYPE_NULL:
|
||||
return null;
|
||||
case TSDBConstants.TSDB_DATA_TYPE_BOOL:
|
||||
return row.getBoolean(colIndex);
|
||||
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||
|
@ -290,8 +359,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return 0;
|
||||
}
|
||||
wasNull = false;
|
||||
if (value instanceof Float || value instanceof Double)
|
||||
if (value instanceof Float)
|
||||
return (float) value;
|
||||
if (value instanceof Double)
|
||||
return new Float((Double) value);
|
||||
return Float.parseFloat(value.toString());
|
||||
}
|
||||
|
||||
|
@ -329,6 +400,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return Shorts.toByteArray((short) value);
|
||||
if (value instanceof Byte)
|
||||
return new byte[]{(byte) value};
|
||||
if (value instanceof Timestamp) {
|
||||
return Utils.formatTimestamp((Timestamp) value).getBytes();
|
||||
}
|
||||
|
||||
return value.toString().getBytes();
|
||||
}
|
||||
|
@ -342,7 +416,9 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return new Date(((Timestamp) value).getTime());
|
||||
return Date.valueOf(value.toString());
|
||||
Date date = null;
|
||||
date = Utils.parseDate(value.toString());
|
||||
return date;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -354,7 +430,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return new Time(((Timestamp) value).getTime());
|
||||
return Time.valueOf(value.toString());
|
||||
Time time = null;
|
||||
try {
|
||||
time = Utils.parseTime(value.toString());
|
||||
} catch (DateTimeParseException e) {
|
||||
time = null;
|
||||
}
|
||||
return time;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -366,14 +448,20 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return null;
|
||||
if (value instanceof Timestamp)
|
||||
return (Timestamp) value;
|
||||
// if (value instanceof Long) {
|
||||
// if (1_0000_0000_0000_0L > (long) value)
|
||||
// return Timestamp.from(Instant.ofEpochMilli((long) value));
|
||||
// long epochSec = (long) value / 1000_000L;
|
||||
// long nanoAdjustment = (long) ((long) value % 1000_000L * 1000);
|
||||
// return Timestamp.from(Instant.ofEpochSecond(epochSec, nanoAdjustment));
|
||||
// }
|
||||
return Timestamp.valueOf(value.toString());
|
||||
if (value instanceof Long) {
|
||||
if (1_0000_0000_0000_0L > (long) value)
|
||||
return Timestamp.from(Instant.ofEpochMilli((long) value));
|
||||
long epochSec = (long) value / 1000_000L;
|
||||
long nanoAdjustment = (long) value % 1000_000L * 1000;
|
||||
return Timestamp.from(Instant.ofEpochSecond(epochSec, nanoAdjustment));
|
||||
}
|
||||
Timestamp ret;
|
||||
try {
|
||||
ret = Utils.parseTimestamp(value.toString());
|
||||
} catch (Exception e) {
|
||||
ret = null;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -415,7 +503,13 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
|
|||
return new BigDecimal(Double.valueOf(value.toString()));
|
||||
if (value instanceof Timestamp)
|
||||
return new BigDecimal(((Timestamp) value).getTime());
|
||||
return new BigDecimal(value.toString());
|
||||
BigDecimal ret;
|
||||
try {
|
||||
ret = new BigDecimal(value.toString());
|
||||
} catch (Exception e) {
|
||||
ret = null;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
package com.taosdata.jdbc.utils;
|
||||
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
|
||||
public class UtcTimestampUtil {
|
||||
public static final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-ddTHH:mm:ss.SSS+")
|
||||
// .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
|
||||
.toFormatter();
|
||||
|
||||
}
|
|
@ -5,7 +5,15 @@ import com.google.common.collect.RangeSet;
|
|||
import com.google.common.collect.TreeRangeSet;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.sql.Date;
|
||||
import java.sql.Time;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeFormatterBuilder;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -17,6 +25,41 @@ public class Utils {
|
|||
|
||||
private static Pattern ptn = Pattern.compile(".*?'");
|
||||
|
||||
private static final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-dd HH:mm:ss.SSS").toFormatter();
|
||||
private static final DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
|
||||
.appendPattern("yyyy-MM-dd HH:mm:ss.SSSSSS").toFormatter();
|
||||
|
||||
public static Time parseTime(String timestampStr) throws DateTimeParseException {
|
||||
LocalTime time;
|
||||
try {
|
||||
time = LocalTime.parse(timestampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
time = LocalTime.parse(timestampStr, formatter2);
|
||||
}
|
||||
return Time.valueOf(time);
|
||||
}
|
||||
|
||||
public static Date parseDate(String timestampStr) throws DateTimeParseException {
|
||||
LocalDate date;
|
||||
try {
|
||||
date = LocalDate.parse(timestampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
date = LocalDate.parse(timestampStr, formatter2);
|
||||
}
|
||||
return Date.valueOf(date);
|
||||
}
|
||||
|
||||
public static Timestamp parseTimestamp(String timeStampStr) {
|
||||
LocalDateTime dateTime;
|
||||
try {
|
||||
dateTime = LocalDateTime.parse(timeStampStr, formatter);
|
||||
} catch (DateTimeParseException e) {
|
||||
dateTime = LocalDateTime.parse(timeStampStr, formatter2);
|
||||
}
|
||||
return Timestamp.valueOf(dateTime);
|
||||
}
|
||||
|
||||
public static String escapeSingleQuota(String origin) {
|
||||
Matcher m = ptn.matcher(origin);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
|
@ -132,4 +175,13 @@ public class Utils {
|
|||
}).collect(Collectors.joining());
|
||||
}
|
||||
|
||||
|
||||
public static String formatTimestamp(Timestamp timestamp) {
|
||||
int nanos = timestamp.getNanos();
|
||||
if (nanos % 1000000l != 0)
|
||||
return timestamp.toLocalDateTime().format(formatter2);
|
||||
return timestamp.toLocalDateTime().format(formatter);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@ import java.sql.*;
|
|||
public class InsertSpecialCharacterRestfulTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
// private static final String host = "master";
|
||||
private static Connection conn;
|
||||
private static String dbName = "spec_char_test";
|
||||
private static String tbname1 = "test";
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package com.taosdata.jdbc.cases;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.taosdata.jdbc.TSDBDriver;
|
||||
import org.junit.*;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TD4174Test {
|
||||
private Connection conn;
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
long ts = System.currentTimeMillis();
|
||||
try (PreparedStatement pstmt = conn.prepareStatement("insert into weather values(" + ts + ", ?)")) {
|
||||
JSONObject value = new JSONObject();
|
||||
value.put("name", "John Smith");
|
||||
value.put("age", 20);
|
||||
Assert.assertEquals("{\"name\":\"John Smith\",\"age\":20}",value.toJSONString());
|
||||
pstmt.setString(1, value.toJSONString());
|
||||
|
||||
int ret = pstmt.executeUpdate();
|
||||
Assert.assertEquals(1, ret);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
JSONObject value = new JSONObject();
|
||||
value.put("name", "John Smith");
|
||||
value.put("age", 20);
|
||||
System.out.println(value.toJSONString());
|
||||
}
|
||||
|
||||
@Before
|
||||
public void before() throws SQLException {
|
||||
String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
stmt.execute("drop database if exists td4174");
|
||||
stmt.execute("create database if not exists td4174");
|
||||
stmt.execute("use td4174");
|
||||
stmt.execute("create table weather(ts timestamp, text binary(64))");
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() throws SQLException {
|
||||
if (conn != null)
|
||||
conn.close();
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -13,6 +13,7 @@ import java.util.Properties;
|
|||
public class TwoTypeTimestampPercisionInRestfulTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
private static final String ms_timestamp_db = "ms_precision_test";
|
||||
private static final String us_timestamp_db = "us_precision_test";
|
||||
private static final long timestamp1 = System.currentTimeMillis();
|
||||
|
@ -94,7 +95,8 @@ public class TwoTypeTimestampPercisionInRestfulTest {
|
|||
try (Statement stmt = conn3.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select last_row(ts) from " + ms_timestamp_db + ".weather");
|
||||
rs.next();
|
||||
long ts = rs.getTimestamp(1).getTime();
|
||||
Timestamp actual = rs.getTimestamp(1);
|
||||
long ts = actual == null ? 0 : actual.getTime();
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
ts = rs.getLong(1);
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
|
@ -110,7 +112,7 @@ public class TwoTypeTimestampPercisionInRestfulTest {
|
|||
rs.next();
|
||||
|
||||
Timestamp timestamp = rs.getTimestamp(1);
|
||||
long ts = timestamp.getTime();
|
||||
long ts = timestamp == null ? 0 : timestamp.getTime();
|
||||
Assert.assertEquals(timestamp1, ts);
|
||||
int nanos = timestamp.getNanos();
|
||||
Assert.assertEquals(timestamp2 % 1000_000l * 1000, nanos);
|
||||
|
|
|
@ -9,19 +9,19 @@ import java.util.Properties;
|
|||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class UnsignedNumberJniTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
private static Connection conn;
|
||||
private static long ts;
|
||||
|
||||
@Test
|
||||
public void testCase001() {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("127", rs.getString(2));
|
||||
Assert.assertEquals("32767", rs.getString(3));
|
||||
Assert.assertEquals("2147483647", rs.getString(4));
|
||||
|
@ -37,13 +37,10 @@ public class UnsignedNumberJniTest {
|
|||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
|
@ -61,16 +58,14 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,2147483647, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getLong(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -82,15 +77,15 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getInt(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -102,15 +97,15 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getShort(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,37 +117,27 @@ public class UnsignedNumberJniTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
@Test
|
||||
public void testCase007() throws SQLException {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
long now = System.currentTimeMillis();
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("254", rs.getString(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getByte(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void assertResultSetMetaData(ResultSetMetaData meta) throws SQLException {
|
||||
Assert.assertEquals(5, meta.getColumnCount());
|
||||
Assert.assertEquals("ts", meta.getColumnLabel(1));
|
||||
Assert.assertEquals("f1", meta.getColumnLabel(2));
|
||||
Assert.assertEquals("f2", meta.getColumnLabel(3));
|
||||
Assert.assertEquals("f3", meta.getColumnLabel(4));
|
||||
Assert.assertEquals("f4", meta.getColumnLabel(5));
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
|
@ -160,20 +145,19 @@ public class UnsignedNumberJniTest {
|
|||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
ts = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
final String url = "jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata";
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
|
||||
Statement stmt = conn.createStatement();
|
||||
stmt.execute("drop database if exists unsign_jni");
|
||||
stmt.execute("create database if not exists unsign_jni");
|
||||
stmt.execute("use unsign_jni");
|
||||
stmt.execute("create table us_table(ts timestamp, f1 tinyint unsigned, f2 smallint unsigned, f3 int unsigned, f4 bigint unsigned)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(now, 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + ts + ", 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.close();
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,17 +13,20 @@ public class UnsignedNumberRestfulTest {
|
|||
|
||||
private static final String host = "127.0.0.1";
|
||||
private static Connection conn;
|
||||
private static long ts;
|
||||
|
||||
@Test
|
||||
public void testCase001() {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("127", rs.getString(2));
|
||||
Assert.assertEquals("32767", rs.getString(3));
|
||||
Assert.assertEquals("2147483647", rs.getString(4));
|
||||
Assert.assertEquals("9223372036854775807", rs.getString(5));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -35,13 +38,14 @@ public class UnsignedNumberRestfulTest {
|
|||
try (Statement stmt = conn.createStatement()) {
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table");
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(ts, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals(9223372036854775807l, rs.getLong(5));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -55,13 +59,14 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,2147483647, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals(2147483647, rs.getInt(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getLong(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,13 +78,15 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 32767,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals(32767, rs.getShort(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getInt(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -91,13 +98,15 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 127, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals(127, rs.getByte(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getShort(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,57 +118,47 @@ public class UnsignedNumberRestfulTest {
|
|||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
System.out.print(meta.getColumnLabel(1) + ": " + rs.getTimestamp(1) + "\t");
|
||||
System.out.print(meta.getColumnLabel(2) + ": " + rs.getByte(2) + "\t");
|
||||
System.out.print(meta.getColumnLabel(3) + ": " + rs.getShort(3) + "\t");
|
||||
System.out.print(meta.getColumnLabel(4) + ": " + rs.getInt(4) + "\t");
|
||||
System.out.print(meta.getColumnLabel(5) + ": " + rs.getLong(5) + "\t");
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
}
|
||||
assertResultSetMetaData(meta);
|
||||
|
||||
@Test
|
||||
public void testCase007() throws SQLException {
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
long now = System.currentTimeMillis();
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + now + ", 254, 65534,4294967294, 18446744073709551614)");
|
||||
ResultSet rs = stmt.executeQuery("select * from us_table where ts = " + now);
|
||||
ResultSetMetaData meta = rs.getMetaData();
|
||||
while (rs.next()) {
|
||||
for (int i = 1; i <= meta.getColumnCount(); i++) {
|
||||
System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
Assert.assertEquals(now, rs.getTimestamp(1).getTime());
|
||||
Assert.assertEquals("254", rs.getString(2));
|
||||
Assert.assertEquals("65534", rs.getString(3));
|
||||
Assert.assertEquals("4294967294", rs.getString(4));
|
||||
Assert.assertEquals("18446744073709551614", rs.getString(5));
|
||||
rs.getByte(2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void assertResultSetMetaData(ResultSetMetaData meta) throws SQLException {
|
||||
Assert.assertEquals(5, meta.getColumnCount());
|
||||
Assert.assertEquals("ts", meta.getColumnLabel(1));
|
||||
Assert.assertEquals("f1", meta.getColumnLabel(2));
|
||||
Assert.assertEquals("f2", meta.getColumnLabel(3));
|
||||
Assert.assertEquals("f3", meta.getColumnLabel(4));
|
||||
Assert.assertEquals("f4", meta.getColumnLabel(5));
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
ts = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
|
||||
final String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
|
||||
conn = DriverManager.getConnection(url, properties);
|
||||
|
||||
Statement stmt = conn.createStatement();
|
||||
stmt.execute("drop database if exists unsign_restful");
|
||||
stmt.execute("create database if not exists unsign_restful");
|
||||
stmt.execute("use unsign_restful");
|
||||
stmt.execute("create table us_table(ts timestamp, f1 tinyint unsigned, f2 smallint unsigned, f3 int unsigned, f4 bigint unsigned)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(now, 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.executeUpdate("insert into us_table(ts,f1,f2,f3,f4) values(" + ts + ", 127, 32767,2147483647, 9223372036854775807)");
|
||||
stmt.close();
|
||||
} catch (ClassNotFoundException | SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import java.sql.*;
|
|||
|
||||
public class RestfulPreparedStatementTest {
|
||||
private static final String host = "127.0.0.1";
|
||||
// private static final String host = "master";
|
||||
private static Connection conn;
|
||||
private static final String sql_insert = "insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
private static PreparedStatement pstmt_insert;
|
||||
|
@ -371,7 +370,6 @@ public class RestfulPreparedStatementTest {
|
|||
pstmt_insert.setSQLXML(1, null);
|
||||
}
|
||||
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
try {
|
||||
|
|
|
@ -18,7 +18,6 @@ import java.text.SimpleDateFormat;
|
|||
public class RestfulResultSetTest {
|
||||
|
||||
private static final String host = "127.0.0.1";
|
||||
|
||||
private static Connection conn;
|
||||
private static Statement stmt;
|
||||
private static ResultSet rs;
|
||||
|
@ -95,7 +94,8 @@ public class RestfulResultSetTest {
|
|||
@Test
|
||||
public void getBigDecimal() throws SQLException {
|
||||
BigDecimal f1 = rs.getBigDecimal("f1");
|
||||
Assert.assertEquals(1609430400000l, f1.longValue());
|
||||
long actual = (f1 == null) ? 0 : f1.longValue();
|
||||
Assert.assertEquals(1609430400000l, actual);
|
||||
|
||||
BigDecimal f2 = rs.getBigDecimal("f2");
|
||||
Assert.assertEquals(1, f2.intValue());
|
||||
|
@ -119,7 +119,7 @@ public class RestfulResultSetTest {
|
|||
@Test
|
||||
public void getBytes() throws SQLException {
|
||||
byte[] f1 = rs.getBytes("f1");
|
||||
Assert.assertEquals("2021-01-01 00:00:00.0", new String(f1));
|
||||
Assert.assertEquals("2021-01-01 00:00:00.000", new String(f1));
|
||||
|
||||
byte[] f2 = rs.getBytes("f2");
|
||||
Assert.assertEquals(1, Ints.fromByteArray(f2));
|
||||
|
|
|
@ -212,8 +212,8 @@ typedef struct SArguments_S {
|
|||
uint64_t interlace_rows;
|
||||
uint64_t num_of_RPR; // num_of_records_per_req
|
||||
uint64_t max_sql_len;
|
||||
uint64_t num_of_tables;
|
||||
uint64_t num_of_DPT;
|
||||
int64_t num_of_tables;
|
||||
int64_t num_of_DPT;
|
||||
int abort;
|
||||
int disorderRatio; // 0: no disorder, >0: x%
|
||||
int disorderRange; // ms or us by database precision
|
||||
|
@ -240,7 +240,7 @@ typedef struct SSuperTable_S {
|
|||
char dataSource[MAX_TB_NAME_SIZE+1]; // rand_gen or sample
|
||||
char insertMode[MAX_TB_NAME_SIZE]; // taosc, rest
|
||||
int64_t childTblLimit;
|
||||
uint64_t childTblOffset;
|
||||
uint64_t childTblOffset;
|
||||
|
||||
// int multiThreadWriteOneTbl; // 0: no, 1: yes
|
||||
uint64_t interlaceRows; //
|
||||
|
@ -249,7 +249,7 @@ typedef struct SSuperTable_S {
|
|||
uint64_t maxSqlLen; //
|
||||
|
||||
uint64_t insertInterval; // insert interval, will override global insert interval
|
||||
uint64_t insertRows;
|
||||
int64_t insertRows;
|
||||
int64_t timeStampStep;
|
||||
char startTimestamp[MAX_TB_NAME_SIZE];
|
||||
char sampleFormat[MAX_TB_NAME_SIZE]; // csv, json
|
||||
|
@ -258,7 +258,7 @@ typedef struct SSuperTable_S {
|
|||
|
||||
uint32_t columnCount;
|
||||
StrColumn columns[MAX_COLUMN_COUNT];
|
||||
uint32_t tagCount;
|
||||
uint32_t tagCount;
|
||||
StrColumn tags[MAX_TAG_COUNT];
|
||||
|
||||
char* childTblName;
|
||||
|
@ -283,7 +283,7 @@ typedef struct SSuperTable_S {
|
|||
typedef struct {
|
||||
char name[TSDB_DB_NAME_LEN + 1];
|
||||
char create_time[32];
|
||||
int32_t ntables;
|
||||
int64_t ntables;
|
||||
int32_t vgroups;
|
||||
int16_t replica;
|
||||
int16_t quorum;
|
||||
|
@ -377,7 +377,7 @@ typedef struct SuperQueryInfo_S {
|
|||
int subscribeRestart;
|
||||
int subscribeKeepProgress;
|
||||
uint64_t queryTimes;
|
||||
uint64_t childTblCount;
|
||||
int64_t childTblCount;
|
||||
char childTblPrefix[MAX_TB_NAME_SIZE];
|
||||
uint64_t sqlCount;
|
||||
char sql[MAX_QUERY_SQL_COUNT][MAX_QUERY_SQL_LENGTH+1];
|
||||
|
@ -412,7 +412,7 @@ typedef struct SThreadInfo_S {
|
|||
char tb_prefix[MAX_TB_NAME_SIZE];
|
||||
uint64_t start_table_from;
|
||||
uint64_t end_table_to;
|
||||
uint64_t ntables;
|
||||
int64_t ntables;
|
||||
uint64_t data_of_rate;
|
||||
int64_t start_time;
|
||||
char* cols;
|
||||
|
@ -581,7 +581,7 @@ SArguments g_args = {
|
|||
|
||||
|
||||
static SDbs g_Dbs;
|
||||
static int g_totalChildTables = 0;
|
||||
static int64_t g_totalChildTables = 0;
|
||||
static SQueryMetaInfo g_queryInfo;
|
||||
static FILE * g_fpOfInsertResult = NULL;
|
||||
|
||||
|
@ -1015,9 +1015,9 @@ static void parse_args(int argc, char *argv[], SArguments *arguments) {
|
|||
arguments->max_sql_len);
|
||||
printf("# Length of Binary: %d\n", arguments->len_of_binary);
|
||||
printf("# Number of Threads: %d\n", arguments->num_of_threads);
|
||||
printf("# Number of Tables: %"PRIu64"\n",
|
||||
printf("# Number of Tables: %"PRId64"\n",
|
||||
arguments->num_of_tables);
|
||||
printf("# Number of Data per Table: %"PRIu64"\n",
|
||||
printf("# Number of Data per Table: %"PRId64"\n",
|
||||
arguments->num_of_DPT);
|
||||
printf("# Database name: %s\n", arguments->database);
|
||||
printf("# Table prefix: %s\n", arguments->tb_prefix);
|
||||
|
@ -1388,7 +1388,7 @@ static int printfInsertMeta() {
|
|||
printf(" childTblExists: \033[33m%s\033[0m\n", "error");
|
||||
}
|
||||
|
||||
printf(" childTblCount: \033[33m%"PRIu64"\033[0m\n",
|
||||
printf(" childTblCount: \033[33m%"PRId64"\033[0m\n",
|
||||
g_Dbs.db[i].superTbls[j].childTblCount);
|
||||
printf(" childTblPrefix: \033[33m%s\033[0m\n",
|
||||
g_Dbs.db[i].superTbls[j].childTblPrefix);
|
||||
|
@ -1404,7 +1404,7 @@ static int printfInsertMeta() {
|
|||
printf(" childTblOffset: \033[33m%"PRIu64"\033[0m\n",
|
||||
g_Dbs.db[i].superTbls[j].childTblOffset);
|
||||
}
|
||||
printf(" insertRows: \033[33m%"PRIu64"\033[0m\n",
|
||||
printf(" insertRows: \033[33m%"PRId64"\033[0m\n",
|
||||
g_Dbs.db[i].superTbls[j].insertRows);
|
||||
/*
|
||||
if (0 == g_Dbs.db[i].superTbls[j].multiThreadWriteOneTbl) {
|
||||
|
@ -1571,7 +1571,7 @@ static void printfInsertMetaToFile(FILE* fp) {
|
|||
fprintf(fp, " childTblExists: %s\n", "error");
|
||||
}
|
||||
|
||||
fprintf(fp, " childTblCount: %"PRIu64"\n",
|
||||
fprintf(fp, " childTblCount: %"PRId64"\n",
|
||||
g_Dbs.db[i].superTbls[j].childTblCount);
|
||||
fprintf(fp, " childTblPrefix: %s\n",
|
||||
g_Dbs.db[i].superTbls[j].childTblPrefix);
|
||||
|
@ -1579,7 +1579,7 @@ static void printfInsertMetaToFile(FILE* fp) {
|
|||
g_Dbs.db[i].superTbls[j].dataSource);
|
||||
fprintf(fp, " insertMode: %s\n",
|
||||
g_Dbs.db[i].superTbls[j].insertMode);
|
||||
fprintf(fp, " insertRows: %"PRIu64"\n",
|
||||
fprintf(fp, " insertRows: %"PRId64"\n",
|
||||
g_Dbs.db[i].superTbls[j].insertRows);
|
||||
fprintf(fp, " interlace rows: %"PRIu64"\n",
|
||||
g_Dbs.db[i].superTbls[j].interlaceRows);
|
||||
|
@ -1697,7 +1697,7 @@ static void printfQueryMeta() {
|
|||
g_queryInfo.superQueryInfo.queryInterval);
|
||||
printf("threadCnt: \033[33m%d\033[0m\n",
|
||||
g_queryInfo.superQueryInfo.threadCnt);
|
||||
printf("childTblCount: \033[33m%"PRIu64"\033[0m\n",
|
||||
printf("childTblCount: \033[33m%"PRId64"\033[0m\n",
|
||||
g_queryInfo.superQueryInfo.childTblCount);
|
||||
printf("stable name: \033[33m%s\033[0m\n",
|
||||
g_queryInfo.superQueryInfo.sTblName);
|
||||
|
@ -1879,7 +1879,7 @@ static int getDbFromServer(TAOS * taos, SDbInfo** dbInfos) {
|
|||
formatTimestamp(dbInfos[count]->create_time,
|
||||
*(int64_t*)row[TSDB_SHOW_DB_CREATED_TIME_INDEX],
|
||||
TSDB_TIME_PRECISION_MILLI);
|
||||
dbInfos[count]->ntables = *((int32_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
||||
dbInfos[count]->ntables = *((int64_t *)row[TSDB_SHOW_DB_NTABLES_INDEX]);
|
||||
dbInfos[count]->vgroups = *((int32_t *)row[TSDB_SHOW_DB_VGROUPS_INDEX]);
|
||||
dbInfos[count]->replica = *((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]);
|
||||
dbInfos[count]->quorum = *((int16_t *)row[TSDB_SHOW_DB_QUORUM_INDEX]);
|
||||
|
@ -1930,7 +1930,7 @@ static void printfDbInfoForQueryToFile(
|
|||
fprintf(fp, "================ database[%d] ================\n", index);
|
||||
fprintf(fp, "name: %s\n", dbInfos->name);
|
||||
fprintf(fp, "created_time: %s\n", dbInfos->create_time);
|
||||
fprintf(fp, "ntables: %d\n", dbInfos->ntables);
|
||||
fprintf(fp, "ntables: %"PRId64"\n", dbInfos->ntables);
|
||||
fprintf(fp, "vgroups: %d\n", dbInfos->vgroups);
|
||||
fprintf(fp, "replica: %d\n", dbInfos->replica);
|
||||
fprintf(fp, "quorum: %d\n", dbInfos->quorum);
|
||||
|
@ -2327,7 +2327,7 @@ static int calcRowLen(SSuperTable* superTbls) {
|
|||
|
||||
static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
|
||||
char* dbName, char* sTblName, char** childTblNameOfSuperTbl,
|
||||
uint64_t* childTblCountOfSuperTbl, int64_t limit, uint64_t offset) {
|
||||
int64_t* childTblCountOfSuperTbl, int64_t limit, uint64_t offset) {
|
||||
|
||||
char command[BUFFER_SIZE] = "\0";
|
||||
char limitBuf[100] = "\0";
|
||||
|
@ -2356,8 +2356,8 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
int childTblCount = (limit < 0)?10000:limit;
|
||||
int count = 0;
|
||||
int64_t childTblCount = (limit < 0)?10000:limit;
|
||||
int64_t count = 0;
|
||||
if (childTblName == NULL) {
|
||||
childTblName = (char*)calloc(1, childTblCount * TSDB_TABLE_NAME_LEN);
|
||||
if (NULL == childTblName) {
|
||||
|
@ -2404,7 +2404,7 @@ static int getChildNameOfSuperTableWithLimitAndOffset(TAOS * taos,
|
|||
|
||||
static int getAllChildNameOfSuperTable(TAOS * taos, char* dbName,
|
||||
char* sTblName, char** childTblNameOfSuperTbl,
|
||||
uint64_t* childTblCountOfSuperTbl) {
|
||||
int64_t* childTblCountOfSuperTbl) {
|
||||
|
||||
return getChildNameOfSuperTableWithLimitAndOffset(taos, dbName, sTblName,
|
||||
childTblNameOfSuperTbl, childTblCountOfSuperTbl,
|
||||
|
@ -2884,7 +2884,7 @@ static void* createTable(void *sarg)
|
|||
}
|
||||
|
||||
static int startMultiThreadCreateChildTable(
|
||||
char* cols, int threads, uint64_t startFrom, uint64_t ntables,
|
||||
char* cols, int threads, uint64_t startFrom, int64_t ntables,
|
||||
char* db_name, SSuperTable* superTblInfo) {
|
||||
|
||||
pthread_t *pids = malloc(threads * sizeof(pthread_t));
|
||||
|
@ -2899,13 +2899,13 @@ static int startMultiThreadCreateChildTable(
|
|||
threads = 1;
|
||||
}
|
||||
|
||||
uint64_t a = ntables / threads;
|
||||
int64_t a = ntables / threads;
|
||||
if (a < 1) {
|
||||
threads = ntables;
|
||||
a = 1;
|
||||
}
|
||||
|
||||
uint64_t b = 0;
|
||||
int64_t b = 0;
|
||||
b = ntables % threads;
|
||||
|
||||
for (int64_t i = 0; i < threads; i++) {
|
||||
|
@ -2969,10 +2969,10 @@ static void createChildTables() {
|
|||
|
||||
verbosePrint("%s() LN%d: %s\n", __func__, __LINE__,
|
||||
g_Dbs.db[i].superTbls[j].colsOfCreateChildTable);
|
||||
int startFrom = 0;
|
||||
uint64_t startFrom = 0;
|
||||
g_totalChildTables += g_Dbs.db[i].superTbls[j].childTblCount;
|
||||
|
||||
verbosePrint("%s() LN%d: create %d child tables from %d\n",
|
||||
verbosePrint("%s() LN%d: create %"PRId64" child tables from %"PRIu64"\n",
|
||||
__func__, __LINE__, g_totalChildTables, startFrom);
|
||||
startMultiThreadCreateChildTable(
|
||||
g_Dbs.db[i].superTbls[j].colsOfCreateChildTable,
|
||||
|
@ -3000,7 +3000,7 @@ static void createChildTables() {
|
|||
|
||||
snprintf(tblColsBuf + len, MAX_SQL_SIZE - len, ")");
|
||||
|
||||
verbosePrint("%s() LN%d: dbName: %s num of tb: %"PRIu64" schema: %s\n",
|
||||
verbosePrint("%s() LN%d: dbName: %s num of tb: %"PRId64" schema: %s\n",
|
||||
__func__, __LINE__,
|
||||
g_Dbs.db[i].dbName, g_args.num_of_tables, tblColsBuf);
|
||||
startMultiThreadCreateChildTable(
|
||||
|
@ -4661,7 +4661,7 @@ static int64_t generateData(char *recBuf, char **data_type,
|
|||
double t = rand_double();
|
||||
pstr += sprintf(pstr, ",%20.8f", t);
|
||||
} else if (strcasecmp(data_type[i % c], "BOOL") == 0) {
|
||||
bool b = taosRandom() & 1;
|
||||
bool b = rand_bool() & 1;
|
||||
pstr += sprintf(pstr, ",%s", b ? "true" : "false");
|
||||
} else if (strcasecmp(data_type[i % c], "BINARY") == 0) {
|
||||
char *s = malloc(lenOfBinary);
|
||||
|
@ -4756,7 +4756,7 @@ static void getTableName(char *pTblName, threadInfo* pThreadInfo, uint64_t table
|
|||
(tableSeq - superTblInfo->childTblOffset) * TSDB_TABLE_NAME_LEN);
|
||||
} else {
|
||||
|
||||
verbosePrint("[%d] %s() LN%d: from=%"PRIu64" count=%"PRIu64" seq=%"PRIu64"\n",
|
||||
verbosePrint("[%d] %s() LN%d: from=%"PRIu64" count=%"PRId64" seq=%"PRIu64"\n",
|
||||
pThreadInfo->threadID, __func__, __LINE__,
|
||||
pThreadInfo->start_table_from,
|
||||
pThreadInfo->ntables, tableSeq);
|
||||
|
@ -4772,7 +4772,7 @@ static void getTableName(char *pTblName, threadInfo* pThreadInfo, uint64_t table
|
|||
static int64_t generateDataTail(
|
||||
SSuperTable* superTblInfo,
|
||||
uint64_t batch, char* buffer, int64_t remainderBufLen, int64_t insertRows,
|
||||
int64_t startFrom, int64_t startTime, int64_t *pSamplePos, int64_t *dataLen) {
|
||||
uint64_t startFrom, int64_t startTime, int64_t *pSamplePos, int64_t *dataLen) {
|
||||
uint64_t len = 0;
|
||||
uint32_t ncols_per_record = 1; // count first col ts
|
||||
|
||||
|
@ -4948,7 +4948,7 @@ static int64_t generateInterlaceDataBuffer(
|
|||
char *tableName, uint64_t batchPerTbl, uint64_t i, uint64_t batchPerTblTimes,
|
||||
uint64_t tableSeq,
|
||||
threadInfo *pThreadInfo, char *buffer,
|
||||
uint64_t insertRows,
|
||||
int64_t insertRows,
|
||||
int64_t startTime,
|
||||
uint64_t *pRemainderBufLen)
|
||||
{
|
||||
|
@ -5008,7 +5008,7 @@ static int64_t generateProgressiveDataBuffer(
|
|||
int64_t tableSeq,
|
||||
threadInfo *pThreadInfo, char *buffer,
|
||||
int64_t insertRows,
|
||||
int64_t startFrom, int64_t startTime, int64_t *pSamplePos,
|
||||
uint64_t startFrom, int64_t startTime, int64_t *pSamplePos,
|
||||
int64_t *pRemainderBufLen)
|
||||
{
|
||||
SSuperTable* superTblInfo = pThreadInfo->superTblInfo;
|
||||
|
@ -5061,7 +5061,7 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
|
|||
debugPrint("[%d] %s() LN%d: ### interlace write\n",
|
||||
pThreadInfo->threadID, __func__, __LINE__);
|
||||
|
||||
uint64_t insertRows;
|
||||
int64_t insertRows;
|
||||
uint64_t interlaceRows;
|
||||
|
||||
SSuperTable* superTblInfo = pThreadInfo->superTblInfo;
|
||||
|
@ -5123,14 +5123,12 @@ static void* syncWriteInterlace(threadInfo *pThreadInfo) {
|
|||
|
||||
uint64_t tableSeq = pThreadInfo->start_table_from;
|
||||
|
||||
debugPrint("[%d] %s() LN%d: start_table_from=%"PRIu64" ntables=%"PRIu64" insertRows=%"PRIu64"\n",
|
||||
debugPrint("[%d] %s() LN%d: start_table_from=%"PRIu64" ntables=%"PRId64" insertRows=%"PRIu64"\n",
|
||||
pThreadInfo->threadID, __func__, __LINE__, pThreadInfo->start_table_from,
|
||||
pThreadInfo->ntables, insertRows);
|
||||
|
||||
int64_t startTime = pThreadInfo->start_time;
|
||||
|
||||
assert(pThreadInfo->ntables > 0);
|
||||
|
||||
uint64_t batchPerTbl = interlaceRows;
|
||||
uint64_t batchPerTblTimes;
|
||||
|
||||
|
@ -5343,7 +5341,7 @@ static void* syncWriteProgressive(threadInfo *pThreadInfo) {
|
|||
tableSeq ++) {
|
||||
int64_t start_time = pThreadInfo->start_time;
|
||||
|
||||
uint64_t insertRows = (superTblInfo)?superTblInfo->insertRows:g_args.num_of_DPT;
|
||||
int64_t insertRows = (superTblInfo)?superTblInfo->insertRows:g_args.num_of_DPT;
|
||||
verbosePrint("%s() LN%d insertRows=%"PRId64"\n", __func__, __LINE__, insertRows);
|
||||
|
||||
for (uint64_t i = 0; i < insertRows;) {
|
||||
|
@ -5659,8 +5657,8 @@ static void startMultiThreadInsertData(int threads, char* db_name,
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
int ntables = 0;
|
||||
int startFrom;
|
||||
int64_t ntables = 0;
|
||||
uint64_t startFrom;
|
||||
|
||||
if (superTblInfo) {
|
||||
int64_t limit;
|
||||
|
@ -5716,7 +5714,7 @@ static void startMultiThreadInsertData(int threads, char* db_name,
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
uint64_t childTblCount;
|
||||
int64_t childTblCount;
|
||||
getChildNameOfSuperTableWithLimitAndOffset(
|
||||
taos,
|
||||
db_name, superTblInfo->sTblName,
|
||||
|
@ -5730,13 +5728,13 @@ static void startMultiThreadInsertData(int threads, char* db_name,
|
|||
|
||||
taos_close(taos);
|
||||
|
||||
uint64_t a = ntables / threads;
|
||||
int64_t a = ntables / threads;
|
||||
if (a < 1) {
|
||||
threads = ntables;
|
||||
a = 1;
|
||||
}
|
||||
|
||||
uint64_t b = 0;
|
||||
int64_t b = 0;
|
||||
if (threads != 0) {
|
||||
b = ntables % threads;
|
||||
}
|
||||
|
@ -5892,7 +5890,7 @@ static void *readTable(void *sarg) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int num_of_DPT;
|
||||
int64_t num_of_DPT;
|
||||
/* if (rinfo->superTblInfo) {
|
||||
num_of_DPT = rinfo->superTblInfo->insertRows; // nrecords_per_table;
|
||||
} else {
|
||||
|
@ -5900,22 +5898,22 @@ static void *readTable(void *sarg) {
|
|||
num_of_DPT = g_args.num_of_DPT;
|
||||
// }
|
||||
|
||||
int num_of_tables = rinfo->ntables; // rinfo->end_table_to - rinfo->start_table_from + 1;
|
||||
int totalData = num_of_DPT * num_of_tables;
|
||||
int64_t num_of_tables = rinfo->ntables; // rinfo->end_table_to - rinfo->start_table_from + 1;
|
||||
int64_t totalData = num_of_DPT * num_of_tables;
|
||||
bool do_aggreFunc = g_Dbs.do_aggreFunc;
|
||||
|
||||
int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2;
|
||||
if (!do_aggreFunc) {
|
||||
printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n");
|
||||
}
|
||||
printf("%d records:\n", totalData);
|
||||
printf("%"PRId64" records:\n", totalData);
|
||||
fprintf(fp, "| QFunctions | QRecords | QSpeed(R/s) | QLatency(ms) |\n");
|
||||
|
||||
for (uint64_t j = 0; j < n; j++) {
|
||||
for (int j = 0; j < n; j++) {
|
||||
double totalT = 0;
|
||||
uint64_t count = 0;
|
||||
for (uint64_t i = 0; i < num_of_tables; i++) {
|
||||
sprintf(command, "select %s from %s%"PRIu64" where ts>= %" PRIu64,
|
||||
for (int64_t i = 0; i < num_of_tables; i++) {
|
||||
sprintf(command, "select %s from %s%"PRId64" where ts>= %" PRIu64,
|
||||
aggreFunc[j], tb_prefix, i, sTime);
|
||||
|
||||
double t = taosGetTimestampMs();
|
||||
|
@ -5940,7 +5938,7 @@ static void *readTable(void *sarg) {
|
|||
taos_free_result(pSql);
|
||||
}
|
||||
|
||||
fprintf(fp, "|%10s | %10d | %12.2f | %10.2f |\n",
|
||||
fprintf(fp, "|%10s | %"PRId64" | %12.2f | %10.2f |\n",
|
||||
aggreFunc[j][0] == '*' ? " * " : aggreFunc[j], totalData,
|
||||
(double)(num_of_tables * num_of_DPT) / totalT, totalT * 1000);
|
||||
printf("select %10s took %.6f second(s)\n", aggreFunc[j], totalT * 1000);
|
||||
|
@ -5962,29 +5960,29 @@ static void *readMetric(void *sarg) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int num_of_DPT = rinfo->superTblInfo->insertRows;
|
||||
int num_of_tables = rinfo->ntables; // rinfo->end_table_to - rinfo->start_table_from + 1;
|
||||
int totalData = num_of_DPT * num_of_tables;
|
||||
int64_t num_of_DPT = rinfo->superTblInfo->insertRows;
|
||||
int64_t num_of_tables = rinfo->ntables; // rinfo->end_table_to - rinfo->start_table_from + 1;
|
||||
int64_t totalData = num_of_DPT * num_of_tables;
|
||||
bool do_aggreFunc = g_Dbs.do_aggreFunc;
|
||||
|
||||
int n = do_aggreFunc ? (sizeof(aggreFunc) / sizeof(aggreFunc[0])) : 2;
|
||||
if (!do_aggreFunc) {
|
||||
printf("\nThe first field is either Binary or Bool. Aggregation functions are not supported.\n");
|
||||
}
|
||||
printf("%d records:\n", totalData);
|
||||
fprintf(fp, "Querying On %d records:\n", totalData);
|
||||
printf("%"PRId64" records:\n", totalData);
|
||||
fprintf(fp, "Querying On %"PRId64" records:\n", totalData);
|
||||
|
||||
for (int j = 0; j < n; j++) {
|
||||
char condition[COND_BUF_LEN] = "\0";
|
||||
char tempS[64] = "\0";
|
||||
|
||||
int m = 10 < num_of_tables ? 10 : num_of_tables;
|
||||
int64_t m = 10 < num_of_tables ? 10 : num_of_tables;
|
||||
|
||||
for (int i = 1; i <= m; i++) {
|
||||
for (int64_t i = 1; i <= m; i++) {
|
||||
if (i == 1) {
|
||||
sprintf(tempS, "t1 = %d", i);
|
||||
sprintf(tempS, "t1 = %"PRId64"", i);
|
||||
} else {
|
||||
sprintf(tempS, " or t1 = %d ", i);
|
||||
sprintf(tempS, " or t1 = %"PRId64" ", i);
|
||||
}
|
||||
strncat(condition, tempS, COND_BUF_LEN - 1);
|
||||
|
||||
|
@ -6070,11 +6068,11 @@ static int insertTestProcess() {
|
|||
end = taosGetTimestampMs();
|
||||
|
||||
if (g_totalChildTables > 0) {
|
||||
fprintf(stderr, "Spent %.4f seconds to create %d tables with %d thread(s)\n\n",
|
||||
fprintf(stderr, "Spent %.4f seconds to create %"PRId64" tables with %d thread(s)\n\n",
|
||||
(end - start)/1000.0, g_totalChildTables, g_Dbs.threadCountByCreateTbl);
|
||||
if (g_fpOfInsertResult) {
|
||||
fprintf(g_fpOfInsertResult,
|
||||
"Spent %.4f seconds to create %d tables with %d thread(s)\n\n",
|
||||
"Spent %.4f seconds to create %"PRId64" tables with %d thread(s)\n\n",
|
||||
(end - start)/1000.0, g_totalChildTables, g_Dbs.threadCountByCreateTbl);
|
||||
}
|
||||
}
|
||||
|
@ -6400,16 +6398,16 @@ static int queryTestProcess() {
|
|||
ERROR_EXIT("memory allocation failed for create threads\n");
|
||||
}
|
||||
|
||||
uint64_t ntables = g_queryInfo.superQueryInfo.childTblCount;
|
||||
int64_t ntables = g_queryInfo.superQueryInfo.childTblCount;
|
||||
int threads = g_queryInfo.superQueryInfo.threadCnt;
|
||||
|
||||
uint64_t a = ntables / threads;
|
||||
int64_t a = ntables / threads;
|
||||
if (a < 1) {
|
||||
threads = ntables;
|
||||
a = 1;
|
||||
}
|
||||
|
||||
uint64_t b = 0;
|
||||
int64_t b = 0;
|
||||
if (threads != 0) {
|
||||
b = ntables % threads;
|
||||
}
|
||||
|
@ -6748,16 +6746,16 @@ static int subscribeTestProcess() {
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
uint64_t ntables = g_queryInfo.superQueryInfo.childTblCount;
|
||||
int64_t ntables = g_queryInfo.superQueryInfo.childTblCount;
|
||||
int threads = g_queryInfo.superQueryInfo.threadCnt;
|
||||
|
||||
uint64_t a = ntables / threads;
|
||||
int64_t a = ntables / threads;
|
||||
if (a < 1) {
|
||||
threads = ntables;
|
||||
a = 1;
|
||||
}
|
||||
|
||||
uint64_t b = 0;
|
||||
int64_t b = 0;
|
||||
if (threads != 0) {
|
||||
b = ntables % threads;
|
||||
}
|
||||
|
|
|
@ -389,7 +389,7 @@ static void mnodeSetDefaultDbCfg(SDbCfg *pCfg) {
|
|||
if (pCfg->compression < 0) pCfg->compression = tsCompression;
|
||||
if (pCfg->walLevel < 0) pCfg->walLevel = tsWAL;
|
||||
if (pCfg->replications < 0) pCfg->replications = tsReplications;
|
||||
if (pCfg->quorum < 0) pCfg->quorum = tsQuorum;
|
||||
if (pCfg->quorum < 0) pCfg->quorum = MIN(tsQuorum, pCfg->replications);
|
||||
if (pCfg->update < 0) pCfg->update = tsUpdate;
|
||||
if (pCfg->cacheLastRow < 0) pCfg->cacheLastRow = tsCacheLastRow;
|
||||
if (pCfg->dbType < 0) pCfg->dbType = 0;
|
||||
|
|
|
@ -123,8 +123,9 @@ SConnObj *mnodeAccquireConn(int32_t connId, char *user, uint32_t ip, uint16_t po
|
|||
if (/* pConn->ip != ip || */ pConn->port != port /* || strcmp(pConn->user, user) != 0 */) {
|
||||
mDebug("connId:%d, incoming conn user:%s ip:%s:%u, not match exist conn user:%s ip:%s:%u", connId, user,
|
||||
taosIpStr(ip), port, pConn->user, taosIpStr(pConn->ip), pConn->port);
|
||||
taosCacheRelease(tsMnodeConnCache, (void **)&pConn, false);
|
||||
return NULL;
|
||||
pConn->port = port;
|
||||
//taosCacheRelease(tsMnodeConnCache, (void **)&pConn, false);
|
||||
//return NULL;
|
||||
}
|
||||
|
||||
// mDebug("connId:%d, is incoming, user:%s ip:%s:%u", connId, pConn->user, taosIpStr(pConn->ip), pConn->port);
|
||||
|
|
|
@ -253,10 +253,6 @@ static int32_t mnodeProcessHeartBeatMsg(SMnodeMsg *pMsg) {
|
|||
|
||||
int32_t connId = htonl(pHBMsg->connId);
|
||||
SConnObj *pConn = mnodeAccquireConn(connId, connInfo.user, connInfo.clientIp, connInfo.clientPort);
|
||||
if (pConn == NULL) {
|
||||
pHBMsg->pid = htonl(pHBMsg->pid);
|
||||
pConn = mnodeCreateConn(connInfo.user, connInfo.clientIp, connInfo.clientPort, pHBMsg->pid, pHBMsg->appName);
|
||||
}
|
||||
|
||||
if (pConn == NULL) {
|
||||
// do not close existing links, otherwise
|
||||
|
|
|
@ -124,6 +124,8 @@ int64_t genQueryId(void) {
|
|||
|
||||
uid |= sid;
|
||||
|
||||
qDebug("gen qid:0x%"PRIx64, uid);
|
||||
|
||||
return uid;
|
||||
}
|
||||
|
||||
|
|
|
@ -1471,7 +1471,7 @@ static int32_t rpcCompressRpcMsg(char* pCont, int32_t contLen) {
|
|||
* only the compressed size is less than the value of contLen - overhead, the compression is applied
|
||||
* The first four bytes is set to 0, the second four bytes are utilized to keep the original length of message
|
||||
*/
|
||||
if (compLen < contLen - overhead) {
|
||||
if (compLen > 0 && compLen < contLen - overhead) {
|
||||
SRpcComp *pComp = (SRpcComp *)pCont;
|
||||
pComp->reserved = 0;
|
||||
pComp->contLen = htonl(contLen);
|
||||
|
|
|
@ -120,12 +120,14 @@ int32_t vnodeDrop(int32_t vgId) {
|
|||
vDebug("vgId:%d, failed to drop, vnode not find", vgId);
|
||||
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
||||
}
|
||||
if (pVnode->dropped) {
|
||||
vnodeRelease(pVnode);
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
vInfo("vgId:%d, vnode will be dropped, refCount:%d pVnode:%p", pVnode->vgId, pVnode->refCount, pVnode);
|
||||
pVnode->dropped = 1;
|
||||
|
||||
// remove from hash, so new messages wont be consumed
|
||||
vnodeRemoveFromHash(pVnode);
|
||||
vnodeRelease(pVnode);
|
||||
vnodeCleanupInMWorker(pVnode);
|
||||
|
||||
|
@ -390,6 +392,10 @@ int32_t vnodeOpen(int32_t vgId) {
|
|||
int32_t vnodeClose(int32_t vgId) {
|
||||
SVnodeObj *pVnode = vnodeAcquire(vgId);
|
||||
if (pVnode == NULL) return 0;
|
||||
if (pVnode->dropped) {
|
||||
vnodeRelease(pVnode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
vDebug("vgId:%d, vnode will be closed, pVnode:%p", pVnode->vgId, pVnode);
|
||||
vnodeRemoveFromHash(pVnode);
|
||||
|
@ -475,6 +481,8 @@ void vnodeCleanUp(SVnodeObj *pVnode) {
|
|||
|
||||
vnodeSetClosingStatus(pVnode);
|
||||
|
||||
vnodeRemoveFromHash(pVnode);
|
||||
|
||||
// stop replication module
|
||||
if (pVnode->sync > 0) {
|
||||
int64_t sync = pVnode->sync;
|
||||
|
|
|
@ -117,14 +117,17 @@ static SVReadMsg *vnodeBuildVReadMsg(SVnodeObj *pVnode, void *pCont, int32_t con
|
|||
}
|
||||
|
||||
int32_t vnodeWriteToRQueue(void *vparam, void *pCont, int32_t contLen, int8_t qtype, void *rparam) {
|
||||
SVnodeObj *pVnode = vparam;
|
||||
if (pVnode->dropped) {
|
||||
return TSDB_CODE_APP_NOT_READY;
|
||||
}
|
||||
|
||||
SVReadMsg *pRead = vnodeBuildVReadMsg(vparam, pCont, contLen, qtype, rparam);
|
||||
if (pRead == NULL) {
|
||||
assert(terrno != 0);
|
||||
return terrno;
|
||||
}
|
||||
|
||||
SVnodeObj *pVnode = vparam;
|
||||
|
||||
int32_t code = vnodeCheckRead(pVnode);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
taosFreeQitem(pRead);
|
||||
|
|
|
@ -66,6 +66,9 @@ static bool vnodeSetClosingStatusImp(SVnodeObj* pVnode) {
|
|||
}
|
||||
|
||||
bool vnodeSetClosingStatus(SVnodeObj* pVnode) {
|
||||
if (pVnode->status == TAOS_VN_STATUS_CLOSING)
|
||||
return true;
|
||||
|
||||
while (!vnodeSetClosingStatusImp(pVnode)) {
|
||||
taosMsleep(1);
|
||||
}
|
||||
|
|
|
@ -55,6 +55,11 @@ void vnodeNotifyRole(int32_t vgId, int8_t role) {
|
|||
vTrace("vgId:%d, vnode not found while notify role", vgId);
|
||||
return;
|
||||
}
|
||||
if (pVnode->dropped) {
|
||||
vTrace("vgId:%d, vnode dropped while notify role", vgId);
|
||||
vnodeRelease(pVnode);
|
||||
return;
|
||||
}
|
||||
|
||||
vInfo("vgId:%d, sync role changed from %s to %s", pVnode->vgId, syncRole[pVnode->role], syncRole[role]);
|
||||
pVnode->role = role;
|
||||
|
@ -75,6 +80,11 @@ void vnodeCtrlFlow(int32_t vgId, int32_t level) {
|
|||
vTrace("vgId:%d, vnode not found while flow ctrl", vgId);
|
||||
return;
|
||||
}
|
||||
if (pVnode->dropped) {
|
||||
vTrace("vgId:%d, vnode dropped while flow ctrl", vgId);
|
||||
vnodeRelease(pVnode);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pVnode->flowctrlLevel != level) {
|
||||
vDebug("vgId:%d, set flowctrl level from %d to %d", pVnode->vgId, pVnode->flowctrlLevel, level);
|
||||
|
@ -129,6 +139,7 @@ int32_t vnodeWriteToCache(int32_t vgId, void *wparam, int32_t qtype, void *rpara
|
|||
SVnodeObj *pVnode = vnodeAcquire(vgId);
|
||||
if (pVnode == NULL) {
|
||||
vError("vgId:%d, vnode not found while write to cache", vgId);
|
||||
vnodeRelease(pVnode);
|
||||
return TSDB_CODE_VND_INVALID_VGROUP_ID;
|
||||
}
|
||||
|
||||
|
|
|
@ -386,4 +386,6 @@ void vnodeWaitWriteCompleted(SVnodeObj *pVnode) {
|
|||
vTrace("vgId:%d, queued wmsg num:%d", pVnode->vgId, pVnode->queuedWMsg);
|
||||
taosMsleep(10);
|
||||
}
|
||||
|
||||
taosMsleep(900);
|
||||
}
|
||||
|
|
|
@ -426,8 +426,8 @@ static int32_t walRestoreWalFile(SWal *pWal, void *pVnode, FWalWrite writeFp, ch
|
|||
#endif
|
||||
offset = offset + sizeof(SWalHead) + pHead->len;
|
||||
|
||||
wTrace("vgId:%d, restore wal, fileId:%" PRId64 " hver:%" PRIu64 " wver:%" PRIu64 " len:%d", pWal->vgId,
|
||||
fileId, pHead->version, pWal->version, pHead->len);
|
||||
wTrace("vgId:%d, restore wal, fileId:%" PRId64 " hver:%" PRIu64 " wver:%" PRIu64 " len:%d offset:%" PRId64,
|
||||
pWal->vgId, fileId, pHead->version, pWal->version, pHead->len, offset);
|
||||
|
||||
pWal->version = pHead->version;
|
||||
(*writeFp)(pVnode, pHead, TAOS_QTYPE_WAL, NULL);
|
||||
|
|
|
@ -68,7 +68,7 @@ while $loop <= $loops
|
|||
while $i < 10
|
||||
sql select count(*) from $stb where t1 = $i
|
||||
if $data00 != $rowNum then
|
||||
print expect $rowNum, actual: $data00
|
||||
print expect $rowNum , actual: $data00
|
||||
return -1
|
||||
endi
|
||||
$i = $i + 1
|
||||
|
|
Loading…
Reference in New Issue