[TD-3142]<fix>: fix JDBC-RESTful back ResultSet with null Type
This commit is contained in:
parent
1734b1d197
commit
179a4f5588
|
@ -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
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.NCHAR;
|
||||
}
|
||||
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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
// /**
|
||||
// * 由多个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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 SqlExecuteor(dataSource, config.executeSql));
|
||||
Thread task = new Thread(new SqlExecuteTask(dataSource, config.executeSql));
|
||||
task.start();
|
||||
try {
|
||||
task.join();
|
||||
|
|
|
@ -8,11 +8,11 @@ import java.sql.ResultSet;
|
|||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
public class SqlExecuteor implements Runnable {
|
||||
public class SqlExecuteTask implements Runnable {
|
||||
private final DataSource dataSource;
|
||||
private final String sql;
|
||||
|
||||
public SqlExecuteor(DataSource dataSource, String sql) {
|
||||
public SqlExecuteTask(DataSource dataSource, String sql) {
|
||||
this.dataSource = dataSource;
|
||||
this.sql = sql;
|
||||
}
|
Loading…
Reference in New Issue