Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Rattenking
TDengine
提交
80e64a5a
T
TDengine
项目概览
Rattenking
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
80e64a5a
编写于
6月 08, 2021
作者:
Z
zyyang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sync jdbc driver from develop to master
上级
d9e1bb84
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
2403 addition
and
2617 deletion
+2403
-2617
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
...main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
+476
-448
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractParameterMetaData.java
...ain/java/com/taosdata/jdbc/AbstractParameterMetaData.java
+23
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
...bc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
+8
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
...ain/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
+53
-879
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
+53
-12
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
...dbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
+59
-48
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
...rc/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
+440
-446
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
+55
-54
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
...rc/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
+1
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
...src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
+187
-75
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
+6
-5
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
...tor/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
+1
-10
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBConnectionTest.java
...c/src/test/java/com/taosdata/jdbc/TSDBConnectionTest.java
+22
-8
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
...test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
+186
-57
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBJNIConnectorTest.java
...src/test/java/com/taosdata/jdbc/TSDBJNIConnectorTest.java
+3
-3
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBParameterMetaDataTest.java
...est/java/com/taosdata/jdbc/TSDBParameterMetaDataTest.java
+25
-19
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java
...est/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java
+604
-477
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBResultSetTest.java
...bc/src/test/java/com/taosdata/jdbc/TSDBResultSetTest.java
+4
-6
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBStatementTest.java
...bc/src/test/java/com/taosdata/jdbc/TSDBStatementTest.java
+0
-3
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaDataTest.java
...ava/com/taosdata/jdbc/rs/RestfulDatabaseMetaDataTest.java
+183
-52
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulParameterMetaDataTest.java
...va/com/taosdata/jdbc/rs/RestfulParameterMetaDataTest.java
+14
-13
未找到文件。
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
浏览文件 @
80e64a5a
...
...
@@ -12,6 +12,9 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
private
final
static
int
DRIVER_MAJAR_VERSION
=
2
;
private
final
static
int
DRIVER_MINOR_VERSION
=
0
;
private
String
precision
=
"ms"
;
private
String
database
;
public
boolean
allProceduresAreCallable
()
throws
SQLException
{
return
false
;
}
...
...
@@ -493,102 +496,105 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
public
abstract
ResultSet
getTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
[]
types
)
throws
SQLException
;
protected
ResultSet
getTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
[]
types
,
Connection
connection
)
throws
SQLException
{
try
(
Statement
stmt
=
connection
.
createStatement
())
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
ResultSet
databases
=
stmt
.
executeQuery
(
"show databases"
);
String
dbname
=
null
;
while
(
databases
.
next
())
{
dbname
=
databases
.
getString
(
"name"
);
if
(
dbname
.
equalsIgnoreCase
(
catalog
))
break
;
}
databases
.
close
();
if
(
dbname
==
null
)
return
null
;
private
List
<
ColumnMetaData
>
buildGetTablesColumnMetaDataList
()
{
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableCatalogMeta
(
1
));
// 1. TABLE_CAT
columnMetaDataList
.
add
(
buildTableSchemaMeta
(
2
));
// 2. TABLE_SCHEM
columnMetaDataList
.
add
(
buildTableNameMeta
(
3
));
// 3. TABLE_NAME
columnMetaDataList
.
add
(
buildTableTypeMeta
(
4
));
// 4. TABLE_TYPE
columnMetaDataList
.
add
(
buildRemarksMeta
(
5
));
// 5. remarks
columnMetaDataList
.
add
(
buildTypeCatMeta
(
6
));
// 6. TYPE_CAT
columnMetaDataList
.
add
(
buildTypeSchemaMeta
(
7
));
// 7. TYPE_SCHEM
columnMetaDataList
.
add
(
buildTypeNameMeta
(
8
));
// 8. TYPE_NAME
columnMetaDataList
.
add
(
buildSelfReferencingColName
(
9
));
// 9. SELF_REFERENCING_COL_NAME
columnMetaDataList
.
add
(
buildRefGenerationMeta
(
10
));
// 10. REF_GENERATION
return
columnMetaDataList
;
}
private
ColumnMetaData
buildTypeCatMeta
(
int
colIndex
)
{
ColumnMetaData
col6
=
new
ColumnMetaData
();
col6
.
setColIndex
(
colIndex
);
col6
.
setColName
(
"TYPE_CAT"
);
col6
.
setColType
(
Types
.
NCHAR
);
return
col6
;
}
private
ColumnMetaData
buildTypeSchemaMeta
(
int
colIndex
)
{
ColumnMetaData
col7
=
new
ColumnMetaData
();
col7
.
setColIndex
(
colIndex
);
col7
.
setColName
(
"TYPE_SCHEM"
);
col7
.
setColType
(
Types
.
NCHAR
);
return
col7
;
}
private
ColumnMetaData
buildTypeNameMeta
(
int
colIndex
)
{
ColumnMetaData
col8
=
new
ColumnMetaData
();
col8
.
setColIndex
(
colIndex
);
col8
.
setColName
(
"TYPE_NAME"
);
col8
.
setColType
(
Types
.
NCHAR
);
return
col8
;
}
private
ColumnMetaData
buildSelfReferencingColName
(
int
colIndex
)
{
ColumnMetaData
col9
=
new
ColumnMetaData
();
col9
.
setColIndex
(
colIndex
);
col9
.
setColName
(
"SELF_REFERENCING_COL_NAME"
);
col9
.
setColType
(
Types
.
NCHAR
);
return
col9
;
}
private
ColumnMetaData
buildRefGenerationMeta
(
int
colIndex
)
{
ColumnMetaData
col10
=
new
ColumnMetaData
();
col10
.
setColIndex
(
colIndex
);
col10
.
setColName
(
"REF_GENERATION"
);
col10
.
setColType
(
Types
.
NCHAR
);
return
col10
;
}
stmt
.
execute
(
"use "
+
dbname
);
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
1
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col1
);
ColumnMetaData
col2
=
new
ColumnMetaData
();
col2
.
setColIndex
(
2
);
col2
.
setColName
(
"TABLE_SCHEM"
);
col2
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col2
);
ColumnMetaData
col3
=
new
ColumnMetaData
();
col3
.
setColIndex
(
3
);
col3
.
setColName
(
"TABLE_NAME"
);
col3
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col3
);
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
4
);
col4
.
setColName
(
"TABLE_TYPE"
);
col4
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col4
);
ColumnMetaData
col5
=
new
ColumnMetaData
();
col5
.
setColIndex
(
5
);
col5
.
setColName
(
"REMARKS"
);
col5
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col5
);
ColumnMetaData
col6
=
new
ColumnMetaData
();
col6
.
setColIndex
(
6
);
col6
.
setColName
(
"TYPE_CAT"
);
col6
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col6
);
ColumnMetaData
col7
=
new
ColumnMetaData
();
col7
.
setColIndex
(
7
);
col7
.
setColName
(
"TYPE_SCHEM"
);
col7
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col7
);
ColumnMetaData
col8
=
new
ColumnMetaData
();
col8
.
setColIndex
(
8
);
col8
.
setColName
(
"TYPE_NAME"
);
col8
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col8
);
ColumnMetaData
col9
=
new
ColumnMetaData
();
col9
.
setColIndex
(
9
);
col9
.
setColName
(
"SELF_REFERENCING_COL_NAME"
);
col9
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col9
);
ColumnMetaData
col10
=
new
ColumnMetaData
();
col10
.
setColIndex
(
10
);
col10
.
setColName
(
"REF_GENERATION"
);
col10
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col10
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
protected
ResultSet
getTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
[]
types
,
Connection
connection
)
throws
SQLException
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
if
(!
isAvailableCatalog
(
connection
,
catalog
))
return
new
EmptyResultSet
();
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set column metadata list
resultSet
.
setColumnMetaDataList
(
buildGetTablesColumnMetaDataList
());
// set row data
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
try
(
Statement
stmt
=
connection
.
createStatement
())
{
stmt
.
execute
(
"use "
+
catalog
);
ResultSet
tables
=
stmt
.
executeQuery
(
"show tables"
);
while
(
tables
.
next
())
{
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
10
);
rowData
.
setString
(
0
,
dbname
);
//table_cat
rowData
.
setString
(
1
,
null
);
//TABLE_SCHEM
rowData
.
setString
(
2
,
tables
.
getString
(
"table_name"
));
//TABLE_NAME
rowData
.
setString
(
3
,
"TABLE"
);
//TABLE_TYPE
rowData
.
setString
(
4
,
""
);
//REMARKS
rowData
.
setString
Value
(
1
,
catalog
);
//TABLE_CAT
rowData
.
setString
Value
(
2
,
null
);
//TABLE_SCHEM
rowData
.
setString
Value
(
3
,
tables
.
getString
(
"table_name"
));
//TABLE_NAME
rowData
.
setString
Value
(
4
,
"TABLE"
);
//TABLE_TYPE
rowData
.
setString
Value
(
5
,
""
);
//REMARKS
rowDataList
.
add
(
rowData
);
}
ResultSet
stables
=
stmt
.
executeQuery
(
"show stables"
);
while
(
stables
.
next
())
{
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
10
);
rowData
.
setString
(
0
,
dbname
);
//TABLE_CAT
rowData
.
setString
(
1
,
null
);
//TABLE_SCHEM
rowData
.
setString
(
2
,
stables
.
getString
(
"name"
));
//TABLE_NAME
rowData
.
setString
(
3
,
"TABLE"
);
//TABLE_TYPE
rowData
.
setString
(
4
,
"STABLE"
);
//REMARKS
rowData
.
setString
Value
(
1
,
catalog
);
//TABLE_CAT
rowData
.
setString
Value
(
2
,
null
);
//TABLE_SCHEM
rowData
.
setString
Value
(
3
,
stables
.
getString
(
"name"
));
//TABLE_NAME
rowData
.
setString
Value
(
4
,
"TABLE"
);
//TABLE_TYPE
rowData
.
setString
Value
(
5
,
"STABLE"
);
//REMARKS
rowDataList
.
add
(
rowData
);
}
resultSet
.
setRowDataList
(
rowDataList
);
return
resultSet
;
}
return
resultSet
;
}
private
ColumnMetaData
buildTableTypeMeta
(
int
colIndex
)
{
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
colIndex
);
col4
.
setColName
(
"TABLE_TYPE"
);
col4
.
setColType
(
Types
.
NCHAR
);
return
col4
;
}
public
ResultSet
getSchemas
()
throws
SQLException
{
...
...
@@ -597,25 +603,24 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
public
abstract
ResultSet
getCatalogs
()
throws
SQLException
;
private
List
<
ColumnMetaData
>
buildTableTypesColumnMetadataList
()
{
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableTypeMeta
(
1
));
return
columnMetaDataList
;
}
public
ResultSet
getTableTypes
()
throws
SQLException
{
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
ColumnMetaData
colMetaData
=
new
ColumnMetaData
();
colMetaData
.
setColIndex
(
0
);
colMetaData
.
setColName
(
"TABLE_TYPE"
);
colMetaData
.
setColSize
(
10
);
colMetaData
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
colMetaData
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
resultSet
.
setColumnMetaDataList
(
buildTableTypesColumnMetadataList
());
// set up rowDataList
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
1
);
rowData
.
setString
(
0
,
"TABLE"
);
rowData
.
setString
Value
(
1
,
"TABLE"
);
rowDataList
.
add
(
rowData
);
rowData
=
new
TSDBResultSetRowData
(
1
);
rowData
.
setString
(
0
,
"STABLE"
);
rowData
.
setString
Value
(
1
,
"STABLE"
);
rowDataList
.
add
(
rowData
);
resultSet
.
setRowDataList
(
rowDataList
);
...
...
@@ -625,278 +630,330 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
public
abstract
ResultSet
getColumns
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
columnNamePattern
)
throws
SQLException
;
protected
ResultSet
getColumns
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
columnNamePattern
,
Connection
conn
)
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
ResultSet
databases
=
stmt
.
executeQuery
(
"show databases"
);
String
dbname
=
null
;
while
(
databases
.
next
())
{
dbname
=
databases
.
getString
(
"name"
);
if
(
dbname
.
equalsIgnoreCase
(
catalog
))
break
;
}
databases
.
close
();
if
(
dbname
==
null
)
return
null
;
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
if
(!
isAvailableCatalog
(
conn
,
catalog
))
return
new
EmptyResultSet
();
stmt
.
execute
(
"use "
+
dbname
);
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
// TABLE_CAT
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
1
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col1
);
// TABLE_SCHEM
ColumnMetaData
col2
=
new
ColumnMetaData
();
col2
.
setColIndex
(
2
);
col2
.
setColName
(
"TABLE_SCHEM"
);
col2
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col2
);
// TABLE_NAME
ColumnMetaData
col3
=
new
ColumnMetaData
();
col3
.
setColIndex
(
3
);
col3
.
setColName
(
"TABLE_NAME"
);
col3
.
setColSize
(
193
);
col3
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col3
);
// COLUMN_NAME
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
4
);
col4
.
setColName
(
"COLUMN_NAME"
);
col4
.
setColSize
(
65
);
col4
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col4
);
// DATA_TYPE
ColumnMetaData
col5
=
new
ColumnMetaData
();
col5
.
setColIndex
(
5
);
col5
.
setColName
(
"DATA_TYPE"
);
col5
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col5
);
// TYPE_NAME
ColumnMetaData
col6
=
new
ColumnMetaData
();
col6
.
setColIndex
(
6
);
col6
.
setColName
(
"TYPE_NAME"
);
col6
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col6
);
// COLUMN_SIZE
ColumnMetaData
col7
=
new
ColumnMetaData
();
col7
.
setColIndex
(
7
);
col7
.
setColName
(
"COLUMN_SIZE"
);
col7
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col7
);
// BUFFER_LENGTH, not used
ColumnMetaData
col8
=
new
ColumnMetaData
();
col8
.
setColIndex
(
8
);
col8
.
setColName
(
"BUFFER_LENGTH"
);
columnMetaDataList
.
add
(
col8
);
// DECIMAL_DIGITS
ColumnMetaData
col9
=
new
ColumnMetaData
();
col9
.
setColIndex
(
9
);
col9
.
setColName
(
"DECIMAL_DIGITS"
);
col9
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col9
);
// add NUM_PREC_RADIX
ColumnMetaData
col10
=
new
ColumnMetaData
();
col10
.
setColIndex
(
10
);
col10
.
setColName
(
"NUM_PREC_RADIX"
);
col10
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col10
);
// NULLABLE
ColumnMetaData
col11
=
new
ColumnMetaData
();
col11
.
setColIndex
(
11
);
col11
.
setColName
(
"NULLABLE"
);
col11
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col11
);
// REMARKS
ColumnMetaData
col12
=
new
ColumnMetaData
();
col12
.
setColIndex
(
12
);
col12
.
setColName
(
"REMARKS"
);
col12
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col12
);
// COLUMN_DEF
ColumnMetaData
col13
=
new
ColumnMetaData
();
col13
.
setColIndex
(
13
);
col13
.
setColName
(
"COLUMN_DEF"
);
col13
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col13
);
//SQL_DATA_TYPE
ColumnMetaData
col14
=
new
ColumnMetaData
();
col14
.
setColIndex
(
14
);
col14
.
setColName
(
"SQL_DATA_TYPE"
);
col14
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col14
);
//SQL_DATETIME_SUB
ColumnMetaData
col15
=
new
ColumnMetaData
();
col15
.
setColIndex
(
15
);
col15
.
setColName
(
"SQL_DATETIME_SUB"
);
col15
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col15
);
//CHAR_OCTET_LENGTH
ColumnMetaData
col16
=
new
ColumnMetaData
();
col16
.
setColIndex
(
16
);
col16
.
setColName
(
"CHAR_OCTET_LENGTH"
);
col16
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col16
);
//ORDINAL_POSITION
ColumnMetaData
col17
=
new
ColumnMetaData
();
col17
.
setColIndex
(
17
);
col17
.
setColName
(
"ORDINAL_POSITION"
);
col17
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col17
);
// IS_NULLABLE
ColumnMetaData
col18
=
new
ColumnMetaData
();
col18
.
setColIndex
(
18
);
col18
.
setColName
(
"IS_NULLABLE"
);
col18
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col18
);
//SCOPE_CATALOG
ColumnMetaData
col19
=
new
ColumnMetaData
();
col19
.
setColIndex
(
19
);
col19
.
setColName
(
"SCOPE_CATALOG"
);
col19
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col19
);
//SCOPE_SCHEMA
ColumnMetaData
col20
=
new
ColumnMetaData
();
col20
.
setColIndex
(
20
);
col20
.
setColName
(
"SCOPE_SCHEMA"
);
col20
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col20
);
//SCOPE_TABLE
ColumnMetaData
col21
=
new
ColumnMetaData
();
col21
.
setColIndex
(
21
);
col21
.
setColName
(
"SCOPE_TABLE"
);
col21
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col21
);
//SOURCE_DATA_TYPE
ColumnMetaData
col22
=
new
ColumnMetaData
();
col22
.
setColIndex
(
22
);
col22
.
setColName
(
"SOURCE_DATA_TYPE"
);
col22
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
);
columnMetaDataList
.
add
(
col22
);
//IS_AUTOINCREMENT
ColumnMetaData
col23
=
new
ColumnMetaData
();
col23
.
setColIndex
(
23
);
col23
.
setColName
(
"IS_AUTOINCREMENT"
);
col23
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col23
);
//IS_GENERATEDCOLUMN
ColumnMetaData
col24
=
new
ColumnMetaData
();
col24
.
setColIndex
(
24
);
col24
.
setColName
(
"IS_GENERATEDCOLUMN"
);
col24
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col24
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
// set up rowDataList
ResultSet
rs
=
stmt
.
executeQuery
(
"describe "
+
dbname
+
"."
+
tableNamePattern
);
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
int
index
=
0
;
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
resultSet
.
setColumnMetaDataList
(
buildGetColumnsColumnMetaDataList
());
// set up rowDataList
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"describe "
+
catalog
+
"."
+
tableNamePattern
);
int
rowIndex
=
0
;
while
(
rs
.
next
())
{
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
24
);
// set TABLE_CAT
rowData
.
setString
(
0
,
dbname
);
rowData
.
setStringValue
(
1
,
catalog
);
// set TABLE_SCHEM
rowData
.
setStringValue
(
2
,
null
);
// set TABLE_NAME
rowData
.
setString
(
2
,
tableNamePattern
);
rowData
.
setString
Value
(
3
,
tableNamePattern
);
// set COLUMN_NAME
rowData
.
setString
(
3
,
rs
.
getString
(
"Field"
));
rowData
.
setString
Value
(
4
,
rs
.
getString
(
"Field"
));
// set DATA_TYPE
String
typeName
=
rs
.
getString
(
"Type"
);
rowData
.
setInt
(
4
,
getData
Type
(
typeName
));
rowData
.
setInt
Value
(
5
,
TSDBConstants
.
typeName2Jdbc
Type
(
typeName
));
// set TYPE_NAME
rowData
.
setString
(
5
,
typeName
);
rowData
.
setString
Value
(
6
,
typeName
);
// set COLUMN_SIZE
int
length
=
rs
.
getInt
(
"Length"
);
rowData
.
setInt
(
6
,
getColumnSize
(
typeName
,
length
));
rowData
.
setIntValue
(
7
,
calculateColumnSize
(
typeName
,
precision
,
length
));
// set BUFFER LENGTH
rowData
.
setStringValue
(
8
,
null
);
// set DECIMAL_DIGITS
rowData
.
setInt
(
8
,
getDecimalDigits
(
typeName
));
Integer
decimalDigits
=
calculateDecimalDigits
(
typeName
);
if
(
decimalDigits
!=
null
)
{
rowData
.
setIntValue
(
9
,
decimalDigits
);
}
else
{
rowData
.
setStringValue
(
9
,
null
);
}
// set NUM_PREC_RADIX
rowData
.
setInt
(
9
,
10
);
rowData
.
setInt
Value
(
10
,
10
);
// set NULLABLE
rowData
.
setInt
(
10
,
getNullable
(
i
ndex
,
typeName
));
rowData
.
setInt
Value
(
11
,
isNullable
(
rowI
ndex
,
typeName
));
// set REMARKS
rowData
.
setString
(
11
,
rs
.
getString
(
"Note"
));
String
note
=
rs
.
getString
(
"Note"
);
rowData
.
setStringValue
(
12
,
note
.
trim
().
isEmpty
()
?
null
:
note
);
rowDataList
.
add
(
rowData
);
i
ndex
++;
rowI
ndex
++;
}
resultSet
.
setRowDataList
(
rowDataList
);
return
resultSet
;
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
return
null
;
return
resultSet
;
}
pr
otected
int
get
Nullable
(
int
index
,
String
typeName
)
{
pr
ivate
int
is
Nullable
(
int
index
,
String
typeName
)
{
if
(
index
==
0
&&
"TIMESTAMP"
.
equals
(
typeName
))
return
DatabaseMetaData
.
columnNoNulls
;
return
DatabaseMetaData
.
columnNullable
;
}
pr
otected
int
getColumnSize
(
String
typeNam
e
,
int
length
)
{
pr
ivate
Integer
calculateColumnSize
(
String
typeName
,
String
precisionTyp
e
,
int
length
)
{
switch
(
typeName
)
{
case
"TIMESTAMP"
:
return
23
;
default
:
return
0
;
}
}
protected
int
getDecimalDigits
(
String
typeName
)
{
switch
(
typeName
)
{
return
precisionType
.
equals
(
"ms"
)
?
TSDBConstants
.
TIMESTAMP_MS_PRECISION
:
TSDBConstants
.
TIMESTAMP_US_PRECISION
;
case
"BOOL"
:
return
TSDBConstants
.
BOOLEAN_PRECISION
;
case
"TINYINT"
:
return
TSDBConstants
.
TINYINT_PRECISION
;
case
"SMALLINT"
:
return
TSDBConstants
.
SMALLINT_PRECISION
;
case
"INT"
:
return
TSDBConstants
.
INT_PRECISION
;
case
"BIGINT"
:
return
TSDBConstants
.
BIGINT_PRECISION
;
case
"FLOAT"
:
return
5
;
return
TSDBConstants
.
FLOAT_PRECISION
;
case
"DOUBLE"
:
return
9
;
return
TSDBConstants
.
DOUBLE_PRECISION
;
case
"NCHAR"
:
case
"BINARY"
:
return
length
;
default
:
return
0
;
return
null
;
}
}
pr
otected
int
getDataType
(
String
typeName
)
{
pr
ivate
Integer
calculateDecimalDigits
(
String
typeName
)
{
switch
(
typeName
)
{
case
"TI
MESTAMP
"
:
return
Types
.
TIMESTAMP
;
case
"TI
NYINT
"
:
case
"SMALLINT"
:
case
"INT"
:
return
Types
.
INTEGER
;
case
"BIGINT"
:
return
Types
.
BIGINT
;
case
"FLOAT"
:
return
Types
.
FLOAT
;
case
"DOUBLE"
:
return
Types
.
DOUBLE
;
case
"BINARY"
:
return
Types
.
BINARY
;
case
"SMALLINT"
:
return
Types
.
SMALLINT
;
case
"TINYINT"
:
return
Types
.
TINYINT
;
case
"BOOL"
:
return
Types
.
BOOLEAN
;
case
"NCHAR"
:
return
Types
.
NCHAR
;
return
0
;
default
:
return
Types
.
NULL
;
return
null
;
}
}
public
ResultSet
getColumnPrivileges
(
String
catalog
,
String
schema
,
String
table
,
String
columnNamePattern
)
throws
SQLException
{
private
ColumnMetaData
buildTableCatalogMeta
(
int
colIndex
)
{
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
colIndex
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
Types
.
NCHAR
);
return
col1
;
}
private
ColumnMetaData
buildTableSchemaMeta
(
int
colIndex
)
{
ColumnMetaData
col2
=
new
ColumnMetaData
();
col2
.
setColIndex
(
colIndex
);
col2
.
setColName
(
"TABLE_SCHEM"
);
col2
.
setColType
(
Types
.
NCHAR
);
return
col2
;
}
private
ColumnMetaData
buildTableNameMeta
(
int
colIndex
)
{
ColumnMetaData
col3
=
new
ColumnMetaData
();
col3
.
setColIndex
(
colIndex
);
col3
.
setColName
(
"TABLE_NAME"
);
col3
.
setColSize
(
193
);
col3
.
setColType
(
Types
.
NCHAR
);
return
col3
;
}
private
ColumnMetaData
buildColumnNameMeta
(
int
colIndex
)
{
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
colIndex
);
col4
.
setColName
(
"COLUMN_NAME"
);
col4
.
setColSize
(
65
);
col4
.
setColType
(
Types
.
NCHAR
);
return
col4
;
}
private
ColumnMetaData
buildDataTypeMeta
(
int
colIndex
)
{
ColumnMetaData
col5
=
new
ColumnMetaData
();
col5
.
setColIndex
(
colIndex
);
col5
.
setColName
(
"DATA_TYPE"
);
col5
.
setColType
(
Types
.
INTEGER
);
return
col5
;
}
private
ColumnMetaData
buildColumnSizeMeta
()
{
ColumnMetaData
col7
=
new
ColumnMetaData
();
col7
.
setColIndex
(
7
);
col7
.
setColName
(
"COLUMN_SIZE"
);
col7
.
setColType
(
Types
.
INTEGER
);
return
col7
;
}
private
ColumnMetaData
buildBufferLengthMeta
()
{
ColumnMetaData
col8
=
new
ColumnMetaData
();
col8
.
setColIndex
(
8
);
col8
.
setColName
(
"BUFFER_LENGTH"
);
return
col8
;
}
private
ColumnMetaData
buildDecimalDigitsMeta
()
{
ColumnMetaData
col9
=
new
ColumnMetaData
();
col9
.
setColIndex
(
9
);
col9
.
setColName
(
"DECIMAL_DIGITS"
);
col9
.
setColType
(
Types
.
INTEGER
);
return
col9
;
}
private
ColumnMetaData
buildNumPrecRadixMeta
()
{
ColumnMetaData
col10
=
new
ColumnMetaData
();
col10
.
setColIndex
(
10
);
col10
.
setColName
(
"NUM_PREC_RADIX"
);
col10
.
setColType
(
Types
.
INTEGER
);
return
col10
;
}
private
ColumnMetaData
buildNullableMeta
()
{
ColumnMetaData
col11
=
new
ColumnMetaData
();
col11
.
setColIndex
(
11
);
col11
.
setColName
(
"NULLABLE"
);
col11
.
setColType
(
Types
.
INTEGER
);
return
col11
;
}
private
ColumnMetaData
buildRemarksMeta
(
int
colIndex
)
{
ColumnMetaData
col12
=
new
ColumnMetaData
();
col12
.
setColIndex
(
colIndex
);
col12
.
setColName
(
"REMARKS"
);
col12
.
setColType
(
Types
.
NCHAR
);
return
col12
;
}
private
ColumnMetaData
buildColumnDefMeta
()
{
ColumnMetaData
col13
=
new
ColumnMetaData
();
col13
.
setColIndex
(
13
);
col13
.
setColName
(
"COLUMN_DEF"
);
col13
.
setColType
(
Types
.
NCHAR
);
return
col13
;
}
private
ColumnMetaData
buildSqlDataTypeMeta
()
{
ColumnMetaData
col14
=
new
ColumnMetaData
();
col14
.
setColIndex
(
14
);
col14
.
setColName
(
"SQL_DATA_TYPE"
);
col14
.
setColType
(
Types
.
INTEGER
);
return
col14
;
}
private
ColumnMetaData
buildSqlDatetimeSubMeta
()
{
ColumnMetaData
col15
=
new
ColumnMetaData
();
col15
.
setColIndex
(
15
);
col15
.
setColName
(
"SQL_DATETIME_SUB"
);
col15
.
setColType
(
Types
.
INTEGER
);
return
col15
;
}
private
ColumnMetaData
buildCharOctetLengthMeta
()
{
ColumnMetaData
col16
=
new
ColumnMetaData
();
col16
.
setColIndex
(
16
);
col16
.
setColName
(
"CHAR_OCTET_LENGTH"
);
col16
.
setColType
(
Types
.
INTEGER
);
return
col16
;
}
private
ColumnMetaData
buildOrdinalPositionMeta
()
{
ColumnMetaData
col17
=
new
ColumnMetaData
();
col17
.
setColIndex
(
17
);
col17
.
setColName
(
"ORDINAL_POSITION"
);
col17
.
setColType
(
Types
.
INTEGER
);
return
col17
;
}
private
ColumnMetaData
buildIsNullableMeta
()
{
ColumnMetaData
col18
=
new
ColumnMetaData
();
col18
.
setColIndex
(
18
);
col18
.
setColName
(
"IS_NULLABLE"
);
col18
.
setColType
(
Types
.
NCHAR
);
return
col18
;
}
private
ColumnMetaData
buildScopeCatalogMeta
()
{
ColumnMetaData
col19
=
new
ColumnMetaData
();
col19
.
setColIndex
(
19
);
col19
.
setColName
(
"SCOPE_CATALOG"
);
col19
.
setColType
(
Types
.
NCHAR
);
return
col19
;
}
private
ColumnMetaData
buildScopeSchemaMeta
()
{
ColumnMetaData
col20
=
new
ColumnMetaData
();
col20
.
setColIndex
(
20
);
col20
.
setColName
(
"SCOPE_SCHEMA"
);
col20
.
setColType
(
Types
.
NCHAR
);
return
col20
;
}
private
ColumnMetaData
buildScopeTableMeta
()
{
ColumnMetaData
col21
=
new
ColumnMetaData
();
col21
.
setColIndex
(
21
);
col21
.
setColName
(
"SCOPE_TABLE"
);
col21
.
setColType
(
Types
.
NCHAR
);
return
col21
;
}
private
ColumnMetaData
buildSourceDataTypeMeta
()
{
ColumnMetaData
col22
=
new
ColumnMetaData
();
col22
.
setColIndex
(
22
);
col22
.
setColName
(
"SOURCE_DATA_TYPE"
);
col22
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
);
return
col22
;
}
private
ColumnMetaData
buildIsAutoIncrementMeta
()
{
ColumnMetaData
col23
=
new
ColumnMetaData
();
col23
.
setColIndex
(
23
);
col23
.
setColName
(
"IS_AUTOINCREMENT"
);
col23
.
setColType
(
Types
.
NCHAR
);
return
col23
;
}
private
ColumnMetaData
buildIsGeneratedColumnMeta
()
{
ColumnMetaData
col24
=
new
ColumnMetaData
();
col24
.
setColIndex
(
24
);
col24
.
setColName
(
"IS_GENERATEDCOLUMN"
);
col24
.
setColType
(
Types
.
NCHAR
);
return
col24
;
}
private
List
<
ColumnMetaData
>
buildGetColumnsColumnMetaDataList
()
{
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableCatalogMeta
(
1
));
//1. TABLE_CAT
columnMetaDataList
.
add
(
buildTableSchemaMeta
(
2
));
//2. TABLE_SCHEMA
columnMetaDataList
.
add
(
buildTableNameMeta
(
3
));
//3. TABLE_NAME
columnMetaDataList
.
add
(
buildColumnNameMeta
(
4
));
//4. COLUMN_NAME
columnMetaDataList
.
add
(
buildDataTypeMeta
(
5
));
//5. DATA_TYPE
columnMetaDataList
.
add
(
buildTypeNameMeta
(
6
));
//6. TYPE_NAME
columnMetaDataList
.
add
(
buildColumnSizeMeta
());
//7. COLUMN_SIZE
columnMetaDataList
.
add
(
buildBufferLengthMeta
());
//8. BUFFER_LENGTH, not used
columnMetaDataList
.
add
(
buildDecimalDigitsMeta
());
//9. DECIMAL_DIGITS
columnMetaDataList
.
add
(
buildNumPrecRadixMeta
());
//10. NUM_PREC_RADIX
columnMetaDataList
.
add
(
buildNullableMeta
());
//11. NULLABLE
columnMetaDataList
.
add
(
buildRemarksMeta
(
12
));
//12. REMARKS
columnMetaDataList
.
add
(
buildColumnDefMeta
());
//13. COLUMN_DEF
columnMetaDataList
.
add
(
buildSqlDataTypeMeta
());
//14. SQL_DATA_TYPE
columnMetaDataList
.
add
(
buildSqlDatetimeSubMeta
());
//15. SQL_DATETIME_SUB
columnMetaDataList
.
add
(
buildCharOctetLengthMeta
());
//16. CHAR_OCTET_LENGTH
columnMetaDataList
.
add
(
buildOrdinalPositionMeta
());
//17. ORDINAL_POSITION
columnMetaDataList
.
add
(
buildIsNullableMeta
());
//18. IS_NULLABLE
columnMetaDataList
.
add
(
buildScopeCatalogMeta
());
//19. SCOPE_CATALOG
columnMetaDataList
.
add
(
buildScopeSchemaMeta
());
//20. SCOPE_SCHEMA
columnMetaDataList
.
add
(
buildScopeTableMeta
());
//21. SCOPE_TABLE
columnMetaDataList
.
add
(
buildSourceDataTypeMeta
());
//22. SOURCE_DATA_TYPE
columnMetaDataList
.
add
(
buildIsAutoIncrementMeta
());
//23. IS_AUTOINCREMENT
columnMetaDataList
.
add
(
buildIsGeneratedColumnMeta
());
//24. IS_GENERATEDCOLUMN
return
columnMetaDataList
;
}
public
ResultSet
getColumnPrivileges
(
String
catalog
,
String
schema
,
String
table
,
String
columnNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
public
ResultSet
getTablePrivileges
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
)
throws
SQLException
{
public
ResultSet
getTablePrivileges
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
public
ResultSet
getBestRowIdentifier
(
String
catalog
,
String
schema
,
String
table
,
int
scope
,
boolean
nullable
)
throws
SQLException
{
public
ResultSet
getBestRowIdentifier
(
String
catalog
,
String
schema
,
String
table
,
int
scope
,
boolean
nullable
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -914,8 +971,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
return
getEmptyResultSet
();
}
public
ResultSet
getCrossReference
(
String
parentCatalog
,
String
parentSchema
,
String
parentTable
,
String
foreignCatalog
,
String
foreignSchema
,
String
foreignTable
)
throws
SQLException
{
public
ResultSet
getCrossReference
(
String
parentCatalog
,
String
parentSchema
,
String
parentTable
,
String
foreignCatalog
,
String
foreignSchema
,
String
foreignTable
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -923,8 +979,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
return
getEmptyResultSet
();
}
public
ResultSet
getIndexInfo
(
String
catalog
,
String
schema
,
String
table
,
boolean
unique
,
boolean
approximate
)
throws
SQLException
{
public
ResultSet
getIndexInfo
(
String
catalog
,
String
schema
,
String
table
,
boolean
unique
,
boolean
approximate
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -976,8 +1031,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
return
false
;
}
public
ResultSet
getUDTs
(
String
catalog
,
String
schemaPattern
,
String
typeNamePattern
,
int
[]
types
)
throws
SQLException
{
public
ResultSet
getUDTs
(
String
catalog
,
String
schemaPattern
,
String
typeNamePattern
,
int
[]
types
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -1005,8 +1059,7 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
public
abstract
ResultSet
getSuperTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
)
throws
SQLException
;
public
ResultSet
getAttributes
(
String
catalog
,
String
schemaPattern
,
String
typeNamePattern
,
String
attributeNamePattern
)
throws
SQLException
{
public
ResultSet
getAttributes
(
String
catalog
,
String
schemaPattern
,
String
typeNamePattern
,
String
attributeNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -1069,18 +1122,15 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
return
getEmptyResultSet
();
}
public
ResultSet
getFunctions
(
String
catalog
,
String
schemaPattern
,
String
functionNamePattern
)
throws
SQLException
{
public
ResultSet
getFunctions
(
String
catalog
,
String
schemaPattern
,
String
functionNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
public
ResultSet
getFunctionColumns
(
String
catalog
,
String
schemaPattern
,
String
functionNamePattern
,
String
columnNamePattern
)
throws
SQLException
{
public
ResultSet
getFunctionColumns
(
String
catalog
,
String
schemaPattern
,
String
functionNamePattern
,
String
columnNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
public
ResultSet
getPseudoColumns
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
columnNamePattern
)
throws
SQLException
{
public
ResultSet
getPseudoColumns
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
String
columnNamePattern
)
throws
SQLException
{
return
getEmptyResultSet
();
}
...
...
@@ -1093,164 +1143,142 @@ public abstract class AbstractDatabaseMetaData extends WrapperImpl implements Da
}
protected
ResultSet
getCatalogs
(
Connection
conn
)
throws
SQLException
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
// TABLE_CAT
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
1
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col1
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableCatalogMeta
(
1
));
// 1. TABLE_CAT
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
ResultSet
rs
=
stmt
.
executeQuery
(
"show databases"
);
while
(
rs
.
next
())
{
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
1
);
rowData
.
setString
(
0
,
rs
.
getString
(
"name"
));
rowData
.
setString
Value
(
1
,
rs
.
getString
(
"name"
));
rowDataList
.
add
(
rowData
);
}
resultSet
.
setRowDataList
(
rowDataList
);
return
resultSet
;
}
return
resultSet
;
}
protected
ResultSet
getPrimaryKeys
(
String
catalog
,
String
schema
,
String
table
,
Connection
conn
)
throws
SQLException
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
if
(!
isAvailableCatalog
(
conn
,
catalog
))
return
new
EmptyResultSet
();
ResultSet
databases
=
stmt
.
executeQuery
(
"show databases"
);
String
dbname
=
null
;
while
(
databases
.
next
())
{
dbname
=
databases
.
getString
(
"name"
);
if
(
dbname
.
equalsIgnoreCase
(
catalog
))
break
;
}
databases
.
close
();
if
(
dbname
==
null
)
return
null
;
stmt
.
execute
(
"use "
+
dbname
);
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
try
(
Statement
stmt
=
conn
.
createStatement
())
{
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
// TABLE_CAT
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
0
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col1
);
// TABLE_SCHEM
ColumnMetaData
col2
=
new
ColumnMetaData
();
col2
.
setColIndex
(
1
);
col2
.
setColName
(
"TABLE_SCHEM"
);
col2
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col2
);
// TABLE_NAME
ColumnMetaData
col3
=
new
ColumnMetaData
();
col3
.
setColIndex
(
2
);
col3
.
setColName
(
"TABLE_NAME"
);
col3
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col3
);
// COLUMN_NAME
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
3
);
col4
.
setColName
(
"COLUMN_NAME"
);
col4
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col4
);
// KEY_SEQ
ColumnMetaData
col5
=
new
ColumnMetaData
();
col5
.
setColIndex
(
4
);
col5
.
setColName
(
"KEY_SEQ"
);
col5
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_INT
);
columnMetaDataList
.
add
(
col5
);
// PK_NAME
ColumnMetaData
col6
=
new
ColumnMetaData
();
col6
.
setColIndex
(
5
);
col6
.
setColName
(
"PK_NAME"
);
col6
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col6
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
resultSet
.
setColumnMetaDataList
(
buildGetPrimaryKeysMetadataList
());
// set rowData
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
ResultSet
rs
=
stmt
.
executeQuery
(
"describe "
+
dbname
+
"."
+
table
);
ResultSet
rs
=
stmt
.
executeQuery
(
"describe "
+
catalog
+
"."
+
table
);
rs
.
next
();
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
6
);
rowData
.
setString
(
0
,
null
);
rowData
.
setString
(
1
,
null
);
rowData
.
setString
(
2
,
table
);
String
p
kName
=
rs
.
getString
(
1
);
rowData
.
setString
(
3
,
pkName
);
rowData
.
set
Int
(
4
,
1
);
rowData
.
setString
(
5
,
pkName
);
rowData
.
setString
Value
(
1
,
catalog
);
rowData
.
setString
Value
(
2
,
null
);
rowData
.
setString
Value
(
3
,
table
);
String
p
rimaryKey
=
rs
.
getString
(
"Field"
);
rowData
.
setString
Value
(
4
,
primaryKey
);
rowData
.
set
ShortValue
(
5
,
(
short
)
1
);
rowData
.
setString
Value
(
6
,
primaryKey
);
rowDataList
.
add
(
rowData
);
resultSet
.
setRowDataList
(
rowDataList
);
return
resultSet
;
}
return
resultSet
;
}
protected
ResultSet
getSuperTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
Connection
conn
)
throws
SQLException
{
try
(
Statement
stmt
=
conn
.
createStatement
())
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
private
List
<
ColumnMetaData
>
buildGetPrimaryKeysMetadataList
()
{
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableCatalogMeta
(
1
));
// 1. TABLE_CAT
columnMetaDataList
.
add
(
buildTableSchemaMeta
(
2
));
// 2. TABLE_SCHEM
columnMetaDataList
.
add
(
buildTableNameMeta
(
3
));
// 3. TABLE_NAME
columnMetaDataList
.
add
(
buildColumnNameMeta
(
4
));
// 4. COLUMN_NAME
columnMetaDataList
.
add
(
buildKeySeqMeta
(
5
));
// 5. KEY_SEQ
columnMetaDataList
.
add
(
buildPrimaryKeyNameMeta
(
6
));
// 6. PK_NAME
return
columnMetaDataList
;
}
private
ColumnMetaData
buildKeySeqMeta
(
int
colIndex
)
{
ColumnMetaData
col5
=
new
ColumnMetaData
();
col5
.
setColIndex
(
colIndex
);
col5
.
setColName
(
"KEY_SEQ"
);
col5
.
setColType
(
Types
.
SMALLINT
);
return
col5
;
}
private
ColumnMetaData
buildPrimaryKeyNameMeta
(
int
colIndex
)
{
ColumnMetaData
col6
=
new
ColumnMetaData
();
col6
.
setColIndex
(
colIndex
);
col6
.
setColName
(
"PK_NAME"
);
col6
.
setColType
(
Types
.
NCHAR
);
return
col6
;
}
private
boolean
isAvailableCatalog
(
Connection
connection
,
String
catalog
)
{
try
(
Statement
stmt
=
connection
.
createStatement
())
{
ResultSet
databases
=
stmt
.
executeQuery
(
"show databases"
);
String
dbname
=
null
;
while
(
databases
.
next
())
{
dbname
=
databases
.
getString
(
"name"
);
String
dbname
=
databases
.
getString
(
"name"
);
this
.
database
=
dbname
;
this
.
precision
=
databases
.
getString
(
"precision"
);
if
(
dbname
.
equalsIgnoreCase
(
catalog
))
break
;
return
true
;
}
databases
.
close
();
if
(
dbname
==
null
)
return
null
;
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
return
false
;
}
stmt
.
execute
(
"use "
+
dbname
);
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
// set up ColumnMetaDataList
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
// TABLE_CAT
ColumnMetaData
col1
=
new
ColumnMetaData
();
col1
.
setColIndex
(
0
);
col1
.
setColName
(
"TABLE_CAT"
);
col1
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col1
);
// TABLE_SCHEM
ColumnMetaData
col2
=
new
ColumnMetaData
();
col2
.
setColIndex
(
1
);
col2
.
setColName
(
"TABLE_SCHEM"
);
col2
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col2
);
// TABLE_NAME
ColumnMetaData
col3
=
new
ColumnMetaData
();
col3
.
setColIndex
(
2
);
col3
.
setColName
(
"TABLE_NAME"
);
col3
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col3
);
// SUPERTABLE_NAME
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
3
);
col4
.
setColName
(
"SUPERTABLE_NAME"
);
col4
.
setColType
(
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
);
columnMetaDataList
.
add
(
col4
);
resultSet
.
setColumnMetaDataList
(
columnMetaDataList
);
protected
ResultSet
getSuperTables
(
String
catalog
,
String
schemaPattern
,
String
tableNamePattern
,
Connection
conn
)
throws
SQLException
{
if
(
catalog
==
null
||
catalog
.
isEmpty
())
return
null
;
if
(!
isAvailableCatalog
(
conn
,
catalog
))
{
return
new
EmptyResultSet
();
}
DatabaseMetaDataResultSet
resultSet
=
new
DatabaseMetaDataResultSet
();
try
(
Statement
stmt
=
conn
.
createStatement
())
{
// set up ColumnMetaDataList
resultSet
.
setColumnMetaDataList
(
buildGetSuperTablesColumnMetaDataList
());
// set result set row data
stmt
.
execute
(
"use "
+
catalog
);
ResultSet
rs
=
stmt
.
executeQuery
(
"show tables like '"
+
tableNamePattern
+
"'"
);
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>();
while
(
rs
.
next
())
{
TSDBResultSetRowData
rowData
=
new
TSDBResultSetRowData
(
4
);
rowData
.
setString
(
2
,
rs
.
getString
(
1
));
rowData
.
setString
(
3
,
rs
.
getString
(
4
));
rowData
.
setStringValue
(
1
,
catalog
);
rowData
.
setStringValue
(
2
,
null
);
rowData
.
setStringValue
(
3
,
rs
.
getString
(
"table_name"
));
rowData
.
setStringValue
(
4
,
rs
.
getString
(
"stable_name"
));
rowDataList
.
add
(
rowData
);
}
resultSet
.
setRowDataList
(
rowDataList
);
return
resultSet
;
}
return
resultSet
;
}
private
List
<
ColumnMetaData
>
buildGetSuperTablesColumnMetaDataList
()
{
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>();
columnMetaDataList
.
add
(
buildTableCatalogMeta
(
1
));
// 1. TABLE_CAT
columnMetaDataList
.
add
(
buildTableSchemaMeta
(
2
));
// 2. TABLE_SCHEM
columnMetaDataList
.
add
(
buildTableNameMeta
(
3
));
// 3. TABLE_NAME
columnMetaDataList
.
add
(
buildSuperTableNameMeta
(
4
));
// 4. SUPERTABLE_NAME
return
columnMetaDataList
;
}
private
ColumnMetaData
buildSuperTableNameMeta
(
int
colIndex
)
{
ColumnMetaData
col4
=
new
ColumnMetaData
();
col4
.
setColIndex
(
colIndex
);
col4
.
setColName
(
"SUPERTABLE_NAME"
);
col4
.
setColType
(
Types
.
NCHAR
);
return
col4
;
}
}
\ No newline at end of file
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractParameterMetaData.java
浏览文件 @
80e64a5a
package
com.taosdata.jdbc
;
import
com.sun.org.apache.xpath.internal.operations.Bool
;
import
java.sql.ParameterMetaData
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
...
...
@@ -49,6 +51,22 @@ public abstract class AbstractParameterMetaData extends WrapperImpl implements P
if
(
param
<
1
&&
param
>=
parameters
.
length
)
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_PARAMETER_INDEX_OUT_RANGE
);
if
(
parameters
[
param
-
1
]
instanceof
Boolean
)
return
TSDBConstants
.
BOOLEAN_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Byte
)
return
TSDBConstants
.
TINYINT_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Short
)
return
TSDBConstants
.
SMALLINT_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Integer
)
return
TSDBConstants
.
INT_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Long
)
return
TSDBConstants
.
BIGINT_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Timestamp
)
return
TSDBConstants
.
TIMESTAMP_MS_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Float
)
return
TSDBConstants
.
FLOAT_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
Double
)
return
TSDBConstants
.
DOUBLE_PRECISION
;
if
(
parameters
[
param
-
1
]
instanceof
String
)
return
((
String
)
parameters
[
param
-
1
]).
length
();
if
(
parameters
[
param
-
1
]
instanceof
byte
[])
...
...
@@ -60,6 +78,11 @@ public abstract class AbstractParameterMetaData extends WrapperImpl implements P
public
int
getScale
(
int
param
)
throws
SQLException
{
if
(
param
<
1
&&
param
>=
parameters
.
length
)
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_PARAMETER_INDEX_OUT_RANGE
);
if
(
parameters
[
param
-
1
]
instanceof
Float
)
return
TSDBConstants
.
FLOAT_SCALE
;
if
(
parameters
[
param
-
1
]
instanceof
Double
)
return
TSDBConstants
.
DOUBLE_SCALE
;
return
0
;
}
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractResultSet.java
浏览文件 @
80e64a5a
...
...
@@ -66,10 +66,16 @@ public abstract class AbstractResultSet extends WrapperImpl implements ResultSet
public
abstract
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
;
@Override
public
abstract
Date
getDate
(
int
columnIndex
)
throws
SQLException
;
public
Date
getDate
(
int
columnIndex
)
throws
SQLException
{
Timestamp
timestamp
=
getTimestamp
(
columnIndex
);
return
timestamp
==
null
?
null
:
new
Date
(
timestamp
.
getTime
());
}
@Override
public
abstract
Time
getTime
(
int
columnIndex
)
throws
SQLException
;
public
Time
getTime
(
int
columnIndex
)
throws
SQLException
{
Timestamp
timestamp
=
getTimestamp
(
columnIndex
);
return
timestamp
==
null
?
null
:
new
Time
(
timestamp
.
getTime
());
}
@Override
public
abstract
Timestamp
getTimestamp
(
int
columnIndex
)
throws
SQLException
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
浏览文件 @
80e64a5a
...
...
@@ -14,76 +14,42 @@
*****************************************************************************/
package
com.taosdata.jdbc
;
import
java.io.InputStream
;
import
java.io.Reader
;
import
java.math.BigDecimal
;
import
java.net.URL
;
import
java.sql.Date
;
import
java.sql.*
;
import
java.util.*
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Iterator
;
import
java.util.List
;
/*
* TDengine only supports a subset of the standard SQL, thus this implemetation of the
* TDengine only supports a subset of the standard SQL, thus this impleme
n
tation of the
* standard JDBC API contains more or less some adjustments customized for certain
* compatibility needs.
*/
public
class
DatabaseMetaDataResultSet
implements
ResultSet
{
public
class
DatabaseMetaDataResultSet
extends
Abstract
ResultSet
{
private
List
<
ColumnMetaData
>
columnMetaDataList
;
private
List
<
TSDBResultSetRowData
>
rowDataList
;
private
List
<
ColumnMetaData
>
columnMetaDataList
=
new
ArrayList
<>()
;
private
List
<
TSDBResultSetRowData
>
rowDataList
=
new
ArrayList
<>()
;
private
TSDBResultSetRowData
rowCursor
;
// position of cursor, starts from 0 as beforeFirst, increases as next() is called
private
int
cursorRowNumber
=
0
;
public
DatabaseMetaDataResultSet
()
{
rowDataList
=
new
ArrayList
<
TSDBResultSetRowData
>();
columnMetaDataList
=
new
ArrayList
<
ColumnMetaData
>();
}
public
List
<
TSDBResultSetRowData
>
getRowDataList
()
{
return
rowDataList
;
}
public
void
setRowDataList
(
List
<
TSDBResultSetRowData
>
rowDataList
)
{
this
.
rowDataList
=
rowDataList
;
}
public
List
<
ColumnMetaData
>
getColumnMetaDataList
()
{
return
columnMetaDataList
;
}
public
void
setColumnMetaDataList
(
List
<
ColumnMetaData
>
columnMetaDataList
)
{
this
.
columnMetaDataList
=
columnMetaDataList
;
}
public
TSDBResultSetRowData
getRowCursor
()
{
return
rowCursor
;
}
public
void
setRowCursor
(
TSDBResultSetRowData
rowCursor
)
{
this
.
rowCursor
=
rowCursor
;
}
@Override
public
boolean
next
()
throws
SQLException
{
// boolean ret = false;
// if (rowDataList.size() > 0) {
// ret = rowDataList.iterator().hasNext();
// if (ret) {
// rowCursor = rowDataList.iterator().next();
// cursorRowNumber++;
// }
// }
// return ret;
/**** add by zyyang 2020-09-29 ****************/
boolean
ret
=
false
;
if
(!
rowDataList
.
isEmpty
()
&&
cursorRowNumber
<
rowDataList
.
size
())
{
rowCursor
=
rowDataList
.
get
(
cursorRowNumber
++);
ret
=
true
;
}
return
ret
;
}
...
...
@@ -99,189 +65,72 @@ public class DatabaseMetaDataResultSet implements ResultSet {
@Override
public
String
getString
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--
;
int
colType
=
columnMetaDataList
.
get
(
columnIndex
).
getColType
(
);
return
rowCursor
.
getString
(
columnIndex
,
col
Type
);
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
()
;
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getString
(
columnIndex
,
native
Type
);
}
@Override
public
boolean
getBoolean
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getBoolean
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getBoolean
(
columnIndex
,
nativeType
);
}
@Override
public
byte
getByte
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
(
byte
)
rowCursor
.
getInt
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
(
byte
)
rowCursor
.
getInt
(
columnIndex
,
nativeType
);
}
@Override
public
short
getShort
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
(
short
)
rowCursor
.
getInt
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
(
short
)
rowCursor
.
getInt
(
columnIndex
,
nativeType
);
}
@Override
public
int
getInt
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getInt
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getInt
(
columnIndex
,
nativeType
);
}
@Override
public
long
getLong
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getLong
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getLong
(
columnIndex
,
nativeType
);
}
@Override
public
float
getFloat
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getFloat
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getFloat
(
columnIndex
,
nativeType
);
}
@Override
public
double
getDouble
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getDouble
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
());
}
@Override
public
BigDecimal
getBigDecimal
(
int
columnIndex
,
int
scale
)
throws
SQLException
{
columnIndex
--;
return
new
BigDecimal
(
rowCursor
.
getDouble
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
()));
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getDouble
(
columnIndex
,
nativeType
);
}
@Override
public
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
(
rowCursor
.
getString
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
())).
getBytes
();
}
@Override
public
Date
getDate
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
Time
getTime
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
(
rowCursor
.
getString
(
columnIndex
,
nativeType
)).
getBytes
();
}
@Override
public
Timestamp
getTimestamp
(
int
columnIndex
)
throws
SQLException
{
columnIndex
--;
return
rowCursor
.
getTimestamp
(
columnIndex
);
}
@Override
public
InputStream
getAsciiStream
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
InputStream
getUnicodeStream
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
InputStream
getBinaryStream
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
String
getString
(
String
columnLabel
)
throws
SQLException
{
return
getString
(
findColumn
(
columnLabel
));
}
@Override
public
boolean
getBoolean
(
String
columnLabel
)
throws
SQLException
{
return
getBoolean
(
findColumn
(
columnLabel
));
}
@Override
public
byte
getByte
(
String
columnLabel
)
throws
SQLException
{
return
getByte
(
findColumn
(
columnLabel
));
}
@Override
public
short
getShort
(
String
columnLabel
)
throws
SQLException
{
return
getShort
(
findColumn
(
columnLabel
));
}
@Override
public
int
getInt
(
String
columnLabel
)
throws
SQLException
{
return
getInt
(
findColumn
(
columnLabel
));
}
@Override
public
long
getLong
(
String
columnLabel
)
throws
SQLException
{
return
getLong
(
findColumn
(
columnLabel
));
}
@Override
public
float
getFloat
(
String
columnLabel
)
throws
SQLException
{
return
getFloat
(
findColumn
(
columnLabel
));
}
@Override
public
double
getDouble
(
String
columnLabel
)
throws
SQLException
{
return
getDouble
(
findColumn
(
columnLabel
));
}
@Override
public
BigDecimal
getBigDecimal
(
String
columnLabel
,
int
scale
)
throws
SQLException
{
return
getBigDecimal
(
findColumn
(
columnLabel
));
}
@Override
public
byte
[]
getBytes
(
String
columnLabel
)
throws
SQLException
{
return
getBytes
(
findColumn
(
columnLabel
));
}
@Override
public
Date
getDate
(
String
columnLabel
)
throws
SQLException
{
return
getDate
(
findColumn
(
columnLabel
));
}
@Override
public
Time
getTime
(
String
columnLabel
)
throws
SQLException
{
return
getTime
(
findColumn
(
columnLabel
));
}
@Override
public
Timestamp
getTimestamp
(
String
columnLabel
)
throws
SQLException
{
return
getTimestamp
(
findColumn
(
columnLabel
));
}
@Override
public
InputStream
getAsciiStream
(
String
columnLabel
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
InputStream
getUnicodeStream
(
String
columnLabel
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
InputStream
getBinaryStream
(
String
columnLabel
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
SQLWarning
getWarnings
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
clearWarnings
()
throws
SQLException
{
}
@Override
public
String
getCursorName
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
return
rowCursor
.
getTimestamp
(
columnIndex
,
nativeType
);
}
@Override
...
...
@@ -291,12 +140,7 @@ public class DatabaseMetaDataResultSet implements ResultSet {
@Override
public
Object
getObject
(
int
columnIndex
)
throws
SQLException
{
return
rowCursor
.
get
(
columnIndex
);
}
@Override
public
Object
getObject
(
String
columnLabel
)
throws
SQLException
{
return
rowCursor
.
get
(
findColumn
(
columnLabel
));
return
rowCursor
.
getObject
(
columnIndex
);
}
@Override
...
...
@@ -304,31 +148,19 @@ public class DatabaseMetaDataResultSet implements ResultSet {
Iterator
<
ColumnMetaData
>
colMetaDataIt
=
this
.
columnMetaDataList
.
iterator
();
while
(
colMetaDataIt
.
hasNext
())
{
ColumnMetaData
colMetaData
=
colMetaDataIt
.
next
();
if
(
colMetaData
.
getColName
()
!=
null
&&
colMetaData
.
getColName
().
equals
IgnoreCase
(
columnLabel
))
{
return
colMetaData
.
getColIndex
()
+
1
;
if
(
colMetaData
.
getColName
()
!=
null
&&
colMetaData
.
getColName
().
equals
(
columnLabel
))
{
return
colMetaData
.
getColIndex
();
}
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
@Override
public
Reader
getCharacterStream
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
Reader
getCharacterStream
(
String
columnLabel
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
BigDecimal
getBigDecimal
(
int
columnIndex
)
throws
SQLException
{
return
new
BigDecimal
(
rowCursor
.
getDouble
(
columnIndex
,
columnMetaDataList
.
get
(
columnIndex
).
getColType
()));
}
@Override
public
BigDecimal
getBigDecimal
(
String
columnLabel
)
throws
SQLException
{
return
getBigDecimal
(
findColumn
(
columnLabel
));
int
colType
=
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
int
nativeType
=
TSDBConstants
.
jdbcType2TaosType
(
colType
);
double
value
=
rowCursor
.
getDouble
(
columnIndex
,
nativeType
);
return
new
BigDecimal
(
value
);
}
@Override
...
...
@@ -378,7 +210,6 @@ public class DatabaseMetaDataResultSet implements ResultSet {
}
else
{
return
0
;
}
}
@Override
...
...
@@ -397,680 +228,23 @@ public class DatabaseMetaDataResultSet implements ResultSet {
}
@Override
public
void
setFetchDirection
(
int
direction
)
throws
SQLException
{
}
@Override
public
int
getFetchDirection
()
throws
SQLException
{
return
ResultSet
.
FETCH_FORWARD
;
}
@Override
public
void
setFetchSize
(
int
rows
)
throws
SQLException
{
}
@Override
public
int
getFetchSize
()
throws
SQLException
{
return
0
;
}
@Override
public
int
getType
()
throws
SQLException
{
return
ResultSet
.
TYPE_FORWARD_ONLY
;
}
@Override
public
int
getConcurrency
()
throws
SQLException
{
return
ResultSet
.
CONCUR_READ_ONLY
;
}
@Override
public
boolean
rowUpdated
()
throws
SQLException
{
return
false
;
public
Statement
getStatement
()
throws
SQLException
{
return
null
;
}
@Override
public
boolean
rowInserted
()
throws
SQLException
{
return
false
;
public
Timestamp
getTimestamp
(
int
columnIndex
,
Calendar
cal
)
throws
SQLException
{
//TODO: calendar is not used
return
getTimestamp
(
columnIndex
)
;
}
@Override
public
boolean
rowDelet
ed
()
throws
SQLException
{
public
boolean
isClos
ed
()
throws
SQLException
{
return
false
;
}
@Override
public
void
updateNull
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBoolean
(
int
columnIndex
,
boolean
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateByte
(
int
columnIndex
,
byte
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateShort
(
int
columnIndex
,
short
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateInt
(
int
columnIndex
,
int
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateLong
(
int
columnIndex
,
long
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateFloat
(
int
columnIndex
,
float
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateDouble
(
int
columnIndex
,
double
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBigDecimal
(
int
columnIndex
,
BigDecimal
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateString
(
int
columnIndex
,
String
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBytes
(
int
columnIndex
,
byte
[]
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateDate
(
int
columnIndex
,
Date
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateTime
(
int
columnIndex
,
Time
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateTimestamp
(
int
columnIndex
,
Timestamp
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateAsciiStream
(
int
columnIndex
,
InputStream
x
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBinaryStream
(
int
columnIndex
,
InputStream
x
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateCharacterStream
(
int
columnIndex
,
Reader
x
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateObject
(
int
columnIndex
,
Object
x
,
int
scaleOrLength
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateObject
(
int
columnIndex
,
Object
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateNull
(
String
columnLabel
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBoolean
(
String
columnLabel
,
boolean
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateByte
(
String
columnLabel
,
byte
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateShort
(
String
columnLabel
,
short
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateInt
(
String
columnLabel
,
int
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateLong
(
String
columnLabel
,
long
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateFloat
(
String
columnLabel
,
float
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateDouble
(
String
columnLabel
,
double
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBigDecimal
(
String
columnLabel
,
BigDecimal
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateString
(
String
columnLabel
,
String
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
public
String
getNString
(
int
columnIndex
)
throws
SQLException
{
return
getString
(
columnIndex
);
}
@Override
public
void
updateBytes
(
String
columnLabel
,
byte
[]
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateDate
(
String
columnLabel
,
Date
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateTime
(
String
columnLabel
,
Time
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateTimestamp
(
String
columnLabel
,
Timestamp
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateAsciiStream
(
String
columnLabel
,
InputStream
x
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateBinaryStream
(
String
columnLabel
,
InputStream
x
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateCharacterStream
(
String
columnLabel
,
Reader
reader
,
int
length
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateObject
(
String
columnLabel
,
Object
x
,
int
scaleOrLength
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateObject
(
String
columnLabel
,
Object
x
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
insertRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
updateRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
deleteRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
refreshRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
cancelRowUpdates
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
moveToInsertRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
void
moveToCurrentRow
()
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
Statement
getStatement
()
throws
SQLException
{
return
null
;
}
@Override
public
Object
getObject
(
int
columnIndex
,
Map
<
String
,
Class
<?>>
map
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
Ref
getRef
(
int
columnIndex
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
Blob
getBlob
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
Clob
getClob
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
Array
getArray
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
Object
getObject
(
String
columnLabel
,
Map
<
String
,
Class
<?>>
map
)
throws
SQLException
{
return
null
;
}
@Override
public
Ref
getRef
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
Blob
getBlob
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
Clob
getClob
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
Array
getArray
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
Date
getDate
(
int
columnIndex
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
Date
getDate
(
String
columnLabel
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
Time
getTime
(
int
columnIndex
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
Time
getTime
(
String
columnLabel
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
Timestamp
getTimestamp
(
int
columnIndex
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
Timestamp
getTimestamp
(
String
columnLabel
,
Calendar
cal
)
throws
SQLException
{
return
null
;
}
@Override
public
URL
getURL
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
URL
getURL
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
void
updateRef
(
int
columnIndex
,
Ref
x
)
throws
SQLException
{
}
@Override
public
void
updateRef
(
String
columnLabel
,
Ref
x
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
int
columnIndex
,
Blob
x
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
String
columnLabel
,
Blob
x
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
int
columnIndex
,
Clob
x
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
String
columnLabel
,
Clob
x
)
throws
SQLException
{
}
@Override
public
void
updateArray
(
int
columnIndex
,
Array
x
)
throws
SQLException
{
}
@Override
public
void
updateArray
(
String
columnLabel
,
Array
x
)
throws
SQLException
{
}
@Override
public
RowId
getRowId
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
RowId
getRowId
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
void
updateRowId
(
int
columnIndex
,
RowId
x
)
throws
SQLException
{
}
@Override
public
void
updateRowId
(
String
columnLabel
,
RowId
x
)
throws
SQLException
{
}
@Override
public
int
getHoldability
()
throws
SQLException
{
return
0
;
}
@Override
public
boolean
isClosed
()
throws
SQLException
{
return
false
;
}
@Override
public
void
updateNString
(
int
columnIndex
,
String
nString
)
throws
SQLException
{
}
@Override
public
void
updateNString
(
String
columnLabel
,
String
nString
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
int
columnIndex
,
NClob
nClob
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
String
columnLabel
,
NClob
nClob
)
throws
SQLException
{
}
@Override
public
NClob
getNClob
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
NClob
getNClob
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
SQLXML
getSQLXML
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
SQLXML
getSQLXML
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
void
updateSQLXML
(
int
columnIndex
,
SQLXML
xmlObject
)
throws
SQLException
{
}
@Override
public
void
updateSQLXML
(
String
columnLabel
,
SQLXML
xmlObject
)
throws
SQLException
{
}
@Override
public
String
getNString
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
String
getNString
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
Reader
getNCharacterStream
(
int
columnIndex
)
throws
SQLException
{
return
null
;
}
@Override
public
Reader
getNCharacterStream
(
String
columnLabel
)
throws
SQLException
{
return
null
;
}
@Override
public
void
updateNCharacterStream
(
int
columnIndex
,
Reader
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateNCharacterStream
(
String
columnLabel
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateAsciiStream
(
int
columnIndex
,
InputStream
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateBinaryStream
(
int
columnIndex
,
InputStream
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateCharacterStream
(
int
columnIndex
,
Reader
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateAsciiStream
(
String
columnLabel
,
InputStream
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateBinaryStream
(
String
columnLabel
,
InputStream
x
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateCharacterStream
(
String
columnLabel
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
int
columnIndex
,
InputStream
inputStream
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
String
columnLabel
,
InputStream
inputStream
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
int
columnIndex
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
String
columnLabel
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
int
columnIndex
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
String
columnLabel
,
Reader
reader
,
long
length
)
throws
SQLException
{
}
@Override
public
void
updateNCharacterStream
(
int
columnIndex
,
Reader
x
)
throws
SQLException
{
}
@Override
public
void
updateNCharacterStream
(
String
columnLabel
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
void
updateAsciiStream
(
int
columnIndex
,
InputStream
x
)
throws
SQLException
{
}
@Override
public
void
updateBinaryStream
(
int
columnIndex
,
InputStream
x
)
throws
SQLException
{
}
@Override
public
void
updateCharacterStream
(
int
columnIndex
,
Reader
x
)
throws
SQLException
{
}
@Override
public
void
updateAsciiStream
(
String
columnLabel
,
InputStream
x
)
throws
SQLException
{
}
@Override
public
void
updateBinaryStream
(
String
columnLabel
,
InputStream
x
)
throws
SQLException
{
}
@Override
public
void
updateCharacterStream
(
String
columnLabel
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
int
columnIndex
,
InputStream
inputStream
)
throws
SQLException
{
}
@Override
public
void
updateBlob
(
String
columnLabel
,
InputStream
inputStream
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
int
columnIndex
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
void
updateClob
(
String
columnLabel
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
int
columnIndex
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
void
updateNClob
(
String
columnLabel
,
Reader
reader
)
throws
SQLException
{
}
@Override
public
<
T
>
T
getObject
(
int
columnIndex
,
Class
<
T
>
type
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
<
T
>
T
getObject
(
String
columnLabel
,
Class
<
T
>
type
)
throws
SQLException
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
public
<
T
>
T
unwrap
(
Class
<
T
>
iface
)
throws
SQLException
{
return
null
;
}
@Override
public
boolean
isWrapperFor
(
Class
<?>
iface
)
throws
SQLException
{
return
false
;
}
private
int
getTrueColumnIndex
(
int
columnIndex
)
throws
SQLException
{
if
(
columnIndex
<
1
)
{
throw
new
SQLException
(
"Column Index out of range, "
+
columnIndex
+
" < "
+
1
);
}
int
numOfCols
=
this
.
columnMetaDataList
.
size
();
if
(
columnIndex
>
numOfCols
)
{
throw
new
SQLException
(
"Column Index out of range, "
+
columnIndex
+
" > "
+
numOfCols
);
}
return
columnIndex
-
1
;
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
浏览文件 @
80e64a5a
...
...
@@ -41,15 +41,15 @@ public abstract class TSDBConstants {
public
static
final
int
TSDB_DATA_TYPE_BINARY
=
8
;
public
static
final
int
TSDB_DATA_TYPE_TIMESTAMP
=
9
;
public
static
final
int
TSDB_DATA_TYPE_NCHAR
=
10
;
/*
系统增加新的无符号数据类型,分别是:
unsigned tinyint, 数值范围:0-254, NULL 为255
unsigned smallint,数值范围: 0-65534, NULL 为65535
unsigned int,数值范围:0-4294967294,NULL 为4294967295u
unsigned bigint,数值范围:0-18446744073709551614u,NULL 为18446744073709551615u。
example:
create table tb(ts timestamp, a tinyint unsigned, b smallint unsigned, c int unsigned, d bigint unsigned);
*/
/*
*
*
系统增加新的无符号数据类型,分别是:
*
unsigned tinyint, 数值范围:0-254, NULL 为255
*
unsigned smallint,数值范围: 0-65534, NULL 为65535
*
unsigned int,数值范围:0-4294967294,NULL 为4294967295u
*
unsigned bigint,数值范围:0-18446744073709551614u,NULL 为18446744073709551615u。
*
example:
*
create table tb(ts timestamp, a tinyint unsigned, b smallint unsigned, c int unsigned, d bigint unsigned);
*/
public
static
final
int
TSDB_DATA_TYPE_UTINYINT
=
11
;
//unsigned tinyint
public
static
final
int
TSDB_DATA_TYPE_USMALLINT
=
12
;
//unsigned smallint
public
static
final
int
TSDB_DATA_TYPE_UINT
=
13
;
//unsigned int
...
...
@@ -57,6 +57,47 @@ public abstract class TSDBConstants {
// nchar column max length
public
static
final
int
maxFieldSize
=
16
*
1024
;
// precision for data types
public
static
final
int
BOOLEAN_PRECISION
=
1
;
public
static
final
int
TINYINT_PRECISION
=
4
;
public
static
final
int
SMALLINT_PRECISION
=
6
;
public
static
final
int
INT_PRECISION
=
11
;
public
static
final
int
BIGINT_PRECISION
=
20
;
public
static
final
int
FLOAT_PRECISION
=
12
;
public
static
final
int
DOUBLE_PRECISION
=
22
;
public
static
final
int
TIMESTAMP_MS_PRECISION
=
23
;
public
static
final
int
TIMESTAMP_US_PRECISION
=
26
;
// scale for data types
public
static
final
int
FLOAT_SCALE
=
31
;
public
static
final
int
DOUBLE_SCALE
=
31
;
public
static
int
typeName2JdbcType
(
String
type
)
{
switch
(
type
.
toUpperCase
())
{
case
"TIMESTAMP"
:
return
Types
.
TIMESTAMP
;
case
"INT"
:
return
Types
.
INTEGER
;
case
"BIGINT"
:
return
Types
.
BIGINT
;
case
"FLOAT"
:
return
Types
.
FLOAT
;
case
"DOUBLE"
:
return
Types
.
DOUBLE
;
case
"BINARY"
:
return
Types
.
BINARY
;
case
"SMALLINT"
:
return
Types
.
SMALLINT
;
case
"TINYINT"
:
return
Types
.
TINYINT
;
case
"BOOL"
:
return
Types
.
BOOLEAN
;
case
"NCHAR"
:
return
Types
.
NCHAR
;
default
:
return
Types
.
NULL
;
}
}
public
static
int
taosType2JdbcType
(
int
taosType
)
throws
SQLException
{
switch
(
taosType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
...
...
@@ -88,7 +129,7 @@ public abstract class TSDBConstants {
}
public
static
String
taosType2JdbcTypeName
(
int
taosType
)
throws
SQLException
{
switch
(
taosType
){
switch
(
taosType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
"BOOL"
;
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
...
...
@@ -119,7 +160,7 @@ public abstract class TSDBConstants {
}
public
static
int
jdbcType2TaosType
(
int
jdbcType
)
throws
SQLException
{
switch
(
jdbcType
){
switch
(
jdbcType
)
{
case
Types
.
BOOLEAN
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
;
case
Types
.
TINYINT
:
...
...
@@ -145,7 +186,7 @@ public abstract class TSDBConstants {
}
public
static
String
jdbcType2TaosTypeName
(
int
jdbcType
)
throws
SQLException
{
switch
(
jdbcType
){
switch
(
jdbcType
)
{
case
Types
.
BOOLEAN
:
return
"BOOL"
;
case
Types
.
TINYINT
:
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBJNIConnector.java
浏览文件 @
80e64a5a
...
...
@@ -16,13 +16,13 @@
*/
package
com.taosdata.jdbc
;
import
com.taosdata.jdbc.utils.TaosInfo
;
import
java.nio.ByteBuffer
;
import
java.sql.SQLException
;
import
java.sql.SQLWarning
;
import
java.util.List
;
import
com.taosdata.jdbc.utils.TaosInfo
;
/**
* JNI connector
*/
...
...
@@ -30,10 +30,10 @@ public class TSDBJNIConnector {
private
static
volatile
Boolean
isInitialized
=
false
;
private
TaosInfo
taosInfo
=
TaosInfo
.
getInstance
();
// Connection pointer used in C
private
long
taos
=
TSDBConstants
.
JNI_NULL_POINTER
;
// result set status in current connection
private
boolean
isResultsetClosed
;
...
...
@@ -194,7 +194,9 @@ public class TSDBJNIConnector {
* Get schema metadata
*/
public
int
getSchemaMetaData
(
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
)
{
return
this
.
getSchemaMetaDataImp
(
this
.
taos
,
resultSet
,
columnMetaData
);
int
ret
=
this
.
getSchemaMetaDataImp
(
this
.
taos
,
resultSet
,
columnMetaData
);
columnMetaData
.
stream
().
forEach
(
column
->
column
.
setColIndex
(
column
.
getColIndex
()
+
1
));
return
ret
;
}
private
native
int
getSchemaMetaDataImp
(
long
connection
,
long
resultSet
,
List
<
ColumnMetaData
>
columnMetaData
);
...
...
@@ -221,7 +223,7 @@ public class TSDBJNIConnector {
*/
public
void
closeConnection
()
throws
SQLException
{
int
code
=
this
.
closeConnectionImp
(
this
.
taos
);
if
(
code
<
0
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_JNI_CONNECTION_NULL
);
}
else
if
(
code
==
0
)
{
...
...
@@ -229,7 +231,7 @@ public class TSDBJNIConnector {
}
else
{
throw
new
SQLException
(
"Undefined error code returned by TDengine when closing a connection"
);
}
// invoke closeConnectionImpl only here
taosInfo
.
connect_close_increment
();
}
...
...
@@ -274,67 +276,76 @@ public class TSDBJNIConnector {
}
private
native
int
validateCreateTableSqlImp
(
long
connection
,
byte
[]
sqlBytes
);
public
long
prepareStmt
(
String
sql
)
throws
SQLException
{
Long
stmt
=
prepareStmtImp
(
sql
.
getBytes
(),
this
.
taos
);
if
(
stmt
==
TSDBConstants
.
JNI_TDENGINE_ERROR
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_SQL
);
}
else
if
(
stmt
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
public
long
prepareStmt
(
String
sql
)
throws
SQLException
{
Long
stmt
;
try
{
stmt
=
prepareStmtImp
(
sql
.
getBytes
(),
this
.
taos
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_ENCODING
);
}
if
(
stmt
==
TSDBConstants
.
JNI_CONNECTION_NULL
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_JNI_CONNECTION_NULL
);
}
else
if
(
stmt
==
TSDBConstants
.
JNI_SQL_NULL
)
{
}
if
(
stmt
==
TSDBConstants
.
JNI_SQL_NULL
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_JNI_SQL_NULL
);
}
else
if
(
stmt
==
TSDBConstants
.
JNI_OUT_OF_MEMORY
)
{
}
if
(
stmt
==
TSDBConstants
.
JNI_OUT_OF_MEMORY
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_JNI_OUT_OF_MEMORY
);
}
return
stmt
;
return
stmt
;
}
private
native
long
prepareStmtImp
(
byte
[]
sql
,
long
con
);
public
void
setBindTableName
(
long
stmt
,
String
tableName
)
throws
SQLException
{
int
code
=
setBindTableNameImp
(
stmt
,
tableName
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
int
code
=
setBindTableNameImp
(
stmt
,
tableName
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to set table name"
);
}
}
}
}
private
native
int
setBindTableNameImp
(
long
stmt
,
String
name
,
long
conn
);
public
void
setBindTableNameAndTags
(
long
stmt
,
String
tableName
,
int
numOfTags
,
ByteBuffer
tags
,
ByteBuffer
typeList
,
ByteBuffer
lengthList
,
ByteBuffer
nullList
)
throws
SQLException
{
int
code
=
setTableNameTagsImp
(
stmt
,
tableName
,
numOfTags
,
tags
.
array
(),
typeList
.
array
(),
lengthList
.
array
(),
nullList
.
array
(),
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to bind table name and corresponding tags"
);
}
int
code
=
setTableNameTagsImp
(
stmt
,
tableName
,
numOfTags
,
tags
.
array
(),
typeList
.
array
(),
lengthList
.
array
(),
nullList
.
array
(),
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to bind table name and corresponding tags"
);
}
}
private
native
int
setTableNameTagsImp
(
long
stmt
,
String
name
,
int
numOfTags
,
byte
[]
tags
,
byte
[]
typeList
,
byte
[]
lengthList
,
byte
[]
nullList
,
long
conn
);
public
void
bindColumnDataArray
(
long
stmt
,
ByteBuffer
colDataList
,
ByteBuffer
lengthList
,
ByteBuffer
isNullList
,
int
type
,
int
bytes
,
int
numOfRows
,
int
columnIndex
)
throws
SQLException
{
int
code
=
bindColDataImp
(
stmt
,
colDataList
.
array
(),
lengthList
.
array
(),
isNullList
.
array
(),
type
,
bytes
,
numOfRows
,
columnIndex
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
public
void
bindColumnDataArray
(
long
stmt
,
ByteBuffer
colDataList
,
ByteBuffer
lengthList
,
ByteBuffer
isNullList
,
int
type
,
int
bytes
,
int
numOfRows
,
int
columnIndex
)
throws
SQLException
{
int
code
=
bindColDataImp
(
stmt
,
colDataList
.
array
(),
lengthList
.
array
(),
isNullList
.
array
(),
type
,
bytes
,
numOfRows
,
columnIndex
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to bind column data"
);
}
}
}
}
private
native
int
bindColDataImp
(
long
stmt
,
byte
[]
colDataList
,
byte
[]
lengthList
,
byte
[]
isNullList
,
int
type
,
int
bytes
,
int
numOfRows
,
int
columnIndex
,
long
conn
);
public
void
executeBatch
(
long
stmt
)
throws
SQLException
{
int
code
=
executeBatchImp
(
stmt
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
int
code
=
executeBatchImp
(
stmt
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to execute batch bind"
);
}
}
}
private
native
int
executeBatchImp
(
long
stmt
,
long
con
);
public
void
closeBatch
(
long
stmt
)
throws
SQLException
{
int
code
=
closeStmt
(
stmt
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
int
code
=
closeStmt
(
stmt
,
this
.
taos
);
if
(
code
!=
TSDBConstants
.
JNI_SUCCESS
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"failed to close batch bind"
);
}
}
}
private
native
int
closeStmt
(
long
stmt
,
long
con
);
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBPreparedStatement.java
浏览文件 @
80e64a5a
...
...
@@ -39,18 +39,18 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
private
String
rawSql
;
private
Object
[]
parameters
;
private
boolean
isPrepared
;
private
ArrayList
<
ColumnInfo
>
colData
;
private
ArrayList
<
TableTagInfo
>
tableTags
;
private
int
tagValueLength
;
private
String
tableName
;
private
long
nativeStmtHandle
=
0
;
private
volatile
TSDBParameterMetaData
parameterMetaData
;
TSDBPreparedStatement
(
TSDBConnection
connection
,
String
sql
)
{
super
(
connection
);
super
(
connection
);
init
(
sql
);
int
parameterCnt
=
0
;
...
...
@@ -64,11 +64,11 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
this
.
isPrepared
=
true
;
}
if
(
parameterCnt
>
1
)
{
// the table name is also a parameter, so ignore it.
this
.
colData
=
new
ArrayList
<
ColumnInfo
>();
this
.
tableTags
=
new
ArrayList
<
TableTagInfo
>();
}
if
(
parameterCnt
>
1
)
{
// the table name is also a parameter, so ignore it.
this
.
colData
=
new
ArrayList
<
ColumnInfo
>();
this
.
tableTags
=
new
ArrayList
<
TableTagInfo
>();
}
}
private
void
init
(
String
sql
)
{
...
...
@@ -205,9 +205,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
@Override
public
void
setBigDecimal
(
int
parameterIndex
,
BigDecimal
x
)
throws
SQLException
{
if
(
isClosed
())
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
setObject
(
parameterIndex
,
x
.
doubleValue
());
}
@Override
...
...
@@ -222,16 +220,12 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
@Override
public
void
setDate
(
int
parameterIndex
,
Date
x
)
throws
SQLException
{
if
(
isClosed
())
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
setObject
(
parameterIndex
,
new
Timestamp
(
x
.
getTime
()));
}
@Override
public
void
setTime
(
int
parameterIndex
,
Time
x
)
throws
SQLException
{
if
(
isClosed
())
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
setObject
(
parameterIndex
,
new
Timestamp
(
x
.
getTime
()));
}
@Override
...
...
@@ -279,11 +273,10 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
if
(
isClosed
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
}
if
(
parameterIndex
<
1
&&
parameterIndex
>=
parameters
.
length
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_PARAMETER_INDEX_OUT_RANGE
);
}
parameters
[
parameterIndex
-
1
]
=
x
;
}
...
...
@@ -323,7 +316,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
if
(
isClosed
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
...
...
@@ -350,9 +343,9 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
@Override
public
ResultSetMetaData
getMetaData
()
throws
SQLException
{
if
(
isClosed
()
)
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
)
;
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
if
(
this
.
getResultSet
()
==
null
)
return
null
;
return
getResultSet
().
getMetaData
(
);
}
@Override
...
...
@@ -396,10 +389,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
if
(
isClosed
())
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
if
(
parameterMetaData
==
null
)
{
this
.
parameterMetaData
=
new
TSDBParameterMetaData
(
parameters
);
}
return
this
.
parameterMetaData
;
return
new
TSDBParameterMetaData
(
parameters
);
}
@Override
...
...
@@ -411,9 +401,7 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
@Override
public
void
setNString
(
int
parameterIndex
,
String
value
)
throws
SQLException
{
if
(
isClosed
())
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
setString
(
parameterIndex
,
value
);
}
@Override
...
...
@@ -536,489 +524,495 @@ public class TSDBPreparedStatement extends TSDBStatement implements PreparedStat
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
///////////////////////////////////////////////////////////////////////
// NOTE: the following APIs are not JDBC compatible
// set the bind table name
private
static
class
ColumnInfo
{
@SuppressWarnings
(
"rawtypes"
)
private
ArrayList
data
;
private
int
type
;
private
int
bytes
;
private
boolean
typeIsSet
;
public
ColumnInfo
()
{
this
.
typeIsSet
=
false
;
}
public
void
setType
(
int
type
)
throws
SQLException
{
if
(
this
.
isTypeSet
())
{
@SuppressWarnings
(
"rawtypes"
)
private
ArrayList
data
;
private
int
type
;
private
int
bytes
;
private
boolean
typeIsSet
;
public
ColumnInfo
()
{
this
.
typeIsSet
=
false
;
}
public
void
setType
(
int
type
)
throws
SQLException
{
if
(
this
.
isTypeSet
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data type has been set"
);
}
this
.
typeIsSet
=
true
;
this
.
type
=
type
;
}
public
boolean
isTypeSet
()
{
return
this
.
typeIsSet
;
}
};
}
this
.
typeIsSet
=
true
;
this
.
type
=
type
;
}
public
boolean
isTypeSet
()
{
return
this
.
typeIsSet
;
}
}
;
private
static
class
TableTagInfo
{
private
boolean
isNull
;
private
Object
value
;
private
int
type
;
public
TableTagInfo
(
Object
value
,
int
type
)
{
this
.
value
=
value
;
this
.
type
=
type
;
}
public
static
TableTagInfo
createNullTag
(
int
type
)
{
TableTagInfo
info
=
new
TableTagInfo
(
null
,
type
);
info
.
isNull
=
true
;
return
info
;
}
};
private
boolean
isNull
;
private
Object
value
;
private
int
type
;
public
TableTagInfo
(
Object
value
,
int
type
)
{
this
.
value
=
value
;
this
.
type
=
type
;
}
public
static
TableTagInfo
createNullTag
(
int
type
)
{
TableTagInfo
info
=
new
TableTagInfo
(
null
,
type
);
info
.
isNull
=
true
;
return
info
;
}
}
;
public
void
setTableName
(
String
name
)
{
this
.
tableName
=
name
;
this
.
tableName
=
name
;
}
private
void
ensureTagCapacity
(
int
index
)
{
if
(
this
.
tableTags
.
size
()
<
index
+
1
)
{
int
delta
=
index
+
1
-
this
.
tableTags
.
size
();
this
.
tableTags
.
addAll
(
Collections
.
nCopies
(
delta
,
null
));
}
if
(
this
.
tableTags
.
size
()
<
index
+
1
)
{
int
delta
=
index
+
1
-
this
.
tableTags
.
size
();
this
.
tableTags
.
addAll
(
Collections
.
nCopies
(
delta
,
null
));
}
}
public
void
setTagNull
(
int
index
,
int
type
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
TableTagInfo
.
createNullTag
(
type
));
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
TableTagInfo
.
createNullTag
(
type
));
}
public
void
setTagBoolean
(
int
index
,
boolean
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
));
this
.
tagValueLength
+=
Byte
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
));
this
.
tagValueLength
+=
Byte
.
BYTES
;
}
public
void
setTagInt
(
int
index
,
int
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_INT
));
this
.
tagValueLength
+=
Integer
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_INT
));
this
.
tagValueLength
+=
Integer
.
BYTES
;
}
public
void
setTagByte
(
int
index
,
byte
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
));
this
.
tagValueLength
+=
Byte
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
));
this
.
tagValueLength
+=
Byte
.
BYTES
;
}
public
void
setTagShort
(
int
index
,
short
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
));
this
.
tagValueLength
+=
Short
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
));
this
.
tagValueLength
+=
Short
.
BYTES
;
}
public
void
setTagLong
(
int
index
,
long
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
));
this
.
tagValueLength
+=
Long
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
));
this
.
tagValueLength
+=
Long
.
BYTES
;
}
public
void
setTagTimestamp
(
int
index
,
long
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
));
this
.
tagValueLength
+=
Long
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
));
this
.
tagValueLength
+=
Long
.
BYTES
;
}
public
void
setTagFloat
(
int
index
,
float
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
));
this
.
tagValueLength
+=
Float
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
));
this
.
tagValueLength
+=
Float
.
BYTES
;
}
public
void
setTagDouble
(
int
index
,
double
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
));
this
.
tagValueLength
+=
Double
.
BYTES
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
));
this
.
tagValueLength
+=
Double
.
BYTES
;
}
public
void
setTagString
(
int
index
,
String
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
));
this
.
tagValueLength
+=
value
.
getBytes
().
length
;
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
));
this
.
tagValueLength
+=
value
.
getBytes
().
length
;
}
public
void
setTagNString
(
int
index
,
String
value
)
{
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
));
String
charset
=
TaosGlobalConfig
.
getCharset
();
try
{
this
.
tagValueLength
+=
value
.
getBytes
(
charset
).
length
;
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
}
ensureTagCapacity
(
index
);
this
.
tableTags
.
set
(
index
,
new
TableTagInfo
(
value
,
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
));
String
charset
=
TaosGlobalConfig
.
getCharset
();
try
{
this
.
tagValueLength
+=
value
.
getBytes
(
charset
).
length
;
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
}
public
<
T
>
void
setValueImpl
(
int
columnIndex
,
ArrayList
<
T
>
list
,
int
type
,
int
bytes
)
throws
SQLException
{
if
(
this
.
colData
.
size
()
==
0
)
{
this
.
colData
.
addAll
(
Collections
.
nCopies
(
this
.
parameters
.
length
-
1
-
this
.
tableTags
.
size
(),
null
));
}
ColumnInfo
col
=
(
ColumnInfo
)
this
.
colData
.
get
(
columnIndex
);
if
(
col
==
null
)
{
ColumnInfo
p
=
new
ColumnInfo
();
p
.
setType
(
type
);
p
.
bytes
=
bytes
;
p
.
data
=
(
ArrayList
<?>)
list
.
clone
();
this
.
colData
.
set
(
columnIndex
,
p
);
}
else
{
if
(
col
.
type
!=
type
)
{
if
(
this
.
colData
.
size
()
==
0
)
{
this
.
colData
.
addAll
(
Collections
.
nCopies
(
this
.
parameters
.
length
-
1
-
this
.
tableTags
.
size
(),
null
));
}
ColumnInfo
col
=
(
ColumnInfo
)
this
.
colData
.
get
(
columnIndex
);
if
(
col
==
null
)
{
ColumnInfo
p
=
new
ColumnInfo
();
p
.
setType
(
type
);
p
.
bytes
=
bytes
;
p
.
data
=
(
ArrayList
<?>)
list
.
clone
();
this
.
colData
.
set
(
columnIndex
,
p
);
}
else
{
if
(
col
.
type
!=
type
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data type mismatch"
);
}
col
.
data
.
addAll
(
list
);
}
}
col
.
data
.
addAll
(
list
);
}
}
public
void
setInt
(
int
columnIndex
,
ArrayList
<
Integer
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_INT
,
Integer
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_INT
,
Integer
.
BYTES
);
}
public
void
setFloat
(
int
columnIndex
,
ArrayList
<
Float
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
,
Float
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
,
Float
.
BYTES
);
}
public
void
setTimestamp
(
int
columnIndex
,
ArrayList
<
Long
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
,
Long
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
,
Long
.
BYTES
);
}
public
void
setLong
(
int
columnIndex
,
ArrayList
<
Long
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
,
Long
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
,
Long
.
BYTES
);
}
public
void
setDouble
(
int
columnIndex
,
ArrayList
<
Double
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
,
Double
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
,
Double
.
BYTES
);
}
public
void
setBoolean
(
int
columnIndex
,
ArrayList
<
Boolean
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
,
Byte
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
,
Byte
.
BYTES
);
}
public
void
setByte
(
int
columnIndex
,
ArrayList
<
Byte
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
,
Byte
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
,
Byte
.
BYTES
);
}
public
void
setShort
(
int
columnIndex
,
ArrayList
<
Short
>
list
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
,
Short
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
,
Short
.
BYTES
);
}
public
void
setString
(
int
columnIndex
,
ArrayList
<
String
>
list
,
int
size
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
,
size
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
,
size
);
}
// note: expand the required space for each NChar character
public
void
setNString
(
int
columnIndex
,
ArrayList
<
String
>
list
,
int
size
)
throws
SQLException
{
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
,
size
*
Integer
.
BYTES
);
setValueImpl
(
columnIndex
,
list
,
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
,
size
*
Integer
.
BYTES
);
}
public
void
columnDataAddBatch
()
throws
SQLException
{
// pass the data block to native code
if
(
rawSql
==
null
)
{
// pass the data block to native code
if
(
rawSql
==
null
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"sql statement not set yet"
);
}
// table name is not set yet, abort
if
(
this
.
tableName
==
null
)
{
}
// table name is not set yet, abort
if
(
this
.
tableName
==
null
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"table name not set yet"
);
}
int
numOfCols
=
this
.
colData
.
size
();
if
(
numOfCols
==
0
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data not bind"
);
}
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
this
.
nativeStmtHandle
=
connector
.
prepareStmt
(
rawSql
);
if
(
this
.
tableTags
==
null
)
{
connector
.
setBindTableName
(
this
.
nativeStmtHandle
,
this
.
tableName
);
}
else
{
int
num
=
this
.
tableTags
.
size
();
ByteBuffer
tagDataList
=
ByteBuffer
.
allocate
(
this
.
tagValueLength
);
tagDataList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
typeList
=
ByteBuffer
.
allocate
(
num
);
typeList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
lengthList
=
ByteBuffer
.
allocate
(
num
*
Long
.
BYTES
);
lengthList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
isNullList
=
ByteBuffer
.
allocate
(
num
*
Integer
.
BYTES
);
isNullList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
for
(
int
i
=
0
;
i
<
num
;
++
i
)
{
TableTagInfo
tag
=
this
.
tableTags
.
get
(
i
);
if
(
tag
.
isNull
)
{
typeList
.
put
((
byte
)
tag
.
type
);
isNullList
.
putInt
(
1
);
lengthList
.
putLong
(
0
);
continue
;
}
switch
(
tag
.
type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
{
Integer
val
=
(
Integer
)
tag
.
value
;
tagDataList
.
putInt
(
val
);
lengthList
.
putLong
(
Integer
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
{
Byte
val
=
(
Byte
)
tag
.
value
;
tagDataList
.
put
(
val
);
lengthList
.
putLong
(
Byte
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
{
Boolean
val
=
(
Boolean
)
tag
.
value
;
tagDataList
.
put
((
byte
)
(
val
?
1
:
0
));
lengthList
.
putLong
(
Byte
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
{
Short
val
=
(
Short
)
tag
.
value
;
tagDataList
.
putShort
(
val
);
lengthList
.
putLong
(
Short
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
{
Long
val
=
(
Long
)
tag
.
value
;
tagDataList
.
putLong
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Long
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
{
Float
val
=
(
Float
)
tag
.
value
;
tagDataList
.
putFloat
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Float
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
{
Double
val
=
(
Double
)
tag
.
value
;
tagDataList
.
putDouble
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Double
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
{
String
charset
=
TaosGlobalConfig
.
getCharset
();
String
val
=
(
String
)
tag
.
value
;
byte
[]
b
=
null
;
try
{
if
(
tag
.
type
==
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
)
{
b
=
val
.
getBytes
();
}
else
{
b
=
val
.
getBytes
(
charset
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
tagDataList
.
put
(
b
);
lengthList
.
putLong
(
b
.
length
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_USMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UBIGINT
:
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"not support data types"
);
}
}
typeList
.
put
((
byte
)
tag
.
type
);
isNullList
.
putInt
(
tag
.
isNull
?
1
:
0
);
}
connector
.
setBindTableNameAndTags
(
this
.
nativeStmtHandle
,
this
.
tableName
,
this
.
tableTags
.
size
(),
tagDataList
,
typeList
,
lengthList
,
isNullList
);
}
ColumnInfo
colInfo
=
(
ColumnInfo
)
this
.
colData
.
get
(
0
);
if
(
colInfo
==
null
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data not bind"
);
}
int
rows
=
colInfo
.
data
.
size
();
for
(
int
i
=
0
;
i
<
numOfCols
;
++
i
)
{
ColumnInfo
col1
=
this
.
colData
.
get
(
i
);
if
(
col1
==
null
||
!
col1
.
isTypeSet
())
{
}
int
numOfCols
=
this
.
colData
.
size
();
if
(
numOfCols
==
0
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data not bind"
);
}
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
this
.
nativeStmtHandle
=
connector
.
prepareStmt
(
rawSql
);
if
(
this
.
tableTags
==
null
)
{
connector
.
setBindTableName
(
this
.
nativeStmtHandle
,
this
.
tableName
);
}
else
{
int
num
=
this
.
tableTags
.
size
();
ByteBuffer
tagDataList
=
ByteBuffer
.
allocate
(
this
.
tagValueLength
);
tagDataList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
typeList
=
ByteBuffer
.
allocate
(
num
);
typeList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
lengthList
=
ByteBuffer
.
allocate
(
num
*
Long
.
BYTES
);
lengthList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
isNullList
=
ByteBuffer
.
allocate
(
num
*
Integer
.
BYTES
);
isNullList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
for
(
int
i
=
0
;
i
<
num
;
++
i
)
{
TableTagInfo
tag
=
this
.
tableTags
.
get
(
i
);
if
(
tag
.
isNull
)
{
typeList
.
put
((
byte
)
tag
.
type
);
isNullList
.
putInt
(
1
);
lengthList
.
putLong
(
0
);
continue
;
}
switch
(
tag
.
type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
{
Integer
val
=
(
Integer
)
tag
.
value
;
tagDataList
.
putInt
(
val
);
lengthList
.
putLong
(
Integer
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
{
Byte
val
=
(
Byte
)
tag
.
value
;
tagDataList
.
put
(
val
);
lengthList
.
putLong
(
Byte
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
{
Boolean
val
=
(
Boolean
)
tag
.
value
;
tagDataList
.
put
((
byte
)
(
val
?
1
:
0
));
lengthList
.
putLong
(
Byte
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
{
Short
val
=
(
Short
)
tag
.
value
;
tagDataList
.
putShort
(
val
);
lengthList
.
putLong
(
Short
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
{
Long
val
=
(
Long
)
tag
.
value
;
tagDataList
.
putLong
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Long
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
{
Float
val
=
(
Float
)
tag
.
value
;
tagDataList
.
putFloat
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Float
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
{
Double
val
=
(
Double
)
tag
.
value
;
tagDataList
.
putDouble
(
val
==
null
?
0
:
val
);
lengthList
.
putLong
(
Double
.
BYTES
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
{
String
charset
=
TaosGlobalConfig
.
getCharset
();
String
val
=
(
String
)
tag
.
value
;
byte
[]
b
=
null
;
try
{
if
(
tag
.
type
==
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
)
{
b
=
val
.
getBytes
();
}
else
{
b
=
val
.
getBytes
(
charset
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
tagDataList
.
put
(
b
);
lengthList
.
putLong
(
b
.
length
);
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_USMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UBIGINT
:
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"not support data types"
);
}
}
typeList
.
put
((
byte
)
tag
.
type
);
isNullList
.
putInt
(
tag
.
isNull
?
1
:
0
);
}
connector
.
setBindTableNameAndTags
(
this
.
nativeStmtHandle
,
this
.
tableName
,
this
.
tableTags
.
size
(),
tagDataList
,
typeList
,
lengthList
,
isNullList
);
}
ColumnInfo
colInfo
=
(
ColumnInfo
)
this
.
colData
.
get
(
0
);
if
(
colInfo
==
null
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data not bind"
);
}
int
rows
=
colInfo
.
data
.
size
();
for
(
int
i
=
0
;
i
<
numOfCols
;
++
i
)
{
ColumnInfo
col1
=
this
.
colData
.
get
(
i
);
if
(
col1
==
null
||
!
col1
.
isTypeSet
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"column data not bind"
);
}
if
(
rows
!=
col1
.
data
.
size
())
{
}
if
(
rows
!=
col1
.
data
.
size
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"the rows in column data not identical"
);
}
ByteBuffer
colDataList
=
ByteBuffer
.
allocate
(
rows
*
col1
.
bytes
);
colDataList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
}
ByteBuffer
colDataList
=
ByteBuffer
.
allocate
(
rows
*
col1
.
bytes
);
colDataList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
lengthList
=
ByteBuffer
.
allocate
(
rows
*
Integer
.
BYTES
);
lengthList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
ByteBuffer
isNullList
=
ByteBuffer
.
allocate
(
rows
*
Byte
.
BYTES
);
isNullList
.
order
(
ByteOrder
.
LITTLE_ENDIAN
);
switch
(
col1
.
type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Integer
val
=
(
Integer
)
col1
.
data
.
get
(
j
);
colDataList
.
putInt
(
val
==
null
?
Integer
.
MIN_VALUE
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Byte
val
=
(
Byte
)
col1
.
data
.
get
(
j
);
colDataList
.
put
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Boolean
val
=
(
Boolean
)
col1
.
data
.
get
(
j
);
if
(
val
==
null
)
{
colDataList
.
put
((
byte
)
0
);
}
else
{
colDataList
.
put
((
byte
)
(
val
?
1
:
0
));
}
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Short
val
=
(
Short
)
col1
.
data
.
get
(
j
);
colDataList
.
putShort
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Long
val
=
(
Long
)
col1
.
data
.
get
(
j
);
colDataList
.
putLong
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Float
val
=
(
Float
)
col1
.
data
.
get
(
j
);
colDataList
.
putFloat
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Double
val
=
(
Double
)
col1
.
data
.
get
(
j
);
colDataList
.
putDouble
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
{
String
charset
=
TaosGlobalConfig
.
getCharset
();
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
String
val
=
(
String
)
col1
.
data
.
get
(
j
);
colDataList
.
position
(
j
*
col1
.
bytes
);
// seek to the correct position
if
(
val
!=
null
)
{
byte
[]
b
=
null
;
try
{
if
(
col1
.
type
==
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
)
{
b
=
val
.
getBytes
();
}
else
{
b
=
val
.
getBytes
(
charset
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
if
(
val
.
length
()
>
col1
.
bytes
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"string data too long"
);
}
colDataList
.
put
(
b
);
lengthList
.
putInt
(
b
.
length
);
isNullList
.
put
((
byte
)
0
);
}
else
{
lengthList
.
putInt
(
0
);
isNullList
.
put
((
byte
)
1
);
}
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_USMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UBIGINT
:
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"not support data types"
);
}
};
connector
.
bindColumnDataArray
(
this
.
nativeStmtHandle
,
colDataList
,
lengthList
,
isNullList
,
col1
.
type
,
col1
.
bytes
,
rows
,
i
);
}
}
public
void
columnDataExecuteBatch
()
throws
SQLException
{
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
connector
.
executeBatch
(
this
.
nativeStmtHandle
);
this
.
columnDataClearBatch
();
}
switch
(
col1
.
type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Integer
val
=
(
Integer
)
col1
.
data
.
get
(
j
);
colDataList
.
putInt
(
val
==
null
?
Integer
.
MIN_VALUE
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Byte
val
=
(
Byte
)
col1
.
data
.
get
(
j
);
colDataList
.
put
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Boolean
val
=
(
Boolean
)
col1
.
data
.
get
(
j
);
if
(
val
==
null
)
{
colDataList
.
put
((
byte
)
0
);
}
else
{
colDataList
.
put
((
byte
)
(
val
?
1
:
0
));
}
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Short
val
=
(
Short
)
col1
.
data
.
get
(
j
);
colDataList
.
putShort
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Long
val
=
(
Long
)
col1
.
data
.
get
(
j
);
colDataList
.
putLong
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Float
val
=
(
Float
)
col1
.
data
.
get
(
j
);
colDataList
.
putFloat
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
{
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
Double
val
=
(
Double
)
col1
.
data
.
get
(
j
);
colDataList
.
putDouble
(
val
==
null
?
0
:
val
);
isNullList
.
put
((
byte
)
(
val
==
null
?
1
:
0
));
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
{
String
charset
=
TaosGlobalConfig
.
getCharset
();
for
(
int
j
=
0
;
j
<
rows
;
++
j
)
{
String
val
=
(
String
)
col1
.
data
.
get
(
j
);
colDataList
.
position
(
j
*
col1
.
bytes
);
// seek to the correct position
if
(
val
!=
null
)
{
byte
[]
b
=
null
;
try
{
if
(
col1
.
type
==
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
)
{
b
=
val
.
getBytes
();
}
else
{
b
=
val
.
getBytes
(
charset
);
}
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
}
if
(
val
.
length
()
>
col1
.
bytes
)
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"string data too long"
);
}
colDataList
.
put
(
b
);
lengthList
.
putInt
(
b
.
length
);
isNullList
.
put
((
byte
)
0
);
}
else
{
lengthList
.
putInt
(
0
);
isNullList
.
put
((
byte
)
1
);
}
}
break
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_USMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_UBIGINT
:
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN
,
"not support data types"
);
}
}
;
connector
.
bindColumnDataArray
(
this
.
nativeStmtHandle
,
colDataList
,
lengthList
,
isNullList
,
col1
.
type
,
col1
.
bytes
,
rows
,
i
);
}
}
public
void
columnDataExecuteBatch
()
throws
SQLException
{
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
connector
.
executeBatch
(
this
.
nativeStmtHandle
);
this
.
columnDataClearBatch
();
}
public
void
columnDataClearBatch
()
{
int
size
=
this
.
colData
.
size
();
this
.
colData
.
clear
();
int
size
=
this
.
colData
.
size
();
this
.
colData
.
clear
();
this
.
colData
.
addAll
(
Collections
.
nCopies
(
size
,
null
));
this
.
tableName
=
null
;
// clear the table name
}
public
void
columnDataCloseBatch
()
throws
SQLException
{
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
connector
.
closeBatch
(
this
.
nativeStmtHandle
);
this
.
nativeStmtHandle
=
0L
;
this
.
tableName
=
null
;
TSDBJNIConnector
connector
=
((
TSDBConnection
)
this
.
getConnection
()).
getConnector
();
connector
.
closeBatch
(
this
.
nativeStmtHandle
);
this
.
nativeStmtHandle
=
0L
;
this
.
tableName
=
null
;
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSet.java
浏览文件 @
80e64a5a
...
...
@@ -133,9 +133,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getString
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
this
.
rowData
.
getString
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getString
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -147,9 +148,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getBoolean
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
this
.
rowData
.
getBoolean
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getBoolean
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -161,9 +163,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
(
byte
)
this
.
blockData
.
getInt
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
(
byte
)
this
.
rowData
.
getInt
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
(
byte
)
this
.
rowData
.
getInt
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -175,9 +178,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
(
short
)
this
.
blockData
.
getInt
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
(
short
)
this
.
rowData
.
getInt
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
(
short
)
this
.
rowData
.
getInt
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -189,9 +193,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getInt
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
this
.
rowData
.
getInt
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getInt
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -203,13 +209,15 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getLong
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
Object
value
=
this
.
rowData
.
get
(
columnIndex
-
1
);
if
(
value
instanceof
Timestamp
)
Object
value
=
this
.
rowData
.
get
Object
(
columnIndex
);
if
(
value
instanceof
Timestamp
)
{
res
=
((
Timestamp
)
value
).
getTime
();
else
res
=
this
.
rowData
.
getLong
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
}
else
{
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getLong
(
columnIndex
,
nativeType
);
}
}
return
res
;
}
...
...
@@ -221,9 +229,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
(
float
)
this
.
blockData
.
getDouble
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
if
(!
lastWasNull
)
res
=
this
.
rowData
.
getFloat
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getFloat
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -235,9 +245,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getDouble
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
this
.
rowData
.
getDouble
(
columnIndex
-
1
,
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
());
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getDouble
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -245,34 +256,27 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
byte
[]
getBytes
(
int
columnIndex
)
throws
SQLException
{
checkAvailability
(
columnIndex
,
this
.
columnMetaDataList
.
size
());
Object
value
=
this
.
rowData
.
get
(
columnIndex
-
1
);
Object
value
=
this
.
rowData
.
get
Object
(
columnIndex
);
if
(
value
==
null
)
return
null
;
int
col
Type
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
col
Type
)
{
int
native
Type
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
Longs
.
toByteArray
((
L
ong
)
value
);
return
Longs
.
toByteArray
((
l
ong
)
value
);
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
Ints
.
toByteArray
((
int
)
value
);
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
Shorts
.
toByteArray
((
S
hort
)
value
);
return
Shorts
.
toByteArray
((
s
hort
)
value
);
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
new
byte
[]{(
byte
)
value
};
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
(
byte
[])
value
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
default
:
return
value
.
toString
().
getBytes
();
}
return
value
.
toString
().
getBytes
();
}
@Override
public
Date
getDate
(
int
columnIndex
)
throws
SQLException
{
Timestamp
timestamp
=
getTimestamp
(
columnIndex
);
return
timestamp
==
null
?
null
:
new
Date
(
timestamp
.
getTime
());
}
@Override
public
Time
getTime
(
int
columnIndex
)
throws
SQLException
{
Timestamp
timestamp
=
getTimestamp
(
columnIndex
);
return
timestamp
==
null
?
null
:
new
Time
(
timestamp
.
getTime
());
}
public
Timestamp
getTimestamp
(
int
columnIndex
)
throws
SQLException
{
...
...
@@ -282,9 +286,10 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
getTimestamp
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
res
=
this
.
rowData
.
getTimestamp
(
columnIndex
-
1
);
int
nativeType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
res
=
this
.
rowData
.
getTimestamp
(
columnIndex
,
nativeType
);
}
return
res
;
}
...
...
@@ -304,13 +309,9 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
this
.
blockData
.
get
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
if
(!
lastWasNull
)
{
int
colType
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
if
(
colType
==
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
)
res
=
((
String
)
this
.
rowData
.
get
(
columnIndex
-
1
)).
getBytes
();
else
res
=
this
.
rowData
.
get
(
columnIndex
-
1
);
res
=
this
.
rowData
.
getObject
(
columnIndex
);
}
return
res
;
}
...
...
@@ -318,7 +319,7 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
public
int
findColumn
(
String
columnLabel
)
throws
SQLException
{
for
(
ColumnMetaData
colMetaData
:
this
.
columnMetaDataList
)
{
if
(
colMetaData
.
getColName
()
!=
null
&&
colMetaData
.
getColName
().
equalsIgnoreCase
(
columnLabel
))
{
return
colMetaData
.
getColIndex
()
+
1
;
return
colMetaData
.
getColIndex
();
}
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
...
...
@@ -329,25 +330,25 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
if
(
this
.
getBatchFetch
())
return
new
BigDecimal
(
this
.
blockData
.
getLong
(
columnIndex
-
1
));
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
-
1
);
this
.
lastWasNull
=
this
.
rowData
.
wasNull
(
columnIndex
);
BigDecimal
res
=
null
;
if
(!
lastWasNull
)
{
int
col
Type
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
col
Type
)
{
int
native
Type
=
this
.
columnMetaDataList
.
get
(
columnIndex
-
1
).
getColType
();
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
res
=
new
BigDecimal
(
Long
.
valueOf
(
this
.
rowData
.
get
(
columnIndex
-
1
).
toString
()));
res
=
new
BigDecimal
(
Long
.
valueOf
(
this
.
rowData
.
get
Object
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
res
=
new
BigDecimal
(
Double
.
valueOf
(
this
.
rowData
.
get
(
columnIndex
-
1
).
toString
()));
res
=
new
BigDecimal
(
Double
.
valueOf
(
this
.
rowData
.
get
Object
(
columnIndex
).
toString
()));
break
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
get
(
columnIndex
-
1
)).
getTime
());
return
new
BigDecimal
(((
Timestamp
)
this
.
rowData
.
get
Object
(
columnIndex
)).
getTime
());
default
:
res
=
new
BigDecimal
(
this
.
rowData
.
get
(
columnIndex
-
1
).
toString
());
res
=
new
BigDecimal
(
this
.
rowData
.
get
Object
(
columnIndex
).
toString
());
}
}
return
res
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
浏览文件 @
80e64a5a
...
...
@@ -113,6 +113,7 @@ public class TSDBResultSetMetaData extends WrapperImpl implements ResultSetMetaD
ColumnMetaData
columnMetaData
=
this
.
colMetaDataList
.
get
(
column
-
1
);
switch
(
columnMetaData
.
getColType
())
{
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
5
;
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetRowData.java
浏览文件 @
80e64a5a
...
...
@@ -14,6 +14,8 @@
*****************************************************************************/
package
com.taosdata.jdbc
;
import
com.taosdata.jdbc.utils.NullType
;
import
java.math.BigDecimal
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
...
...
@@ -22,11 +24,13 @@ import java.util.ArrayList;
import
java.util.Collections
;
public
class
TSDBResultSetRowData
{
private
ArrayList
<
Object
>
data
;
private
int
colSize
=
0
;
private
int
colSize
;
public
TSDBResultSetRowData
(
int
colSize
)
{
this
.
setColSize
(
colSize
);
this
.
colSize
=
colSize
;
this
.
clear
();
}
public
void
clear
()
{
...
...
@@ -41,68 +45,104 @@ public class TSDBResultSetRowData {
}
public
boolean
wasNull
(
int
col
)
{
return
data
.
get
(
col
)
==
null
;
return
data
.
get
(
col
-
1
)
==
null
;
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setBooleanValue
(
int
col
,
boolean
value
)
{
setBoolean
(
col
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setBoolean
(
int
col
,
boolean
value
)
{
data
.
set
(
col
,
value
);
}
public
boolean
getBoolean
(
int
col
,
int
src
Type
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
);
public
boolean
getBoolean
(
int
col
,
int
native
Type
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
-
1
);
switch
(
src
Type
)
{
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
(
Boolean
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
((
Float
)
obj
)
==
1.0
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
((
Double
)
obj
)
==
1.0
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
((
Byte
)
obj
)
==
1
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
((
Short
)
obj
)
==
1
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
((
Integer
)
obj
)
==
1
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
((
Long
)
obj
)
==
1L
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
{
return
obj
.
toString
().
contains
(
"1"
);
}
default
:
return
false
;
}
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setByteValue
(
int
colIndex
,
byte
value
)
{
setByte
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setByte
(
int
col
,
byte
value
)
{
data
.
set
(
col
,
value
);
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setShortValue
(
int
colIndex
,
short
value
)
{
setShort
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setShort
(
int
col
,
short
value
)
{
data
.
set
(
col
,
value
);
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setIntValue
(
int
colIndex
,
int
value
)
{
setInt
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setInt
(
int
col
,
int
value
)
{
data
.
set
(
col
,
value
);
}
@SuppressWarnings
(
"deprecation"
)
public
int
getInt
(
int
col
,
int
srcType
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
);
public
int
getInt
(
int
col
,
int
nativeType
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
return
NullType
.
getIntNull
();
switch
(
src
Type
)
{
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Boolean
.
TRUE
.
equals
(
obj
)
?
1
:
0
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
((
Float
)
obj
).
intValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
((
Double
)
obj
).
intValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
(
Byte
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
(
Short
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
(
Integer
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
((
Long
)
obj
).
intValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
...
...
@@ -131,33 +171,46 @@ public class TSDBResultSetRowData {
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_NUMERIC_VALUE_OUT_OF_RANGE
);
return
Long
.
valueOf
(
value
).
intValue
();
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
((
Float
)
obj
).
intValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
((
Double
)
obj
).
intValue
();
default
:
return
0
;
}
}
return
0
;
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setLongValue
(
int
colIndex
,
long
value
)
{
setLong
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setLong
(
int
col
,
long
value
)
{
data
.
set
(
col
,
value
);
}
public
long
getLong
(
int
col
,
int
srcType
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
);
public
long
getLong
(
int
col
,
int
nativeType
)
throws
SQLException
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
{
return
NullType
.
getBigIntNull
();
}
switch
(
src
Type
)
{
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Boolean
.
TRUE
.
equals
(
obj
)
?
1
:
0
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
((
Float
)
obj
).
longValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
((
Double
)
obj
).
longValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
(
Byte
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
(
Short
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
(
Integer
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
(
Long
)
obj
;
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
...
...
@@ -186,19 +239,35 @@ public class TSDBResultSetRowData {
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_NUMERIC_VALUE_OUT_OF_RANGE
);
return
value
;
}
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
((
Float
)
obj
).
longValue
();
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
((
Double
)
obj
).
longValue
();
default
:
return
0
;
}
}
return
0
;
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setFloatValue
(
int
colIndex
,
float
value
)
{
setFloat
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setFloat
(
int
col
,
float
value
)
{
data
.
set
(
col
,
value
);
}
public
float
getFloat
(
int
col
,
int
srcType
)
{
Object
obj
=
data
.
get
(
col
);
public
float
getFloat
(
int
col
,
int
nativeType
)
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
return
NullType
.
getFloatNull
();
switch
(
src
Type
)
{
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Boolean
.
TRUE
.
equals
(
obj
)
?
1
:
0
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
...
...
@@ -214,19 +283,31 @@ public class TSDBResultSetRowData {
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
(
Long
)
obj
;
default
:
return
NullType
.
getFloatNull
();
}
}
return
0
;
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setDoubleValue
(
int
colIndex
,
double
value
)
{
setDouble
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setDouble
(
int
col
,
double
value
)
{
data
.
set
(
col
,
value
);
}
public
double
getDouble
(
int
col
,
int
srcType
)
{
Object
obj
=
data
.
get
(
col
);
public
double
getDouble
(
int
col
,
int
nativeType
)
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
return
NullType
.
getDoubleNull
();
switch
(
src
Type
)
{
switch
(
native
Type
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Boolean
.
TRUE
.
equals
(
obj
)
?
1
:
0
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
...
...
@@ -242,16 +323,46 @@ public class TSDBResultSetRowData {
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
(
Long
)
obj
;
default
:
return
NullType
.
getDoubleNull
();
}
}
return
0
;
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setStringValue
(
int
colIndex
,
String
value
)
{
data
.
set
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setString
(
int
col
,
String
value
)
{
data
.
set
(
col
,
value
);
// TODO:
// !!!NOTE!!!
// this is very confusing problem which related to JNI-method implementation,
// the JNI method return a String(encoded in UTF) for BINARY value, which means the JNI method will invoke
// this setString(int, String) to handle BINARY value, we need to build a byte[] with default charsetEncoding
data
.
set
(
col
,
value
==
null
?
null
:
value
.
getBytes
());
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setByteArrayValue
(
int
colIndex
,
byte
[]
value
)
{
setByteArray
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setByteArray
(
int
col
,
byte
[]
value
)
{
// TODO:
// !!!NOTE!!!
// this is very confusing problem which related to JNI-method implementation,
// the JNI method return a byte[] for NCHAR value, which means the JNI method will invoke
// this setByteArr(int, byte[]) to handle NCHAR value, we need to build a String with charsetEncoding by TaosGlobalConfig
try
{
data
.
set
(
col
,
new
String
(
value
,
TaosGlobalConfig
.
getCharset
()));
}
catch
(
Exception
e
)
{
...
...
@@ -259,47 +370,56 @@ public class TSDBResultSetRowData {
}
}
/**
* The original type may not be a string type, but will be converted to by calling this method
*
* @param col column index
* @return
*/
public
String
getString
(
int
col
,
int
srcType
)
{
switch
(
srcType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
(
String
)
data
.
get
(
col
);
public
String
getString
(
int
col
,
int
nativeType
)
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
return
null
;
switch
(
nativeType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_UTINYINT
:
{
Byte
value
=
new
Byte
(
String
.
valueOf
(
data
.
get
(
col
)
));
Byte
value
=
new
Byte
(
String
.
valueOf
(
obj
));
if
(
value
>=
0
)
return
value
.
toString
();
return
Integer
.
toString
(
value
&
0xff
);
}
case
TSDBConstants
.
TSDB_DATA_TYPE_USMALLINT
:
{
Short
value
=
new
Short
(
String
.
valueOf
(
data
.
get
(
col
)
));
Short
value
=
new
Short
(
String
.
valueOf
(
obj
));
if
(
value
>=
0
)
return
value
.
toString
();
return
Integer
.
toString
(
value
&
0xffff
);
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UINT
:
{
Integer
value
=
new
Integer
(
String
.
valueOf
(
data
.
get
(
col
)
));
Integer
value
=
new
Integer
(
String
.
valueOf
(
obj
));
if
(
value
>=
0
)
return
value
.
toString
();
return
Long
.
toString
(
value
&
0xffffffff
l
);
}
case
TSDBConstants
.
TSDB_DATA_TYPE_UBIGINT
:
{
Long
value
=
new
Long
(
String
.
valueOf
(
data
.
get
(
col
)
));
Long
value
=
new
Long
(
String
.
valueOf
(
obj
));
if
(
value
>=
0
)
return
value
.
toString
();
long
lowValue
=
value
&
0x7fffffffffffffff
L
;
return
BigDecimal
.
valueOf
(
lowValue
).
add
(
BigDecimal
.
valueOf
(
Long
.
MAX_VALUE
)).
add
(
BigDecimal
.
valueOf
(
1
)).
toString
();
}
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
new
String
((
byte
[])
obj
);
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
(
String
)
obj
;
default
:
return
String
.
valueOf
(
data
.
get
(
col
)
);
return
String
.
valueOf
(
obj
);
}
}
/**
* $$$ this method is invoked by databaseMetaDataResultSet and so on which use a index start from 1 in JDBC api
*/
public
void
setTimestampValue
(
int
colIndex
,
long
value
)
{
setTimestamp
(
colIndex
-
1
,
value
);
}
/**
* !!! this method is invoked by JNI method and the index start from 0 in C implementations
*/
public
void
setTimestamp
(
int
col
,
long
ts
)
{
//TODO: this implementation contains logical error
// when precision is us the (long ts) is 16 digital number
...
...
@@ -316,28 +436,20 @@ public class TSDBResultSetRowData {
}
}
public
Timestamp
getTimestamp
(
int
col
)
{
return
(
Timestamp
)
data
.
get
(
col
);
}
public
Object
get
(
int
col
)
{
return
data
.
get
(
col
);
}
public
int
getColSize
()
{
return
colSize
;
}
private
void
setColSize
(
int
colSize
)
{
this
.
colSize
=
colSize
;
this
.
clear
();
public
Timestamp
getTimestamp
(
int
col
,
int
nativeType
)
{
Object
obj
=
data
.
get
(
col
-
1
);
if
(
obj
==
null
)
return
null
;
switch
(
nativeType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
new
Timestamp
((
Long
)
obj
);
default
:
return
(
Timestamp
)
obj
;
}
}
public
ArrayList
<
Object
>
getData
(
)
{
return
data
;
public
Object
getObject
(
int
col
)
{
return
data
.
get
(
col
-
1
)
;
}
public
void
setData
(
ArrayList
<
Object
>
data
)
{
this
.
data
=
(
ArrayList
<
Object
>)
data
.
clone
();
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBStatement.java
浏览文件 @
80e64a5a
...
...
@@ -32,14 +32,15 @@ public class TSDBStatement extends AbstractStatement {
}
public
ResultSet
executeQuery
(
String
sql
)
throws
SQLException
{
// check if closed
if
(
isClosed
())
{
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_STATEMENT_CLOSED
);
}
//TODO: 如果在executeQuery方法中执行insert语句,那么先执行了SQL,再通过pSql来检查是否为一个insert语句,但这个insert SQL已经执行成功了
// execute query
//TODO:
// this is an unreasonable implementation, if the paratemer is a insert statement,
// the JNI connector will execute the sql at first and return a pointer: pSql,
// we use this pSql and invoke the isUpdateQuery(long pSql) method to decide .
// but the insert sql is already executed in database.
//execute query
long
pSql
=
this
.
connection
.
getConnector
().
executeQuery
(
sql
);
// if pSql is create/insert/update/delete/alter SQL
if
(
this
.
connection
.
getConnector
().
isUpdateQuery
(
pSql
))
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/utils/Utils.java
浏览文件 @
80e64a5a
...
...
@@ -95,16 +95,7 @@ public class Utils {
public
static
String
getNativeSql
(
String
rawSql
,
Object
[]
parameters
)
{
// toLowerCase
String
preparedSql
=
rawSql
.
trim
().
toLowerCase
();
String
[]
clause
=
new
String
[
0
];
if
(
SqlSyntaxValidator
.
isInsertSql
(
preparedSql
))
{
// insert or import
clause
=
new
String
[]{
"values\\s*\\(.*?\\)"
,
"tags\\s*\\(.*?\\)"
};
}
if
(
SqlSyntaxValidator
.
isSelectSql
(
preparedSql
))
{
// select
clause
=
new
String
[]{
"where\\s*.*"
};
}
String
[]
clause
=
new
String
[]{
"values\\s*\\(.*?\\)"
,
"tags\\s*\\(.*?\\)"
,
"where\\s*.*"
};
Map
<
Integer
,
Integer
>
placeholderPositions
=
new
HashMap
<>();
RangeSet
<
Integer
>
clauseRangeSet
=
TreeRangeSet
.
create
();
findPlaceholderPosition
(
preparedSql
,
placeholderPositions
);
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBConnectionTest.java
浏览文件 @
80e64a5a
...
...
@@ -32,20 +32,34 @@ public class TSDBConnectionTest {
}
@Test
public
void
s
ubscribe
()
{
public
void
runS
ubscribe
()
{
try
{
// given
TSDBConnection
unwrap
=
conn
.
unwrap
(
TSDBConnection
.
class
);
TSDBSubscribe
subscribe
=
unwrap
.
subscribe
(
"topic1"
,
"select * from log.log"
,
false
);
// when
TSDBResultSet
rs
=
subscribe
.
consume
();
ResultSetMetaData
metaData
=
rs
.
getMetaData
();
for
(
int
count
=
0
;
count
<
10
&&
rs
.
next
();
count
++)
{
for
(
int
i
=
1
;
i
<=
metaData
.
getColumnCount
();
i
++)
{
String
value
=
rs
.
getString
(
i
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
i
)
+
":"
+
value
+
"\t"
);
}
System
.
out
.
println
();
}
// then
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
4
,
metaData
.
getColumnCount
());
Assert
.
assertEquals
(
"ts"
,
metaData
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"level"
,
metaData
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
"content"
,
metaData
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"ipaddr"
,
metaData
.
getColumnLabel
(
4
));
rs
.
next
();
// row 1
{
Assert
.
assertNotNull
(
rs
.
getTimestamp
(
1
));
Assert
.
assertNotNull
(
rs
.
getTimestamp
(
"ts"
));
Assert
.
assertNotNull
(
rs
.
getByte
(
2
));
Assert
.
assertNotNull
(
rs
.
getByte
(
"level"
));
Assert
.
assertNotNull
(
rs
.
getString
(
3
));
Assert
.
assertNotNull
(
rs
.
getString
(
"content"
));
Assert
.
assertNotNull
(
rs
.
getString
(
4
));
Assert
.
assertNotNull
(
rs
.
getString
(
"ipaddr"
));
}
subscribe
.
close
(
false
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
浏览文件 @
80e64a5a
...
...
@@ -7,9 +7,11 @@ import java.util.Properties;
public
class
TSDBDatabaseMetaDataTest
{
private
static
final
String
host
=
"127.0.0.1"
;
private
static
final
String
url
=
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
;
private
static
Connection
connection
;
private
static
TSDBDatabaseMetaData
metaData
;
@Test
public
void
unwrap
()
throws
SQLException
{
TSDBDatabaseMetaData
unwrap
=
metaData
.
unwrap
(
TSDBDatabaseMetaData
.
class
);
...
...
@@ -33,7 +35,7 @@ public class TSDBDatabaseMetaDataTest {
@Test
public
void
getURL
()
throws
SQLException
{
Assert
.
assertEquals
(
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
,
metaData
.
getURL
());
Assert
.
assertEquals
(
url
,
metaData
.
getURL
());
}
@Test
...
...
@@ -627,17 +629,32 @@ public class TSDBDatabaseMetaDataTest {
@Test
public
void
getTables
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
tables
=
metaData
.
getTables
(
"log"
,
""
,
null
,
null
);
ResultSetMetaData
metaData
=
tables
.
getMetaData
();
while
(
tables
.
next
())
{
System
.
out
.
print
(
metaData
.
getColumnLabel
(
1
)
+
":"
+
tables
.
getString
(
1
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
3
)
+
":"
+
tables
.
getString
(
3
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
4
)
+
":"
+
tables
.
getString
(
4
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
5
)
+
":"
+
tables
.
getString
(
5
)
+
"\n"
);
ResultSet
rs
=
metaData
.
getTables
(
"log"
,
""
,
null
,
null
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
Assert
.
assertNotNull
(
rs
);
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_SCHEM
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertNotNull
(
rs
.
getString
(
3
));
Assert
.
assertNotNull
(
rs
.
getString
(
"TABLE_NAME"
));
// TABLE_TYPE
Assert
.
assertEquals
(
"TABLE_TYPE"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"TABLE"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"TABLE"
,
rs
.
getString
(
"TABLE_TYPE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
""
,
rs
.
getString
(
5
));
Assert
.
assertEquals
(
""
,
rs
.
getString
(
"REMARKS"
));
}
System
.
out
.
println
();
Assert
.
assertNotNull
(
tables
);
}
@Test
...
...
@@ -647,46 +664,130 @@ public class TSDBDatabaseMetaDataTest {
@Test
public
void
getCatalogs
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
catalogs
=
metaData
.
getCatalogs
();
ResultSetMetaData
meta
=
catalogs
.
getMetaData
();
while
(
catalogs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
System
.
out
.
print
(
meta
.
getColumnLabel
(
i
)
+
": "
+
catalogs
.
getString
(
i
));
}
System
.
out
.
println
();
ResultSet
rs
=
metaData
.
getCatalogs
();
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertNotNull
(
rs
.
getString
(
1
));
Assert
.
assertNotNull
(
rs
.
getString
(
"TABLE_CAT"
));
}
}
@Test
public
void
getTableTypes
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
tableTypes
=
metaData
.
getTableTypes
();
while
(
tableTypes
.
next
())
{
System
.
out
.
println
(
tableTypes
.
getString
(
"TABLE_TYPE"
));
tableTypes
.
next
();
// tableTypes: table
{
Assert
.
assertEquals
(
"TABLE"
,
tableTypes
.
getString
(
1
));
Assert
.
assertEquals
(
"TABLE"
,
tableTypes
.
getString
(
"TABLE_TYPE"
));
}
tableTypes
.
next
();
// tableTypes: stable
{
Assert
.
assertEquals
(
"STABLE"
,
tableTypes
.
getString
(
1
));
Assert
.
assertEquals
(
"STABLE"
,
tableTypes
.
getString
(
"TABLE_TYPE"
));
}
Assert
.
assertNotNull
(
metaData
.
getTableTypes
());
}
@Test
public
void
getColumns
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
// when
ResultSet
columns
=
metaData
.
getColumns
(
"log"
,
""
,
"dn"
,
""
);
// then
ResultSetMetaData
meta
=
columns
.
getMetaData
();
while
(
columns
.
next
())
{
System
.
out
.
print
(
meta
.
getColumnLabel
(
1
)
+
": "
+
columns
.
getString
(
1
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
3
)
+
": "
+
columns
.
getString
(
3
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
4
)
+
": "
+
columns
.
getString
(
4
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
5
)
+
": "
+
columns
.
getString
(
5
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
6
)
+
": "
+
columns
.
getString
(
6
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
7
)
+
": "
+
columns
.
getString
(
7
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
9
)
+
": "
+
columns
.
getString
(
9
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
10
)
+
": "
+
columns
.
getString
(
10
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
11
)
+
": "
+
columns
.
getString
(
11
)
+
"\n"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
12
)
+
": "
+
columns
.
getString
(
12
)
+
"\n"
);
columns
.
next
();
// column: 1
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
"TABLE_CAT"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"ts"
,
columns
.
getString
(
4
));
Assert
.
assertEquals
(
"ts"
,
columns
.
getString
(
"COLUMN_NAME"
));
// DATA_TYPE
Assert
.
assertEquals
(
"DATA_TYPE"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
Types
.
TIMESTAMP
,
columns
.
getInt
(
5
));
Assert
.
assertEquals
(
Types
.
TIMESTAMP
,
columns
.
getInt
(
"DATA_TYPE"
));
// TYPE_NAME
Assert
.
assertEquals
(
"TYPE_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"TIMESTAMP"
,
columns
.
getString
(
6
));
Assert
.
assertEquals
(
"TIMESTAMP"
,
columns
.
getString
(
"TYPE_NAME"
));
// COLUMN_SIZE
Assert
.
assertEquals
(
"COLUMN_SIZE"
,
meta
.
getColumnLabel
(
7
));
Assert
.
assertEquals
(
26
,
columns
.
getInt
(
7
));
Assert
.
assertEquals
(
26
,
columns
.
getInt
(
"COLUMN_SIZE"
));
// DECIMAL_DIGITS
Assert
.
assertEquals
(
"DECIMAL_DIGITS"
,
meta
.
getColumnLabel
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
"DECIMAL_DIGITS"
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
9
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"DECIMAL_DIGITS"
));
// NUM_PREC_RADIX
Assert
.
assertEquals
(
"NUM_PREC_RADIX"
,
meta
.
getColumnLabel
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
"NUM_PREC_RADIX"
));
// NULLABLE
Assert
.
assertEquals
(
"NULLABLE"
,
meta
.
getColumnLabel
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNoNulls
,
columns
.
getInt
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNoNulls
,
columns
.
getInt
(
"NULLABLE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"REMARKS"
));
}
columns
.
next
();
// column: 2
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
"TABLE_CAT"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"cpu_taosd"
,
columns
.
getString
(
4
));
Assert
.
assertEquals
(
"cpu_taosd"
,
columns
.
getString
(
"COLUMN_NAME"
));
// DATA_TYPE
Assert
.
assertEquals
(
"DATA_TYPE"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
Types
.
FLOAT
,
columns
.
getInt
(
5
));
Assert
.
assertEquals
(
Types
.
FLOAT
,
columns
.
getInt
(
"DATA_TYPE"
));
// TYPE_NAME
Assert
.
assertEquals
(
"TYPE_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"FLOAT"
,
columns
.
getString
(
6
));
Assert
.
assertEquals
(
"FLOAT"
,
columns
.
getString
(
"TYPE_NAME"
));
// COLUMN_SIZE
Assert
.
assertEquals
(
"COLUMN_SIZE"
,
meta
.
getColumnLabel
(
7
));
Assert
.
assertEquals
(
12
,
columns
.
getInt
(
7
));
Assert
.
assertEquals
(
12
,
columns
.
getInt
(
"COLUMN_SIZE"
));
// DECIMAL_DIGITS
Assert
.
assertEquals
(
"DECIMAL_DIGITS"
,
meta
.
getColumnLabel
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
"DECIMAL_DIGITS"
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
9
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"DECIMAL_DIGITS"
));
// NUM_PREC_RADIX
Assert
.
assertEquals
(
"NUM_PREC_RADIX"
,
meta
.
getColumnLabel
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
"NUM_PREC_RADIX"
));
// NULLABLE
Assert
.
assertEquals
(
"NULLABLE"
,
meta
.
getColumnLabel
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNullable
,
columns
.
getInt
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNullable
,
columns
.
getInt
(
"NULLABLE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
12
));
}
}
...
...
@@ -712,17 +813,35 @@ public class TSDBDatabaseMetaDataTest {
@Test
public
void
getPrimaryKeys
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
rs
=
metaData
.
getPrimaryKeys
(
"log"
,
""
,
"dn1"
);
while
(
rs
.
next
())
{
System
.
out
.
println
(
"TABLE_NAME: "
+
rs
.
getString
(
"TABLE_NAME"
));
System
.
out
.
println
(
"COLUMN_NAME: "
+
rs
.
getString
(
"COLUMN_NAME"
));
System
.
out
.
println
(
"KEY_SEQ: "
+
rs
.
getString
(
"KEY_SEQ"
));
System
.
out
.
println
(
"PK_NAME: "
+
rs
.
getString
(
"PK_NAME"
));
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_SCHEM
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
"COLUMN_NAME"
));
// KEY_SEQ
Assert
.
assertEquals
(
"KEY_SEQ"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
1
,
rs
.
getShort
(
5
));
Assert
.
assertEquals
(
1
,
rs
.
getShort
(
"KEY_SEQ"
));
// DATA_TYPE
Assert
.
assertEquals
(
"PK_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
6
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
"PK_NAME"
));
}
Assert
.
assertNotNull
(
rs
);
}
@Test
...
...
@@ -847,14 +966,27 @@ public class TSDBDatabaseMetaDataTest {
@Test
public
void
getSuperTables
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
rs
=
metaData
.
getSuperTables
(
"log"
,
""
,
"dn1"
);
while
(
rs
.
next
())
{
System
.
out
.
println
(
"TABLE_NAME: "
+
rs
.
getString
(
"TABLE_NAME"
));
System
.
out
.
println
(
"SUPERTABLE_NAME: "
+
rs
.
getString
(
"SUPERTABLE_NAME"
));
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
"TABLE_NAME"
));
// TABLE_CAT
Assert
.
assertEquals
(
"SUPERTABLE_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"dn"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"dn"
,
rs
.
getString
(
"SUPERTABLE_NAME"
));
}
Assert
.
assertNotNull
(
rs
);
}
@Test
...
...
@@ -951,15 +1083,12 @@ public class TSDBDatabaseMetaDataTest {
@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
);
connection
=
DriverManager
.
getConnection
(
url
,
properties
);
metaData
=
connection
.
getMetaData
().
unwrap
(
TSDBDatabaseMetaData
.
class
);
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBJNIConnectorTest.java
浏览文件 @
80e64a5a
...
...
@@ -45,9 +45,9 @@ public class TSDBJNIConnectorTest {
rowData
=
new
TSDBResultSetRowData
(
columnSize
);
// iterate resultSet
for
(
int
i
=
0
;
next
(
connector
,
pSql
);
i
++)
{
System
.
out
.
println
(
"col["
+
i
+
"] size: "
+
rowData
.
getColSize
());
rowData
.
getData
().
stream
().
forEach
(
col
->
System
.
out
.
print
(
col
+
"\t"
));
System
.
out
.
println
();
//
System.out.println("col[" + i + "] size: " + rowData.getColSize());
//
rowData.getData().stream().forEach(col -> System.out.print(col + "\t"));
//
System.out.println();
}
// close resultSet
code
=
connector
.
freeResultSet
(
pSql
);
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBParameterMetaDataTest.java
浏览文件 @
80e64a5a
...
...
@@ -54,16 +54,17 @@ public class TSDBParameterMetaDataTest {
@Test
public
void
getPrecision
()
throws
SQLException
{
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
1
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
2
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
3
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
4
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
5
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
6
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
7
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
8
));
Assert
.
assertEquals
(
5
,
parameterMetaData_insert
.
getPrecision
(
9
));
Assert
.
assertEquals
(
5
,
parameterMetaData_insert
.
getPrecision
(
10
));
//create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64))
Assert
.
assertEquals
(
TSDBConstants
.
TIMESTAMP_MS_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
1
));
Assert
.
assertEquals
(
TSDBConstants
.
INT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
2
));
Assert
.
assertEquals
(
TSDBConstants
.
BIGINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
3
));
Assert
.
assertEquals
(
TSDBConstants
.
FLOAT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
4
));
Assert
.
assertEquals
(
TSDBConstants
.
DOUBLE_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
5
));
Assert
.
assertEquals
(
TSDBConstants
.
SMALLINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
6
));
Assert
.
assertEquals
(
TSDBConstants
.
TINYINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
7
));
Assert
.
assertEquals
(
TSDBConstants
.
BOOLEAN_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
8
));
Assert
.
assertEquals
(
"hello"
.
getBytes
().
length
,
parameterMetaData_insert
.
getPrecision
(
9
));
Assert
.
assertEquals
(
"涛思数据"
.
length
(),
parameterMetaData_insert
.
getPrecision
(
10
));
}
@Test
...
...
@@ -71,8 +72,8 @@ public class TSDBParameterMetaDataTest {
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
1
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
2
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
3
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
4
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
5
));
Assert
.
assertEquals
(
31
,
parameterMetaData_insert
.
getScale
(
4
));
Assert
.
assertEquals
(
31
,
parameterMetaData_insert
.
getScale
(
5
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
6
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
7
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
8
));
...
...
@@ -124,10 +125,16 @@ public class TSDBParameterMetaDataTest {
@Test
public
void
getParameterMode
()
throws
SQLException
{
for
(
int
i
=
1
;
i
<=
parameterMetaData_insert
.
getParameterCount
();
i
++)
{
int
parameterMode
=
parameterMetaData_insert
.
getParameterMode
(
i
);
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMode
);
}
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
1
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
2
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
3
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
4
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
5
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
6
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
7
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
8
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
9
));
Assert
.
assertEquals
(
ParameterMetaData
.
parameterModeUnknown
,
parameterMetaData_insert
.
getParameterMode
(
10
));
}
@Test
...
...
@@ -144,7 +151,6 @@ public class TSDBParameterMetaDataTest {
@BeforeClass
public
static
void
beforeClass
()
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop database if exists test_pstmt"
);
...
...
@@ -164,7 +170,7 @@ public class TSDBParameterMetaDataTest {
pstmt_insert
.
setObject
(
7
,
Byte
.
MAX_VALUE
);
pstmt_insert
.
setObject
(
8
,
true
);
pstmt_insert
.
setObject
(
9
,
"hello"
.
getBytes
());
pstmt_insert
.
setObject
(
10
,
"
Hello
"
);
pstmt_insert
.
setObject
(
10
,
"
涛思数据
"
);
parameterMetaData_insert
=
pstmt_insert
.
getParameterMetaData
();
pstmt_select
=
conn
.
prepareStatement
(
sql_select
);
...
...
@@ -173,7 +179,7 @@ public class TSDBParameterMetaDataTest {
pstmt_select
.
setInt
(
3
,
0
);
parameterMetaData_select
=
pstmt_select
.
getParameterMetaData
();
}
catch
(
ClassNotFoundException
|
SQLException
e
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBPreparedStatementTest.java
浏览文件 @
80e64a5a
package
com.taosdata.jdbc
;
import
org.junit.AfterClass
;
import
org.junit.Assert
;
import
org.junit.BeforeClass
;
import
org.junit.Test
;
import
org.junit.*
;
import
java.io.IOException
;
import
java.
io.Serializable
;
import
java.
math.BigDecimal
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.Random
;
import
java.time.LocalTime
;
public
class
TSDBPreparedStatementTest
{
private
static
final
String
host
=
"127.0.0.1"
;
private
static
Connection
conn
;
private
static
final
String
sql_insert
=
"insert into t1 values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
;
private
static
PreparedStatement
pstmt_insert
;
private
static
final
String
sql_select
=
"select * from t1 where ts > ? and ts <= ? and f1 >= ?"
;
private
static
PreparedStatement
pstmt_select
;
private
static
final
String
sql_select
=
"select * from t1 where ts >= ? and ts < ? and f1 >= ?"
;
private
PreparedStatement
pstmt_insert
;
private
PreparedStatement
pstmt_select
;
//create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))
@Test
public
void
executeQuery
()
throws
SQLException
{
long
end
=
System
.
currentTimeMillis
();
long
start
=
end
-
1000
*
60
*
60
;
// given
long
ts
=
System
.
currentTimeMillis
();
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setInt
(
2
,
2
);
pstmt_insert
.
setLong
(
3
,
3
l
);
pstmt_insert
.
setFloat
(
4
,
3.14f
);
pstmt_insert
.
setDouble
(
5
,
3.1415
);
pstmt_insert
.
setShort
(
6
,
(
short
)
6
);
pstmt_insert
.
setByte
(
7
,
(
byte
)
7
);
pstmt_insert
.
setBoolean
(
8
,
true
);
pstmt_insert
.
setBytes
(
9
,
"abc"
.
getBytes
());
pstmt_insert
.
setString
(
10
,
"涛思数据"
);
pstmt_insert
.
executeUpdate
();
long
start
=
ts
-
1000
*
60
*
60
;
long
end
=
ts
+
1000
*
60
*
60
;
pstmt_select
.
setTimestamp
(
1
,
new
Timestamp
(
start
));
pstmt_select
.
setTimestamp
(
2
,
new
Timestamp
(
end
));
pstmt_select
.
setInt
(
3
,
0
);
// when
ResultSet
rs
=
pstmt_select
.
executeQuery
();
Assert
.
assertNotNull
(
rs
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
while
(
rs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
System
.
out
.
print
(
meta
.
getColumnLabel
(
i
)
+
": "
+
rs
.
getString
(
i
)
+
"\t"
);
}
System
.
out
.
println
();
rs
.
next
();
// then
assertMetaData
(
meta
);
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
2
,
rs
.
getInt
(
2
));
Assert
.
assertEquals
(
2
,
rs
.
getInt
(
"f1"
));
Assert
.
assertEquals
(
3
l
,
rs
.
getLong
(
3
));
Assert
.
assertEquals
(
3
l
,
rs
.
getLong
(
"f2"
));
Assert
.
assertEquals
(
3.14f
,
rs
.
getFloat
(
4
),
0.0
);
Assert
.
assertEquals
(
3.14f
,
rs
.
getFloat
(
"f3"
),
0.0
);
Assert
.
assertEquals
(
3.1415
,
rs
.
getDouble
(
5
),
0.0
);
Assert
.
assertEquals
(
3.1415
,
rs
.
getDouble
(
"f4"
),
0.0
);
Assert
.
assertEquals
((
short
)
6
,
rs
.
getShort
(
6
));
Assert
.
assertEquals
((
short
)
6
,
rs
.
getShort
(
"f5"
));
Assert
.
assertEquals
((
byte
)
7
,
rs
.
getByte
(
7
));
Assert
.
assertEquals
((
byte
)
7
,
rs
.
getByte
(
"f6"
));
Assert
.
assertTrue
(
rs
.
getBoolean
(
8
));
Assert
.
assertTrue
(
rs
.
getBoolean
(
"f7"
));
Assert
.
assertArrayEquals
(
"abc"
.
getBytes
(),
rs
.
getBytes
(
9
));
Assert
.
assertArrayEquals
(
"abc"
.
getBytes
(),
rs
.
getBytes
(
"f8"
));
Assert
.
assertEquals
(
"涛思数据"
,
rs
.
getString
(
10
));
Assert
.
assertEquals
(
"涛思数据"
,
rs
.
getString
(
"f9"
));
}
}
@Test
public
void
executeUpdate
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setFloat
(
4
,
3.14f
);
int
result
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
result
);
private
void
assertMetaData
(
ResultSetMetaData
meta
)
throws
SQLException
{
Assert
.
assertEquals
(
10
,
meta
.
getColumnCount
());
Assert
.
assertEquals
(
"ts"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"f1"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
"f2"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"f3"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"f4"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
"f5"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"f6"
,
meta
.
getColumnLabel
(
7
));
Assert
.
assertEquals
(
"f7"
,
meta
.
getColumnLabel
(
8
));
Assert
.
assertEquals
(
"f8"
,
meta
.
getColumnLabel
(
9
));
Assert
.
assertEquals
(
"f9"
,
meta
.
getColumnLabel
(
10
));
}
@Test
public
void
setNull
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
public
void
setNullForTimestamp
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
2
,
Types
.
INTEGER
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
private
void
assertAllNullExceptTimestamp
(
ResultSet
rs
,
long
ts
)
throws
SQLException
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
0
,
rs
.
getInt
(
2
));
Assert
.
assertEquals
(
0
,
rs
.
getInt
(
"f1"
));
Assert
.
assertEquals
(
0
,
rs
.
getLong
(
3
));
Assert
.
assertEquals
(
0
,
rs
.
getLong
(
"f2"
));
Assert
.
assertEquals
(
0
,
rs
.
getFloat
(
4
),
0.0
);
Assert
.
assertEquals
(
0
,
rs
.
getFloat
(
"f3"
),
0.0
);
Assert
.
assertEquals
(
0
,
rs
.
getDouble
(
5
),
0.0
);
Assert
.
assertEquals
(
0
,
rs
.
getDouble
(
"f4"
),
0.0
);
Assert
.
assertEquals
(
0
,
rs
.
getShort
(
6
));
Assert
.
assertEquals
(
0
,
rs
.
getShort
(
"f5"
));
Assert
.
assertEquals
(
0
,
rs
.
getByte
(
7
));
Assert
.
assertEquals
(
0
,
rs
.
getByte
(
"f6"
));
Assert
.
assertFalse
(
rs
.
getBoolean
(
8
));
Assert
.
assertFalse
(
rs
.
getBoolean
(
"f7"
));
Assert
.
assertNull
(
rs
.
getBytes
(
9
));
Assert
.
assertNull
(
rs
.
getBytes
(
"f8"
));
Assert
.
assertNull
(
rs
.
getString
(
10
));
Assert
.
assertNull
(
rs
.
getString
(
"f9"
));
}
@Test
public
void
setNullForInteger
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
3
,
Types
.
BIGINT
);
result
=
pstmt_insert
.
executeUpdate
();
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
@Test
public
void
setNullForFloat
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
4
,
Types
.
FLOAT
);
result
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
result
);
int
result
=
pstmt_insert
.
executeUpdate
();
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setNull
(
5
,
Types
.
DOUBLE
);
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setNull
(
6
,
Types
.
SMALLINT
);
result
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
result
);
@Test
public
void
setNullForDouble
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
(
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
set
Null
(
7
,
Types
.
TINYINT
);
result
=
pstmt_insert
.
executeUpdate
(
);
Assert
.
assertEquals
(
1
,
result
);
// when
pstmt_insert
.
set
Timestamp
(
1
,
new
Timestamp
(
ts
)
);
pstmt_insert
.
setNull
(
5
,
Types
.
DOUBLE
);
int
result
=
pstmt_insert
.
executeUpdate
(
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setNull
(
8
,
Types
.
BOOLEAN
);
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setNull
(
9
,
Types
.
BINARY
);
result
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
result
);
@Test
public
void
setNullForSmallInt
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
(
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
set
Null
(
10
,
Types
.
NCHAR
);
result
=
pstmt_insert
.
executeUpdate
(
);
Assert
.
assertEquals
(
1
,
result
);
// when
pstmt_insert
.
set
Timestamp
(
1
,
new
Timestamp
(
ts
)
);
pstmt_insert
.
setNull
(
6
,
Types
.
SMALLINT
);
int
result
=
pstmt_insert
.
executeUpdate
(
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setNull
(
10
,
Types
.
OTHER
);
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
@Test
public
void
executeTest
()
throws
SQLException
{
Statement
stmt
=
conn
.
createStatement
();
int
numOfRows
=
1000
;
for
(
int
loop
=
0
;
loop
<
10
;
loop
++){
stmt
.
execute
(
"drop table if exists weather_test"
);
stmt
.
execute
(
"create table weather_test(ts timestamp, f1 nchar(4), f2 float, f3 double, f4 timestamp, f5 int, f6 bool, f7 binary(10))"
);
TSDBPreparedStatement
s
=
(
TSDBPreparedStatement
)
conn
.
prepareStatement
(
"insert into ? values(?, ?, ?, ?, ?, ?, ?, ?)"
);
Random
r
=
new
Random
();
s
.
setTableName
(
"weather_test"
);
ArrayList
<
Long
>
ts
=
new
ArrayList
<
Long
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
ts
.
add
(
System
.
currentTimeMillis
()
+
i
);
}
s
.
setTimestamp
(
0
,
ts
);
int
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s2
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s2
.
add
(
null
);
}
else
{
s2
.
add
(
"分支"
+
i
%
4
);
}
}
s
.
setNString
(
1
,
s2
,
4
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
Float
>
s3
=
new
ArrayList
<
Float
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s3
.
add
(
null
);
}
else
{
s3
.
add
(
r
.
nextFloat
());
}
}
s
.
setFloat
(
2
,
s3
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
Double
>
s4
=
new
ArrayList
<
Double
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s4
.
add
(
null
);
}
else
{
s4
.
add
(
r
.
nextDouble
());
}
}
s
.
setDouble
(
3
,
s4
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
Long
>
ts2
=
new
ArrayList
<
Long
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
ts2
.
add
(
null
);
}
else
{
ts2
.
add
(
System
.
currentTimeMillis
()
+
i
);
}
}
s
.
setTimestamp
(
4
,
ts2
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
Integer
>
vals
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
vals
.
add
(
null
);
}
else
{
vals
.
add
(
r
.
nextInt
());
}
}
s
.
setInt
(
5
,
vals
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
Boolean
>
sb
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
sb
.
add
(
null
);
}
else
{
sb
.
add
(
i
%
2
==
0
?
true
:
false
);
}
}
s
.
setBoolean
(
6
,
sb
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s5
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s5
.
add
(
null
);
}
else
{
s5
.
add
(
"test"
+
i
%
10
);
}
}
s
.
setString
(
7
,
s5
,
10
);
s
.
columnDataAddBatch
();
s
.
columnDataExecuteBatch
();
s
.
columnDataCloseBatch
();
String
sql
=
"select * from weather_test"
;
PreparedStatement
statement
=
conn
.
prepareStatement
(
sql
);
ResultSet
rs
=
statement
.
executeQuery
();
int
rows
=
0
;
while
(
rs
.
next
())
{
rows
++;
}
Assert
.
assertEquals
(
numOfRows
,
rows
);
public
void
setNullForTinyInt
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
7
,
Types
.
TINYINT
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
@Test
public
void
bindDataSelectColumnTest
()
throws
SQLException
{
Statement
stmt
=
conn
.
createStatement
();
int
numOfRows
=
1000
;
for
(
int
loop
=
0
;
loop
<
10
;
loop
++){
stmt
.
execute
(
"drop table if exists weather_test"
);
stmt
.
execute
(
"create table weather_test(ts timestamp, f1 nchar(4), f2 float, f3 double, f4 timestamp, f5 int, f6 bool, f7 binary(10))"
);
TSDBPreparedStatement
s
=
(
TSDBPreparedStatement
)
conn
.
prepareStatement
(
"insert into ? (ts, f1, f7) values(?, ?, ?)"
);
Random
r
=
new
Random
();
s
.
setTableName
(
"weather_test"
);
ArrayList
<
Long
>
ts
=
new
ArrayList
<
Long
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
ts
.
add
(
System
.
currentTimeMillis
()
+
i
);
}
s
.
setTimestamp
(
0
,
ts
);
int
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s2
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s2
.
add
(
null
);
}
else
{
s2
.
add
(
"分支"
+
i
%
4
);
}
}
s
.
setNString
(
1
,
s2
,
4
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s3
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
if
(
i
%
random
==
0
)
{
s3
.
add
(
null
);
}
else
{
s3
.
add
(
"test"
+
i
%
10
);
}
}
s
.
setString
(
2
,
s3
,
10
);
s
.
columnDataAddBatch
();
s
.
columnDataExecuteBatch
();
s
.
columnDataCloseBatch
();
String
sql
=
"select * from weather_test"
;
PreparedStatement
statement
=
conn
.
prepareStatement
(
sql
);
ResultSet
rs
=
statement
.
executeQuery
();
int
rows
=
0
;
while
(
rs
.
next
())
{
rows
++;
}
Assert
.
assertEquals
(
numOfRows
,
rows
);
public
void
setNullForBoolean
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
8
,
Types
.
BOOLEAN
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
@Test
public
void
bindDataWithSingleTagTest
()
throws
SQLException
{
Statement
stmt
=
conn
.
createStatement
();
public
void
setNullForBinary
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
String
types
[]
=
new
String
[]
{
"tinyint"
,
"smallint"
,
"int"
,
"bigint"
,
"bool"
,
"float"
,
"double"
,
"binary(10)"
,
"nchar(10)"
};
for
(
String
type
:
types
)
{
stmt
.
execute
(
"drop table if exists weather_test"
);
stmt
.
execute
(
"create table weather_test(ts timestamp, f1 nchar(10), f2 binary(10)) tags (t "
+
type
+
")"
);
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
9
,
Types
.
BINARY
);
int
result
=
pstmt_insert
.
executeUpdate
();
int
numOfRows
=
1
;
TSDBPreparedStatement
s
=
(
TSDBPreparedStatement
)
conn
.
prepareStatement
(
"insert into ? using weather_test tags(?) values(?, ?, ?)"
);
Random
r
=
new
Random
();
s
.
setTableName
(
"w1"
);
switch
(
type
)
{
case
"tinyint"
:
case
"smallint"
:
case
"int"
:
case
"bigint"
:
s
.
setTagInt
(
0
,
1
);
break
;
case
"float"
:
s
.
setTagFloat
(
0
,
1.23f
);
break
;
case
"double"
:
s
.
setTagDouble
(
0
,
3.14159265
);
break
;
case
"bool"
:
s
.
setTagBoolean
(
0
,
true
);
break
;
case
"binary(10)"
:
s
.
setTagString
(
0
,
"test"
);
break
;
case
"nchar(10)"
:
s
.
setTagNString
(
0
,
"test"
);
break
;
default
:
break
;
}
ArrayList
<
Long
>
ts
=
new
ArrayList
<
Long
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
ts
.
add
(
System
.
currentTimeMillis
()
+
i
);
}
s
.
setTimestamp
(
0
,
ts
);
int
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s2
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
s2
.
add
(
"分支"
+
i
%
4
);
}
s
.
setNString
(
1
,
s2
,
10
);
random
=
10
+
r
.
nextInt
(
5
);
ArrayList
<
String
>
s3
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
s3
.
add
(
"test"
+
i
%
4
);
}
s
.
setString
(
2
,
s3
,
10
);
s
.
columnDataAddBatch
();
s
.
columnDataExecuteBatch
();
s
.
columnDataCloseBatch
();
String
sql
=
"select * from weather_test"
;
PreparedStatement
statement
=
conn
.
prepareStatement
(
sql
);
ResultSet
rs
=
statement
.
executeQuery
();
int
rows
=
0
;
while
(
rs
.
next
())
{
rows
++;
}
Assert
.
assertEquals
(
numOfRows
,
rows
);
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
}
@Test
public
void
bindDataWithMultipleTagsTest
()
throws
SQLException
{
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop table if exists weather_test"
);
stmt
.
execute
(
"create table weather_test(ts timestamp, f1 nchar(10), f2 binary(10)) tags (t1 int, t2 binary(10))"
);
int
numOfRows
=
1
;
TSDBPreparedStatement
s
=
(
TSDBPreparedStatement
)
conn
.
prepareStatement
(
"insert into ? using weather_test tags(?,?) (ts, f2) values(?, ?)"
);
s
.
setTableName
(
"w2"
);
s
.
setTagInt
(
0
,
1
);
s
.
setTagString
(
1
,
"test"
);
ArrayList
<
Long
>
ts
=
new
ArrayList
<
Long
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
ts
.
add
(
System
.
currentTimeMillis
()
+
i
);
}
s
.
setTimestamp
(
0
,
ts
);
ArrayList
<
String
>
s2
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
numOfRows
;
i
++)
{
s2
.
add
(
"test"
+
i
%
4
);
public
void
setNullForNchar
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setNull
(
10
,
Types
.
NCHAR
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
assertAllNullExceptTimestamp
(
rs
,
ts
);
}
s
.
setString
(
1
,
s2
,
10
);
}
s
.
columnDataAddBatch
();
s
.
columnDataExecuteBatch
();
s
.
columnDataCloseBatch
();
String
sql
=
"select * from weather_test"
;
PreparedStatement
statement
=
conn
.
prepareStatement
(
sql
);
ResultSet
rs
=
statement
.
executeQuery
();
int
rows
=
0
;
while
(
rs
.
next
())
{
rows
++;
}
Assert
.
assertEquals
(
numOfRows
,
rows
);
@Test
public
void
createTwoSameDbTest
()
throws
SQLException
{
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"create database dbtest"
);
Assert
.
assertThrows
(
SQLException
.
class
,
()
->
stmt
.
execute
(
"create database dbtest"
));
}
@Test
public
void
setBoolean
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setBoolean
(
8
,
true
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertTrue
(
rs
.
getBoolean
(
8
));
Assert
.
assertTrue
(
rs
.
getBoolean
(
"f7"
));
}
}
}
@Test
public
void
setByte
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setByte
(
7
,
(
byte
)
0x001
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
((
byte
)
0x001
,
rs
.
getByte
(
7
));
Assert
.
assertEquals
((
byte
)
0x001
,
rs
.
getByte
(
"f6"
));
}
}
}
@Test
public
void
setShort
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setShort
(
6
,
(
short
)
2
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
((
short
)
2
,
rs
.
getByte
(
6
));
Assert
.
assertEquals
((
short
)
2
,
rs
.
getByte
(
"f5"
));
}
}
}
@Test
public
void
setInt
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setInt
(
2
,
10086
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
10086
,
rs
.
getInt
(
2
));
Assert
.
assertEquals
(
10086
,
rs
.
getInt
(
"f1"
));
}
}
}
@Test
public
void
setLong
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setLong
(
3
,
Long
.
MAX_VALUE
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
Long
.
MAX_VALUE
,
rs
.
getLong
(
3
));
Assert
.
assertEquals
(
Long
.
MAX_VALUE
,
rs
.
getLong
(
"f2"
));
}
}
}
@Test
public
void
setFloat
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setFloat
(
4
,
3.14f
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
3.14f
,
rs
.
getFloat
(
4
),
0.0f
);
Assert
.
assertEquals
(
3.14f
,
rs
.
getFloat
(
"f3"
),
0.0f
);
}
}
}
@Test
public
void
setDouble
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setDouble
(
5
,
3.14444
);
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
}
int
result
=
pstmt_insert
.
executeUpdate
();
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
public
void
setBigDecimal
()
throws
SQLException
{
pstmt_insert
.
setBigDecimal
(
1
,
null
);
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
3.14444
,
rs
.
getDouble
(
5
),
0.0
);
Assert
.
assertEquals
(
3.14444
,
rs
.
getDouble
(
"f4"
),
0.0
);
}
}
}
@Test
public
void
setString
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setString
(
10
,
"aaaa"
);
boolean
execute
=
pstmt_insert
.
execute
();
Assert
.
assertFalse
(
execute
);
public
void
setBigDecimal
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
BigDecimal
bigDecimal
=
new
BigDecimal
(
3.14444
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setString
(
10
,
new
Person
(
"john"
,
33
,
true
).
toString
());
Assert
.
assertFalse
(
pstmt_insert
.
execute
());
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setBigDecimal
(
5
,
bigDecimal
);
int
result
=
pstmt_insert
.
executeUpdate
();
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setString
(
10
,
new
Person
(
"john"
,
33
,
true
).
toString
().
replaceAll
(
"'"
,
"\""
));
Assert
.
assertFalse
(
pstmt_insert
.
execute
());
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
3.14444
,
rs
.
getDouble
(
5
),
0.0
);
Assert
.
assertEquals
(
3.14444
,
rs
.
getDouble
(
"f4"
),
0.0
);
}
}
}
class
Person
{
String
name
;
int
age
;
boolean
sex
;
@Test
public
void
setString
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
String
f9
=
"{\"name\": \"john\", \"age\": 10, \"address\": \"192.168.1.100\"}"
;
public
Person
(
String
name
,
int
age
,
boolean
sex
)
{
this
.
name
=
name
;
this
.
age
=
age
;
this
.
sex
=
sex
;
}
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setString
(
10
,
f9
);
int
result
=
pstmt_insert
.
executeUpdate
();
@Override
public
String
toString
()
{
return
"Person{"
+
"name='"
+
name
+
'\''
+
", age="
+
age
+
", sex="
+
sex
+
'}'
;
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertEquals
(
f9
,
rs
.
getString
(
10
));
Assert
.
assertEquals
(
f9
,
rs
.
getString
(
"f9"
));
}
}
}
@Test
public
void
setBytes
()
throws
SQLException
,
IOException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
byte
[]
f8
=
"{\"name\": \"john\", \"age\": 10, \"address\": \"192.168.1.100\"}"
.
getBytes
();
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
// ObjectOutputStream oos = new ObjectOutputStream(baos);
// oos.writeObject(new Person("john", 33, true));
// oos.flush();
// byte[] bytes = baos.toByteArray();
// pstmt_insert.setBytes(9, bytes);
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setBytes
(
9
,
f8
);
int
result
=
pstmt_insert
.
executeUpdate
();
pstmt_insert
.
setBytes
(
9
,
new
Person
(
"john"
,
33
,
true
).
toString
().
getBytes
());
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
Assert
.
assertArrayEquals
(
f8
,
rs
.
getBytes
(
9
));
Assert
.
assertArrayEquals
(
f8
,
rs
.
getBytes
(
"f8"
));
}
}
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
@Test
public
void
setDate
()
throws
SQLException
{
pstmt_insert
.
setDate
(
1
,
new
Date
(
System
.
currentTimeMillis
()));
// given
long
ts
=
new
java
.
util
.
Date
().
getTime
();
// when
pstmt_insert
.
setDate
(
1
,
new
Date
(
ts
));
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
}
}
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
@Test
public
void
setTime
()
throws
SQLException
{
pstmt_insert
.
setTime
(
1
,
new
Time
(
System
.
currentTimeMillis
()));
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTime
(
1
,
new
Time
(
ts
));
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
}
}
}
@Test
public
void
setTimestamp
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
int
result
=
pstmt_insert
.
executeUpdate
();
// then
Assert
.
assertEquals
(
1
,
result
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
ResultSet
rs
=
stmt
.
executeQuery
(
"select * from t1"
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
assertMetaData
(
meta
);
rs
.
next
();
{
Assert
.
assertNotNull
(
rs
);
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
1
).
getTime
());
Assert
.
assertEquals
(
ts
,
rs
.
getTimestamp
(
"ts"
).
getTime
());
}
}
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
...
...
@@ -530,72 +659,6 @@ public class TSDBPreparedStatementTest {
pstmt_insert
.
setBinaryStream
(
1
,
null
);
}
@Test
public
void
clearParameters
()
throws
SQLException
{
pstmt_insert
.
clearParameters
();
}
@Test
public
void
setObject
()
throws
SQLException
{
pstmt_insert
.
setObject
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
2
,
111
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
3
,
Long
.
MAX_VALUE
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
4
,
3.14159265354f
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
5
,
Double
.
MAX_VALUE
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
6
,
Short
.
MAX_VALUE
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
7
,
Byte
.
MAX_VALUE
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
8
,
true
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
9
,
"hello"
.
getBytes
());
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
pstmt_insert
.
setObject
(
10
,
"Hello"
);
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
}
@Test
public
void
execute
()
throws
SQLException
{
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
System
.
currentTimeMillis
()));
int
ret
=
pstmt_insert
.
executeUpdate
();
Assert
.
assertEquals
(
1
,
ret
);
executeQuery
();
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
public
void
setCharacterStream
()
throws
SQLException
{
pstmt_insert
.
setCharacterStream
(
1
,
null
);
...
...
@@ -621,9 +684,17 @@ public class TSDBPreparedStatementTest {
pstmt_insert
.
setArray
(
1
,
null
);
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
@Test
public
void
getMetaData
()
throws
SQLException
{
pstmt_insert
.
getMetaData
();
// given
long
ts
=
System
.
currentTimeMillis
();
// when
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
ResultSetMetaData
metaData
=
pstmt_insert
.
getMetaData
();
// then
Assert
.
assertNull
(
metaData
);
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
...
...
@@ -633,9 +704,46 @@ public class TSDBPreparedStatementTest {
@Test
public
void
getParameterMetaData
()
throws
SQLException
{
// given
long
ts
=
System
.
currentTimeMillis
();
pstmt_insert
.
setTimestamp
(
1
,
new
Timestamp
(
ts
));
pstmt_insert
.
setInt
(
2
,
2
);
pstmt_insert
.
setLong
(
3
,
3
l
);
pstmt_insert
.
setFloat
(
4
,
3.14f
);
pstmt_insert
.
setDouble
(
5
,
3.1415
);
pstmt_insert
.
setShort
(
6
,
(
short
)
6
);
pstmt_insert
.
setByte
(
7
,
(
byte
)
7
);
pstmt_insert
.
setBoolean
(
8
,
true
);
pstmt_insert
.
setBytes
(
9
,
"abc"
.
getBytes
());
pstmt_insert
.
setString
(
10
,
"涛思数据"
);
// when
ParameterMetaData
parameterMetaData
=
pstmt_insert
.
getParameterMetaData
();
// then
Assert
.
assertNotNull
(
parameterMetaData
);
//TODO: modify the test case
Assert
.
assertEquals
(
10
,
parameterMetaData
.
getParameterCount
());
Assert
.
assertEquals
(
Types
.
TIMESTAMP
,
parameterMetaData
.
getParameterType
(
1
));
Assert
.
assertEquals
(
Types
.
INTEGER
,
parameterMetaData
.
getParameterType
(
2
));
Assert
.
assertEquals
(
Types
.
BIGINT
,
parameterMetaData
.
getParameterType
(
3
));
Assert
.
assertEquals
(
Types
.
FLOAT
,
parameterMetaData
.
getParameterType
(
4
));
Assert
.
assertEquals
(
Types
.
DOUBLE
,
parameterMetaData
.
getParameterType
(
5
));
Assert
.
assertEquals
(
Types
.
SMALLINT
,
parameterMetaData
.
getParameterType
(
6
));
Assert
.
assertEquals
(
Types
.
TINYINT
,
parameterMetaData
.
getParameterType
(
7
));
Assert
.
assertEquals
(
Types
.
BOOLEAN
,
parameterMetaData
.
getParameterType
(
8
));
Assert
.
assertEquals
(
Types
.
BINARY
,
parameterMetaData
.
getParameterType
(
9
));
Assert
.
assertEquals
(
Types
.
NCHAR
,
parameterMetaData
.
getParameterType
(
10
));
Assert
.
assertEquals
(
"TIMESTAMP"
,
parameterMetaData
.
getParameterTypeName
(
1
));
Assert
.
assertEquals
(
"INT"
,
parameterMetaData
.
getParameterTypeName
(
2
));
Assert
.
assertEquals
(
"BIGINT"
,
parameterMetaData
.
getParameterTypeName
(
3
));
Assert
.
assertEquals
(
"FLOAT"
,
parameterMetaData
.
getParameterTypeName
(
4
));
Assert
.
assertEquals
(
"DOUBLE"
,
parameterMetaData
.
getParameterTypeName
(
5
));
Assert
.
assertEquals
(
"SMALLINT"
,
parameterMetaData
.
getParameterTypeName
(
6
));
Assert
.
assertEquals
(
"TINYINT"
,
parameterMetaData
.
getParameterTypeName
(
7
));
Assert
.
assertEquals
(
"BOOL"
,
parameterMetaData
.
getParameterTypeName
(
8
));
Assert
.
assertEquals
(
"BINARY"
,
parameterMetaData
.
getParameterTypeName
(
9
));
Assert
.
assertEquals
(
"NCHAR"
,
parameterMetaData
.
getParameterTypeName
(
10
));
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
...
...
@@ -643,9 +751,9 @@ public class TSDBPreparedStatementTest {
pstmt_insert
.
setRowId
(
1
,
null
);
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
@Test
public
void
setNString
()
throws
SQLException
{
pstmt_insert
.
setNString
(
1
,
null
);
setString
(
);
}
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
...
...
@@ -663,22 +771,45 @@ public class TSDBPreparedStatementTest {
pstmt_insert
.
setSQLXML
(
1
,
null
);
}
@Before
public
void
before
()
{
try
{
Statement
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"drop table if exists weather"
);
stmt
.
execute
(
"create table if not exists weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))"
);
stmt
.
execute
(
"create table if not exists t1 using weather tags('beijing')"
);
stmt
.
close
();
pstmt_insert
=
conn
.
prepareStatement
(
sql_insert
);
pstmt_select
=
conn
.
prepareStatement
(
sql_select
);
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@After
public
void
after
()
{
try
{
if
(
pstmt_insert
!=
null
)
pstmt_insert
.
close
();
if
(
pstmt_select
!=
null
)
pstmt_select
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@BeforeClass
public
static
void
beforeClass
()
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
);
try
(
Statement
stmt
=
conn
.
createStatement
())
{
stmt
.
execute
(
"drop database if exists test_pstmt_jni"
);
stmt
.
execute
(
"create database if not exists test_pstmt_jni"
);
stmt
.
execute
(
"use test_pstmt_jni"
);
stmt
.
execute
(
"create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64)) tags(loc nchar(64))"
);
stmt
.
execute
(
"create table t1 using weather tags('beijing')"
);
}
pstmt_insert
=
conn
.
prepareStatement
(
sql_insert
);
pstmt_select
=
conn
.
prepareStatement
(
sql_select
);
}
catch
(
ClassNotFoundException
|
SQLException
e
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
...
...
@@ -686,10 +817,6 @@ public class TSDBPreparedStatementTest {
@AfterClass
public
static
void
afterClass
()
{
try
{
if
(
pstmt_insert
!=
null
)
pstmt_insert
.
close
();
if
(
pstmt_select
!=
null
)
pstmt_select
.
close
();
if
(
conn
!=
null
)
conn
.
close
();
}
catch
(
SQLException
e
)
{
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBResultSetTest.java
浏览文件 @
80e64a5a
...
...
@@ -14,6 +14,7 @@ import java.math.BigDecimal;
import
java.sql.*
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Arrays
;
public
class
TSDBResultSetTest
{
...
...
@@ -133,7 +134,7 @@ public class TSDBResultSetTest {
Assert
.
assertEquals
(
3.1415926
,
Double
.
valueOf
(
new
String
(
f5
)),
0.000000f
);
byte
[]
f6
=
rs
.
getBytes
(
"f6"
);
Assert
.
assert
Equals
(
"abc"
,
new
String
(
f6
));
Assert
.
assert
True
(
Arrays
.
equals
(
"abc"
.
getBytes
(),
f6
));
byte
[]
f7
=
rs
.
getBytes
(
"f7"
);
Assert
.
assertEquals
((
short
)
10
,
Shorts
.
fromByteArray
(
f7
));
...
...
@@ -176,8 +177,7 @@ public class TSDBResultSetTest {
rs
.
getAsciiStream
(
"f1"
);
}
@SuppressWarnings
(
"deprecation"
)
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
@Test
(
expected
=
SQLFeatureNotSupportedException
.
class
)
public
void
getUnicodeStream
()
throws
SQLException
{
rs
.
getUnicodeStream
(
"f1"
);
}
...
...
@@ -646,7 +646,6 @@ public class TSDBResultSetTest {
@BeforeClass
public
static
void
beforeClass
()
{
try
{
Class
.
forName
(
"com.taosdata.jdbc.TSDBDriver"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
);
stmt
=
conn
.
createStatement
();
stmt
.
execute
(
"create database if not exists restful_test"
);
...
...
@@ -656,10 +655,9 @@ public class TSDBResultSetTest {
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
)
{
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
@AfterClass
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBStatementTest.java
浏览文件 @
80e64a5a
...
...
@@ -387,15 +387,12 @@ public class TSDBStatementTest {
@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"
);
conn
=
DriverManager
.
getConnection
(
"jdbc:TAOS://"
+
host
+
":6030/?user=root&password=taosdata"
,
properties
);
stmt
=
conn
.
createStatement
();
}
catch
(
ClassNotFoundException
e
)
{
e
.
printStackTrace
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaDataTest.java
浏览文件 @
80e64a5a
...
...
@@ -10,6 +10,7 @@ import java.sql.*;
import
java.util.Properties
;
public
class
RestfulDatabaseMetaDataTest
{
private
static
final
String
host
=
"127.0.0.1"
;
private
static
final
String
url
=
"jdbc:TAOS-RS://"
+
host
+
":6041/?user=root&password=taosdata"
;
private
static
Connection
connection
;
...
...
@@ -632,17 +633,32 @@ public class RestfulDatabaseMetaDataTest {
@Test
public
void
getTables
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
tables
=
metaData
.
getTables
(
"log"
,
""
,
null
,
null
);
ResultSetMetaData
metaData
=
tables
.
getMetaData
();
while
(
tables
.
next
())
{
System
.
out
.
print
(
metaData
.
getColumnLabel
(
1
)
+
":"
+
tables
.
getString
(
1
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
3
)
+
":"
+
tables
.
getString
(
3
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
4
)
+
":"
+
tables
.
getString
(
4
)
+
"\t"
);
System
.
out
.
print
(
metaData
.
getColumnLabel
(
5
)
+
":"
+
tables
.
getString
(
5
)
+
"\n"
);
ResultSet
rs
=
metaData
.
getTables
(
"log"
,
""
,
null
,
null
);
ResultSetMetaData
meta
=
rs
.
getMetaData
();
Assert
.
assertNotNull
(
rs
);
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_SCHEM
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertNotNull
(
rs
.
getString
(
3
));
Assert
.
assertNotNull
(
rs
.
getString
(
"TABLE_NAME"
));
// TABLE_TYPE
Assert
.
assertEquals
(
"TABLE_TYPE"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"TABLE"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"TABLE"
,
rs
.
getString
(
"TABLE_TYPE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
""
,
rs
.
getString
(
5
));
Assert
.
assertEquals
(
""
,
rs
.
getString
(
"REMARKS"
));
}
System
.
out
.
println
();
Assert
.
assertNotNull
(
tables
);
}
@Test
...
...
@@ -652,46 +668,130 @@ public class RestfulDatabaseMetaDataTest {
@Test
public
void
getCatalogs
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
catalogs
=
metaData
.
getCatalogs
();
ResultSetMetaData
meta
=
catalogs
.
getMetaData
();
while
(
catalogs
.
next
())
{
for
(
int
i
=
1
;
i
<=
meta
.
getColumnCount
();
i
++)
{
System
.
out
.
print
(
meta
.
getColumnLabel
(
i
)
+
": "
+
catalogs
.
getString
(
i
));
}
System
.
out
.
println
();
ResultSet
rs
=
metaData
.
getCatalogs
();
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertNotNull
(
rs
.
getString
(
1
));
Assert
.
assertNotNull
(
rs
.
getString
(
"TABLE_CAT"
));
}
}
@Test
public
void
getTableTypes
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
tableTypes
=
metaData
.
getTableTypes
();
while
(
tableTypes
.
next
())
{
System
.
out
.
println
(
tableTypes
.
getString
(
"TABLE_TYPE"
));
tableTypes
.
next
();
// tableTypes: table
{
Assert
.
assertEquals
(
"TABLE"
,
tableTypes
.
getString
(
1
));
Assert
.
assertEquals
(
"TABLE"
,
tableTypes
.
getString
(
"TABLE_TYPE"
));
}
tableTypes
.
next
();
// tableTypes: stable
{
Assert
.
assertEquals
(
"STABLE"
,
tableTypes
.
getString
(
1
));
Assert
.
assertEquals
(
"STABLE"
,
tableTypes
.
getString
(
"TABLE_TYPE"
));
}
Assert
.
assertNotNull
(
metaData
.
getTableTypes
());
}
@Test
public
void
getColumns
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
// when
ResultSet
columns
=
metaData
.
getColumns
(
"log"
,
""
,
"dn"
,
""
);
// then
ResultSetMetaData
meta
=
columns
.
getMetaData
();
while
(
columns
.
next
())
{
System
.
out
.
print
(
meta
.
getColumnLabel
(
1
)
+
": "
+
columns
.
getString
(
1
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
3
)
+
": "
+
columns
.
getString
(
3
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
4
)
+
": "
+
columns
.
getString
(
4
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
5
)
+
": "
+
columns
.
getString
(
5
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
6
)
+
": "
+
columns
.
getString
(
6
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
7
)
+
": "
+
columns
.
getString
(
7
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
9
)
+
": "
+
columns
.
getString
(
9
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
10
)
+
": "
+
columns
.
getString
(
10
)
+
"\t"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
11
)
+
": "
+
columns
.
getString
(
11
)
+
"\n"
);
System
.
out
.
print
(
meta
.
getColumnLabel
(
12
)
+
": "
+
columns
.
getString
(
12
)
+
"\n"
);
columns
.
next
();
// column: 1
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
"TABLE_CAT"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"ts"
,
columns
.
getString
(
4
));
Assert
.
assertEquals
(
"ts"
,
columns
.
getString
(
"COLUMN_NAME"
));
// DATA_TYPE
Assert
.
assertEquals
(
"DATA_TYPE"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
Types
.
TIMESTAMP
,
columns
.
getInt
(
5
));
Assert
.
assertEquals
(
Types
.
TIMESTAMP
,
columns
.
getInt
(
"DATA_TYPE"
));
// TYPE_NAME
Assert
.
assertEquals
(
"TYPE_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"TIMESTAMP"
,
columns
.
getString
(
6
));
Assert
.
assertEquals
(
"TIMESTAMP"
,
columns
.
getString
(
"TYPE_NAME"
));
// COLUMN_SIZE
Assert
.
assertEquals
(
"COLUMN_SIZE"
,
meta
.
getColumnLabel
(
7
));
Assert
.
assertEquals
(
26
,
columns
.
getInt
(
7
));
Assert
.
assertEquals
(
26
,
columns
.
getInt
(
"COLUMN_SIZE"
));
// DECIMAL_DIGITS
Assert
.
assertEquals
(
"DECIMAL_DIGITS"
,
meta
.
getColumnLabel
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
"DECIMAL_DIGITS"
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
9
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"DECIMAL_DIGITS"
));
// NUM_PREC_RADIX
Assert
.
assertEquals
(
"NUM_PREC_RADIX"
,
meta
.
getColumnLabel
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
"NUM_PREC_RADIX"
));
// NULLABLE
Assert
.
assertEquals
(
"NULLABLE"
,
meta
.
getColumnLabel
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNoNulls
,
columns
.
getInt
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNoNulls
,
columns
.
getInt
(
"NULLABLE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"REMARKS"
));
}
columns
.
next
();
// column: 2
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
columns
.
getString
(
"TABLE_CAT"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
3
));
Assert
.
assertEquals
(
"dn"
,
columns
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"cpu_taosd"
,
columns
.
getString
(
4
));
Assert
.
assertEquals
(
"cpu_taosd"
,
columns
.
getString
(
"COLUMN_NAME"
));
// DATA_TYPE
Assert
.
assertEquals
(
"DATA_TYPE"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
Types
.
FLOAT
,
columns
.
getInt
(
5
));
Assert
.
assertEquals
(
Types
.
FLOAT
,
columns
.
getInt
(
"DATA_TYPE"
));
// TYPE_NAME
Assert
.
assertEquals
(
"TYPE_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"FLOAT"
,
columns
.
getString
(
6
));
Assert
.
assertEquals
(
"FLOAT"
,
columns
.
getString
(
"TYPE_NAME"
));
// COLUMN_SIZE
Assert
.
assertEquals
(
"COLUMN_SIZE"
,
meta
.
getColumnLabel
(
7
));
Assert
.
assertEquals
(
12
,
columns
.
getInt
(
7
));
Assert
.
assertEquals
(
12
,
columns
.
getInt
(
"COLUMN_SIZE"
));
// DECIMAL_DIGITS
Assert
.
assertEquals
(
"DECIMAL_DIGITS"
,
meta
.
getColumnLabel
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
9
));
Assert
.
assertEquals
(
Integer
.
MIN_VALUE
,
columns
.
getInt
(
"DECIMAL_DIGITS"
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
9
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
"DECIMAL_DIGITS"
));
// NUM_PREC_RADIX
Assert
.
assertEquals
(
"NUM_PREC_RADIX"
,
meta
.
getColumnLabel
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
10
));
Assert
.
assertEquals
(
10
,
columns
.
getInt
(
"NUM_PREC_RADIX"
));
// NULLABLE
Assert
.
assertEquals
(
"NULLABLE"
,
meta
.
getColumnLabel
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNullable
,
columns
.
getInt
(
11
));
Assert
.
assertEquals
(
DatabaseMetaData
.
columnNullable
,
columns
.
getInt
(
"NULLABLE"
));
// REMARKS
Assert
.
assertEquals
(
"REMARKS"
,
meta
.
getColumnLabel
(
12
));
Assert
.
assertEquals
(
null
,
columns
.
getString
(
12
));
}
}
...
...
@@ -717,17 +817,35 @@ public class RestfulDatabaseMetaDataTest {
@Test
public
void
getPrimaryKeys
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
rs
=
metaData
.
getPrimaryKeys
(
"log"
,
""
,
"dn1"
);
while
(
rs
.
next
())
{
System
.
out
.
println
(
"TABLE_NAME: "
+
rs
.
getString
(
"TABLE_NAME"
));
System
.
out
.
println
(
"COLUMN_NAME: "
+
rs
.
getString
(
"COLUMN_NAME"
));
System
.
out
.
println
(
"KEY_SEQ: "
+
rs
.
getString
(
"KEY_SEQ"
));
System
.
out
.
println
(
"PK_NAME: "
+
rs
.
getString
(
"PK_NAME"
));
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_SCHEM
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_NAME
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
"TABLE_NAME"
));
// COLUMN_NAME
Assert
.
assertEquals
(
"COLUMN_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
"COLUMN_NAME"
));
// KEY_SEQ
Assert
.
assertEquals
(
"KEY_SEQ"
,
meta
.
getColumnLabel
(
5
));
Assert
.
assertEquals
(
1
,
rs
.
getShort
(
5
));
Assert
.
assertEquals
(
1
,
rs
.
getShort
(
"KEY_SEQ"
));
// DATA_TYPE
Assert
.
assertEquals
(
"PK_NAME"
,
meta
.
getColumnLabel
(
6
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
6
));
Assert
.
assertEquals
(
"ts"
,
rs
.
getString
(
"PK_NAME"
));
}
Assert
.
assertNotNull
(
rs
);
}
@Test
...
...
@@ -852,14 +970,27 @@ public class RestfulDatabaseMetaDataTest {
@Test
public
void
getSuperTables
()
throws
SQLException
{
System
.
out
.
println
(
"****************************************************"
);
ResultSet
rs
=
metaData
.
getSuperTables
(
"log"
,
""
,
"dn1"
);
while
(
rs
.
next
())
{
System
.
out
.
println
(
"TABLE_NAME: "
+
rs
.
getString
(
"TABLE_NAME"
));
System
.
out
.
println
(
"SUPERTABLE_NAME: "
+
rs
.
getString
(
"SUPERTABLE_NAME"
));
ResultSetMetaData
meta
=
rs
.
getMetaData
();
rs
.
next
();
{
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_CAT"
,
meta
.
getColumnLabel
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
1
));
Assert
.
assertEquals
(
"log"
,
rs
.
getString
(
"TABLE_CAT"
));
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_SCHEM"
,
meta
.
getColumnLabel
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
2
));
Assert
.
assertEquals
(
null
,
rs
.
getString
(
"TABLE_SCHEM"
));
// TABLE_CAT
Assert
.
assertEquals
(
"TABLE_NAME"
,
meta
.
getColumnLabel
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
3
));
Assert
.
assertEquals
(
"dn1"
,
rs
.
getString
(
"TABLE_NAME"
));
// TABLE_CAT
Assert
.
assertEquals
(
"SUPERTABLE_NAME"
,
meta
.
getColumnLabel
(
4
));
Assert
.
assertEquals
(
"dn"
,
rs
.
getString
(
4
));
Assert
.
assertEquals
(
"dn"
,
rs
.
getString
(
"SUPERTABLE_NAME"
));
}
Assert
.
assertNotNull
(
rs
);
}
@Test
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulParameterMetaDataTest.java
浏览文件 @
80e64a5a
...
...
@@ -54,16 +54,17 @@ public class RestfulParameterMetaDataTest {
@Test
public
void
getPrecision
()
throws
SQLException
{
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
1
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
2
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
3
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
4
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
5
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
6
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
7
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getPrecision
(
8
));
Assert
.
assertEquals
(
5
,
parameterMetaData_insert
.
getPrecision
(
9
));
Assert
.
assertEquals
(
5
,
parameterMetaData_insert
.
getPrecision
(
10
));
//create table weather(ts timestamp, f1 int, f2 bigint, f3 float, f4 double, f5 smallint, f6 tinyint, f7 bool, f8 binary(64), f9 nchar(64))
Assert
.
assertEquals
(
TSDBConstants
.
TIMESTAMP_MS_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
1
));
Assert
.
assertEquals
(
TSDBConstants
.
INT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
2
));
Assert
.
assertEquals
(
TSDBConstants
.
BIGINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
3
));
Assert
.
assertEquals
(
TSDBConstants
.
FLOAT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
4
));
Assert
.
assertEquals
(
TSDBConstants
.
DOUBLE_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
5
));
Assert
.
assertEquals
(
TSDBConstants
.
SMALLINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
6
));
Assert
.
assertEquals
(
TSDBConstants
.
TINYINT_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
7
));
Assert
.
assertEquals
(
TSDBConstants
.
BOOLEAN_PRECISION
,
parameterMetaData_insert
.
getPrecision
(
8
));
Assert
.
assertEquals
(
"hello"
.
getBytes
().
length
,
parameterMetaData_insert
.
getPrecision
(
9
));
Assert
.
assertEquals
(
"涛思数据"
.
length
(),
parameterMetaData_insert
.
getPrecision
(
10
));
}
@Test
...
...
@@ -71,8 +72,8 @@ public class RestfulParameterMetaDataTest {
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
1
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
2
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
3
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
4
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
5
));
Assert
.
assertEquals
(
31
,
parameterMetaData_insert
.
getScale
(
4
));
Assert
.
assertEquals
(
31
,
parameterMetaData_insert
.
getScale
(
5
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
6
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
7
));
Assert
.
assertEquals
(
0
,
parameterMetaData_insert
.
getScale
(
8
));
...
...
@@ -164,7 +165,7 @@ public class RestfulParameterMetaDataTest {
pstmt_insert
.
setObject
(
7
,
Byte
.
MAX_VALUE
);
pstmt_insert
.
setObject
(
8
,
true
);
pstmt_insert
.
setObject
(
9
,
"hello"
.
getBytes
());
pstmt_insert
.
setObject
(
10
,
"
Hello
"
);
pstmt_insert
.
setObject
(
10
,
"
涛思数据
"
);
parameterMetaData_insert
=
pstmt_insert
.
getParameterMetaData
();
pstmt_select
=
conn
.
prepareStatement
(
sql_select
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录