Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
179a4f55
T
TDengine
项目概览
慢慢CG
/
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看板
提交
179a4f55
编写于
3月 05, 2021
作者:
Z
zyyang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-3142]<fix>: fix JDBC-RESTful back ResultSet with null Type
上级
1734b1d1
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
237 addition
and
146 deletion
+237
-146
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
...ain/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
+1
-1
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
...r/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
+63
-5
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
...dbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
+2
-0
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
...rc/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
+10
-18
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
...src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
+2
-2
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
+92
-40
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
...n/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
+30
-52
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
.../src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
+16
-17
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
...ctor/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
+14
-2
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
.../main/java/com/taosdata/taosdemo/TaosDemoApplication.java
+5
-7
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecuteTask.java
...in/java/com/taosdata/taosdemo/service/SqlExecuteTask.java
+2
-2
未找到文件。
src/connector/jdbc/src/main/java/com/taosdata/jdbc/DatabaseMetaDataResultSet.java
浏览文件 @
179a4f55
...
...
@@ -308,7 +308,7 @@ public class DatabaseMetaDataResultSet implements ResultSet {
return
colMetaData
.
getColIndex
()
+
1
;
}
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
@Override
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBConstants.java
浏览文件 @
179a4f55
...
...
@@ -14,16 +14,13 @@
*****************************************************************************/
package
com.taosdata.jdbc
;
import
java.sql.SQLException
;
import
java.sql.Types
;
import
java.util.HashMap
;
import
java.util.Map
;
public
abstract
class
TSDBConstants
{
public
static
final
String
STATEMENT_CLOSED
=
"statement is closed"
;
public
static
final
String
UNSUPPORTED_METHOD_EXCEPTION_MSG
=
"this operation is NOT supported currently!"
;
public
static
final
String
INVALID_VARIABLES
=
"invalid variables"
;
public
static
final
String
RESULT_SET_IS_CLOSED
=
"resultSet is closed"
;
public
static
final
String
DEFAULT_PORT
=
"6200"
;
public
static
Map
<
Integer
,
String
>
DATATYPE_MAP
=
null
;
...
...
@@ -77,8 +74,65 @@ public abstract class TSDBConstants {
return
WrapErrMsg
(
"unkown error!"
);
}
public
static
int
taosType2JdbcType
(
int
taosType
)
throws
SQLException
{
switch
(
taosType
)
{
case
TSDBConstants
.
TSDB_DATA_TYPE_NULL
:
return
Types
.
NULL
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
Types
.
BOOLEAN
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
Types
.
TINYINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
return
Types
.
SMALLINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_INT
:
return
Types
.
INTEGER
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
:
return
Types
.
BIGINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
:
return
Types
.
FLOAT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
Types
.
DOUBLE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
Types
.
BINARY
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
Types
.
TIMESTAMP
;
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
Types
.
NCHAR
;
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
}
public
static
int
jdbcType2TaosType
(
int
jdbcType
)
throws
SQLException
{
switch
(
jdbcType
){
case
Types
.
NULL
:
return
TSDBConstants
.
TSDB_DATA_TYPE_NULL
;
case
Types
.
BOOLEAN
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
;
case
Types
.
TINYINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
;
case
Types
.
SMALLINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
;
case
Types
.
INTEGER
:
return
TSDBConstants
.
TSDB_DATA_TYPE_INT
;
case
Types
.
BIGINT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BIGINT
;
case
Types
.
FLOAT
:
return
TSDBConstants
.
TSDB_DATA_TYPE_FLOAT
;
case
Types
.
DOUBLE
:
return
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
;
case
Types
.
BINARY
:
return
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
;
case
Types
.
TIMESTAMP
:
return
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
;
case
Types
.
NCHAR
:
return
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
;
}
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
}
static
{
DATATYPE_MAP
=
new
HashMap
<>();
DATATYPE_MAP
.
put
(
0
,
"NULL"
);
DATATYPE_MAP
.
put
(
1
,
"BOOL"
);
DATATYPE_MAP
.
put
(
2
,
"TINYINT"
);
DATATYPE_MAP
.
put
(
3
,
"SMALLINT"
);
...
...
@@ -90,4 +144,8 @@ public abstract class TSDBConstants {
DATATYPE_MAP
.
put
(
9
,
"TIMESTAMP"
);
DATATYPE_MAP
.
put
(
10
,
"NCHAR"
);
}
public
static
String
jdbcType2TaosTypeName
(
int
type
)
throws
SQLException
{
return
DATATYPE_MAP
.
get
(
jdbcType2TaosType
(
type
));
}
}
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBErrorNumbers.java
浏览文件 @
179a4f55
...
...
@@ -18,6 +18,7 @@ public class TSDBErrorNumbers {
public
static
final
int
ERROR_INVALID_FOR_EXECUTE
=
0x230c
;
//not a valid sql for execute: (SQL)
public
static
final
int
ERROR_PARAMETER_INDEX_OUT_RANGE
=
0x230d
;
// parameter index out of range
public
static
final
int
ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED
=
0x230e
;
// connection already closed
public
static
final
int
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
=
0x230f
;
//unknown sql type in tdengine
public
static
final
int
ERROR_UNKNOWN
=
0x2350
;
//unknown error
...
...
@@ -49,6 +50,7 @@ public class TSDBErrorNumbers {
errorNumbers
.
add
(
ERROR_INVALID_FOR_EXECUTE
);
errorNumbers
.
add
(
ERROR_PARAMETER_INDEX_OUT_RANGE
);
errorNumbers
.
add
(
ERROR_SQLCLIENT_EXCEPTION_ON_CONNECTION_CLOSED
);
errorNumbers
.
add
(
ERROR_UNKNOWN_SQL_TYPE_IN_TDENGINE
);
/*****************************************************/
errorNumbers
.
add
(
ERROR_SUBSCRIBE_FAILED
);
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetMetaData.java
浏览文件 @
179a4f55
...
...
@@ -20,7 +20,7 @@ import java.sql.Timestamp;
import
java.sql.Types
;
import
java.util.List
;
public
class
TSDBResultSetMetaData
implements
ResultSetMetaData
{
public
class
TSDBResultSetMetaData
extends
WrapperImpl
implements
ResultSetMetaData
{
List
<
ColumnMetaData
>
colMetaDataList
=
null
;
...
...
@@ -28,14 +28,6 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
this
.
colMetaDataList
=
metaDataList
;
}
public
<
T
>
T
unwrap
(
Class
<
T
>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
}
public
boolean
isWrapperFor
(
Class
<?>
iface
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
}
public
int
getColumnCount
()
throws
SQLException
{
return
colMetaDataList
.
size
();
}
...
...
@@ -94,7 +86,7 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
String
getSchemaName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
int
getPrecision
(
int
column
)
throws
SQLException
{
...
...
@@ -125,18 +117,18 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
String
getTableName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
String
getCatalogName
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
int
getColumnType
(
int
column
)
throws
SQLException
{
ColumnMetaData
meta
=
this
.
colMetaDataList
.
get
(
column
-
1
);
switch
(
meta
.
getColType
())
{
case
TSDBConstants
.
TSDB_DATA_TYPE_BOOL
:
return
java
.
sql
.
Types
.
BIT
;
return
Types
.
BOOLEAN
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TINYINT
:
return
java
.
sql
.
Types
.
TINYINT
;
case
TSDBConstants
.
TSDB_DATA_TYPE_SMALLINT
:
...
...
@@ -150,13 +142,13 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
case
TSDBConstants
.
TSDB_DATA_TYPE_DOUBLE
:
return
java
.
sql
.
Types
.
DOUBLE
;
case
TSDBConstants
.
TSDB_DATA_TYPE_BINARY
:
return
java
.
sql
.
Types
.
CHAR
;
return
Types
.
BINARY
;
case
TSDBConstants
.
TSDB_DATA_TYPE_TIMESTAMP
:
return
java
.
sql
.
Types
.
BIGINT
;
return
java
.
sql
.
Types
.
TIMESTAMP
;
case
TSDBConstants
.
TSDB_DATA_TYPE_NCHAR
:
return
java
.
sql
.
Types
.
CHAR
;
return
Types
.
N
CHAR
;
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_INVALID_VARIABLE
);
}
public
String
getColumnTypeName
(
int
column
)
throws
SQLException
{
...
...
@@ -173,7 +165,7 @@ public class TSDBResultSetMetaData implements ResultSetMetaData {
}
public
boolean
isDefinitelyWritable
(
int
column
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
String
getColumnClassName
(
int
column
)
throws
SQLException
{
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBResultSetWrapper.java
浏览文件 @
179a4f55
...
...
@@ -1153,11 +1153,11 @@ public class TSDBResultSetWrapper implements ResultSet {
}
public
<
T
>
T
getObject
(
int
columnIndex
,
Class
<
T
>
type
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
public
<
T
>
T
getObject
(
String
columnLabel
,
Class
<
T
>
type
)
throws
SQLException
{
throw
new
SQLException
(
TSDBConstants
.
UNSUPPORTED_METHOD_EXCEPTION_MSG
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_UNSUPPORTED_METHOD
);
}
@Override
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSet.java
浏览文件 @
179a4f55
...
...
@@ -18,10 +18,10 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
private
final
String
database
;
private
final
Statement
statement
;
// data
private
ArrayList
<
ArrayList
<
Object
>>
resultSet
=
new
ArrayList
<>()
;
private
ArrayList
<
ArrayList
<
Object
>>
resultSet
;
// meta
private
ArrayList
<
String
>
columnNames
=
new
ArrayList
<>()
;
private
ArrayList
<
Field
>
columns
=
new
ArrayList
<>()
;
private
ArrayList
<
String
>
columnNames
;
private
ArrayList
<
Field
>
columns
;
private
RestfulResultSetMetaData
metaData
;
/**
...
...
@@ -29,11 +29,36 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
*
* @param resultJson: 包含data信息的结果集,有sql返回的结果集
***/
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
)
{
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
)
throws
SQLException
{
this
.
database
=
database
;
this
.
statement
=
statement
;
// column metadata
JSONArray
columnMeta
=
resultJson
.
getJSONArray
(
"column_meta"
);
columnNames
=
new
ArrayList
<>();
columns
=
new
ArrayList
<>();
for
(
int
colIndex
=
0
;
colIndex
<
columnMeta
.
size
();
colIndex
++)
{
JSONArray
col
=
columnMeta
.
getJSONArray
(
colIndex
);
String
col_name
=
col
.
getString
(
0
);
int
col_type
=
TSDBConstants
.
taosType2JdbcType
(
col
.
getInteger
(
1
));
int
col_length
=
col
.
getInteger
(
2
);
columnNames
.
add
(
col_name
);
columns
.
add
(
new
Field
(
col_name
,
col_type
,
col_length
,
""
));
}
this
.
metaData
=
new
RestfulResultSetMetaData
(
this
.
database
,
columns
,
this
);
// row data
JSONArray
data
=
resultJson
.
getJSONArray
(
"data"
);
resultSet
=
new
ArrayList
<>();
for
(
int
rowIndex
=
0
;
rowIndex
<
data
.
size
();
rowIndex
++)
{
ArrayList
row
=
new
ArrayList
();
JSONArray
jsonRow
=
data
.
getJSONArray
(
rowIndex
);
for
(
int
colIndex
=
0
;
colIndex
<
jsonRow
.
size
();
colIndex
++)
{
row
.
add
(
parseColumnData
(
jsonRow
,
colIndex
,
columns
.
get
(
colIndex
).
type
));
}
resultSet
.
add
(
row
);
}
/*
int columnIndex = 0;
for (; columnIndex < data.size(); columnIndex++) {
ArrayList oneRow = new ArrayList<>();
...
...
@@ -52,50 +77,77 @@ public class RestfulResultSet extends AbstractResultSet implements ResultSet {
columns.add(new Field(name, "", 0, ""));
}
this.metaData = new RestfulResultSetMetaData(this.database, columns, this);
}
/**
* 由多个resultSet的JSON构造结果集
*
* @param resultJson: 包含data信息的结果集,有sql返回的结果集
* @param fieldJson: 包含多个(最多2个)meta信息的结果集,有describe xxx
**/
public
RestfulResultSet
(
String
database
,
Statement
statement
,
JSONObject
resultJson
,
List
<
JSONObject
>
fieldJson
)
{
this
(
database
,
statement
,
resultJson
);
ArrayList
<
Field
>
newColumns
=
new
ArrayList
<>();
for
(
Field
column
:
columns
)
{
Field
field
=
findField
(
column
.
name
,
fieldJson
);
if
(
field
!=
null
)
{
newColumns
.
add
(
field
);
}
else
{
newColumns
.
add
(
column
);
}
}
this
.
columns
=
newColumns
;
this
.
metaData
=
new
RestfulResultSetMetaData
(
this
.
database
,
this
.
columns
,
this
);
}
public
Field
findField
(
String
columnName
,
List
<
JSONObject
>
fieldJsonList
)
{
for
(
JSONObject
fieldJSON
:
fieldJsonList
)
{
JSONArray
fieldDataJson
=
fieldJSON
.
getJSONArray
(
"data"
);
for
(
int
i
=
0
;
i
<
fieldDataJson
.
size
();
i
++)
{
JSONArray
field
=
fieldDataJson
.
getJSONArray
(
i
);
if
(
columnName
.
equalsIgnoreCase
(
field
.
getString
(
0
)))
{
return
new
Field
(
field
.
getString
(
0
),
field
.
getString
(
1
),
field
.
getInteger
(
2
),
field
.
getString
(
3
));
}
}
*/
}
private
Object
parseColumnData
(
JSONArray
row
,
int
colIndex
,
int
sqlType
)
{
switch
(
sqlType
)
{
case
Types
.
NULL
:
return
null
;
case
Types
.
BOOLEAN
:
return
row
.
getBoolean
(
colIndex
);
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
return
row
.
getShort
(
colIndex
);
case
Types
.
INTEGER
:
return
row
.
getInteger
(
colIndex
);
case
Types
.
BIGINT
:
return
row
.
getBigInteger
(
colIndex
);
case
Types
.
FLOAT
:
return
row
.
getFloat
(
colIndex
);
case
Types
.
DOUBLE
:
return
row
.
getDouble
(
colIndex
);
case
Types
.
TIMESTAMP
:
return
row
.
getTimestamp
(
colIndex
);
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
default
:
return
row
.
getString
(
colIndex
);
}
return
null
;
}
// /**
// * 由多个resultSet的JSON构造结果集
// *
// * @param resultJson: 包含data信息的结果集,有sql返回的结果集
// * @param fieldJson: 包含多个(最多2个)meta信息的结果集,有describe xxx
// **/
// public RestfulResultSet(String database, Statement statement, JSONObject resultJson, List<JSONObject> fieldJson) throws SQLException {
// this(database, statement, resultJson);
// ArrayList<Field> newColumns = new ArrayList<>();
//
// for (Field column : columns) {
// Field field = findField(column.name, fieldJson);
// if (field != null) {
// newColumns.add(field);
// } else {
// newColumns.add(column);
// }
// }
// this.columns = newColumns;
// this.metaData = new RestfulResultSetMetaData(this.database, this.columns, this);
// }
// public Field findField(String columnName, List<JSONObject> fieldJsonList) {
// for (JSONObject fieldJSON : fieldJsonList) {
// JSONArray fieldDataJson = fieldJSON.getJSONArray("data");
// for (int i = 0; i < fieldDataJson.size(); i++) {
// JSONArray field = fieldDataJson.getJSONArray(i);
// if (columnName.equalsIgnoreCase(field.getString(0))) {
// return new Field(field.getString(0), field.getString(1), field.getInteger(2), field.getString(3));
// }
// }
// }
// return null;
// }
public
class
Field
{
String
name
;
String
type
;
int
type
;
int
length
;
String
note
;
public
Field
(
String
name
,
String
type
,
int
length
,
String
note
)
{
public
Field
(
String
name
,
int
type
,
int
length
,
String
note
)
{
this
.
name
=
name
;
this
.
type
=
type
;
this
.
length
=
length
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulResultSetMetaData.java
浏览文件 @
179a4f55
...
...
@@ -5,6 +5,7 @@ import com.taosdata.jdbc.TSDBConstants;
import
java.sql.ResultSetMetaData
;
import
java.sql.SQLException
;
import
java.sql.Timestamp
;
import
java.sql.Types
;
import
java.util.ArrayList
;
public
class
RestfulResultSetMetaData
implements
ResultSetMetaData
{
...
...
@@ -53,14 +54,14 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
boolean
isSigned
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"TINYINT"
:
case
"SMALLINT"
:
case
"INT"
:
case
"BIGINT"
:
case
"FLOAT"
:
case
"DOUBLE"
:
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
case
Types
.
INTEGER
:
case
Types
.
BIGINT
:
case
Types
.
FLOAT
:
case
Types
.
DOUBLE
:
return
true
;
default
:
return
false
;
...
...
@@ -89,14 +90,14 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getPrecision
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
5
;
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
9
;
case
"BINARY"
:
case
"NCHAR"
:
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
return
this
.
fields
.
get
(
column
-
1
).
length
;
default
:
return
0
;
...
...
@@ -105,11 +106,11 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getScale
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
()
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
switch
(
type
)
{
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
5
;
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
9
;
default
:
return
0
;
...
...
@@ -128,36 +129,13 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
int
getColumnType
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
.
toUpperCase
();
switch
(
type
)
{
case
"BOOL"
:
return
java
.
sql
.
Types
.
BOOLEAN
;
case
"TINYINT"
:
return
java
.
sql
.
Types
.
TINYINT
;
case
"SMALLINT"
:
return
java
.
sql
.
Types
.
SMALLINT
;
case
"INT"
:
return
java
.
sql
.
Types
.
INTEGER
;
case
"BIGINT"
:
return
java
.
sql
.
Types
.
BIGINT
;
case
"FLOAT"
:
return
java
.
sql
.
Types
.
FLOAT
;
case
"DOUBLE"
:
return
java
.
sql
.
Types
.
DOUBLE
;
case
"BINARY"
:
return
java
.
sql
.
Types
.
BINARY
;
case
"TIMESTAMP"
:
return
java
.
sql
.
Types
.
TIMESTAMP
;
case
"NCHAR"
:
return
java
.
sql
.
Types
.
NCHAR
;
}
throw
new
SQLException
(
TSDBConstants
.
INVALID_VARIABLES
);
return
this
.
fields
.
get
(
column
-
1
).
type
;
}
@Override
public
String
getColumnTypeName
(
int
column
)
throws
SQLException
{
String
type
=
fields
.
get
(
column
-
1
).
type
;
return
type
.
toUpperCase
(
);
int
type
=
fields
.
get
(
column
-
1
).
type
;
return
TSDBConstants
.
jdbcType2TaosTypeName
(
type
);
}
@Override
...
...
@@ -177,26 +155,26 @@ public class RestfulResultSetMetaData implements ResultSetMetaData {
@Override
public
String
getColumnClassName
(
int
column
)
throws
SQLException
{
String
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
int
type
=
this
.
fields
.
get
(
column
-
1
).
type
;
String
columnClassName
=
""
;
switch
(
type
)
{
case
"BOOL"
:
case
Types
.
BOOLEAN
:
return
Boolean
.
class
.
getName
();
case
"TINYINT"
:
case
"SMALLINT"
:
case
Types
.
TINYINT
:
case
Types
.
SMALLINT
:
return
Short
.
class
.
getName
();
case
"INT"
:
case
Types
.
INTEGER
:
return
Integer
.
class
.
getName
();
case
"BIGINT"
:
case
Types
.
BIGINT
:
return
Long
.
class
.
getName
();
case
"FLOAT"
:
case
Types
.
FLOAT
:
return
Float
.
class
.
getName
();
case
"DOUBLE"
:
case
Types
.
DOUBLE
:
return
Double
.
class
.
getName
();
case
"TIMESTAMP"
:
case
Types
.
TIMESTAMP
:
return
Timestamp
.
class
.
getName
();
case
"BINARY"
:
case
"NCHAR"
:
case
Types
.
BINARY
:
case
Types
.
NCHAR
:
return
String
.
class
.
getName
();
}
return
columnClassName
;
...
...
src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulStatement.java
浏览文件 @
179a4f55
...
...
@@ -151,22 +151,21 @@ public class RestfulStatement extends AbstractStatement {
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"SQL execution error: "
+
resultJson
.
getString
(
"desc"
)
+
"\n"
+
"error code: "
+
resultJson
.
getString
(
"code"
)));
}
// parse table name from sql
String
[]
tableIdentifiers
=
parseTableIdentifier
(
sql
);
if
(
tableIdentifiers
!=
null
)
{
List
<
JSONObject
>
fieldJsonList
=
new
ArrayList
<>();
for
(
String
tableIdentifier
:
tableIdentifiers
)
{
// field meta
String
fields
=
HttpClientPoolUtil
.
execute
(
url
,
"DESCRIBE "
+
tableIdentifier
);
JSONObject
fieldJson
=
JSON
.
parseObject
(
fields
);
if
(
fieldJson
.
getString
(
"status"
).
equals
(
"error"
))
{
throw
new
SQLException
(
TSDBConstants
.
WrapErrMsg
(
"SQL execution error: "
+
fieldJson
.
getString
(
"desc"
)
+
"\n"
+
"error code: "
+
fieldJson
.
getString
(
"code"
)));
}
fieldJsonList
.
add
(
fieldJson
);
}
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
,
fieldJsonList
);
}
else
{
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
);
}
// String[] tableIdentifiers = parseTableIdentifier(sql);
// if (tableIdentifiers != null) {
// List<JSONObject> fieldJsonList = new ArrayList<>();
// for (String tableIdentifier : tableIdentifiers) {
// String fields = HttpClientPoolUtil.execute(url, "DESCRIBE " + tableIdentifier);
// JSONObject fieldJson = JSON.parseObject(fields);
// if (fieldJson.getString("status").equals("error")) {
// throw new SQLException(TSDBConstants.WrapErrMsg("SQL execution error: " + fieldJson.getString("desc") + "\n" + "error code: " + fieldJson.getString("code")));
// }
// fieldJsonList.add(fieldJson);
// }
// this.resultSet = new RestfulResultSet(database, this, resultJson, fieldJsonList);
// } else {
this
.
resultSet
=
new
RestfulResultSet
(
database
,
this
,
resultJson
);
// }
this
.
affectedRows
=
0
;
return
resultSet
;
}
...
...
@@ -201,7 +200,7 @@ public class RestfulStatement extends AbstractStatement {
@Override
public
ResultSet
getResultSet
()
throws
SQLException
{
if
(
isClosed
())
throw
new
SQLException
(
TSDBConstants
.
STATEMENT_CLOSED
);
throw
TSDBError
.
createSQLException
(
TSDBErrorNumbers
.
ERROR_
STATEMENT_CLOSED
);
return
resultSet
;
}
...
...
src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
浏览文件 @
179a4f55
...
...
@@ -11,8 +11,8 @@ import java.sql.*;
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
public
class
SQLTest
{
private
static
final
String
host
=
"127.0.0.1"
;
//
private static final String host = "master";
//
private static final String host = "127.0.0.1";
private
static
final
String
host
=
"master"
;
private
static
Connection
connection
;
@Test
...
...
@@ -323,6 +323,18 @@ public class SQLTest {
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@Test
public
void
testCase052
()
{
String
sql
=
"select server_status()"
;
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@Test
public
void
testCase053
()
{
String
sql
=
"select avg(cpu_taosd), avg(cpu_system), max(cpu_cores), avg(mem_taosd), avg(mem_system), max(mem_total), avg(disk_used), max(disk_total), avg(band_speed), avg(io_read), avg(io_write), sum(req_http), sum(req_select), sum(req_insert) from log.dn1 where ts> now - 60m and ts<= now interval(1m) fill(value, 0)"
;
SQLExecutor
.
executeQuery
(
connection
,
sql
);
}
@BeforeClass
public
static
void
before
()
throws
ClassNotFoundException
,
SQLException
{
Class
.
forName
(
"com.taosdata.jdbc.rs.RestfulDriver"
);
...
...
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/TaosDemoApplication.java
浏览文件 @
179a4f55
...
...
@@ -3,17 +3,15 @@ package com.taosdata.taosdemo;
import
com.taosdata.taosdemo.components.DataSourceFactory
;
import
com.taosdata.taosdemo.components.JdbcTaosdemoConfig
;
import
com.taosdata.taosdemo.domain.SuperTableMeta
;
import
com.taosdata.taosdemo.service.*
;
import
com.taosdata.taosdemo.service.DatabaseService
;
import
com.taosdata.taosdemo.service.SqlExecuteTask
;
import
com.taosdata.taosdemo.service.SubTableService
;
import
com.taosdata.taosdemo.service.SuperTableService
;
import
com.taosdata.taosdemo.service.data.SuperTableMetaGenerator
;
import
com.taosdata.taosdemo.utils.Printer
;
import
org.apache.log4j.Logger
;
import
javax.sql.DataSource
;
import
java.io.IOException
;
import
java.sql.Connection
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
import
java.sql.Statement
;
import
java.time.Duration
;
import
java.time.Instant
;
import
java.util.Arrays
;
...
...
@@ -35,7 +33,7 @@ public class TaosDemoApplication {
// 初始化
final
DataSource
dataSource
=
DataSourceFactory
.
getInstance
(
config
.
host
,
config
.
port
,
config
.
user
,
config
.
password
);
if
(
config
.
executeSql
!=
null
&&
!
config
.
executeSql
.
isEmpty
()
&&
!
config
.
executeSql
.
replaceAll
(
"\\s"
,
""
).
isEmpty
())
{
Thread
task
=
new
Thread
(
new
SqlExecute
or
(
dataSource
,
config
.
executeSql
));
Thread
task
=
new
Thread
(
new
SqlExecute
Task
(
dataSource
,
config
.
executeSql
));
task
.
start
();
try
{
task
.
join
();
...
...
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecute
or
.java
→
tests/examples/JDBC/taosdemo/src/main/java/com/taosdata/taosdemo/service/SqlExecute
Task
.java
浏览文件 @
179a4f55
...
...
@@ -8,11 +8,11 @@ import java.sql.ResultSet;
import
java.sql.SQLException
;
import
java.sql.Statement
;
public
class
SqlExecute
or
implements
Runnable
{
public
class
SqlExecute
Task
implements
Runnable
{
private
final
DataSource
dataSource
;
private
final
String
sql
;
public
SqlExecute
or
(
DataSource
dataSource
,
String
sql
)
{
public
SqlExecute
Task
(
DataSource
dataSource
,
String
sql
)
{
this
.
dataSource
=
dataSource
;
this
.
sql
=
sql
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录