Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
cf192082
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
cf192082
编写于
8月 31, 2021
作者:
Z
Zhiyu Yang
提交者:
GitHub
8月 31, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-6432]<fix>: fix batchFetch BufferUnderflowException (#7676)
上级
36695e26
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
127 addition
and
85 deletion
+127
-85
src/client/src/TSDBJNIConnector.c
src/client/src/TSDBJNIConnector.c
+124
-78
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java
...c/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java
+3
-7
未找到文件。
src/client/src/TSDBJNIConnector.c
浏览文件 @
cf192082
...
...
@@ -20,12 +20,42 @@
#include "com_taosdata_jdbc_TSDBJNIConnector.h"
#define jniFatal(...) { if (jniDebugFlag & DEBUG_FATAL) { taosPrintLog("JNI FATAL ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); }}
#define jniError(...) { if (jniDebugFlag & DEBUG_ERROR) { taosPrintLog("JNI ERROR ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); }}
#define jniWarn(...) { if (jniDebugFlag & DEBUG_WARN) { taosPrintLog("JNI WARN ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); }}
#define jniInfo(...) { if (jniDebugFlag & DEBUG_INFO) { taosPrintLog("JNI ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); }}
#define jniDebug(...) { if (jniDebugFlag & DEBUG_DEBUG) { taosPrintLog("JNI ", jniDebugFlag, __VA_ARGS__); }}
#define jniTrace(...) { if (jniDebugFlag & DEBUG_TRACE) { taosPrintLog("JNI ", jniDebugFlag, __VA_ARGS__); }}
#define jniFatal(...) \
{ \
if (jniDebugFlag & DEBUG_FATAL) { \
taosPrintLog("JNI FATAL ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); \
} \
}
#define jniError(...) \
{ \
if (jniDebugFlag & DEBUG_ERROR) { \
taosPrintLog("JNI ERROR ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); \
} \
}
#define jniWarn(...) \
{ \
if (jniDebugFlag & DEBUG_WARN) { \
taosPrintLog("JNI WARN ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); \
} \
}
#define jniInfo(...) \
{ \
if (jniDebugFlag & DEBUG_INFO) { \
taosPrintLog("JNI ", tscEmbedded ? 255 : jniDebugFlag, __VA_ARGS__); \
} \
}
#define jniDebug(...) \
{ \
if (jniDebugFlag & DEBUG_DEBUG) { \
taosPrintLog("JNI ", jniDebugFlag, __VA_ARGS__); \
} \
}
#define jniTrace(...) \
{ \
if (jniDebugFlag & DEBUG_TRACE) { \
taosPrintLog("JNI ", jniDebugFlag, __VA_ARGS__); \
} \
}
int
__init
=
0
;
...
...
@@ -60,14 +90,14 @@ jmethodID g_blockdataSetByteArrayFp;
jmethodID
g_blockdataSetNumOfRowsFp
;
jmethodID
g_blockdataSetNumOfColsFp
;
#define JNI_SUCCESS
0
#define JNI_TDENGINE_ERROR
-1
#define JNI_SUCCESS 0
#define JNI_TDENGINE_ERROR -1
#define JNI_CONNECTION_NULL -2
#define JNI_RESULT_SET_NULL -3
#define JNI_NUM_OF_FIELDS_0 -4
#define JNI_SQL_NULL
-5
#define JNI_FETCH_END
-6
#define JNI_OUT_OF_MEMORY
-7
#define JNI_SQL_NULL -5
#define JNI_FETCH_END -6
#define JNI_OUT_OF_MEMORY -7
static
void
jniGetGlobalMethod
(
JNIEnv
*
env
)
{
// make sure init function executed once
...
...
@@ -129,13 +159,13 @@ static void jniGetGlobalMethod(JNIEnv *env) {
}
static
int32_t
check_for_params
(
jobject
jobj
,
jlong
conn
,
jlong
res
)
{
if
((
TAOS
*
)
conn
==
NULL
)
{
if
((
TAOS
*
)
conn
==
NULL
)
{
jniError
(
"jobj:%p, connection is closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
if
((
TAOS_RES
*
)
res
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, res is null"
,
jobj
,
(
TAOS
*
)
conn
);
if
((
TAOS_RES
*
)
res
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, res is null"
,
jobj
,
(
TAOS
*
)
conn
);
return
JNI_RESULT_SET_NULL
;
}
...
...
@@ -216,7 +246,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setOptions(JNIEnv
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_connectImp
(
JNIEnv
*
env
,
jobject
jobj
,
jstring
jhost
,
jint
jport
,
jstring
jdbName
,
jstring
juser
,
jstring
jpass
)
{
jlong
ret
=
0
;
jlong
ret
=
0
;
const
char
*
host
=
NULL
;
const
char
*
user
=
NULL
;
const
char
*
pass
=
NULL
;
...
...
@@ -246,7 +276,7 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_connectImp(JNIEn
jniDebug
(
"jobj:%p, pass not specified, use default password"
,
jobj
);
}
ret
=
(
jlong
)
taos_connect
((
char
*
)
host
,
(
char
*
)
user
,
(
char
*
)
pass
,
(
char
*
)
dbname
,
(
uint16_t
)
jport
);
ret
=
(
jlong
)
taos_connect
((
char
*
)
host
,
(
char
*
)
user
,
(
char
*
)
pass
,
(
char
*
)
dbname
,
(
uint16_t
)
jport
);
if
(
ret
==
0
)
{
jniError
(
"jobj:%p, conn:%p, connect to database failed, host=%s, user=%s, dbname=%s, port=%d"
,
jobj
,
(
void
*
)
ret
,
(
char
*
)
host
,
(
char
*
)
user
,
(
char
*
)
dbname
,
(
int32_t
)
jport
);
...
...
@@ -289,7 +319,7 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_executeQueryImp(
jsize
len
=
(
*
env
)
->
GetArrayLength
(
env
,
jsql
);
char
*
str
=
(
char
*
)
calloc
(
1
,
sizeof
(
char
)
*
(
len
+
1
));
char
*
str
=
(
char
*
)
calloc
(
1
,
sizeof
(
char
)
*
(
len
+
1
));
if
(
str
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, alloc memory failed"
,
jobj
,
tscon
);
return
JNI_OUT_OF_MEMORY
;
...
...
@@ -315,16 +345,17 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_executeQueryImp(
}
free
(
str
);
return
(
jlong
)
pSql
;
return
(
jlong
)
pSql
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getErrCodeImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
tres
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getErrCodeImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
tres
)
{
int32_t
code
=
check_for_params
(
jobj
,
con
,
tres
);
if
(
code
!=
JNI_SUCCESS
)
{
return
code
;
}
return
(
jint
)
taos_errno
((
TAOS_RES
*
)
tres
);
return
(
jint
)
taos_errno
((
TAOS_RES
*
)
tres
);
}
JNIEXPORT
jstring
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getErrMsgImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
tres
)
{
...
...
@@ -334,7 +365,7 @@ JNIEXPORT jstring JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getErrMsgImp(J
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getResultSetImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
tres
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
TAOS
*
tscon
=
(
TAOS
*
)
con
;
int32_t
code
=
check_for_params
(
jobj
,
con
,
tres
);
if
(
code
!=
JNI_SUCCESS
)
{
return
code
;
...
...
@@ -359,7 +390,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_isUpdateQueryImp(
SSqlObj
*
pSql
=
(
TAOS_RES
*
)
tres
;
return
(
tscIsUpdateQuery
(
pSql
)
?
1
:
0
);
return
(
tscIsUpdateQuery
(
pSql
)
?
1
:
0
);
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_freeResultSetImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
...
...
@@ -370,21 +401,22 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_freeResultSetImp(
}
taos_free_result
((
void
*
)
res
);
jniDebug
(
"jobj:%p, conn:%p, free resultset:%p"
,
jobj
,
(
TAOS
*
)
con
,
(
void
*
)
res
);
jniDebug
(
"jobj:%p, conn:%p, free resultset:%p"
,
jobj
,
(
TAOS
*
)
con
,
(
void
*
)
res
);
return
JNI_SUCCESS
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getAffectedRowsImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
res
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
TAOS
*
tscon
=
(
TAOS
*
)
con
;
int32_t
code
=
check_for_params
(
jobj
,
con
,
res
);
if
(
code
!=
JNI_SUCCESS
)
{
return
code
;
}
jint
ret
=
taos_affected_rows
((
SSqlObj
*
)
res
);
jniDebug
(
"jobj:%p, conn:%p, sql:%p, res: %p, affect rows:%d"
,
jobj
,
tscon
,
(
TAOS
*
)
con
,
(
TAOS_RES
*
)
res
,
(
int32_t
)
ret
);
jniDebug
(
"jobj:%p, conn:%p, sql:%p, res: %p, affect rows:%d"
,
jobj
,
tscon
,
(
TAOS
*
)
con
,
(
TAOS_RES
*
)
res
,
(
int32_t
)
ret
);
return
ret
;
}
...
...
@@ -392,13 +424,13 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getAffectedRowsIm
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getSchemaMetaDataImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
res
,
jobject
arrayListObj
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
TAOS
*
tscon
=
(
TAOS
*
)
con
;
int32_t
code
=
check_for_params
(
jobj
,
con
,
res
);
if
(
code
!=
JNI_SUCCESS
)
{
return
code
;
}
TAOS_RES
*
tres
=
(
TAOS_RES
*
)
res
;
TAOS_RES
*
tres
=
(
TAOS_RES
*
)
res
;
TAOS_FIELD
*
fields
=
taos_fetch_fields
(
tres
);
int32_t
num_fields
=
taos_num_fields
(
tres
);
...
...
@@ -452,7 +484,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchRowImp(JNIEn
int32_t
numOfFields
=
taos_num_fields
(
result
);
if
(
numOfFields
==
0
)
{
jniError
(
"jobj:%p, conn:%p, resultset:%p, fields size %d"
,
jobj
,
tscon
,
(
void
*
)
res
,
numOfFields
);
jniError
(
"jobj:%p, conn:%p, resultset:%p, fields size %d"
,
jobj
,
tscon
,
(
void
*
)
res
,
numOfFields
);
return
JNI_NUM_OF_FIELDS_0
;
}
...
...
@@ -460,7 +492,8 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchRowImp(JNIEn
if
(
row
==
NULL
)
{
int
code
=
taos_errno
(
result
);
if
(
code
==
TSDB_CODE_SUCCESS
)
{
jniDebug
(
"jobj:%p, conn:%p, resultset:%p, fields size is %d, fetch row to the end"
,
jobj
,
tscon
,
(
void
*
)
res
,
numOfFields
);
jniDebug
(
"jobj:%p, conn:%p, resultset:%p, fields size is %d, fetch row to the end"
,
jobj
,
tscon
,
(
void
*
)
res
,
numOfFields
);
return
JNI_FETCH_END
;
}
else
{
jniDebug
(
"jobj:%p, conn:%p, interrupted query"
,
jobj
,
tscon
);
...
...
@@ -468,7 +501,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchRowImp(JNIEn
}
}
int32_t
*
length
=
taos_fetch_lengths
(
result
);
int32_t
*
length
=
taos_fetch_lengths
(
result
);
char
tmp
[
TSDB_MAX_BYTES_PER_ROW
]
=
{
0
};
...
...
@@ -533,7 +566,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchRowImp(JNIEn
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_fetchBlockImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
res
,
jobject
rowobj
)
{
jlong
res
,
jobject
rowobj
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
int32_t
code
=
check_for_params
(
jobj
,
con
,
res
);
if
(
code
!=
JNI_SUCCESS
)
{
...
...
@@ -564,8 +597,13 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_fetchBlockImp(JNI
(
*
env
)
->
CallVoidMethod
(
env
,
rowobj
,
g_blockdataSetNumOfColsFp
,
(
jint
)
numOfFields
);
for
(
int
i
=
0
;
i
<
numOfFields
;
i
++
)
{
(
*
env
)
->
CallVoidMethod
(
env
,
rowobj
,
g_blockdataSetByteArrayFp
,
i
,
fields
[
i
].
bytes
*
numOfRows
,
jniFromNCharToByteArray
(
env
,
(
char
*
)
row
[
i
],
fields
[
i
].
bytes
*
numOfRows
));
int
bytes
=
fields
[
i
].
bytes
;
if
(
fields
[
i
].
type
==
TSDB_DATA_TYPE_BINARY
||
fields
[
i
].
type
==
TSDB_DATA_TYPE_NCHAR
)
{
bytes
+=
2
;
}
(
*
env
)
->
CallVoidMethod
(
env
,
rowobj
,
g_blockdataSetByteArrayFp
,
i
,
bytes
*
numOfRows
,
jniFromNCharToByteArray
(
env
,
(
char
*
)
row
[
i
],
bytes
*
numOfRows
));
}
return
JNI_SUCCESS
;
...
...
@@ -585,7 +623,8 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_closeConnectionIm
}
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_subscribeImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jboolean
restart
,
jstring
jtopic
,
jstring
jsql
,
jint
jinterval
)
{
jboolean
restart
,
jstring
jtopic
,
jstring
jsql
,
jint
jinterval
)
{
jlong
sub
=
0
;
TAOS
*
taos
=
(
TAOS
*
)
con
;
char
*
topic
=
NULL
;
...
...
@@ -682,8 +721,8 @@ JNIEXPORT jstring JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getTsCharset(J
* @param res the TAOS_RES object, i.e. the SSqlObject
* @return precision 0:ms 1:us 2:ns
*/
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getResultTimePrecisionImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
res
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_getResultTimePrecisionImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
con
,
jlong
res
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
if
(
tscon
==
NULL
)
{
jniError
(
"jobj:%p, connection is closed"
,
jobj
);
...
...
@@ -699,7 +738,8 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_getResultTimePrec
return
taos_result_precision
(
result
);
}
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_prepareStmtImp
(
JNIEnv
*
env
,
jobject
jobj
,
jbyteArray
jsql
,
jlong
con
)
{
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_prepareStmtImp
(
JNIEnv
*
env
,
jobject
jobj
,
jbyteArray
jsql
,
jlong
con
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
if
(
tscon
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
...
...
@@ -713,7 +753,7 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_prepareStmtImp(J
jsize
len
=
(
*
env
)
->
GetArrayLength
(
env
,
jsql
);
char
*
str
=
(
char
*
)
calloc
(
1
,
sizeof
(
char
)
*
(
len
+
1
));
char
*
str
=
(
char
*
)
calloc
(
1
,
sizeof
(
char
)
*
(
len
+
1
));
if
(
str
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, alloc memory failed"
,
jobj
,
tscon
);
return
JNI_OUT_OF_MEMORY
;
...
...
@@ -724,25 +764,27 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_prepareStmtImp(J
// todo handle error
}
TAOS_STMT
*
pStmt
=
taos_stmt_init
(
tscon
);
int32_t
code
=
taos_stmt_prepare
(
pStmt
,
str
,
len
);
TAOS_STMT
*
pStmt
=
taos_stmt_init
(
tscon
);
int32_t
code
=
taos_stmt_prepare
(
pStmt
,
str
,
len
);
tfree
(
str
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
jniError
(
"jobj:%p, conn:%p, code:%s"
,
jobj
,
tscon
,
tstrerror
(
code
));
return
JNI_TDENGINE_ERROR
;
}
return
(
jlong
)
pStmt
;
return
(
jlong
)
pStmt
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_setBindTableNameImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jstring
jname
,
jlong
conn
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_setBindTableNameImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jstring
jname
,
jlong
conn
)
{
TAOS
*
tsconn
=
(
TAOS
*
)
conn
;
if
(
tsconn
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
if
(
pStmt
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, invalid stmt handle"
,
jobj
,
tsconn
);
return
JNI_SQL_NULL
;
...
...
@@ -750,7 +792,7 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setBindTableNameI
const
char
*
name
=
(
*
env
)
->
GetStringUTFChars
(
env
,
jname
,
NULL
);
int32_t
code
=
taos_stmt_set_tbname
((
void
*
)
stmt
,
name
);
int32_t
code
=
taos_stmt_set_tbname
((
void
*
)
stmt
,
name
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
jname
,
name
);
...
...
@@ -763,8 +805,9 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setBindTableNameI
return
JNI_SUCCESS
;
}
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_bindColDataImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jbyteArray
colDataList
,
jbyteArray
lengthList
,
jbyteArray
nullList
,
jint
dataType
,
jint
dataBytes
,
jint
numOfRows
,
jint
colIndex
,
jlong
con
)
{
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_bindColDataImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jbyteArray
colDataList
,
jbyteArray
lengthList
,
jbyteArray
nullList
,
jint
dataType
,
jint
dataBytes
,
jint
numOfRows
,
jint
colIndex
,
jlong
con
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
if
(
tscon
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
...
...
@@ -798,14 +841,14 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_bindColDataImp(J
}
// bind multi-rows with only one invoke.
TAOS_MULTI_BIND
*
b
=
calloc
(
1
,
sizeof
(
TAOS_MULTI_BIND
));
TAOS_MULTI_BIND
*
b
=
calloc
(
1
,
sizeof
(
TAOS_MULTI_BIND
));
b
->
num
=
numOfRows
;
b
->
buffer_type
=
dataType
;
// todo check data type
b
->
buffer_length
=
IS_VAR_DATA_TYPE
(
dataType
)
?
dataBytes
:
tDataTypes
[
dataType
].
bytes
;
b
->
is_null
=
nullArray
;
b
->
buffer
=
colBuf
;
b
->
length
=
(
int32_t
*
)
lengthArray
;
b
->
num
=
numOfRows
;
b
->
buffer_type
=
dataType
;
// todo check data type
b
->
buffer_length
=
IS_VAR_DATA_TYPE
(
dataType
)
?
dataBytes
:
tDataTypes
[
dataType
].
bytes
;
b
->
is_null
=
nullArray
;
b
->
buffer
=
colBuf
;
b
->
length
=
(
int32_t
*
)
lengthArray
;
// set the length and is_null array
if
(
!
IS_VAR_DATA_TYPE
(
dataType
))
{
...
...
@@ -829,14 +872,15 @@ JNIEXPORT jlong JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_bindColDataImp(J
return
JNI_SUCCESS
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_executeBatchImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jlong
con
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_executeBatchImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jlong
con
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
if
(
tscon
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
if
(
pStmt
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, invalid stmt"
,
jobj
,
tscon
);
return
JNI_SQL_NULL
;
...
...
@@ -853,14 +897,15 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_executeBatchImp(J
return
JNI_SUCCESS
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_closeStmt
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jlong
con
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_closeStmt
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jlong
con
)
{
TAOS
*
tscon
=
(
TAOS
*
)
con
;
if
(
tscon
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
if
(
pStmt
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, invalid stmt"
,
jobj
,
tscon
);
return
JNI_SQL_NULL
;
...
...
@@ -876,15 +921,16 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_closeStmt(JNIEnv
return
JNI_SUCCESS
;
}
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_setTableNameTagsImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jstring
tableName
,
jint
numOfTags
,
jbyteArray
tags
,
jbyteArray
typeList
,
jbyteArray
lengthList
,
jbyteArray
nullList
,
jlong
conn
)
{
JNIEXPORT
jint
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_setTableNameTagsImp
(
JNIEnv
*
env
,
jobject
jobj
,
jlong
stmt
,
jstring
tableName
,
jint
numOfTags
,
jbyteArray
tags
,
jbyteArray
typeList
,
jbyteArray
lengthList
,
jbyteArray
nullList
,
jlong
conn
)
{
TAOS
*
tsconn
=
(
TAOS
*
)
conn
;
if
(
tsconn
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
TAOS_STMT
*
pStmt
=
(
TAOS_STMT
*
)
stmt
;
if
(
pStmt
==
NULL
)
{
jniError
(
"jobj:%p, conn:%p, invalid stmt handle"
,
jobj
,
tsconn
);
return
JNI_SQL_NULL
;
...
...
@@ -898,39 +944,39 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setTableNameTagsI
}
len
=
(
*
env
)
->
GetArrayLength
(
env
,
lengthList
);
int64_t
*
lengthArray
=
(
int64_t
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
lengthList
,
0
,
len
,
(
jbyte
*
)
lengthArray
);
int64_t
*
lengthArray
=
(
int64_t
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
lengthList
,
0
,
len
,
(
jbyte
*
)
lengthArray
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
}
len
=
(
*
env
)
->
GetArrayLength
(
env
,
typeList
);
char
*
typeArray
=
(
char
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
typeList
,
0
,
len
,
(
jbyte
*
)
typeArray
);
char
*
typeArray
=
(
char
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
typeList
,
0
,
len
,
(
jbyte
*
)
typeArray
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
}
len
=
(
*
env
)
->
GetArrayLength
(
env
,
nullList
);
int32_t
*
nullArray
=
(
int32_t
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
nullList
,
0
,
len
,
(
jbyte
*
)
nullArray
);
int32_t
*
nullArray
=
(
int32_t
*
)
calloc
(
1
,
len
);
(
*
env
)
->
GetByteArrayRegion
(
env
,
nullList
,
0
,
len
,
(
jbyte
*
)
nullArray
);
if
((
*
env
)
->
ExceptionCheck
(
env
))
{
}
const
char
*
name
=
(
*
env
)
->
GetStringUTFChars
(
env
,
tableName
,
NULL
);
char
*
curTags
=
tagsData
;
char
*
curTags
=
tagsData
;
TAOS_BIND
*
tagsBind
=
calloc
(
numOfTags
,
sizeof
(
TAOS_BIND
));
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
numOfTags
;
++
i
)
{
tagsBind
[
i
].
buffer_type
=
typeArray
[
i
];
tagsBind
[
i
].
buffer
=
curTags
;
tagsBind
[
i
].
buffer
=
curTags
;
tagsBind
[
i
].
is_null
=
&
nullArray
[
i
];
tagsBind
[
i
].
length
=
(
uintptr_t
*
)
&
lengthArray
[
i
];
tagsBind
[
i
].
length
=
(
uintptr_t
*
)
&
lengthArray
[
i
];
curTags
+=
lengthArray
[
i
];
}
int32_t
code
=
taos_stmt_set_tbname_tags
((
void
*
)
stmt
,
name
,
tagsBind
);
int32_t
code
=
taos_stmt_set_tbname_tags
((
void
*
)
stmt
,
name
,
tagsBind
);
int32_t
nTags
=
(
int32_t
)
numOfTags
;
int32_t
nTags
=
(
int32_t
)
numOfTags
;
jniDebug
(
"jobj:%p, conn:%p, set table name:%s, numOfTags:%d"
,
jobj
,
tsconn
,
name
,
nTags
);
tfree
(
tagsData
);
...
...
@@ -948,28 +994,28 @@ JNIEXPORT jint JNICALL Java_com_taosdata_jdbc_TSDBJNIConnector_setTableNameTagsI
}
JNIEXPORT
jlong
JNICALL
Java_com_taosdata_jdbc_TSDBJNIConnector_insertLinesImp
(
JNIEnv
*
env
,
jobject
jobj
,
jobjectArray
lines
,
jlong
conn
)
{
jobjectArray
lines
,
jlong
conn
)
{
TAOS
*
taos
=
(
TAOS
*
)
conn
;
if
(
taos
==
NULL
)
{
jniError
(
"jobj:%p, connection already closed"
,
jobj
);
return
JNI_CONNECTION_NULL
;
}
int
numLines
=
(
*
env
)
->
GetArrayLength
(
env
,
lines
);
char
**
c_lines
=
calloc
(
numLines
,
sizeof
(
char
*
));
int
numLines
=
(
*
env
)
->
GetArrayLength
(
env
,
lines
);
char
**
c_lines
=
calloc
(
numLines
,
sizeof
(
char
*
));
if
(
c_lines
==
NULL
)
{
jniError
(
"c_lines:%p, alloc memory failed"
,
c_lines
);
return
JNI_OUT_OF_MEMORY
;
}
for
(
int
i
=
0
;
i
<
numLines
;
++
i
)
{
jstring
line
=
(
jstring
)
((
*
env
)
->
GetObjectArrayElement
(
env
,
lines
,
i
));
c_lines
[
i
]
=
(
char
*
)(
*
env
)
->
GetStringUTFChars
(
env
,
line
,
0
);
jstring
line
=
(
jstring
)((
*
env
)
->
GetObjectArrayElement
(
env
,
lines
,
i
));
c_lines
[
i
]
=
(
char
*
)(
*
env
)
->
GetStringUTFChars
(
env
,
line
,
0
);
}
int
code
=
taos_insert_lines
(
taos
,
c_lines
,
numLines
);
for
(
int
i
=
0
;
i
<
numLines
;
++
i
)
{
jstring
line
=
(
jstring
)
((
*
env
)
->
GetObjectArrayElement
(
env
,
lines
,
i
));
jstring
line
=
(
jstring
)((
*
env
)
->
GetObjectArrayElement
(
env
,
lines
,
i
));
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
line
,
c_lines
[
i
]);
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetBlockData.java
浏览文件 @
cf192082
...
...
@@ -32,6 +32,7 @@ import java.util.List;
import
com.taosdata.jdbc.utils.NullType
;
public
class
TSDBResultSetBlockData
{
private
static
final
int
BINARY_LENGTH_OFFSET
=
2
;
private
int
numOfRows
=
0
;
private
int
rowIndex
=
0
;
...
...
@@ -404,10 +405,8 @@ public class TSDBResultSetBlockData {
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
{
ByteBuffer
bb
=
(
ByteBuffer
)
this
.
colData
.
get
(
col
);
bb
.
position
(
fieldSize
*
this
.
rowIndex
);
bb
.
position
((
fieldSize
+
BINARY_LENGTH_OFFSET
)
*
this
.
rowIndex
);
int
length
=
bb
.
getShort
();
byte
[]
dest
=
new
byte
[
length
];
bb
.
get
(
dest
,
0
,
length
);
if
(
NullType
.
isBinaryNull
(
dest
,
length
))
{
...
...
@@ -419,16 +418,13 @@ public class TSDBResultSetBlockData {
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
{
ByteBuffer
bb
=
(
ByteBuffer
)
this
.
colData
.
get
(
col
);
bb
.
position
(
fieldSize
*
this
.
rowIndex
);
bb
.
position
((
fieldSize
+
BINARY_LENGTH_OFFSET
)
*
this
.
rowIndex
);
int
length
=
bb
.
getShort
();
byte
[]
dest
=
new
byte
[
length
];
bb
.
get
(
dest
,
0
,
length
);
if
(
NullType
.
isNcharNull
(
dest
,
length
))
{
return
null
;
}
try
{
String
charset
=
TaosGlobalConfig
.
getCharset
();
return
new
String
(
dest
,
charset
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录