Merge branch 'develop' into feature/2.0tsdb
This commit is contained in:
commit
0d3d2a9046
|
@ -6,10 +6,22 @@
|
|||
########################################################
|
||||
|
||||
# first full-qualified domain name (FQDN) for TDengine system
|
||||
# first 127.0.0.1
|
||||
# first hostname1:6030
|
||||
|
||||
# second full-qualified domain name (FQDN) for TDengine system, for cluster edition only
|
||||
# second 127.0.0.1
|
||||
# second cluster_hostname2:6030
|
||||
|
||||
# the arbitrator's full-qualified domain name (FQDN) for TDengine system, for cluster edition only
|
||||
# arbitrator arbitrator_hostname:6030
|
||||
|
||||
# the full-qualified domain name (FQDN) of dnode
|
||||
# fqdn hostname:6030
|
||||
|
||||
# port for MNode connect to Client, default udp[6030-6055] tcp[6030]
|
||||
# serverPort 6030
|
||||
|
||||
# http service port, default tcp[6020]
|
||||
# httpPort 6020
|
||||
|
||||
# set socket type ("udp" and "tcp")
|
||||
# the server and client should have the same socket type. Otherwise, connect will fail
|
||||
|
@ -30,51 +42,29 @@
|
|||
# log file's directory
|
||||
# logDir /var/log/taos
|
||||
|
||||
# http service port, default tcp[6020]
|
||||
# httpPort 6020
|
||||
# number of management nodes in the system
|
||||
# numOfMnodes 3
|
||||
|
||||
# port for MNode connect to Client, default udp[6030-6055] tcp[6030]
|
||||
# serverPort 6030
|
||||
# optional roles for dnode. 0 - any, 1 - mnode, 2 - dnode
|
||||
# alternativeRole 0
|
||||
|
||||
# number of threads per CPU core
|
||||
# numOfThreadsPerCore 1
|
||||
# numOfThreadsPerCore 1.0
|
||||
|
||||
# number of vnodes per core in DNode
|
||||
# numOfVnodesPerCore 8
|
||||
|
||||
# the ratio of threads responsible for querying in the total thread
|
||||
# ratioOfQueryThreads 0.5
|
||||
|
||||
# number of total vnodes in DNode
|
||||
# numOfTotalVnodes 0
|
||||
|
||||
# max number of tables per vnode
|
||||
# maxtablesPerVnode 1000
|
||||
|
||||
# cache block size
|
||||
# cache 16384
|
||||
|
||||
# row of records in file block
|
||||
# minRows 100
|
||||
# maxRows 4096
|
||||
|
||||
# number of cache blocks per vnode
|
||||
# blocks 2
|
||||
|
||||
# interval of system monitor
|
||||
# monitorInterval 60
|
||||
|
||||
# the compressed rpc message, option:
|
||||
# -1 (no compression)
|
||||
# 0 (all message compressed),
|
||||
# > 0 (rpc message body which larger than this value will be compressed)
|
||||
# compressMsgSize -1
|
||||
|
||||
# RPC re-try timer, millisecond
|
||||
# rpcTimer 300
|
||||
|
||||
# RPC maximum time for ack, seconds
|
||||
# rpcMaxTime 600
|
||||
|
||||
# commit interval,unit is second
|
||||
# ctime 3600
|
||||
# interval of check load balance when the management node is in normal operation
|
||||
# balanceInterval 300
|
||||
|
||||
# interval of DNode report status to MNode, unit is Second, for cluster version only
|
||||
# statusInterval 1
|
||||
|
@ -82,29 +72,29 @@
|
|||
# interval of Shell send HB to MNode, unit is Second
|
||||
# shellActivityTimer 3
|
||||
|
||||
# interval of DNode send HB to DNode, unit is Second, for cluster version only
|
||||
# vnodePeerHBTimer 1
|
||||
# interval of system monitor
|
||||
# monitorInterval 30
|
||||
|
||||
# interval of MNode send HB to MNode, unit is Second, for cluster version only
|
||||
# mgmtPeerHBTimer 1
|
||||
# RPC re-try timer, millisecond
|
||||
# rpcTimer 300
|
||||
|
||||
# RPC maximum time for ack, seconds
|
||||
# rpcMaxTime 600
|
||||
|
||||
# duration of to keep tableMeta kept in Cache, seconds
|
||||
# tableMetaKeepTimer 7200
|
||||
|
||||
# max number of users
|
||||
# maxUsers 1000
|
||||
# Minimum sliding window time
|
||||
# minSlidingTime 10
|
||||
|
||||
# max number of databases
|
||||
# maxDbs 1000
|
||||
# Time window minimum
|
||||
# minIntervalTime 10
|
||||
|
||||
# max number of tables
|
||||
# maxTables 650000
|
||||
# max length of an SQL
|
||||
# maxSQLLength 65380
|
||||
|
||||
# max number of Dnodes, for cluster version only
|
||||
# maxDnodes 1000
|
||||
|
||||
# Max number of VGroups, for cluster version only
|
||||
# maxVGroups 1000
|
||||
# Support the maximum number of records allowed for super table time sorting
|
||||
# maxNumOfOrderedRes 100000
|
||||
|
||||
# system locale
|
||||
# locale en_US.UTF-8
|
||||
|
@ -121,6 +111,24 @@
|
|||
# enable/disable async log
|
||||
# asyncLog 1
|
||||
|
||||
# the compressed rpc message, option:
|
||||
# -1 (no compression)
|
||||
# 0 (all message compressed),
|
||||
# > 0 (rpc message body which larger than this value will be compressed)
|
||||
# compressMsgSize -1
|
||||
|
||||
# cache block size (Mbyte)
|
||||
# cache 16
|
||||
|
||||
# number of cache blocks per vnode
|
||||
# blocks 4
|
||||
|
||||
# min row of records in file block
|
||||
# minRows 100
|
||||
|
||||
# max row of records in file block
|
||||
# maxRows 4096
|
||||
|
||||
# enable/disable compression
|
||||
# comp 1
|
||||
|
||||
|
@ -131,31 +139,25 @@
|
|||
# keep 3650
|
||||
|
||||
# number of replications, for cluster version only
|
||||
# replications 1
|
||||
# replica 1
|
||||
|
||||
# client default database(database should be created)
|
||||
# defaultDB
|
||||
# max number of connections from client for dnode
|
||||
# maxShellConns 5000
|
||||
|
||||
# client default username
|
||||
# defaultUser root
|
||||
# max numerber of connections to one database
|
||||
# maxConnections 5000
|
||||
|
||||
# client default password
|
||||
# defaultPass taosdata
|
||||
# Stop writing logs when the disk size of the log folder is less than this value
|
||||
# minimalLogDirGB 0.1
|
||||
|
||||
# max number of connections from client for mgmt node
|
||||
# maxShellConns 2000
|
||||
# Stop writing temporary files when the disk size of the log folder is less than this value
|
||||
# minimalTmpDirGB 0.1
|
||||
|
||||
# max numerber of meter Connections
|
||||
# maxMeterConnections 10000
|
||||
|
||||
# max connection to management node
|
||||
# maxMgmtConnections 2000
|
||||
|
||||
# max connection to Vnode
|
||||
# maxVnodeConnections 10000
|
||||
# Stop writing data when the disk size of the log folder is less than this value
|
||||
# minimalDataDirGB 0.1
|
||||
|
||||
# mnode take into account while balance, for cluster version only
|
||||
# mnodeEqualVnodeNum 4
|
||||
# mnodeEqualVnodeNum 4
|
||||
|
||||
# number of seconds allowed for a dnode to be offline, for cluster version only
|
||||
# offlineThreshold 864000
|
||||
|
@ -170,10 +172,10 @@
|
|||
# mqtt 0
|
||||
|
||||
# mqtt uri
|
||||
# mqttBrokerAddress mqtt://username:password@hostname:1883/taos/
|
||||
# mqttBrokerAddress mqtt://username:password@hostname:1883/taos/
|
||||
|
||||
# mqtt client name
|
||||
# mqttBrokerClientId taos_mqtt
|
||||
# mqttBrokerClientId taos_mqtt
|
||||
|
||||
# maximum number of rows returned by the restful interface
|
||||
# restfulRowLimit 10240
|
||||
|
@ -181,41 +183,17 @@
|
|||
# number of threads used to process http requests
|
||||
# httpMaxThreads 2
|
||||
|
||||
# pre-allocated number of http sessions
|
||||
# httpCacheSessions 100
|
||||
# The minimum time to wait before the first stream execution
|
||||
# maxFirstStreamCompDelay 10000
|
||||
|
||||
# whether to enable HTTP compression transmission
|
||||
# httpEnableCompress 0
|
||||
# Retry wait time benchmark
|
||||
# retryStreamCompDelay 10
|
||||
|
||||
# the delayed time for launching each continuous query. 10% of the whole computing time window by default.
|
||||
# streamCompDelayRatio 0.1
|
||||
|
||||
# the max allowed delayed time for launching continuous query. 20ms by default
|
||||
# tsMaxStreamComputDelay 20000
|
||||
|
||||
# whether the telegraf table name contains the number of tags and the number of fields
|
||||
# telegrafUseFieldNum 0
|
||||
|
||||
# enable table names generated by telegraf can be configured
|
||||
# use /etc/taos/taos.telegraf.cfg as the configuration file, such as
|
||||
# {
|
||||
# "metrics": [
|
||||
# {
|
||||
# "name" : "system",
|
||||
# "tbname" : "system_uptime",
|
||||
# "fields": [
|
||||
# "uptime"
|
||||
# ]
|
||||
# },
|
||||
# {
|
||||
# "name": "system",
|
||||
# "tbname" : "system_uptime_format",
|
||||
# "fields": [
|
||||
# "uptime_format"
|
||||
# ]
|
||||
# }
|
||||
# ]
|
||||
# }
|
||||
# maxStreamCompDelay 20000
|
||||
|
||||
# The following parameter is used to limit the maximum number of lines in log files.
|
||||
# max number of rows per log filters
|
||||
|
@ -226,35 +204,62 @@
|
|||
# 131: output warning and error,135: output info, warning and error to log.
|
||||
# 199: output debug, info, warning and error to both screen and file
|
||||
|
||||
# debug flag for basic utils
|
||||
# debugFlag 131
|
||||
|
||||
# debug flag for meta management messages
|
||||
# mDebugFlag 135
|
||||
|
||||
# debug flag for dnode messages
|
||||
# dDebugFlag 131
|
||||
|
||||
# debug flag for TDengine SDB
|
||||
# sDebugFlag 135
|
||||
|
||||
# debug flag for TDengine SDB
|
||||
# sdbDebugFlag 135
|
||||
|
||||
# debug flag for RPC
|
||||
# rpcDebugFlag 131
|
||||
|
||||
# debug flag for basic utils
|
||||
# debugFlag 131
|
||||
# debug flag for TAOS TIMER
|
||||
# tmrDebugFlag 131
|
||||
|
||||
# debug flag for TDengine client
|
||||
# cDebugFlag 131
|
||||
|
||||
# debug flag for JNI
|
||||
# jniDebugflag 131
|
||||
|
||||
# debug flag for ODBC
|
||||
# odbcDebugflag 131
|
||||
|
||||
# debug flag for storage
|
||||
# uDebugflag 131
|
||||
|
||||
# debug flag for http server
|
||||
# httpDebugFlag 131
|
||||
|
||||
# debug flag for mqtt
|
||||
# mqttDebugFlag 131
|
||||
|
||||
# debug flag for monitor
|
||||
# monitorDebugFlag 131
|
||||
|
||||
# debug flag for query
|
||||
# qDebugflag 131
|
||||
|
||||
# debug flag for http server
|
||||
# httpDebugFlag 131
|
||||
# tsdbDebugFlag 131
|
||||
|
||||
# debug flag for system monitor
|
||||
# monitorDebugFlag 131
|
||||
# Record the SQL through restful interface
|
||||
# httpEnableRecordSql 0
|
||||
|
||||
#debug flag for mqtt client
|
||||
# mqttDebugFlag 131
|
||||
# Record the SQL in taos client
|
||||
# tscEnableRecordSql 0
|
||||
|
||||
# debug flag for TAOS TIMER
|
||||
# tmrDebugFlag 131
|
||||
# if generate core file when service crash
|
||||
# enableCoreFile 1
|
||||
|
||||
# The maximum display width of binary and nchar fields in the shell. The parts exceeding this limit will be hidden
|
||||
# maxBinaryDisplayWidth 30
|
|
@ -227,12 +227,10 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_connectImp(JNIEn
|
|||
}
|
||||
|
||||
if (user == NULL) {
|
||||
jniTrace("jobj:%p, user is null, use tsDefaultUser", jobj);
|
||||
user = tsDefaultUser;
|
||||
jniTrace("jobj:%p, user is null, use default user %s", jobj, TSDB_DEFAULT_USER);
|
||||
}
|
||||
if (pass == NULL) {
|
||||
jniTrace("jobj:%p, pass is null, use tsDefaultPass", jobj);
|
||||
pass = tsDefaultPass;
|
||||
jniTrace("jobj:%p, pass is null, use default password", jobj);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -252,8 +250,8 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_connectImp(JNIEn
|
|||
|
||||
if (host != NULL) (*env)->ReleaseStringUTFChars(env, jhost, host);
|
||||
if (dbname != NULL) (*env)->ReleaseStringUTFChars(env, jdbName, dbname);
|
||||
if (user != NULL && user != tsDefaultUser) (*env)->ReleaseStringUTFChars(env, juser, user);
|
||||
if (pass != NULL && pass != tsDefaultPass) (*env)->ReleaseStringUTFChars(env, jpass, pass);
|
||||
if (user != NULL) (*env)->ReleaseStringUTFChars(env, juser, user);
|
||||
if (pass != NULL) (*env)->ReleaseStringUTFChars(env, jpass, pass);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -344,7 +342,7 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getResultSetImp(
|
|||
STscObj *pObj = pSql->pTscObj;
|
||||
|
||||
if (tscIsUpdateQuery(pSql)) {
|
||||
taos_free_result(pSql); // free result here
|
||||
// taos_free_result(pSql); // free result here
|
||||
jniTrace("jobj:%p, conn:%p, no resultset, %p", jobj, pObj, (void *)tres);
|
||||
return 0;
|
||||
} else {
|
||||
|
@ -385,7 +383,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getAffectedRowsIm
|
|||
}
|
||||
|
||||
jint ret = taos_affected_rows((SSqlObj *)res);
|
||||
jniTrace("jobj:%p, conn:%p, sql:%p, affect rows:%d", jobj, tscon, (SSqlObj*)res, ret);
|
||||
jniTrace("jobj:%p, conn:%p, sql:%p, res: %p, affect rows:%d", jobj, tscon, (void *)con, (void *)res, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -411,10 +409,10 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getSchemaMetaData
|
|||
// jobject arrayListObj = (*env)->NewObject(env, g_arrayListClass, g_arrayListConstructFp, "");
|
||||
|
||||
if (num_fields == 0) {
|
||||
jniError("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void*)res, num_fields);
|
||||
jniError("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void *)res, num_fields);
|
||||
return JNI_NUM_OF_FIELDS_0;
|
||||
} else {
|
||||
jniTrace("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void*)res, num_fields);
|
||||
jniTrace("jobj:%p, conn:%p, resultset:%p, fields size is %d", jobj, tscon, (void *)res, num_fields);
|
||||
for (int i = 0; i < num_fields; ++i) {
|
||||
jobject metadataObj = (*env)->NewObject(env, g_metadataClass, g_metadataConstructFp);
|
||||
(*env)->SetIntField(env, metadataObj, g_metadataColtypeField, fields[i].type);
|
||||
|
|
|
@ -413,13 +413,13 @@ static int32_t tscFlushTmpBufferImpl(tExtMemBuffer *pMemoryBuf, tOrderDescriptor
|
|||
}
|
||||
|
||||
int32_t tscFlushTmpBuffer(tExtMemBuffer *pMemoryBuf, tOrderDescriptor *pDesc, tFilePage *pPage, int32_t orderType) {
|
||||
int32_t ret = tscFlushTmpBufferImpl(pMemoryBuf, pDesc, pPage, orderType);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
int32_t ret = 0;
|
||||
if ((ret = tscFlushTmpBufferImpl(pMemoryBuf, pDesc, pPage, orderType)) != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!tExtMemBufferFlush(pMemoryBuf)) {
|
||||
return -1;
|
||||
if ((ret = tExtMemBufferFlush(pMemoryBuf)) != 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -440,9 +440,9 @@ int32_t saveToBuffer(tExtMemBuffer *pMemoryBuf, tOrderDescriptor *pDesc, tFilePa
|
|||
|
||||
// current buffer is full, need to flushed to disk
|
||||
assert(pPage->num == pModel->capacity);
|
||||
int32_t ret = tscFlushTmpBuffer(pMemoryBuf, pDesc, pPage, orderType);
|
||||
if (ret != 0) {
|
||||
return -1;
|
||||
int32_t code = tscFlushTmpBuffer(pMemoryBuf, pDesc, pPage, orderType);
|
||||
if (code != 0) {
|
||||
return code;
|
||||
}
|
||||
|
||||
int32_t remain = numOfRows - numOfRemainEntries;
|
||||
|
@ -458,8 +458,8 @@ int32_t saveToBuffer(tExtMemBuffer *pMemoryBuf, tOrderDescriptor *pDesc, tFilePa
|
|||
tColModelAppend(pModel, pPage, data, numOfRows - remain, numOfWriteElems, numOfRows);
|
||||
|
||||
if (pPage->num == pModel->capacity) {
|
||||
if (tscFlushTmpBuffer(pMemoryBuf, pDesc, pPage, orderType) != TSDB_CODE_SUCCESS) {
|
||||
return -1;
|
||||
if ((code = tscFlushTmpBuffer(pMemoryBuf, pDesc, pPage, orderType)) != TSDB_CODE_SUCCESS) {
|
||||
return code;
|
||||
}
|
||||
} else {
|
||||
pPage->num = numOfWriteElems;
|
||||
|
|
|
@ -2622,7 +2622,7 @@ static int32_t doExtractColumnFilterInfo(SQueryInfo* pQueryInfo, SColumnFilterIn
|
|||
tVariantDump(&pRight->val, (char*)&pColumnFilter->upperBndd, colType, false);
|
||||
} else { // TK_GT,TK_GE,TK_EQ,TK_NE are based on the pColumn->lowerBndd
|
||||
if (colType == TSDB_DATA_TYPE_BINARY) {
|
||||
pColumnFilter->pz = (int64_t)calloc(1, pRight->val.nLen + 1);
|
||||
pColumnFilter->pz = (int64_t)calloc(1, pRight->val.nLen + TSDB_NCHAR_SIZE);
|
||||
pColumnFilter->len = pRight->val.nLen;
|
||||
|
||||
tVariantDump(&pRight->val, (char*)pColumnFilter->pz, colType, false);
|
||||
|
|
|
@ -412,7 +412,6 @@ void tscKillSTableQuery(SSqlObj *pSql) {
|
|||
|
||||
for (int i = 0; i < pSql->numOfSubs; ++i) {
|
||||
SSqlObj *pSub = pSql->pSubs[i];
|
||||
|
||||
if (pSub == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -147,6 +147,8 @@ static void syncConnCallback(void *param, TAOS_RES *tres, int code) {
|
|||
|
||||
TAOS *taos_connect(const char *ip, const char *user, const char *pass, const char *db, uint16_t port) {
|
||||
tscTrace("try to create a connection to %s:%u, user:%s db:%s", ip, port, user, db);
|
||||
if (user == NULL) user = TSDB_DEFAULT_USER;
|
||||
if (pass == NULL) pass = TSDB_DEFAULT_PASS;
|
||||
|
||||
STscObj* pObj = NULL;
|
||||
SSqlObj *pSql = taosConnectImpl(ip, user, pass, db, port, syncConnCallback, NULL, (void**) &pObj);
|
||||
|
@ -607,7 +609,9 @@ int* taos_fetch_lengths(TAOS_RES *res) {
|
|||
char *taos_get_client_info() { return version; }
|
||||
|
||||
void taos_stop_query(TAOS_RES *res) {
|
||||
if (res == NULL) return;
|
||||
if (res == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
SSqlObj *pSql = (SSqlObj *)res;
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
|
|
@ -1492,7 +1492,7 @@ static void tscAbortFurtherRetryRetrieval(SRetrieveSupport *trsupport, TAOS_RES
|
|||
tscError("sub:%p failed to flush data to disk:reason:%s", tres, lpMsgBuf);
|
||||
LocalFree(lpMsgBuf);
|
||||
#else
|
||||
tscError("sub:%p failed to flush data to disk:reason:%s", tres, strerror(errno));
|
||||
tscError("sub:%p failed to flush data to disk, reason:%s", tres, tstrerror(code));
|
||||
#endif
|
||||
|
||||
SSqlObj* pParentSql = trsupport->pParentSqlObj;
|
||||
|
@ -1501,7 +1501,6 @@ static void tscAbortFurtherRetryRetrieval(SRetrieveSupport *trsupport, TAOS_RES
|
|||
trsupport->numOfRetry = MAX_NUM_OF_SUBQUERY_RETRY;
|
||||
|
||||
pthread_mutex_unlock(&trsupport->queryMutex);
|
||||
|
||||
tscHandleSubqueryError(trsupport, tres, pParentSql->res.code);
|
||||
}
|
||||
|
||||
|
@ -1630,10 +1629,9 @@ static void tscAllDataRetrievedFromDnode(SRetrieveSupport *trsupport, SSqlObj* p
|
|||
|
||||
// each result for a vnode is ordered as an independant list,
|
||||
// then used as an input of loser tree for disk-based merge routine
|
||||
int32_t ret = tscFlushTmpBuffer(trsupport->pExtMemBuffer[idx], pDesc, trsupport->localBuffer,
|
||||
pQueryInfo->groupbyExpr.orderType);
|
||||
if (ret != 0) { // set no disk space error info, and abort retry
|
||||
return tscAbortFurtherRetryRetrieval(trsupport, pSql, TSDB_CODE_TSC_NO_DISKSPACE);
|
||||
int32_t code = tscFlushTmpBuffer(trsupport->pExtMemBuffer[idx], pDesc, trsupport->localBuffer, pQueryInfo->groupbyExpr.orderType);
|
||||
if (code != 0) { // set no disk space error info, and abort retry
|
||||
return tscAbortFurtherRetryRetrieval(trsupport, pSql, code);
|
||||
}
|
||||
|
||||
int32_t remain = -1;
|
||||
|
@ -1704,7 +1702,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
|
|||
|
||||
tscTrace("%p sub:%p retrieve numOfRows:%" PRId64 " totalNumOfRows:%" PRIu64 " from ip:%s, orderOfSub:%d", pPObj, pSql,
|
||||
pRes->numOfRows, pState->numOfRetrievedRows, pSql->ipList.fqdn[pSql->ipList.inUse], idx);
|
||||
|
||||
|
||||
if (num > tsMaxNumOfOrderedResults && tscIsProjectionQueryOnSTable(pQueryInfo, 0)) {
|
||||
tscError("%p sub:%p num of OrderedRes is too many, max allowed:%" PRId32 " , current:%" PRId64,
|
||||
pPObj, pSql, tsMaxNumOfOrderedResults, num);
|
||||
|
@ -1729,7 +1727,7 @@ static void tscRetrieveFromDnodeCallBack(void *param, TAOS_RES *tres, int numOfR
|
|||
|
||||
int32_t ret = saveToBuffer(trsupport->pExtMemBuffer[idx], pDesc, trsupport->localBuffer, pRes->data,
|
||||
pRes->numOfRows, pQueryInfo->groupbyExpr.orderType);
|
||||
if (ret < 0) { // set no disk space error info, and abort retry
|
||||
if (ret != 0) { // set no disk space error info, and abort retry
|
||||
tscAbortFurtherRetryRetrieval(trsupport, tres, TSDB_CODE_TSC_NO_DISKSPACE);
|
||||
pthread_mutex_unlock(&trsupport->queryMutex);
|
||||
|
||||
|
@ -1988,6 +1986,7 @@ void tscBuildResFromSubqueries(SSqlObj *pSql) {
|
|||
SColumnIndex* pIndex = &pRes->pColumnIndex[i];
|
||||
SSqlRes *pRes1 = &pSql->pSubs[pIndex->tableIndex]->res;
|
||||
pRes->tsrow[i] = pRes1->tsrow[pIndex->columnIndex];
|
||||
pRes->length[i] = pRes1->length[pIndex->columnIndex];
|
||||
}
|
||||
|
||||
pRes->numOfClauseTotal++;
|
||||
|
|
|
@ -92,10 +92,6 @@ extern int32_t tsNumOfMnodes;
|
|||
extern int32_t tsMaxShellConns;
|
||||
extern int32_t tsMaxTables;
|
||||
|
||||
extern char tsDefaultDB[];
|
||||
extern char tsDefaultUser[];
|
||||
extern char tsDefaultPass[];
|
||||
|
||||
extern char tsMqttBrokerAddress[];
|
||||
extern char tsMqttBrokerClientId[];
|
||||
|
||||
|
|
|
@ -109,10 +109,6 @@ int32_t tsReplications = TSDB_DEFAULT_REPLICA_NUM;
|
|||
int16_t tsAffectedRowsMod = 0;
|
||||
int32_t tsNumOfMnodes = 3;
|
||||
int32_t tsMaxShellConns = 5000;
|
||||
|
||||
char tsDefaultDB[TSDB_DB_NAME_LEN] = {0};
|
||||
char tsDefaultUser[64] = "root";
|
||||
char tsDefaultPass[64] = "taosdata";
|
||||
int32_t tsMaxConnections = 5000;
|
||||
|
||||
int32_t tsBalanceInterval = 300; // seconds
|
||||
|
@ -713,37 +709,6 @@ static void doInitGlobalConfig() {
|
|||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||
taosInitConfigOption(cfg);
|
||||
|
||||
// login configs
|
||||
cfg.option = "defaultDB";
|
||||
cfg.ptr = tsDefaultDB;
|
||||
cfg.valType = TAOS_CFG_VTYPE_STRING;
|
||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT;
|
||||
cfg.minValue = 0;
|
||||
cfg.maxValue = 0;
|
||||
cfg.ptrLength = TSDB_DB_NAME_LEN - 1;
|
||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||
taosInitConfigOption(cfg);
|
||||
|
||||
cfg.option = "defaultUser";
|
||||
cfg.ptr = tsDefaultUser;
|
||||
cfg.valType = TAOS_CFG_VTYPE_STRING;
|
||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT;
|
||||
cfg.minValue = 0;
|
||||
cfg.maxValue = 0;
|
||||
cfg.ptrLength = TSDB_USER_LEN - 1;
|
||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||
taosInitConfigOption(cfg);
|
||||
|
||||
cfg.option = "defaultPass";
|
||||
cfg.ptr = tsDefaultPass;
|
||||
cfg.valType = TAOS_CFG_VTYPE_STRING;
|
||||
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_CLIENT | TSDB_CFG_CTYPE_B_NOT_PRINT;
|
||||
cfg.minValue = 0;
|
||||
cfg.maxValue = 0;
|
||||
cfg.ptrLength = TSDB_PASSWORD_LEN - 1;
|
||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||
taosInitConfigOption(cfg);
|
||||
|
||||
cfg.option = "mqttBrokerAddress";
|
||||
cfg.ptr = tsMqttBrokerAddress;
|
||||
cfg.valType = TAOS_CFG_VTYPE_STRING;
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" path="target/generated-sources/annotations">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="ignore_optional_problems" value="true"/>
|
||||
<attribute name="m2e-apt" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>taos-jdbcdriver</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -1,5 +0,0 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//src/main/java=GBK
|
||||
encoding//src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java=UTF-8
|
||||
encoding//src/main/resources=UTF-8
|
||||
encoding/<project>=UTF-8
|
|
@ -1,13 +0,0 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
@ -1,4 +0,0 @@
|
|||
activeProfiles=
|
||||
eclipse.preferences.version=1
|
||||
resolveWorkspaceProjects=true
|
||||
version=1
|
|
@ -1,105 +1,136 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.taosdata.jdbc</groupId>
|
||||
<artifactId>taos-jdbcdriver</artifactId>
|
||||
<version>1.0.3</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>JDBCDriver</name>
|
||||
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
||||
<description>TDengine JDBC Driver</description>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>GNU AFFERO GENERAL PUBLIC LICENSE Version 3</name>
|
||||
<url>https://github.com/taosdata/TDengine/blob/master/LICENSE</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:git://github.com/taosdata/TDengine.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:taosdata/TDengine.git</developerConnection>
|
||||
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>taosdata</name>
|
||||
<email>support@taosdata.com</email>
|
||||
<organization>https://www.taosdata.com/</organization>
|
||||
<organizationUrl>https://www.taosdata.com/</organizationUrl>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
|
||||
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
|
||||
|
||||
<commons-logging.version>1.1.2</commons-logging.version>
|
||||
<commons-lang3.version>3.5</commons-lang3.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>${commons-logging.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>*</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<!--<descriptor>src/main/assembly/assembly.xml</descriptor>-->
|
||||
<descriptor>src/main/assembly/assembly-jar.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${maven-compiler-plugin.version}</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<debug>true</debug>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.taosdata.jdbc</groupId>
|
||||
<artifactId>taos-jdbcdriver</artifactId>
|
||||
<version>1.0.3</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>JDBCDriver</name>
|
||||
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
||||
<description>TDengine JDBC Driver</description>
|
||||
<licenses>
|
||||
<license>
|
||||
<name>GNU AFFERO GENERAL PUBLIC LICENSE Version 3</name>
|
||||
<url>https://github.com/taosdata/TDengine/blob/master/LICENSE</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
<scm>
|
||||
<connection>scm:git:git://github.com/taosdata/TDengine.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:taosdata/TDengine.git</developerConnection>
|
||||
<url>https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc</url>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<developers>
|
||||
<developer>
|
||||
<name>taosdata</name>
|
||||
<email>support@taosdata.com</email>
|
||||
<organization>https://www.taosdata.com/</organization>
|
||||
<organizationUrl>https://www.taosdata.com/</organizationUrl>
|
||||
</developer>
|
||||
</developers>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
|
||||
<commons-logging.version>1.1.2</commons-logging.version>
|
||||
<commons-lang3.version>3.5</commons-lang3.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>${commons-logging.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>*</groupId>
|
||||
<artifactId>*</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.8.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/assembly-jar.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${maven-compiler-plugin.version}</version>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<debug>true</debug>
|
||||
<showDeprecation>true</showDeprecation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.12.4</version>
|
||||
<configuration>
|
||||
<testFailureIgnore>true</testFailureIgnore>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>0.8.3</version>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>com/**/*</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>pre-test</id>
|
||||
<goals>
|
||||
<goal>prepare-agent</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>post-test</id>
|
||||
<phase>test</phase>
|
||||
<goals>
|
||||
<goal>report</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
@ -527,8 +527,9 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
|
|||
|
||||
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
|
||||
throws SQLException {
|
||||
if (conn != null && !conn.isClosed()) {
|
||||
Statement stmt = conn.createStatement();
|
||||
Statement stmt = null;
|
||||
if (null != conn && !conn.isClosed()) {
|
||||
stmt = conn.createStatement();
|
||||
if (catalog == null || catalog.length() < 1) {
|
||||
catalog = conn.getCatalog();
|
||||
}
|
||||
|
|
|
@ -1,223 +0,0 @@
|
|||
/***************************************************************************
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
package com.taosdata.jdbc;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* TDengine error code and error message enumeration.
|
||||
*
|
||||
*/
|
||||
public enum TSDBError {
|
||||
|
||||
TSDB_CODE_SUCCESS(0, "success"),
|
||||
TSDB_CODE_ACTION_IN_PROGRESS(1, "in progress"),
|
||||
TSDB_CODE_LAST_SESSION_NOT_FINISHED(5, "last session not finished"),
|
||||
TSDB_CODE_INVALID_SESSION_ID(6, "invalid session ID"),
|
||||
TSDB_CODE_INVALID_TRAN_ID(7, "invalid tran ID"),
|
||||
TSDB_CODE_INVALID_MSG_TYPE(8, "invalid msg type"),
|
||||
TSDB_CODE_ALREADY_PROCESSED(9, "alredy processed"),
|
||||
TSDB_CODE_AUTH_FAILURE(10, "authentication failure"),
|
||||
TSDB_CODE_WRONG_MSG_SIZE(11, "wrong msg size"),
|
||||
TSDB_CODE_UNEXPECTED_RESPONSE(12, "unexpected response"),
|
||||
TSDB_CODE_INVALID_RESPONSE_TYPE(13, "invalid response type"),
|
||||
TSDB_CODE_NO_RESOURCE(14, "no resource"),
|
||||
TSDB_CODE_INVALID_TIME_STAMP(15, "invalid time stamp"),
|
||||
TSDB_CODE_MISMATCHED_METER_ID(16, "mismatched meter ID"),
|
||||
TSDB_CODE_ACTION_TRANS_NOT_FINISHED(17, "transcation not finished"),
|
||||
TSDB_CODE_ACTION_NOT_ONLINE(18, "not online"),
|
||||
TSDB_CODE_ACTION_SEND_FAILD(19, "send failed"),
|
||||
TSDB_CODE_NOT_ACTIVE_SESSION(20, "not active session"),
|
||||
TSDB_CODE_INSERT_FAILED(21, "insert failed"),
|
||||
TSDB_CODE_APP_ERROR(22, "App error"),
|
||||
TSDB_CODE_INVALID_IE(23, "invalid IE"),
|
||||
TSDB_CODE_INVALID_VALUE(24, "invalid value"),
|
||||
TSDB_CODE_REDIRECT(25, "service not available"),
|
||||
TSDB_CODE_ALREADY_THERE(26, "already there"),
|
||||
TSDB_CODE_INVALID_TABLE_ID(27, "invalid meter ID"),
|
||||
TSDB_CODE_INVALID_SQL(28, "invalid SQL"), // this message often comes with additional info which will vary based on the specific error situation
|
||||
TSDB_CODE_NETWORK_UNAVAIL(29, "failed to connect to server"),
|
||||
TSDB_CODE_INVALID_MSG_LEN(30, "invalid msg len"),
|
||||
TSDB_CODE_INVALID_DB(31, "invalid DB"),
|
||||
TSDB_CODE_INVALID_TABLE(32, "invalid table"),
|
||||
TSDB_CODE_DB_ALREADY_EXIST(33, "DB already there"),
|
||||
TSDB_CODE_TABLE_ALREADY_EXIST(34, "table already there"),
|
||||
TSDB_CODE_INVALID_USER(35, "invalid user name"),
|
||||
TSDB_CODE_INVALID_ACCT(36, "invalid acct name"),
|
||||
TSDB_CODE_INVALID_PASS(37, "invalid password"),
|
||||
TSDB_CODE_DB_NOT_SELECTED(38, "DB not selected"),
|
||||
TSDB_CODE_MEMORY_CORRUPTED(39, "memory corrupted"),
|
||||
TSDB_CODE_USER_ALREADY_EXIST(40, "user name exists"),
|
||||
TSDB_CODE_NO_RIGHTS(41, "not authorized"),
|
||||
TSDB_CODE_DISCONNECTED(42, "login disconnected), login again"),
|
||||
TSDB_CODE_NO_MASTER(43, "mgmt master node not available"),
|
||||
TSDB_CODE_NOT_CONFIGURED(44, "not configured"),
|
||||
TSDB_CODE_INVALID_OPTION(45, "invalid option"),
|
||||
TSDB_CODE_NODE_OFFLINE(46, "node offline"),
|
||||
TSDB_CODE_SYNC_REQUIRED(47, "sync required"),
|
||||
TSDB_CODE_NO_ENOUGH_DNODES(48, "more dnodes are needed"),
|
||||
TSDB_CODE_UNSYNCED(49, "node in unsynced state"),
|
||||
TSDB_CODE_TOO_SLOW(50, "too slow"),
|
||||
TSDB_CODE_OTHERS(51, "others"),
|
||||
TSDB_CODE_NO_REMOVE_MASTER(52, "can't remove dnode which is master"),
|
||||
TSDB_CODE_WRONG_SCHEMA(53, "wrong schema"),
|
||||
TSDB_CODE_NO_RESULT(54, "no results"),
|
||||
TSDB_CODE_TOO_MANY_USERS(55, "num of users execeed maxUsers"),
|
||||
TSDB_CODE_TOO_MANY_DATABSES(56, "num of databases execeed maxDbs"),
|
||||
TSDB_CODE_TOO_MANY_TABLES(57, "num of tables execeed maxTables"),
|
||||
TSDB_CODE_TOO_MANY_DNODES(58, "num of dnodes execeed maxDnodes"),
|
||||
TSDB_CODE_TOO_MANY_ACCTS(59, "num of accounts execeed maxAccts"),
|
||||
TSDB_CODE_ACCT_ALREADY_EXIST(60, "accout name exists"),
|
||||
TSDB_CODE_DNODE_ALREADY_EXIST(61, "dnode ip exists"),
|
||||
TSDB_CODE_SDB_ERROR(62, "sdb error"),
|
||||
TSDB_CODE_METRICMETA_EXPIRED(63, "metric meta expired"), // local cached metric-meta expired causes error in metric query
|
||||
TSDB_CODE_NOT_READY(64, "not ready"), // peer is not ready to process data
|
||||
TSDB_CODE_MAX_SESSIONS(65, "too many sessions on server"), // too many sessions
|
||||
TSDB_CODE_MAX_CONNECTIONS(66, "too many sessions from app"), // too many connections
|
||||
TSDB_CODE_SESSION_ALREADY_EXIST(67, "session to dest is already there"),
|
||||
TSDB_CODE_NO_QSUMMARY(68, "query list not there), please show again"),
|
||||
TSDB_CODE_SERV_OUT_OF_MEMORY(69, "server out of memory"),
|
||||
TSDB_CODE_INVALID_QHANDLE(70, "invalid query handle"),
|
||||
TSDB_CODE_RELATED_TABLES_EXIST(71, "tables related to metric exist"),
|
||||
TSDB_CODE_MONITOR_DB_FORBEIDDEN(72, "can't drop monitor database or tables"),
|
||||
TSDB_CODE_VG_COMMITLOG_INIT_FAILED(73, "commit log init failed"),
|
||||
TSDB_CODE_VG_INIT_FAILED(74, "vgroup init failed"),
|
||||
TSDB_CODE_DATA_ALREADY_IMPORTED(75, "data is already imported"),
|
||||
TSDB_CODE_OPS_NOT_SUPPORT(76, "not supported operation"),
|
||||
TSDB_CODE_INVALID_QUERY_ID(77, "invalid query id string"),
|
||||
TSDB_CODE_INVALID_STREAM_ID(78, "invalid stream id string"),
|
||||
TSDB_CODE_INVALID_CONNECTION(79, "invalid connection string"),
|
||||
TSDB_CODE_ACTION_NOT_BALANCED(80, "dnode not balanced"),
|
||||
TSDB_CODE_CLI_OUT_OF_MEMORY(81, "client out of memory"),
|
||||
TSDB_CODE_DATA_OVERFLOW(82, "data value overflow"),
|
||||
TSDB_CODE_QUERY_CANCELLED(83, "query cancelled"),
|
||||
TSDB_CODE_GRANT_POINT_LIMITED(84, "grant points limited"),
|
||||
TSDB_CODE_GRANT_EXPIRED(85, "grant expired"),
|
||||
TSDB_CODE_CLI_NO_DISKSPACE(86, "client no disk space"),
|
||||
TSDB_CODE_FILE_CORRUPTED(87, "DB file corrupted"),
|
||||
TSDB_CODE_INVALID_CLIENT_VERSION(88, "version of client and server not match");
|
||||
|
||||
private long errCode;
|
||||
private String errMessage;
|
||||
private static Map<Integer, String> errorCodeMap = new HashMap<>(86);
|
||||
static {
|
||||
errorCodeMap.put(0, "success");
|
||||
errorCodeMap.put(1, "in progress");
|
||||
errorCodeMap.put(5, "last session not finished");
|
||||
errorCodeMap.put(6, "invalid session ID");
|
||||
errorCodeMap.put(7, "invalid tran ID");
|
||||
errorCodeMap.put(8, "invalid msg type");
|
||||
errorCodeMap.put(9, "alredy processed");
|
||||
errorCodeMap.put(10, "authentication failure");
|
||||
errorCodeMap.put(11, "wrong msg size");
|
||||
errorCodeMap.put(12, "unexpected response");
|
||||
errorCodeMap.put(13, "invalid response type");
|
||||
errorCodeMap.put(14, "no resource");
|
||||
errorCodeMap.put(15, "invalid time stamp");
|
||||
errorCodeMap.put(16, "mismatched meter ID");
|
||||
errorCodeMap.put(17, "transcation not finished");
|
||||
errorCodeMap.put(18, "not online");
|
||||
errorCodeMap.put(19, "send failed");
|
||||
errorCodeMap.put(20, "not active session");
|
||||
errorCodeMap.put(21, "insert failed");
|
||||
errorCodeMap.put(22, "App error");
|
||||
errorCodeMap.put(23, "invalid IE");
|
||||
errorCodeMap.put(24, "invalid value");
|
||||
errorCodeMap.put(25, "service not available");
|
||||
errorCodeMap.put(26, "already there");
|
||||
errorCodeMap.put(27, "invalid meter ID");
|
||||
errorCodeMap.put(28, "invalid SQL"); // this message often comes with additional info which will vary based on the specific error situation
|
||||
errorCodeMap.put(29, "failed to connect to server");
|
||||
errorCodeMap.put(30, "invalid msg len");
|
||||
errorCodeMap.put(31, "invalid DB");
|
||||
errorCodeMap.put(32, "invalid table");
|
||||
errorCodeMap.put(33, "DB already there");
|
||||
errorCodeMap.put(34, "table already there");
|
||||
errorCodeMap.put(35, "invalid user name");
|
||||
errorCodeMap.put(36, "invalid acct name");
|
||||
errorCodeMap.put(37, "invalid password");
|
||||
errorCodeMap.put(38, "DB not selected");
|
||||
errorCodeMap.put(39, "memory corrupted");
|
||||
errorCodeMap.put(40, "user name exists");
|
||||
errorCodeMap.put(41, "not authorized");
|
||||
errorCodeMap.put(42, "login disconnected); login again");
|
||||
errorCodeMap.put(43, "mgmt master node not available");
|
||||
errorCodeMap.put(44, "not configured");
|
||||
errorCodeMap.put(45, "invalid option");
|
||||
errorCodeMap.put(46, "node offline");
|
||||
errorCodeMap.put(47, "sync required");
|
||||
errorCodeMap.put(48, "more dnodes are needed");
|
||||
errorCodeMap.put(49, "node in unsynced state");
|
||||
errorCodeMap.put(50, "too slow");
|
||||
errorCodeMap.put(51, "others");
|
||||
errorCodeMap.put(52, "can't remove dnode which is master");
|
||||
errorCodeMap.put(53, "wrong schema");
|
||||
errorCodeMap.put(54, "no results");
|
||||
errorCodeMap.put(55, "num of users execeed maxUsers");
|
||||
errorCodeMap.put(56, "num of databases execeed maxDbs");
|
||||
errorCodeMap.put(57, "num of tables execeed maxTables");
|
||||
errorCodeMap.put(58, "num of dnodes execeed maxDnodes");
|
||||
errorCodeMap.put(59, "num of accounts execeed maxAccts");
|
||||
errorCodeMap.put(60, "accout name exists");
|
||||
errorCodeMap.put(61, "dnode ip exists");
|
||||
errorCodeMap.put(62, "sdb error");
|
||||
errorCodeMap.put(63, "metric meta expired"); // local cached metric-meta expired causes error in metric query
|
||||
errorCodeMap.put(64, "not ready"); // peer is not ready to process data
|
||||
errorCodeMap.put(65, "too many sessions on server"); // too many sessions
|
||||
errorCodeMap.put(66, "too many sessions from app"); // too many connections
|
||||
errorCodeMap.put(67, "session to dest is already there");
|
||||
errorCodeMap.put(68, "query list not there); please show again");
|
||||
errorCodeMap.put(69, "server out of memory");
|
||||
errorCodeMap.put(70, "invalid query handle");
|
||||
errorCodeMap.put(71, "tables related to metric exist");
|
||||
errorCodeMap.put(72, "can't drop monitor database or tables");
|
||||
errorCodeMap.put(73, "commit log init failed");
|
||||
errorCodeMap.put(74, "vgroup init failed");
|
||||
errorCodeMap.put(75, "data is already imported");
|
||||
errorCodeMap.put(76, "not supported operation");
|
||||
errorCodeMap.put(77, "invalid query id string");
|
||||
errorCodeMap.put(78, "invalid stream id string");
|
||||
errorCodeMap.put(79, "invalid connection string");
|
||||
errorCodeMap.put(80, "dnode not balanced");
|
||||
errorCodeMap.put(81, "client out of memory");
|
||||
errorCodeMap.put(82, "data value overflow");
|
||||
errorCodeMap.put(83, "query cancelled");
|
||||
errorCodeMap.put(84, "grant points limited");
|
||||
errorCodeMap.put(85, "grant expired");
|
||||
errorCodeMap.put(86, "client no disk space");
|
||||
errorCodeMap.put(87, "DB file corrupted");
|
||||
errorCodeMap.put(88, "version of client and server not match");
|
||||
}
|
||||
|
||||
TSDBError(long code, String message) {
|
||||
this.errCode = code;
|
||||
this.errMessage = message;
|
||||
}
|
||||
|
||||
public long getErrCode() {
|
||||
return this.errCode;
|
||||
}
|
||||
|
||||
public String getErrMessage() {
|
||||
return this.errMessage;
|
||||
}
|
||||
|
||||
public static String getErrMessageByCode(long errCode) {
|
||||
return errorCodeMap.get(errCode);
|
||||
}
|
||||
|
||||
}
|
|
@ -19,7 +19,7 @@ import java.sql.SQLWarning;
|
|||
import java.util.List;
|
||||
|
||||
public class TSDBJNIConnector {
|
||||
static volatile Boolean isInitialized = false;
|
||||
private static volatile Boolean isInitialized = false;
|
||||
|
||||
static {
|
||||
System.loadLibrary("taos");
|
||||
|
@ -51,8 +51,6 @@ public class TSDBJNIConnector {
|
|||
|
||||
/**
|
||||
* Returns the status of last result set in current connection
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isResultsetClosed() {
|
||||
return this.isResultsetClosed;
|
||||
|
@ -112,7 +110,7 @@ public class TSDBJNIConnector {
|
|||
*
|
||||
* @throws SQLException
|
||||
*/
|
||||
public int executeQuery(String sql) throws SQLException {
|
||||
public long executeQuery(String sql) throws SQLException {
|
||||
if (!this.isResultsetClosed) {
|
||||
freeResultSet(taosResultSetPointer);
|
||||
}
|
||||
|
@ -127,7 +125,6 @@ public class TSDBJNIConnector {
|
|||
}
|
||||
int code = this.getErrCode(pSql);
|
||||
|
||||
affectedRows = code;
|
||||
if (code < 0) {
|
||||
affectedRows = -1;
|
||||
if (code == TSDBConstants.JNI_TDENGINE_ERROR) {
|
||||
|
@ -146,7 +143,7 @@ public class TSDBJNIConnector {
|
|||
if (taosResultSetPointer != TSDBConstants.JNI_NULL_POINTER) {
|
||||
isResultsetClosed = false;
|
||||
}
|
||||
return code;
|
||||
return pSql;
|
||||
}
|
||||
|
||||
private native long executeQueryImp(byte[] sqlBytes, long connection);
|
||||
|
@ -199,8 +196,6 @@ public class TSDBJNIConnector {
|
|||
/**
|
||||
* Close the open result set which is associated to the current connection. If the result set is already
|
||||
* closed, return 0 for success.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int freeResultSet() {
|
||||
int resCode = TSDBConstants.JNI_SUCCESS;
|
||||
|
@ -217,7 +212,7 @@ public class TSDBJNIConnector {
|
|||
/**
|
||||
* Get affected rows count
|
||||
*/
|
||||
public int getAffectedRows(Long pSql) {
|
||||
public int getAffectedRows(long pSql) {
|
||||
int affectedRows = this.affectedRows;
|
||||
if (affectedRows < 0) {
|
||||
affectedRows = this.getAffectedRowsImp(this.taos, pSql);
|
||||
|
@ -225,7 +220,7 @@ public class TSDBJNIConnector {
|
|||
return affectedRows;
|
||||
}
|
||||
|
||||
private native int getAffectedRowsImp(long connection, Long pSql);
|
||||
private native int getAffectedRowsImp(long connection, long pSql);
|
||||
|
||||
/**
|
||||
* Get schema metadata
|
||||
|
|
|
@ -51,13 +51,16 @@ public class TSDBStatement implements Statement {
|
|||
if (isClosed) {
|
||||
throw new SQLException("Invalid method call on a closed statement.");
|
||||
}
|
||||
this.connecter.executeQuery(sql);
|
||||
pSql = this.connecter.executeQuery(sql);
|
||||
|
||||
long resultSetPointer = this.connecter.getResultSet();
|
||||
|
||||
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||
this.connecter.freeResultSet(pSql);
|
||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||
} else if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
|
||||
// create/insert/update/del/alter
|
||||
this.connecter.freeResultSet(pSql);
|
||||
return null;
|
||||
} else {
|
||||
return new TSDBResultSet(this.connecter, resultSetPointer);
|
||||
|
@ -68,17 +71,18 @@ public class TSDBStatement implements Statement {
|
|||
if (isClosed) {
|
||||
throw new SQLException("Invalid method call on a closed statement.");
|
||||
}
|
||||
long res = this.connecter.executeQuery(sql);
|
||||
pSql = this.connecter.executeQuery(sql);
|
||||
long resultSetPointer = this.connecter.getResultSet();
|
||||
|
||||
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||
this.connecter.freeResultSet(res);
|
||||
this.connecter.freeResultSet(pSql);
|
||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||
} else if (resultSetPointer != TSDBConstants.JNI_NULL_POINTER) {
|
||||
this.connecter.freeResultSet();
|
||||
throw new SQLException("The executed SQL is not a DML or a DDL");
|
||||
} else {
|
||||
int num = this.connecter.getAffectedRows(res);
|
||||
int num = this.connecter.getAffectedRows(pSql);
|
||||
this.connecter.freeResultSet(pSql);
|
||||
return num;
|
||||
}
|
||||
}
|
||||
|
@ -146,16 +150,19 @@ public class TSDBStatement implements Statement {
|
|||
throw new SQLException("Invalid method call on a closed statement.");
|
||||
}
|
||||
boolean res = true;
|
||||
this.connecter.executeQuery(sql);
|
||||
pSql = this.connecter.executeQuery(sql);
|
||||
long resultSetPointer = this.connecter.getResultSet();
|
||||
|
||||
if (resultSetPointer == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||
this.connecter.freeResultSet(pSql);
|
||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||
} else if (resultSetPointer == TSDBConstants.JNI_NULL_POINTER) {
|
||||
// no result set is retrieved
|
||||
res = false;
|
||||
}
|
||||
return res;
|
||||
this.connecter.freeResultSet(pSql);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public ResultSet getResultSet() throws SQLException {
|
||||
|
|
|
@ -171,8 +171,7 @@ public class TSDBSubscribe {
|
|||
state = 1;
|
||||
|
||||
try {
|
||||
TSDBResultSet resultSet = consume(subscription);
|
||||
callBack.invoke(resultSet);
|
||||
callBack.invoke(consume(subscription));
|
||||
} catch (Exception e) {
|
||||
this.cancel();
|
||||
throw new RuntimeException(e);
|
||||
|
|
|
@ -3,10 +3,11 @@ import org.apache.commons.lang3.StringUtils;
|
|||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TestAsyncTSDBSubscribe {
|
||||
public static void main(String[] args) {
|
||||
public static void main(String[] args) throws SQLException {
|
||||
String usage = "java -cp taos-jdbcdriver-1.0.3_dev-dist.jar com.taosdata.jdbc.TSDBSubscribe -db dbName -topic topicName " +
|
||||
"-tname tableName -h host";
|
||||
if (args.length < 2) {
|
||||
|
@ -38,15 +39,18 @@ public class TestAsyncTSDBSubscribe {
|
|||
}
|
||||
|
||||
Connection connection = null;
|
||||
TSDBSubscribe subscribe = null;
|
||||
long subscribId = 0;
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata", properties);
|
||||
String rawSql = "select * from " + tName + ";";
|
||||
subscribe = ((TSDBConnection) connection).createSubscribe();
|
||||
TSDBSubscribe subscribe = ((TSDBConnection) connection).createSubscribe();
|
||||
subscribId = subscribe.subscribe(topic, rawSql, false, 1000, new CallBack("first"));
|
||||
long subscribId2 = subscribe.subscribe("test", rawSql, false, 1000, new CallBack("second"));
|
||||
int a = 0;
|
||||
|
@ -55,6 +59,9 @@ public class TestAsyncTSDBSubscribe {
|
|||
System.err.println("cancel subscribe");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if (null != connection && !connection.isClosed()) {
|
||||
connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,24 +6,31 @@ import java.util.Properties;
|
|||
|
||||
public class TestPreparedStatement {
|
||||
|
||||
public static void main(String[] args) {
|
||||
public static void main(String[] args) throws SQLException {
|
||||
Connection connection = null;
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "localhost");
|
||||
Connection connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
|
||||
String rawSql = "select * from test.log0601";
|
||||
// String[] params = new String[]{"ts", "c1"};
|
||||
PreparedStatement pstmt = (TSDBPreparedStatement) connection.prepareStatement(rawSql);
|
||||
ResultSet resSet = pstmt.executeQuery();
|
||||
while(resSet.next()) {
|
||||
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf("%d: %s\n", i, resSet.getString(i));
|
||||
System.out.printf("%d: %s \n", i, resSet.getString(i));
|
||||
}
|
||||
}
|
||||
resSet.close();
|
||||
pstmt.close();
|
||||
connection.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if (null != connection) {
|
||||
connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +1,33 @@
|
|||
import com.taosdata.jdbc.TSDBDriver;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DatabaseMetaData;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class TestTSDBDatabaseMetaData {
|
||||
|
||||
public static void main(String[] args) {
|
||||
public static void main(String[] args) throws SQLException {
|
||||
Connection connection = null;
|
||||
DatabaseMetaData dbMetaData = null;
|
||||
ResultSet resSet = null;
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "192.168.1.114");
|
||||
Connection connection = DriverManager.getConnection("jdbc:TAOS://192.168.1.114:0/?user=root&password=taosdata", properties);
|
||||
DatabaseMetaData dbMetaData = connection.getMetaData();
|
||||
ResultSet resSet = dbMetaData.getCatalogs();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "localhost");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/?user=root&password=taosdata", properties);
|
||||
dbMetaData = connection.getMetaData();
|
||||
resSet = dbMetaData.getCatalogs();
|
||||
while(resSet.next()) {
|
||||
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf("dbMetaData.getCatalogs(%d) = %s\n", i, resSet.getString(i));
|
||||
}
|
||||
}
|
||||
resSet.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
if (null != connection) {
|
||||
connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,16 +46,20 @@ public class TestTSDBSubscribe {
|
|||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + dbName + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
String rawSql = "select * from " + tName + ";";
|
||||
subscribe = ((TSDBConnection) connection).createSubscribe();
|
||||
subscribId = subscribe.subscribe(topic, rawSql, false, 1000);
|
||||
int a = 0;
|
||||
TSDBResultSet resSet = null;
|
||||
while (true) {
|
||||
Thread.sleep(900);
|
||||
TSDBResultSet resSet = subscribe.consume(subscribId);
|
||||
resSet = subscribe.consume(subscribId);
|
||||
|
||||
while (resSet.next()) {
|
||||
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class AsyncSubscribeTest {
|
||||
Connection connection = null;
|
||||
Statement statement = null;
|
||||
String dbName = "test";
|
||||
String tName = "t0";
|
||||
String host = "localhost";
|
||||
String topic = "test";
|
||||
long subscribId = 0;
|
||||
|
||||
@Before
|
||||
public void createDatabase() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
|
||||
long ts = System.currentTimeMillis();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
ts += i;
|
||||
statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subscribe() throws Exception {
|
||||
TSDBSubscribe subscribe = null;
|
||||
try {
|
||||
String rawSql = "select * from " + dbName + "." + tName + ";";
|
||||
System.out.println(rawSql);
|
||||
subscribe = ((TSDBConnection) connection).createSubscribe();
|
||||
subscribId = subscribe.subscribe(topic, rawSql, false, 1000, new CallBack("first"));
|
||||
|
||||
assertTrue(subscribId > 0);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Thread.sleep(2000);
|
||||
subscribe.unsubscribe(subscribId, true);
|
||||
}
|
||||
|
||||
private static class CallBack implements TSDBSubscribeCallBack {
|
||||
private String name = "";
|
||||
|
||||
public CallBack(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invoke(TSDBResultSet resultSet) {
|
||||
try {
|
||||
while (null != resultSet && resultSet.next()) {
|
||||
System.out.print("callback_" + name + ": ");
|
||||
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf(i + ": " + resultSet.getString(i) + "\t");
|
||||
}
|
||||
System.out.println();
|
||||
}
|
||||
resultSet.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() throws Exception {
|
||||
statement.executeQuery("drop database test");
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ConnectionTest {
|
||||
static Connection connection = null;
|
||||
static Statement statement = null;
|
||||
static String dbName = "test";
|
||||
static String stbName = "st";
|
||||
static String host = "localhost";
|
||||
|
||||
@Test
|
||||
public void testConnection() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
assertTrue(null != connection);
|
||||
statement = connection.createStatement();
|
||||
assertTrue(null != statement);
|
||||
|
||||
// try reconnect
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
try {
|
||||
statement.execute("create database if not exists " + dbName);
|
||||
} catch (SQLException e) {
|
||||
assert false : "create database error: " + e.getMessage();
|
||||
}
|
||||
|
||||
try {
|
||||
if (!connection.isClosed()) {
|
||||
if (!statement.isClosed()) {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
}
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
assert false : "close connection error: " + e.getMessage();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,245 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
public class DatabaseMetaDataTest {
|
||||
static Connection connection = null;
|
||||
static PreparedStatement statement = null;
|
||||
static String dbName = "test";
|
||||
static String tName = "t0";
|
||||
static String host = "localhost";
|
||||
|
||||
@BeforeClass
|
||||
public static void createConnection() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata",
|
||||
properties);
|
||||
|
||||
String sql = "drop database if exists " + dbName;
|
||||
statement = (TSDBPreparedStatement) connection.prepareStatement(sql);
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMetaDataTest() throws SQLException {
|
||||
|
||||
DatabaseMetaData databaseMetaData = connection.getMetaData();
|
||||
ResultSet resultSet = databaseMetaData.getTables(dbName, "t*", "t*", new String[]{"t"});
|
||||
while (resultSet.next()) {
|
||||
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf("%d: %s\n", i, resultSet.getString(i));
|
||||
}
|
||||
}
|
||||
resultSet.close();
|
||||
databaseMetaData.isWrapperFor(null);
|
||||
databaseMetaData.allProceduresAreCallable();
|
||||
databaseMetaData.allTablesAreSelectable();
|
||||
databaseMetaData.getURL();
|
||||
databaseMetaData.getUserName();
|
||||
databaseMetaData.isReadOnly();
|
||||
databaseMetaData.nullsAreSortedHigh();
|
||||
databaseMetaData.nullsAreSortedLow();
|
||||
databaseMetaData.nullsAreSortedAtStart();
|
||||
databaseMetaData.nullsAreSortedAtEnd();
|
||||
databaseMetaData.getDatabaseProductName();
|
||||
databaseMetaData.getDatabaseProductVersion();
|
||||
databaseMetaData.getDriverName();
|
||||
databaseMetaData.getDriverVersion();
|
||||
databaseMetaData.getDriverMajorVersion();
|
||||
databaseMetaData.getDriverMinorVersion();
|
||||
databaseMetaData.usesLocalFiles();
|
||||
databaseMetaData.usesLocalFilePerTable();
|
||||
databaseMetaData.supportsMixedCaseIdentifiers();
|
||||
databaseMetaData.storesUpperCaseIdentifiers();
|
||||
databaseMetaData.storesLowerCaseIdentifiers();
|
||||
databaseMetaData.storesMixedCaseIdentifiers();
|
||||
databaseMetaData.supportsMixedCaseQuotedIdentifiers();
|
||||
databaseMetaData.storesUpperCaseQuotedIdentifiers();
|
||||
databaseMetaData.storesLowerCaseQuotedIdentifiers();
|
||||
databaseMetaData.storesMixedCaseQuotedIdentifiers();
|
||||
databaseMetaData.getIdentifierQuoteString();
|
||||
databaseMetaData.getSQLKeywords();
|
||||
databaseMetaData.getNumericFunctions();
|
||||
databaseMetaData.getStringFunctions();
|
||||
databaseMetaData.getSystemFunctions();
|
||||
databaseMetaData.getTimeDateFunctions();
|
||||
databaseMetaData.getSearchStringEscape();
|
||||
databaseMetaData.getExtraNameCharacters();
|
||||
databaseMetaData.supportsAlterTableWithAddColumn();
|
||||
databaseMetaData.supportsAlterTableWithDropColumn();
|
||||
databaseMetaData.supportsColumnAliasing();
|
||||
databaseMetaData.nullPlusNonNullIsNull();
|
||||
databaseMetaData.supportsConvert();
|
||||
databaseMetaData.supportsConvert(0, 0);
|
||||
databaseMetaData.supportsTableCorrelationNames();
|
||||
databaseMetaData.supportsDifferentTableCorrelationNames();
|
||||
databaseMetaData.supportsExpressionsInOrderBy();
|
||||
databaseMetaData.supportsOrderByUnrelated();
|
||||
databaseMetaData.supportsGroupBy();
|
||||
databaseMetaData.supportsGroupByUnrelated();
|
||||
databaseMetaData.supportsGroupByBeyondSelect();
|
||||
databaseMetaData.supportsLikeEscapeClause();
|
||||
databaseMetaData.supportsMultipleResultSets();
|
||||
databaseMetaData.supportsMultipleTransactions();
|
||||
databaseMetaData.supportsNonNullableColumns();
|
||||
databaseMetaData.supportsMinimumSQLGrammar();
|
||||
databaseMetaData.supportsCoreSQLGrammar();
|
||||
databaseMetaData.supportsExtendedSQLGrammar();
|
||||
databaseMetaData.supportsANSI92EntryLevelSQL();
|
||||
databaseMetaData.supportsANSI92IntermediateSQL();
|
||||
databaseMetaData.supportsANSI92FullSQL();
|
||||
databaseMetaData.supportsIntegrityEnhancementFacility();
|
||||
databaseMetaData.supportsOuterJoins();
|
||||
databaseMetaData.supportsFullOuterJoins();
|
||||
databaseMetaData.supportsLimitedOuterJoins();
|
||||
databaseMetaData.getSchemaTerm();
|
||||
databaseMetaData.getProcedureTerm();
|
||||
databaseMetaData.getCatalogTerm();
|
||||
databaseMetaData.isCatalogAtStart();
|
||||
databaseMetaData.getCatalogSeparator();
|
||||
databaseMetaData.supportsSchemasInDataManipulation();
|
||||
databaseMetaData.supportsSchemasInProcedureCalls();
|
||||
databaseMetaData.supportsSchemasInTableDefinitions();
|
||||
databaseMetaData.supportsSchemasInIndexDefinitions();
|
||||
databaseMetaData.supportsSchemasInPrivilegeDefinitions();
|
||||
databaseMetaData.supportsCatalogsInDataManipulation();
|
||||
databaseMetaData.supportsCatalogsInProcedureCalls();
|
||||
databaseMetaData.supportsCatalogsInTableDefinitions();
|
||||
databaseMetaData.supportsCatalogsInIndexDefinitions();
|
||||
databaseMetaData.supportsCatalogsInPrivilegeDefinitions();
|
||||
databaseMetaData.supportsPositionedDelete();
|
||||
databaseMetaData.supportsPositionedUpdate();
|
||||
databaseMetaData.supportsSelectForUpdate();
|
||||
databaseMetaData.supportsStoredProcedures();
|
||||
databaseMetaData.supportsSubqueriesInComparisons();
|
||||
databaseMetaData.supportsSubqueriesInExists();
|
||||
databaseMetaData.supportsSubqueriesInIns();
|
||||
databaseMetaData.supportsSubqueriesInQuantifieds();
|
||||
databaseMetaData.supportsCorrelatedSubqueries();
|
||||
databaseMetaData.supportsUnion();
|
||||
databaseMetaData.supportsUnionAll();
|
||||
databaseMetaData.supportsOpenCursorsAcrossCommit();
|
||||
databaseMetaData.supportsOpenCursorsAcrossRollback();
|
||||
databaseMetaData.supportsOpenStatementsAcrossCommit();
|
||||
databaseMetaData.supportsOpenStatementsAcrossRollback();
|
||||
databaseMetaData.getMaxBinaryLiteralLength();
|
||||
databaseMetaData.getMaxCharLiteralLength();
|
||||
databaseMetaData.getMaxColumnNameLength();
|
||||
databaseMetaData.getMaxColumnsInGroupBy();
|
||||
databaseMetaData.getMaxColumnsInIndex();
|
||||
databaseMetaData.getMaxColumnsInOrderBy();
|
||||
databaseMetaData.getMaxColumnsInSelect();
|
||||
databaseMetaData.getMaxColumnsInTable();
|
||||
databaseMetaData.getMaxConnections();
|
||||
databaseMetaData.getMaxCursorNameLength();
|
||||
databaseMetaData.getMaxIndexLength();
|
||||
databaseMetaData.getMaxSchemaNameLength();
|
||||
databaseMetaData.getMaxProcedureNameLength();
|
||||
databaseMetaData.getMaxCatalogNameLength();
|
||||
databaseMetaData.getMaxRowSize();
|
||||
databaseMetaData.doesMaxRowSizeIncludeBlobs();
|
||||
databaseMetaData.getMaxStatementLength();
|
||||
databaseMetaData.getMaxStatements();
|
||||
databaseMetaData.getMaxTableNameLength();
|
||||
databaseMetaData.getMaxTablesInSelect();
|
||||
databaseMetaData.getMaxUserNameLength();
|
||||
databaseMetaData.getDefaultTransactionIsolation();
|
||||
databaseMetaData.supportsTransactions();
|
||||
databaseMetaData.supportsTransactionIsolationLevel(0);
|
||||
databaseMetaData.supportsDataDefinitionAndDataManipulationTransactions();
|
||||
databaseMetaData.supportsDataManipulationTransactionsOnly();
|
||||
databaseMetaData.dataDefinitionCausesTransactionCommit();
|
||||
databaseMetaData.dataDefinitionIgnoredInTransactions();
|
||||
try {
|
||||
databaseMetaData.getProcedures("", "", "");
|
||||
} catch (Exception e) {
|
||||
}
|
||||
try {
|
||||
databaseMetaData.getProcedureColumns("", "", "", "");
|
||||
} catch (Exception e) {
|
||||
}
|
||||
try {
|
||||
databaseMetaData.getTables("", "", "", new String[]{""});
|
||||
} catch (Exception e) {
|
||||
}
|
||||
databaseMetaData.getSchemas();
|
||||
databaseMetaData.getCatalogs();
|
||||
// databaseMetaData.getTableTypes();
|
||||
|
||||
databaseMetaData.getColumns("", "", "", "");
|
||||
databaseMetaData.getColumnPrivileges("", "", "", "");
|
||||
databaseMetaData.getTablePrivileges("", "", "");
|
||||
databaseMetaData.getBestRowIdentifier("", "", "", 0, false);
|
||||
databaseMetaData.getVersionColumns("", "", "");
|
||||
databaseMetaData.getPrimaryKeys("", "", "");
|
||||
databaseMetaData.getImportedKeys("", "", "");
|
||||
databaseMetaData.getExportedKeys("", "", "");
|
||||
databaseMetaData.getCrossReference("", "", "", "", "", "");
|
||||
databaseMetaData.getTypeInfo();
|
||||
databaseMetaData.getIndexInfo("", "", "", false, false);
|
||||
databaseMetaData.supportsResultSetType(0);
|
||||
databaseMetaData.supportsResultSetConcurrency(0, 0);
|
||||
databaseMetaData.ownUpdatesAreVisible(0);
|
||||
databaseMetaData.ownDeletesAreVisible(0);
|
||||
databaseMetaData.ownInsertsAreVisible(0);
|
||||
databaseMetaData.othersUpdatesAreVisible(0);
|
||||
databaseMetaData.othersDeletesAreVisible(0);
|
||||
databaseMetaData.othersInsertsAreVisible(0);
|
||||
databaseMetaData.updatesAreDetected(0);
|
||||
databaseMetaData.deletesAreDetected(0);
|
||||
databaseMetaData.insertsAreDetected(0);
|
||||
databaseMetaData.supportsBatchUpdates();
|
||||
databaseMetaData.getUDTs("", "", "", new int[]{0});
|
||||
databaseMetaData.getConnection();
|
||||
databaseMetaData.supportsSavepoints();
|
||||
databaseMetaData.supportsNamedParameters();
|
||||
databaseMetaData.supportsMultipleOpenResults();
|
||||
databaseMetaData.supportsGetGeneratedKeys();
|
||||
databaseMetaData.getSuperTypes("", "", "");
|
||||
databaseMetaData.getSuperTables("", "", "");
|
||||
databaseMetaData.getAttributes("", "", "", "");
|
||||
databaseMetaData.supportsResultSetHoldability(0);
|
||||
databaseMetaData.getResultSetHoldability();
|
||||
databaseMetaData.getDatabaseMajorVersion();
|
||||
databaseMetaData.getDatabaseMinorVersion();
|
||||
databaseMetaData.getJDBCMajorVersion();
|
||||
databaseMetaData.getJDBCMinorVersion();
|
||||
databaseMetaData.getSQLStateType();
|
||||
databaseMetaData.locatorsUpdateCopy();
|
||||
databaseMetaData.supportsStatementPooling();
|
||||
databaseMetaData.getRowIdLifetime();
|
||||
databaseMetaData.getSchemas("", "");
|
||||
databaseMetaData.supportsStoredFunctionsUsingCallSyntax();
|
||||
databaseMetaData.autoCommitFailureClosesAllResultSets();
|
||||
databaseMetaData.getClientInfoProperties();
|
||||
databaseMetaData.getFunctions("", "", "");
|
||||
databaseMetaData.getFunctionColumns("", "", "", "");
|
||||
databaseMetaData.getPseudoColumns("", "", "", "");
|
||||
databaseMetaData.generatedKeyAlwaysReturned();
|
||||
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void close() throws Exception {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class ImportTest {
|
||||
Connection connection = null;
|
||||
Statement statement = null;
|
||||
String dbName = "test";
|
||||
String tName = "t0";
|
||||
String host = "localhost";
|
||||
|
||||
@Before
|
||||
public void createDatabase() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("drop database if exists " + dbName);
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insertData() throws Exception {
|
||||
long ts = 1496732686000l;
|
||||
|
||||
for (int i = 0; i < 50; i++) {
|
||||
ts++;
|
||||
int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
|
||||
System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
|
||||
assertEquals(1, row);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectData() throws Exception {
|
||||
insertData();
|
||||
String sql = "select * from test.t0";
|
||||
ResultSet resSet = statement.executeQuery(sql);
|
||||
|
||||
while (resSet.next()) {
|
||||
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf(i + ": " + resSet.getString(i) + "\t");
|
||||
}
|
||||
}
|
||||
resSet.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importData() throws Exception {
|
||||
// 避免时间重复
|
||||
long ts = 1496732686000l;
|
||||
|
||||
StringBuilder sqlBuilder = new StringBuilder("insert into ").append(dbName).append(".").append(tName).append(" values ");
|
||||
|
||||
for (int i = 0; i < 50; i++) {
|
||||
int a = i / 5;
|
||||
long t = ts + a;
|
||||
sqlBuilder.append("(").append(t).append(",").append((100 + i)).append(",").append(i).append(") ");
|
||||
}
|
||||
System.out.println(sqlBuilder.toString());
|
||||
int rows = statement.executeUpdate(sqlBuilder.toString());
|
||||
System.out.println(rows);
|
||||
assertEquals(10, rows);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() throws Exception {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,201 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.Test;
|
||||
import org.junit.runners.MethodSorters;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@FixMethodOrder(MethodSorters.DEFAULT)
|
||||
public class PreparedStatementTest {
|
||||
static Connection connection = null;
|
||||
static PreparedStatement statement = null;
|
||||
static String dbName = "test";
|
||||
static String tName = "t0";
|
||||
static String host = "localhost";
|
||||
static ResultSet resSet = null;
|
||||
|
||||
@BeforeClass
|
||||
public static void createConnection() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata",
|
||||
properties);
|
||||
|
||||
String sql = "drop database if exists " + dbName;
|
||||
statement = (TSDBPreparedStatement) connection.prepareStatement(sql);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTableAndQuery() throws SQLException {
|
||||
long ts = System.currentTimeMillis();
|
||||
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + "(ts timestamp, k1 int)");
|
||||
statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
|
||||
|
||||
PreparedStatement selectStatement = connection.prepareStatement("select * from " + dbName + "." + tName);
|
||||
|
||||
ResultSet resultSet = selectStatement.executeQuery();
|
||||
assertTrue(null != resultSet);
|
||||
|
||||
boolean isClosed = statement.isClosed();
|
||||
assertEquals(false, isClosed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPreparedStatement() throws SQLException {
|
||||
long ts = System.currentTimeMillis() + 20000;
|
||||
PreparedStatement saveStatement = connection
|
||||
.prepareStatement("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
|
||||
|
||||
int affectedRows = saveStatement.executeUpdate();
|
||||
assertTrue(1 == affectedRows);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSavedPreparedStatement() throws SQLException {
|
||||
long ts = System.currentTimeMillis();
|
||||
|
||||
TSDBPreparedStatement saveStatement = (TSDBPreparedStatement) connection
|
||||
.prepareStatement("insert into " + dbName + "." + tName + " values (?, ?)");
|
||||
|
||||
saveStatement.setObject(1, ts + 10000);
|
||||
saveStatement.setObject(2, 3);
|
||||
int rows = saveStatement.executeUpdate();
|
||||
assertEquals(1, rows);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnsupport() {
|
||||
// if(null == resSet) {
|
||||
// return;
|
||||
// }
|
||||
TSDBPreparedStatement tsdbStatement = (TSDBPreparedStatement) statement;
|
||||
try {
|
||||
tsdbStatement.unwrap(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isWrapperFor(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMaxFieldSize();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setMaxFieldSize(0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setEscapeProcessing(true);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.cancel();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getWarnings();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.clearWarnings();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setCursorName(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMoreResults();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setFetchDirection(0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getFetchDirection();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetConcurrency();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetType();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getConnection();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMoreResults();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getGeneratedKeys();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, 0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, new int[]{0});
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, new String[]{"str1", "str2"});
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetHoldability();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setPoolable(true);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isPoolable();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.closeOnCompletion();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isCloseOnCompletion();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void close() throws Exception {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,829 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.sql.rowset.serial.SerialBlob;
|
||||
import javax.sql.rowset.serial.SerialClob;
|
||||
import java.sql.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ResultSetTest {
|
||||
static Connection connection = null;
|
||||
static Statement statement = null;
|
||||
static String dbName = "test";
|
||||
static String tName = "t0";
|
||||
static String host = "localhost";
|
||||
static ResultSet resSet = null;
|
||||
|
||||
@BeforeClass
|
||||
public static void createDatabaseAndTable() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
|
||||
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");
|
||||
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("drop database if exists " + dbName);
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName +
|
||||
" (ts timestamp, k1 int, k2 bigint, k3 float, k4 double, k5 binary(30), k6 smallint, k7 bool, k8 nchar(20))");
|
||||
|
||||
statement.executeQuery("use " + dbName);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testResultSet() {
|
||||
String sql = null;
|
||||
long ts = 1496732686000l;
|
||||
int v1 = 2147483600;
|
||||
long v2 = ts + 1000;
|
||||
float v3 = 3.1415926f;
|
||||
double v4 = 3.1415926535897;
|
||||
String v5 = "涛思数据,强~!";
|
||||
short v6 = 12;
|
||||
boolean v7 = false;
|
||||
String v8 = "TDengine is powerful";
|
||||
|
||||
sql = "insert into " + dbName + "." + tName + " values (" + ts + "," + v1 + "," + v2 + "," + v3 + "," + v4
|
||||
+ ",\"" + v5 + "\"," + v6 + "," + v7 + ",\"" + v8 + "\")";
|
||||
|
||||
try {
|
||||
statement.executeUpdate(sql);
|
||||
assertEquals(1, statement.getUpdateCount());
|
||||
} catch (SQLException e) {
|
||||
assert false : "insert error " + e.getMessage();
|
||||
}
|
||||
|
||||
try {
|
||||
statement.executeQuery("select * from " + dbName + "." + tName);
|
||||
resSet = statement.getResultSet();
|
||||
System.out.println(((TSDBResultSet) resSet).getRowData());
|
||||
while (resSet.next()) {
|
||||
assertEquals(ts, resSet.getLong(1));
|
||||
assertEquals(ts, resSet.getLong("ts"));
|
||||
|
||||
System.out.println(resSet.getTimestamp(1));
|
||||
|
||||
assertEquals(v1, resSet.getInt(2));
|
||||
assertEquals(v1, resSet.getInt("k1"));
|
||||
|
||||
assertEquals(v2, resSet.getLong(3));
|
||||
assertEquals(v2, resSet.getLong("k2"));
|
||||
|
||||
assertEquals(v3, resSet.getFloat(4), 7);
|
||||
assertEquals(v3, resSet.getFloat("k3"), 7);
|
||||
|
||||
assertEquals(v4, resSet.getDouble(5), 13);
|
||||
assertEquals(v4, resSet.getDouble("k4"), 13);
|
||||
|
||||
assertEquals(v5, resSet.getString(6));
|
||||
assertEquals(v5, resSet.getString("k5"));
|
||||
|
||||
assertEquals(v6, resSet.getShort(7));
|
||||
assertEquals(v6, resSet.getShort("k6"));
|
||||
|
||||
assertEquals(v7, resSet.getBoolean(8));
|
||||
assertEquals(v7, resSet.getBoolean("k7"));
|
||||
|
||||
assertEquals(v8, resSet.getString(9));
|
||||
assertEquals(v8, resSet.getString("k8"));
|
||||
|
||||
resSet.getBytes(9);
|
||||
resSet.getObject(6);
|
||||
resSet.getObject("k8");
|
||||
}
|
||||
if (!resSet.isClosed()) {
|
||||
resSet.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
assert false : "insert error " + e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnsupport() throws SQLException {
|
||||
statement.executeQuery("show databases");
|
||||
resSet = statement.getResultSet();
|
||||
try {
|
||||
resSet.unwrap(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.isWrapperFor(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getAsciiStream(0);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getUnicodeStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getBinaryStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getAsciiStream("");
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getUnicodeStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getBinaryStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getWarnings();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.clearWarnings();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getCursorName();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getCharacterStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getCharacterStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.isBeforeFirst();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.isAfterLast();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.isFirst();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.isLast();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.beforeFirst();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.afterLast();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.first();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.last();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.absolute(1);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.relative(1);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.previous();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.setFetchDirection(0);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getFetchDirection();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.setFetchSize(0);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getFetchSize();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getConcurrency();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.rowUpdated();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.rowInserted();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.rowDeleted();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNull(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBoolean(0, true);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateByte(0, (byte) 2);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateShort(0, (short) 1);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateInt(0, 0);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateLong(0, 0l);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateFloat(0, 3.14f);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateDouble(0, 3.1415);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBigDecimal(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateString(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBytes(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateDate(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateTime(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateTimestamp(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateObject(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateObject(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNull(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBoolean("", false);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateByte("", (byte) 1);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateShort("", (short) 1);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateInt("", 0);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateLong("", 0l);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateFloat("", 3.14f);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateDouble("", 3.1415);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBigDecimal(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateString(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBytes(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateDate(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateTime(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateTimestamp(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateObject(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateObject(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.insertRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.deleteRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.refreshRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.cancelRowUpdates();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.moveToInsertRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.moveToCurrentRow();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getStatement();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getObject(0, new HashMap<>());
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getRef(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getBlob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getClob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getArray(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getObject("", new HashMap<>());
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getRef(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getBlob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getClob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getArray(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getDate(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getDate(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getTime(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getTime(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getTimestamp(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getTimestamp(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getURL(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getURL(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateRef(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateRef(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBlob(0, new SerialBlob("".getBytes("UTF8")));
|
||||
} catch (Exception e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBlob("", new SerialBlob("".getBytes("UTF8")));
|
||||
} catch (Exception e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateClob("", new SerialClob("".toCharArray()));
|
||||
} catch (Exception e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateClob(0, new SerialClob("".toCharArray()));
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateArray(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateArray(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getRowId(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getRowId(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateRowId(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateRowId(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getHoldability();
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNString(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNString(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
|
||||
try {
|
||||
resSet.getNClob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getNClob(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getSQLXML(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getSQLXML(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateSQLXML(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateSQLXML(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getNCharacterStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.getNCharacterStream(null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
|
||||
try {
|
||||
resSet.updateNCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateNCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateAsciiStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateBinaryStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
try {
|
||||
resSet.updateCharacterStream(null, null);
|
||||
} catch (SQLException e) {
|
||||
assertTrue(e.getMessage().contains("this operation is NOT supported currently!"));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBatch() throws SQLException {
|
||||
String[] sqls = new String[]{"insert into test.t0 values (1496732686001,2147483600,1496732687000,3.1415925,3.1415926\n" +
|
||||
"535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")", "insert into test.t0 values (1496732686002,2147483600,1496732687000,3.1415925,3.1415926\n" +
|
||||
"535897,\"涛思数据,强~!\",12,12,\"TDengine is powerful\")"};
|
||||
for (String sql : sqls) {
|
||||
statement.addBatch(sql);
|
||||
}
|
||||
int[] res = statement.executeBatch();
|
||||
assertEquals(res.length, 2);
|
||||
statement.clearBatch();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void close() throws Exception {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class SelectTest {
|
||||
Connection connection = null;
|
||||
Statement statement = null;
|
||||
String dbName = "test";
|
||||
String tName = "t0";
|
||||
String host = "localhost";
|
||||
|
||||
@Before
|
||||
public void createDatabaseAndTable() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("drop database if exists " + dbName);
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectData() throws SQLException {
|
||||
long ts = 1496732686000l;
|
||||
|
||||
for (int i = 0; i < 50; i++) {
|
||||
ts++;
|
||||
int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
|
||||
System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
|
||||
assertEquals(1, row);
|
||||
}
|
||||
|
||||
String sql = "select * from " + dbName + "." + tName;
|
||||
ResultSet resSet = statement.executeQuery(sql);
|
||||
|
||||
int num = 0;
|
||||
while (resSet.next()) {
|
||||
num++;
|
||||
}
|
||||
resSet.close();
|
||||
|
||||
assertEquals(num, 50);
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() throws Exception {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.Test;
|
||||
import org.junit.runners.MethodSorters;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
public class StableTest {
|
||||
static Connection connection = null;
|
||||
static Statement statement = null;
|
||||
static String dbName = "test";
|
||||
static String stbName = "st";
|
||||
static String host = "localhost";
|
||||
|
||||
@BeforeClass
|
||||
public static void createDatabase() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeQuery("use " + dbName);
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void createStable() {
|
||||
String sql = "create table " + stbName + " (ts timestamp, v1 int, v2 int) tags (tg nchar(20)) ";
|
||||
|
||||
try {
|
||||
statement.executeUpdate(sql);
|
||||
} catch (SQLException e) {
|
||||
assert false : "error create stable" + e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void createTable() {
|
||||
String sql = "create table t1 using " + stbName + " tags (\"beijing\")";
|
||||
|
||||
try {
|
||||
statement.executeUpdate(sql);
|
||||
} catch (SQLException e) {
|
||||
assert false : "error create table" + e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void describeSTable() {
|
||||
createStable();
|
||||
String sql = "describe " + stbName;
|
||||
int num = 0;
|
||||
System.out.println("describe stable");
|
||||
try {
|
||||
ResultSet res = statement.executeQuery(sql);
|
||||
while (res.next()) {
|
||||
for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf("%d: %s\n", i, res.getString(i));
|
||||
}
|
||||
num++;
|
||||
}
|
||||
res.close();
|
||||
assertEquals(4, num);
|
||||
} catch (SQLException e) {
|
||||
assert false : "error describe stable" + e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void describeTable() {
|
||||
createTable();
|
||||
String sql = "describe t1";
|
||||
int num = 0;
|
||||
System.out.println("describe table");
|
||||
try {
|
||||
ResultSet res = statement.executeQuery(sql);
|
||||
while (res.next()) {
|
||||
for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf("%d: %s\n", i, res.getString(i));
|
||||
}
|
||||
num++;
|
||||
}
|
||||
res.close();
|
||||
assertEquals(4, num);
|
||||
} catch (SQLException e) {
|
||||
assert false : "error describe stable" + e.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// @Test
|
||||
public void validCreateSql() {
|
||||
String sql = "create table t2 using " + stbName + " tags (\"beijing\")";
|
||||
boolean valid = ((TSDBConnection) connection).getConnection().validateCreateTableSql(sql);
|
||||
assertEquals(true, valid);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void close() throws Exception {
|
||||
if (!statement.isClosed()) {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,174 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.*;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class StatementTest {
|
||||
static Connection connection = null;
|
||||
static Statement statement = null;
|
||||
static String dbName = "test";
|
||||
static String tName = "t0";
|
||||
static String host = "localhost";
|
||||
static ResultSet resSet = null;
|
||||
|
||||
@BeforeClass
|
||||
public static void createConnection() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("drop database if exists " + dbName);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createTableAndQuery() throws SQLException {
|
||||
long ts = System.currentTimeMillis();
|
||||
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + "(ts timestamp, k1 int)");
|
||||
statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
|
||||
statement.executeQuery("select * from " + dbName + "." + tName);
|
||||
ResultSet resultSet = statement.getResultSet();
|
||||
assertTrue(null != resultSet);
|
||||
|
||||
boolean isClosed = statement.isClosed();
|
||||
assertEquals(false, isClosed);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnsupport() {
|
||||
// if(null == resSet) {
|
||||
// return;
|
||||
// }
|
||||
TSDBStatement tsdbStatement = (TSDBStatement) statement;
|
||||
try {
|
||||
tsdbStatement.unwrap(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isWrapperFor(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMaxFieldSize();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setMaxFieldSize(0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setEscapeProcessing(true);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.cancel();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getWarnings();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.clearWarnings();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setCursorName(null);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMoreResults();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setFetchDirection(0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getFetchDirection();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetConcurrency();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetType();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getConnection();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getMoreResults();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getGeneratedKeys();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, 0);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, new int[]{0});
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.executeUpdate(null, new String[]{"str1", "str2"});
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.getResultSetHoldability();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.setPoolable(true);
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isPoolable();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.closeOnCompletion();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
try {
|
||||
tsdbStatement.isCloseOnCompletion();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void close() throws Exception {
|
||||
if (!statement.isClosed()) {
|
||||
statement.executeUpdate("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
package com.taosdata.jdbc;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Properties;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class SubscribeTest {
|
||||
Connection connection = null;
|
||||
Statement statement = null;
|
||||
String dbName = "test";
|
||||
String tName = "t0";
|
||||
String host = "localhost";
|
||||
String topic = "test";
|
||||
|
||||
@Before
|
||||
public void createDatabase() throws SQLException {
|
||||
try {
|
||||
Class.forName("com.taosdata.jdbc.TSDBDriver");
|
||||
} catch (ClassNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
|
||||
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");
|
||||
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/" + "?user=root&password=taosdata"
|
||||
, properties);
|
||||
|
||||
statement = connection.createStatement();
|
||||
statement.executeUpdate("create database if not exists " + dbName);
|
||||
statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
|
||||
long ts = System.currentTimeMillis();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
ts += i;
|
||||
statement.executeUpdate("insert into \" + dbName + \".\" + tName + \" values (" + ts + ", " + (100 + i) + ", " + i + ")");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subscribe() throws Exception {
|
||||
TSDBSubscribe subscribe = null;
|
||||
long subscribId = 0;
|
||||
try {
|
||||
|
||||
String rawSql = "select * from " + dbName + "." + tName + ";";
|
||||
System.out.println(rawSql);
|
||||
subscribe = ((TSDBConnection) connection).createSubscribe();
|
||||
subscribId = subscribe.subscribe(topic, rawSql, false, 1000);
|
||||
|
||||
assertTrue(subscribId > 0);
|
||||
|
||||
int a = 0;
|
||||
while (true) {
|
||||
Thread.sleep(900);
|
||||
TSDBResultSet resSet = subscribe.consume(subscribId);
|
||||
|
||||
while (resSet.next()) {
|
||||
for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
|
||||
System.out.printf(i + ": " + resSet.getString(i) + "\t");
|
||||
}
|
||||
System.out.println("\n======" + a + "==========");
|
||||
}
|
||||
resSet.close();
|
||||
a++;
|
||||
if (a >= 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (null != subscribe && 0 != subscribId) {
|
||||
subscribe.unsubscribe(subscribId, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@After
|
||||
public void close() throws Exception {
|
||||
statement.executeQuery("drop database " + dbName);
|
||||
statement.close();
|
||||
connection.close();
|
||||
Thread.sleep(10);
|
||||
}
|
||||
}
|
|
@ -48,8 +48,8 @@ int main(int argc, char *argv[]) {
|
|||
taosInitLog("cq.log", 100000, 10);
|
||||
|
||||
SCqCfg cqCfg;
|
||||
strcpy(cqCfg.user, "root");
|
||||
strcpy(cqCfg.pass, "taosdata");
|
||||
strcpy(cqCfg.user, TSDB_DEFAULT_USER);
|
||||
strcpy(cqCfg.pass, TSDB_DEFAULT_PASS);
|
||||
cqCfg.vgId = 2;
|
||||
cqCfg.cqWrite = writeToQueue;
|
||||
|
||||
|
|
|
@ -83,6 +83,9 @@ extern const int32_t TYPE_BYTES[11];
|
|||
#define TSDB_DATA_NULL_STR "NULL"
|
||||
#define TSDB_DATA_NULL_STR_L "null"
|
||||
|
||||
#define TSDB_DEFAULT_USER "root"
|
||||
#define TSDB_DEFAULT_PASS "taosdata"
|
||||
|
||||
#define TSDB_TRUE 1
|
||||
#define TSDB_FALSE 0
|
||||
#define TSDB_OK 0
|
||||
|
|
|
@ -56,11 +56,11 @@ TAOS *shellInit(SShellArguments *args) {
|
|||
if (args->is_use_passwd) {
|
||||
if (args->password == NULL) args->password = getpass("Enter password: ");
|
||||
} else {
|
||||
args->password = tsDefaultPass;
|
||||
args->password = TSDB_DEFAULT_PASS;
|
||||
}
|
||||
|
||||
if (args->user == NULL) {
|
||||
args->user = tsDefaultUser;
|
||||
args->user = TSDB_DEFAULT_USER;
|
||||
}
|
||||
|
||||
taos_init();
|
||||
|
@ -276,6 +276,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
|
|||
st = taosGetTimestampUs();
|
||||
|
||||
TAOS_RES* pSql = taos_query(con, command);
|
||||
result = pSql; // set it into the global variable
|
||||
|
||||
if (taos_errno(pSql)) {
|
||||
taos_error(pSql);
|
||||
return;
|
||||
|
@ -284,7 +286,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
|
|||
if (regex_match(command, "^\\s*use\\s+[a-zA-Z0-9_]+\\s*;\\s*$", REG_EXTENDED | REG_ICASE)) {
|
||||
fprintf(stdout, "Database changed.\n\n");
|
||||
fflush(stdout);
|
||||
|
||||
|
||||
result = NULL;
|
||||
taos_free_result(pSql);
|
||||
return;
|
||||
}
|
||||
|
@ -294,6 +297,7 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
|
|||
int error_no = 0;
|
||||
int numOfRows = shellDumpResult(pSql, fname, &error_no, printMode);
|
||||
if (numOfRows < 0) {
|
||||
result = NULL;
|
||||
taos_free_result(pSql);
|
||||
return;
|
||||
}
|
||||
|
@ -315,7 +319,8 @@ void shellRunCommandOnServer(TAOS *con, char command[]) {
|
|||
if (fname != NULL) {
|
||||
wordfree(&full_path);
|
||||
}
|
||||
|
||||
|
||||
result = NULL;
|
||||
taos_free_result(pSql);
|
||||
}
|
||||
|
||||
|
@ -419,8 +424,8 @@ static void dumpFieldToFile(FILE* fp, const char* val, TAOS_FIELD* field, int32_
|
|||
}
|
||||
}
|
||||
|
||||
static int dumpResultToFile(const char* fname, TAOS_RES* result) {
|
||||
TAOS_ROW row = taos_fetch_row(result);
|
||||
static int dumpResultToFile(const char* fname, TAOS_RES* tres) {
|
||||
TAOS_ROW row = taos_fetch_row(tres);
|
||||
if (row == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -441,9 +446,9 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) {
|
|||
|
||||
wordfree(&full_path);
|
||||
|
||||
int num_fields = taos_num_fields(result);
|
||||
TAOS_FIELD *fields = taos_fetch_fields(result);
|
||||
int precision = taos_result_precision(result);
|
||||
int num_fields = taos_num_fields(tres);
|
||||
TAOS_FIELD *fields = taos_fetch_fields(tres);
|
||||
int precision = taos_result_precision(tres);
|
||||
|
||||
for (int col = 0; col < num_fields; col++) {
|
||||
if (col > 0) {
|
||||
|
@ -455,7 +460,7 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) {
|
|||
|
||||
int numOfRows = 0;
|
||||
do {
|
||||
int32_t* length = taos_fetch_lengths(result);
|
||||
int32_t* length = taos_fetch_lengths(tres);
|
||||
for (int i = 0; i < num_fields; i++) {
|
||||
if (i > 0) {
|
||||
fputc(',', fp);
|
||||
|
@ -465,10 +470,13 @@ static int dumpResultToFile(const char* fname, TAOS_RES* result) {
|
|||
fputc('\n', fp);
|
||||
|
||||
numOfRows++;
|
||||
row = taos_fetch_row(result);
|
||||
row = taos_fetch_row(tres);
|
||||
} while( row != NULL);
|
||||
|
||||
result = NULL;
|
||||
taos_free_result(tres);
|
||||
fclose(fp);
|
||||
|
||||
return numOfRows;
|
||||
}
|
||||
|
||||
|
@ -769,8 +777,7 @@ void write_history() {
|
|||
|
||||
void taos_error(TAOS_RES *tres) {
|
||||
fprintf(stderr, "\nDB error: %s\n", taos_errstr(tres));
|
||||
|
||||
/* free local resouce: allocated memory/metric-meta refcnt */
|
||||
result = NULL;
|
||||
taos_free_result(tres);
|
||||
}
|
||||
|
||||
|
@ -845,9 +852,9 @@ void shellGetGrantInfo(void *con) {
|
|||
|
||||
char sql[] = "show grants";
|
||||
|
||||
result = taos_query(con, sql);
|
||||
TAOS_RES* tres = taos_query(con, sql);
|
||||
|
||||
int code = taos_errno(result);
|
||||
int code = taos_errno(tres);
|
||||
if (code != TSDB_CODE_SUCCESS) {
|
||||
if (code == TSDB_CODE_COM_OPS_NOT_SUPPORT) {
|
||||
fprintf(stdout, "Server is Community Edition, version is %s\n\n", taos_get_server_info(con));
|
||||
|
@ -857,18 +864,18 @@ void shellGetGrantInfo(void *con) {
|
|||
return;
|
||||
}
|
||||
|
||||
int num_fields = taos_field_count(result);
|
||||
int num_fields = taos_field_count(tres);
|
||||
if (num_fields == 0) {
|
||||
fprintf(stderr, "\nInvalid grant information.\n");
|
||||
exit(0);
|
||||
} else {
|
||||
if (result == NULL) {
|
||||
if (tres == NULL) {
|
||||
fprintf(stderr, "\nGrant information is null.\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
TAOS_FIELD *fields = taos_fetch_fields(result);
|
||||
TAOS_ROW row = taos_fetch_row(result);
|
||||
TAOS_FIELD *fields = taos_fetch_fields(tres);
|
||||
TAOS_ROW row = taos_fetch_row(tres);
|
||||
if (row == NULL) {
|
||||
fprintf(stderr, "\nFailed to get grant information from server. Abort.\n");
|
||||
exit(0);
|
||||
|
@ -888,8 +895,8 @@ void shellGetGrantInfo(void *con) {
|
|||
fprintf(stdout, "Server is Enterprise %s Edition, version is %s and will expire at %s.\n", serverVersion, taos_get_server_info(con), expiretime);
|
||||
}
|
||||
|
||||
taos_free_result(result);
|
||||
result = NULL;
|
||||
taos_free_result(tres);
|
||||
}
|
||||
|
||||
fprintf(stdout, "\n");
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
#include "os.h"
|
||||
#include "shell.h"
|
||||
#include "tsclient.h"
|
||||
|
||||
pthread_t pid;
|
||||
|
||||
|
@ -23,14 +22,6 @@ pthread_t pid;
|
|||
void interruptHandler(int signum) {
|
||||
#ifdef LINUX
|
||||
taos_stop_query(result);
|
||||
if (result != NULL) {
|
||||
/*
|
||||
* we need to free result in async model, in order to avoid free
|
||||
* results while the master thread is waiting for server response.
|
||||
*/
|
||||
tscQueueAsyncFreeResult(result);
|
||||
}
|
||||
|
||||
result = NULL;
|
||||
#else
|
||||
printf("\nReceive ctrl+c or other signal, quit shell.\n");
|
||||
|
|
|
@ -306,7 +306,7 @@ double getCurrentTime();
|
|||
void callBack(void *param, TAOS_RES *res, int code);
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
SDemoArguments arguments = {NULL, // host
|
||||
SDemoArguments arguments = { NULL, // host
|
||||
0, // port
|
||||
"root", // user
|
||||
"taosdata", // password
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#include "taosdef.h"
|
||||
#include "tutil.h"
|
||||
|
||||
#include "tglobal.h"
|
||||
|
||||
#define COMMAND_SIZE 65536
|
||||
#define DEFAULT_DUMP_FILE "taosdump.sql"
|
||||
|
||||
|
@ -293,7 +295,6 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
|||
static struct argp argp = {options, parse_opt, args_doc, doc};
|
||||
|
||||
TAOS *taos = NULL;
|
||||
TAOS_RES *result = NULL;
|
||||
char *command = NULL;
|
||||
char *lcommand = NULL;
|
||||
char *buffer = NULL;
|
||||
|
@ -324,7 +325,7 @@ void taosFreeDbInfos();
|
|||
int main(int argc, char *argv[]) {
|
||||
SDumpArguments arguments = {
|
||||
// connection option
|
||||
NULL, "root", "taosdata", 0,
|
||||
NULL, TSDB_DEFAULT_USER, TSDB_DEFAULT_PASS, 0,
|
||||
// output file
|
||||
DEFAULT_DUMP_FILE, DEFAULT_DUMP_FILE, NULL,
|
||||
// dump unit option
|
||||
|
@ -463,10 +464,10 @@ int taosDumpOut(SDumpArguments *arguments) {
|
|||
taosDumpCharset(fp);
|
||||
|
||||
sprintf(command, "show databases");
|
||||
result = taos_query(taos, command);
|
||||
TAOS_RES* result = taos_query(taos, command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(taos));
|
||||
fprintf(stderr, "failed to run command: %s, reason: %s\n", command, taos_errstr(result));
|
||||
taos_free_result(result);
|
||||
goto _exit_failure;
|
||||
}
|
||||
|
@ -502,7 +503,7 @@ int taosDumpOut(SDumpArguments *arguments) {
|
|||
}
|
||||
|
||||
strncpy(dbInfos[count]->name, (char *)row[TSDB_SHOW_DB_NAME_INDEX], fields[TSDB_SHOW_DB_NAME_INDEX].bytes);
|
||||
if (strcmp(arguments->user, "root") == 0) {
|
||||
if (strcmp(arguments->user, TSDB_DEFAULT_USER) == 0) {
|
||||
dbInfos[count]->replica = (int)(*((int16_t *)row[TSDB_SHOW_DB_REPLICA_INDEX]));
|
||||
dbInfos[count]->days = (int)(*((int16_t *)row[TSDB_SHOW_DB_DAYS_INDEX]));
|
||||
dbInfos[count]->keep = *((int *)row[TSDB_SHOW_DB_KEEP_INDEX]);
|
||||
|
@ -613,7 +614,7 @@ int taosDumpDb(SDbInfo *dbInfo, SDumpArguments *arguments, FILE *fp) {
|
|||
fprintf(fp, "USE %s\n\n", dbInfo->name);
|
||||
|
||||
sprintf(command, "show tables");
|
||||
result = taos_query(taos,command);
|
||||
TAOS_RES* result = taos_query(taos,command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result));
|
||||
|
@ -717,7 +718,7 @@ void taosDumpCreateMTableClause(STableDef *tableDes, char *metric, int numOfCols
|
|||
|
||||
sprintf(command, "select %s from %s limit 1", tableDes->cols[counter].field, tableDes->name);
|
||||
|
||||
result = taos_query(taos, command);
|
||||
TAOS_RES* result = taos_query(taos, command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result));
|
||||
|
@ -795,7 +796,7 @@ int taosGetTableDes(char *table, STableDef *tableDes) {
|
|||
|
||||
sprintf(command, "describe %s", table);
|
||||
|
||||
result = taos_query(taos, command);
|
||||
TAOS_RES* result = taos_query(taos, command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result));
|
||||
|
@ -875,7 +876,7 @@ int32_t taosDumpMetric(char *metric, SDumpArguments *arguments, FILE *fp) {
|
|||
tstrncpy(tableRecord.metric, metric, TSDB_TABLE_NAME_LEN);
|
||||
|
||||
sprintf(command, "select tbname from %s", metric);
|
||||
result = taos_query(taos, command);
|
||||
TAOS_RES* result = taos_query(taos, command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command %s, error: %s\n", command, taos_errstr(result));
|
||||
|
@ -928,7 +929,7 @@ int taosDumpTableData(FILE *fp, char *tbname, SDumpArguments *arguments) {
|
|||
sprintf(command, "select * from %s where _c0 >= %" PRId64 " and _c0 <= %" PRId64 " order by _c0 asc", tbname, arguments->start_time,
|
||||
arguments->end_time);
|
||||
|
||||
result = taos_query(taos, command);
|
||||
TAOS_RES* result = taos_query(taos, command);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0) {
|
||||
fprintf(stderr, "failed to run command %s, reason: %s\n", command, taos_errstr(result));
|
||||
|
@ -1177,9 +1178,13 @@ int taosDumpIn(SDumpArguments *arguments) {
|
|||
tcommand = command;
|
||||
}
|
||||
taosReplaceCtrlChar(tcommand);
|
||||
if (taos_query(taos, tcommand) == NULL)
|
||||
|
||||
TAOS_RES* result = taos_query(taos, tcommand);
|
||||
if (taos_errno(result) != 0){
|
||||
fprintf(stderr, "linenu: %" PRId64 " failed to run command %s reason:%s \ncontinue...\n", linenu, command,
|
||||
taos_errstr(taos));
|
||||
taos_errstr(result));
|
||||
taos_free_result(result);
|
||||
}
|
||||
|
||||
pstr = command;
|
||||
pstr[0] = '\0';
|
||||
|
@ -1225,12 +1230,12 @@ int taosDumpIn(SDumpArguments *arguments) {
|
|||
tcommand = command;
|
||||
}
|
||||
taosReplaceCtrlChar(tcommand);
|
||||
result = taos_query(taos, tcommand);
|
||||
TAOS_RES* result = taos_query(taos, tcommand);
|
||||
int32_t code = taos_errno(result);
|
||||
if (code != 0)
|
||||
{
|
||||
fprintf(stderr, "linenu:%" PRId64 " failed to run command %s reason: %s \ncontinue...\n", linenu, command,
|
||||
taos_errstr(taos));
|
||||
taos_errstr(result));
|
||||
}
|
||||
taos_free_result(result);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <argp.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -34,6 +35,36 @@ typedef struct {
|
|||
char *host[15];
|
||||
} info;
|
||||
|
||||
typedef struct Arguments {
|
||||
char * host;
|
||||
uint16_t port;
|
||||
uint16_t max_port;
|
||||
} SArguments;
|
||||
|
||||
static struct argp_option options[] = {
|
||||
{0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0},
|
||||
{0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6020.", 1},
|
||||
{0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}};
|
||||
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
|
||||
SArguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'h':
|
||||
arguments->host = arg;
|
||||
break;
|
||||
case 'p':
|
||||
arguments->port = atoi(arg);
|
||||
break;
|
||||
case 'm':
|
||||
arguments->max_port = atoi(arg);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = {options, parse_opt, 0, 0};
|
||||
|
||||
void *checkPort(void *sarg) {
|
||||
info *pinfo = (info *)sarg;
|
||||
int port = pinfo->port;
|
||||
|
@ -97,7 +128,7 @@ void *checkUPort(void *sarg) {
|
|||
|
||||
sprintf(sendbuf, "send msg port_%d by udp", port);
|
||||
|
||||
socklen_t sin_size = sizeof(*(struct sockaddr*)&serverAddr);
|
||||
socklen_t sin_size = sizeof(*(struct sockaddr *)&serverAddr);
|
||||
|
||||
sendto(clientSocket, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&serverAddr, (int)sin_size);
|
||||
|
||||
|
@ -113,14 +144,19 @@ void *checkUPort(void *sarg) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
int main() {
|
||||
int port = 6020;
|
||||
char *host = "127.0.0.1";
|
||||
int main(int argc, char *argv[]) {
|
||||
SArguments arguments = {"127.0.0.1", 6020, 6050};
|
||||
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
|
||||
printf("host: %s\tport: %d\tmax_port: %d\n", arguments.host, arguments.port, arguments.max_port);
|
||||
|
||||
int port = arguments.port;
|
||||
char *host = arguments.host;
|
||||
info *tinfo = malloc(sizeof(info));
|
||||
info *uinfo = malloc(sizeof(info));
|
||||
|
||||
for (size_t i = 0; i < 30; i++) {
|
||||
port++;
|
||||
for (; port < arguments.max_port; port++) {
|
||||
printf("For test: %s:%d\n", host, port);
|
||||
|
||||
*tinfo->host = host;
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <argp.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -34,6 +35,36 @@ typedef struct {
|
|||
int type; // 0: tcp, 1: udo, default: 0
|
||||
} info;
|
||||
|
||||
typedef struct Arguments {
|
||||
char * host;
|
||||
uint16_t port;
|
||||
uint16_t max_port;
|
||||
} SArguments;
|
||||
|
||||
static struct argp_option options[] = {
|
||||
{0, 'h', "host", 0, "The host to connect to TDEngine. Default is localhost.", 0},
|
||||
{0, 'p', "port", 0, "The TCP or UDP port number to use for the connection. Default is 6020.", 1},
|
||||
{0, 'm', "max port", 0, "The max TCP or UDP port number to use for the connection. Default is 6050.", 2}};
|
||||
|
||||
static error_t parse_opt(int key, char *arg, struct argp_state *state) {
|
||||
|
||||
SArguments *arguments = state->input;
|
||||
switch (key) {
|
||||
case 'h':
|
||||
arguments->host = arg;
|
||||
break;
|
||||
case 'p':
|
||||
arguments->port = atoi(arg);
|
||||
break;
|
||||
case 'm':
|
||||
arguments->max_port = atoi(arg);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct argp argp = {options, parse_opt, 0, 0};
|
||||
|
||||
static void *bindPort(void *sarg) {
|
||||
info *pinfo = (info *)sarg;
|
||||
int port = pinfo->port;
|
||||
|
@ -170,15 +201,21 @@ static void *bindUPort(void *sarg) {
|
|||
}
|
||||
|
||||
|
||||
int main() {
|
||||
int port = 6020;
|
||||
pthread_t *pids = malloc(60 * sizeof(pthread_t));
|
||||
info * infos = malloc(30 * sizeof(info));
|
||||
info * uinfos = malloc(30 * sizeof(info));
|
||||
int main(int argc, char *argv[]) {
|
||||
SArguments arguments = {"127.0.0.1", 6020, 6050};
|
||||
argp_parse(&argp, argc, argv, 0, 0, &arguments);
|
||||
int port = arguments.port;
|
||||
|
||||
for (size_t i = 0; i < 30; i++) {
|
||||
port++;
|
||||
int num = arguments.max_port - arguments.port;
|
||||
|
||||
if (num < 0) {
|
||||
num = 1;
|
||||
}
|
||||
pthread_t *pids = malloc(2 * num * sizeof(pthread_t));
|
||||
info * infos = malloc(num * sizeof(info));
|
||||
info * uinfos = malloc(num * sizeof(info));
|
||||
|
||||
for (size_t i = 0; i < num; i++) {
|
||||
info *pinfo = infos++;
|
||||
pinfo->port = port;
|
||||
|
||||
|
@ -191,14 +228,15 @@ int main() {
|
|||
info *uinfo = uinfos++;
|
||||
uinfo->port = port;
|
||||
uinfo->type = 1;
|
||||
if (pthread_create(pids + 30 + i, NULL, bindUPort, uinfo) != 0) //创建线程
|
||||
port++;
|
||||
if (pthread_create(pids + num + i, NULL, bindUPort, uinfo) != 0) //创建线程
|
||||
{ //创建线程失败
|
||||
printf("创建线程失败: %d.\n", port);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < 30; i++) {
|
||||
for (int i = 0; i < num; i++) {
|
||||
pthread_join(pids[i], NULL);
|
||||
pthread_join(pids[(10 + i)], NULL);
|
||||
pthread_join(pids[(num + i)], NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,66 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <unistd.h>
|
||||
#define SERVER_PORT 8000
|
||||
#define SIZE 200
|
||||
|
||||
int main() {
|
||||
struct sockaddr_in servaddr, cliaddr;
|
||||
socklen_t cliaddr_len;
|
||||
int client_sockfd;
|
||||
char buf[SIZE];
|
||||
char recvbuf[SIZE];
|
||||
|
||||
int i, n, flag = 0;
|
||||
|
||||
int len, iDataNum;
|
||||
|
||||
client_sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
bzero(&servaddr, sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
servaddr.sin_port = htons(SERVER_PORT);
|
||||
|
||||
if (connect(client_sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
|
||||
printf("Connected error..\n");
|
||||
return 0;
|
||||
}
|
||||
printf("Connected to server..\n");
|
||||
|
||||
/*循环的发送接收信息并打印接收信息(可以按需发送)--recv返回接收到的字节数,send返回发送的字节数*/
|
||||
while (1) {
|
||||
printf("Enter string to send:");
|
||||
scanf("%s", buf);
|
||||
if (!strcmp(buf, "quit")) {
|
||||
break;
|
||||
}
|
||||
len = (sizeof buf);
|
||||
|
||||
recvbuf[0] = '\0';
|
||||
|
||||
iDataNum = recv(client_sockfd, recvbuf, SIZE, 0);
|
||||
|
||||
recvbuf[iDataNum] = '\0';
|
||||
|
||||
printf("%s\n", recvbuf);
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||
*
|
||||
* This program is free software: you can use, redistribute, and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3
|
||||
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <unistd.h>
|
||||
#define SERVER_PORT 8000
|
||||
#define SIZE 200
|
||||
|
||||
int main() {
|
||||
struct sockaddr_in servaddr, cliaddr;
|
||||
socklen_t cliaddr_len;
|
||||
int listenfd, connfd;
|
||||
char buf[BUFSIZ];
|
||||
int i, n, flag = 0;
|
||||
|
||||
listenfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
bzero(&servaddr, sizeof(servaddr));
|
||||
servaddr.sin_family = AF_INET;
|
||||
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
servaddr.sin_port = htons(SERVER_PORT);
|
||||
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
|
||||
listen(listenfd, 20);
|
||||
|
||||
printf("Accepting connections..\n");
|
||||
while (1) {
|
||||
cliaddr_len = sizeof(cliaddr);
|
||||
connfd = accept(listenfd, (struct sockaddr *)&cliaddr,
|
||||
&cliaddr_len); //如果得不到客户端发来的消息,将会被阻塞,一直等到消息到来
|
||||
n = read(connfd, buf, SIZE); //如果n<=0,表示客户端已断开
|
||||
while (1) {
|
||||
if (n != 0) {
|
||||
for (i = 0; i < n; i++) printf("%c", buf[i]); //输出客户端发来的信息
|
||||
} else {
|
||||
printf("Client say close the connection..\n");
|
||||
break;
|
||||
}
|
||||
n = read(connfd, buf, SIZE);
|
||||
}
|
||||
close(connfd);
|
||||
}
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define SERVER_PORT 8888
|
||||
#define BUFF_LEN 512
|
||||
#define SERVER_IP "172.0.5.182"
|
||||
|
||||
void udp_msg_sender(int fd, struct sockaddr* dst) {}
|
||||
|
||||
/*
|
||||
client:
|
||||
socket-->sendto-->revcfrom-->close
|
||||
*/
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int client_fd;
|
||||
struct sockaddr_in ser_addr;
|
||||
|
||||
client_fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (client_fd < 0) {
|
||||
printf("create socket fail!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&ser_addr, 0, sizeof(ser_addr));
|
||||
ser_addr.sin_family = AF_INET;
|
||||
// ser_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
|
||||
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); //注意网络序转换
|
||||
ser_addr.sin_port = htons(SERVER_PORT); //注意网络序转换
|
||||
|
||||
socklen_t len;
|
||||
struct sockaddr_in src;
|
||||
while (1) {
|
||||
char buf[BUFF_LEN] = "TEST UDP MSG!\n";
|
||||
len = sizeof(*(struct sockaddr*)&ser_addr);
|
||||
printf("client:%s\n", buf); //打印自己发送的信息
|
||||
sendto(client_fd, buf, BUFF_LEN, 0, (struct sockaddr*)&ser_addr, len);
|
||||
memset(buf, 0, BUFF_LEN);
|
||||
recvfrom(client_fd, buf, BUFF_LEN, 0, (struct sockaddr*)&src, &len); //接收来自server的信息
|
||||
printf("server:%s\n", buf);
|
||||
sleep(1); //一秒发送一次消息
|
||||
}
|
||||
|
||||
close(client_fd);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
#include <netinet/in.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#define SERVER_PORT 8888
|
||||
#define BUFF_LEN 1024
|
||||
|
||||
void handle_udp_msg(int fd) {
|
||||
char buf[BUFF_LEN]; //接收缓冲区,1024字节
|
||||
socklen_t len;
|
||||
int count;
|
||||
struct sockaddr_in clent_addr; // clent_addr用于记录发送方的地址信息
|
||||
while (1) {
|
||||
memset(buf, 0, BUFF_LEN);
|
||||
len = sizeof(clent_addr);
|
||||
count =
|
||||
recvfrom(fd, buf, BUFF_LEN, 0, (struct sockaddr*)&clent_addr, &len); // recvfrom是拥塞函数,没有数据就一直拥塞
|
||||
if (count == -1) {
|
||||
printf("recieve data fail!\n");
|
||||
return;
|
||||
}
|
||||
printf("client:%s\n", buf); //打印client发过来的信息
|
||||
memset(buf, 0, BUFF_LEN);
|
||||
sprintf(buf, "I have recieved %d bytes data!\n", count); //回复client
|
||||
printf("server:%s\n", buf); //打印自己发送的信息给
|
||||
sendto(fd, buf, BUFF_LEN, 0, (struct sockaddr*)&clent_addr,
|
||||
len); //发送信息给client,注意使用了clent_addr结构体指针
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
server:
|
||||
socket-->bind-->recvfrom-->sendto-->close
|
||||
*/
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int server_fd, ret;
|
||||
struct sockaddr_in ser_addr;
|
||||
|
||||
server_fd = socket(AF_INET, SOCK_DGRAM, 0); // AF_INET:IPV4;SOCK_DGRAM:UDP
|
||||
if (server_fd < 0) {
|
||||
printf("create socket fail!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&ser_addr, 0, sizeof(ser_addr));
|
||||
ser_addr.sin_family = AF_INET;
|
||||
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP地址,需要进行网络序转换,INADDR_ANY:本地地址
|
||||
ser_addr.sin_port = htons(SERVER_PORT); //端口号,需要网络序转换
|
||||
|
||||
ret = bind(server_fd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));
|
||||
if (ret < 0) {
|
||||
printf("socket bind fail!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
handle_udp_msg(server_fd); //处理接收到的数据
|
||||
|
||||
close(server_fd);
|
||||
return 0;
|
||||
}
|
|
@ -29,21 +29,28 @@ struct SAcctObj;
|
|||
struct SUserObj;
|
||||
struct SMnodeObj;
|
||||
|
||||
/*
|
||||
struct define notes:
|
||||
1. The first field must be the xxxxId field or name field , e.g. 'int32_t dnodeId', 'int32_t mnodeId', 'char name[]', 'char user[]', ...
|
||||
2. From the dnodeId field to the updataEnd field, these information will be falled disc;
|
||||
3. The fields behind the updataEnd field can be changed;
|
||||
*/
|
||||
|
||||
typedef struct SDnodeObj {
|
||||
int32_t dnodeId;
|
||||
int32_t openVnodes;
|
||||
int64_t createdTime;
|
||||
int32_t totalVnodes; // from dnode status msg, config information
|
||||
int32_t customScore; // config by user
|
||||
uint32_t lastAccess;
|
||||
uint16_t numOfCores; // from dnode status msg
|
||||
uint16_t dnodePort;
|
||||
char dnodeFqdn[TSDB_FQDN_LEN];
|
||||
char dnodeEp[TSDB_EP_LEN];
|
||||
int64_t createdTime;
|
||||
uint32_t lastAccess;
|
||||
int32_t openVnodes;
|
||||
int32_t totalVnodes; // from dnode status msg, config information
|
||||
int32_t customScore; // config by user
|
||||
uint16_t numOfCores; // from dnode status msg
|
||||
int8_t alternativeRole; // from dnode status msg, 0-any, 1-mgmt, 2-dnode
|
||||
int8_t status; // set in balance function
|
||||
int8_t isMgmt;
|
||||
int8_t reserved[15];
|
||||
int8_t reserved0[14];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
uint32_t moduleStatus;
|
||||
|
@ -54,15 +61,18 @@ typedef struct SDnodeObj {
|
|||
int16_t cpuAvgUsage; // calc from sys.cpu
|
||||
int16_t memoryAvgUsage; // calc from sys.mem
|
||||
int16_t bandwidthUsage; // calc from sys.band
|
||||
int8_t reserved1[2];
|
||||
} SDnodeObj;
|
||||
|
||||
typedef struct SMnodeObj {
|
||||
int32_t mnodeId;
|
||||
int8_t reserved0[4];
|
||||
int64_t createdTime;
|
||||
int8_t reserved[14];
|
||||
int8_t reserved1[7];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
int8_t role;
|
||||
int8_t reserved2[3];
|
||||
} SMnodeObj;
|
||||
|
||||
typedef struct STableObj {
|
||||
|
@ -71,34 +81,37 @@ typedef struct STableObj {
|
|||
} STableObj;
|
||||
|
||||
typedef struct SSuperTableObj {
|
||||
STableObj info;
|
||||
STableObj info;
|
||||
int8_t reserved0[3]; // for fill struct STableObj to 4byte align
|
||||
int32_t sversion;
|
||||
uint64_t uid;
|
||||
int64_t createdTime;
|
||||
int32_t sversion;
|
||||
int32_t tversion;
|
||||
int32_t numOfColumns;
|
||||
int32_t numOfTags;
|
||||
int8_t reserved[15];
|
||||
int8_t reserved1[3];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
int32_t numOfTables;
|
||||
int16_t nextColId;
|
||||
SSchema * schema;
|
||||
void * vgHash;
|
||||
int16_t nextColId;
|
||||
int8_t reserved2[6];
|
||||
} SSuperTableObj;
|
||||
|
||||
typedef struct {
|
||||
STableObj info;
|
||||
STableObj info;
|
||||
int8_t reserved0[3]; // for fill struct STableObj to 4byte align
|
||||
int32_t sversion; //used by normal table
|
||||
uint64_t uid;
|
||||
uint64_t suid;
|
||||
int64_t createdTime;
|
||||
int32_t sversion; //used by normal table
|
||||
int32_t numOfColumns; //used by normal table
|
||||
int32_t sid;
|
||||
int32_t vgId;
|
||||
uint64_t suid;
|
||||
int32_t sqlLen;
|
||||
int8_t reserved[1];
|
||||
int8_t updateEnd[1];
|
||||
int8_t reserved1[1];
|
||||
int16_t nextColId; //used by normal table
|
||||
int32_t refCount;
|
||||
char* sql; //used by normal table
|
||||
|
@ -115,23 +128,24 @@ typedef struct {
|
|||
|
||||
typedef struct SVgObj {
|
||||
uint32_t vgId;
|
||||
char dbName[TSDB_DB_NAME_LEN];
|
||||
int64_t createdTime;
|
||||
SVnodeGid vnodeGid[TSDB_MAX_REPLICA];
|
||||
int32_t numOfVnodes;
|
||||
int64_t createdTime;
|
||||
int32_t lbDnodeId;
|
||||
int32_t lbTime;
|
||||
char dbName[TSDB_DB_NAME_LEN];
|
||||
int8_t inUse;
|
||||
int8_t accessState;
|
||||
int8_t reserved[12];
|
||||
int8_t reserved0[5];
|
||||
SVnodeGid vnodeGid[TSDB_MAX_REPLICA];
|
||||
int8_t reserved1[7];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
struct SVgObj *prev, *next;
|
||||
struct SDbObj *pDb;
|
||||
int32_t numOfTables;
|
||||
int64_t totalStorage;
|
||||
int64_t compStorage;
|
||||
int64_t pointsWritten;
|
||||
struct SVgObj *prev, *next;
|
||||
struct SDbObj *pDb;
|
||||
void * idPool;
|
||||
SChildTableObj **tableList;
|
||||
} SVgObj;
|
||||
|
@ -151,17 +165,18 @@ typedef struct {
|
|||
int8_t compression;
|
||||
int8_t walLevel;
|
||||
int8_t replications;
|
||||
int8_t reserved[16];
|
||||
int8_t reserved[12];
|
||||
} SDbCfg;
|
||||
|
||||
typedef struct SDbObj {
|
||||
char name[TSDB_ACCT_LEN + TSDB_DB_NAME_LEN];
|
||||
int8_t reserved0[4];
|
||||
char acct[TSDB_USER_LEN];
|
||||
int64_t createdTime;
|
||||
int32_t cfgVersion;
|
||||
SDbCfg cfg;
|
||||
int8_t status;
|
||||
int8_t reserved[14];
|
||||
int8_t reserved1[14];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
int32_t numOfVgroups;
|
||||
|
@ -186,13 +201,6 @@ typedef struct SUserObj {
|
|||
} SUserObj;
|
||||
|
||||
typedef struct {
|
||||
int32_t numOfUsers;
|
||||
int32_t numOfDbs;
|
||||
int32_t numOfTimeSeries;
|
||||
int32_t numOfPointsPerSecond;
|
||||
int32_t numOfConns;
|
||||
int32_t numOfQueries;
|
||||
int32_t numOfStreams;
|
||||
int64_t totalStorage; // Total storage wrtten from this account
|
||||
int64_t compStorage; // Compressed storage on disk
|
||||
int64_t queryTime;
|
||||
|
@ -200,34 +208,44 @@ typedef struct {
|
|||
int64_t inblound;
|
||||
int64_t outbound;
|
||||
int64_t sKey;
|
||||
int32_t numOfUsers;
|
||||
int32_t numOfDbs;
|
||||
int32_t numOfTimeSeries;
|
||||
int32_t numOfPointsPerSecond;
|
||||
int32_t numOfConns;
|
||||
int32_t numOfQueries;
|
||||
int32_t numOfStreams;
|
||||
int8_t accessState; // Checked by mgmt heartbeat message
|
||||
int8_t reserved[3];
|
||||
} SAcctInfo;
|
||||
|
||||
typedef struct SAcctObj {
|
||||
char user[TSDB_USER_LEN];
|
||||
char pass[TSDB_KEY_LEN];
|
||||
SAcctCfg cfg;
|
||||
int32_t acctId;
|
||||
int64_t createdTime;
|
||||
int32_t acctId;
|
||||
int8_t status;
|
||||
int8_t reserved[14];
|
||||
int8_t reserved0[10];
|
||||
int8_t updateEnd[1];
|
||||
int32_t refCount;
|
||||
SAcctInfo acctInfo;
|
||||
int32_t refCount;
|
||||
int8_t reserved1[4];
|
||||
pthread_mutex_t mutex;
|
||||
} SAcctObj;
|
||||
|
||||
typedef struct {
|
||||
int8_t type;
|
||||
int32_t index;
|
||||
char db[TSDB_DB_NAME_LEN];
|
||||
void * pIter;
|
||||
int8_t type;
|
||||
int16_t numOfColumns;
|
||||
int32_t index;
|
||||
int32_t rowSize;
|
||||
int32_t numOfRows;
|
||||
int32_t numOfReads;
|
||||
void * pIter;
|
||||
int16_t offset[TSDB_MAX_COLUMNS];
|
||||
int16_t bytes[TSDB_MAX_COLUMNS];
|
||||
int32_t numOfReads;
|
||||
int8_t reserved0[2];
|
||||
uint16_t payloadLen;
|
||||
char payload[];
|
||||
} SShowObj;
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#include "mnodeSdb.h"
|
||||
#include "mnodeUser.h"
|
||||
|
||||
#include "tglobal.h"
|
||||
|
||||
void * tsAcctSdb = NULL;
|
||||
static int32_t tsAcctUpdateSize;
|
||||
static int32_t mnodeCreateRootAcct();
|
||||
|
@ -174,8 +176,8 @@ static int32_t mnodeCreateRootAcct() {
|
|||
|
||||
SAcctObj *pAcct = malloc(sizeof(SAcctObj));
|
||||
memset(pAcct, 0, sizeof(SAcctObj));
|
||||
strcpy(pAcct->user, "root");
|
||||
taosEncryptPass((uint8_t*)"taosdata", strlen("taosdata"), pAcct->pass);
|
||||
strcpy(pAcct->user, TSDB_DEFAULT_USER);
|
||||
taosEncryptPass((uint8_t *)TSDB_DEFAULT_PASS, strlen(TSDB_DEFAULT_PASS), pAcct->pass);
|
||||
pAcct->cfg = (SAcctCfg){
|
||||
.maxUsers = 10,
|
||||
.maxDbs = 64,
|
||||
|
@ -207,4 +209,4 @@ int32_t acctInit() { return TSDB_CODE_SUCCESS; }
|
|||
void acctCleanUp() {}
|
||||
int32_t acctCheck(void *pAcct, EAcctGrantType type) { return TSDB_CODE_SUCCESS; }
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -478,7 +478,7 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn
|
|||
cols++;
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pShow->bytes[cols] = 4;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
||||
|
@ -490,7 +490,7 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn
|
|||
#endif
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pShow->bytes[cols] = 2;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_SMALLINT;
|
||||
|
@ -514,7 +514,7 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn
|
|||
cols++;
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pShow->bytes[cols] = 4;
|
||||
pSchema[cols].type = TSDB_DATA_TYPE_INT;
|
||||
|
@ -628,7 +628,7 @@ static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void
|
|||
cols++;
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
*(int32_t *)pWrite = pDb->numOfVgroups;
|
||||
|
@ -638,7 +638,7 @@ static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void
|
|||
#endif
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
*(int16_t *)pWrite = pDb->cfg.replications;
|
||||
|
@ -659,7 +659,7 @@ static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void
|
|||
cols++;
|
||||
|
||||
#ifndef __CLOUD_VERSION__
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
#endif
|
||||
pWrite = data + pShow->offset[cols] * rows + pShow->bytes[cols] * numOfRows;
|
||||
*(int32_t *)pWrite = pDb->cfg.maxTables; // table num can be created should minus 1
|
||||
|
|
|
@ -254,7 +254,7 @@ static int32_t mnodeProcessCfgDnodeMsg(SMnodeMsg *pMsg) {
|
|||
// TODO temporary disabled for compiling: strcpy(pCmCfgDnode->ep, pCmCfgDnode->ep);
|
||||
}
|
||||
|
||||
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||
if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
||||
|
@ -480,7 +480,7 @@ static int32_t mnodeDropDnodeByEp(char *ep, SMnodeMsg *pMsg) {
|
|||
static int32_t mnodeProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
|
||||
SCMCreateDnodeMsg *pCreate = pMsg->rpcMsg.pCont;
|
||||
|
||||
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||
if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
} else {
|
||||
return mnodeCreateDnode(pCreate->ep, pMsg);
|
||||
|
@ -490,7 +490,7 @@ static int32_t mnodeProcessCreateDnodeMsg(SMnodeMsg *pMsg) {
|
|||
static int32_t mnodeProcessDropDnodeMsg(SMnodeMsg *pMsg) {
|
||||
SCMDropDnodeMsg *pDrop = pMsg->rpcMsg.pCont;
|
||||
|
||||
if (strcmp(pMsg->pUser->user, "root") != 0) {
|
||||
if (strcmp(pMsg->pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
} else {
|
||||
return mnodeDropDnodeByEp(pDrop->ep, pMsg);
|
||||
|
@ -501,7 +501,7 @@ static int32_t mnodeGetDnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
|
|||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
if (strcmp(pUser->pAcct->user, "root") != 0) {
|
||||
if (strcmp(pUser->pAcct->user, TSDB_DEFAULT_USER) != 0) {
|
||||
mnodeDecUserRef(pUser);
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
@ -630,7 +630,7 @@ static int32_t mnodeGetModuleMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
|
|||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
if (strcmp(pUser->user, "root") != 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
mnodeDecUserRef(pUser);
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
@ -740,7 +740,7 @@ static int32_t mnodeGetConfigMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *p
|
|||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
if (strcmp(pUser->user, "root") != 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
mnodeDecUserRef(pUser);
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
@ -827,7 +827,7 @@ static int32_t mnodeGetVnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
|
|||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
if (strcmp(pUser->user, "root") != 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) {
|
||||
mnodeDecUserRef(pUser);
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#include "mnodeShow.h"
|
||||
#include "mnodeUser.h"
|
||||
|
||||
#include "tglobal.h"
|
||||
|
||||
static void * tsMnodeSdb = NULL;
|
||||
static int32_t tsMnodeUpdateSize = 0;
|
||||
static SRpcIpSet tsMnodeIpSetForShell;
|
||||
|
@ -333,7 +335,7 @@ static int32_t mnodeGetMnodeMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pC
|
|||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
|
||||
if (strcmp(pUser->pAcct->user, "root") != 0) {
|
||||
if (strcmp(pUser->pAcct->user, TSDB_DEFAULT_USER) != 0) {
|
||||
mnodeDecUserRef(pUser);
|
||||
return TSDB_CODE_MND_NO_RIGHTS;
|
||||
}
|
||||
|
|
|
@ -169,7 +169,7 @@ static void *mnodeGetNextConn(SHashMutableIterator *pIter, SConnObj **pConn) {
|
|||
static int32_t mnodeGetConnsMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -294,7 +294,7 @@ int32_t mnodeSaveQueryStreamList(SConnObj *pConn, SCMHeartBeatMsg *pHBMsg) {
|
|||
static int32_t mnodeGetQueryMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -403,7 +403,7 @@ static int32_t mnodeRetrieveQueries(SShowObj *pShow, char *data, int32_t rows, v
|
|||
static int32_t mnodeGetStreamMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn) {
|
||||
SUserObj *pUser = mnodeGetUserFromConn(pConn);
|
||||
if (pUser == NULL) return 0;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
int32_t cols = 0;
|
||||
SSchema *pSchema = pMeta->schema;
|
||||
|
@ -531,7 +531,7 @@ static int32_t mnodeRetrieveStreams(SShowObj *pShow, char *data, int32_t rows, v
|
|||
|
||||
static int32_t mnodeProcessKillQueryMsg(SMnodeMsg *pMsg) {
|
||||
SUserObj *pUser = pMsg->pUser;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
SCMKillQueryMsg *pKill = pMsg->rpcMsg.pCont;
|
||||
mPrint("kill query msg is received, queryId:%s", pKill->queryId);
|
||||
|
@ -561,7 +561,7 @@ static int32_t mnodeProcessKillQueryMsg(SMnodeMsg *pMsg) {
|
|||
|
||||
static int32_t mnodeProcessKillStreamMsg(SMnodeMsg *pMsg) {
|
||||
SUserObj *pUser = pMsg->pUser;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
SCMKillQueryMsg *pKill = pMsg->rpcMsg.pCont;
|
||||
mPrint("kill stream msg is received, streamId:%s", pKill->queryId);
|
||||
|
@ -591,7 +591,7 @@ static int32_t mnodeProcessKillStreamMsg(SMnodeMsg *pMsg) {
|
|||
|
||||
static int32_t mnodeProcessKillConnectionMsg(SMnodeMsg *pMsg) {
|
||||
SUserObj *pUser = pMsg->pUser;
|
||||
if (strcmp(pUser->user, "root") != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) != 0) return TSDB_CODE_MND_NO_RIGHTS;
|
||||
|
||||
SCMKillConnMsg *pKill = pMsg->rpcMsg.pCont;
|
||||
SConnObj * pConn = taosCacheAcquireByName(tsMnodeConnCache, pKill->queryId);
|
||||
|
|
|
@ -105,10 +105,10 @@ static int32_t mnodeUserActionRestored() {
|
|||
int32_t numOfRows = sdbGetNumOfRows(tsUserSdb);
|
||||
if (numOfRows <= 0 && dnodeIsFirstDeploy()) {
|
||||
mPrint("dnode first deploy, create root user");
|
||||
SAcctObj *pAcct = mnodeGetAcct("root");
|
||||
mnodeCreateUser(pAcct, "root", "taosdata", NULL);
|
||||
SAcctObj *pAcct = mnodeGetAcct(TSDB_DEFAULT_USER);
|
||||
mnodeCreateUser(pAcct, TSDB_DEFAULT_USER, TSDB_DEFAULT_PASS, NULL);
|
||||
mnodeCreateUser(pAcct, "monitor", tsInternalPass, NULL);
|
||||
mnodeCreateUser(pAcct, "_root", tsInternalPass, NULL);
|
||||
mnodeCreateUser(pAcct, "_"TSDB_DEFAULT_USER, tsInternalPass, NULL);
|
||||
mnodeDecAcctRef(pAcct);
|
||||
}
|
||||
|
||||
|
@ -222,7 +222,7 @@ int32_t mnodeCreateUser(SAcctObj *pAcct, char *name, char *pass, void *pMsg) {
|
|||
pUser->createdTime = taosGetTimestampMs();
|
||||
pUser->superAuth = 0;
|
||||
pUser->writeAuth = 1;
|
||||
if (strcmp(pUser->user, "root") == 0 || strcmp(pUser->user, pUser->acct) == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0 || strcmp(pUser->user, pUser->acct) == 0) {
|
||||
pUser->superAuth = 1;
|
||||
}
|
||||
|
||||
|
@ -404,12 +404,12 @@ static int32_t mnodeProcessAlterUserMsg(SMnodeMsg *pMsg) {
|
|||
|
||||
if ((pAlter->flag & TSDB_ALTER_USER_PASSWD) != 0) {
|
||||
bool hasRight = false;
|
||||
if (strcmp(pOperUser->user, "root") == 0) {
|
||||
if (strcmp(pOperUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = true;
|
||||
} else if (strcmp(pUser->user, pOperUser->user) == 0) {
|
||||
hasRight = true;
|
||||
} else if (pOperUser->superAuth) {
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = false;
|
||||
} else if (strcmp(pOperUser->acct, pUser->acct) != 0) {
|
||||
hasRight = false;
|
||||
|
@ -429,16 +429,16 @@ static int32_t mnodeProcessAlterUserMsg(SMnodeMsg *pMsg) {
|
|||
} else if ((pAlter->flag & TSDB_ALTER_USER_PRIVILEGES) != 0) {
|
||||
bool hasRight = false;
|
||||
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = false;
|
||||
} else if (strcmp(pUser->user, pUser->acct) == 0) {
|
||||
hasRight = false;
|
||||
} else if (strcmp(pOperUser->user, "root") == 0) {
|
||||
} else if (strcmp(pOperUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = true;
|
||||
} else if (strcmp(pUser->user, pOperUser->user) == 0) {
|
||||
hasRight = false;
|
||||
} else if (pOperUser->superAuth) {
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = false;
|
||||
} else if (strcmp(pOperUser->acct, pUser->acct) != 0) {
|
||||
hasRight = false;
|
||||
|
@ -492,9 +492,9 @@ static int32_t mnodeProcessDropUserMsg(SMnodeMsg *pMsg) {
|
|||
}
|
||||
|
||||
bool hasRight = false;
|
||||
if (strcmp(pUser->user, "root") == 0) {
|
||||
if (strcmp(pUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = false;
|
||||
} else if (strcmp(pOperUser->user, "root") == 0) {
|
||||
} else if (strcmp(pOperUser->user, TSDB_DEFAULT_USER) == 0) {
|
||||
hasRight = true;
|
||||
} else if (strcmp(pUser->user, pOperUser->user) == 0) {
|
||||
hasRight = false;
|
||||
|
|
|
@ -177,8 +177,8 @@ static void dnodeBuildMonitorSql(char *sql, int32_t cmd) {
|
|||
") tags (acctId binary(%d))",
|
||||
tsMonitorDbName, TSDB_USER_LEN);
|
||||
} else if (cmd == MONITOR_CMD_CREATE_TB_ACCT_ROOT) {
|
||||
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, "root",
|
||||
tsMonitorDbName, "root");
|
||||
snprintf(sql, SQL_LENGTH, "create table if not exists %s.acct_%s using %s.acct tags('%s')", tsMonitorDbName, TSDB_DEFAULT_USER,
|
||||
tsMonitorDbName, TSDB_DEFAULT_USER);
|
||||
} else if (cmd == MONITOR_CMD_CREATE_TB_SLOWQUERY) {
|
||||
snprintf(sql, SQL_LENGTH,
|
||||
"create table if not exists %s.slowquery(ts timestamp, username "
|
||||
|
|
|
@ -149,7 +149,7 @@ int16_t tExtMemBufferPut(tExtMemBuffer *pMemBuffer, void *data, int32_t numOfRow
|
|||
* @param pMemBuffer
|
||||
* @return
|
||||
*/
|
||||
bool tExtMemBufferFlush(tExtMemBuffer *pMemBuffer);
|
||||
int32_t tExtMemBufferFlush(tExtMemBuffer *pMemBuffer);
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
|
@ -245,30 +245,29 @@ static void tExtMemBufferClearFlushoutInfo(tExtMemBuffer *pMemBuffer) {
|
|||
memset(pFileMeta->flushoutData.pFlushoutInfo, 0, sizeof(tFlushoutInfo) * pFileMeta->flushoutData.nAllocSize);
|
||||
}
|
||||
|
||||
bool tExtMemBufferFlush(tExtMemBuffer *pMemBuffer) {
|
||||
int32_t tExtMemBufferFlush(tExtMemBuffer *pMemBuffer) {
|
||||
int32_t ret = 0;
|
||||
if (pMemBuffer->numOfTotalElems == 0) {
|
||||
return true;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pMemBuffer->file == NULL) {
|
||||
if ((pMemBuffer->file = fopen(pMemBuffer->path, "wb+")) == NULL) {
|
||||
return false;
|
||||
ret = TAOS_SYSTEM_ERROR(errno);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* all data has been flushed to disk, ignore flush operation */
|
||||
if (pMemBuffer->numOfElemsInBuffer == 0) {
|
||||
return true;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ret = true;
|
||||
|
||||
tFilePagesItem *first = pMemBuffer->pHead;
|
||||
|
||||
while (first != NULL) {
|
||||
size_t retVal = fwrite((char *)&(first->item), pMemBuffer->pageSize, 1, pMemBuffer->file);
|
||||
if (retVal <= 0) { // failed to write to buffer, may be not enough space
|
||||
ret = false;
|
||||
ret = TAOS_SYSTEM_ERROR(errno);
|
||||
}
|
||||
|
||||
pMemBuffer->fileMeta.numOfElemsInFile += first->item.num;
|
||||
|
|
|
@ -327,7 +327,7 @@ void taosPrintLog(const char *flags, int32_t dflag, const char *format, ...) {
|
|||
curTime = timeSecs.tv_sec;
|
||||
ptm = localtime_r(&curTime, &Tm);
|
||||
|
||||
len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d 0x%" PRId64 " ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,
|
||||
len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d 0x%" PRIx64 " ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,
|
||||
ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec, taosGetPthreadId());
|
||||
len += sprintf(buffer + len, "%s", flags);
|
||||
|
||||
|
@ -414,7 +414,7 @@ void taosPrintLongString(const char *flags, int32_t dflag, const char *format, .
|
|||
curTime = timeSecs.tv_sec;
|
||||
ptm = localtime_r(&curTime, &Tm);
|
||||
|
||||
len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d 0x%" PRId64 " ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,
|
||||
len = sprintf(buffer, "%02d/%02d %02d:%02d:%02d.%06d 0x%" PRIx64 " ", ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour,
|
||||
ptm->tm_min, ptm->tm_sec, (int32_t)timeSecs.tv_usec, taosGetPthreadId());
|
||||
len += sprintf(buffer + len, "%s", flags);
|
||||
|
||||
|
|
|
@ -1,22 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
function runSimCaseOneByOne {
|
||||
while read -r line; do
|
||||
if [[ $line =~ ^run.* ]]; then
|
||||
case=`echo $line | awk '{print $2}'`
|
||||
./test.sh -f $case 2>&1 | grep 'success\|failed\|fault' | grep -v 'default' | tee -a out.log
|
||||
fi
|
||||
done < $1
|
||||
}
|
||||
|
||||
function runPyCaseOneByOne {
|
||||
while read -r line; do
|
||||
if [[ $line =~ ^python.* ]]; then
|
||||
$line 2>&1 | grep 'successfully executed\|failed\|fault' | grep -v 'default'| tee -a pytest-out.log
|
||||
fi
|
||||
done < $1
|
||||
}
|
||||
|
||||
# Color setting
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[1;32m'
|
||||
|
@ -24,15 +7,46 @@ GREEN_DARK='\033[0;32m'
|
|||
GREEN_UNDERLINE='\033[4;32m'
|
||||
NC='\033[0m'
|
||||
|
||||
function runSimCaseOneByOne {
|
||||
while read -r line; do
|
||||
if [[ $line =~ ^run.* ]]; then
|
||||
case=`echo $line | awk '{print $NF}'`
|
||||
start_time=`date +%s`
|
||||
./test.sh -f $case > /dev/null 2>&1 && \
|
||||
echo -e "${GREEN}$case success${NC}" | tee -a out.log || \
|
||||
echo -e "${RED}$case failed${NC}" | tee -a out.log
|
||||
end_time=`date +%s`
|
||||
echo execution time of $case was `expr $end_time - $start_time`s. | tee -a out.log
|
||||
fi
|
||||
done < $1
|
||||
}
|
||||
|
||||
function runPyCaseOneByOne {
|
||||
while read -r line; do
|
||||
if [[ $line =~ ^python.* ]]; then
|
||||
if [[ $line != *sleep* ]]; then
|
||||
case=`echo $line|awk '{print $NF}'`
|
||||
start_time=`date +%s`
|
||||
$line > /dev/null 2>&1 && \
|
||||
echo -e "${GREEN}$case success${NC}" | tee -a pytest-out.log || \
|
||||
echo -e "${RED}$case failed${NC}" | tee -a pytest-out.log
|
||||
end_time=`date +%s`
|
||||
echo execution time of $case was `expr $end_time - $start_time`s. | tee -a pytest-out.log
|
||||
else
|
||||
$line > /dev/null 2>&1
|
||||
fi
|
||||
fi
|
||||
done < $1
|
||||
}
|
||||
|
||||
totalFailed=0
|
||||
totalPyFailed=0
|
||||
|
||||
|
||||
current_dir=`pwd`
|
||||
tests_dir=`pwd`
|
||||
|
||||
if [ "$2" != "python" ]; then
|
||||
echo "### run TSIM test case ###"
|
||||
cd $current_dir/script
|
||||
cd $tests_dir/script
|
||||
|
||||
[ -f out.log ] && rm -f out.log
|
||||
if [ "$1" == "cron" ]; then
|
||||
|
@ -53,13 +67,13 @@ if [ "$2" != "python" ]; then
|
|||
totalSuccess=`expr $totalSuccess - $totalBasic`
|
||||
fi
|
||||
|
||||
echo -e "${GREEN} ### Total $totalSuccess TSIM case(s) succeed! ### ${NC}"
|
||||
echo -e "\n${GREEN} ### Total $totalSuccess TSIM case(s) succeed! ### ${NC}"
|
||||
|
||||
totalFailed=`grep 'failed\|fault' out.log | wc -l`
|
||||
# echo -e "${RED} ### Total $totalFailed TSIM case(s) failed! ### ${NC}"
|
||||
|
||||
if [ "$totalFailed" -ne "0" ]; then
|
||||
echo -e "${RED} ### Total $totalFailed TSIM case(s) failed! ### ${NC}"
|
||||
echo -e "\n${RED} ### Total $totalFailed TSIM case(s) failed! ### ${NC}"
|
||||
|
||||
# exit $totalFailed
|
||||
fi
|
||||
|
@ -67,7 +81,27 @@ fi
|
|||
|
||||
if [ "$2" != "sim" ]; then
|
||||
echo "### run Python test case ###"
|
||||
cd $current_dir/pytest
|
||||
|
||||
cd $tests_dir
|
||||
IN_TDINTERNAL="community"
|
||||
|
||||
if [[ "$tests_dir" == *"$IN_TDINTERNAL"* ]]; then
|
||||
cd ../..
|
||||
else
|
||||
cd ../
|
||||
fi
|
||||
|
||||
TOP_DIR=`pwd`
|
||||
TAOSLIB_DIR=`find . -name "libtaos.so"|grep -w lib|head -n1`
|
||||
if [[ "$TAOSLIB_DIR" == *"$IN_TDINTERNAL"* ]]; then
|
||||
LIB_DIR=`find . -name "libtaos.so"|grep -w lib|head -n1|cut -d '/' --fields=2,3,4,5`
|
||||
else
|
||||
LIB_DIR=`find . -name "libtaos.so"|grep -w lib|head -n1|cut -d '/' --fields=2,3,4`
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=$TOP_DIR/$LIB_DIR:$LD_LIBRARY_PATH
|
||||
|
||||
cd $tests_dir/pytest
|
||||
|
||||
[ -f pytest-out.log ] && rm -f pytest-out.log
|
||||
|
||||
|
@ -81,15 +115,15 @@ if [ "$2" != "sim" ]; then
|
|||
echo "### run Python smoke test ###"
|
||||
runPyCaseOneByOne smoketest.sh
|
||||
fi
|
||||
totalPySuccess=`grep 'successfully executed' pytest-out.log | wc -l`
|
||||
totalPySuccess=`grep 'success' pytest-out.log | wc -l`
|
||||
|
||||
if [ "$totalPySuccess" -gt "0" ]; then
|
||||
echo -e "${GREEN} ### Total $totalPySuccess python case(s) succeed! ### ${NC}"
|
||||
echo -e "\n${GREEN} ### Total $totalPySuccess python case(s) succeed! ### ${NC}"
|
||||
fi
|
||||
|
||||
totalPyFailed=`grep 'failed\|fault' pytest-out.log | wc -l`
|
||||
if [ "$totalPyFailed" -ne "0" ]; then
|
||||
echo -e "${RED} ### Total $totalPyFailed python case(s) failed! ### ${NC}"
|
||||
echo -e "\n${RED} ### Total $totalPyFailed python case(s) failed! ### ${NC}"
|
||||
# exit $totalPyFailed
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -109,7 +109,7 @@ void* taos_execute(void *param) {
|
|||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
|
||||
void *taos = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
void *taos = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (taos == NULL) taos_error(taos);
|
||||
|
||||
char sql[1024] = {0};
|
||||
|
|
|
@ -73,7 +73,7 @@ void createDbAndTable() {
|
|||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("failed to connect to DB, reason:%s", taos_errstr(con));
|
||||
exit(1);
|
||||
|
@ -200,7 +200,7 @@ void *syncTest(void *param) {
|
|||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con));
|
||||
exit(1);
|
||||
|
|
|
@ -71,7 +71,7 @@ void createDbAndTable() {
|
|||
char fqdn[TSDB_FQDN_LEN];
|
||||
uint16_t port;
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("failed to connect to DB, reason:%s", taos_errstr(con));
|
||||
exit(1);
|
||||
|
@ -184,7 +184,7 @@ void *syncTest(void *param) {
|
|||
uint16_t port;
|
||||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con));
|
||||
exit(1);
|
||||
|
|
|
@ -74,7 +74,7 @@ void createDbAndTable() {
|
|||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("failed to connect to DB, reason:%s", taos_errstr(con));
|
||||
exit(1);
|
||||
|
@ -222,7 +222,7 @@ void *syncTest(void *param) {
|
|||
|
||||
taosGetFqdnPortFromEp(tsFirst, fqdn, &port);
|
||||
|
||||
con = taos_connect(fqdn, tsDefaultUser, tsDefaultPass, NULL, port);
|
||||
con = taos_connect(fqdn, "root", "taosdata", NULL, port);
|
||||
if (con == NULL) {
|
||||
pError("index:%d, failed to connect to DB, reason:%s", pInfo->threadIndex, taos_errstr(con));
|
||||
exit(1);
|
||||
|
|
|
@ -612,7 +612,7 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
|
|||
}
|
||||
|
||||
bool simCreateTaosdConnect(SScript *script, char *rest) {
|
||||
char *user = tsDefaultUser;
|
||||
char *user = TSDB_DEFAULT_USER;
|
||||
char *token;
|
||||
int tokenLen;
|
||||
rest = paGetToken(rest, &token, &tokenLen);
|
||||
|
@ -622,9 +622,9 @@ bool simCreateTaosdConnect(SScript *script, char *rest) {
|
|||
}
|
||||
|
||||
if (simAsyncQuery) {
|
||||
return simCreateRestFulConnect(script, user, tsDefaultPass);
|
||||
return simCreateRestFulConnect(script, user, TSDB_DEFAULT_PASS);
|
||||
} else {
|
||||
return simCreateNativeConnect(script, user, tsDefaultPass);
|
||||
return simCreateNativeConnect(script, user, TSDB_DEFAULT_PASS);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue