diff --git a/.travis.yml b/.travis.yml
index 9aac6c597cd9608c293b3d0f9b49c0db3fa5d9a4..d814a465e67468fc05c2d03b62c092a9c5130e22 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -270,19 +270,20 @@ matrix:
fi
- make > /dev/null
-# - os: osx
-# language: c
-# compiler: clang
-# env: DESC="mac/clang build"
-# git:
-# - depth: 1
-# addons:
-# homebrew:
-# - cmake
-#
-# script:
-# - cd ${TRAVIS_BUILD_DIR}
-# - mkdir debug
-# - cd debug
-# - cmake .. > /dev/null
-# - make > /dev/null
+ - os: osx
+ osx_image: xcode11.4
+ language: c
+ compiler: clang
+ env: DESC="mac/clang build"
+ git:
+ - depth: 1
+ addons:
+ homebrew:
+ - cmake
+
+ script:
+ - cd ${TRAVIS_BUILD_DIR}
+ - mkdir debug
+ - cd debug
+ - cmake .. > /dev/null
+ - make > /dev/null
diff --git a/Jenkinsfile b/Jenkinsfile
index 73bb832d8ea4c16d65f6fff88cb8844415c19f9c..516b179dce12184f6841ddb3d007781d216345cd 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -176,5 +176,84 @@ pipeline {
}
}
}
+ post {
+
+ success {
+ emailext (
+ subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
+ body: '''
+
+
+
+
+
+
+
+
+ 构建信息
+
|
+
+
+
+
+
+ - 构建名称>>分支:${PROJECT_NAME}
+ - 构建结果: Successful
+ - 构建编号:${BUILD_NUMBER}
+ - 触发用户:${CAUSE}
+ - 提交信息:${CHANGE_TITLE}
+ - 构建地址:${BUILD_URL}
+ - 构建日志:${BUILD_URL}console
+ - 变更集:${JELLY_SCRIPT}
+
+
+ |
+
+
+
+ ''',
+ to: "${env.CHANGE_AUTHOR_EMAIL}",
+ from: "support@taosdata.com"
+ )
+ }
+ failure {
+ emailext (
+ subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
+ body: '''
+
+
+
+
+
+
+
+
+ 构建信息
+
|
+
+
+
+
+
+ - 构建名称>>分支:${PROJECT_NAME}
+ - 构建结果: Successful
+ - 构建编号:${BUILD_NUMBER}
+ - 触发用户:${CAUSE}
+ - 提交信息:${CHANGE_TITLE}
+ - 构建地址:${BUILD_URL}
+ - 构建日志:${BUILD_URL}console
+ - 变更集:${JELLY_SCRIPT}
+
+
+ |
+
+
+
+ ''',
+ to: "${env.CHANGE_AUTHOR_EMAIL}",
+ from: "support@taosdata.com"
+ )
+ }
+ }
}
diff --git a/README.md b/README.md
index fafcdc8321aab717d0d900819bdd1e7b974e20a2..ded262b6741aff4ec94187295c97c8ce7cf20a31 100644
--- a/README.md
+++ b/README.md
@@ -126,7 +126,7 @@ cmake .. -DCPUTYPE=aarch32 && cmake --build .
If you use the Visual Studio 2013, please open a command window by executing "cmd.exe".
Please specify "x86_amd64" for 64 bits Windows or specify "x86" is for 32 bits Windows when you execute vcvarsall.bat.
-```
+```cmd
mkdir debug && cd debug
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" < x86_amd64 | x86 >
cmake .. -G "NMake Makefiles"
@@ -137,7 +137,8 @@ If you use the Visual Studio 2019 or 2017:
please open a command window by executing "cmd.exe".
Please specify "x64" for 64 bits Windows or specify "x86" is for 32 bits Windows when you execute vcvarsall.bat.
-```
+
+```cmd
mkdir debug && cd debug
"c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" < x64 | x86 >
cmake .. -G "NMake Makefiles"
@@ -145,27 +146,37 @@ nmake
```
Or, you can simply open a command window by clicking Windows Start -> "Visual Studio < 2019 | 2017 >" folder -> "x64 Native Tools Command Prompt for VS < 2019 | 2017 >" or "x86 Native Tools Command Prompt for VS < 2019 | 2017 >" depends what architecture your Windows is, then execute commands as follows:
-```
+```cmd
mkdir debug && cd debug
cmake .. -G "NMake Makefiles"
nmake
```
+### On Mac OS X platform
+
+Please install XCode command line tools and cmake. Verified with XCode 11.4+ on Catalina and Big Sur.
+
+```shell
+mkdir debug && cd debug
+cmake .. && cmake --build .
+```
+
# Quick Run
+
# Quick Run
To quickly start a TDengine server after building, run the command below in terminal:
-```cmd
+```bash
./build/bin/taosd -c test/cfg
```
In another terminal, use the TDengine shell to connect the server:
-```
+```bash
./build/bin/taos -c test/cfg
```
option "-c test/cfg" specifies the system configuration file directory.
# Installing
After building successfully, TDengine can be installed by:
-```cmd
+```bash
make install
```
Users can find more information about directories installed on the system in the [directory and files](https://www.taosdata.com/en/documentation/administrator/#Directory-and-Files) section. It should be noted that installing from source code does not configure service management for TDengine.
diff --git a/cmake/install.inc b/cmake/install.inc
index a5b01f43cb7e8a302a9cf2d6d7ef48ddb8ed944e..2f0404334c06125e6ee8241ab91b22064ab20b89 100755
--- a/cmake/install.inc
+++ b/cmake/install.inc
@@ -32,7 +32,7 @@ ELSEIF (TD_WINDOWS)
#INSTALL(TARGETS taos RUNTIME DESTINATION driver)
#INSTALL(TARGETS shell RUNTIME DESTINATION .)
IF (TD_MVN_INSTALLED)
- INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.17-dist.jar DESTINATION connector/jdbc)
+ INSTALL(FILES ${LIBRARY_OUTPUT_PATH}/taos-jdbcdriver-2.0.18-dist.jar DESTINATION connector/jdbc)
ENDIF ()
ELSEIF (TD_DARWIN)
SET(TD_MAKE_INSTALL_SH "${TD_COMMUNITY_DIR}/packaging/tools/make_install.sh")
diff --git a/documentation20/webdocs/markdowndocs/connector-java-ch.md b/documentation20/webdocs/markdowndocs/connector-java-ch.md
index b8390e7af50569b62f031c5a3af3020d43b6f98a..cd88e093aa15eec49bf8fcab0e8a0678b713f18d 100644
--- a/documentation20/webdocs/markdowndocs/connector-java-ch.md
+++ b/documentation20/webdocs/markdowndocs/connector-java-ch.md
@@ -2,7 +2,7 @@
TDengine 提供了遵循 JDBC 标准(3.0)API 规范的 `taos-jdbcdriver` 实现,可在 maven 的中央仓库 [Sonatype Repository][1] 搜索下载。
-`taos-jdbcdriver` 的实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful(taos-jdbcdriver-2.0.17 开始支持 JDBC-RESTful)。 JDBC-JNI 通过调用客户端 libtaos.so(或 taos.dll )的本地方法实现, JDBC-RESTful 则在内部封装了 RESTful 接口实现。
+`taos-jdbcdriver` 的实现包括 2 种形式: JDBC-JNI 和 JDBC-RESTful(taos-jdbcdriver-2.0.18 开始支持 JDBC-RESTful)。 JDBC-JNI 通过调用客户端 libtaos.so(或 taos.dll )的本地方法实现, JDBC-RESTful 则在内部封装了 RESTful 接口实现。
![tdengine-connector](../assets/tdengine-jdbc-connector.png)
@@ -67,7 +67,7 @@ maven 项目中使用如下 pom.xml 配置即可:
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.17
+ 2.0.18
```
@@ -334,16 +334,16 @@ conn.close();
```java
public static void main(String[] args) throws SQLException {
HikariConfig config = new HikariConfig();
+ // jdbc properties
config.setJdbcUrl("jdbc:TAOS://127.0.0.1:6030/log");
config.setUsername("root");
config.setPassword("taosdata");
-
+ // connection pool configurations
config.setMinimumIdle(3); //minimum number of idle connection
config.setMaximumPoolSize(10); //maximum number of connection in the pool
- config.setConnectionTimeout(10000); //maximum wait milliseconds for get connection from pool
- config.setIdleTimeout(60000); // max idle time for recycle idle connection
- config.setConnectionTestQuery("describe log.dn"); //validation query
- config.setValidationTimeout(3000); //validation query timeout
+ config.setConnectionTimeout(30000); //maximum wait milliseconds for get connection from pool
+ config.setIdleTimeout(0); // max idle time for recycle idle connection
+ config.setConnectionTestQuery("select server_status()"); //validation query
HikariDataSource ds = new HikariDataSource(config); //create datasource
@@ -376,25 +376,17 @@ conn.close();
```java
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
+ // jdbc properties
properties.put("driverClassName","com.taosdata.jdbc.TSDBDriver");
properties.put("url","jdbc:TAOS://127.0.0.1:6030/log");
properties.put("username","root");
properties.put("password","taosdata");
-
- properties.put("maxActive","10"); //maximum number of connection in the pool
- properties.put("initialSize","3");//initial number of connection
- properties.put("maxWait","10000");//maximum wait milliseconds for get connection from pool
- properties.put("minIdle","3");//minimum number of connection in the pool
-
- properties.put("timeBetweenEvictionRunsMillis","3000");// the interval milliseconds to test connection
-
- properties.put("minEvictableIdleTimeMillis","60000");//the minimum milliseconds to keep idle
- properties.put("maxEvictableIdleTimeMillis","90000");//the maximum milliseconds to keep idle
-
- properties.put("validationQuery","describe log.dn"); //validation query
- properties.put("testWhileIdle","true"); // test connection while idle
- properties.put("testOnBorrow","false"); // don't need while testWhileIdle is true
- properties.put("testOnReturn","false"); // don't need while testWhileIdle is true
+ // pool configurations
+ properties.put("maxActive","10"); //maximum number of connection in the pool
+ properties.put("initialSize","3"); //initial number of connection
+ properties.put("minIdle","3"); //minimum number of connection in the pool
+ properties.put("maxWait","30000"); //maximum wait milliseconds for get connection from pool
+ properties.put("validationQuery","select server_status()"); //validation query
//create druid datasource
DataSource ds = DruidDataSourceFactory.createDataSource(properties);
diff --git a/packaging/deb/makedeb.sh b/packaging/deb/makedeb.sh
index 431093be950e2c2bb199ed294b57641290fe6221..a2f58619dfa28a3fb28e2a2dbe7edb0ca7f8265d 100755
--- a/packaging/deb/makedeb.sh
+++ b/packaging/deb/makedeb.sh
@@ -43,6 +43,7 @@ mkdir -p ${pkg_dir}${install_home_path}/include
mkdir -p ${pkg_dir}${install_home_path}/init.d
mkdir -p ${pkg_dir}${install_home_path}/script
+echo "" > ${pkg_dir}${install_home_path}/email
cp ${compile_dir}/../packaging/cfg/taos.cfg ${pkg_dir}${install_home_path}/cfg
cp ${compile_dir}/../packaging/deb/taosd ${pkg_dir}${install_home_path}/init.d
cp ${compile_dir}/../packaging/tools/post.sh ${pkg_dir}${install_home_path}/script
diff --git a/packaging/rpm/tdengine.spec b/packaging/rpm/tdengine.spec
index 6f012aa80eac67ba42e7ca561c95ef6d905c2100..a143d0afdb305d01ee8fc891d829261d323f183c 100644
--- a/packaging/rpm/tdengine.spec
+++ b/packaging/rpm/tdengine.spec
@@ -51,6 +51,7 @@ mkdir -p %{buildroot}%{homepath}/include
mkdir -p %{buildroot}%{homepath}/init.d
mkdir -p %{buildroot}%{homepath}/script
+echo "" > %{buildroot}%{homepath}/email
cp %{_compiledir}/../packaging/cfg/taos.cfg %{buildroot}%{homepath}/cfg
cp %{_compiledir}/../packaging/rpm/taosd %{buildroot}%{homepath}/init.d
cp %{_compiledir}/../packaging/tools/post.sh %{buildroot}%{homepath}/script
diff --git a/src/client/src/tscLocal.c b/src/client/src/tscLocal.c
index 4b1ab477304d68d5d52ed02b9b2d2c0121c4ffa6..bb015bce3d1a8ea9d92f3915d1edccd7f31539a3 100644
--- a/src/client/src/tscLocal.c
+++ b/src/client/src/tscLocal.c
@@ -749,7 +749,10 @@ static int32_t tscProcessCurrentUser(SSqlObj *pSql) {
static int32_t tscProcessCurrentDB(SSqlObj *pSql) {
char db[TSDB_DB_NAME_LEN] = {0};
+
+ pthread_mutex_lock(&pSql->pTscObj->mutex);
extractDBName(pSql->pTscObj->db, db);
+ pthread_mutex_unlock(&pSql->pTscObj->mutex);
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, pSql->cmd.clauseIndex);
diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c
index 2f98fbc27035342a4f4eb65e1e5d9d76d6e671ab..ec699408de943f228e2c0aa7057f265bc9fc446a 100644
--- a/src/client/src/tscSQLParser.c
+++ b/src/client/src/tscSQLParser.c
@@ -62,7 +62,7 @@ static int32_t setShowInfo(SSqlObj* pSql, SSqlInfo* pInfo);
static char* getAccountId(SSqlObj* pSql);
static bool has(SArray* pFieldList, int32_t startIdx, const char* name);
-static char* getCurrentDBName(SSqlObj* pSql);
+static char* cloneCurrentDBName(SSqlObj* pSql);
static bool hasSpecifyDB(SStrToken* pTableName);
static bool validateTableColumnInfo(SArray* pFieldList, SSqlCmd* pCmd);
static bool validateTagParams(SArray* pTagsList, SArray* pFieldList, SSqlCmd* pCmd);
@@ -923,16 +923,19 @@ int32_t tscSetTableFullName(STableMetaInfo* pTableMetaInfo, SStrToken* pTableNam
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
}
} else { // get current DB name first, and then set it into path
- char* t = getCurrentDBName(pSql);
+ char* t = cloneCurrentDBName(pSql);
if (strlen(t) == 0) {
return TSDB_CODE_TSC_DB_NOT_SELECTED;
}
code = tNameFromString(&pTableMetaInfo->name, t, T_NAME_ACCT | T_NAME_DB);
if (code != 0) {
+ free(t);
return TSDB_CODE_TSC_DB_NOT_SELECTED;
}
+ free(t);
+
if (pTableName->n >= TSDB_TABLE_NAME_LEN) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
}
@@ -1246,8 +1249,12 @@ static bool has(SArray* pFieldList, int32_t startIdx, const char* name) {
static char* getAccountId(SSqlObj* pSql) { return pSql->pTscObj->acctId; }
-static char* getCurrentDBName(SSqlObj* pSql) {
- return pSql->pTscObj->db;
+static char* cloneCurrentDBName(SSqlObj* pSql) {
+ pthread_mutex_lock(&pSql->pTscObj->mutex);
+ char *p = strdup(pSql->pTscObj->db);
+ pthread_mutex_unlock(&pSql->pTscObj->mutex);
+
+ return p;
}
/* length limitation, strstr cannot be applied */
@@ -4302,6 +4309,77 @@ static void doAddJoinTagsColumnsIntoTagList(SSqlCmd* pCmd, SQueryInfo* pQueryInf
}
}
+static int32_t validateTagCondExpr(SSqlCmd* pCmd, tExprNode *p) {
+ const char *msg1 = "invalid tag operator";
+ const char* msg2 = "not supported filter condition";
+
+ do {
+ if (p->nodeType != TSQL_NODE_EXPR) {
+ break;
+ }
+
+ if (!p->_node.pLeft || !p->_node.pRight) {
+ break;
+ }
+
+ if (IS_ARITHMETIC_OPTR(p->_node.optr)) {
+ return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg1);
+ }
+
+ if (!IS_RELATION_OPTR(p->_node.optr)) {
+ break;
+ }
+
+ tVariant * vVariant = NULL;
+ int32_t schemaType = -1;
+
+ if (p->_node.pLeft->nodeType == TSQL_NODE_VALUE && p->_node.pRight->nodeType == TSQL_NODE_COL) {
+ if (!p->_node.pRight->pSchema) {
+ break;
+ }
+
+ vVariant = p->_node.pLeft->pVal;
+ schemaType = p->_node.pRight->pSchema->type;
+ } else if (p->_node.pLeft->nodeType == TSQL_NODE_COL && p->_node.pRight->nodeType == TSQL_NODE_VALUE) {
+ if (!p->_node.pLeft->pSchema) {
+ break;
+ }
+
+ vVariant = p->_node.pRight->pVal;
+ schemaType = p->_node.pLeft->pSchema->type;
+ } else {
+ break;
+ }
+
+ if (schemaType >= TSDB_DATA_TYPE_TINYINT && schemaType <= TSDB_DATA_TYPE_BIGINT) {
+ schemaType = TSDB_DATA_TYPE_BIGINT;
+ } else if (schemaType == TSDB_DATA_TYPE_FLOAT || schemaType == TSDB_DATA_TYPE_DOUBLE) {
+ schemaType = TSDB_DATA_TYPE_DOUBLE;
+ }
+
+ int32_t retVal = TSDB_CODE_SUCCESS;
+ if (schemaType == TSDB_DATA_TYPE_BINARY) {
+ char *tmp = calloc(1, vVariant->nLen + TSDB_NCHAR_SIZE);
+ retVal = tVariantDump(vVariant, tmp, schemaType, false);
+ free(tmp);
+ } else if (schemaType == TSDB_DATA_TYPE_NCHAR) {
+ // pRight->val.nLen + 1 is larger than the actual nchar string length
+ char *tmp = calloc(1, (vVariant->nLen + 1) * TSDB_NCHAR_SIZE);
+ retVal = tVariantDump(vVariant, tmp, schemaType, false);
+ free(tmp);
+ } else {
+ double tmp;
+ retVal = tVariantDump(vVariant, (char*)&tmp, schemaType, false);
+ }
+
+ if (retVal != TSDB_CODE_SUCCESS) {
+ return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
+ }
+ }while (0);
+
+ return TSDB_CODE_SUCCESS;
+}
+
static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondExpr* pCondExpr, tSQLExpr** pExpr) {
int32_t ret = TSDB_CODE_SUCCESS;
@@ -4344,6 +4422,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
tsSetSTableQueryCond(&pQueryInfo->tagCond, uid, &bw);
doCompactQueryExpr(pExpr);
+ if (ret == TSDB_CODE_SUCCESS) {
+ ret = validateTagCondExpr(pCmd, p);
+ }
+
tSqlExprDestroy(p1);
tExprTreeDestroy(p, NULL);
@@ -4351,6 +4433,10 @@ static int32_t getTagQueryCondExpr(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SCondE
if (pQueryInfo->tagCond.pCond != NULL && taosArrayGetSize(pQueryInfo->tagCond.pCond) > 0 && !UTIL_TABLE_IS_SUPER_TABLE(pTableMetaInfo)) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), "filter on tag not supported for normal table");
}
+
+ if (ret) {
+ break;
+ }
}
pCondExpr->pTagCond = NULL;
diff --git a/src/client/src/tscServer.c b/src/client/src/tscServer.c
index 840387656691e0bd0e76908d311b0ac124db5baf..6035a270c5494560744b12cfa77c7449ca2fcb06 100644
--- a/src/client/src/tscServer.c
+++ b/src/client/src/tscServer.c
@@ -1250,8 +1250,10 @@ int32_t tscBuildShowMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
- if (tNameIsEmpty(&pTableMetaInfo->name)) {
- tstrncpy(pShowMsg->db, pObj->db, sizeof(pShowMsg->db));
+ if (tNameIsEmpty(&pTableMetaInfo->name)) {
+ pthread_mutex_lock(&pObj->mutex);
+ tstrncpy(pShowMsg->db, pObj->db, sizeof(pShowMsg->db));
+ pthread_mutex_unlock(&pObj->mutex);
} else {
tNameGetFullDbName(&pTableMetaInfo->name, pShowMsg->db);
}
@@ -1611,9 +1613,14 @@ int tscBuildConnectMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
// TODO refactor full_name
char *db; // ugly code to move the space
+
+ pthread_mutex_lock(&pObj->mutex);
db = strstr(pObj->db, TS_PATH_DELIMITER);
+
db = (db == NULL) ? pObj->db : db + 1;
tstrncpy(pConnect->db, db, sizeof(pConnect->db));
+ pthread_mutex_unlock(&pObj->mutex);
+
tstrncpy(pConnect->clientVersion, version, sizeof(pConnect->clientVersion));
tstrncpy(pConnect->msgVersion, "", sizeof(pConnect->msgVersion));
@@ -2131,10 +2138,13 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
SConnectRsp *pConnect = (SConnectRsp *)pRes->pRsp;
tstrncpy(pObj->acctId, pConnect->acctId, sizeof(pObj->acctId)); // copy acctId from response
+
+ pthread_mutex_lock(&pObj->mutex);
int32_t len = sprintf(temp, "%s%s%s", pObj->acctId, TS_PATH_DELIMITER, pObj->db);
assert(len <= sizeof(pObj->db));
tstrncpy(pObj->db, temp, sizeof(pObj->db));
+ pthread_mutex_unlock(&pObj->mutex);
if (pConnect->epSet.numOfEps > 0) {
tscEpSetHtons(&pConnect->epSet);
@@ -2161,11 +2171,18 @@ int tscProcessConnectRsp(SSqlObj *pSql) {
int tscProcessUseDbRsp(SSqlObj *pSql) {
STscObj * pObj = pSql->pTscObj;
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(&pSql->cmd, 0, 0);
- return tNameExtractFullName(&pTableMetaInfo->name, pObj->db);
+
+ pthread_mutex_lock(&pObj->mutex);
+ int ret = tNameExtractFullName(&pTableMetaInfo->name, pObj->db);
+ pthread_mutex_unlock(&pObj->mutex);
+
+ return ret;
}
int tscProcessDropDbRsp(SSqlObj *pSql) {
- pSql->pTscObj->db[0] = 0;
+ //TODO LOCK DB WHEN MODIFY IT
+ //pSql->pTscObj->db[0] = 0;
+
taosHashEmpty(tscTableMetaInfo);
return 0;
}
diff --git a/src/common/src/tglobal.c b/src/common/src/tglobal.c
index f3ec029929aef42df7070fee07054bed77c5edff..bd10d7e44ec7ed00e072e82371423e3193211d7e 100644
--- a/src/common/src/tglobal.c
+++ b/src/common/src/tglobal.c
@@ -137,7 +137,7 @@ int32_t tsTableIncStepPerVnode = TSDB_TABLES_STEP;
int8_t tsEnableBalance = 1;
int8_t tsAlternativeRole = 0;
int32_t tsBalanceInterval = 300; // seconds
-int32_t tsOfflineThreshold = 86400 * 100; // seconds 10days
+int32_t tsOfflineThreshold = 86400 * 100; // seconds 100 days
int32_t tsMnodeEqualVnodeNum = 4;
int8_t tsEnableFlowCtrl = 1;
int8_t tsEnableSlaveQuery = 1;
@@ -591,7 +591,7 @@ static void doInitGlobalConfig(void) {
cfg.valType = TAOS_CFG_VTYPE_INT32;
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
cfg.minValue = 3;
- cfg.maxValue = 7200000;
+ cfg.maxValue = 86400 * 365;
cfg.ptrLength = 0;
cfg.unitType = TAOS_CFG_UTYPE_SECOND;
taosInitConfigOption(cfg);
diff --git a/src/common/src/tvariant.c b/src/common/src/tvariant.c
index fa95e17f32556e63935da51af33e990f1363a170..cfad85be60c19811909c0f6abbcfa26a2f5bad69 100644
--- a/src/common/src/tvariant.c
+++ b/src/common/src/tvariant.c
@@ -430,7 +430,7 @@ static FORCE_INLINE int32_t convertToInteger(tVariant *pVariant, int64_t *result
}
errno = 0;
- if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType)) {
+ if (IS_SIGNED_NUMERIC_TYPE(pVariant->nType) || (pVariant->nType == TSDB_DATA_TYPE_BOOL)) {
*result = pVariant->i64;
} else if (IS_UNSIGNED_NUMERIC_TYPE(pVariant->nType)) {
*result = pVariant->u64;
diff --git a/src/connector/jdbc/CMakeLists.txt b/src/connector/jdbc/CMakeLists.txt
index b64161e2e4fd6fc00abb659118cfdcd50dfcf0a8..59b09c8695d59c1fd0584f73a7e4be1eb1ab1c0b 100644
--- a/src/connector/jdbc/CMakeLists.txt
+++ b/src/connector/jdbc/CMakeLists.txt
@@ -8,7 +8,7 @@ IF (TD_MVN_INSTALLED)
ADD_CUSTOM_COMMAND(OUTPUT ${JDBC_CMD_NAME}
POST_BUILD
COMMAND mvn -Dmaven.test.skip=true install -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.17-dist.jar ${LIBRARY_OUTPUT_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/target/taos-jdbcdriver-2.0.18-dist.jar ${LIBRARY_OUTPUT_PATH}
COMMAND mvn -Dmaven.test.skip=true clean -f ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml
COMMENT "build jdbc driver")
ADD_CUSTOM_TARGET(${JDBC_TARGET_NAME} ALL WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} DEPENDS ${JDBC_CMD_NAME})
diff --git a/src/connector/jdbc/deploy-pom.xml b/src/connector/jdbc/deploy-pom.xml
index 1f03c3c6fe5e1d5f1d7d12a0df7babb6edb789f1..34b0a3c6d37530ad01600a455d426c1606613c23 100755
--- a/src/connector/jdbc/deploy-pom.xml
+++ b/src/connector/jdbc/deploy-pom.xml
@@ -5,7 +5,7 @@
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.17
+ 2.0.18
jar
JDBCDriver
diff --git a/src/connector/jdbc/pom.xml b/src/connector/jdbc/pom.xml
index 6be0ca036e797decb668c42a81eeaafb91d52787..4756ac555fa3b32f1e261b3376d811f5e24bcc70 100755
--- a/src/connector/jdbc/pom.xml
+++ b/src/connector/jdbc/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.17
+ 2.0.18
jar
JDBCDriver
https://github.com/taosdata/TDengine/tree/master/src/connector/jdbc
@@ -126,7 +126,7 @@
**/*Test.java
- **/BatchInsertTest.java
+ **/AppMemoryLeakTest.java
**/FailOverTest.java
true
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
index 4f4911aad9c138eb13fffdd698b794a03222160f..4fb172ceb59040e2f531fd91b83c776cd7d89067 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
@@ -19,9 +19,12 @@ import java.util.Map;
public abstract class TSDBConstants {
+ public static final String STATEMENT_CLOSED = "Statement already closed.";
public static final String DEFAULT_PORT = "6200";
public static final String UNSUPPORT_METHOD_EXCEPTIONZ_MSG = "this operation is NOT supported currently!";
public static final String INVALID_VARIABLES = "invalid variables";
+ public static final String RESULT_SET_IS_CLOSED = "resultSet is closed.";
+
public static Map DATATYPE_MAP = null;
public static final long JNI_NULL_POINTER = 0L;
@@ -74,7 +77,7 @@ public abstract class TSDBConstants {
}
static {
- DATATYPE_MAP = new HashMap();
+ DATATYPE_MAP = new HashMap<>();
DATATYPE_MAP.put(1, "BOOL");
DATATYPE_MAP.put(2, "TINYINT");
DATATYPE_MAP.put(3, "SMALLINT");
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
index 230943fd53ae8fa36b9de40f851a5c263c052f0d..c6b41ce004d739a94c00e87f141b9180efa18e57 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
@@ -100,7 +100,6 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
* order to process those supported SQLs.
*/
private void preprocessSql() {
-
/***** For processing some of Spark SQLs*****/
// should replace it first
this.rawSql = this.rawSql.replaceAll("or (.*) is null", "");
@@ -149,7 +148,6 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
rawSql = rawSql.replace(matcher.group(1), tableFullName);
}
/***** for inner queries *****/
-
}
/**
@@ -196,7 +194,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
@Override
public void setNull(int parameterIndex, int sqlType) throws SQLException {
- setObject(parameterIndex, new String("NULL"));
+ setObject(parameterIndex, "NULL");
}
@Override
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
index a8a8b3ca876cf1d2cbc9363b49f0f49da7550b90..d06922c680ccec9c4ec6f53cdbe60cb530deae97 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
@@ -40,1060 +40,1070 @@ import java.util.List;
import java.util.Map;
public class TSDBResultSet implements ResultSet {
- private TSDBJNIConnector jniConnector = null;
-
- private long resultSetPointer = 0L;
- private List columnMetaDataList = new ArrayList();
-
- private TSDBResultSetRowData rowData;
- private TSDBResultSetBlockData blockData;
-
- private boolean batchFetch = false;
- private boolean lastWasNull = false;
- private final int COLUMN_INDEX_START_VALUE = 1;
-
- private int rowIndex = 0;
-
- public TSDBJNIConnector getJniConnector() {
- return jniConnector;
- }
-
- public void setJniConnector(TSDBJNIConnector jniConnector) {
- this.jniConnector = jniConnector;
- }
-
- public long getResultSetPointer() {
- return resultSetPointer;
- }
-
- public void setResultSetPointer(long resultSetPointer) {
- this.resultSetPointer = resultSetPointer;
- }
-
- public void setBatchFetch(boolean batchFetch) {
- this.batchFetch = batchFetch;
- }
-
- public Boolean getBatchFetch() {
- return this.batchFetch;
- }
-
- public List getColumnMetaDataList() {
- return columnMetaDataList;
- }
-
- public void setColumnMetaDataList(List columnMetaDataList) {
- this.columnMetaDataList = columnMetaDataList;
- }
-
- public TSDBResultSetRowData getRowData() {
- return rowData;
- }
-
- public void setRowData(TSDBResultSetRowData rowData) {
- this.rowData = rowData;
- }
-
- public boolean isLastWasNull() {
- return lastWasNull;
- }
-
- public void setLastWasNull(boolean lastWasNull) {
- this.lastWasNull = lastWasNull;
- }
-
- public TSDBResultSet() {
-
- }
-
- public TSDBResultSet(TSDBJNIConnector connector, long resultSetPointer) throws SQLException {
- this.jniConnector = connector;
- this.resultSetPointer = resultSetPointer;
- int code = this.jniConnector.getSchemaMetaData(this.resultSetPointer, this.columnMetaDataList);
- if (code == TSDBConstants.JNI_CONNECTION_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
- } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
- }
-
- this.rowData = new TSDBResultSetRowData(this.columnMetaDataList.size());
- this.blockData = new TSDBResultSetBlockData(this.columnMetaDataList, this.columnMetaDataList.size());
- }
-
- public T unwrap(Class iface) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean isWrapperFor(Class> iface) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean next() throws SQLException {
- if (this.getBatchFetch()) {
- if (this.blockData.forward()) {
- return true;
- }
-
- int code = this.jniConnector.fetchBlock(this.resultSetPointer, this.blockData);
- this.blockData.reset();
-
- if (code == TSDBConstants.JNI_CONNECTION_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
- } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
- } else if (code == TSDBConstants.JNI_FETCH_END) {
- return false;
- }
-
- return true;
- } else {
- if (rowData != null) {
- this.rowData.clear();
- }
-
- int code = this.jniConnector.fetchRow(this.resultSetPointer, this.rowData);
- if (code == TSDBConstants.JNI_CONNECTION_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
- } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
- } else if (code == TSDBConstants.JNI_FETCH_END) {
- return false;
- } else {
- return true;
- }
- }
- }
-
- public void close() throws SQLException {
- if (this.jniConnector != null) {
- int code = this.jniConnector.freeResultSet(this.resultSetPointer);
- if (code == TSDBConstants.JNI_CONNECTION_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
- throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
- }
- }
- }
-
- public boolean wasNull() throws SQLException {
- return this.lastWasNull;
- }
-
- public String getString(int columnIndex) throws SQLException {
- String res = null;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getString(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return this.blockData.getString(colIndex);
- }
- }
-
- public boolean getBoolean(int columnIndex) throws SQLException {
- boolean res = false;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getBoolean(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- } else {
- return this.blockData.getBoolean(colIndex);
- }
-
- return res;
- }
-
- public byte getByte(int columnIndex) throws SQLException {
- byte res = 0;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = (byte) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return (byte) this.blockData.getInt(colIndex);
- }
- }
-
- public short getShort(int columnIndex) throws SQLException {
- short res = 0;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = (short) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return (short) this.blockData.getInt(colIndex);
- }
- }
-
- public int getInt(int columnIndex) throws SQLException {
- int res = 0;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return this.blockData.getInt(colIndex);
- }
-
- }
-
- public long getLong(int columnIndex) throws SQLException {
- long res = 0l;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return this.blockData.getLong(colIndex);
- }
- }
-
- public float getFloat(int columnIndex) throws SQLException {
- float res = 0;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getFloat(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return (float) this.blockData.getDouble(colIndex);
- }
- }
-
- public double getDouble(int columnIndex) throws SQLException {
- double res = 0;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getDouble(colIndex, this.columnMetaDataList.get(colIndex).getColType());
- }
- return res;
- } else {
- return this.blockData.getDouble(colIndex);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.sql.ResultSet#getBigDecimal(int, int)
- *
- * @deprecated Use {@code getBigDecimal(int columnIndex)} or {@code
- * getBigDecimal(String columnLabel)}
- */
- @Deprecated
- public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
- return new BigDecimal(getLong(columnIndex));
- }
-
- public byte[] getBytes(int columnIndex) throws SQLException {
- return getString(columnIndex).getBytes();
- }
-
- public Date getDate(int columnIndex) throws SQLException {
- int colIndex = getTrueColumnIndex(columnIndex);
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public Time getTime(int columnIndex) throws SQLException {
- int colIndex = getTrueColumnIndex(columnIndex);
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public Timestamp getTimestamp(int columnIndex) throws SQLException {
- Timestamp res = null;
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- if (!lastWasNull) {
- res = this.rowData.getTimestamp(colIndex);
- }
- return res;
- } else {
- return this.blockData.getTimestamp(columnIndex);
- }
- }
-
- public InputStream getAsciiStream(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.sql.ResultSet#getUnicodeStream(int)
- *
- * * @deprecated use getCharacterStream
in place of
- * getUnicodeStream
- */
- @Deprecated
- public InputStream getUnicodeStream(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public InputStream getBinaryStream(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public String getString(String columnLabel) throws SQLException {
- return this.getString(this.findColumn(columnLabel));
- }
-
- public boolean getBoolean(String columnLabel) throws SQLException {
- return this.getBoolean(this.findColumn(columnLabel));
- }
-
- public byte getByte(String columnLabel) throws SQLException {
- return this.getByte(this.findColumn(columnLabel));
- }
-
- public short getShort(String columnLabel) throws SQLException {
- return this.getShort(this.findColumn(columnLabel));
- }
-
- public int getInt(String columnLabel) throws SQLException {
- return this.getInt(this.findColumn(columnLabel));
- }
-
- public long getLong(String columnLabel) throws SQLException {
- return this.getLong(this.findColumn(columnLabel));
- }
-
- public float getFloat(String columnLabel) throws SQLException {
- return this.getFloat(this.findColumn(columnLabel));
- }
-
- public double getDouble(String columnLabel) throws SQLException {
- return this.getDouble(this.findColumn(columnLabel));
- }
-
- /*
- * used by spark
- */
- @Deprecated
- public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
- return this.getBigDecimal(this.findColumn(columnLabel), scale);
- }
-
- public byte[] getBytes(String columnLabel) throws SQLException {
- return this.getBytes(this.findColumn(columnLabel));
- }
-
- public Date getDate(String columnLabel) throws SQLException {
- return this.getDate(this.findColumn(columnLabel));
- }
-
- public Time getTime(String columnLabel) throws SQLException {
- return this.getTime(this.findColumn(columnLabel));
- }
-
- public Timestamp getTimestamp(String columnLabel) throws SQLException {
- return this.getTimestamp(this.findColumn(columnLabel));
- }
-
- public InputStream getAsciiStream(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- @Deprecated
- public InputStream getUnicodeStream(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public InputStream getBinaryStream(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public SQLWarning getWarnings() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void clearWarnings() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public String getCursorName() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public ResultSetMetaData getMetaData() throws SQLException {
- return new TSDBResultSetMetaData(this.columnMetaDataList);
- }
-
- public Object getObject(int columnIndex) throws SQLException {
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- return this.rowData.get(colIndex);
- } else {
- return this.blockData.get(colIndex);
- }
- }
-
- public Object getObject(String columnLabel) throws SQLException {
- return this.getObject(this.findColumn(columnLabel));
- }
-
- public int findColumn(String columnLabel) throws SQLException {
- Iterator colMetaDataIt = this.columnMetaDataList.iterator();
- while (colMetaDataIt.hasNext()) {
- ColumnMetaData colMetaData = colMetaDataIt.next();
- if (colMetaData.getColName() != null && colMetaData.getColName().equalsIgnoreCase(columnLabel)) {
- return colMetaData.getColIndex() + 1;
- }
- }
- throw new SQLException(TSDBConstants.INVALID_VARIABLES);
- }
-
- public Reader getCharacterStream(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public Reader getCharacterStream(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- /*
- * used by spark
- */
- public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
- int colIndex = getTrueColumnIndex(columnIndex);
-
- if (!this.getBatchFetch()) {
- this.lastWasNull = this.rowData.wasNull(colIndex);
- return new BigDecimal(this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType()));
- } else {
- return new BigDecimal(this.blockData.getLong(colIndex));
- }
- }
-
- public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
- return this.getBigDecimal(this.findColumn(columnLabel));
- }
-
- public boolean isBeforeFirst() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean isAfterLast() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean isFirst() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean isLast() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void beforeFirst() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void afterLast() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean first() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean last() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public int getRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean absolute(int row) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean relative(int rows) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean previous() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void setFetchDirection(int direction) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public int getFetchDirection() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void setFetchSize(int rows) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public int getFetchSize() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public int getType() throws SQLException {
- return ResultSet.TYPE_FORWARD_ONLY;
- }
-
- public int getConcurrency() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean rowUpdated() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean rowInserted() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean rowDeleted() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNull(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ private TSDBJNIConnector jniConnector = null;
- public void updateBoolean(int columnIndex, boolean x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ private long resultSetPointer = 0L;
+ private List columnMetaDataList = new ArrayList();
+
+ private TSDBResultSetRowData rowData;
+ private TSDBResultSetBlockData blockData;
+
+ private boolean batchFetch = false;
+ private boolean lastWasNull = false;
+ private final int COLUMN_INDEX_START_VALUE = 1;
+
+ private int rowIndex = 0;
+
+ public TSDBJNIConnector getJniConnector() {
+ return jniConnector;
+ }
+
+ public void setJniConnector(TSDBJNIConnector jniConnector) {
+ this.jniConnector = jniConnector;
+ }
+
+ public long getResultSetPointer() {
+ return resultSetPointer;
+ }
+
+ public void setResultSetPointer(long resultSetPointer) {
+ this.resultSetPointer = resultSetPointer;
+ }
+
+ public void setBatchFetch(boolean batchFetch) {
+ this.batchFetch = batchFetch;
+ }
+
+ public Boolean getBatchFetch() {
+ return this.batchFetch;
+ }
+
+ public List getColumnMetaDataList() {
+ return columnMetaDataList;
+ }
+
+ public void setColumnMetaDataList(List columnMetaDataList) {
+ this.columnMetaDataList = columnMetaDataList;
+ }
+
+ public TSDBResultSetRowData getRowData() {
+ return rowData;
+ }
+
+ public void setRowData(TSDBResultSetRowData rowData) {
+ this.rowData = rowData;
+ }
+
+ public boolean isLastWasNull() {
+ return lastWasNull;
+ }
+
+ public void setLastWasNull(boolean lastWasNull) {
+ this.lastWasNull = lastWasNull;
+ }
+
+ public TSDBResultSet() {
+
+ }
+
+ public TSDBResultSet(TSDBJNIConnector connector, long resultSetPointer) throws SQLException {
+ this.jniConnector = connector;
+ this.resultSetPointer = resultSetPointer;
+ int code = this.jniConnector.getSchemaMetaData(this.resultSetPointer, this.columnMetaDataList);
+ if (code == TSDBConstants.JNI_CONNECTION_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
+ } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
+ }
+
+ this.rowData = new TSDBResultSetRowData(this.columnMetaDataList.size());
+ this.blockData = new TSDBResultSetBlockData(this.columnMetaDataList, this.columnMetaDataList.size());
+ }
+
+ public T unwrap(Class iface) throws SQLException {
+ if (isClosed())
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
+ }
+
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ if (isClosed())
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ return iface.isInstance(this);
+ }
+
+ public boolean next() throws SQLException {
+ if (this.getBatchFetch()) {
+ if (this.blockData.forward()) {
+ return true;
+ }
+
+ int code = this.jniConnector.fetchBlock(this.resultSetPointer, this.blockData);
+ this.blockData.reset();
+
+ if (code == TSDBConstants.JNI_CONNECTION_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
+ } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
+ } else if (code == TSDBConstants.JNI_FETCH_END) {
+ return false;
+ }
+
+ return true;
+ } else {
+ if (rowData != null) {
+ this.rowData.clear();
+ }
+
+ int code = this.jniConnector.fetchRow(this.resultSetPointer, this.rowData);
+ if (code == TSDBConstants.JNI_CONNECTION_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
+ } else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
+ } else if (code == TSDBConstants.JNI_FETCH_END) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
+ public void close() throws SQLException {
+ if (this.jniConnector != null) {
+ int code = this.jniConnector.freeResultSet(this.resultSetPointer);
+ if (code == TSDBConstants.JNI_CONNECTION_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ } else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
+ }
+ }
+ }
+
+ public boolean wasNull() throws SQLException {
+ return this.lastWasNull;
+ }
+
+ public String getString(int columnIndex) throws SQLException {
+ String res = null;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getString(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return this.blockData.getString(colIndex);
+ }
+ }
+
+ public boolean getBoolean(int columnIndex) throws SQLException {
+ boolean res = false;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getBoolean(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ } else {
+ return this.blockData.getBoolean(colIndex);
+ }
+
+ return res;
+ }
+
+ public byte getByte(int columnIndex) throws SQLException {
+ byte res = 0;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = (byte) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return (byte) this.blockData.getInt(colIndex);
+ }
+ }
+
+ public short getShort(int columnIndex) throws SQLException {
+ short res = 0;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = (short) this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return (short) this.blockData.getInt(colIndex);
+ }
+ }
+
+ public int getInt(int columnIndex) throws SQLException {
+ int res = 0;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getInt(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return this.blockData.getInt(colIndex);
+ }
+
+ }
+
+ public long getLong(int columnIndex) throws SQLException {
+ long res = 0l;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return this.blockData.getLong(colIndex);
+ }
+ }
+
+ public float getFloat(int columnIndex) throws SQLException {
+ float res = 0;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getFloat(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return (float) this.blockData.getDouble(colIndex);
+ }
+ }
+
+ public double getDouble(int columnIndex) throws SQLException {
+ double res = 0;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getDouble(colIndex, this.columnMetaDataList.get(colIndex).getColType());
+ }
+ return res;
+ } else {
+ return this.blockData.getDouble(colIndex);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.sql.ResultSet#getBigDecimal(int, int)
+ *
+ * @deprecated Use {@code getBigDecimal(int columnIndex)} or {@code
+ * getBigDecimal(String columnLabel)}
+ */
+ @Deprecated
+ public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
+ return new BigDecimal(getLong(columnIndex));
+ }
+
+ public byte[] getBytes(int columnIndex) throws SQLException {
+ return getString(columnIndex).getBytes();
+ }
+
+ public Date getDate(int columnIndex) throws SQLException {
+ int colIndex = getTrueColumnIndex(columnIndex);
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public Time getTime(int columnIndex) throws SQLException {
+ int colIndex = getTrueColumnIndex(columnIndex);
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public Timestamp getTimestamp(int columnIndex) throws SQLException {
+ Timestamp res = null;
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ if (!lastWasNull) {
+ res = this.rowData.getTimestamp(colIndex);
+ }
+ return res;
+ } else {
+ return this.blockData.getTimestamp(columnIndex);
+ }
+ }
+
+ public InputStream getAsciiStream(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.sql.ResultSet#getUnicodeStream(int)
+ *
+ * * @deprecated use getCharacterStream
in place of
+ * getUnicodeStream
+ */
+ @Deprecated
+ public InputStream getUnicodeStream(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public InputStream getBinaryStream(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public String getString(String columnLabel) throws SQLException {
+ return this.getString(this.findColumn(columnLabel));
+ }
+
+ public boolean getBoolean(String columnLabel) throws SQLException {
+ return this.getBoolean(this.findColumn(columnLabel));
+ }
+
+ public byte getByte(String columnLabel) throws SQLException {
+ return this.getByte(this.findColumn(columnLabel));
+ }
+
+ public short getShort(String columnLabel) throws SQLException {
+ return this.getShort(this.findColumn(columnLabel));
+ }
+
+ public int getInt(String columnLabel) throws SQLException {
+ return this.getInt(this.findColumn(columnLabel));
+ }
+
+ public long getLong(String columnLabel) throws SQLException {
+ return this.getLong(this.findColumn(columnLabel));
+ }
+
+ public float getFloat(String columnLabel) throws SQLException {
+ return this.getFloat(this.findColumn(columnLabel));
+ }
+
+ public double getDouble(String columnLabel) throws SQLException {
+ return this.getDouble(this.findColumn(columnLabel));
+ }
+
+ /*
+ * used by spark
+ */
+ @Deprecated
+ public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
+ return this.getBigDecimal(this.findColumn(columnLabel), scale);
+ }
+
+ public byte[] getBytes(String columnLabel) throws SQLException {
+ return this.getBytes(this.findColumn(columnLabel));
+ }
+
+ public Date getDate(String columnLabel) throws SQLException {
+ return this.getDate(this.findColumn(columnLabel));
+ }
+
+ public Time getTime(String columnLabel) throws SQLException {
+ return this.getTime(this.findColumn(columnLabel));
+ }
+
+ public Timestamp getTimestamp(String columnLabel) throws SQLException {
+ return this.getTimestamp(this.findColumn(columnLabel));
+ }
+
+ public InputStream getAsciiStream(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ @Deprecated
+ public InputStream getUnicodeStream(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public InputStream getBinaryStream(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public SQLWarning getWarnings() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void clearWarnings() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public String getCursorName() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public ResultSetMetaData getMetaData() throws SQLException {
+ return new TSDBResultSetMetaData(this.columnMetaDataList);
+ }
+
+ public Object getObject(int columnIndex) throws SQLException {
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ return this.rowData.get(colIndex);
+ } else {
+ return this.blockData.get(colIndex);
+ }
+ }
+
+ public Object getObject(String columnLabel) throws SQLException {
+ return this.getObject(this.findColumn(columnLabel));
+ }
+
+ public int findColumn(String columnLabel) throws SQLException {
+ Iterator colMetaDataIt = this.columnMetaDataList.iterator();
+ while (colMetaDataIt.hasNext()) {
+ ColumnMetaData colMetaData = colMetaDataIt.next();
+ if (colMetaData.getColName() != null && colMetaData.getColName().equalsIgnoreCase(columnLabel)) {
+ return colMetaData.getColIndex() + 1;
+ }
+ }
+ throw new SQLException(TSDBConstants.INVALID_VARIABLES);
+ }
+
+ public Reader getCharacterStream(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public Reader getCharacterStream(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ /*
+ * used by spark
+ */
+ public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
+ int colIndex = getTrueColumnIndex(columnIndex);
+
+ if (!this.getBatchFetch()) {
+ this.lastWasNull = this.rowData.wasNull(colIndex);
+ return new BigDecimal(this.rowData.getLong(colIndex, this.columnMetaDataList.get(colIndex).getColType()));
+ } else {
+ return new BigDecimal(this.blockData.getLong(colIndex));
+ }
+ }
+
+ public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
+ return this.getBigDecimal(this.findColumn(columnLabel));
+ }
+
+ public boolean isBeforeFirst() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean isAfterLast() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean isFirst() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean isLast() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void beforeFirst() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void afterLast() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean first() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean last() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public int getRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean absolute(int row) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean relative(int rows) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean previous() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void setFetchDirection(int direction) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public int getFetchDirection() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void setFetchSize(int rows) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public int getFetchSize() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public int getType() throws SQLException {
+ return ResultSet.TYPE_FORWARD_ONLY;
+ }
+
+ public int getConcurrency() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean rowUpdated() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean rowInserted() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean rowDeleted() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNull(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateByte(int columnIndex, byte x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBoolean(int columnIndex, boolean x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateShort(int columnIndex, short x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateByte(int columnIndex, byte x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateInt(int columnIndex, int x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateShort(int columnIndex, short x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateLong(int columnIndex, long x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateInt(int columnIndex, int x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateFloat(int columnIndex, float x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateLong(int columnIndex, long x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateDouble(int columnIndex, double x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateFloat(int columnIndex, float x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateDouble(int columnIndex, double x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateString(int columnIndex, String x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBytes(int columnIndex, byte[] x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateString(int columnIndex, String x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateDate(int columnIndex, Date x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBytes(int columnIndex, byte[] x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateTime(int columnIndex, Time x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateDate(int columnIndex, Date x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateTime(int columnIndex, Time x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateAsciiStream(int columnIndex, InputStream x, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBinaryStream(int columnIndex, InputStream x, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateObject(int columnIndex, Object x, int scaleOrLength) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateCharacterStream(int columnIndex, Reader x, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateObject(int columnIndex, Object x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateObject(int columnIndex, Object x, int scaleOrLength) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateNull(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateObject(int columnIndex, Object x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBoolean(String columnLabel, boolean x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateNull(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateByte(String columnLabel, byte x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBoolean(String columnLabel, boolean x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateShort(String columnLabel, short x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateByte(String columnLabel, byte x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateInt(String columnLabel, int x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateShort(String columnLabel, short x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateLong(String columnLabel, long x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateInt(String columnLabel, int x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateFloat(String columnLabel, float x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateLong(String columnLabel, long x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateDouble(String columnLabel, double x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateFloat(String columnLabel, float x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateDouble(String columnLabel, double x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateString(String columnLabel, String x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBytes(String columnLabel, byte[] x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateString(String columnLabel, String x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateDate(String columnLabel, Date x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBytes(String columnLabel, byte[] x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateTime(String columnLabel, Time x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateDate(String columnLabel, Date x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateTime(String columnLabel, Time x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateAsciiStream(String columnLabel, InputStream x, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBinaryStream(String columnLabel, InputStream x, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateAsciiStream(String columnLabel, InputStream x, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateCharacterStream(String columnLabel, Reader reader, int length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBinaryStream(String columnLabel, InputStream x, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateObject(String columnLabel, Object x, int scaleOrLength) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateCharacterStream(String columnLabel, Reader reader, int length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateObject(String columnLabel, Object x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateObject(String columnLabel, Object x, int scaleOrLength) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void insertRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateObject(String columnLabel, Object x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void insertRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void deleteRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void refreshRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void deleteRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void cancelRowUpdates() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void refreshRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void moveToInsertRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void cancelRowUpdates() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void moveToCurrentRow() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void moveToInsertRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Statement getStatement() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void moveToCurrentRow() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Object getObject(int columnIndex, Map> map) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Statement getStatement() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Ref getRef(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Object getObject(int columnIndex, Map> map) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Blob getBlob(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Ref getRef(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Clob getClob(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Blob getBlob(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Array getArray(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Clob getClob(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Object getObject(String columnLabel, Map> map) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Array getArray(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Ref getRef(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Object getObject(String columnLabel, Map> map) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Blob getBlob(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Ref getRef(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Clob getClob(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Blob getBlob(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Array getArray(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Clob getClob(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Date getDate(int columnIndex, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Array getArray(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Date getDate(String columnLabel, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Date getDate(int columnIndex, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Time getTime(int columnIndex, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Date getDate(String columnLabel, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Time getTime(String columnLabel, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Time getTime(int columnIndex, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Time getTime(String columnLabel, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public URL getURL(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public URL getURL(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public URL getURL(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateRef(int columnIndex, Ref x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateRef(String columnLabel, Ref x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBlob(int columnIndex, Blob x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBlob(String columnLabel, Blob x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateClob(int columnIndex, Clob x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateClob(String columnLabel, Clob x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateArray(int columnIndex, Array x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateArray(String columnLabel, Array x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public RowId getRowId(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public RowId getRowId(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateRowId(int columnIndex, RowId x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateRowId(String columnLabel, RowId x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public int getHoldability() throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public boolean isClosed() throws SQLException {
- boolean isClosed = true;
- if (jniConnector != null) {
- isClosed = jniConnector.isResultsetClosed();
- }
- return isClosed;
- }
-
- public void updateNString(int columnIndex, String nString) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNString(String columnLabel, String nString) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public NClob getNClob(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public NClob getNClob(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public SQLXML getSQLXML(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public SQLXML getSQLXML(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public String getNString(int columnIndex) throws SQLException {
- int colIndex = getTrueColumnIndex(columnIndex);
- return (String) rowData.get(colIndex);
- }
-
- public String getNString(String columnLabel) throws SQLException {
- return (String) this.getString(columnLabel);
- }
-
- public Reader getNCharacterStream(int columnIndex) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public Reader getNCharacterStream(String columnLabel) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
-
- public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public URL getURL(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateRef(int columnIndex, Ref x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateRef(String columnLabel, Ref x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBlob(int columnIndex, Blob x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBlob(String columnLabel, Blob x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateClob(int columnIndex, Clob x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateClob(String columnLabel, Clob x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateArray(int columnIndex, Array x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateArray(String columnLabel, Array x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public RowId getRowId(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public RowId getRowId(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateRowId(int columnIndex, RowId x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateRowId(String columnLabel, RowId x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public int getHoldability() throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public boolean isClosed() throws SQLException {
+ boolean isClosed = true;
+ if (jniConnector != null) {
+ isClosed = jniConnector.isResultsetClosed();
+ }
+ return isClosed;
+ }
+
+ public void updateNString(int columnIndex, String nString) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNString(String columnLabel, String nString) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNClob(int columnIndex, NClob nClob) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNClob(String columnLabel, NClob nClob) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public NClob getNClob(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public NClob getNClob(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public SQLXML getSQLXML(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public SQLXML getSQLXML(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public String getNString(int columnIndex) throws SQLException {
+ int colIndex = getTrueColumnIndex(columnIndex);
+ return (String) rowData.get(colIndex);
+ }
+
+ public String getNString(String columnLabel) throws SQLException {
+ return (String) this.getString(columnLabel);
+ }
+
+ public Reader getNCharacterStream(int columnIndex) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public Reader getNCharacterStream(String columnLabel) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateAsciiStream(int columnIndex, InputStream x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBinaryStream(int columnIndex, InputStream x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateCharacterStream(int columnIndex, Reader x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateAsciiStream(String columnLabel, InputStream x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBinaryStream(String columnLabel, InputStream x, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateCharacterStream(String columnLabel, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateClob(int columnIndex, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateClob(String columnLabel, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateNCharacterStream(String columnLabel, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
+
+ public void updateCharacterStream(String columnLabel, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateClob(int columnIndex, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateClob(String columnLabel, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateClob(int columnIndex, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateNClob(int columnIndex, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateClob(String columnLabel, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public void updateNClob(String columnLabel, Reader reader) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateNClob(int columnIndex, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public T getObject(int columnIndex, Class type) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public void updateNClob(String columnLabel, Reader reader) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- public T getObject(String columnLabel, Class type) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
- }
+ public T getObject(int columnIndex, Class type) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- private int getTrueColumnIndex(int columnIndex) throws SQLException {
- if (columnIndex < this.COLUMN_INDEX_START_VALUE) {
- throw new SQLException("Column Index out of range, " + columnIndex + " < " + this.COLUMN_INDEX_START_VALUE);
- }
-
- int numOfCols = this.columnMetaDataList.size();
- if (columnIndex > numOfCols) {
- throw new SQLException("Column Index out of range, " + columnIndex + " > " + numOfCols);
- }
+ public T getObject(String columnLabel, Class type) throws SQLException {
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ }
- return columnIndex - 1;
- }
+ private int getTrueColumnIndex(int columnIndex) throws SQLException {
+ if (columnIndex < this.COLUMN_INDEX_START_VALUE) {
+ throw new SQLException("Column Index out of range, " + columnIndex + " < " + this.COLUMN_INDEX_START_VALUE);
+ }
+
+ int numOfCols = this.columnMetaDataList.size();
+ if (columnIndex > numOfCols) {
+ throw new SQLException("Column Index out of range, " + columnIndex + " > " + numOfCols);
+ }
+
+ return columnIndex - 1;
+ }
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
index 381f1d3622a393cd47361c6e367e310d29fc5d72..e7317b8e1d6eb2744c50a5bf1d106c7b687cc965 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
@@ -52,12 +52,18 @@ public class TSDBStatement implements Statement {
this.isClosed = false;
}
+ @Override
public T unwrap(Class iface) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
}
+ @Override
public boolean isWrapperFor(Class> iface) throws SQLException {
- throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return iface.isInstance(this);
}
public ResultSet executeQuery(String sql) throws SQLException {
@@ -130,10 +136,15 @@ public class TSDBStatement implements Statement {
}
public void setMaxFieldSize(int max) throws SQLException {
+ if (isClosed())
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
+
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
public int getMaxRows() throws SQLException {
+ if (isClosed())
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
// always set maxRows to zero, meaning unlimitted rows in a resultSet
return 0;
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
index 1aa3d5b3cefe2524f0246b500af6687a79d6b20c..38d3f2b6aa21427647d108038fdd616927221520 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
@@ -15,28 +15,28 @@ import java.util.List;
import java.util.Map;
public class RestfulResultSet implements ResultSet {
- private static final String RESULT_SET_IS_CLOSED = "resultSet is closed.";
private volatile boolean isClosed;
private int pos = -1;
private final String database;
private final Statement statement;
// data
- private ArrayList> resultSet;
+ private ArrayList> resultSet = new ArrayList<>();
// meta
- private ArrayList columnNames;
- private ArrayList columns;
+ private ArrayList columnNames = new ArrayList<>();
+ private ArrayList columns = new ArrayList<>();
private RestfulResultSetMetaData metaData;
/**
- * 由一个result的Json构造结果集,对应执行show databases,show tables等这些语句,返回结果集,但无法获取结果集对应的meta,统一当成String处理
+ * 由一个result的Json构造结果集,对应执行show databases, show tables等这些语句,返回结果集,但无法获取结果集对应的meta,统一当成String处理
+ *
+ * @param resultJson: 包含data信息的结果集,有sql返回的结果集
***/
public RestfulResultSet(String database, Statement statement, JSONObject resultJson) {
this.database = database;
this.statement = statement;
// row data
JSONArray data = resultJson.getJSONArray("data");
- resultSet = new ArrayList<>();
int columnIndex = 0;
for (; columnIndex < data.size(); columnIndex++) {
ArrayList oneRow = new ArrayList<>();
@@ -48,15 +48,13 @@ public class RestfulResultSet implements ResultSet {
}
// column only names
- columnNames = new ArrayList<>();
- columns = new ArrayList<>();
JSONArray head = resultJson.getJSONArray("head");
for (int i = 0; i < head.size(); i++) {
String name = head.getString(i);
columnNames.add(name);
columns.add(new Field(name, "", 0, ""));
}
- this.metaData = new RestfulResultSetMetaData(this.database, columns);
+ this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
}
/**
@@ -78,7 +76,7 @@ public class RestfulResultSet implements ResultSet {
}
}
this.columns = newColumns;
- this.metaData = new RestfulResultSetMetaData(this.database, this.columns);
+ this.metaData = new RestfulResultSetMetaData(this.database, this.columns, this);
}
public Field findField(String columnName, List fieldJsonList) {
@@ -91,7 +89,6 @@ public class RestfulResultSet implements ResultSet {
}
}
}
-
return null;
}
@@ -112,10 +109,9 @@ public class RestfulResultSet implements ResultSet {
@Override
public boolean next() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- if (pos < resultSet.size() - 1) {
- pos++;
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ pos++;
+ if (pos <= resultSet.size() - 1) {
return true;
}
return false;
@@ -131,37 +127,38 @@ public class RestfulResultSet implements ResultSet {
@Override
public boolean wasNull() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return resultSet.isEmpty();
}
@Override
public String getString(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
if (columnIndex > resultSet.get(pos).size()) {
throw new SQLException(TSDBConstants.WrapErrMsg("Column Index out of range, " + columnIndex + " > " + resultSet.get(pos).size()));
}
- return resultSet.get(pos).get(columnIndex - 1).toString();
+
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return resultSet.get(pos).get(columnIndex).toString();
}
+
@Override
public boolean getBoolean(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- String result = getString(columnIndex);
- if (!(result.equals("true") || result.equals("false"))) {
- throw new SQLException("not boolean value");
- }
- return result.equals("true");
+ columnIndex = getTrueColumnIndex(columnIndex);
+ int result = getInt(columnIndex);
+ return result == 0 ? false : true;
}
@Override
public byte getByte(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -169,40 +166,55 @@ public class RestfulResultSet implements ResultSet {
@Override
public short getShort(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- return Short.parseShort(getString(columnIndex));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return Short.parseShort(resultSet.get(pos).get(columnIndex).toString());
}
@Override
public int getInt(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
- return Integer.parseInt(getString(columnIndex));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return Integer.parseInt(resultSet.get(pos).get(columnIndex).toString());
}
@Override
public long getLong(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- return Long.parseLong(getString(columnIndex));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return Long.parseLong(resultSet.get(pos).get(columnIndex).toString());
}
@Override
public float getFloat(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- return Float.parseFloat(getString(columnIndex));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return Float.parseFloat(resultSet.get(pos).get(columnIndex).toString());
}
@Override
public double getDouble(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ columnIndex = getTrueColumnIndex(columnIndex);
+ return Double.parseDouble(resultSet.get(pos).get(columnIndex).toString());
+ }
+
+ private int getTrueColumnIndex(int columnIndex) throws SQLException {
+ if (columnIndex < 1) {
+ throw new SQLException("Column Index out of range, " + columnIndex + " < 1");
+ }
+
+ int numOfCols = resultSet.get(pos).size();
+ if (columnIndex > numOfCols) {
+ throw new SQLException("Column Index out of range, " + columnIndex + " > " + numOfCols);
+ }
- return Double.parseDouble(getString(columnIndex));
+ return columnIndex - 1;
}
/*******************************************************************************************************************/
@@ -210,7 +222,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -218,7 +230,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public byte[] getBytes(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -226,7 +238,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public Date getDate(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -234,7 +246,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public Time getTime(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -242,17 +254,18 @@ public class RestfulResultSet implements ResultSet {
@Override
public Timestamp getTimestamp(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- String strDate = getString(columnIndex);
- strDate = strDate.substring(1, strDate.length() - 1);
+ columnIndex = getTrueColumnIndex(columnIndex);
+ String strDate = resultSet.get(pos).get(columnIndex).toString();
+// strDate = strDate.substring(1, strDate.length() - 1);
return Timestamp.valueOf(strDate);
}
@Override
public InputStream getAsciiStream(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -260,7 +273,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public InputStream getUnicodeStream(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -268,17 +281,16 @@ public class RestfulResultSet implements ResultSet {
@Override
public InputStream getBinaryStream(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
+ /*************************************************************************************************************/
+
@Override
public String getString(String columnLabel) throws SQLException {
- if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- return getString(findColumn(columnLabel) + 1);
+ return getString(findColumn(columnLabel));
}
@Override
@@ -338,53 +350,44 @@ public class RestfulResultSet implements ResultSet {
@Override
public Timestamp getTimestamp(String columnLabel) throws SQLException {
- if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
- return Timestamp.valueOf(getString(findColumn(columnLabel)));
+ return getTimestamp(findColumn(columnLabel));
}
@Override
public InputStream getAsciiStream(String columnLabel) throws SQLException {
- if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return getAsciiStream(findColumn(columnLabel));
}
@Override
public InputStream getUnicodeStream(String columnLabel) throws SQLException {
- if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return getUnicodeStream(findColumn(columnLabel));
}
@Override
public InputStream getBinaryStream(String columnLabel) throws SQLException {
- if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return getBinaryStream(findColumn(columnLabel));
}
+ /*************************************************************************************************************/
+
@Override
public SQLWarning getWarnings() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return null;
}
@Override
public void clearWarnings() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return;
}
@Override
public String getCursorName() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -392,7 +395,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public ResultSetMetaData getMetaData() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return this.metaData;
}
@@ -400,7 +403,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public Object getObject(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -413,15 +416,18 @@ public class RestfulResultSet implements ResultSet {
@Override
public int findColumn(String columnLabel) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- return columnNames.indexOf(columnLabel);
+ int columnIndex = columnNames.indexOf(columnLabel);
+ if (columnIndex == -1)
+ throw new SQLException("cannot find Column in resultSet");
+ return columnIndex + 1;
}
@Override
public Reader getCharacterStream(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -429,7 +435,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public Reader getCharacterStream(String columnLabel) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -437,7 +443,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -445,7 +451,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -453,78 +459,132 @@ public class RestfulResultSet implements ResultSet {
@Override
public boolean isBeforeFirst() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ return this.pos == -1 && this.resultSet.size() != 0;
}
@Override
public boolean isAfterLast() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ return this.pos >= resultSet.size() && this.resultSet.size() != 0;
}
@Override
public boolean isFirst() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return this.pos == 0;
}
@Override
public boolean isLast() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ if (this.resultSet.size() == 0)
+ return false;
+ return this.pos == (this.resultSet.size() - 1);
}
@Override
public void beforeFirst() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ synchronized (this) {
+ if (this.resultSet.size() > 0) {
+ this.pos = -1;
+ }
+ }
}
@Override
public void afterLast() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ synchronized (this) {
+ if (this.resultSet.size() > 0) {
+ this.pos = this.resultSet.size();
+ }
+ }
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@Override
public boolean first() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ if (this.resultSet.size() == 0)
+ return false;
+
+ synchronized (this) {
+ this.pos = 0;
+ }
+ return true;
}
@Override
public boolean last() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ if (this.resultSet.size() == 0)
+ return false;
+ synchronized (this) {
+ this.pos = this.resultSet.size() - 1;
+ }
+ return true;
}
@Override
public int getRow() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
-
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ int row;
+ synchronized (this) {
+ if (this.pos < 0 || this.pos >= this.resultSet.size())
+ return 0;
+ row = this.pos + 1;
+ }
+ return row;
}
@Override
public boolean absolute(int row) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+// if (this.resultSet.size() == 0)
+// return false;
+//
+// if (row == 0) {
+// beforeFirst();
+// return false;
+// } else if (row == 1) {
+// return first();
+// } else if (row == -1) {
+// return last();
+// } else if (row > this.resultSet.size()) {
+// afterLast();
+// return false;
+// } else {
+// if (row < 0) {
+// // adjust to reflect after end of result set
+// int newRowPosition = this.resultSet.size() + row + 1;
+// if (newRowPosition <= 0) {
+// beforeFirst();
+// return false;
+// } else {
+// return absolute(newRowPosition);
+// }
+// } else {
+// row--; // adjust for index difference
+// this.pos = row;
+// return true;
+// }
+// }
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -532,7 +592,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public boolean relative(int rows) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -540,7 +600,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public boolean previous() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@@ -548,17 +608,18 @@ public class RestfulResultSet implements ResultSet {
@Override
public void setFetchDirection(int direction) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
- if (direction != ResultSet.FETCH_REVERSE || direction != ResultSet.FETCH_REVERSE || direction != ResultSet.FETCH_UNKNOWN)
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+ if ((direction != ResultSet.FETCH_FORWARD) && (direction != ResultSet.FETCH_REVERSE) && (direction != ResultSet.FETCH_UNKNOWN))
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ if (!(getType() == ResultSet.TYPE_FORWARD_ONLY && direction == ResultSet.FETCH_FORWARD))
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@Override
public int getFetchDirection() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return ResultSet.FETCH_FORWARD;
}
@@ -566,17 +627,17 @@ public class RestfulResultSet implements ResultSet {
@Override
public void setFetchSize(int rows) throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
if (rows < 0)
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@Override
public int getFetchSize() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return this.resultSet.size();
}
@@ -834,7 +895,7 @@ public class RestfulResultSet implements ResultSet {
@Override
public Statement getStatement() throws SQLException {
if (isClosed())
- throw new SQLException(TSDBConstants.WrapErrMsg(RESULT_SET_IS_CLOSED));
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
return this.statement;
}
@@ -992,14 +1053,15 @@ public class RestfulResultSet implements ResultSet {
@Override
public int getHoldability() throws SQLException {
+ if (isClosed())
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
return ResultSet.HOLD_CURSORS_OVER_COMMIT;
}
@Override
public boolean isClosed() throws SQLException {
- return false;
- //TODO: SQLFeature Not Supported
-// throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ return isClosed;
}
@Override
@@ -1224,11 +1286,21 @@ public class RestfulResultSet implements ResultSet {
@Override
public T unwrap(Class iface) throws SQLException {
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ if (isClosed())
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
}
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
- throw new SQLFeatureNotSupportedException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
+ if (isClosed())
+ throw new SQLException(TSDBConstants.WrapErrMsg(TSDBConstants.RESULT_SET_IS_CLOSED));
+
+ return iface.isInstance(this);
}
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
index 1af3088b172f751ef40be5dd92b205949bc009d6..44a02f486b22063cabb8950c21d3a9f55bfc70c8 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
@@ -1,17 +1,22 @@
package com.taosdata.jdbc.rs;
+import com.taosdata.jdbc.TSDBConstants;
+
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Timestamp;
import java.util.ArrayList;
public class RestfulResultSetMetaData implements ResultSetMetaData {
private final String database;
private ArrayList fields;
+ private final RestfulResultSet resultSet;
- public RestfulResultSetMetaData(String database, ArrayList fields) {
+ public RestfulResultSetMetaData(String database, ArrayList fields, RestfulResultSet resultSet) {
this.database = database;
this.fields = fields;
+ this.resultSet = resultSet;
}
@Override
@@ -26,13 +31,12 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public boolean isCaseSensitive(int column) throws SQLException {
- //TODO
return false;
}
@Override
public boolean isSearchable(int column) throws SQLException {
- return false;
+ return true;
}
@Override
@@ -42,17 +46,30 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public int isNullable(int column) throws SQLException {
+ if (column == 1)
+ return ResultSetMetaData.columnNoNulls;
return ResultSetMetaData.columnNullable;
}
@Override
public boolean isSigned(int column) throws SQLException {
- return false;
+ String type = this.fields.get(column - 1).type.toUpperCase();
+ switch (type) {
+ case "TINYINT":
+ case "SMALLINT":
+ case "INT":
+ case "BIGINT":
+ case "FLOAT":
+ case "DOUBLE":
+ return true;
+ default:
+ return false;
+ }
}
@Override
public int getColumnDisplaySize(int column) throws SQLException {
- return 0;
+ return this.fields.get(column - 1).length;
}
@Override
@@ -62,27 +79,46 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public String getColumnName(int column) throws SQLException {
- return null;
+ return fields.get(column - 1).name;
}
@Override
public String getSchemaName(int column) throws SQLException {
- return this.database;
+ return "";
}
@Override
public int getPrecision(int column) throws SQLException {
- return 0;
+ String type = this.fields.get(column - 1).type.toUpperCase();
+ switch (type) {
+ case "FLOAT":
+ return 5;
+ case "DOUBLE":
+ return 9;
+ case "BINARY":
+ case "NCHAR":
+ return this.fields.get(column - 1).length;
+ default:
+ return 0;
+ }
}
@Override
public int getScale(int column) throws SQLException {
- return 0;
+ String type = this.fields.get(column - 1).type.toUpperCase();
+ switch (type) {
+ case "FLOAT":
+ return 5;
+ case "DOUBLE":
+ return 9;
+ default:
+ return 0;
+ }
}
@Override
public String getTableName(int column) throws SQLException {
- return null;
+ return "";
}
@Override
@@ -92,17 +128,41 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public int getColumnType(int column) throws SQLException {
- return 0;
+ String type = this.fields.get(column - 1).type.toUpperCase();
+ switch (type) {
+ case "BOOL":
+ return java.sql.Types.BOOLEAN;
+ case "TINYINT":
+ return java.sql.Types.TINYINT;
+ case "SMALLINT":
+ return java.sql.Types.SMALLINT;
+ case "INT":
+ return java.sql.Types.INTEGER;
+ case "BIGINT":
+ return java.sql.Types.BIGINT;
+ case "FLOAT":
+ return java.sql.Types.FLOAT;
+ case "DOUBLE":
+ return java.sql.Types.DOUBLE;
+ case "BINARY":
+ return java.sql.Types.BINARY;
+ case "TIMESTAMP":
+ return java.sql.Types.TIMESTAMP;
+ case "NCHAR":
+ return java.sql.Types.NCHAR;
+ }
+ throw new SQLException(TSDBConstants.INVALID_VARIABLES);
}
@Override
public String getColumnTypeName(int column) throws SQLException {
- return null;
+ String type = fields.get(column - 1).type;
+ return type.toUpperCase();
}
@Override
public boolean isReadOnly(int column) throws SQLException {
- return false;
+ return true;
}
@Override
@@ -117,16 +177,43 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public String getColumnClassName(int column) throws SQLException {
- return null;
+ String type = this.fields.get(column - 1).type;
+ String columnClassName = "";
+ switch (type) {
+ case "BOOL":
+ return Boolean.class.getName();
+ case "TINYINT":
+ case "SMALLINT":
+ return Short.class.getName();
+ case "INT":
+ return Integer.class.getName();
+ case "BIGINT":
+ return Long.class.getName();
+ case "FLOAT":
+ return Float.class.getName();
+ case "DOUBLE":
+ return Double.class.getName();
+ case "TIMESTAMP":
+ return Timestamp.class.getName();
+ case "BINARY":
+ case "NCHAR":
+ return String.class.getName();
+ }
+ return columnClassName;
}
@Override
public T unwrap(Class iface) throws SQLException {
- return null;
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
}
@Override
public boolean isWrapperFor(Class> iface) throws SQLException {
- return false;
+ return iface.isInstance(this);
}
+
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
index 8b2276fbb055cd18c86173f387fb7c93e296fe43..14ea3180924a8b23055ff610a8f7db5a70522039 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
@@ -14,7 +14,6 @@ import java.util.stream.Collectors;
public class RestfulStatement implements Statement {
- private static final String STATEMENT_CLOSED = "Statement already closed.";
private boolean closed;
private String database;
private final RestfulConnection conn;
@@ -65,37 +64,18 @@ public class RestfulStatement implements Statement {
public ResultSet executeQuery(String sql) throws SQLException {
if (isClosed())
throw new SQLException("statement already closed");
- if (!SqlSyntaxValidator.isSelectSql(sql))
- throw new SQLException("not a select sql for executeQuery: " + sql);
+ if (!SqlSyntaxValidator.isValidForExecuteQuery(sql))
+ throw new SQLException("not a valid sql for executeQuery: " + sql);
final String url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sql";
- // row data
- String result = HttpClientPoolUtil.execute(url, sql);
- JSONObject resultJson = JSON.parseObject(result);
- if (resultJson.getString("status").equals("error")) {
- throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + resultJson.getString("desc") + "\n" + "error code: " + resultJson.getString("code")));
+ if (SqlSyntaxValidator.isDatabaseUnspecifiedQuery(sql)) {
+ return executeOneQuery(url, sql);
}
- // parse table name from sql
- String[] tableIdentifiers = parseTableIdentifier(sql);
- if (tableIdentifiers != null) {
- List fieldJsonList = new ArrayList<>();
- for (String tableIdentifier : tableIdentifiers) {
- // field meta
- String fields = HttpClientPoolUtil.execute(url, "DESCRIBE " + tableIdentifier);
- JSONObject fieldJson = JSON.parseObject(fields);
- if (fieldJson.getString("status").equals("error")) {
- throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + fieldJson.getString("desc") + "\n" + "error code: " + fieldJson.getString("code")));
- }
- fieldJsonList.add(fieldJson);
- }
- this.resultSet = new RestfulResultSet(database, this, resultJson, fieldJsonList);
- } else {
- this.resultSet = new RestfulResultSet(database, this, resultJson);
- }
-
- this.affectedRows = 0;
- return resultSet;
+ if (this.database == null || this.database.isEmpty())
+ throw new SQLException("Database not specified or available");
+ HttpClientPoolUtil.execute(url, "use " + this.database);
+ return executeOneQuery(url, sql);
}
@Override
@@ -105,19 +85,15 @@ public class RestfulStatement implements Statement {
if (!SqlSyntaxValidator.isValidForExecuteUpdate(sql))
throw new SQLException("not a valid sql for executeUpdate: " + sql);
- if (this.database == null)
- throw new SQLException("Database not specified or available");
-
- final String url = "http://" + conn.getHost().trim() + ":" + conn.getPort() + "/rest/sql";
-// HttpClientPoolUtil.execute(url, "use " + conn.getDatabase());
- String result = HttpClientPoolUtil.execute(url, sql);
- JSONObject jsonObject = JSON.parseObject(result);
- if (jsonObject.getString("status").equals("error")) {
- throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + jsonObject.getString("desc") + "\n" + "error code: " + jsonObject.getString("code")));
+ final String url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sql";
+ if (SqlSyntaxValidator.isDatabaseUnspecifiedUpdate(sql)) {
+ return executeOneUpdate(url, sql);
}
- this.resultSet = null;
- this.affectedRows = Integer.parseInt(jsonObject.getString("rows"));
- return this.affectedRows;
+
+ if (this.database == null || this.database.isEmpty())
+ throw new SQLException("Database not specified or available");
+ HttpClientPoolUtil.execute(url, "use " + this.database);
+ return executeOneUpdate(url, sql);
}
@Override
@@ -131,14 +107,14 @@ public class RestfulStatement implements Statement {
@Override
public int getMaxFieldSize() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return TSDBConstants.maxFieldSize;
}
@Override
public void setMaxFieldSize(int max) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
if (max < 0)
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
// nothing to do
@@ -147,14 +123,14 @@ public class RestfulStatement implements Statement {
@Override
public int getMaxRows() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return 0;
}
@Override
public void setMaxRows(int max) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
if (max < 0)
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
// nothing to do
@@ -163,20 +139,20 @@ public class RestfulStatement implements Statement {
@Override
public void setEscapeProcessing(boolean enable) throws SQLException {
if (isClosed())
- throw new SQLException(RestfulStatement.STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
}
@Override
public int getQueryTimeout() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return 0;
}
@Override
public void setQueryTimeout(int seconds) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
if (seconds < 0)
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
}
@@ -189,7 +165,7 @@ public class RestfulStatement implements Statement {
@Override
public SQLWarning getWarnings() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return null;
}
@@ -197,53 +173,93 @@ public class RestfulStatement implements Statement {
public void clearWarnings() throws SQLException {
// nothing to do
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
}
@Override
public void setCursorName(String name) throws SQLException {
if (isClosed())
- throw new SQLException(RestfulStatement.STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG);
}
@Override
public boolean execute(String sql) throws SQLException {
- if (isClosed()) {
+ if (isClosed())
throw new SQLException("Invalid method call on a closed statement.");
- }
+ if (!SqlSyntaxValidator.isValidForExecute(sql))
+ throw new SQLException("not a valid sql for execute: " + sql);
+
//如果执行了use操作应该将当前Statement的catalog设置为新的database
+ final String url = "http://" + conn.getHost() + ":" + conn.getPort() + "/rest/sql";
if (SqlSyntaxValidator.isUseSql(sql)) {
+ HttpClientPoolUtil.execute(url, sql);
this.database = sql.trim().replace("use", "").trim();
this.conn.setCatalog(this.database);
+ } else if (SqlSyntaxValidator.isDatabaseUnspecifiedQuery(sql)) {
+ executeOneQuery(url, sql);
+ } else if (SqlSyntaxValidator.isDatabaseUnspecifiedUpdate(sql)) {
+ executeOneUpdate(url, sql);
+ } else {
+ if (SqlSyntaxValidator.isValidForExecuteQuery(sql)) {
+ executeQuery(sql);
+ } else {
+ executeUpdate(sql);
+ }
}
- if (this.database == null)
- throw new SQLException("Database not specified or available");
- if (SqlSyntaxValidator.isSelectSql(sql)) {
- executeQuery(sql);
- } else if (SqlSyntaxValidator.isShowSql(sql) || SqlSyntaxValidator.isDescribeSql(sql)) {
- final String url = "http://" + conn.getHost().trim() + ":" + conn.getPort() + "/rest/sql";
- if (!SqlSyntaxValidator.isShowDatabaseSql(sql)) {
- HttpClientPoolUtil.execute(url, "use " + conn.getDatabase());
- }
- String result = HttpClientPoolUtil.execute(url, sql);
- JSONObject resultJson = JSON.parseObject(result);
- if (resultJson.getString("status").equals("error")) {
- throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + resultJson.getString("desc") + "\n" + "error code: " + resultJson.getString("code")));
+ return true;
+ }
+
+ private ResultSet executeOneQuery(String url, String sql) throws SQLException {
+ if (!SqlSyntaxValidator.isValidForExecuteQuery(sql))
+ throw new SQLException("not a select sql for executeQuery: " + sql);
+
+ // row data
+ String result = HttpClientPoolUtil.execute(url, sql);
+ JSONObject resultJson = JSON.parseObject(result);
+ if (resultJson.getString("status").equals("error")) {
+ throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + resultJson.getString("desc") + "\n" + "error code: " + resultJson.getString("code")));
+ }
+ // parse table name from sql
+ String[] tableIdentifiers = parseTableIdentifier(sql);
+ if (tableIdentifiers != null) {
+ List fieldJsonList = new ArrayList<>();
+ for (String tableIdentifier : tableIdentifiers) {
+ // field meta
+ String fields = HttpClientPoolUtil.execute(url, "DESCRIBE " + tableIdentifier);
+ JSONObject fieldJson = JSON.parseObject(fields);
+ if (fieldJson.getString("status").equals("error")) {
+ throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + fieldJson.getString("desc") + "\n" + "error code: " + fieldJson.getString("code")));
+ }
+ fieldJsonList.add(fieldJson);
}
- this.resultSet = new RestfulResultSet(database, this, resultJson);
+ this.resultSet = new RestfulResultSet(database, this, resultJson, fieldJsonList);
} else {
- executeUpdate(sql);
+ this.resultSet = new RestfulResultSet(database, this, resultJson);
}
+ this.affectedRows = 0;
+ return resultSet;
+ }
- return true;
+ private int executeOneUpdate(String url, String sql) throws SQLException {
+ if (!SqlSyntaxValidator.isValidForExecuteUpdate(sql))
+ throw new SQLException("not a valid sql for executeUpdate: " + sql);
+
+ String result = HttpClientPoolUtil.execute(url, sql);
+ JSONObject jsonObject = JSON.parseObject(result);
+ if (jsonObject.getString("status").equals("error")) {
+ throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + jsonObject.getString("desc") + "\n" + "error code: " + jsonObject.getString("code")));
+ }
+ this.resultSet = null;
+ this.affectedRows = Integer.parseInt(jsonObject.getString("rows"));
+ return this.affectedRows;
}
@Override
public ResultSet getResultSet() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return resultSet;
}
@@ -275,7 +291,7 @@ public class RestfulStatement implements Statement {
@Override
public void setFetchSize(int rows) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
if (rows < 0)
throw new SQLException(TSDBConstants.INVALID_VARIABLES);
//nothing to do
@@ -284,28 +300,28 @@ public class RestfulStatement implements Statement {
@Override
public int getFetchSize() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return 0;
}
@Override
public int getResultSetConcurrency() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return this.resultSet.getConcurrency();
}
@Override
public int getResultSetType() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return this.resultSet.getType();
}
@Override
public void addBatch(String sql) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
//TODO:
}
@@ -323,14 +339,14 @@ public class RestfulStatement implements Statement {
@Override
public Connection getConnection() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return this.conn;
}
@Override
public boolean getMoreResults(int current) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
if (resultSet == null)
return false;
@@ -388,7 +404,7 @@ public class RestfulStatement implements Statement {
@Override
public int getResultSetHoldability() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return this.resultSet.getHoldability();
}
@@ -400,28 +416,28 @@ public class RestfulStatement implements Statement {
@Override
public void setPoolable(boolean poolable) throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
//nothing to do
}
@Override
public boolean isPoolable() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return false;
}
@Override
public void closeOnCompletion() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
this.closeOnCompletion = true;
}
@Override
public boolean isCloseOnCompletion() throws SQLException {
if (isClosed())
- throw new SQLException(STATEMENT_CLOSED);
+ throw new SQLException(TSDBConstants.STATEMENT_CLOSED);
return this.closeOnCompletion;
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
index f0d92346167411ca6da78015392ba8a21286e1cf..251ca2af013e2b1c9cb314b776621455c91d9384 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/SqlSyntaxValidator.java
@@ -20,8 +20,11 @@ import java.sql.Connection;
public class SqlSyntaxValidator {
- private static final String[] updateSQL = {"insert", "update", "delete", "create", "alter", "drop", "show", "describe", "use", "import"};
- private static final String[] querySQL = {"select"};
+ private static final String[] SQL = {"select", "insert", "import", "create", "use", "alter", "drop", "set", "show", "describe"};
+ private static final String[] updateSQL = {"insert", "import", "create", "use", "alter", "drop", "set"};
+ private static final String[] querySQL = {"select", "show", "describe"};
+
+ private static final String[] databaseUnspecifiedShow = {"databases", "dnodes", "mnodes", "variables"};
private TSDBConnection tsdbConnection;
@@ -37,8 +40,38 @@ public class SqlSyntaxValidator {
return false;
}
+ public static boolean isValidForExecuteQuery(String sql) {
+ for (String prefix : querySQL) {
+ if (sql.trim().toLowerCase().startsWith(prefix))
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isValidForExecute(String sql) {
+ for (String prefix : SQL) {
+ if (sql.trim().toLowerCase().startsWith(prefix))
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isDatabaseUnspecifiedQuery(String sql) {
+ for (String databaseObj : databaseUnspecifiedShow) {
+ if (sql.trim().toLowerCase().matches("show\\s+" + databaseObj + ".*"))
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isDatabaseUnspecifiedUpdate(String sql) {
+ sql = sql.trim().toLowerCase();
+ return sql.matches("create\\s+database.*") || sql.startsWith("set") || sql.matches("drop\\s+database.*");
+ }
+
public static boolean isUseSql(String sql) {
- return sql.trim().toLowerCase().startsWith("use") || sql.trim().toLowerCase().matches("create\\s*database.*") || sql.toLowerCase().toLowerCase().matches("drop\\s*database.*");
+ return sql.trim().toLowerCase().startsWith("use");
+// || sql.trim().toLowerCase().matches("create\\s*database.*") || sql.toLowerCase().toLowerCase().matches("drop\\s*database.*");
}
public static boolean isShowSql(String sql) {
@@ -58,8 +91,9 @@ public class SqlSyntaxValidator {
return sql.trim().toLowerCase().startsWith("select");
}
-
public static boolean isShowDatabaseSql(String sql) {
return sql.trim().toLowerCase().matches("show\\s*databases");
}
+
+
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
deleted file mode 100644
index ce3735c12894807efadd1f5673fc34eee43ae01b..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BaseTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.taosdata.jdbc;
-
-import com.taosdata.jdbc.utils.TDNodes;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
-public abstract class BaseTest {
-
- private static boolean testCluster = false;
- private static TDNodes nodes = new TDNodes();
-
- @BeforeClass
- public static void setupEnv() {
- try {
- if (nodes.getTDNode(1).getTaosdPid() != null) {
- System.out.println("Kill taosd before running JDBC test");
- nodes.getTDNode(1).setRunning(1);
- nodes.stop(1);
- }
- nodes.setTestCluster(testCluster);
- nodes.deploy(1);
- nodes.start(1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @AfterClass
- public static void cleanUpEnv() {
- nodes.stop(1);
- }
-}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
deleted file mode 100644
index 4046e3edf6e1d9d62ceddaf99f73212dd1dd02c2..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package com.taosdata.jdbc;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.sql.*;
-import java.util.Properties;
-import java.util.Random;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-import static org.junit.Assert.assertEquals;
-
-public class BatchInsertTest {
-
- private Connection connection;
-
- private static String dbName = "test";
- private static String stbName = "meters";
- private static String host = "127.0.0.1";
- private static int numOfTables = 30;
- private static int numOfRecordsPerTable = 1000;
- private static long ts = 1496732686000l;
- private static String tablePrefix = "t";
-
- @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_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/", properties);
-
- Statement stmt = connection.createStatement();
- stmt.execute("drop database if exists " + dbName);
- stmt.execute("create database if not exists " + dbName);
- stmt.execute("use " + dbName);
-
- String createTableSql = "create table " + stbName + "(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))";
- stmt.execute(createTableSql);
-
- for (int i = 0; i < numOfTables; i++) {
- String loc = i % 2 == 0 ? "beijing" : "shanghai";
- String createSubTalbesSql = "create table " + tablePrefix + i + " using " + stbName + " tags(" + i + ", '" + loc + "')";
- stmt.execute(createSubTalbesSql);
- }
- stmt.close();
- }
-
- @Test
- public void testBatchInsert() throws SQLException {
- ExecutorService executorService = Executors.newFixedThreadPool(numOfTables);
- for (int i = 0; i < numOfTables; i++) {
- final int index = i;
- executorService.execute(() -> {
- try {
- long startTime = System.currentTimeMillis();
- Statement statement = connection.createStatement(); // get statement
- StringBuilder sb = new StringBuilder();
- sb.append("INSERT INTO " + tablePrefix + index + " VALUES");
- Random rand = new Random();
- for (int j = 1; j <= numOfRecordsPerTable; j++) {
- sb.append("(" + (ts + j) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ")");
- }
- statement.addBatch(sb.toString());
- statement.executeBatch();
- long endTime = System.currentTimeMillis();
- System.out.println("Thread " + index + " takes " + (endTime - startTime) + " microseconds");
- connection.commit();
- statement.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- });
- }
- executorService.shutdown();
-
- try {
- executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-
- Statement statement = connection.createStatement();
- ResultSet rs = statement.executeQuery("select * from meters");
- int num = 0;
- while (rs.next()) {
- num++;
- }
- assertEquals(num, numOfTables * numOfRecordsPerTable);
- rs.close();
- }
-
- @After
- public void close() {
- try {
- if (connection != null)
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
index f52c50ff1a6dde4709a99a0172eef2d13877d3d0..8c9b258dcdf8d4e5bb2f6cfc91fe945f3425b4d2 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
@@ -1,9 +1,7 @@
package com.taosdata.jdbc;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
+import org.junit.*;
+import org.junit.runners.MethodSorters;
import java.sql.*;
import java.util.Properties;
@@ -11,14 +9,13 @@ import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-@FixMethodOrder()
-public class PreparedStatementTest extends BaseTest {
- static Connection connection = null;
- static PreparedStatement statement = null;
+@FixMethodOrder(value = MethodSorters.NAME_ASCENDING)
+public class PreparedStatementTest {
+ static Connection connection;
+ static TSDBPreparedStatement statement;
static String dbName = "test";
static String tName = "t0";
static String host = "localhost";
- static ResultSet resSet = null;
@BeforeClass
public static void createConnection() throws SQLException {
@@ -28,19 +25,16 @@ public class PreparedStatementTest extends BaseTest {
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/", properties);
-
String sql = "drop database if exists " + dbName;
statement = (TSDBPreparedStatement) connection.prepareStatement(sql);
-
}
@Test
- public void createTableAndQuery() throws SQLException {
+ public void case001_createTableAndQuery() throws SQLException {
long ts = System.currentTimeMillis();
statement.executeUpdate("create database if not exists " + dbName);
@@ -48,141 +42,132 @@ public class PreparedStatementTest extends BaseTest {
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);
+ selectStatement.close();
}
@Test
- public void testPreparedStatement() throws SQLException {
+ public void case002_testPreparedStatement() throws SQLException {
long ts = System.currentTimeMillis() + 20000;
- PreparedStatement saveStatement = connection
- .prepareStatement("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
+ PreparedStatement saveStatement = connection.prepareStatement("insert into " + dbName + "." + tName + " values (" + ts + ", 1)");
int affectedRows = saveStatement.executeUpdate();
assertTrue(1 == affectedRows);
+ saveStatement.close();
}
@Test
- public void testSavedPreparedStatement() throws SQLException {
+ public void case003_testSavedPreparedStatement() throws SQLException {
long ts = System.currentTimeMillis();
-
- TSDBPreparedStatement saveStatement = (TSDBPreparedStatement) connection
- .prepareStatement("insert into " + dbName + "." + tName + " values (?, ?)");
-
+ 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);
+ saveStatement.close();
}
@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) {
- }
+ public void case004_testUnsupport() throws SQLException {
+
+ Assert.assertNotNull(statement.unwrap(TSDBPreparedStatement.class));
+ Assert.assertTrue(statement.isWrapperFor(TSDBPreparedStatement.class));
+
try {
- tsdbStatement.getMaxFieldSize();
+ statement.getMaxFieldSize();
} catch (SQLException e) {
}
try {
- tsdbStatement.setMaxFieldSize(0);
+ statement.setMaxFieldSize(0);
} catch (SQLException e) {
}
try {
- tsdbStatement.setEscapeProcessing(true);
+ statement.setEscapeProcessing(true);
} catch (SQLException e) {
}
try {
- tsdbStatement.cancel();
+ statement.cancel();
} catch (SQLException e) {
}
try {
- tsdbStatement.getWarnings();
+ statement.getWarnings();
} catch (SQLException e) {
}
try {
- tsdbStatement.clearWarnings();
+ statement.clearWarnings();
} catch (SQLException e) {
}
try {
- tsdbStatement.setCursorName(null);
+ statement.setCursorName(null);
} catch (SQLException e) {
}
try {
- tsdbStatement.getMoreResults();
+ statement.getMoreResults();
} catch (SQLException e) {
}
try {
- tsdbStatement.setFetchDirection(0);
+ statement.setFetchDirection(0);
} catch (SQLException e) {
}
try {
- tsdbStatement.getFetchDirection();
+ statement.getFetchDirection();
} catch (SQLException e) {
}
try {
- tsdbStatement.getResultSetConcurrency();
+ statement.getResultSetConcurrency();
} catch (SQLException e) {
}
try {
- tsdbStatement.getResultSetType();
+ statement.getResultSetType();
} catch (SQLException e) {
}
try {
- tsdbStatement.getConnection();
+ statement.getConnection();
} catch (SQLException e) {
}
try {
- tsdbStatement.getMoreResults();
+ statement.getMoreResults();
} catch (SQLException e) {
}
try {
- tsdbStatement.getGeneratedKeys();
+ statement.getGeneratedKeys();
} catch (SQLException e) {
}
try {
- tsdbStatement.executeUpdate(null, 0);
+ statement.executeUpdate(null, 0);
} catch (SQLException e) {
}
try {
- tsdbStatement.executeUpdate(null, new int[]{0});
+ statement.executeUpdate(null, new int[]{0});
} catch (SQLException e) {
}
try {
- tsdbStatement.executeUpdate(null, new String[]{"str1", "str2"});
+ statement.executeUpdate(null, new String[]{"str1", "str2"});
} catch (SQLException e) {
}
try {
- tsdbStatement.getResultSetHoldability();
+ statement.getResultSetHoldability();
} catch (SQLException e) {
}
try {
- tsdbStatement.setPoolable(true);
+ statement.setPoolable(true);
} catch (SQLException e) {
}
try {
- tsdbStatement.isPoolable();
+ statement.isPoolable();
} catch (SQLException e) {
}
try {
- tsdbStatement.closeOnCompletion();
+ statement.closeOnCompletion();
} catch (SQLException e) {
+
}
try {
- tsdbStatement.isCloseOnCompletion();
+ statement.isCloseOnCompletion();
} catch (SQLException e) {
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/QueryDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/QueryDataTest.java
index 611e21e887b1988a66019d437133d6c3f7926961..37fbc284877dbb27ecb8c9da1b752cfaff029023 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/QueryDataTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/QueryDataTest.java
@@ -6,76 +6,67 @@ import org.junit.Test;
import java.sql.*;
import java.util.Properties;
-import java.util.Random;
import static org.junit.Assert.assertEquals;
-import java.util.Properties;
-import java.util.concurrent.Executors;
-import java.util.concurrent.*;
-
-import static org.junit.Assert.assertTrue;
-public class QueryDataTest extends BaseTest {
+public class QueryDataTest {
- static Connection connection = null;
- static Statement statement = null;
+ static Connection connection;
+ static Statement statement;
static String dbName = "test";
static String stbName = "meters";
- static String host = "localhost";
- static int numOfTables = 30;
- final static int numOfRecordsPerTable = 1000;
- static long ts = 1496732686000l;
- final static String tablePrefix = "t";
+ static String host = "127.0.0.1";
@Before
- public void createDatabase() throws SQLException {
+ public void createDatabase() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
- } catch (ClassNotFoundException e) {
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("use " + dbName);
+
+ String createTableSql = "create table " + stbName + "(ts timestamp, name binary(64))";
+ statement.executeUpdate(createTableSql);
+
+ } catch (ClassNotFoundException | SQLException 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/", properties);
-
- statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("use " + dbName);
-
- String createTableSql = "create table " + stbName + "(ts timestamp, name binary(6))";
- statement.executeUpdate(createTableSql);
}
-
- @Test
- public void testQueryBinaryData() throws SQLException{
-
- String insertSql = "insert into " + stbName + " values(now, 'taosda')";
- System.out.println(insertSql);
+ @Test
+ public void testQueryBinaryData() throws SQLException {
+ String insertSql = "insert into " + stbName + " values(now, 'taosdata')";
+ System.out.println(insertSql);
statement.executeUpdate(insertSql);
String querySql = "select * from " + stbName;
- ResultSet rs = statement.executeQuery(querySql);
+ ResultSet rs = statement.executeQuery(querySql);
- while(rs.next()) {
- String name = rs.getString(2) + "001";
+ while (rs.next()) {
+ String name = rs.getString(2);
System.out.println("name = " + name);
- assertEquals(name, "taosda001");
+ assertEquals("taosdata", name);
}
- rs.close();
+ rs.close();
}
-
@After
- public void close() throws Exception {
- statement.close();
- connection.close();
- Thread.sleep(10);
+ public void close() {
+ try {
+ if (statement != null)
+ statement.close();
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
-
+
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
index 8067c547df148587766d87e204f5abad2bfb659d..3d80ff066cacfdf71f087942f11e2ee5e86b65ee 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ResultSetTest.java
@@ -1,6 +1,7 @@
package com.taosdata.jdbc;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -13,42 +14,37 @@ import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class ResultSetTest extends BaseTest {
- static Connection connection = null;
- static Statement statement = null;
+public class ResultSetTest {
+ static Connection connection;
+ static Statement statement;
static String dbName = "test";
static String tName = "t0";
static String host = "localhost";
- static ResultSet resSet = null;
+ static ResultSet resSet;
@BeforeClass
- public static void createDatabaseAndTable() throws SQLException {
+ public static void createDatabaseAndTable() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
- } catch (ClassNotFoundException e) {
+ Properties properties = new Properties();
+ 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");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.execute("use " + 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))");
+ } catch (ClassNotFoundException | SQLException 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/", 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;
+ String sql;
long ts = 1496732686000l;
int v1 = 2147483600;
long v2 = ts + 1000;
@@ -119,16 +115,8 @@ public class ResultSetTest extends BaseTest {
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!"));
- }
+ Assert.assertNotNull(resSet.unwrap(TSDBResultSet.class));
+ Assert.assertTrue(resSet.isWrapperFor(TSDBResultSet.class));
try {
resSet.getAsciiStream(0);
} catch (SQLException e) {
@@ -815,13 +803,18 @@ public class ResultSetTest extends BaseTest {
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);
+ @AfterClass
+ public static void close() {
+ try {
+ statement.executeUpdate("drop database " + dbName);
+ if (statement != null)
+ statement.close();
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
index c86a0b4c6aeeab5def76d758268b2b9e0d84b01f..0a1c548baa330edada8c393f79cc89583bea7b18 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
@@ -29,6 +29,7 @@ public class StableTest {
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
Statement statement = connection.createStatement();
+ statement.execute("drop database if exists " + dbName);
statement.execute("create database if not exists " + dbName);
statement.execute("use " + dbName);
statement.close();
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java
index a79512984e6d78fda30b1281fefe91ddea7c2434..b09482fb03f643cd183468b18bf36e50c50bf0b4 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StatementTest.java
@@ -1,6 +1,7 @@
package com.taosdata.jdbc;
import org.junit.AfterClass;
+import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -16,23 +17,22 @@ public class StatementTest {
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");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/?user=root&password=taosdata", properties);
+ statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+
} catch (ClassNotFoundException e) {
return;
}
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/?user=root&password=taosdata", properties);
-
- statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
}
@Test
@@ -49,7 +49,6 @@ public class StatementTest {
} catch (SQLException e) {
e.printStackTrace();
}
-
}
@Test
@@ -67,118 +66,46 @@ public class StatementTest {
assertEquals(false, isClosed);
}
- @Test
- public void testUnsupport() {
- 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) {
- }
+ @Test(expected = SQLException.class)
+ public void testUnsupport() throws SQLException {
+ Assert.assertNotNull(statement.unwrap(TSDBStatement.class));
+ Assert.assertTrue(statement.isWrapperFor(TSDBStatement.class));
+
+ statement.getMaxFieldSize();
+ statement.setMaxFieldSize(0);
+ statement.setEscapeProcessing(true);
+ statement.cancel();
+ statement.getWarnings();
+ statement.clearWarnings();
+ statement.setCursorName(null);
+ statement.getMoreResults();
+ statement.setFetchDirection(0);
+ statement.getFetchDirection();
+ statement.getResultSetConcurrency();
+ statement.getResultSetType();
+ statement.getConnection();
+ statement.getMoreResults();
+ statement.getGeneratedKeys();
+ statement.executeUpdate(null, 0);
+ statement.executeUpdate(null, new int[]{0});
+ statement.executeUpdate(null, new String[]{"str1", "str2"});
+ statement.getResultSetHoldability();
+ statement.setPoolable(true);
+ statement.isPoolable();
+ statement.closeOnCompletion();
+ statement.isCloseOnCompletion();
}
@AfterClass
- public static void close() throws Exception {
- if (!statement.isClosed()) {
- statement.executeUpdate("drop database if exists " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
+ public static void close() {
+ try {
+ statement.execute("drop database if exists " + dbName);
+ if (statement != null)
+ statement.close();
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
}
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
index 0a71c77d1d9dc718cc029c6a0b11ed63cd3034c1..1d8ff08db6d5f177fe74de579e1b6bb26ee35750 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SubscribeTest.java
@@ -10,36 +10,37 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
-public class SubscribeTest extends BaseTest {
- Connection connection = null;
- Statement statement = null;
+public class SubscribeTest {
+ Connection connection;
+ Statement statement;
String dbName = "test";
String tName = "t0";
String host = "localhost";
String topic = "test";
@Before
- public void createDatabase() throws SQLException {
+ public void createDatabase() {
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/", properties);
+ 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/", 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;
- String sql = "insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")";
- statement.executeUpdate(sql);
+ 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;
+ String sql = "insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")";
+ statement.executeUpdate(sql);
+ }
+
+ } catch (ClassNotFoundException | SQLException e) {
+ return;
}
}
@@ -79,10 +80,16 @@ public class SubscribeTest extends BaseTest {
}
@After
- public void close() throws Exception {
- statement.executeQuery("drop database " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
+ public void close() {
+ try {
+ statement.executeQuery("drop database " + dbName);
+ if (statement != null)
+ statement.close();
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
}
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
index 8066b38573b87d9d5b91a628b56ab5700e379113..a7657fa3e581c96cf85555b16fca5f8b4c7f8ebb 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
@@ -6,37 +6,9 @@ import java.sql.*;
import java.util.Properties;
public class TSDBDatabaseMetaDataTest {
- private TSDBDatabaseMetaData metaData;
private static final String host = "127.0.0.1";
- private Connection connection;
-
- @BeforeClass
- public void before() {
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- 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 + ":6030/?user=root&password=taosdata", properties);
- metaData = connection.getMetaData().unwrap(TSDBDatabaseMetaData.class);
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- @AfterClass
- public void after() {
- try {
- if (connection != null)
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
+ private static Connection connection;
+ private static TSDBDatabaseMetaData metaData;
@Test
public void unwrap() throws SQLException {
@@ -61,7 +33,7 @@ public class TSDBDatabaseMetaDataTest {
@Test
public void getURL() throws SQLException {
- Assert.assertEquals("jdbc:TAOS://localhost:6030/?user=root&password=taosdata", metaData.getURL());
+ Assert.assertEquals("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata", metaData.getURL());
}
@Test
@@ -975,4 +947,32 @@ public class TSDBDatabaseMetaDataTest {
public void generatedKeyAlwaysReturned() throws SQLException {
Assert.assertFalse(metaData.generatedKeyAlwaysReturned());
}
+
+ @BeforeClass
+ public static void beforeClass() {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata", properties);
+ metaData = connection.getMetaData().unwrap(TSDBDatabaseMetaData.class);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ try {
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java
index 8adcdefb2974d5817793297091eee1c2f40a52b9..445723f501a85f7c697afffb59b273bcf6a1a630 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDriverTest.java
@@ -3,9 +3,6 @@ package com.taosdata.jdbc;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
import java.sql.*;
import java.util.Properties;
@@ -27,54 +24,15 @@ public class TSDBDriverTest {
"jdbc:TAOS://:/test",
"jdbc:TAOS://localhost:0/?user=root&password=taosdata"
};
- private static boolean islibLoaded = false;
- private static boolean isTaosdActived;
private Connection conn;
- @BeforeClass
- public static void before() {
- String osName = System.getProperty("os.name").toLowerCase();
- if (!osName.equals("linux"))
- return;
- // try to load taos lib
- try {
- System.loadLibrary("taos");
- islibLoaded = true;
- } catch (UnsatisfiedLinkError error) {
- System.out.println("load tdengine lib failed.");
- error.printStackTrace();
- }
- // check taosd is activated
- try {
- String[] cmd = {"/bin/bash", "-c", "ps -ef | grep taosd | grep -v \"grep\""};
- Process exec = Runtime.getRuntime().exec(cmd);
- BufferedReader reader = new BufferedReader(new InputStreamReader(exec.getInputStream()));
- int lineCnt = 0;
- while (reader.readLine() != null) {
- lineCnt++;
- }
- if (lineCnt > 0)
- isTaosdActived = true;
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
-
@Test
public void testConnectWithJdbcURL() {
final String url = "jdbc:TAOS://localhost:6030/log?user=root&password=taosdata";
try {
- if (islibLoaded && isTaosdActived) {
- conn = DriverManager.getConnection(url);
- assertNotNull("failure - connection should not be null", conn);
- }
+ conn = DriverManager.getConnection(url);
+ assertNotNull("failure - connection should not be null", conn);
} catch (SQLException e) {
e.printStackTrace();
fail("failure - should not throw Exception");
@@ -89,10 +47,8 @@ public class TSDBDriverTest {
connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
try {
- if (islibLoaded && isTaosdActived) {
- conn = DriverManager.getConnection(jdbcUrl, connProps);
- assertNotNull("failure - connection should not be null", conn);
- }
+ conn = DriverManager.getConnection(jdbcUrl, connProps);
+ assertNotNull("failure - connection should not be null", conn);
} catch (SQLException e) {
e.printStackTrace();
fail("failure - should not throw Exception");
@@ -107,10 +63,8 @@ public class TSDBDriverTest {
connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
try {
- if (islibLoaded && isTaosdActived) {
- conn = DriverManager.getConnection(jdbcUrl, connProps);
- assertNotNull("failure - connection should not be null", conn);
- }
+ conn = DriverManager.getConnection(jdbcUrl, connProps);
+ assertNotNull("failure - connection should not be null", conn);
} catch (SQLException e) {
e.printStackTrace();
fail("failure - should not throw Exception");
@@ -207,4 +161,14 @@ public class TSDBDriverTest {
assertNull("failure - getParentLogger should be be null", new TSDBDriver().getParentLogger());
}
+ @BeforeClass
+ public static void before() {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebacf6af6b480d7d8b9364256551f4cdb0034608
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java
@@ -0,0 +1,186 @@
+package com.taosdata.jdbc;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+public class TSDBPreparedStatementTest {
+ private static final String host = "127.0.0.1";
+ private static Connection conn;
+
+ @Test
+ public void executeQuery() {
+
+ }
+
+ @Test
+ public void executeUpdate() {
+
+ }
+
+ @Test
+ public void setNull() {
+ }
+
+ @Test
+ public void setBoolean() {
+ }
+
+ @Test
+ public void setByte() {
+ }
+
+ @Test
+ public void setShort() {
+ }
+
+ @Test
+ public void setInt() {
+ }
+
+ @Test
+ public void setLong() {
+ }
+
+ @Test
+ public void setFloat() {
+ }
+
+ @Test
+ public void setDouble() {
+ }
+
+ @Test
+ public void setBigDecimal() {
+ }
+
+ @Test
+ public void setString() {
+ }
+
+ @Test
+ public void setBytes() {
+ }
+
+ @Test
+ public void setDate() {
+ }
+
+ @Test
+ public void setTime() {
+ }
+
+ @Test
+ public void setTimestamp() {
+ }
+
+ @Test
+ public void setAsciiStream() {
+ }
+
+ @Test
+ public void setUnicodeStream() {
+ }
+
+ @Test
+ public void setBinaryStream() {
+ }
+
+ @Test
+ public void clearParameters() {
+ }
+
+ @Test
+ public void setObject() {
+
+ }
+
+ @Test
+ public void execute() {
+ }
+
+ @Test
+ public void addBatch() {
+
+ }
+
+ @Test
+ public void setCharacterStream() {
+ }
+
+ @Test
+ public void setRef() {
+ }
+
+ @Test
+ public void setBlob() {
+ }
+
+ @Test
+ public void setClob() {
+ }
+
+ @Test
+ public void setArray() {
+ }
+
+ @Test
+ public void getMetaData() {
+ }
+
+ @Test
+ public void setURL() {
+ }
+
+ @Test
+ public void getParameterMetaData() {
+ }
+
+ @Test
+ public void setRowId() {
+ }
+
+ @Test
+ public void setNString() {
+ }
+
+ @Test
+ public void setNCharacterStream() {
+ }
+
+ @Test
+ public void setNClob() {
+
+ }
+
+ @Test
+ public void setSQLXML() {
+
+ }
+
+
+ @BeforeClass
+ public static void beforeClass() {
+ try {
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ conn = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata");
+ } catch (ClassNotFoundException | SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ try {
+ if (conn != null)
+ conn.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
index 9608c4985db15312e8e2966badfe4db8241bc306..472da34980d98cbe694783b120bc5533a908fa5b 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/cases/BatchInsertTest.java
@@ -1,14 +1,12 @@
package com.taosdata.jdbc.cases;
-import com.taosdata.jdbc.lib.TSDBCommon;
+import com.taosdata.jdbc.TSDBDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
+import java.sql.*;
+import java.util.Properties;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -18,57 +16,71 @@ import static org.junit.Assert.assertEquals;
public class BatchInsertTest {
- static String host = "localhost";
+ static String host = "127.0.0.1";
static String dbName = "test";
static String stbName = "meters";
static int numOfTables = 30;
final static int numOfRecordsPerTable = 1000;
static long ts = 1496732686000l;
final static String tablePrefix = "t";
-
private Connection connection;
@Before
public void before() {
try {
- connection = TSDBCommon.getConn(host);
- TSDBCommon.createDatabase(connection, dbName);
- TSDBCommon.createStable(connection, stbName);
- TSDBCommon.createTables(connection, numOfTables, stbName, tablePrefix);
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ 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/", properties);
+
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("drop database if exists " + dbName);
+ statement.executeUpdate("create database if not exists " + dbName);
+ statement.executeUpdate("use " + dbName);
+ // create stable
+ String createTableSql = "create table " + stbName + "(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))";
+ statement.executeUpdate(createTableSql);
+ // create tables
+ for(int i = 0; i < numOfTables; i++) {
+ String loc = i % 2 == 0 ? "beijing" : "shanghai";
+ String createSubTalbesSql = "create table " + tablePrefix + i + " using " + stbName + " tags(" + i + ", '" + loc + "')";
+ statement.executeUpdate(createSubTalbesSql);
+ }
+ statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
- public void testBatchInsert(){
+ public void testBatchInsert() {
ExecutorService executorService = Executors.newFixedThreadPool(numOfTables);
for (int i = 0; i < numOfTables; i++) {
final int index = i;
- executorService.execute(new Runnable() {
- @Override
- public void run() {
- try {
- long startTime = System.currentTimeMillis();
- Statement statement = connection.createStatement(); // get statement
- StringBuilder sb = new StringBuilder();
- sb.append("INSERT INTO " + tablePrefix + index + " VALUES");
- Random rand = new Random();
- for (int j = 1; j <= numOfRecordsPerTable; j++) {
- sb.append("(" + (ts + j) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ")");
- }
- statement.addBatch(sb.toString());
- statement.executeBatch();
- long endTime = System.currentTimeMillis();
- System.out.println("Thread " + index + " takes " + (endTime - startTime) + " microseconds");
- connection.commit();
- statement.close();
- } catch (Exception e) {
- e.printStackTrace();
+ executorService.execute(() -> {
+ try {
+ long startTime = System.currentTimeMillis();
+ Statement statement = connection.createStatement(); // get statement
+ StringBuilder sb = new StringBuilder();
+ sb.append("INSERT INTO " + tablePrefix + index + " VALUES");
+ Random rand = new Random();
+ for (int j = 1; j <= numOfRecordsPerTable; j++) {
+ sb.append("(" + (ts + j) + ", ");
+ sb.append(rand.nextInt(100) + ", ");
+ sb.append(rand.nextInt(100) + ", ");
+ sb.append(rand.nextInt(100) + ")");
}
+ statement.addBatch(sb.toString());
+ statement.executeBatch();
+ long endTime = System.currentTimeMillis();
+ System.out.println("Thread " + index + " takes " + (endTime - startTime) + " microseconds");
+ connection.commit();
+ statement.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
});
}
@@ -80,7 +92,7 @@ public class BatchInsertTest {
e.printStackTrace();
}
- try{
+ try {
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("select * from meters");
int num = 0;
@@ -89,7 +101,7 @@ public class BatchInsertTest {
}
assertEquals(num, numOfTables * numOfRecordsPerTable);
rs.close();
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
}
@@ -102,7 +114,6 @@ public class BatchInsertTest {
} catch (SQLException e) {
e.printStackTrace();
}
-
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java
deleted file mode 100644
index 0e2613d617074571c86c39ef253d68af9a0f6922..0000000000000000000000000000000000000000
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/lib/TSDBCommon.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.taosdata.jdbc.lib;
-
-import com.taosdata.jdbc.TSDBDriver;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.Properties;
-
-public class TSDBCommon {
-
- public static Connection getConn(String host) throws SQLException, ClassNotFoundException {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- 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");
- return DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
- }
-
- public static void createDatabase(Connection connection, String dbName) throws SQLException {
- Statement statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("use " + dbName);
- statement.close();
- }
-
- public static void createStable(Connection connection, String stbName) throws SQLException {
- Statement statement = connection.createStatement();
- String createTableSql = "create table " + stbName + "(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))";
- statement.executeUpdate(createTableSql);
- statement.close();
- }
-
- public static void createTables(Connection connection, int numOfTables, String stbName,String tablePrefix) throws SQLException {
- Statement statement = connection.createStatement();
- for(int i = 0; i < numOfTables; i++) {
- String loc = i % 2 == 0 ? "beijing" : "shanghai";
- String createSubTalbesSql = "create table " + tablePrefix + i + " using " + stbName + " tags(" + i + ", '" + loc + "')";
- statement.executeUpdate(createSubTalbesSql);
- }
- statement.close();
- }
-}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
index 918714da22d45df3e78af93c07423689f1baccc2..11d4a143535d7e116d92875a6eb52b5bf7a5b6e0 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
@@ -8,6 +8,7 @@ import java.sql.*;
public class AuthenticationTest {
private static final String host = "127.0.0.1";
+ // private static final String host = "master";
private static final String user = "root";
private static final String password = "123456";
private Connection conn;
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
index ee4b2ed4dd2944a5b09df9afb5d15638422d52cb..185c0306f5259206c96072b7f306f18a7a8a8f7e 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
@@ -10,23 +10,12 @@ import java.util.Random;
public class RestfulJDBCTest {
private static final String host = "127.0.0.1";
- private Connection connection;
-
- @Before
- public void before() throws ClassNotFoundException, SQLException {
- Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
- connection = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/restful_test?user=root&password=taosdata");
- }
-
- @After
- public void after() throws SQLException {
- if (connection != null)
- connection.close();
- }
-
+ // private static final String host = "master";
+ private static Connection connection;
+ private Random random = new Random(System.currentTimeMillis());
/**
- * 查询所有log.log
+ * select * from log.log
**/
@Test
public void testCase001() {
@@ -85,7 +74,6 @@ public class RestfulJDBCTest {
}
}
- private Random random = new Random(System.currentTimeMillis());
@Test
public void testCase005() {
@@ -105,5 +93,50 @@ public class RestfulJDBCTest {
}
}
+ @Test
+ public void testCase006() {
+ try (Statement stmt = connection.createStatement()) {
+ ResultSet rs = stmt.executeQuery("select * from weather");
+ while (rs.next()) {
+ System.out.print("ts: " + rs.getTimestamp("ts"));
+ System.out.print(", temperature: " + rs.getString("temperature"));
+ System.out.print(", humidity: " + rs.getString("humidity"));
+ System.out.println(", location: " + rs.getString("location"));
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void testCase007() {
+ try (Statement stmt = connection.createStatement()) {
+ ResultSet rs = stmt.executeQuery("select * from weather");
+ ResultSetMetaData meta = rs.getMetaData();
+ while (rs.next()) {
+ int columnCount = meta.getColumnCount();
+ for (int i = 1; i <= columnCount; i++) {
+ String columnLabel = meta.getColumnLabel(i);
+ String value = rs.getString(i);
+ System.out.print(columnLabel + ": " + value + "\t");
+ }
+ System.out.println();
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @BeforeClass
+ public static void before() throws ClassNotFoundException, SQLException {
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ connection = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/restful_test?user=root&password=taosdata");
+ }
+
+ @AfterClass
+ public static void after() throws SQLException {
+ if (connection != null)
+ connection.close();
+ }
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetMetaDataTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..13973d8b6bf6c11ced27866724b91c0746a024d0
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetMetaDataTest.java
@@ -0,0 +1,221 @@
+package com.taosdata.jdbc.rs;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.sql.*;
+
+public class RestfulResultSetMetaDataTest {
+
+ private static final String host = "127.0.0.1";
+// private static final String host = "master";
+
+ private static Connection conn;
+ private static Statement stmt;
+ private static ResultSet rs;
+ private static ResultSetMetaData meta;
+
+ @Test
+ public void getColumnCount() throws SQLException {
+ Assert.assertEquals(10, meta.getColumnCount());
+ }
+
+ @Test
+ public void isAutoIncrement() throws SQLException {
+ Assert.assertFalse(meta.isAutoIncrement(1));
+ Assert.assertFalse(meta.isAutoIncrement(2));
+ Assert.assertFalse(meta.isAutoIncrement(3));
+ Assert.assertFalse(meta.isAutoIncrement(4));
+ Assert.assertFalse(meta.isAutoIncrement(5));
+ Assert.assertFalse(meta.isAutoIncrement(6));
+ Assert.assertFalse(meta.isAutoIncrement(7));
+ Assert.assertFalse(meta.isAutoIncrement(8));
+ Assert.assertFalse(meta.isAutoIncrement(9));
+ Assert.assertFalse(meta.isAutoIncrement(10));
+ }
+
+ @Test
+ public void isCaseSensitive() throws SQLException {
+ Assert.assertFalse(meta.isCaseSensitive(1));
+ }
+
+ @Test
+ public void isSearchable() throws SQLException {
+ Assert.assertTrue(meta.isSearchable(1));
+ }
+
+ @Test
+ public void isCurrency() throws SQLException {
+ Assert.assertFalse(meta.isCurrency(1));
+ }
+
+ @Test
+ public void isNullable() throws SQLException {
+ Assert.assertEquals(ResultSetMetaData.columnNoNulls, meta.isNullable(1));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(2));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(3));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(4));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(5));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(6));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(7));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(8));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(9));
+ Assert.assertEquals(ResultSetMetaData.columnNullable, meta.isNullable(10));
+ }
+
+ @Test
+ public void isSigned() throws SQLException {
+ Assert.assertFalse(meta.isSigned(1));
+ }
+
+ @Test
+ public void getColumnDisplaySize() throws SQLException {
+ Assert.assertEquals(64, meta.getColumnDisplaySize(10));
+ }
+
+ @Test
+ public void getColumnLabel() throws SQLException {
+ Assert.assertEquals("f1", meta.getColumnLabel(1));
+ }
+
+ @Test
+ public void getColumnName() throws SQLException {
+ Assert.assertEquals("f1", meta.getColumnName(1));
+ }
+
+ @Test
+ public void getSchemaName() throws SQLException {
+ Assert.assertEquals("", meta.getSchemaName(1));
+ }
+
+ @Test
+ public void getPrecision() throws SQLException {
+ Assert.assertEquals(0, meta.getPrecision(1));
+ }
+
+ @Test
+ public void getScale() throws SQLException {
+ Assert.assertEquals(0, meta.getScale(1));
+ }
+
+ @Test
+ public void getTableName() throws SQLException {
+ Assert.assertEquals("", meta.getTableName(1));
+ }
+
+ @Test
+ public void getCatalogName() throws SQLException {
+ Assert.assertEquals("restful_test", meta.getCatalogName(1));
+ Assert.assertEquals("restful_test", meta.getCatalogName(2));
+ Assert.assertEquals("restful_test", meta.getCatalogName(3));
+ Assert.assertEquals("restful_test", meta.getCatalogName(4));
+ Assert.assertEquals("restful_test", meta.getCatalogName(5));
+ Assert.assertEquals("restful_test", meta.getCatalogName(6));
+ Assert.assertEquals("restful_test", meta.getCatalogName(7));
+ Assert.assertEquals("restful_test", meta.getCatalogName(8));
+ Assert.assertEquals("restful_test", meta.getCatalogName(9));
+ Assert.assertEquals("restful_test", meta.getCatalogName(10));
+ }
+
+ @Test
+ public void getColumnType() throws SQLException {
+ Assert.assertEquals(Types.TIMESTAMP, meta.getColumnType(1));
+ Assert.assertEquals(Types.INTEGER, meta.getColumnType(2));
+ Assert.assertEquals(Types.BIGINT, meta.getColumnType(3));
+ Assert.assertEquals(Types.FLOAT, meta.getColumnType(4));
+ Assert.assertEquals(Types.DOUBLE, meta.getColumnType(5));
+ Assert.assertEquals(Types.BINARY, meta.getColumnType(6));
+ Assert.assertEquals(Types.SMALLINT, meta.getColumnType(7));
+ Assert.assertEquals(Types.TINYINT, meta.getColumnType(8));
+ Assert.assertEquals(Types.BOOLEAN, meta.getColumnType(9));
+ Assert.assertEquals(Types.NCHAR, meta.getColumnType(10));
+ }
+
+ @Test
+ public void getColumnTypeName() throws SQLException {
+ Assert.assertEquals("TIMESTAMP", meta.getColumnTypeName(1));
+ Assert.assertEquals("INT", meta.getColumnTypeName(2));
+ Assert.assertEquals("BIGINT", meta.getColumnTypeName(3));
+ Assert.assertEquals("FLOAT", meta.getColumnTypeName(4));
+ Assert.assertEquals("DOUBLE", meta.getColumnTypeName(5));
+ Assert.assertEquals("BINARY", meta.getColumnTypeName(6));
+ Assert.assertEquals("SMALLINT", meta.getColumnTypeName(7));
+ Assert.assertEquals("TINYINT", meta.getColumnTypeName(8));
+ Assert.assertEquals("BOOL", meta.getColumnTypeName(9));
+ Assert.assertEquals("NCHAR", meta.getColumnTypeName(10));
+ }
+
+ @Test
+ public void isReadOnly() throws SQLException {
+ Assert.assertTrue(meta.isReadOnly(1));
+ }
+
+ @Test
+ public void isWritable() throws SQLException {
+ Assert.assertFalse(meta.isWritable(1));
+ }
+
+ @Test
+ public void isDefinitelyWritable() throws SQLException {
+ Assert.assertFalse(meta.isDefinitelyWritable(1));
+ }
+
+ @Test
+ public void getColumnClassName() throws SQLException {
+ Assert.assertEquals(Timestamp.class.getName(), meta.getColumnClassName(1));
+ Assert.assertEquals(Integer.class.getName(), meta.getColumnClassName(2));
+ Assert.assertEquals(Long.class.getName(), meta.getColumnClassName(3));
+ Assert.assertEquals(Float.class.getName(), meta.getColumnClassName(4));
+ Assert.assertEquals(Double.class.getName(), meta.getColumnClassName(5));
+ Assert.assertEquals(String.class.getName(), meta.getColumnClassName(6));
+ Assert.assertEquals(Short.class.getName(), meta.getColumnClassName(7));
+ Assert.assertEquals(Short.class.getName(), meta.getColumnClassName(8));
+ Assert.assertEquals(Boolean.class.getName(), meta.getColumnClassName(9));
+ Assert.assertEquals(String.class.getName(), meta.getColumnClassName(10));
+ }
+
+ @Test
+ public void unwrap() throws SQLException {
+ Assert.assertNotNull(meta.unwrap(RestfulResultSetMetaData.class));
+ }
+
+ @Test
+ public void isWrapperFor() throws SQLException {
+ Assert.assertTrue(meta.isWrapperFor(RestfulResultSetMetaData.class));
+ }
+
+ @BeforeClass
+ public static void beforeClass() {
+ try {
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/restful_test?user=root&password=taosdata");
+ stmt = conn.createStatement();
+ stmt.execute("create database if not exists restful_test");
+ stmt.execute("use restful_test");
+ stmt.execute("drop table if exists weather");
+ stmt.execute("create table if not exists weather(f1 timestamp, f2 int, f3 bigint, f4 float, f5 double, f6 binary(64), f7 smallint, f8 tinyint, f9 bool, f10 nchar(64))");
+ stmt.execute("insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')");
+ rs = stmt.executeQuery("select * from restful_test.weather");
+ rs.next();
+ meta = rs.getMetaData();
+ } catch (ClassNotFoundException | SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ try {
+ if (rs != null)
+ rs.close();
+ if (stmt != null)
+ stmt.close();
+ if (conn != null)
+ conn.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a14d09588d21f5d405cbb2456c9833d2a411ea96
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulResultSetTest.java
@@ -0,0 +1,588 @@
+package com.taosdata.jdbc.rs;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.sql.*;
+
+public class RestfulResultSetTest {
+
+ private static final String host = "127.0.0.1";
+// private static final String host = "master";
+
+ private static Connection conn;
+ private static Statement stmt;
+ private static ResultSet rs;
+
+ @Test
+ public void wasNull() throws SQLException {
+ Assert.assertFalse(rs.wasNull());
+ }
+
+ @Test
+ public void getString() throws SQLException {
+ String f10 = rs.getString("f10");
+ Assert.assertEquals("涛思数据", f10);
+ f10 = rs.getString(10);
+ Assert.assertEquals("涛思数据", f10);
+ }
+
+ @Test
+ public void getBoolean() throws SQLException {
+ Boolean f9 = rs.getBoolean("f9");
+ Assert.assertEquals(true, f9);
+ f9 = rs.getBoolean(9);
+ Assert.assertEquals(true, f9);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getByte() throws SQLException {
+ rs.getByte(1);
+ }
+
+ @Test
+ public void getShort() throws SQLException {
+ short f7 = rs.getShort("f7");
+ Assert.assertEquals(10, f7);
+ f7 = rs.getShort(7);
+ Assert.assertEquals(10, f7);
+ }
+
+ @Test
+ public void getInt() throws SQLException {
+ int f2 = rs.getInt("f2");
+ Assert.assertEquals(1, f2);
+ f2 = rs.getInt(2);
+ Assert.assertEquals(1, f2);
+ }
+
+ @Test
+ public void getLong() throws SQLException {
+ long f3 = rs.getLong("f3");
+ Assert.assertEquals(100, f3);
+ f3 = rs.getLong(3);
+ Assert.assertEquals(100, f3);
+ }
+
+ @Test
+ public void getFloat() throws SQLException {
+ float f4 = rs.getFloat("f4");
+ Assert.assertEquals(3.1415f, f4, 0f);
+ f4 = rs.getFloat(4);
+ Assert.assertEquals(3.1415f, f4, 0f);
+ }
+
+ @Test
+ public void getDouble() throws SQLException {
+ double f5 = rs.getDouble("f5");
+ Assert.assertEquals(3.1415926, f5, 0.0);
+ f5 = rs.getDouble(5);
+ Assert.assertEquals(3.1415926, f5, 0.0);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getBigDecimal() throws SQLException {
+ rs.getBigDecimal("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getBytes() throws SQLException {
+ rs.getBytes("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getDate() throws SQLException {
+ rs.getDate("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getTime() throws SQLException {
+ rs.getTime("f1");
+ }
+
+ @Test
+ public void getTimestamp() throws SQLException {
+ Timestamp f1 = rs.getTimestamp("f1");
+ Assert.assertEquals("2021-01-01 00:00:00.0", f1.toString());
+ f1 = rs.getTimestamp(1);
+ Assert.assertEquals("2021-01-01 00:00:00.0", f1.toString());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getAsciiStream() throws SQLException {
+ rs.getAsciiStream("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getUnicodeStream() throws SQLException {
+ rs.getUnicodeStream("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getBinaryStream() throws SQLException {
+ rs.getBinaryStream("f1");
+ }
+
+ @Test
+ public void getWarnings() throws SQLException {
+ Assert.assertNull(rs.getWarnings());
+ }
+
+ @Test
+ public void clearWarnings() throws SQLException {
+ rs.clearWarnings();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getCursorName() throws SQLException {
+ rs.getCursorName();
+ }
+
+ @Test
+ public void getMetaData() throws SQLException {
+ ResultSetMetaData meta = rs.getMetaData();
+ Assert.assertNotNull(meta);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getObject() throws SQLException {
+ rs.getObject("f1");
+ }
+
+ @Test(expected = SQLException.class)
+ public void findColumn() throws SQLException {
+ int columnIndex = rs.findColumn("f1");
+ Assert.assertEquals(1, columnIndex);
+ columnIndex = rs.findColumn("f2");
+ Assert.assertEquals(2, columnIndex);
+ columnIndex = rs.findColumn("f3");
+ Assert.assertEquals(3, columnIndex);
+ columnIndex = rs.findColumn("f4");
+ Assert.assertEquals(4, columnIndex);
+ columnIndex = rs.findColumn("f5");
+ Assert.assertEquals(5, columnIndex);
+ columnIndex = rs.findColumn("f6");
+ Assert.assertEquals(6, columnIndex);
+ columnIndex = rs.findColumn("f7");
+ Assert.assertEquals(7, columnIndex);
+ columnIndex = rs.findColumn("f8");
+ Assert.assertEquals(8, columnIndex);
+ columnIndex = rs.findColumn("f9");
+ Assert.assertEquals(9, columnIndex);
+ columnIndex = rs.findColumn("f10");
+ Assert.assertEquals(10, columnIndex);
+
+ rs.findColumn("f11");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getCharacterStream() throws SQLException {
+ rs.getCharacterStream(1);
+ }
+
+ @Test
+ public void isBeforeFirst() throws SQLException {
+ Assert.assertFalse(rs.isBeforeFirst());
+ rs.beforeFirst();
+ Assert.assertTrue(rs.isBeforeFirst());
+ rs.next();
+ }
+
+ @Test
+ public void isAfterLast() throws SQLException {
+ Assert.assertFalse(rs.isAfterLast());
+ }
+
+ @Test
+ public void isFirst() throws SQLException {
+ Assert.assertTrue(rs.isFirst());
+ }
+
+ @Test
+ public void isLast() throws SQLException {
+ Assert.assertTrue(rs.isLast());
+ }
+
+ @Test
+ public void beforeFirst() throws SQLException {
+ rs.beforeFirst();
+ Assert.assertTrue(rs.isBeforeFirst());
+ rs.next();
+ }
+
+ @Test
+ public void afterLast() throws SQLException {
+ rs.afterLast();
+ Assert.assertTrue(rs.isAfterLast());
+ rs.first();
+ }
+
+ @Test
+ public void first() throws SQLException {
+ rs.first();
+ Assert.assertEquals("2021-01-01 00:00:00.0", rs.getTimestamp("f1").toString());
+ }
+
+ @Test
+ public void last() throws SQLException {
+ rs.last();
+ Assert.assertEquals("2021-01-01 00:00:00.0", rs.getTimestamp("f1").toString());
+ }
+
+ @Test
+ public void getRow() throws SQLException {
+ int row = rs.getRow();
+ Assert.assertEquals(1, row);
+ rs.beforeFirst();
+ row = rs.getRow();
+ Assert.assertEquals(0, row);
+ rs.first();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void absolute() throws SQLException {
+ rs.absolute(-1);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void relative() throws SQLException {
+ rs.relative(-1);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void previous() throws SQLException {
+ rs.previous();
+ }
+
+ @Test(expected = SQLException.class)
+ public void setFetchDirection() throws SQLException {
+ rs.setFetchDirection(ResultSet.FETCH_FORWARD);
+ rs.setFetchDirection(ResultSet.FETCH_UNKNOWN);
+ }
+
+ @Test
+ public void getFetchDirection() throws SQLException {
+ Assert.assertEquals(ResultSet.FETCH_FORWARD, rs.getFetchDirection());
+ }
+
+ @Test(expected = SQLException.class)
+ public void setFetchSize() throws SQLException {
+ rs.setFetchSize(0);
+ }
+
+ @Test
+ public void getFetchSize() throws SQLException {
+ Assert.assertEquals(1, rs.getFetchSize());
+ }
+
+ @Test
+ public void getType() throws SQLException {
+ Assert.assertEquals(ResultSet.TYPE_FORWARD_ONLY, rs.getType());
+ }
+
+ @Test
+ public void getConcurrency() throws SQLException {
+ Assert.assertEquals(ResultSet.CONCUR_READ_ONLY, rs.getConcurrency());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void rowUpdated() throws SQLException {
+ rs.rowUpdated();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void rowInserted() throws SQLException {
+ rs.rowInserted();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void rowDeleted() throws SQLException {
+ rs.rowDeleted();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateNull() throws SQLException {
+ rs.updateNull("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateBoolean() throws SQLException {
+ rs.updateBoolean(1, false);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateByte() throws SQLException {
+ rs.updateByte(1, new Byte("0"));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateShort() throws SQLException {
+ rs.updateShort(1, new Short("0"));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateInt() throws SQLException {
+ rs.updateInt(1, 1);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateLong() throws SQLException {
+ rs.updateLong(1, 1l);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateFloat() throws SQLException {
+ rs.updateFloat(1, 1f);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateDouble() throws SQLException {
+ rs.updateDouble(1, 1.0);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateBigDecimal() throws SQLException {
+ rs.updateBigDecimal(1, new BigDecimal(1));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateString() throws SQLException {
+ rs.updateString(1, "abc");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateBytes() throws SQLException {
+ rs.updateBytes(1, new byte[]{});
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateDate() throws SQLException {
+ rs.updateDate(1, new Date(System.currentTimeMillis()));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateTime() throws SQLException {
+ rs.updateTime(1, new Time(System.currentTimeMillis()));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateTimestamp() throws SQLException {
+ rs.updateTimestamp(1, new Timestamp(System.currentTimeMillis()));
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateAsciiStream() throws SQLException {
+ rs.updateAsciiStream(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateBinaryStream() throws SQLException {
+ rs.updateBinaryStream(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateCharacterStream() throws SQLException {
+ rs.updateCharacterStream(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateObject() throws SQLException {
+ rs.updateObject(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void insertRow() throws SQLException {
+ rs.insertRow();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateRow() throws SQLException {
+ rs.updateRow();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void deleteRow() throws SQLException {
+ rs.deleteRow();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void refreshRow() throws SQLException {
+ rs.refreshRow();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void cancelRowUpdates() throws SQLException {
+ rs.cancelRowUpdates();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void moveToInsertRow() throws SQLException {
+ rs.moveToInsertRow();
+ }
+
+ @Test
+ public void getStatement() throws SQLException {
+ Statement stmt = rs.getStatement();
+ Assert.assertNotNull(stmt);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void moveToCurrentRow() throws SQLException {
+ rs.moveToCurrentRow();
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getRef() throws SQLException {
+ rs.getRef(1);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getBlob() throws SQLException {
+ rs.getBlob("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getClob() throws SQLException {
+ rs.getClob("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getArray() throws SQLException {
+ rs.getArray("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getURL() throws SQLException {
+ rs.getURL("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateRef() throws SQLException {
+ rs.updateRef("f1", null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateBlob() throws SQLException {
+ rs.updateBlob(1, (InputStream) null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateClob() throws SQLException {
+ rs.updateClob(1, (Reader) null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateArray() throws SQLException {
+ rs.updateArray(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getRowId() throws SQLException {
+ rs.getRowId("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateRowId() throws SQLException {
+ rs.updateRowId(1, null);
+ }
+
+ @Test
+ public void getHoldability() throws SQLException {
+ Assert.assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, rs.getHoldability());
+ }
+
+ @Test
+ public void isClosed() throws SQLException {
+ Assert.assertFalse(rs.isClosed());
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateNString() throws SQLException {
+ rs.updateNString(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateNClob() throws SQLException {
+ rs.updateNClob(1, (Reader) null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getNClob() throws SQLException {
+ rs.getNClob("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getSQLXML() throws SQLException {
+ rs.getSQLXML("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateSQLXML() throws SQLException {
+ rs.updateSQLXML(1, null);
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getNString() throws SQLException {
+ rs.getNString("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void getNCharacterStream() throws SQLException {
+ rs.getNCharacterStream("f1");
+ }
+
+ @Test(expected = SQLFeatureNotSupportedException.class)
+ public void updateNCharacterStream() throws SQLException {
+ rs.updateNCharacterStream(1, null);
+ }
+
+ @Test
+ public void unwrap() throws SQLException {
+ RestfulResultSet unwrap = rs.unwrap(RestfulResultSet.class);
+ Assert.assertNotNull(unwrap);
+ }
+
+ @Test
+ public void isWrapperFor() throws SQLException {
+ Assert.assertTrue(rs.isWrapperFor(RestfulResultSet.class));
+ }
+
+ @BeforeClass
+ public static void beforeClass() {
+ try {
+ Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
+ conn = DriverManager.getConnection("jdbc:TAOS-RS://" + host + ":6041/restful_test?user=root&password=taosdata");
+ stmt = conn.createStatement();
+ stmt.execute("create database if not exists restful_test");
+ stmt.execute("use restful_test");
+ stmt.execute("drop table if exists weather");
+ stmt.execute("create table if not exists weather(f1 timestamp, f2 int, f3 bigint, f4 float, f5 double, f6 binary(64), f7 smallint, f8 tinyint, f9 bool, f10 nchar(64))");
+ stmt.execute("insert into restful_test.weather values('2021-01-01 00:00:00.000', 1, 100, 3.1415, 3.1415926, 'abc', 10, 10, true, '涛思数据')");
+ rs = stmt.executeQuery("select * from restful_test.weather");
+ rs.next();
+ } catch (ClassNotFoundException | SQLException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ @AfterClass
+ public static void afterClass() {
+ try {
+ if (rs != null)
+ rs.close();
+ if (stmt != null)
+ stmt.close();
+ if (conn != null)
+ conn.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
index ad6ed43ac737429707ff4f086a320cb62336b020..313abfd27865ef37d8b522b38951b17902f5a486 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
@@ -1,5 +1,6 @@
package com.taosdata.jdbc.rs;
+import com.taosdata.jdbc.utils.SQLExecutor;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
@@ -11,378 +12,315 @@ import java.sql.*;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SQLTest {
private static final String host = "127.0.0.1";
-
+ // private static final String host = "master";
private static Connection connection;
@Test
public void testCase001() {
String sql = "create database if not exists restful_test";
- execute(sql);
+ SQLExecutor.execute(connection, sql);
}
@Test
public void testCase002() {
String sql = "use restful_test";
- execute(sql);
+ SQLExecutor.execute(connection, sql);
}
@Test
public void testCase003() {
String sql = "show databases";
- executeWithResult(sql);
+ SQLExecutor.executeWithResult(connection, sql);
}
@Test
public void testCase004() {
String sql = "show tables";
- executeWithResult(sql);
+ SQLExecutor.executeWithResult(connection, sql);
}
@Test
public void testCase005() {
String sql = "show stables";
- executeWithResult(sql);
+ SQLExecutor.executeWithResult(connection, sql);
}
@Test
public void testCase006() {
String sql = "show dnodes";
- executeWithResult(sql);
+ SQLExecutor.executeWithResult(connection, sql);
}
@Test
public void testCase007() {
String sql = "show vgroups";
- executeWithResult(sql);
+ SQLExecutor.executeWithResult(connection, sql);
}
@Test
public void testCase008() {
String sql = "drop table if exists restful_test.weather";
- execute(sql);
+ SQLExecutor.execute(connection, sql);
}
@Test
public void testCase009() {
String sql = "create table if not exists restful_test.weather(ts timestamp, temperature float) tags(location nchar(64))";
- execute(sql);
+ SQLExecutor.execute(connection, sql);
}
@Test
public void testCase010() {
String sql = "create table t1 using restful_test.weather tags('北京')";
- execute(sql);
+ SQLExecutor.execute(connection, sql);
}
@Test
public void testCase011() {
String sql = "insert into restful_test.t1 values(now, 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase012() {
String sql = "insert into restful_test.t1 values('2020-01-01 00:00:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase013() {
String sql = "insert into restful_test.t1 values('2020-01-01 00:01:00.000', 22.22),('2020-01-01 00:02:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase014() {
String sql = "insert into restful_test.t2 using weather tags('上海') values('2020-01-01 00:03:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase015() {
String sql = "insert into restful_test.t2 using weather tags('上海') values('2020-01-01 00:01:00.000', 22.22),('2020-01-01 00:02:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase016() {
String sql = "insert into t1 values('2020-01-01 01:0:00.000', 22.22),('2020-01-01 02:00:00.000', 22.22) t2 values('2020-01-01 01:0:00.000', 33.33),('2020-01-01 02:00:00.000', 33.33)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase017() {
String sql = "Insert into t3 using weather tags('广东') values('2020-01-01 01:0:00.000', 22.22),('2020-01-01 02:00:00.000', 22.22) t4 using weather tags('天津') values('2020-01-01 01:0:00.000', 33.33),('2020-01-01 02:00:00.000', 33.33)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase018() {
String sql = "select * from restful_test.t1";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase019() {
String sql = "select * from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase020() {
String sql = "select ts, temperature from restful_test.t1";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase021() {
String sql = "select ts, temperature from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase022() {
String sql = "select temperature, ts from restful_test.t1";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase023() {
String sql = "select temperature, ts from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase024() {
String sql = "import into restful_test.t5 using weather tags('石家庄') values('2020-01-01 00:01:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase025() {
String sql = "import into restful_test.t6 using weather tags('沈阳') values('2020-01-01 00:01:00.000', 22.22),('2020-01-01 00:02:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase026() {
String sql = "import into restful_test.t7 using weather tags('长沙') values('2020-01-01 00:01:00.000', 22.22) restful_test.t8 using weather tags('吉林') values('2020-01-01 00:01:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase027() {
String sql = "import into restful_test.t9 using weather tags('武汉') values('2020-01-01 00:01:00.000', 22.22) ,('2020-01-02 00:01:00.000', 22.22) restful_test.t10 using weather tags('哈尔滨') values('2020-01-01 00:01:00.000', 22.22),('2020-01-02 00:01:00.000', 22.22)";
- executeUpdate(sql);
+ SQLExecutor.executeUpdate(connection, sql);
}
@Test
public void testCase028() {
String sql = "select location, temperature, ts from restful_test.weather where temperature > 1";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase029() {
String sql = "select location, temperature, ts from restful_test.weather where temperature < 1";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase030() {
String sql = "select location, temperature, ts from restful_test.weather where ts > now";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase031() {
String sql = "select location, temperature, ts from restful_test.weather where ts < now";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase032() {
String sql = "select count(*) from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase033() {
String sql = "select first(*) from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase034() {
String sql = "select last(*) from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase035() {
String sql = "select last_row(*) from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase036() {
String sql = "select ts, ts as primary_key from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase037() {
String sql = "select database()";
- execute("use restful_test");
- executeQuery(sql);
+ SQLExecutor.execute(connection, "use restful_test");
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase038() {
String sql = "select client_version()";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase039() {
String sql = "select server_status()";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase040() {
String sql = "select server_status() as status";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase041() {
String sql = "select tbname, location from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase042() {
String sql = "select count(tbname) from restful_test.weather";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase043() {
String sql = "select * from restful_test.weather where ts < now - 1h";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase044() {
String sql = "select * from restful_test.weather where ts < now - 1h and location like '%'";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase045() {
String sql = "select * from restful_test.weather where ts < now - 1h order by ts";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase046() {
String sql = "select last(*) from restful_test.weather where ts < now - 1h group by tbname order by tbname";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase047() {
String sql = "select * from restful_test.weather limit 2";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase048() {
String sql = "select * from restful_test.weather limit 2 offset 5";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase049() {
String sql = "select * from restful_test.t1, restful_test.t3 where t1.ts = t3.ts ";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase050() {
String sql = "select * from restful_test.t1, restful_test.t3 where t1.ts = t3.ts and t1.location = t3.location";
- executeQuery(sql);
+ SQLExecutor.executeQuery(connection, sql);
}
@Test
public void testCase051() {
String sql = "select * from restful_test.t1 tt, restful_test.t3 yy where tt.ts = yy.ts";
- executeQuery(sql);
- }
-
- private void executeUpdate(String sql) {
- try (Statement statement = connection.createStatement()) {
- long start = System.currentTimeMillis();
- int affectedRows = statement.executeUpdate(sql);
- long end = System.currentTimeMillis();
- System.out.println("[ affected rows : " + affectedRows + " ] time cost: " + (end - start) + " ms, execute statement ====> " + sql);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- private void executeWithResult(String sql) {
- try (Statement statement = connection.createStatement()) {
- statement.execute(sql);
- ResultSet resultSet = statement.getResultSet();
- printResult(resultSet);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- private void execute(String sql) {
- try (Statement statement = connection.createStatement()) {
- long start = System.currentTimeMillis();
- boolean execute = statement.execute(sql);
- long end = System.currentTimeMillis();
- printSql(sql, execute, (end - start));
- } catch (SQLException e) {
- System.out.println("ERROR execute SQL ===> " + sql);
- e.printStackTrace();
- }
- }
-
- private static void printSql(String sql, boolean succeed, long cost) {
- System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
- }
-
- private void executeQuery(String sql) {
- try (Statement statement = connection.createStatement()) {
- long start = System.currentTimeMillis();
- ResultSet resultSet = statement.executeQuery(sql);
- long end = System.currentTimeMillis();
- printSql(sql, true, (end - start));
- printResult(resultSet);
- } catch (SQLException e) {
- System.out.println("ERROR execute SQL ===> " + sql);
- e.printStackTrace();
- }
- }
-
- private static void printResult(ResultSet resultSet) throws SQLException {
- ResultSetMetaData metaData = resultSet.getMetaData();
- while (resultSet.next()) {
- StringBuilder sb = new StringBuilder();
- for (int i = 1; i <= metaData.getColumnCount(); i++) {
- String columnLabel = metaData.getColumnLabel(i);
- String value = resultSet.getString(i);
- sb.append(columnLabel + ": " + value + "\t");
- }
- System.out.println(sb.toString());
- }
+ SQLExecutor.executeQuery(connection, sql);
}
@BeforeClass
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SQLExecutor.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SQLExecutor.java
new file mode 100644
index 0000000000000000000000000000000000000000..bf034bf458bcb8eadaaacb5cf633f0905a8c1bd6
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SQLExecutor.java
@@ -0,0 +1,74 @@
+package com.taosdata.jdbc.utils;
+
+import java.sql.*;
+
+public class SQLExecutor {
+
+ // insert, import
+ public static void executeUpdate(Connection connection, String sql) {
+ try (Statement statement = connection.createStatement()) {
+ long start = System.currentTimeMillis();
+ int affectedRows = statement.executeUpdate(sql);
+ long end = System.currentTimeMillis();
+ System.out.println("[ affected rows : " + affectedRows + " ] time cost: " + (end - start) + " ms, execute statement ====> " + sql);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // show databases, show tables, show stables
+ public static void executeWithResult(Connection connection, String sql) {
+ try (Statement statement = connection.createStatement()) {
+ statement.execute(sql);
+ ResultSet resultSet = statement.getResultSet();
+ printResult(resultSet);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ // use database, create database, create table, drop table...
+ public static void execute(Connection connection, String sql) {
+ try (Statement statement = connection.createStatement()) {
+ long start = System.currentTimeMillis();
+ boolean execute = statement.execute(sql);
+ long end = System.currentTimeMillis();
+ printSql(sql, execute, (end - start));
+ } catch (SQLException e) {
+ System.out.println("ERROR execute SQL ===> " + sql);
+ e.printStackTrace();
+ }
+ }
+
+ // select
+ public static void executeQuery(Connection connection, String sql) {
+ try (Statement statement = connection.createStatement()) {
+ long start = System.currentTimeMillis();
+ ResultSet resultSet = statement.executeQuery(sql);
+ long end = System.currentTimeMillis();
+ printSql(sql, true, (end - start));
+ printResult(resultSet);
+ } catch (SQLException e) {
+ System.out.println("ERROR execute SQL ===> " + sql);
+ e.printStackTrace();
+ }
+ }
+
+ private static void printSql(String sql, boolean succeed, long cost) {
+ System.out.println("[ " + (succeed ? "OK" : "ERROR!") + " ] time cost: " + cost + " ms, execute statement ====> " + sql);
+ }
+
+ private static void printResult(ResultSet resultSet) throws SQLException {
+ ResultSetMetaData metaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 1; i <= metaData.getColumnCount(); i++) {
+ String columnLabel = metaData.getColumnLabel(i);
+ String value = resultSet.getString(i);
+ sb.append(columnLabel + ": " + value + "\t");
+ }
+ System.out.println(sb.toString());
+ }
+ }
+
+}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SqlSyntaxValidatorTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SqlSyntaxValidatorTest.java
index c38958c6ceb50af5d3925003f34e5cc16c272b97..ccb0941da00e2755eaf8fde2553b8a8e6b33cd25 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SqlSyntaxValidatorTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/SqlSyntaxValidatorTest.java
@@ -16,10 +16,6 @@ public class SqlSyntaxValidatorTest {
@Test
public void isUseSQL() {
Assert.assertTrue(SqlSyntaxValidator.isUseSql("use database test"));
- Assert.assertTrue(SqlSyntaxValidator.isUseSql("create database test"));
- Assert.assertTrue(SqlSyntaxValidator.isUseSql("create database if not exist test"));
- Assert.assertTrue(SqlSyntaxValidator.isUseSql("drop database test"));
- Assert.assertTrue(SqlSyntaxValidator.isUseSql("drop database if exist test"));
}
}
\ No newline at end of file
diff --git a/src/inc/taosdef.h b/src/inc/taosdef.h
index 6fea04907492d29f50e12f2ac43af0ae20c79a27..9f3c31f22595d6dc6007dc9517390b970b781943 100644
--- a/src/inc/taosdef.h
+++ b/src/inc/taosdef.h
@@ -163,6 +163,11 @@ do { \
#define TSDB_BINARY_OP_MULTIPLY 32
#define TSDB_BINARY_OP_DIVIDE 33
#define TSDB_BINARY_OP_REMAINDER 34
+
+
+#define IS_RELATION_OPTR(op) (((op) >= TSDB_RELATION_LESS) && ((op) <= TSDB_RELATION_IN))
+#define IS_ARITHMETIC_OPTR(op) (((op) >= TSDB_BINARY_OP_ADD) && ((op) <= TSDB_BINARY_OP_REMAINDER))
+
#define TS_PATH_DELIMITER_LEN 1
#define TSDB_UNI_LEN 24
diff --git a/src/kit/shell/src/shellWindows.c b/src/kit/shell/src/shellWindows.c
index 7cb6c75302a0d2417469c5571c88fc382c6919ea..73216f9ca3aa3d29c9b83ee12c1ec661b10311ca 100644
--- a/src/kit/shell/src/shellWindows.c
+++ b/src/kit/shell/src/shellWindows.c
@@ -19,6 +19,10 @@
extern char configDir[];
+void printVersion() {
+ printf("version: %s\n", version);
+}
+
void printHelp() {
char indent[10] = " ";
printf("taos shell is used to test the TDengine database\n");
@@ -51,6 +55,8 @@ void printHelp() {
printf("%s%s%s\n", indent, indent, "Net role when network connectivity test, default is startup, options: client|server|rpc|startup.");
printf("%s%s\n", indent, "-l");
printf("%s%s%s\n", indent, indent, "Packet length used for net test, default is 1000 bytes.");
+ printf("%s%s\n", indent, "-V");
+ printf("%s%s%s\n", indent, indent, "Print program version.");
exit(EXIT_SUCCESS);
}
@@ -69,6 +75,9 @@ void shellParseArgument(int argc, char *argv[], SShellArguments *arguments) {
// for password
else if (strcmp(argv[i], "-p") == 0) {
arguments->is_use_passwd = true;
+ if (i < argc - 1 && argv[i + 1][0] != '-') {
+ arguments->password = argv[++i];
+ }
}
// for management port
else if (strcmp(argv[i], "-P") == 0) {
@@ -145,7 +154,6 @@ void shellParseArgument(int argc, char *argv[], SShellArguments *arguments) {
exit(EXIT_FAILURE);
}
}
- // For time zone
else if (strcmp(argv[i], "-n") == 0) {
if (i < argc - 1) {
arguments->netTestRole = argv[++i];
@@ -154,7 +162,6 @@ void shellParseArgument(int argc, char *argv[], SShellArguments *arguments) {
exit(EXIT_FAILURE);
}
}
- // For time zone
else if (strcmp(argv[i], "-l") == 0) {
if (i < argc - 1) {
arguments->pktLen = atoi(argv[++i]);
@@ -163,10 +170,14 @@ void shellParseArgument(int argc, char *argv[], SShellArguments *arguments) {
exit(EXIT_FAILURE);
}
}
+ else if (strcmp(argv[i], "-V") == 0) {
+ printVersion();
+ exit(EXIT_SUCCESS);
+ }
// For temperory command TODO
else if (strcmp(argv[i], "--help") == 0) {
printHelp();
- exit(EXIT_FAILURE);
+ exit(EXIT_SUCCESS);
} else {
fprintf(stderr, "wrong options\n");
printHelp();
diff --git a/src/mnode/src/mnodeCluster.c b/src/mnode/src/mnodeCluster.c
index 94ec59b1b085208349d17dfa6ed203b36ebbf61b..169d2ebd9dae1bcc34ea24dd3770951f9cbb442b 100644
--- a/src/mnode/src/mnodeCluster.c
+++ b/src/mnode/src/mnodeCluster.c
@@ -138,14 +138,6 @@ void mnodeDecClusterRef(SClusterObj *pCluster) {
sdbDecRef(tsClusterSdb, pCluster);
}
-#ifdef __APPLE__
-bool taosGetSystemUid(char *uid) {
- fprintf(stderr, "%s[%d]%s(): not implemented yet!\n", basename(__FILE__), __LINE__, __func__);
- abort();
- return false;
-}
-#endif // __APPLE__
-
static int32_t mnodeCreateCluster() {
int64_t numOfClusters = sdbGetNumOfRows(tsClusterSdb);
if (numOfClusters != 0) return TSDB_CODE_SUCCESS;
diff --git a/src/os/inc/osDarwin.h b/src/os/inc/osDarwin.h
index 13f93456f25999277b55da96628fcce482a643f6..14b8ccf53c5ca2c857a47c007a8ba5933e06ddc6 100644
--- a/src/os/inc/osDarwin.h
+++ b/src/os/inc/osDarwin.h
@@ -91,7 +91,12 @@ extern "C" {
typedef int(*__compar_fn_t)(const void *, const void *);
// for send function in tsocket.c
-// #define MSG_NOSIGNAL 0
+#if defined(MSG_NOSIGNAL)
+#undef MSG_NOSIGNAL
+#endif
+
+#define MSG_NOSIGNAL 0
+
#define SO_NO_CHECK 0x1234
#define SOL_TCP 0x1234
#define TCP_KEEPIDLE 0x1234
diff --git a/src/os/src/darwin/darwinSemphone.c b/src/os/src/darwin/darwinSemphone.c
index a9e470bd7019c84d8c8c8368da242cbc4a1d618b..6df44a52b36505c7d1407b119e2da5c2494e2437 100644
--- a/src/os/src/darwin/darwinSemphone.c
+++ b/src/os/src/darwin/darwinSemphone.c
@@ -134,7 +134,7 @@ int tsem_init(tsem_t *sem, int pshared, unsigned int value) {
errno = ENOMEM;
return -1;
}
- kern_return_t ret = semaphore_create(sem_port, &p->sem, SYNC_POLICY_FIFO, 0);
+ kern_return_t ret = semaphore_create(sem_port, &p->sem, SYNC_POLICY_FIFO, value);
if (ret != KERN_SUCCESS) {
fprintf(stderr, "==%s[%d]%s():[%p]==semophore_create failed\n", basename(__FILE__), __LINE__, __func__, sem);
// we fail-fast here, because we have less-doc about semaphore_create for the moment
diff --git a/src/os/src/darwin/darwinSysInfo.c b/src/os/src/darwin/darwinSysInfo.c
index b05ff062efe766ebfad8464eccc091a70c4e7e89..30115907b6d204d39d2217f289390dc3437cc938 100644
--- a/src/os/src/darwin/darwinSysInfo.c
+++ b/src/os/src/darwin/darwinSysInfo.c
@@ -103,4 +103,14 @@ int taosSystem(const char *cmd) {
void taosSetCoreDump() {}
-char *taosGetCmdlineByPID(int pid) { return ""; }
\ No newline at end of file
+char *taosGetCmdlineByPID(int pid) {
+ return "[not supported yet]";
+}
+
+bool taosGetSystemUid(char *uid) {
+ uuid_t uuid = {0};
+ uuid_generate(uuid);
+ // it's caller's responsibility to make enough space for `uid`, that's 36-char + 1-null
+ uuid_unparse(uuid, uid);
+ return true;
+}
diff --git a/src/plugins/http/inc/httpUtil.h b/src/plugins/http/inc/httpUtil.h
index 61cd50a77a29ad8b9a2058f4ad569493b18618ac..54c95b6980f8241c3ea6c8e563e0e42c7c737286 100644
--- a/src/plugins/http/inc/httpUtil.h
+++ b/src/plugins/http/inc/httpUtil.h
@@ -17,7 +17,7 @@
#define TDENGINE_HTTP_UTIL_H
bool httpCheckUsedbSql(char *sql);
-void httpTimeToString(time_t t, char *buf, int32_t buflen);
+void httpTimeToString(int32_t t, char *buf, int32_t buflen);
bool httpUrlMatch(HttpContext *pContext, int32_t pos, char *cmp);
bool httpParseRequest(HttpContext *pContext);
diff --git a/src/plugins/http/src/httpParser.c b/src/plugins/http/src/httpParser.c
index 0de437c7617d2634c367328bca5dd289a8c0c3d5..e537253f0d886dfd3d93d632fda43c77d49acf15 100644
--- a/src/plugins/http/src/httpParser.c
+++ b/src/plugins/http/src/httpParser.c
@@ -535,7 +535,7 @@ char *httpDecodeUrl(const char *enc) {
dec = str.str;
str.str = NULL;
}
- httpCleanupString(&str);
+ //httpCleanupString(&str);
return dec;
}
@@ -646,7 +646,7 @@ static int32_t httpParserOnTarget(HttpParser *parser, HTTP_PARSER_STATE state, c
}
break;
}
- parser->target = strdup(parser->str.str);
+ parser->target = httpDecodeUrl(parser->str.str);
if (!parser->target) {
httpError("context:%p, fd:%d, parser state:%d, char:[%c]%02x, oom", pContext, pContext->fd, state, c, c);
ok = -1;
@@ -715,6 +715,10 @@ static int32_t httpParserOnVersion(HttpParser *parser, HTTP_PARSER_STATE state,
if (parser->method) {
ok = httpOnRequestLine(parser, parser->method, parser->target, parser->version);
+ if (parser->target) {
+ free(parser->target);
+ parser->target = NULL;
+ }
}
httpClearString(&parser->str);
diff --git a/src/plugins/http/src/httpUtil.c b/src/plugins/http/src/httpUtil.c
index 7f1e2a94d1918151277f46670f54681d64e8b56f..a84ae9f617d7ecd43c98d942dea95d99fd9ba901 100644
--- a/src/plugins/http/src/httpUtil.c
+++ b/src/plugins/http/src/httpUtil.c
@@ -29,7 +29,7 @@ bool httpCheckUsedbSql(char *sql) {
return false;
}
-void httpTimeToString(time_t t, char *buf, int32_t buflen) {
+void httpTimeToString(int32_t t, char *buf, int32_t buflen) {
memset(buf, 0, (size_t)buflen);
char ts[32] = {0};
@@ -37,7 +37,7 @@ void httpTimeToString(time_t t, char *buf, int32_t buflen) {
time_t tt = t / 1000;
ptm = localtime(&tt);
strftime(ts, 31, "%Y-%m-%d %H:%M:%S", ptm);
- sprintf(buf, "%s.%03" PRId64, ts, t % 1000);
+ sprintf(buf, "%s.%03d", ts, t % 1000);
}
int32_t httpAddToSqlCmdBuffer(HttpContext *pContext, const char *const format, ...) {
diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c
index 63b2f3ea158fc90a05ed9c7ea818dfbf674989d3..6140b9824c0688b423397682578c16fe872eb031 100644
--- a/src/query/src/qExecutor.c
+++ b/src/query/src/qExecutor.c
@@ -6424,6 +6424,11 @@ static int32_t convertQueryMsg(SQueryTableMsg *pQueryMsg, SArray **pTableIdList,
pMsg += pQueryMsg->tbnameCondLen;
}
+ //skip ts buf
+ if ((pQueryMsg->tsOffset + pQueryMsg->tsLen) > 0) {
+ pMsg = (char *)pQueryMsg + pQueryMsg->tsOffset + pQueryMsg->tsLen;
+ }
+
*sql = strndup(pMsg, pQueryMsg->sqlstrLen);
if (!validateQuerySourceCols(pQueryMsg, *pExpr, *tagCols)) {
diff --git a/src/tsdb/inc/tsdbint.h b/src/tsdb/inc/tsdbint.h
index 548338e4919c229a09ea7bae115ac7dffd5a1994..a2c6f40b2881cf20b2370d3e9d31c706c6d3bbae 100644
--- a/src/tsdb/inc/tsdbint.h
+++ b/src/tsdb/inc/tsdbint.h
@@ -78,7 +78,7 @@ struct STsdbRepo {
SMemTable* mem;
SMemTable* imem;
STsdbFS* fs;
- sem_t readyToCommit;
+ tsem_t readyToCommit;
pthread_mutex_t mutex;
bool repoLocked;
int32_t code; // Commit code
diff --git a/src/tsdb/src/tsdbCommit.c b/src/tsdb/src/tsdbCommit.c
index d073660e660ea89e12ce3b20836540b29fe65b36..6c5d3ae015907816f795c70e61c33210465a7b15 100644
--- a/src/tsdb/src/tsdbCommit.c
+++ b/src/tsdb/src/tsdbCommit.c
@@ -377,12 +377,7 @@ static void tsdbEndCommit(STsdbRepo *pRepo, int eno) {
pRepo->imem = NULL;
tsdbUnlockRepo(pRepo);
tsdbUnRefMemTable(pRepo, pIMem);
-
-#ifdef __APPLE__
- sem_post(pRepo->readyToCommit);
-#else // __APPLE__
- sem_post(&(pRepo->readyToCommit));
-#endif // __APPLE__
+ tsem_post(&(pRepo->readyToCommit));
}
#if 0
diff --git a/src/tsdb/src/tsdbMain.c b/src/tsdb/src/tsdbMain.c
index cc3f9bcccfa4ea230c2f5129e8bea83efc3e675c..69a35b3d7832a31528657df71d5c169f4a524974 100644
--- a/src/tsdb/src/tsdbMain.c
+++ b/src/tsdb/src/tsdbMain.c
@@ -474,13 +474,7 @@ static STsdbRepo *tsdbNewRepo(STsdbCfg *pCfg, STsdbAppH *pAppH) {
return NULL;
}
-#ifdef __APPLE__
- pRepo->readyToCommit = sem_open(NULL, O_CREAT, 0644, 1);
- if (pRepo->readyToCommit == SEM_FAILED) code = -1;
-#else // __APPLE__
- code = sem_init(&(pRepo->readyToCommit), 0, 1);
-#endif
-
+ code = tsem_init(&(pRepo->readyToCommit), 0, 1);
if (code != 0) {
code = errno;
terrno = TAOS_SYSTEM_ERROR(code);
@@ -517,11 +511,9 @@ static void tsdbFreeRepo(STsdbRepo *pRepo) {
tsdbFreeFS(pRepo->fs);
tsdbFreeBufPool(pRepo->pPool);
tsdbFreeMeta(pRepo->tsdbMeta);
-#ifdef __APPLE__
- sem_close(pRepo->readyToCommit);
-#else // __APPLE__
- sem_destroy(&(pRepo->readyToCommit));
-#endif // __APPLE__
+ // tsdbFreeMemTable(pRepo->mem);
+ // tsdbFreeMemTable(pRepo->imem);
+ tsem_destroy(&(pRepo->readyToCommit));
pthread_mutex_destroy(&pRepo->mutex);
free(pRepo);
}
diff --git a/src/tsdb/src/tsdbMemTable.c b/src/tsdb/src/tsdbMemTable.c
index 44a7584b714ee227354ccef80f304a7385c81a45..0931b6281be286aa6d0ac35b942beac8fca98cb3 100644
--- a/src/tsdb/src/tsdbMemTable.c
+++ b/src/tsdb/src/tsdbMemTable.c
@@ -218,11 +218,7 @@ void *tsdbAllocBytes(STsdbRepo *pRepo, int bytes) {
int tsdbAsyncCommit(STsdbRepo *pRepo) {
if (pRepo->mem == NULL) return 0;
-#ifdef __APPLE__
- sem_wait(pRepo->readyToCommit);
-#else // __APPLE__
- sem_wait(&(pRepo->readyToCommit));
-#endif // __APPLE__
+ tsem_wait(&(pRepo->readyToCommit));
ASSERT(pRepo->imem == NULL);
@@ -244,13 +240,8 @@ int tsdbSyncCommit(STsdbRepo *repo) {
STsdbRepo *pRepo = repo;
tsdbAsyncCommit(pRepo);
-#ifdef __APPLE__
- sem_wait(pRepo->readyToCommit);
- sem_post(pRepo->readyToCommit);
-#else // __APPLE__
- sem_wait(&(pRepo->readyToCommit));
- sem_post(&(pRepo->readyToCommit));
-#endif // __APPLE__
+ tsem_wait(&(pRepo->readyToCommit));
+ tsem_post(&(pRepo->readyToCommit));
if (pRepo->code != TSDB_CODE_SUCCESS) {
terrno = pRepo->code;
diff --git a/src/tsdb/src/tsdbSync.c b/src/tsdb/src/tsdbSync.c
index a16b97ce2878113816f8560e130e713f2148b5f3..7ac5a323305e0a3f1a21c56c252de8734b466d73 100644
--- a/src/tsdb/src/tsdbSync.c
+++ b/src/tsdb/src/tsdbSync.c
@@ -55,7 +55,7 @@ int32_t tsdbSyncSend(void *tsdb, int32_t socketFd) {
tsdbInitSyncH(&synch, pRepo, socketFd);
// Disable TSDB commit
- sem_wait(&(pRepo->readyToCommit));
+ tsem_wait(&(pRepo->readyToCommit));
if (tsdbSyncSendMeta(&synch) < 0) {
tsdbError("vgId:%d, failed to send metafile since %s", REPO_ID(pRepo), tstrerror(terrno));
@@ -68,12 +68,12 @@ int32_t tsdbSyncSend(void *tsdb, int32_t socketFd) {
}
// Enable TSDB commit
- sem_post(&(pRepo->readyToCommit));
+ tsem_post(&(pRepo->readyToCommit));
tsdbDestroySyncH(&synch);
return 0;
_err:
- sem_post(&(pRepo->readyToCommit));
+ tsem_post(&(pRepo->readyToCommit));
tsdbDestroySyncH(&synch);
return -1;
}
diff --git a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java
index 880bcbfc6fcda29c7225090707d694b3d0f7d4ea..91639e85f3b488a5ded5e1253b429fa874b091e2 100644
--- a/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java
+++ b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/JdbcRestfulDemo.java
@@ -14,13 +14,14 @@ public class JdbcRestfulDemo {
String url = "jdbc:TAOS-RS://" + host + ":6041/?user=root&password=taosdata";
Properties properties = new Properties();
- properties.setProperty("charset", "UTF-8");
- properties.setProperty("locale", "en_US.UTF-8");
- properties.setProperty("timezone", "UTC-8");
+// properties.setProperty("charset", "UTF-8");
+// properties.setProperty("locale", "en_US.UTF-8");
+// properties.setProperty("timezone", "UTC-8");
Connection conn = DriverManager.getConnection(url, properties);
Statement stmt = conn.createStatement();
+ stmt.execute("drop database if exists restful_test");
stmt.execute("create database if not exists restful_test");
stmt.execute("use restful_test");
stmt.execute("create table restful_test.weather(ts timestamp, temperature float) tags(location nchar(64))");
@@ -34,6 +35,7 @@ public class JdbcRestfulDemo {
System.out.println();
}
+ rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
diff --git a/tests/examples/JDBC/connectionPools/pom.xml b/tests/examples/JDBC/connectionPools/pom.xml
index 2793f0a83ddc88711796c133802c82979ae14be5..fbee256067dcc3dec5e5888384d5ca36d3b66066 100644
--- a/tests/examples/JDBC/connectionPools/pom.xml
+++ b/tests/examples/JDBC/connectionPools/pom.xml
@@ -12,7 +12,7 @@
com.taosdata.jdbc
taos-jdbcdriver
- 2.0.11
+ 2.0.17
@@ -44,7 +44,6 @@
c3p0
0.9.5.4
-
log4j
diff --git a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/DruidPoolBuilder.java b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/DruidPoolBuilder.java
index e5dc14c6a5ef69c2a7059d5d78b621e25ff3d799..a03e9758b6cb62b0f16a80cbf569feab036508aa 100644
--- a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/DruidPoolBuilder.java
+++ b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/DruidPoolBuilder.java
@@ -10,20 +10,18 @@ public class DruidPoolBuilder {
final String url = "jdbc:TAOS://" + host + ":6030";
DruidDataSource dataSource = new DruidDataSource();
+ // jdbc properties
dataSource.setUrl(url);
dataSource.setDriverClassName("com.taosdata.jdbc.TSDBDriver");
dataSource.setUsername("root");
dataSource.setPassword("taosdata");
- //初始连接数,默认0
- dataSource.setInitialSize(poolSize);
- //最大连接数,默认8
- dataSource.setMaxActive(poolSize);
- //最小闲置数
- dataSource.setMinIdle(poolSize);
- //获取连接的最大等待时间,单位毫秒
- dataSource.setMaxWait(2000);
-
+ // pool configurations
+ dataSource.setInitialSize(poolSize);//初始连接数,默认0
+ dataSource.setMinIdle(poolSize);//最小闲置数
+ dataSource.setMaxActive(poolSize);//最大连接数,默认8
+ dataSource.setMaxWait(30000);//获取连接的最大等待时间,单位毫秒
+ dataSource.setValidationQuery("select server_status()");
return dataSource;
}
diff --git a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/HikariCpBuilder.java b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/HikariCpBuilder.java
index 87f1f4ad2cbba41a779f0247f2214ef2bf04a8ca..2e50dcacffc5f27c449f1e2a3a97284c85d86b99 100644
--- a/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/HikariCpBuilder.java
+++ b/tests/examples/JDBC/connectionPools/src/main/java/com/taosdata/demo/pool/HikariCpBuilder.java
@@ -9,13 +9,18 @@ public class HikariCpBuilder {
public static DataSource getDataSource(String host, int poolSize) {
HikariConfig config = new HikariConfig();
+ // jdbc properties
config.setDriverClassName("com.taosdata.jdbc.TSDBDriver");
config.setJdbcUrl("jdbc:TAOS://" + host + ":6030");
config.setUsername("root");
config.setPassword("taosdata");
+ // pool configurations
+ config.setMinimumIdle(3); //minimum number of idle connection
+ config.setMaximumPoolSize(10); //maximum number of connection in the pool
+ config.setConnectionTimeout(30000); //maximum wait milliseconds for get connection from pool
+ config.setIdleTimeout(0); // max idle time for recycle idle connection
+ config.setConnectionTestQuery("select server_status()"); //validation query
- config.setMaximumPoolSize(poolSize);
- config.setMinimumIdle(poolSize);
HikariDataSource ds = new HikariDataSource(config);
return ds;
}
diff --git a/tests/examples/c/epoll.c b/tests/examples/c/epoll.c
index 4f65ea478e21dbf7d5fe067bfc5b142c410ad666..20ab3951586d353909090cb1344fad10d0362ddf 100644
--- a/tests/examples/c/epoll.c
+++ b/tests/examples/c/epoll.c
@@ -13,6 +13,12 @@
* along with this program. If not, see .
*/
+// how to use to do a pressure-test upon eok
+// tester: cat /dev/urandom | nc -c
+// testee: ./debug/build/bin/epoll -l > /dev/null
+// compare against: nc -l > /dev/null
+// monitor and compare : glances
+
#ifdef __APPLE__
#include "eok.h"
#else // __APPLE__
@@ -68,55 +74,62 @@ static int ep_dummy = 0;
static ep_t* ep_create(void);
static void ep_destroy(ep_t *ep);
static void* routine(void* arg);
-static int open_connect(unsigned short port);
static int open_listen(unsigned short port);
-typedef struct client_s client_t;
-struct client_s {
+typedef struct fde_s fde_t;
+struct fde_s {
int skt;
- void (*on_event)(ep_t *ep, struct epoll_event *events, client_t *client);
- volatile unsigned int state; // 1: listenning; 2: connected
+ void (*on_event)(ep_t *ep, struct epoll_event *events, fde_t *client);
};
-static void echo_event(ep_t *ep, struct epoll_event *ev, client_t *client);
+static void listen_event(ep_t *ep, struct epoll_event *ev, fde_t *client);
+static void null_event(ep_t *ep, struct epoll_event *ev, fde_t *client);
+
+#define usage(arg0, fmt, ...) do { \
+ if (fmt[0]) { \
+ fprintf(stderr, "" fmt "\n", ##__VA_ARGS__); \
+ } \
+ fprintf(stderr, "usage:\n"); \
+ fprintf(stderr, " %s -l : specify listenning port\n", arg0); \
+} while (0)
int main(int argc, char *argv[]) {
+ char *prg = basename(argv[0]);
+ if (argc==1) {
+ usage(prg, "");
+ return 0;
+ }
ep_t* ep = ep_create();
A(ep, "failed");
- int skt = open_connect(6789);
- if (skt!=-1) {
- client_t *client = (client_t*)calloc(1, sizeof(*client));
- if (client) {
- client->skt = skt;
- client->on_event = echo_event;
- client->state = 2;
- struct epoll_event ev = {0};
- ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
- ev.data.ptr = client;
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ev), "");
- }
- }
- skt = open_listen(0);
- if (skt!=-1) {
- client_t *client = (client_t*)calloc(1, sizeof(*client));
- if (client) {
+ for (int i=1; i=argc) {
+ usage(prg, "expecting after -l, but got nothing");
+ return 1; // confirmed potential leakage
+ }
+ arg = argv[i];
+ int port = atoi(arg);
+ int skt = open_listen(port);
+ if (skt==-1) continue;
+ fde_t *client = (fde_t*)calloc(1, sizeof(*client));
+ if (!client) {
+ E("out of memory");
+ close(skt);
+ continue;
+ }
client->skt = skt;
- client->on_event = echo_event;
- client->state = 1;
+ client->on_event = listen_event;
struct epoll_event ev = {0};
ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
ev.data.ptr = client;
A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ev), "");
+ continue;
}
+ usage(prg, "unknown argument: [%s]", arg);
+ return 1;
}
- // char c = '\0';
- // while ((c=getchar())!=EOF) {
- // switch (c) {
- // case 'q': break;
- // default: continue;
- // }
- // }
- // getchar();
char *line = NULL;
size_t linecap = 0;
ssize_t linelen;
@@ -205,7 +218,7 @@ static void* routine(void* arg) {
continue;
}
A(ev->data.ptr, "internal logic error");
- client_t *client = (client_t*)ev->data.ptr;
+ fde_t *client = (fde_t*)ev->data.ptr;
client->on_event(ep, ev, client);
continue;
}
@@ -223,7 +236,7 @@ static int open_listen(unsigned short port) {
do {
struct sockaddr_in si = {0};
si.sin_family = AF_INET;
- si.sin_addr.s_addr = inet_addr("127.0.0.1");
+ si.sin_addr.s_addr = inet_addr("0.0.0.0");
si.sin_port = htons(port);
r = bind(skt, (struct sockaddr*)&si, sizeof(si));
if (r) {
@@ -249,63 +262,31 @@ static int open_listen(unsigned short port) {
return -1;
}
-static int open_connect(unsigned short port) {
- int r = 0;
- int skt = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- if (skt==-1) {
- E("socket() failed");
- return -1;
+static void listen_event(ep_t *ep, struct epoll_event *ev, fde_t *client) {
+ A(ev->events & EPOLLIN, "internal logic error");
+ struct sockaddr_in si = {0};
+ socklen_t silen = sizeof(si);
+ int skt = accept(client->skt, (struct sockaddr*)&si, &silen);
+ A(skt!=-1, "internal logic error");
+ fde_t *server = (fde_t*)calloc(1, sizeof(*server));
+ if (!server) {
+ close(skt);
+ return;
}
- do {
- struct sockaddr_in si = {0};
- si.sin_family = AF_INET;
- si.sin_addr.s_addr = inet_addr("127.0.0.1");
- si.sin_port = htons(port);
- r = connect(skt, (struct sockaddr*)&si, sizeof(si));
- if (r) {
- E("connect(%u) failed", port);
- break;
- }
- memset(&si, 0, sizeof(si));
- socklen_t len = sizeof(si);
- r = getsockname(skt, (struct sockaddr *)&si, &len);
- if (r) {
- E("getsockname() failed");
- }
- A(len==sizeof(si), "internal logic error");
- D("connected: %d", ntohs(si.sin_port));
- return skt;
- } while (0);
- close(skt);
- return -1;
+ server->skt = skt;
+ server->on_event = null_event;
+ struct epoll_event ee = {0};
+ ee.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
+ ee.data.ptr = server;
+ A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ee), "");
}
-static void echo_event(ep_t *ep, struct epoll_event *ev, client_t *client) {
+static void null_event(ep_t *ep, struct epoll_event *ev, fde_t *client) {
if (ev->events & EPOLLIN) {
- if (client->state==1) {
- struct sockaddr_in si = {0};
- socklen_t silen = sizeof(si);
- int skt = accept(client->skt, (struct sockaddr*)&si, &silen);
- if (skt!=-1) {
- client_t *server = (client_t*)calloc(1, sizeof(*server));
- if (server) {
- server->skt = skt;
- server->on_event = echo_event;
- server->state = 2;
- struct epoll_event ev = {0};
- ev.events = EPOLLIN | EPOLLERR | EPOLLHUP | EPOLLRDHUP;
- ev.data.ptr = server;
- A(0==epoll_ctl(ep->ep, EPOLL_CTL_ADD, skt, &ev), "");
- }
- }
- }
- if (client->state==2) {
- char buf[4];
- int n = recv(client->skt, buf, sizeof(buf)-1, 0);
- A(n>=0 && nevents, buf);
- }
+ char buf[8192];
+ int n = recv(client->skt, buf, sizeof(buf), 0);
+ A(n>=0 && n<=sizeof(buf), "internal logic error:[%d]", n);
+ A(n==fwrite(buf, 1, n, stdout), "internal logic error");
}
if (ev->events & (EPOLLERR | EPOLLHUP | EPOLLRDHUP)) {
A(0==pthread_mutex_lock(&ep->lock), "");
diff --git a/tests/pytest/insert/unsigenedTinyint.py b/tests/pytest/insert/unsigenedTinyint.py
new file mode 100644
index 0000000000000000000000000000000000000000..1c0634b69a105c72030cdc5d15a31b8af656d48d
--- /dev/null
+++ b/tests/pytest/insert/unsigenedTinyint.py
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+
+import sys
+from util.log import *
+from util.cases import *
+from util.sql import *
+
+
+class TDTestCase:
+ def init(self, conn, logSql):
+ tdLog.debug("start to execute %s" % __file__)
+ tdSql.init(conn.cursor(), logSql)
+
+ def run(self):
+ tdSql.prepare()
+
+ tdLog.info('=============== step1')
+ tdLog.info('create table tb (ts timestamp, speed tinyint unsigned)')
+ tdSql.execute('create table tb (ts timestamp, speed tinyint unsigned)')
+ tdLog.info("insert into tb values (now, NULL)")
+ tdSql.execute("insert into tb values (now, NULL)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(1)')
+ tdSql.checkRows(1)
+ tdLog.info('tdSql.checkData(0, 1, null)')
+ tdSql.checkData(0, 1, None)
+ tdLog.info('=============== step2')
+ tdLog.info("insert into tb values (now+1m, -1) -x step2")
+ tdSql.error("insert into tb values (now+1m, -1) ")
+ tdLog.info("insert into tb values (now+1m, NULL)")
+ tdSql.execute("insert into tb values (now+1m, NULL)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(2)')
+ tdSql.checkRows(2)
+ tdLog.info('tdSql.checkData(0, 1, null)')
+ tdSql.checkData(0, 1, None)
+ tdLog.info('=============== step3')
+ tdLog.info("insert into tb values (now+2m, 254)")
+ tdSql.execute("insert into tb values (now+2m, 254)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(3)')
+ tdSql.checkRows(3)
+ tdLog.info('tdSql.checkData(0, 1, 254)')
+ tdSql.checkData(0, 1, 254)
+ tdLog.info('=============== step4')
+ tdLog.info("insert into tb values (now+3m, 255) -x step4")
+ tdSql.error("insert into tb values (now+3m, 255)")
+ tdLog.info("insert into tb values (now+3m, NULL)")
+ tdSql.execute("insert into tb values (now+3m, NULL)")
+ tdLog.info('select * from tb')
+ tdSql.query('select * from tb')
+ tdLog.info('tdSql.checkRow(4)')
+ tdSql.checkRows(4)
+ tdLog.info('tdSql.checkData(0, 1, null)')
+ tdSql.checkData(0, 1, None)
+ tdLog.info('=============== step5')
+ tdLog.info("insert into tb values (now+4m, a2)")
+ tdSql.error("insert into tb values (now+4m, a2)")
+ tdLog.info("insert into tb values (now+4m, 0)")
+ tdSql.execute("insert into tb values (now+4m, 0)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(5)')
+ tdSql.checkRows(5)
+ tdLog.info('tdSql.checkData(0, 1, 0)')
+ tdSql.checkData(0, 1, 0)
+ tdLog.info('=============== step6')
+ tdLog.info("insert into tb values (now+5m, 2a)")
+ tdSql.error("insert into tb values (now+5m, 2a)")
+ tdLog.info("insert into tb values (now+5m, 2)")
+ tdSql.execute("insert into tb values (now+5m, 2)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(6)')
+ tdSql.checkRows(6)
+ tdLog.info('tdSql.checkData(0, 1, 2)')
+ tdSql.checkData(0, 1, 2)
+ tdLog.info('=============== step7')
+ tdLog.info("insert into tb values (now+6m, 2a'1)")
+ tdSql.error("insert into tb values (now+6m, 2a'1)")
+ tdLog.info("insert into tb values (now+6m, 2)")
+ tdSql.execute("insert into tb values (now+6m, 2)")
+ tdLog.info('select * from tb order by ts desc')
+ tdSql.query('select * from tb order by ts desc')
+ tdLog.info('tdSql.checkRow(7)')
+ tdSql.checkRows(7)
+ tdLog.info('tdSql.checkData(0, 1, 2)')
+ tdSql.checkData(0, 1, 2)
+ tdLog.info('drop database db')
+ tdSql.execute('drop database db')
+ tdLog.info('show databases')
+ tdSql.query('show databases')
+ tdLog.info('tdSql.checkRow(0)')
+ tdSql.checkRows(0)
+# convert end
+
+ def stop(self):
+ tdSql.close()
+ tdLog.success("%s successfully executed" % __file__)
+
+
+tdCases.addWindows(__file__, TDTestCase())
+tdCases.addLinux(__file__, TDTestCase())
diff --git a/tests/pytest/multilevel/fileDistributionSameLevel.py b/tests/pytest/multilevel/fileDistributionSameLevel.py
index e2880283b5b6a76942ac9ac5abba50f8c5bfda1e..88a7216b8e6a6388d8d65bf8bd6ca530e662327f 100644
--- a/tests/pytest/multilevel/fileDistributionSameLevel.py
+++ b/tests/pytest/multilevel/fileDistributionSameLevel.py
@@ -25,19 +25,19 @@ class TDTestCase:
tdSql.init(conn.cursor(), logSql)
def run(self):
- self.ntables = 10
- self.rowsPerTable = 10
+ self.ntables = 1000
self.ts = 1520000010000
tdDnodes.stop(1)
# Test1 1 dataDir
cfg={
'10' : 'maxVgroupsPerDb',
+ '100' : 'maxTablesPerVnode',
'/mnt/data00 0 1' : 'dataDir',
'/mnt/data01 0 0' : 'dataDir',
'/mnt/data02 0 0' : 'dataDir',
- '/mnt/data03 1 0' : 'dataDir',
- '/mnt/data04 1 0' : 'dataDir'
+ '/mnt/data03 0 0' : 'dataDir',
+ '/mnt/data04 0 0' : 'dataDir'
}
tdSql.createDir('/mnt/data00')
tdSql.createDir('/mnt/data01')
@@ -51,16 +51,17 @@ class TDTestCase:
tdSql.execute("create database test days 1")
tdSql.execute("use test")
- tdSql.execute("create table tb(ts timestamp, c int)")
+ tdSql.execute("create table stb(ts timestamp, c int) tags(t int)")
- for i in range(self.rowsPerTable):
- tdSql.execute("insert into tb values(%d, 1)" % (self.ts + i * 86400000))
+ for i in range(self.ntables):
+ tdSql.execute("create table tb%d using stb tags(%d)" %(i, i))
+ tdSql.execute("insert into tb%d values(%d, 1)" % (self.ts + int (i / 100) * 86400000))
tdDnodes.stop(1)
tdDnodes.start(1)
- tdSql.query("select * from test.tb")
- tdSql.checkRows(10)
+ tdSql.query("select * from test.stb")
+ tdSql.checkRows(1000)
def stop(self):
diff --git a/tests/pytest/multilevel/threeLevelMountPoint.py b/tests/pytest/multilevel/threeLevelMountPoint.py
index ccaf95f47d389e053c042a4a20cefad2c7d08776..d97602eb76889ab265f6bc673f5c7558be5d7fe3 100644
--- a/tests/pytest/multilevel/threeLevelMountPoint.py
+++ b/tests/pytest/multilevel/threeLevelMountPoint.py
@@ -56,6 +56,15 @@ class TDTestCase:
tdDnodes.startWithoutSleep(1)
tdSql.taosdStatus(1)
+ tdSql.haveFile('/mnt/data00',1)
+ tdSql.haveFile('/mnt/data01',1)
+ tdSql.haveFile('/mnt/data02',1)
+ tdSql.haveFile('/mnt/data10',1)
+ tdSql.haveFile('/mnt/data11',1)
+ tdSql.haveFile('/mnt/data12',1)
+ tdSql.haveFile('/mnt/data20',1)
+ tdSql.haveFile('/mnt/data21',1)
+ tdSql.haveFile('/mnt/data22',1)
def stop(self):
tdSql.close()
diff --git a/tests/pytest/util/sql.py b/tests/pytest/util/sql.py
index e20515140ecc5cb490373fdd806e7b06df1d17f1..16931cca333a3300b7d0d6831bbb51db0238b1d1 100644
--- a/tests/pytest/util/sql.py
+++ b/tests/pytest/util/sql.py
@@ -201,8 +201,9 @@ class TDSql:
break
except psutil.NoSuchProcess:
pass
- if pstate:
- tdLog.sleep(5)
+ if pstate == state :break
+ if state or pstate:
+ tdLog.sleep(1)
continue
pstate = 0
break
@@ -223,9 +224,9 @@ class TDSql:
tdLog.info("dir: %s is empty, expect: empty" %dir)
else:
if state :
- tdLog.info("dir: %s is empty, expect: not empty" %dir)
+ tdLog.info("dir: %s is not empty, expect: not empty" %dir)
else:
- tdLog.exit("dir: %s is empty, expect: empty" %dir)
+ tdLog.exit("dir: %s is not empty, expect: empty" %dir)
else:
tdLog.exit("dir: %s doesn't exist" %dir)
def createDir(self, dir):