diff --git a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
index ae01b51a52..3333bbc450 100644
--- a/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
+++ b/documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
@@ -698,13 +698,13 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
```mysql
SELECT TWA(field_name) FROM tb_name WHERE clause;
```
- 功能说明:时间加权平均函数。统计表/超级表中某列在一段时间内的时间加权平均。
+ 功能说明:时间加权平均函数。统计表中某列在一段时间内的时间加权平均。
返回结果数据类型:双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
- 适用于:表、超级表。
+ 适用于:表。
- **SUM**
```mysql
diff --git a/packaging/tools/taosd-dump-cfg.gdb b/packaging/tools/taosd-dump-cfg.gdb
new file mode 100644
index 0000000000..9774ccf822
--- /dev/null
+++ b/packaging/tools/taosd-dump-cfg.gdb
@@ -0,0 +1,144 @@
+# Usage:
+# sudo gdb -x ./taosd-dump-cfg.gdb
+
+define attach_pidof
+ if $argc != 1
+ help attach_pidof
+ else
+ shell echo -e "\
+set \$PID = "$(echo $(pidof $arg0) 0 | cut -d " " -f 1)"\n\
+if \$PID > 0\n\
+ attach "$(pidof -s $arg0)"\n\
+else\n\
+ print \"Process '"$arg0"' not found\"\n\
+end" > /tmp/gdb.pidof
+ source /tmp/gdb.pidof
+ end
+end
+
+document attach_pidof
+Attach to process by name
+Usage: attach_pidof PROG_NAME
+end
+
+set $TAOS_CFG_VTYPE_INT8 = 0
+set $TAOS_CFG_VTYPE_INT16 = 1
+set $TAOS_CFG_VTYPE_INT32 = 2
+set $TAOS_CFG_VTYPE_FLOAT = 3
+set $TAOS_CFG_VTYPE_STRING = 4
+set $TAOS_CFG_VTYPE_IPSTR = 5
+set $TAOS_CFG_VTYPE_DIRECTORY = 6
+
+set $TSDB_CFG_CTYPE_B_CONFIG = 1U
+set $TSDB_CFG_CTYPE_B_SHOW = 2U
+set $TSDB_CFG_CTYPE_B_LOG = 4U
+set $TSDB_CFG_CTYPE_B_CLIENT = 8U
+set $TSDB_CFG_CTYPE_B_OPTION = 16U
+set $TSDB_CFG_CTYPE_B_NOT_PRINT = 32U
+
+set $TSDB_CFG_PRINT_LEN = 53
+
+define print_blank
+ if $argc == 1
+ set $blank_len = $arg0
+ while $blank_len > 0
+ printf "%s", " "
+ set $blank_len = $blank_len - 1
+ end
+ end
+end
+
+define dump_cfg
+ if $argc != 1
+ help dump_cfg
+ else
+ set $blen = $TSDB_CFG_PRINT_LEN - (int)strlen($arg0.option)
+ if $blen < 0
+ $blen = 0
+ end
+ #printf "%s: %d\n", "******blen: ", $blen
+ printf "%s: ", $arg0.option
+ print_blank $blen
+
+ if $arg0.valType == $TAOS_CFG_VTYPE_INT8
+ printf "%d\n", *((int8_t *) $arg0.ptr)
+ else
+ if $arg0.valType == $TAOS_CFG_VTYPE_INT16
+ printf "%d\n", *((int16_t *) $arg0.ptr)
+ else
+ if $arg0.valType == $TAOS_CFG_VTYPE_INT32
+ printf "%d\n", *((int32_t *) $arg0.ptr)
+ else
+ if $arg0.valType == $TAOS_CFG_VTYPE_FLOAT
+ printf "%f\n", *((float *) $arg0.ptr)
+ else
+ printf "%s\n", $arg0.ptr
+ end
+ end
+ end
+ end
+ end
+end
+
+document dump_cfg
+Dump a cfg entry
+Usage: dump_cfg cfg
+end
+
+set pagination off
+
+attach_pidof taosd
+
+set $idx=0
+#print tsGlobalConfigNum
+#set $end=$1
+set $end=tsGlobalConfigNum
+
+p "*=*=*=*=*=*=*=*=*= taos global config:"
+#while ($idx .lt. $end)
+while ($idx < $end)
+ # print tsGlobalConfig[$idx].option
+ set $cfg = tsGlobalConfig[$idx]
+ set $tsce = tscEmbedded
+# p "1"
+ if ($tsce == 0)
+ if !($cfg.cfgType & $TSDB_CFG_CTYPE_B_CLIENT)
+ end
+ else
+ if $cfg.cfgType & $TSDB_CFG_CTYPE_B_NOT_PRINT
+ else
+ if !($cfg.cfgType & $TSDB_CFG_CTYPE_B_SHOW)
+ else
+ dump_cfg $cfg
+ end
+ end
+ end
+
+ set $idx=$idx+1
+end
+
+set $idx=0
+
+p "*=*=*=*=*=*=*=*=*= taos local config:"
+while ($idx < $end)
+ set $cfg = tsGlobalConfig[$idx]
+ set $tsce = tscEmbedded
+ if ($tsce == 0)
+ if !($cfg.cfgType & $TSDB_CFG_CTYPE_B_CLIENT)
+ end
+ else
+ if $cfg.cfgType & $TSDB_CFG_CTYPE_B_NOT_PRINT
+ else
+ if ($cfg.cfgType & $TSDB_CFG_CTYPE_B_SHOW)
+ else
+ dump_cfg $cfg
+ end
+ end
+ end
+
+ set $idx=$idx+1
+end
+
+detach
+
+quit
diff --git a/src/connector/jdbc/pom.xml b/src/connector/jdbc/pom.xml
index 5481056763..6be0ca036e 100755
--- a/src/connector/jdbc/pom.xml
+++ b/src/connector/jdbc/pom.xml
@@ -74,6 +74,14 @@
1.2.58
+
+
+ org.apache.commons
+ commons-dbcp2
+ 2.7.0
+
+
+
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
index 8ab0e4429a..08414d05e9 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/AbstractDatabaseMetaData.java
@@ -1,28 +1,13 @@
-/***************************************************************************
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *****************************************************************************/
package com.taosdata.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
-public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
+public abstract class AbstractDatabaseMetaData implements DatabaseMetaData, Wrapper {
private final static String PRODUCT_NAME = "TDengine";
private final static String PRODUCT_VESION = "2.0.x.x";
- private final static String DRIVER_NAME = "taos-jdbcdriver";
private final static String DRIVER_VERSION = "2.0.x";
private final static int DRIVER_MAJAR_VERSION = 2;
private final static int DRIVER_MINOR_VERSION = 0;
@@ -67,9 +52,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
return PRODUCT_VESION;
}
- public String getDriverName() throws SQLException {
- return DRIVER_NAME;
- }
+ public abstract String getDriverName() throws SQLException;
public String getDriverVersion() throws SQLException {
return DRIVER_VERSION;
@@ -92,6 +75,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean supportsMixedCaseIdentifiers() throws SQLException {
+ //像database、table这些对象的标识符,在存储时是否采用大小写混合的模式
return false;
}
@@ -100,7 +84,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean storesLowerCaseIdentifiers() throws SQLException {
- return false;
+ return true;
}
public boolean storesMixedCaseIdentifiers() throws SQLException {
@@ -168,10 +152,12 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean nullPlusNonNullIsNull() throws SQLException {
+ // null + non-null != null
return false;
}
public boolean supportsConvert() throws SQLException {
+ // 是否支持转换函数convert
return false;
}
@@ -196,7 +182,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean supportsGroupBy() throws SQLException {
- return false;
+ return true;
}
public boolean supportsGroupByUnrelated() throws SQLException {
@@ -468,7 +454,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public int getDefaultTransactionIsolation() throws SQLException {
- return 0;
+ return Connection.TRANSACTION_NONE;
}
public boolean supportsTransactions() throws SQLException {
@@ -476,6 +462,8 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
+ if (level == Connection.TRANSACTION_NONE)
+ return true;
return false;
}
@@ -495,18 +483,113 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
return false;
}
- public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
- throws SQLException {
+ public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException {
return null;
}
- public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
- String columnNamePattern) throws SQLException {
+ public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException {
return null;
}
- public abstract ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
- throws SQLException;
+ 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;
+
+ stmt.execute("use " + dbname);
+ DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
+ List 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);
+
+ List rowDataList = new ArrayList<>();
+ 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
+ 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
+ rowDataList.add(rowData);
+ }
+ resultSet.setRowDataList(rowDataList);
+ return resultSet;
+ }
+ }
public ResultSet getSchemas() throws SQLException {
return getEmptyResultSet();
@@ -516,32 +599,239 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
public ResultSet getTableTypes() throws SQLException {
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
-
// set up ColumnMetaDataList
- List columnMetaDataList = new ArrayList(1);
+ List columnMetaDataList = new ArrayList<>();
ColumnMetaData colMetaData = new ColumnMetaData();
colMetaData.setColIndex(0);
colMetaData.setColName("TABLE_TYPE");
colMetaData.setColSize(10);
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_BINARY);
+ colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_NCHAR);
columnMetaDataList.add(colMetaData);
+ resultSet.setColumnMetaDataList(columnMetaDataList);
// set up rowDataList
- List rowDataList = new ArrayList(2);
- TSDBResultSetRowData rowData = new TSDBResultSetRowData();
+ List rowDataList = new ArrayList<>();
+ TSDBResultSetRowData rowData = new TSDBResultSetRowData(1);
rowData.setString(0, "TABLE");
rowDataList.add(rowData);
- rowData = new TSDBResultSetRowData();
+ rowData = new TSDBResultSetRowData(1);
rowData.setString(0, "STABLE");
rowDataList.add(rowData);
-
- resultSet.setColumnMetaDataList(columnMetaDataList);
resultSet.setRowDataList(rowDataList);
+
return resultSet;
}
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;
+
+ stmt.execute("use " + dbname);
+ DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
+ // set up ColumnMetaDataList
+
+ List 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 rowDataList = new ArrayList<>();
+ int index = 0;
+ while (rs.next()) {
+ TSDBResultSetRowData rowData = new TSDBResultSetRowData(24);
+ // set TABLE_CAT
+ rowData.setString(0, dbname);
+ // set TABLE_NAME
+ rowData.setString(2, tableNamePattern);
+ // set COLUMN_NAME
+ rowData.setString(3, rs.getString("Field"));
+ // set DATA_TYPE
+ String typeName = rs.getString("Type");
+ rowData.setInt(4, getDataType(typeName));
+ // set TYPE_NAME
+ rowData.setString(5, typeName);
+ // set COLUMN_SIZE
+ int length = rs.getInt("Length");
+ rowData.setInt(6, getColumnSize(typeName, length));
+ // set DECIMAL_DIGITS
+ rowData.setInt(8, getDecimalDigits(typeName));
+ // set NUM_PREC_RADIX
+ rowData.setInt(9, 10);
+ // set NULLABLE
+ rowData.setInt(10, getNullable(index, typeName));
+ // set REMARKS
+ rowData.setString(11, rs.getString("Note"));
+ rowDataList.add(rowData);
+ index++;
+ }
+ resultSet.setRowDataList(rowDataList);
+ return resultSet;
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
protected int getNullable(int index, String typeName) {
if (index == 0 && "TIMESTAMP".equals(typeName))
return DatabaseMetaData.columnNoNulls;
@@ -552,7 +842,6 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
switch (typeName) {
case "TIMESTAMP":
return 23;
-
default:
return 0;
}
@@ -615,9 +904,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
return getEmptyResultSet();
}
- public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
- return getEmptyResultSet();
- }
+ public abstract ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException;
public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException {
return getEmptyResultSet();
@@ -718,9 +1005,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
return getEmptyResultSet();
}
- public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
- return getEmptyResultSet();
- }
+ 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 {
@@ -728,15 +1013,17 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public boolean supportsResultSetHoldability(int holdability) throws SQLException {
+ if (holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT)
+ return true;
return false;
}
public int getResultSetHoldability() throws SQLException {
- return 0;
+ return ResultSet.HOLD_CURSORS_OVER_COMMIT;
}
public int getDatabaseMajorVersion() throws SQLException {
- return 0;
+ return 2;
}
public int getDatabaseMinorVersion() throws SQLException {
@@ -744,7 +1031,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public int getJDBCMajorVersion() throws SQLException {
- return 0;
+ return 2;
}
public int getJDBCMinorVersion() throws SQLException {
@@ -768,7 +1055,7 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
}
public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
- return null;
+ return getEmptyResultSet();
}
public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
@@ -805,4 +1092,180 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
private ResultSet getEmptyResultSet() {
return new EmptyResultSet();
}
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ try {
+ return iface.cast(this);
+ } catch (ClassCastException cce) {
+ throw new SQLException("Unable to unwrap to " + iface.toString());
+ }
+ }
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ return iface.isInstance(this);
+ }
+
+ protected ResultSet getCatalogs(Connection conn) throws SQLException {
+ try (Statement stmt = conn.createStatement()) {
+ DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
+ // set up ColumnMetaDataList
+ List 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);
+
+ List rowDataList = new ArrayList<>();
+ ResultSet rs = stmt.executeQuery("show databases");
+ while (rs.next()) {
+ TSDBResultSetRowData rowData = new TSDBResultSetRowData(1);
+ rowData.setString(0, rs.getString("name"));
+ rowDataList.add(rowData);
+ }
+ resultSet.setRowDataList(rowDataList);
+ 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;
+
+ 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();
+ // set up ColumnMetaDataList
+ List 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);
+
+ // set rowData
+ List rowDataList = new ArrayList<>();
+ ResultSet rs = stmt.executeQuery("describe " + dbname + "." + table);
+ rs.next();
+ TSDBResultSetRowData rowData = new TSDBResultSetRowData(6);
+ rowData.setString(0, null);
+ rowData.setString(1, null);
+ rowData.setString(2, table);
+ String pkName = rs.getString(1);
+ rowData.setString(3, pkName);
+ rowData.setInt(4, 1);
+ rowData.setString(5, pkName);
+ rowDataList.add(rowData);
+ resultSet.setRowDataList(rowDataList);
+ 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;
+
+ 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();
+ // set up ColumnMetaDataList
+ List 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);
+
+ ResultSet rs = stmt.executeQuery("show tables like '" + tableNamePattern + "'");
+ List rowDataList = new ArrayList<>();
+ while (rs.next()) {
+ TSDBResultSetRowData rowData = new TSDBResultSetRowData(4);
+ rowData.setString(2, rs.getString(1));
+ rowData.setString(3, rs.getString(4));
+ rowDataList.add(rowData);
+ }
+ resultSet.setRowDataList(rowDataList);
+ return resultSet;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/CatalogResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/CatalogResultSet.java
deleted file mode 100644
index 3d7e6034dd..0000000000
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/CatalogResultSet.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/***************************************************************************
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *****************************************************************************/
-package com.taosdata.jdbc;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-/*
- * TDengine only supports a subset of the standard SQL, thus this implemetation of the
- * standard JDBC API contains more or less some adjustments customized for certain
- * compatibility needs.
- */
-public class CatalogResultSet extends TSDBResultSetWrapper {
-
- public CatalogResultSet(ResultSet resultSet) {
- super.setOriginalResultSet(resultSet);
- }
-
- @Override
- public String getString(int columnIndex) throws SQLException {
- if (columnIndex <= 1) {
- return super.getString(columnIndex);
- } else {
- return null;
- }
- }
-
- @Override
- public boolean getBoolean(int columnIndex) throws SQLException {
- if (columnIndex <= 1) {
- return super.getBoolean(columnIndex);
- } else {
- return false;
- }
- }
-
- @Override
- public byte[] getBytes(int columnIndex) throws SQLException {
- if (columnIndex <= 1) {
- return super.getBytes(columnIndex);
- } else {
- return null;
- }
- }
-
- @Override
- public Object getObject(int columnIndex) throws SQLException {
- if (columnIndex <= 1) {
- return super.getObject(columnIndex);
- } else {
- return null;
- }
- }
-
-}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java
index 633fdcd5ab..fe16aa6535 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/ColumnMetaData.java
@@ -16,40 +16,40 @@ package com.taosdata.jdbc;
public class ColumnMetaData {
- private int colType = 0;
- private String colName = null;
- private int colSize = -1;
- private int colIndex = 0;
+ private int colType = 0;
+ private String colName = null;
+ private int colSize = -1;
+ private int colIndex = 0;
- public int getColSize() {
- return colSize;
- }
+ public int getColSize() {
+ return colSize;
+ }
- public void setColSize(int colSize) {
- this.colSize = colSize;
- }
+ public void setColSize(int colSize) {
+ this.colSize = colSize;
+ }
- public int getColType() {
- return colType;
- }
+ public int getColType() {
+ return colType;
+ }
- public void setColType(int colType) {
- this.colType = colType;
- }
+ public void setColType(int colType) {
+ this.colType = colType;
+ }
- public String getColName() {
- return colName;
- }
+ public String getColName() {
+ return colName;
+ }
- public void setColName(String colName) {
- this.colName = colName;
- }
+ public void setColName(String colName) {
+ this.colName = colName;
+ }
- public int getColIndex() {
- return colIndex;
- }
+ public int getColIndex() {
+ return colIndex;
+ }
- public void setColIndex(int colIndex) {
- this.colIndex = colIndex;
- }
+ public void setColIndex(int colIndex) {
+ this.colIndex = colIndex;
+ }
}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/GetTablesResultSet.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/GetTablesResultSet.java
deleted file mode 100644
index e28f6e3c9a..0000000000
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/GetTablesResultSet.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************
- * Copyright (c) 2019 TAOS Data, Inc.
- *
- * This program is free software: you can use, redistribute, and/or modify
- * it under the terms of the GNU Affero General Public License, version 3
- * or later ("AGPL"), as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *****************************************************************************/
-package com.taosdata.jdbc;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-/*
- * TDengine only supports a subset of the standard SQL, thus this implemetation of the
- * standard JDBC API contains more or less some adjustments customized for certain
- * compatibility needs.
- */
-public class GetTablesResultSet extends TSDBResultSetWrapper {
-
- private String catalog;
- private String schemaPattern;
- private String tableNamePattern;
- private String[] types;
-
- public GetTablesResultSet(ResultSet resultSet, String catalog, String schemaPattern, String tableNamePattern, String[] types) {
- super.setOriginalResultSet(resultSet);
- this.catalog = catalog;
- this.schemaPattern = schemaPattern;
- this.tableNamePattern = tableNamePattern;
- this.types = types;
- }
-
- @Override
- public String getString(int columnIndex) throws SQLException {
- String ret = null;
- switch (columnIndex) {
- case 3:
- return super.getString(1);
- case 4:
- return "table";
- default:
- return null;
- }
- }
-
-}
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
index 53f3714555..d1f1e77b1c 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/TSDBDatabaseMetaData.java
@@ -14,11 +14,11 @@
*****************************************************************************/
package com.taosdata.jdbc;
-import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
-public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
+public class TSDBDatabaseMetaData extends AbstractDatabaseMetaData {
private String url;
private String userName;
@@ -29,31 +29,14 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
this.userName = userName;
}
+ public Connection getConnection() throws SQLException {
+ return this.conn;
+ }
+
public void setConnection(Connection conn) {
this.conn = conn;
}
- @Override
- public T unwrap(Class iface) throws SQLException {
- try {
- return iface.cast(this);
- } catch (ClassCastException cce) {
- throw new SQLException("Unable to unwrap to " + iface.toString());
- }
- }
-
- public boolean isWrapperFor(Class> iface) throws SQLException {
- return iface.isInstance(this);
- }
-
- public boolean allProceduresAreCallable() throws SQLException {
- return false;
- }
-
- public boolean allTablesAreSelectable() throws SQLException {
- return false;
- }
-
public String getURL() throws SQLException {
return this.url;
}
@@ -62,479 +45,10 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
return this.userName;
}
- public boolean isReadOnly() throws SQLException {
- return false;
- }
-
- public boolean nullsAreSortedHigh() throws SQLException {
- return false;
- }
-
- public boolean nullsAreSortedLow() throws SQLException {
- return !nullsAreSortedHigh();
- }
-
- public boolean nullsAreSortedAtStart() throws SQLException {
- return true;
- }
-
- public boolean nullsAreSortedAtEnd() throws SQLException {
- return !nullsAreSortedAtStart();
- }
-
- public String getDatabaseProductName() throws SQLException {
- return "TDengine";
- }
-
- public String getDatabaseProductVersion() throws SQLException {
- return "2.0.x.x";
- }
-
public String getDriverName() throws SQLException {
return TSDBDriver.class.getName();
}
- public String getDriverVersion() throws SQLException {
- return "2.0.x";
- }
-
- public int getDriverMajorVersion() {
- return 2;
- }
-
- public int getDriverMinorVersion() {
- return 0;
- }
-
- public boolean usesLocalFiles() throws SQLException {
- return false;
- }
-
- public boolean usesLocalFilePerTable() throws SQLException {
- return false;
- }
-
-
- public boolean supportsMixedCaseIdentifiers() throws SQLException {
- //像database、table这些对象的标识符,在存储时是否采用大小写混合的模式
- return false;
- }
-
- public boolean storesUpperCaseIdentifiers() throws SQLException {
- return false;
- }
-
- public boolean storesLowerCaseIdentifiers() throws SQLException {
- return true;
- }
-
- public boolean storesMixedCaseIdentifiers() throws SQLException {
- return false;
- }
-
- public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
- //像database、table这些对象的标识符,在存储时是否采用大小写混合、并带引号的模式
- return false;
- }
-
- public boolean storesUpperCaseQuotedIdentifiers() throws SQLException {
- return false;
- }
-
- public boolean storesLowerCaseQuotedIdentifiers() throws SQLException {
- return false;
- }
-
- public boolean storesMixedCaseQuotedIdentifiers() throws SQLException {
- return false;
- }
-
- public String getIdentifierQuoteString() throws SQLException {
- return " ";
- }
-
- public String getSQLKeywords() throws SQLException {
- return null;
- }
-
- public String getNumericFunctions() throws SQLException {
- return null;
- }
-
- public String getStringFunctions() throws SQLException {
- return null;
- }
-
- public String getSystemFunctions() throws SQLException {
- return null;
- }
-
- public String getTimeDateFunctions() throws SQLException {
- return null;
- }
-
- public String getSearchStringEscape() throws SQLException {
- return null;
- }
-
- public String getExtraNameCharacters() throws SQLException {
- return null;
- }
-
- public boolean supportsAlterTableWithAddColumn() throws SQLException {
- return true;
- }
-
- public boolean supportsAlterTableWithDropColumn() throws SQLException {
- return true;
- }
-
- public boolean supportsColumnAliasing() throws SQLException {
- return true;
- }
-
- public boolean nullPlusNonNullIsNull() throws SQLException {
- // null + non-null != null
- return false;
- }
-
- public boolean supportsConvert() throws SQLException {
- // 是否支持转换函数convert
- return false;
- }
-
- public boolean supportsConvert(int fromType, int toType) throws SQLException {
- return false;
- }
-
- public boolean supportsTableCorrelationNames() throws SQLException {
- return false;
- }
-
- public boolean supportsDifferentTableCorrelationNames() throws SQLException {
- return false;
- }
-
- public boolean supportsExpressionsInOrderBy() throws SQLException {
- return false;
- }
-
- public boolean supportsOrderByUnrelated() throws SQLException {
- return false;
- }
-
- public boolean supportsGroupBy() throws SQLException {
- return true;
- }
-
- public boolean supportsGroupByUnrelated() throws SQLException {
- return false;
- }
-
- public boolean supportsGroupByBeyondSelect() throws SQLException {
- return false;
- }
-
- public boolean supportsLikeEscapeClause() throws SQLException {
- return false;
- }
-
- public boolean supportsMultipleResultSets() throws SQLException {
- return false;
- }
-
- public boolean supportsMultipleTransactions() throws SQLException {
- return false;
- }
-
- public boolean supportsNonNullableColumns() throws SQLException {
- return false;
- }
-
- public boolean supportsMinimumSQLGrammar() throws SQLException {
- return false;
- }
-
- public boolean supportsCoreSQLGrammar() throws SQLException {
- return false;
- }
-
- public boolean supportsExtendedSQLGrammar() throws SQLException {
- return false;
- }
-
- public boolean supportsANSI92EntryLevelSQL() throws SQLException {
- return false;
- }
-
- public boolean supportsANSI92IntermediateSQL() throws SQLException {
- return false;
- }
-
- public boolean supportsANSI92FullSQL() throws SQLException {
- return false;
- }
-
- public boolean supportsIntegrityEnhancementFacility() throws SQLException {
- return false;
- }
-
- public boolean supportsOuterJoins() throws SQLException {
- return false;
- }
-
- public boolean supportsFullOuterJoins() throws SQLException {
- return false;
- }
-
- public boolean supportsLimitedOuterJoins() throws SQLException {
- return false;
- }
-
- public String getSchemaTerm() throws SQLException {
- return null;
- }
-
- public String getProcedureTerm() throws SQLException {
- return null;
- }
-
- public String getCatalogTerm() throws SQLException {
- return "database";
- }
-
- public boolean isCatalogAtStart() throws SQLException {
- return true;
- }
-
- public String getCatalogSeparator() throws SQLException {
- return ".";
- }
-
- public boolean supportsSchemasInDataManipulation() throws SQLException {
- return false;
- }
-
- public boolean supportsSchemasInProcedureCalls() throws SQLException {
- return false;
- }
-
- public boolean supportsSchemasInTableDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsSchemasInIndexDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsCatalogsInDataManipulation() throws SQLException {
- return true;
- }
-
- public boolean supportsCatalogsInProcedureCalls() throws SQLException {
- return false;
- }
-
- public boolean supportsCatalogsInTableDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsCatalogsInIndexDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException {
- return false;
- }
-
- public boolean supportsPositionedDelete() throws SQLException {
- return false;
- }
-
- public boolean supportsPositionedUpdate() throws SQLException {
- return false;
- }
-
- public boolean supportsSelectForUpdate() throws SQLException {
- return false;
- }
-
- public boolean supportsStoredProcedures() throws SQLException {
- return false;
- }
-
- public boolean supportsSubqueriesInComparisons() throws SQLException {
- return false;
- }
-
- public boolean supportsSubqueriesInExists() throws SQLException {
- return false;
- }
-
- public boolean supportsSubqueriesInIns() throws SQLException {
- return false;
- }
-
- public boolean supportsSubqueriesInQuantifieds() throws SQLException {
- return false;
- }
-
- public boolean supportsCorrelatedSubqueries() throws SQLException {
- return false;
- }
-
- public boolean supportsUnion() throws SQLException {
- return false;
- }
-
- public boolean supportsUnionAll() throws SQLException {
- return false;
- }
-
- public boolean supportsOpenCursorsAcrossCommit() throws SQLException {
- return false;
- }
-
- public boolean supportsOpenCursorsAcrossRollback() throws SQLException {
- return false;
- }
-
- public boolean supportsOpenStatementsAcrossCommit() throws SQLException {
- return false;
- }
-
- public boolean supportsOpenStatementsAcrossRollback() throws SQLException {
- return false;
- }
-
- public int getMaxBinaryLiteralLength() throws SQLException {
- return 0;
- }
-
- public int getMaxCharLiteralLength() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnsInGroupBy() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnsInIndex() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnsInOrderBy() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnsInSelect() throws SQLException {
- return 0;
- }
-
- public int getMaxColumnsInTable() throws SQLException {
- return 0;
- }
-
- public int getMaxConnections() throws SQLException {
- return 0;
- }
-
- public int getMaxCursorNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxIndexLength() throws SQLException {
- return 0;
- }
-
- public int getMaxSchemaNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxProcedureNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxCatalogNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxRowSize() throws SQLException {
- return 0;
- }
-
- public boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
- return false;
- }
-
- public int getMaxStatementLength() throws SQLException {
- return 0;
- }
-
- public int getMaxStatements() throws SQLException {
- return 0;
- }
-
- public int getMaxTableNameLength() throws SQLException {
- return 0;
- }
-
- public int getMaxTablesInSelect() throws SQLException {
- return 0;
- }
-
- public int getMaxUserNameLength() throws SQLException {
- return 0;
- }
-
- public int getDefaultTransactionIsolation() throws SQLException {
- return Connection.TRANSACTION_NONE;
- }
-
- public boolean supportsTransactions() throws SQLException {
- return false;
- }
-
- public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
- if (level == Connection.TRANSACTION_NONE)
- return true;
- return false;
- }
-
- public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
- return false;
- }
-
- public boolean supportsDataManipulationTransactionsOnly() throws SQLException {
- return false;
- }
-
- public boolean dataDefinitionCausesTransactionCommit() throws SQLException {
- return false;
- }
-
- public boolean dataDefinitionIgnoredInTransactions() throws SQLException {
- return false;
- }
-
- public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
- throws SQLException {
- return null;
- }
-
- public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
- String columnNamePattern) throws SQLException {
- return null;
- }
-
/**
* @Param catalog : database名称,"" 表示不属于任何database的table,null表示不使用database来缩小范围
* @Param schemaPattern : schema名称,""表示
@@ -545,696 +59,38 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
if (conn == null || conn.isClosed()) {
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
}
-
- 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;
-
- stmt.execute("use " + dbname);
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- List 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);
-
- List rowDataList = new ArrayList<>();
- ResultSet tables = stmt.executeQuery("show tables");
- while (tables.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(10);
- rowData.setString(0, dbname);
- rowData.setString(2, tables.getString("table_name"));
- rowData.setString(3, "TABLE");
- rowData.setString(4, "");
- rowDataList.add(rowData);
- }
-
- ResultSet stables = stmt.executeQuery("show stables");
- while (stables.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(10);
- rowData.setString(0, dbname);
- rowData.setString(2, stables.getString("name"));
- rowData.setString(3, "TABLE");
- rowData.setString(4, "STABLE");
- rowDataList.add(rowData);
- }
- resultSet.setRowDataList(rowDataList);
- return resultSet;
- }
+ return super.getTables(catalog, schemaPattern, tableNamePattern, types, conn);
}
- public ResultSet getSchemas() throws SQLException {
- return getEmptyResultSet();
- }
public ResultSet getCatalogs() throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
-
- try (Statement stmt = conn.createStatement()) {
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List columnMetaDataList = new ArrayList<>(24);
- // 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);
-
- List rowDataList = new ArrayList<>();
- ResultSet rs = stmt.executeQuery("show databases");
- while (rs.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(1);
- rowData.setString(0, rs.getString("name"));
- rowDataList.add(rowData);
- }
- resultSet.setRowDataList(rowDataList);
- return resultSet;
- }
+ return super.getCatalogs(conn);
}
public ResultSet getTableTypes() throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
-
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List 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);
-
- // set up rowDataList
- List rowDataList = new ArrayList<>();
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(1);
- rowData.setString(0, "TABLE");
- rowDataList.add(rowData);
- rowData = new TSDBResultSetRowData(1);
- rowData.setString(0, "STABLE");
- rowDataList.add(rowData);
- resultSet.setRowDataList(rowDataList);
-
- return resultSet;
+ return super.getTableTypes();
}
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
-
- 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;
-
- stmt.execute("use " + dbname);
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List columnMetaDataList = new ArrayList<>(24);
- // 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
- columnMetaDataList.add(null);
- // 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);
- resultSet.setColumnMetaDataList(columnMetaDataList);
-
-
- // set up rowDataList
- ResultSet rs = stmt.executeQuery("describe " + dbname + "." + tableNamePattern);
- List rowDataList = new ArrayList<>();
- int index = 0;
- while (rs.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(24);
- // set TABLE_CAT
- rowData.setString(0, dbname);
- // set TABLE_NAME
- rowData.setString(2, tableNamePattern);
- // set COLUMN_NAME
- rowData.setString(3, rs.getString("Field"));
- // set DATA_TYPE
- String typeName = rs.getString("Type");
- rowData.setInt(4, getDataType(typeName));
- // set TYPE_NAME
- rowData.setString(5, typeName);
- // set COLUMN_SIZE
- int length = rs.getInt("Length");
- rowData.setInt(6, getColumnSize(typeName, length));
- // set DECIMAL_DIGITS
- rowData.setInt(8, getDecimalDigits(typeName));
- // set NUM_PREC_RADIX
- rowData.setInt(9, 10);
- // set NULLABLE
- rowData.setInt(10, getNullable(index, typeName));
- // set REMARKS
- rowData.setString(11, rs.getString("Note"));
- rowDataList.add(rowData);
- index++;
- }
- resultSet.setRowDataList(rowDataList);
- return resultSet;
-
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- private int getNullable(int index, String typeName) {
- if (index == 0 && "TIMESTAMP".equals(typeName))
- return DatabaseMetaData.columnNoNulls;
- return DatabaseMetaData.columnNullable;
- }
-
- private int getColumnSize(String typeName, int length) {
- switch (typeName) {
- case "TIMESTAMP":
- return 23;
-
- default:
- return 0;
- }
- }
-
- private int getDecimalDigits(String typeName) {
- switch (typeName) {
- case "FLOAT":
- return 5;
- case "DOUBLE":
- return 9;
- default:
- return 0;
- }
- }
-
- private int getDataType(String typeName) {
- switch (typeName) {
- 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 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 {
- return getEmptyResultSet();
- }
-
- public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable)
- throws SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException {
- return getEmptyResultSet();
+ return super.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern, conn);
}
public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
-
- 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;
-
- stmt.execute("use " + dbname);
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List 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);
-
- // set rowData
- List rowDataList = new ArrayList<>();
- ResultSet rs = stmt.executeQuery("describe " + dbname + "." + table);
- rs.next();
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(6);
- rowData.setString(0, null);
- rowData.setString(1, null);
- rowData.setString(2, table);
- String pkName = rs.getString(1);
- rowData.setString(3, pkName);
- rowData.setInt(4, 1);
- rowData.setString(5, pkName);
- rowDataList.add(rowData);
- resultSet.setRowDataList(rowDataList);
- return resultSet;
- }
+ return super.getPrimaryKeys(catalog, schema, table, conn);
}
- public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable,
- String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getTypeInfo() throws SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate)
- throws SQLException {
- return getEmptyResultSet();
- }
-
- public boolean supportsResultSetType(int type) throws SQLException {
- return false;
- }
-
- public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException {
- return false;
- }
-
- public boolean ownUpdatesAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean ownDeletesAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean ownInsertsAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean othersUpdatesAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean othersDeletesAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean othersInsertsAreVisible(int type) throws SQLException {
- return false;
- }
-
- public boolean updatesAreDetected(int type) throws SQLException {
- return false;
- }
-
- public boolean deletesAreDetected(int type) throws SQLException {
- return false;
- }
-
- public boolean insertsAreDetected(int type) throws SQLException {
- return false;
- }
-
- public boolean supportsBatchUpdates() throws SQLException {
- return false;
- }
-
- public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types)
- throws SQLException {
- return getEmptyResultSet();
- }
-
- public Connection getConnection() throws SQLException {
- return this.conn;
- }
-
- public boolean supportsSavepoints() throws SQLException {
- return false;
- }
-
- public boolean supportsNamedParameters() throws SQLException {
- return false;
- }
-
- public boolean supportsMultipleOpenResults() throws SQLException {
- return false;
- }
-
- public boolean supportsGetGeneratedKeys() throws SQLException {
- return false;
- }
-
- public ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws
- SQLException {
- return getEmptyResultSet();
- }
-
- public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws
- SQLException {
+ public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
-
- 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;
-
- stmt.execute("use " + dbname);
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List 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);
-
- ResultSet rs = stmt.executeQuery("show tables like '" + tableNamePattern + "'");
- List rowDataList = new ArrayList<>();
- while (rs.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(4);
- rowData.setString(2, rs.getString(1));
- rowData.setString(3, rs.getString(4));
- rowDataList.add(rowData);
- }
- resultSet.setRowDataList(rowDataList);
- return resultSet;
- }
+ return super.getSuperTables(catalog, schemaPattern, tableNamePattern, conn);
}
- public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern,
- String attributeNamePattern) throws SQLException {
- return getEmptyResultSet();
- }
-
- public boolean supportsResultSetHoldability(int holdability) throws SQLException {
- if (holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT)
- return true;
- return false;
- }
-
- public int getResultSetHoldability() throws SQLException {
- return ResultSet.HOLD_CURSORS_OVER_COMMIT;
- }
-
- public int getDatabaseMajorVersion() throws SQLException {
- return 2;
- }
-
- public int getDatabaseMinorVersion() throws SQLException {
- return 0;
- }
-
- public int getJDBCMajorVersion() throws SQLException {
- return 2;
- }
-
- public int getJDBCMinorVersion() throws SQLException {
- return 0;
- }
-
- public int getSQLStateType() throws SQLException {
- return 0;
- }
-
- public boolean locatorsUpdateCopy() throws SQLException {
- return false;
- }
-
- public boolean supportsStatementPooling() throws SQLException {
- return false;
- }
-
- public RowIdLifetime getRowIdLifetime() throws SQLException {
- return null;
- }
-
- public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
- return null;
- }
-
- public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
- return false;
- }
-
- public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
- return false;
- }
-
- public ResultSet getClientInfoProperties() throws SQLException {
- return getEmptyResultSet();
- }
-
- 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 {
- return getEmptyResultSet();
- }
-
- public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern,
- String columnNamePattern) throws SQLException {
- return getEmptyResultSet();
- }
-
- public boolean generatedKeyAlwaysReturned() throws SQLException {
- return false;
- }
-
- private ResultSet getEmptyResultSet() {
- return new EmptyResultSet();
- }
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
index 3c372cc503..0ef64e4a9e 100644
--- a/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
+++ b/src/connector/jdbc/src/main/java/com/taosdata/jdbc/rs/RestfulDatabaseMetaData.java
@@ -29,177 +29,53 @@ public class RestfulDatabaseMetaData extends AbstractDatabaseMetaData {
}
@Override
- public String getSchemaTerm() throws SQLException {
- return null;
+ public String getDriverName() throws SQLException {
+ return RestfulDriver.class.getName();
}
- @Override
- public String getProcedureTerm() throws SQLException {
- return null;
- }
-
- @Override
- public String getCatalogTerm() throws SQLException {
- return null;
- }
-
- @Override
- public boolean isCatalogAtStart() throws SQLException {
- return false;
- }
@Override
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
- Statement stmt = null;
- if (null != connection && !connection.isClosed()) {
- stmt = connection.createStatement();
- if (catalog == null || catalog.length() < 1) {
- catalog = connection.getCatalog();
- }
- stmt.executeUpdate("use " + catalog);
- ResultSet resultSet0 = stmt.executeQuery("show tables");
- GetTablesResultSet getTablesResultSet = new GetTablesResultSet(resultSet0, catalog, schemaPattern, tableNamePattern, types);
- return getTablesResultSet;
- } else {
+ if (connection == null || connection.isClosed()) {
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
}
+ return super.getTables(catalog, schemaPattern, tableNamePattern, types, connection);
}
@Override
public ResultSet getCatalogs() throws SQLException {
- if (connection != null && !connection.isClosed()) {
- Statement stmt = connection.createStatement();
- ResultSet resultSet0 = stmt.executeQuery("show databases");
- CatalogResultSet resultSet = new CatalogResultSet(resultSet0);
- return resultSet;
- } else {
- return new EmptyResultSet();
+ if (connection == null || connection.isClosed())
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ return super.getCatalogs(connection);
+ }
+
+ @Override
+ public ResultSet getTableTypes() throws SQLException {
+ if (connection == null || connection.isClosed()) {
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
}
+ return super.getTableTypes();
}
@Override
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
- Statement stmt = null;
- if (null != connection && !connection.isClosed()) {
- stmt = connection.createStatement();
- if (catalog == null || catalog.length() < 1) {
- catalog = connection.getCatalog();
- }
- stmt.execute("use " + catalog);
-
- DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
- // set up ColumnMetaDataList
- List columnMetaDataList = new ArrayList<>(24);
- columnMetaDataList.add(null);
- columnMetaDataList.add(null);
- // add TABLE_NAME
- ColumnMetaData colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(3);
- colMetaData.setColName("TABLE_NAME");
- colMetaData.setColSize(193);
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_BINARY);
- columnMetaDataList.add(colMetaData);
- // add COLUMN_NAME
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(4);
- colMetaData.setColName("COLUMN_NAME");
- colMetaData.setColSize(65);
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_BINARY);
- columnMetaDataList.add(colMetaData);
- // add DATA_TYPE
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(5);
- colMetaData.setColName("DATA_TYPE");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_INT);
- columnMetaDataList.add(colMetaData);
- // add TYPE_NAME
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(6);
- colMetaData.setColName("TYPE_NAME");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_BINARY);
- columnMetaDataList.add(colMetaData);
- // add COLUMN_SIZE
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(7);
- colMetaData.setColName("COLUMN_SIZE");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_INT);
- columnMetaDataList.add(colMetaData);
- // add BUFFER_LENGTH ,not used
- columnMetaDataList.add(null);
- // add DECIMAL_DIGITS
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(9);
- colMetaData.setColName("DECIMAL_DIGITS");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_INT);
- columnMetaDataList.add(colMetaData);
- // add NUM_PREC_RADIX
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(10);
- colMetaData.setColName("NUM_PREC_RADIX");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_INT);
- columnMetaDataList.add(colMetaData);
- // add NULLABLE
- colMetaData = new ColumnMetaData();
- colMetaData.setColIndex(11);
- colMetaData.setColName("NULLABLE");
- colMetaData.setColType(TSDBConstants.TSDB_DATA_TYPE_INT);
- columnMetaDataList.add(colMetaData);
-
- resultSet.setColumnMetaDataList(columnMetaDataList);
-
- // set up rowDataList
- ResultSet resultSet0 = stmt.executeQuery("describe " + tableNamePattern);
- List rowDataList = new ArrayList<>();
- int index = 0;
- while (resultSet0.next()) {
- TSDBResultSetRowData rowData = new TSDBResultSetRowData(24);
- // set TABLE_NAME
- rowData.setString(2, tableNamePattern);
- // set COLUMN_NAME
- rowData.setString(3, resultSet0.getString(1));
- // set DATA_TYPE
- String typeName = resultSet0.getString(2);
- rowData.setInt(4, getDataType(typeName));
- // set TYPE_NAME
- rowData.setString(5, typeName);
- // set COLUMN_SIZE
- int length = resultSet0.getInt(3);
- rowData.setInt(6, getColumnSize(typeName, length));
- // set DECIMAL_DIGITS
- rowData.setInt(8, getDecimalDigits(typeName));
- // set NUM_PREC_RADIX
- rowData.setInt(9, 10);
- // set NULLABLE
- rowData.setInt(10, getNullable(index, typeName));
- rowDataList.add(rowData);
- index++;
- }
- resultSet.setRowDataList(rowDataList);
-
- return resultSet;
- } else {
+ if (connection == null || connection.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
- }
+ return super.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern, connection);
}
@Override
- public long getMaxLogicalLobSize() throws SQLException {
- return 0;
+ public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
+ if (connection == null || connection.isClosed())
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ return super.getPrimaryKeys(catalog, schema, table, connection);
}
@Override
- public boolean supportsRefCursors() throws SQLException {
- return false;
+ public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
+ if (connection == null || connection.isClosed())
+ throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
+ return super.getSuperTables(catalog, schemaPattern, tableNamePattern, connection);
}
-
- @Override
- public T unwrap(Class iface) throws SQLException {
- return null;
- }
-
- @Override
- public boolean isWrapperFor(Class> iface) throws SQLException {
- return false;
- }
}
diff --git a/src/connector/jdbc/src/test/java/TestPreparedStatement.java b/src/connector/jdbc/src/test/java/TestPreparedStatement.java
deleted file mode 100644
index 1edb957493..0000000000
--- a/src/connector/jdbc/src/test/java/TestPreparedStatement.java
+++ /dev/null
@@ -1,36 +0,0 @@
-import com.taosdata.jdbc.TSDBDriver;
-import com.taosdata.jdbc.TSDBPreparedStatement;
-
-import java.sql.*;
-import java.util.Properties;
-
-public class TestPreparedStatement {
-
- public static void main(String[] args) throws SQLException {
- Connection connection = null;
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, "localhost");
- connection = DriverManager.getConnection("jdbc:TAOS://localhost:0/", properties);
- String rawSql = "select * from test.log0601";
-// String[] params = new String[]{"ts", "c1"};
- PreparedStatement pstmt = (TSDBPreparedStatement) connection.prepareStatement(rawSql);
- ResultSet resSet = pstmt.executeQuery();
- while(resSet.next()) {
- for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
- System.out.printf("%d: %s \n", i, resSet.getString(i));
- }
- }
- resSet.close();
- pstmt.close();
- connection.close();
-
- } catch (Exception e) {
- e.printStackTrace();
- if (null != connection) {
- connection.close();
- }
- }
- }
-}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
index 7d96cbb538..4046e3edf6 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/BatchInsertTest.java
@@ -13,17 +13,17 @@ import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
-public class BatchInsertTest extends BaseTest {
+public class BatchInsertTest {
- static Connection connection = null;
- static Statement statement = null;
- static String dbName = "test";
- static String stbName = "meters";
- static String host = "localhost";
- static int numOfTables = 30;
- final static int numOfRecordsPerTable = 1000;
- static long ts = 1496732686000l;
- final static String tablePrefix = "t";
+ private Connection connection;
+
+ private static String dbName = "test";
+ private static String stbName = "meters";
+ private static String host = "127.0.0.1";
+ private static int numOfTables = 30;
+ private static int numOfRecordsPerTable = 1000;
+ private static long ts = 1496732686000l;
+ private static String tablePrefix = "t";
@Before
public void createDatabase() throws SQLException {
@@ -32,65 +32,58 @@ public class BatchInsertTest extends BaseTest {
} catch (ClassNotFoundException e) {
return;
}
-
+
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
-
- statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("use " + dbName);
- String createTableSql = "create table " + stbName + "(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))";
- statement.executeUpdate(createTableSql);
+ Statement stmt = connection.createStatement();
+ stmt.execute("drop database if exists " + dbName);
+ stmt.execute("create database if not exists " + dbName);
+ stmt.execute("use " + dbName);
- for(int i = 0; i < numOfTables; i++) {
+ String createTableSql = "create table " + stbName + "(ts timestamp, f1 int, f2 int, f3 int) tags(areaid int, loc binary(20))";
+ stmt.execute(createTableSql);
+
+ for (int i = 0; i < numOfTables; i++) {
String loc = i % 2 == 0 ? "beijing" : "shanghai";
- String createSubTalbesSql = "create table " + tablePrefix + i + " using " + stbName + " tags(" + i + ", '" + loc + "')";
- statement.executeUpdate(createSubTalbesSql);
+ String createSubTalbesSql = "create table " + tablePrefix + i + " using " + stbName + " tags(" + i + ", '" + loc + "')";
+ stmt.execute(createSubTalbesSql);
}
-
+ stmt.close();
}
-
+
@Test
- public void testBatchInsert() throws SQLException{
-
- ExecutorService executorService = Executors.newFixedThreadPool(numOfTables);
-
- for (int i = 0; i < numOfTables; i++) {
- final int index = i;
- executorService.execute(new Runnable() {
- @Override
- public void run() {
- try {
- long startTime = System.currentTimeMillis();
- Statement statement = connection.createStatement(); // get statement
- StringBuilder sb = new StringBuilder();
- sb.append("INSERT INTO " + tablePrefix + index + " VALUES");
- Random rand = new Random();
- for (int j = 1; j <= numOfRecordsPerTable; j++) {
- sb.append("(" + (ts + j) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ", ");
- sb.append(rand.nextInt(100) + ")");
- }
- statement.addBatch(sb.toString());
- statement.executeBatch();
- long endTime = System.currentTimeMillis();
- System.out.println("Thread " + index + " takes " + (endTime - startTime) + " microseconds");
- connection.commit();
- statement.close();
- } catch (Exception e) {
- e.printStackTrace();
+ public void testBatchInsert() throws SQLException {
+ ExecutorService executorService = Executors.newFixedThreadPool(numOfTables);
+ for (int i = 0; i < numOfTables; i++) {
+ final int index = i;
+ executorService.execute(() -> {
+ try {
+ long startTime = System.currentTimeMillis();
+ Statement statement = connection.createStatement(); // get statement
+ StringBuilder sb = new StringBuilder();
+ sb.append("INSERT INTO " + tablePrefix + index + " VALUES");
+ Random rand = new Random();
+ for (int j = 1; j <= numOfRecordsPerTable; j++) {
+ sb.append("(" + (ts + j) + ", ");
+ sb.append(rand.nextInt(100) + ", ");
+ sb.append(rand.nextInt(100) + ", ");
+ sb.append(rand.nextInt(100) + ")");
}
+ statement.addBatch(sb.toString());
+ statement.executeBatch();
+ long endTime = System.currentTimeMillis();
+ System.out.println("Thread " + index + " takes " + (endTime - startTime) + " microseconds");
+ connection.commit();
+ statement.close();
+ } catch (Exception e) {
+ e.printStackTrace();
}
});
}
-
executorService.shutdown();
try {
@@ -100,21 +93,23 @@ public class BatchInsertTest extends BaseTest {
}
Statement statement = connection.createStatement();
- ResultSet rs = statement.executeQuery("select * from meters");
+ ResultSet rs = statement.executeQuery("select * from meters");
int num = 0;
while (rs.next()) {
num++;
- }
- assertEquals(num, numOfTables * numOfRecordsPerTable);
+ }
+ assertEquals(num, numOfTables * numOfRecordsPerTable);
rs.close();
}
-
@After
- public void close() throws Exception {
- statement.close();
- connection.close();
- Thread.sleep(10);
+ public void close() {
+ try {
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
-
+
}
\ No newline at end of file
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java
index a54ece4ead..66d23f2ffa 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ConnectionTest.java
@@ -1,5 +1,6 @@
package com.taosdata.jdbc;
+import org.junit.Assert;
import org.junit.Test;
import java.sql.Connection;
@@ -8,53 +9,31 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
-import static org.junit.Assert.assertTrue;
-public class ConnectionTest extends BaseTest {
- static Connection connection = null;
- static Statement statement = null;
- static String dbName = "test";
- static String stbName = "st";
- static String host = "localhost";
+public class ConnectionTest {
+ private Connection connection;
+ private Statement statement;
+ private static String host = "127.0.0.1";
@Test
- public void testConnection() throws SQLException {
- try {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- } catch (ClassNotFoundException e) {
- return;
- }
+ public void testConnection() {
Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
-
- assertTrue(null != connection);
- statement = connection.createStatement();
- assertTrue(null != statement);
-
- // try reconnect
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
try {
- statement.execute("create database if not exists " + dbName);
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+ Assert.assertTrue(null != connection);
+ statement = connection.createStatement();
+ Assert.assertTrue(null != statement);
+ statement.close();
+ connection.close();
+ } catch (ClassNotFoundException e) {
+ return;
} catch (SQLException e) {
- assert false : "create database error: " + e.getMessage();
- }
-
- try {
- if (!connection.isClosed()) {
- if (!statement.isClosed()) {
- statement.executeUpdate("drop database " + dbName);
- statement.close();
- }
- connection.close();
- Thread.sleep(10);
- }
- } catch (Exception e) {
- assert false : "close connection error: " + e.getMessage();
+ e.printStackTrace();
}
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java
index dbe16d9fea..9d1884e6c2 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/ImportTest.java
@@ -1,92 +1,112 @@
package com.taosdata.jdbc;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.*;
+import org.junit.runners.MethodSorters;
import java.sql.*;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
-public class ImportTest extends BaseTest {
- Connection connection = null;
- Statement statement = null;
- String dbName = "test";
- String tName = "t0";
- String host = "localhost";
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class ImportTest {
+ private static Connection connection;
+ static String dbName = "test";
+ static String tName = "t0";
+ static String host = "127.0.0.1";
+ private static long ts;
- @Before
- public void createDatabase() throws SQLException {
+ @BeforeClass
+ public static void before() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+
+ Statement stmt = connection.createStatement();
+ stmt.execute("create database if not exists " + dbName);
+ stmt.execute("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+ stmt.close();
+
+ ts = System.currentTimeMillis();
} catch (ClassNotFoundException e) {
- return;
+ e.printStackTrace();
+ } catch (SQLException e) {
+ e.printStackTrace();
}
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
-
- statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
}
@Test
- public void insertData() throws Exception {
- long ts = 1496732686000l;
-
- for (int i = 0; i < 50; i++) {
- ts++;
- int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
- System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
- assertEquals(1, row);
- }
- }
-
- @Test
- public void selectData() throws Exception {
- insertData();
- String sql = "select * from test.t0";
- ResultSet resSet = statement.executeQuery(sql);
-
- while (resSet.next()) {
- for (int i = 1; i <= resSet.getMetaData().getColumnCount(); i++) {
- System.out.printf(i + ": " + resSet.getString(i) + "\t");
+ public void case001_insertData() throws Exception {
+ try (Statement stmt = connection.createStatement()) {
+ for (int i = 0; i < 50; i++) {
+ ts++;
+ int row = stmt.executeUpdate("import into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ System.out.println("import into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
+ assertEquals(1, row);
}
}
- resSet.close();
}
@Test
- public void importData() throws Exception {
- // 避免时间重复
- long ts = 1496732686000l;
-
- StringBuilder sqlBuilder = new StringBuilder("insert into ").append(dbName).append(".").append(tName).append(" values ");
-
- for (int i = 0; i < 50; i++) {
- int a = i / 5;
- long t = ts + a;
- sqlBuilder.append("(").append(t).append(",").append((100 + i)).append(",").append(i).append(") ");
- }
- System.out.println(sqlBuilder.toString());
- int rows = statement.executeUpdate(sqlBuilder.toString());
- System.out.println(rows);
- assertEquals(10, rows);
+ public void case002_checkSum() {
+ Assert.assertEquals(50, select());
}
- @After
- public void close() throws Exception {
- statement.executeUpdate("drop database " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
+ private int select() {
+ int count = 0;
+ try (Statement stmt = connection.createStatement()) {
+ String sql = "select * from " + dbName + "." + tName;
+ ResultSet rs = stmt.executeQuery(sql);
+ while (rs.next()) {
+ count++;
+ }
+ rs.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return count;
+ }
+
+ @Test
+ public void case003_importData() {
+ // 避免时间重复
+ try (Statement stmt = connection.createStatement()) {
+ StringBuilder sqlBuilder = new StringBuilder("import into ").append(dbName).append(".").append(tName).append(" values ");
+ for (int i = 0; i < 50; i++) {
+ int a = i / 5;
+ long t = (++ts) + a;
+ sqlBuilder.append("(").append(t).append(",").append((100 + i)).append(",").append(i).append(") ");
+ }
+ System.out.println(sqlBuilder.toString());
+ int rows = stmt.executeUpdate(sqlBuilder.toString());
+ assertEquals(50, rows);
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void case004_checkSum() {
+ Assert.assertEquals(100, select());
+ }
+
+ @AfterClass
+ public static void close() {
+ try {
+ if (connection != null) {
+ Statement statement = connection.createStatement();
+ statement.executeUpdate("drop database " + dbName);
+ statement.close();
+ connection.close();
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
index 0535214ac1..f52c50ff1a 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/PreparedStatementTest.java
@@ -4,7 +4,6 @@ import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
-import org.junit.runners.MethodSorters;
import java.sql.*;
import java.util.Properties;
@@ -12,7 +11,7 @@ import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-@FixMethodOrder(MethodSorters.DEFAULT)
+@FixMethodOrder()
public class PreparedStatementTest extends BaseTest {
static Connection connection = null;
static PreparedStatement statement = null;
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
index 6c75860e0f..7db37beaf4 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/SelectTest.java
@@ -9,61 +9,73 @@ import java.util.Properties;
import static org.junit.Assert.assertEquals;
-public class SelectTest extends BaseTest {
- Connection connection = null;
- Statement statement = null;
+public class SelectTest {
+ Connection connection;
String dbName = "test";
String tName = "t0";
- String host = "localhost";
+ String host = "127.0.0.1";
@Before
- public void createDatabaseAndTable() throws SQLException {
+ public void createDatabaseAndTable() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+
+ Statement stmt = connection.createStatement();
+ stmt.execute("drop database if exists " + dbName);
+ stmt.execute("create database if not exists " + dbName);
+ stmt.execute("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
+ stmt.close();
} catch (ClassNotFoundException e) {
return;
+ } catch (SQLException e) {
+ e.printStackTrace();
}
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
- statement = connection.createStatement();
- statement.executeUpdate("drop database if exists " + dbName);
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeUpdate("create table if not exists " + dbName + "." + tName + " (ts timestamp, k int, v int)");
}
@Test
- public void selectData() throws SQLException {
+ public void selectData() {
long ts = 1496732686000l;
- for (int i = 0; i < 50; i++) {
- ts++;
- int row = statement.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
- System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
- assertEquals(1, row);
+ try (Statement stmt = connection.createStatement()) {
+ for (int i = 0; i < 50; i++) {
+ ts++;
+ int row = stmt.executeUpdate("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")");
+ System.out.println("insert into " + dbName + "." + tName + " values (" + ts + ", " + (100 + i) + ", " + i + ")\t" + row);
+ assertEquals(1, row);
+ }
+
+ String sql = "select * from " + dbName + "." + tName;
+ ResultSet resSet = stmt.executeQuery(sql);
+
+ int num = 0;
+ while (resSet.next()) {
+ num++;
+ }
+ resSet.close();
+ assertEquals(num, 50);
+ } catch (SQLException e) {
+ e.printStackTrace();
}
- String sql = "select * from " + dbName + "." + tName;
- ResultSet resSet = statement.executeQuery(sql);
-
- int num = 0;
- while (resSet.next()) {
- num++;
- }
- resSet.close();
-
- assertEquals(num, 50);
}
@After
- public void close() throws Exception {
- statement.executeUpdate("drop database " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
+ public void close() {
+ try {
+ if (connection != null) {
+ Statement stmt = connection.createStatement();
+ stmt.executeUpdate("drop database " + dbName);
+ stmt.close();
+ connection.close();
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
index 6e01fb7c34..c86a0b4c6a 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/StableTest.java
@@ -12,69 +12,66 @@ import java.util.Properties;
import static org.junit.Assert.assertEquals;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-public class StableTest extends BaseTest {
- static Connection connection = null;
- static Statement statement = null;
- static String dbName = "test";
- static String stbName = "st";
- static String host = "localhost";
+public class StableTest {
+
+ private static Connection connection;
+ private static String dbName = "test";
+ private static String stbName = "st";
+ private static String host = "127.0.0.1";
@BeforeClass
- public static void createDatabase() throws SQLException {
+ public static void createDatabase() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
+ Statement statement = connection.createStatement();
+ statement.execute("create database if not exists " + dbName);
+ statement.execute("use " + dbName);
+ statement.close();
} catch (ClassNotFoundException e) {
return;
+ } catch (SQLException e) {
+ e.printStackTrace();
}
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":0/", properties);
-
- statement = connection.createStatement();
- statement.executeUpdate("create database if not exists " + dbName);
- statement.executeQuery("use " + dbName);
}
-// @Test
- public void createStable() {
- String sql = "create table " + stbName + " (ts timestamp, v1 int, v2 int) tags (tg nchar(20)) ";
-
- try {
- statement.executeUpdate(sql);
+ @Test
+ public void case001_createSuperTable() {
+ try (Statement stmt = connection.createStatement()) {
+ final String sql = "create table " + stbName + " (ts timestamp, v1 int, v2 int) tags (tg nchar(20)) ";
+ stmt.execute(sql);
} catch (SQLException e) {
assert false : "error create stable" + e.getMessage();
}
}
-// @Test
- public void createTable() {
- String sql = "create table t1 using " + stbName + " tags (\"beijing\")";
-
- try {
- statement.executeUpdate(sql);
+ @Test
+ public void case002_createTable() {
+ try (Statement stmt = connection.createStatement()) {
+ final String sql = "create table t1 using " + stbName + " tags (\"beijing\")";
+ stmt.execute(sql);
} catch (SQLException e) {
assert false : "error create table" + e.getMessage();
}
}
@Test
- public void describeSTable() {
- createStable();
- String sql = "describe " + stbName;
+ public void case003_describeSTable() {
int num = 0;
- System.out.println("describe stable");
- try {
- ResultSet res = statement.executeQuery(sql);
- while (res.next()) {
- for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
- System.out.printf("%d: %s\n", i, res.getString(i));
+ try (Statement stmt = connection.createStatement()) {
+ String sql = "describe " + stbName;
+ ResultSet rs = stmt.executeQuery(sql);
+ while (rs.next()) {
+ for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
+ System.out.println(i + ":" + rs.getString(i));
}
num++;
}
- res.close();
+ rs.close();
assertEquals(4, num);
} catch (SQLException e) {
assert false : "error describe stable" + e.getMessage();
@@ -82,41 +79,31 @@ public class StableTest extends BaseTest {
}
@Test
- public void describeTable() {
- createTable();
- String sql = "describe t1";
+ public void case004_describeTable() {
int num = 0;
- System.out.println("describe table");
- try {
- ResultSet res = statement.executeQuery(sql);
- while (res.next()) {
- for (int i = 1; i <= res.getMetaData().getColumnCount(); i++) {
- System.out.printf("%d: %s\n", i, res.getString(i));
+ try (Statement stmt = connection.createStatement()) {
+ ResultSet rs = stmt.executeQuery("describe t1");
+ while (rs.next()) {
+ for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
+ System.out.printf("%d: %s\n", i, rs.getString(i));
}
num++;
}
- res.close();
+ rs.close();
assertEquals(4, num);
} catch (SQLException e) {
assert false : "error describe stable" + e.getMessage();
}
}
- // @Test
- public void validCreateSql() {
- String sql = "create table t2 using " + stbName + " tags (\"beijing\")";
- boolean valid = ((TSDBConnection) connection).getConnection().validateCreateTableSql(sql);
- assertEquals(true, valid);
- }
-
@AfterClass
- public static void close() throws Exception {
- if (!statement.isClosed()) {
- statement.executeUpdate("drop database " + dbName);
- statement.close();
- connection.close();
- Thread.sleep(10);
-
+ public static void close() {
+ try {
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
}
+
}
}
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
index 77223b40fa..8066b38573 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/TSDBDatabaseMetaDataTest.java
@@ -1,25 +1,41 @@
package com.taosdata.jdbc;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.*;
import java.sql.*;
import java.util.Properties;
public class TSDBDatabaseMetaDataTest {
private TSDBDatabaseMetaData metaData;
- private static final String host = "localhost";
+ private static final String host = "127.0.0.1";
+ private Connection connection;
- @Before
- public void before() throws ClassNotFoundException, SQLException {
- Class.forName("com.taosdata.jdbc.TSDBDriver");
- Properties properties = new Properties();
- properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
- properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
- properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
- metaData = (TSDBDatabaseMetaData) DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata", properties).getMetaData();
+ @BeforeClass
+ public void before() {
+ try {
+ Class.forName("com.taosdata.jdbc.TSDBDriver");
+ Properties properties = new Properties();
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
+ properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
+ connection = DriverManager.getConnection("jdbc:TAOS://" + host + ":6030/?user=root&password=taosdata", properties);
+ metaData = connection.getMetaData().unwrap(TSDBDatabaseMetaData.class);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @AfterClass
+ public void after() {
+ try {
+ if (connection != null)
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
}
@Test
@@ -639,6 +655,7 @@ 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()) {
@@ -658,6 +675,8 @@ public class TSDBDatabaseMetaDataTest {
@Test
public void getCatalogs() throws SQLException {
+ System.out.println("****************************************************");
+
ResultSet catalogs = metaData.getCatalogs();
ResultSetMetaData meta = catalogs.getMetaData();
while (catalogs.next()) {
@@ -670,6 +689,8 @@ public class TSDBDatabaseMetaDataTest {
@Test
public void getTableTypes() throws SQLException {
+ System.out.println("****************************************************");
+
ResultSet tableTypes = metaData.getTableTypes();
while (tableTypes.next()) {
System.out.println(tableTypes.getString("TABLE_TYPE"));
@@ -679,6 +700,8 @@ public class TSDBDatabaseMetaDataTest {
@Test
public void getColumns() throws SQLException {
+ System.out.println("****************************************************");
+
ResultSet columns = metaData.getColumns("log", "", "dn", "");
ResultSetMetaData meta = columns.getMetaData();
while (columns.next()) {
@@ -717,6 +740,8 @@ 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"));
@@ -850,6 +875,8 @@ 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"));
@@ -914,11 +941,6 @@ public class TSDBDatabaseMetaDataTest {
Assert.assertNull(metaData.getRowIdLifetime());
}
- @Test
- public void testGetSchemas() throws SQLException {
- Assert.assertNull(metaData.getSchemas());
- }
-
@Test
public void supportsStoredFunctionsUsingCallSyntax() throws SQLException {
Assert.assertFalse(metaData.supportsStoredFunctionsUsingCallSyntax());
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
index e1e68766b9..918714da22 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/AuthenticationTest.java
@@ -7,8 +7,7 @@ import java.sql.*;
public class AuthenticationTest {
- // private static final String host = "127.0.0.1";
- private static final String host = "master";
+ private static final String host = "127.0.0.1";
private static final String user = "root";
private static final String password = "123456";
private Connection conn;
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDriverTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDriverTest.java
index 3416436615..e239aa068b 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDriverTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulDriverTest.java
@@ -6,7 +6,7 @@ import org.junit.Test;
import java.sql.*;
public class RestfulDriverTest {
- private static final String host = "master";
+ private static final String host = "127.0.0.1";
@Test
public void connect() {
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
index 573ad027b8..ee4b2ed4dd 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/RestfulJDBCTest.java
@@ -9,7 +9,7 @@ import java.util.Random;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class RestfulJDBCTest {
- private static final String host = "master";
+ private static final String host = "127.0.0.1";
private Connection connection;
@Before
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
index 8ff308f854..ad6ed43ac7 100644
--- a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/rs/SQLTest.java
@@ -10,7 +10,7 @@ import java.sql.*;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SQLTest {
- private static final String host = "master";
+ private static final String host = "127.0.0.1";
private static Connection connection;
diff --git a/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/TimeStampUtil.java b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/TimeStampUtil.java
new file mode 100644
index 0000000000..1c6af7e3d2
--- /dev/null
+++ b/src/connector/jdbc/src/test/java/com/taosdata/jdbc/utils/TimeStampUtil.java
@@ -0,0 +1,67 @@
+package com.taosdata.jdbc.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class TimeStampUtil {
+
+ private static final String datetimeFormat = "yyyy-MM-dd HH:mm:ss.SSS";
+
+ public static long datetimeToLong(String dateTime) {
+ SimpleDateFormat sdf = new SimpleDateFormat(datetimeFormat);
+ try {
+ return sdf.parse(dateTime).getTime();
+ } catch (ParseException e) {
+ throw new IllegalArgumentException("invalid datetime string >>> " + dateTime);
+ }
+ }
+
+ public static String longToDatetime(long time) {
+ SimpleDateFormat sdf = new SimpleDateFormat(datetimeFormat);
+ return sdf.format(new Date(time));
+ }
+
+ public static class TimeTuple {
+ public Long start;
+ public Long end;
+ public Long timeGap;
+
+ TimeTuple(long start, long end, long timeGap) {
+ this.start = start;
+ this.end = end;
+ this.timeGap = timeGap;
+ }
+ }
+
+ public static TimeTuple range(long start, long timeGap, long size) {
+ long now = System.currentTimeMillis();
+ if (timeGap < 1)
+ timeGap = 1;
+ if (start == 0)
+ start = now - size * timeGap;
+
+ // 如果size小于1异常
+ if (size < 1)
+ throw new IllegalArgumentException("size less than 1.");
+ // 如果timeGap为1,已经超长,需要前移start
+ if (start + size > now) {
+ start = now - size;
+ return new TimeTuple(start, now, 1);
+ }
+ long end = start + (long) (timeGap * size);
+ if (end > now) {
+ //压缩timeGap
+ end = now;
+ double gap = (end - start) / (size * 1.0f);
+ if (gap < 1.0f) {
+ timeGap = 1;
+ start = end - size;
+ } else {
+ timeGap = (long) gap;
+ end = start + (long) (timeGap * size);
+ }
+ }
+ return new TimeTuple(start, end, timeGap);
+ }
+}
diff --git a/src/rpc/src/rpcUdp.c b/src/rpc/src/rpcUdp.c
index 311676e7d3..167e1ccd8b 100644
--- a/src/rpc/src/rpcUdp.c
+++ b/src/rpc/src/rpcUdp.c
@@ -139,6 +139,7 @@ void taosStopUdpConnection(void *handle) {
pConn = pSet->udpConn + i;
if (pConn->fd >=0) shutdown(pConn->fd, SHUT_RDWR);
if (pConn->fd >=0) taosCloseSocket(pConn->fd);
+ pConn->fd = -1;
}
for (int i = 0; i < pSet->threads; ++i) {
@@ -197,8 +198,13 @@ static void *taosRecvUdpData(void *param) {
while (1) {
dataLen = recvfrom(pConn->fd, pConn->buffer, RPC_MAX_UDP_SIZE, 0, (struct sockaddr *)&sourceAdd, &addLen);
if(dataLen <= 0) {
- tDebug("%s UDP socket was closed, exiting(%s)", pConn->label, strerror(errno));
- break;
+ tDebug("%s UDP socket(fd:%d) receive dataLen(%d) error(%s)", pConn->label, pConn->fd, (int32_t)dataLen, strerror(errno));
+ // for windows usage, remote shutdown also returns - 1 in windows client
+ if (-1 == pConn->fd) {
+ break;
+ } else {
+ continue;
+ }
}
port = ntohs(sourceAdd.sin_port);
diff --git a/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/SubscribeDemo.java
similarity index 85%
rename from src/connector/jdbc/src/test/java/TestTSDBSubscribe.java
rename to tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/SubscribeDemo.java
index 47acb20064..bb3712a302 100644
--- a/src/connector/jdbc/src/test/java/TestTSDBSubscribe.java
+++ b/tests/examples/JDBC/JDBCDemo/src/main/java/com/taosdata/example/SubscribeDemo.java
@@ -1,3 +1,5 @@
+package com.taosdata.example;
+
import com.taosdata.jdbc.TSDBConnection;
import com.taosdata.jdbc.TSDBDriver;
import com.taosdata.jdbc.TSDBResultSet;
@@ -6,9 +8,9 @@ import com.taosdata.jdbc.TSDBSubscribe;
import java.sql.DriverManager;
import java.util.Properties;
-public class TestTSDBSubscribe {
+public class SubscribeDemo {
- public static TSDBConnection connectTDengine(String host, String database) throws Exception {
+ public static TSDBConnection getConnection(String host, String database) throws Exception {
Class.forName("com.taosdata.jdbc.TSDBDriver");
Properties properties = new Properties();
properties.setProperty(TSDBDriver.PROPERTY_KEY_HOST, host);
@@ -17,7 +19,7 @@ public class TestTSDBSubscribe {
properties.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
String cs = String.format("jdbc:TAOS://%s:0/%s", host, database);
- return (TSDBConnection)DriverManager.getConnection(cs, properties);
+ return (TSDBConnection) DriverManager.getConnection(cs, properties);
}
public static void main(String[] args) throws Exception {
@@ -43,21 +45,21 @@ public class TestTSDBSubscribe {
}
}
if (database.isEmpty() || topic.isEmpty() || sql.isEmpty()) {
- System.err.println(usage);
- return;
+ System.err.println(usage);
+ return;
}
TSDBConnection connection = null;
TSDBSubscribe sub = null;
try {
- connection = connectTDengine(host, database);
+ connection = getConnection(host, database);
sub = ((TSDBConnection) connection).subscribe(topic, sql, false);
int total = 0;
- while(true) {
+ while (true) {
TSDBResultSet rs = sub.consume();
int count = 0;
- while(rs.next()) {
+ while (rs.next()) {
count++;
}
total += count;
diff --git a/tests/script/sh/mv_old_data.sh b/tests/script/sh/mv_old_data.sh
index 87fcbb6def..606ee171f1 100755
--- a/tests/script/sh/mv_old_data.sh
+++ b/tests/script/sh/mv_old_data.sh
@@ -32,9 +32,9 @@ NODE_DIR=$SIM_DIR/$NODE_NAME
rm -rf $SIM_DIR/dnode1
rm -rf $SIM_DIR/dnode2
rm -rf $SIM_DIR/dnode3
-rm -rf $SIM_DIR/tsim
tar zxf $SCRIPT_DIR/general/connection/sim.tar.gz -C $SIM_DIR/../
cd $SIM_DIR/../sim
-fqdn=`hostname`
-grep '${fqdn}' -l -r ./* | xargs sed -i 's/${fqdn}/${fqdn}/g'
+fqdn=`hostname -f || hostname`
+grep 'test4' -l -r ./* | xargs sed -i "s/test4/${fqdn}/g"
+grep 'dataDir' -l -r ./* | xargs sed -i "s#/root/TDengine#${TAOS_DIR}#g"