This commit is contained in:
zyyang 2021-01-13 15:52:50 +08:00
parent b2afe151f3
commit 7303c5d031
7 changed files with 429 additions and 192 deletions

View File

@ -497,12 +497,12 @@ public abstract class AbstractDatabaseMetaData implements DatabaseMetaData {
public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
throws SQLException { throws SQLException {
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG); return null;
} }
public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
String columnNamePattern) throws SQLException { String columnNamePattern) throws SQLException {
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG); return null;
} }
public abstract ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) public abstract ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

View File

@ -20,13 +20,11 @@ import java.util.List;
public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData { public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
private String dbProductName = null; private String url;
private String url = null; private String userName;
private String userName = null; private Connection conn;
private Connection conn = null;
public TSDBDatabaseMetaData(String dbProductName, String url, String userName) { public TSDBDatabaseMetaData(String url, String userName) {
this.dbProductName = dbProductName;
this.url = url; this.url = url;
this.userName = userName; this.userName = userName;
} }
@ -116,7 +114,9 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
return false; return false;
} }
public boolean supportsMixedCaseIdentifiers() throws SQLException { public boolean supportsMixedCaseIdentifiers() throws SQLException {
//像databasetable这些对象的标识符在存储时是否采用大小写混合的模式
return false; return false;
} }
@ -125,7 +125,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean storesLowerCaseIdentifiers() throws SQLException { public boolean storesLowerCaseIdentifiers() throws SQLException {
return false; return true;
} }
public boolean storesMixedCaseIdentifiers() throws SQLException { public boolean storesMixedCaseIdentifiers() throws SQLException {
@ -133,6 +133,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException { public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
//像databasetable这些对象的标识符在存储时是否采用大小写混合并带引号的模式
return false; return false;
} }
@ -193,10 +194,12 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean nullPlusNonNullIsNull() throws SQLException { public boolean nullPlusNonNullIsNull() throws SQLException {
// null + non-null != null
return false; return false;
} }
public boolean supportsConvert() throws SQLException { public boolean supportsConvert() throws SQLException {
// 是否支持转换函数convert
return false; return false;
} }
@ -221,7 +224,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean supportsGroupBy() throws SQLException { public boolean supportsGroupBy() throws SQLException {
return false; return true;
} }
public boolean supportsGroupByUnrelated() throws SQLException { public boolean supportsGroupByUnrelated() throws SQLException {
@ -493,7 +496,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public int getDefaultTransactionIsolation() throws SQLException { public int getDefaultTransactionIsolation() throws SQLException {
return 0; return Connection.TRANSACTION_NONE;
} }
public boolean supportsTransactions() throws SQLException { public boolean supportsTransactions() throws SQLException {
@ -501,6 +504,8 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean supportsTransactionIsolationLevel(int level) throws SQLException { public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
if (level == Connection.TRANSACTION_NONE)
return true;
return false; return false;
} }
@ -522,28 +527,27 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern)
throws SQLException { throws SQLException {
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG); return null;
} }
public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern,
String columnNamePattern) throws SQLException { String columnNamePattern) throws SQLException {
throw new SQLException(TSDBConstants.UNSUPPORT_METHOD_EXCEPTIONZ_MSG); return null;
} }
public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
throws SQLException { if (conn == null || conn.isClosed()) {
Statement stmt = null; throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
if (null != conn && !conn.isClosed()) { }
stmt = conn.createStatement();
if (catalog == null || catalog.length() < 1) { try (Statement stmt = conn.createStatement()) {
catalog = conn.getCatalog(); if (catalog == null || catalog.isEmpty())
} return null;
stmt.executeUpdate("use " + catalog); stmt.executeUpdate("use " + catalog);
ResultSet resultSet0 = stmt.executeQuery("show tables"); ResultSet resultSet0 = stmt.executeQuery("show tables");
GetTablesResultSet getTablesResultSet = new GetTablesResultSet(resultSet0, catalog, schemaPattern, tableNamePattern, types); GetTablesResultSet getTablesResultSet = new GetTablesResultSet(resultSet0, catalog, schemaPattern, tableNamePattern, types);
return getTablesResultSet; return getTablesResultSet;
} else {
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
} }
} }
@ -552,14 +556,12 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public ResultSet getCatalogs() throws SQLException { public ResultSet getCatalogs() throws SQLException {
if (conn == null || conn.isClosed())
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
if (conn != null && !conn.isClosed()) { try (Statement stmt = conn.createStatement()) {
Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("show databases");
ResultSet resultSet0 = stmt.executeQuery("show databases"); return new CatalogResultSet(rs);
CatalogResultSet resultSet = new CatalogResultSet(resultSet0);
return resultSet;
} else {
return getEmptyResultSet();
} }
} }
@ -567,7 +569,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet(); DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
// set up ColumnMetaDataList // set up ColumnMetaDataList
List<ColumnMetaData> columnMetaDataList = new ArrayList<ColumnMetaData>(1); List<ColumnMetaData> columnMetaDataList = new ArrayList<>(1);
ColumnMetaData colMetaData = new ColumnMetaData(); ColumnMetaData colMetaData = new ColumnMetaData();
colMetaData.setColIndex(0); colMetaData.setColIndex(0);
colMetaData.setColName("TABLE_TYPE"); colMetaData.setColName("TABLE_TYPE");
@ -576,7 +578,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
columnMetaDataList.add(colMetaData); columnMetaDataList.add(colMetaData);
// set up rowDataList // set up rowDataList
List<TSDBResultSetRowData> rowDataList = new ArrayList<TSDBResultSetRowData>(2); List<TSDBResultSetRowData> rowDataList = new ArrayList<>(2);
TSDBResultSetRowData rowData = new TSDBResultSetRowData(); TSDBResultSetRowData rowData = new TSDBResultSetRowData();
rowData.setString(0, "TABLE"); rowData.setString(0, "TABLE");
rowDataList.add(rowData); rowDataList.add(rowData);
@ -596,11 +598,10 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
Statement stmt = null; Statement stmt = null;
if (null != conn && !conn.isClosed()) { if (null != conn && !conn.isClosed()) {
stmt = conn.createStatement(); stmt = conn.createStatement();
if (catalog == null || catalog.length() < 1) { if (catalog == null || catalog.isEmpty())
catalog = conn.getCatalog(); return null;
}
stmt.executeUpdate("use " + catalog);
stmt.executeUpdate("use " + catalog);
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet(); DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
// set up ColumnMetaDataList // set up ColumnMetaDataList
List<ColumnMetaData> columnMetaDataList = new ArrayList<>(24); List<ColumnMetaData> columnMetaDataList = new ArrayList<>(24);
@ -856,7 +857,7 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public Connection getConnection() throws SQLException { public Connection getConnection() throws SQLException {
return null; return this.conn;
} }
public boolean supportsSavepoints() throws SQLException { public boolean supportsSavepoints() throws SQLException {
@ -889,11 +890,13 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
} }
public boolean supportsResultSetHoldability(int holdability) throws SQLException { public boolean supportsResultSetHoldability(int holdability) throws SQLException {
if (holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT)
return true;
return false; return false;
} }
public int getResultSetHoldability() throws SQLException { public int getResultSetHoldability() throws SQLException {
return 0; return ResultSet.HOLD_CURSORS_OVER_COMMIT;
} }
public int getDatabaseMajorVersion() throws SQLException { public int getDatabaseMajorVersion() throws SQLException {

View File

@ -214,7 +214,7 @@ public class TSDBDriver extends AbstractTaosDriver {
urlProps.setProperty(TSDBDriver.PROPERTY_KEY_HOST, url); urlProps.setProperty(TSDBDriver.PROPERTY_KEY_HOST, url);
} }
this.dbMetaData = new TSDBDatabaseMetaData(dbProductName, urlForMeta, urlProps.getProperty(TSDBDriver.PROPERTY_KEY_USER)); this.dbMetaData = new TSDBDatabaseMetaData(urlForMeta, urlProps.getProperty(TSDBDriver.PROPERTY_KEY_USER));
return urlProps; return urlProps;
} }

View File

@ -8,7 +8,6 @@ import java.util.List;
public class RestfulDatabaseMetaData extends AbstractDatabaseMetaData { public class RestfulDatabaseMetaData extends AbstractDatabaseMetaData {
private final String url; private final String url;
private final String userName; private final String userName;
private final Connection connection; private final Connection connection;

View File

@ -168,6 +168,7 @@ public class DatabaseMetaDataTest {
try { try {
databaseMetaData.getProcedures("", "", ""); databaseMetaData.getProcedures("", "", "");
} catch (Exception e) { } catch (Exception e) {
} }
try { try {
databaseMetaData.getProcedureColumns("", "", "", ""); databaseMetaData.getProcedureColumns("", "", "", "");
@ -176,6 +177,7 @@ public class DatabaseMetaDataTest {
try { try {
databaseMetaData.getTables("", "", "", new String[]{""}); databaseMetaData.getTables("", "", "", new String[]{""});
} catch (Exception e) { } catch (Exception e) {
} }
databaseMetaData.getSchemas(); databaseMetaData.getSchemas();
databaseMetaData.getCatalogs(); databaseMetaData.getCatalogs();

View File

@ -2,16 +2,14 @@ package com.taosdata.jdbc;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import java.sql.DatabaseMetaData; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Properties; import java.util.Properties;
import static org.junit.Assert.*;
public class TSDBDatabaseMetaDataTest { public class TSDBDatabaseMetaDataTest {
private TSDBDatabaseMetaData metaData; private TSDBDatabaseMetaData metaData;
private static final String host = "localhost"; private static final String host = "localhost";
@ -74,607 +72,763 @@ public class TSDBDatabaseMetaDataTest {
} }
@Test @Test
public void nullsAreSortedAtStart() { public void nullsAreSortedAtStart() throws SQLException {
Assert.assertTrue(metaData.nullsAreSortedAtStart());
} }
@Test @Test
public void nullsAreSortedAtEnd() { public void nullsAreSortedAtEnd() throws SQLException {
Assert.assertFalse(metaData.nullsAreSortedAtEnd());
} }
@Test @Test
public void getDatabaseProductName() { public void getDatabaseProductName() throws SQLException {
Assert.assertEquals("TDengine", metaData.getDatabaseProductName());
} }
@Test @Test
public void getDatabaseProductVersion() { public void getDatabaseProductVersion() throws SQLException {
Assert.assertEquals("2.0.x.x", metaData.getDatabaseProductVersion());
} }
@Test @Test
public void getDriverName() { public void getDriverName() throws SQLException {
Assert.assertEquals("com.taosdata.jdbc.TSDBDriver", metaData.getDriverName());
} }
@Test @Test
public void getDriverVersion() { public void getDriverVersion() throws SQLException {
Assert.assertEquals("2.0.x", metaData.getDriverVersion());
} }
@Test @Test
public void getDriverMajorVersion() { public void getDriverMajorVersion() {
Assert.assertEquals(2, metaData.getDriverMajorVersion());
} }
@Test @Test
public void getDriverMinorVersion() { public void getDriverMinorVersion() {
Assert.assertEquals(0, metaData.getDriverMinorVersion());
} }
@Test @Test
public void usesLocalFiles() { public void usesLocalFiles() throws SQLException {
Assert.assertFalse(metaData.usesLocalFiles());
} }
@Test @Test
public void usesLocalFilePerTable() { public void usesLocalFilePerTable() throws SQLException {
Assert.assertFalse(metaData.usesLocalFilePerTable());
} }
@Test @Test
public void supportsMixedCaseIdentifiers() { public void supportsMixedCaseIdentifiers() throws SQLException {
Assert.assertFalse(metaData.supportsMixedCaseIdentifiers());
} }
@Test @Test
public void storesUpperCaseIdentifiers() { public void storesUpperCaseIdentifiers() throws SQLException {
Assert.assertFalse(metaData.storesUpperCaseIdentifiers());
} }
@Test @Test
public void storesLowerCaseIdentifiers() { public void storesLowerCaseIdentifiers() throws SQLException {
Assert.assertTrue(metaData.storesLowerCaseIdentifiers());
} }
@Test @Test
public void storesMixedCaseIdentifiers() { public void storesMixedCaseIdentifiers() throws SQLException {
Assert.assertFalse(metaData.storesMixedCaseIdentifiers());
} }
@Test @Test
public void supportsMixedCaseQuotedIdentifiers() { public void supportsMixedCaseQuotedIdentifiers() throws SQLException {
Assert.assertFalse(metaData.supportsMixedCaseQuotedIdentifiers());
} }
@Test @Test
public void storesUpperCaseQuotedIdentifiers() { public void storesUpperCaseQuotedIdentifiers() throws SQLException {
Assert.assertFalse(metaData.storesUpperCaseQuotedIdentifiers());
} }
@Test @Test
public void storesLowerCaseQuotedIdentifiers() { public void storesLowerCaseQuotedIdentifiers() throws SQLException {
Assert.assertFalse(metaData.storesLowerCaseQuotedIdentifiers());
} }
@Test @Test
public void storesMixedCaseQuotedIdentifiers() { public void storesMixedCaseQuotedIdentifiers() throws SQLException {
Assert.assertFalse(metaData.storesMixedCaseQuotedIdentifiers());
} }
@Test @Test
public void getIdentifierQuoteString() { public void getIdentifierQuoteString() throws SQLException {
Assert.assertEquals(" ", metaData.getIdentifierQuoteString());
} }
@Test @Test
public void getSQLKeywords() { public void getSQLKeywords() throws SQLException {
Assert.assertEquals(null, metaData.getSQLKeywords());
} }
@Test @Test
public void getNumericFunctions() { public void getNumericFunctions() throws SQLException {
Assert.assertEquals(null, metaData.getNumericFunctions());
} }
@Test @Test
public void getStringFunctions() { public void getStringFunctions() throws SQLException {
Assert.assertEquals(null, metaData.getStringFunctions());
} }
@Test @Test
public void getSystemFunctions() { public void getSystemFunctions() throws SQLException {
Assert.assertEquals(null, metaData.getSystemFunctions());
} }
@Test @Test
public void getTimeDateFunctions() { public void getTimeDateFunctions() throws SQLException {
Assert.assertEquals(null, metaData.getTimeDateFunctions());
} }
@Test @Test
public void getSearchStringEscape() { public void getSearchStringEscape() throws SQLException {
Assert.assertEquals(null, metaData.getSearchStringEscape());
} }
@Test @Test
public void getExtraNameCharacters() { public void getExtraNameCharacters() throws SQLException {
Assert.assertEquals(null, metaData.getExtraNameCharacters());
} }
@Test @Test
public void supportsAlterTableWithAddColumn() { public void supportsAlterTableWithAddColumn() throws SQLException {
Assert.assertTrue(metaData.supportsAlterTableWithAddColumn());
} }
@Test @Test
public void supportsAlterTableWithDropColumn() { public void supportsAlterTableWithDropColumn() throws SQLException {
Assert.assertTrue(metaData.supportsAlterTableWithDropColumn());
} }
@Test @Test
public void supportsColumnAliasing() { public void supportsColumnAliasing() throws SQLException {
Assert.assertTrue(metaData.supportsColumnAliasing());
} }
@Test @Test
public void nullPlusNonNullIsNull() { public void nullPlusNonNullIsNull() throws SQLException {
Assert.assertFalse(metaData.nullPlusNonNullIsNull());
} }
@Test @Test
public void supportsConvert() { public void supportsConvert() throws SQLException {
Assert.assertFalse(metaData.supportsConvert());
} }
@Test @Test
public void testSupportsConvert() { public void testSupportsConvert() throws SQLException {
Assert.assertFalse(metaData.supportsConvert(1, 1));
} }
@Test @Test
public void supportsTableCorrelationNames() { public void supportsTableCorrelationNames() throws SQLException {
Assert.assertFalse(metaData.supportsTableCorrelationNames());
} }
@Test @Test
public void supportsDifferentTableCorrelationNames() { public void supportsDifferentTableCorrelationNames() throws SQLException {
Assert.assertFalse(metaData.supportsDifferentTableCorrelationNames());
} }
@Test @Test
public void supportsExpressionsInOrderBy() { public void supportsExpressionsInOrderBy() throws SQLException {
Assert.assertFalse(metaData.supportsExpressionsInOrderBy());
} }
@Test @Test
public void supportsOrderByUnrelated() { public void supportsOrderByUnrelated() throws SQLException {
Assert.assertFalse(metaData.supportsOrderByUnrelated());
} }
@Test @Test
public void supportsGroupBy() { public void supportsGroupBy() throws SQLException {
Assert.assertTrue(metaData.supportsGroupBy());
} }
@Test @Test
public void supportsGroupByUnrelated() { public void supportsGroupByUnrelated() throws SQLException {
Assert.assertFalse(metaData.supportsGroupByUnrelated());
} }
@Test @Test
public void supportsGroupByBeyondSelect() { public void supportsGroupByBeyondSelect() throws SQLException {
Assert.assertFalse(metaData.supportsGroupByBeyondSelect());
} }
@Test @Test
public void supportsLikeEscapeClause() { public void supportsLikeEscapeClause() throws SQLException {
Assert.assertFalse(metaData.supportsLikeEscapeClause());
} }
@Test @Test
public void supportsMultipleResultSets() { public void supportsMultipleResultSets() throws SQLException {
Assert.assertFalse(metaData.supportsMultipleResultSets());
} }
@Test @Test
public void supportsMultipleTransactions() { public void supportsMultipleTransactions() throws SQLException {
Assert.assertFalse(metaData.supportsMultipleTransactions());
} }
@Test @Test
public void supportsNonNullableColumns() { public void supportsNonNullableColumns() throws SQLException {
Assert.assertFalse(metaData.supportsNonNullableColumns());
} }
@Test @Test
public void supportsMinimumSQLGrammar() { public void supportsMinimumSQLGrammar() throws SQLException {
Assert.assertFalse(metaData.supportsMinimumSQLGrammar());
} }
@Test @Test
public void supportsCoreSQLGrammar() { public void supportsCoreSQLGrammar() throws SQLException {
Assert.assertFalse(metaData.supportsCoreSQLGrammar());
} }
@Test @Test
public void supportsExtendedSQLGrammar() { public void supportsExtendedSQLGrammar() throws SQLException {
Assert.assertFalse(metaData.supportsExtendedSQLGrammar());
} }
@Test @Test
public void supportsANSI92EntryLevelSQL() { public void supportsANSI92EntryLevelSQL() throws SQLException {
Assert.assertFalse(metaData.supportsANSI92EntryLevelSQL());
} }
@Test @Test
public void supportsANSI92IntermediateSQL() { public void supportsANSI92IntermediateSQL() throws SQLException {
Assert.assertFalse(metaData.supportsANSI92IntermediateSQL());
} }
@Test @Test
public void supportsANSI92FullSQL() { public void supportsANSI92FullSQL() throws SQLException {
Assert.assertFalse(metaData.supportsANSI92FullSQL());
} }
@Test @Test
public void supportsIntegrityEnhancementFacility() { public void supportsIntegrityEnhancementFacility() throws SQLException {
Assert.assertFalse(metaData.supportsIntegrityEnhancementFacility());
} }
@Test @Test
public void supportsOuterJoins() { public void supportsOuterJoins() throws SQLException {
Assert.assertFalse(metaData.supportsOuterJoins());
} }
@Test @Test
public void supportsFullOuterJoins() { public void supportsFullOuterJoins() throws SQLException {
Assert.assertFalse(metaData.supportsFullOuterJoins());
} }
@Test @Test
public void supportsLimitedOuterJoins() { public void supportsLimitedOuterJoins() throws SQLException {
Assert.assertFalse(metaData.supportsLimitedOuterJoins());
} }
@Test @Test
public void getSchemaTerm() { public void getSchemaTerm() throws SQLException {
Assert.assertNull(metaData.getSchemaTerm());
} }
@Test @Test
public void getProcedureTerm() { public void getProcedureTerm() throws SQLException {
Assert.assertNull(metaData.getProcedureTerm());
} }
@Test @Test
public void getCatalogTerm() { public void getCatalogTerm() throws SQLException {
Assert.assertEquals("database", metaData.getCatalogTerm());
} }
@Test @Test
public void isCatalogAtStart() { public void isCatalogAtStart() throws SQLException {
Assert.assertTrue(metaData.isCatalogAtStart());
} }
@Test @Test
public void getCatalogSeparator() { public void getCatalogSeparator() throws SQLException {
Assert.assertEquals(".", metaData.getCatalogSeparator());
} }
@Test @Test
public void supportsSchemasInDataManipulation() { public void supportsSchemasInDataManipulation() throws SQLException {
Assert.assertFalse(metaData.supportsSchemasInDataManipulation());
} }
@Test @Test
public void supportsSchemasInProcedureCalls() { public void supportsSchemasInProcedureCalls() throws SQLException {
Assert.assertFalse(metaData.supportsSchemasInProcedureCalls());
} }
@Test @Test
public void supportsSchemasInTableDefinitions() { public void supportsSchemasInTableDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsSchemasInTableDefinitions());
} }
@Test @Test
public void supportsSchemasInIndexDefinitions() { public void supportsSchemasInIndexDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsSchemasInIndexDefinitions());
} }
@Test @Test
public void supportsSchemasInPrivilegeDefinitions() { public void supportsSchemasInPrivilegeDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsSchemasInPrivilegeDefinitions());
} }
@Test @Test
public void supportsCatalogsInDataManipulation() { public void supportsCatalogsInDataManipulation() throws SQLException {
Assert.assertTrue(metaData.supportsCatalogsInDataManipulation());
} }
@Test @Test
public void supportsCatalogsInProcedureCalls() { public void supportsCatalogsInProcedureCalls() throws SQLException {
Assert.assertFalse(metaData.supportsCatalogsInProcedureCalls());
} }
@Test @Test
public void supportsCatalogsInTableDefinitions() { public void supportsCatalogsInTableDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsCatalogsInTableDefinitions());
} }
@Test @Test
public void supportsCatalogsInIndexDefinitions() { public void supportsCatalogsInIndexDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsCatalogsInIndexDefinitions());
} }
@Test @Test
public void supportsCatalogsInPrivilegeDefinitions() { public void supportsCatalogsInPrivilegeDefinitions() throws SQLException {
Assert.assertFalse(metaData.supportsCatalogsInPrivilegeDefinitions());
} }
@Test @Test
public void supportsPositionedDelete() { public void supportsPositionedDelete() throws SQLException {
Assert.assertFalse(metaData.supportsPositionedDelete());
} }
@Test @Test
public void supportsPositionedUpdate() { public void supportsPositionedUpdate() throws SQLException {
Assert.assertFalse(metaData.supportsPositionedUpdate());
} }
@Test @Test
public void supportsSelectForUpdate() { public void supportsSelectForUpdate() throws SQLException {
Assert.assertFalse(metaData.supportsSelectForUpdate());
} }
@Test @Test
public void supportsStoredProcedures() { public void supportsStoredProcedures() throws SQLException {
Assert.assertFalse(metaData.supportsStoredProcedures());
} }
@Test @Test
public void supportsSubqueriesInComparisons() { public void supportsSubqueriesInComparisons() throws SQLException {
Assert.assertFalse(metaData.supportsSubqueriesInComparisons());
} }
@Test @Test
public void supportsSubqueriesInExists() { public void supportsSubqueriesInExists() throws SQLException {
Assert.assertFalse(metaData.supportsSubqueriesInExists());
} }
@Test @Test
public void supportsSubqueriesInIns() { public void supportsSubqueriesInIns() throws SQLException {
Assert.assertFalse(metaData.supportsSubqueriesInIns());
} }
@Test @Test
public void supportsSubqueriesInQuantifieds() { public void supportsSubqueriesInQuantifieds() throws SQLException {
Assert.assertFalse(metaData.supportsSubqueriesInQuantifieds());
} }
@Test @Test
public void supportsCorrelatedSubqueries() { public void supportsCorrelatedSubqueries() throws SQLException {
Assert.assertFalse(metaData.supportsCorrelatedSubqueries());
} }
@Test @Test
public void supportsUnion() { public void supportsUnion() throws SQLException {
Assert.assertFalse(metaData.supportsUnion());
} }
@Test @Test
public void supportsUnionAll() { public void supportsUnionAll() throws SQLException {
Assert.assertFalse(metaData.supportsUnionAll());
} }
@Test @Test
public void supportsOpenCursorsAcrossCommit() { public void supportsOpenCursorsAcrossCommit() throws SQLException {
Assert.assertFalse(metaData.supportsOpenCursorsAcrossCommit());
} }
@Test @Test
public void supportsOpenCursorsAcrossRollback() { public void supportsOpenCursorsAcrossRollback() throws SQLException {
Assert.assertFalse(metaData.supportsOpenCursorsAcrossRollback());
} }
@Test @Test
public void supportsOpenStatementsAcrossCommit() { public void supportsOpenStatementsAcrossCommit() throws SQLException {
Assert.assertFalse(metaData.supportsOpenStatementsAcrossCommit());
} }
@Test @Test
public void supportsOpenStatementsAcrossRollback() { public void supportsOpenStatementsAcrossRollback() throws SQLException {
Assert.assertFalse(metaData.supportsOpenStatementsAcrossRollback());
} }
@Test @Test
public void getMaxBinaryLiteralLength() { public void getMaxBinaryLiteralLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxBinaryLiteralLength());
} }
@Test @Test
public void getMaxCharLiteralLength() { public void getMaxCharLiteralLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxCharLiteralLength());
} }
@Test @Test
public void getMaxColumnNameLength() { public void getMaxColumnNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnNameLength());
} }
@Test @Test
public void getMaxColumnsInGroupBy() { public void getMaxColumnsInGroupBy() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnsInGroupBy());
} }
@Test @Test
public void getMaxColumnsInIndex() { public void getMaxColumnsInIndex() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnsInIndex());
} }
@Test @Test
public void getMaxColumnsInOrderBy() { public void getMaxColumnsInOrderBy() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnsInOrderBy());
} }
@Test @Test
public void getMaxColumnsInSelect() { public void getMaxColumnsInSelect() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnsInSelect());
} }
@Test @Test
public void getMaxColumnsInTable() { public void getMaxColumnsInTable() throws SQLException {
Assert.assertEquals(0, metaData.getMaxColumnsInTable());
} }
@Test @Test
public void getMaxConnections() { public void getMaxConnections() throws SQLException {
Assert.assertEquals(0, metaData.getMaxConnections());
} }
@Test @Test
public void getMaxCursorNameLength() { public void getMaxCursorNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxCursorNameLength());
} }
@Test @Test
public void getMaxIndexLength() { public void getMaxIndexLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxIndexLength());
} }
@Test @Test
public void getMaxSchemaNameLength() { public void getMaxSchemaNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxSchemaNameLength());
} }
@Test @Test
public void getMaxProcedureNameLength() { public void getMaxProcedureNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxProcedureNameLength());
} }
@Test @Test
public void getMaxCatalogNameLength() { public void getMaxCatalogNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxCatalogNameLength());
} }
@Test @Test
public void getMaxRowSize() { public void getMaxRowSize() throws SQLException {
Assert.assertEquals(0, metaData.getMaxRowSize());
} }
@Test @Test
public void doesMaxRowSizeIncludeBlobs() { public void doesMaxRowSizeIncludeBlobs() throws SQLException {
Assert.assertFalse(metaData.doesMaxRowSizeIncludeBlobs());
} }
@Test @Test
public void getMaxStatementLength() { public void getMaxStatementLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxStatementLength());
} }
@Test @Test
public void getMaxStatements() { public void getMaxStatements() throws SQLException {
Assert.assertEquals(0, metaData.getMaxStatements());
} }
@Test @Test
public void getMaxTableNameLength() { public void getMaxTableNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxTableNameLength());
} }
@Test @Test
public void getMaxTablesInSelect() { public void getMaxTablesInSelect() throws SQLException {
Assert.assertEquals(0, metaData.getMaxTablesInSelect());
} }
@Test @Test
public void getMaxUserNameLength() { public void getMaxUserNameLength() throws SQLException {
Assert.assertEquals(0, metaData.getMaxUserNameLength());
} }
@Test @Test
public void getDefaultTransactionIsolation() { public void getDefaultTransactionIsolation() throws SQLException {
Assert.assertEquals(Connection.TRANSACTION_NONE, metaData.getDefaultTransactionIsolation());
} }
@Test @Test
public void supportsTransactions() { public void supportsTransactions() throws SQLException {
Assert.assertFalse(metaData.supportsTransactions());
} }
@Test @Test
public void supportsTransactionIsolationLevel() { public void supportsTransactionIsolationLevel() throws SQLException {
Assert.assertTrue(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE));
Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
Assert.assertFalse(metaData.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
} }
@Test @Test
public void supportsDataDefinitionAndDataManipulationTransactions() { public void supportsDataDefinitionAndDataManipulationTransactions() throws SQLException {
Assert.assertFalse(metaData.supportsDataDefinitionAndDataManipulationTransactions());
} }
@Test @Test
public void supportsDataManipulationTransactionsOnly() { public void supportsDataManipulationTransactionsOnly() throws SQLException {
Assert.assertFalse(metaData.supportsDataManipulationTransactionsOnly());
} }
@Test @Test
public void dataDefinitionCausesTransactionCommit() { public void dataDefinitionCausesTransactionCommit() throws SQLException {
Assert.assertFalse(metaData.dataDefinitionCausesTransactionCommit());
} }
@Test @Test
public void dataDefinitionIgnoredInTransactions() { public void dataDefinitionIgnoredInTransactions() throws SQLException {
Assert.assertFalse(metaData.dataDefinitionIgnoredInTransactions());
} }
@Test @Test
public void getProcedures() { public void getProcedures() throws SQLException {
Assert.assertNull(metaData.getProcedures("*", "*", "*"));
} }
@Test @Test
public void getProcedureColumns() { public void getProcedureColumns() throws SQLException {
Assert.assertNull(metaData.getProcedureColumns("*", "*", "*", "*"));
} }
@Test @Test
public void getTables() { public void getTables() throws SQLException {
Assert.assertNull(metaData.getTables("", "", "*", null));
} }
@Test @Test
public void getSchemas() { public void getSchemas() throws SQLException {
Assert.assertNotNull(metaData.getSchemas());
} }
@Test @Test
public void getCatalogs() { public void getCatalogs() throws SQLException {
Assert.assertNotNull(metaData.getCatalogs());
} }
@Test @Test
public void getTableTypes() { public void getTableTypes() throws SQLException {
Assert.assertNotNull(metaData.getTableTypes());
} }
@Test @Test
public void getColumns() { public void getColumns() throws SQLException {
Assert.assertNotNull(metaData.getColumns("", "", "", ""));
} }
@Test @Test
public void getColumnPrivileges() { public void getColumnPrivileges() throws SQLException {
Assert.assertNotNull(metaData.getColumnPrivileges("", "", "", ""));
} }
@Test @Test
public void getTablePrivileges() { public void getTablePrivileges() throws SQLException {
Assert.assertNotNull(metaData.getTablePrivileges("", "", ""));
} }
@Test @Test
public void getBestRowIdentifier() { public void getBestRowIdentifier() throws SQLException {
Assert.assertNotNull(metaData.getBestRowIdentifier("", "", "", 0, false));
} }
@Test @Test
public void getVersionColumns() { public void getVersionColumns() throws SQLException {
Assert.assertNotNull(metaData.getVersionColumns("", "", ""));
} }
@Test @Test
public void getPrimaryKeys() { public void getPrimaryKeys() throws SQLException {
Assert.assertNotNull(metaData.getPrimaryKeys("", "", ""));
} }
@Test @Test
public void getImportedKeys() { public void getImportedKeys() throws SQLException {
Assert.assertNotNull(metaData.getImportedKeys("", "", ""));
} }
@Test @Test
public void getExportedKeys() { public void getExportedKeys() throws SQLException {
Assert.assertNotNull(metaData.getExportedKeys("", "", ""));
} }
@Test @Test
public void getCrossReference() { public void getCrossReference() throws SQLException {
Assert.assertNotNull(metaData.getCrossReference("", "", "", "", "", ""));
} }
@Test @Test
public void getTypeInfo() { public void getTypeInfo() throws SQLException {
Assert.assertNotNull(metaData.getTypeInfo());
} }
@Test @Test
public void getIndexInfo() { public void getIndexInfo() throws SQLException {
Assert.assertNotNull(metaData.getIndexInfo("", "", "", false, false));
} }
@Test @Test
public void supportsResultSetType() { public void supportsResultSetType() throws SQLException {
Assert.assertFalse(metaData.supportsResultSetType(0));
} }
@Test @Test
public void supportsResultSetConcurrency() { public void supportsResultSetConcurrency() throws SQLException {
Assert.assertFalse(metaData.supportsResultSetConcurrency(0, 0));
} }
@Test @Test
public void ownUpdatesAreVisible() { public void ownUpdatesAreVisible() throws SQLException {
Assert.assertFalse(metaData.ownUpdatesAreVisible(0));
} }
@Test @Test
public void ownDeletesAreVisible() { public void ownDeletesAreVisible() throws SQLException {
Assert.assertFalse(metaData.ownDeletesAreVisible(0));
} }
@Test @Test
public void ownInsertsAreVisible() { public void ownInsertsAreVisible() throws SQLException {
Assert.assertFalse(metaData.ownInsertsAreVisible(0));
} }
@Test @Test
public void othersUpdatesAreVisible() { public void othersUpdatesAreVisible() throws SQLException {
Assert.assertFalse(metaData.othersUpdatesAreVisible(0));
} }
@Test @Test
public void othersDeletesAreVisible() { public void othersDeletesAreVisible() throws SQLException {
Assert.assertFalse(metaData.othersDeletesAreVisible(0));
} }
@Test @Test
public void othersInsertsAreVisible() { public void othersInsertsAreVisible() throws SQLException {
Assert.assertFalse(metaData.othersInsertsAreVisible(0));
} }
@Test @Test
public void updatesAreDetected() { public void updatesAreDetected() throws SQLException {
Assert.assertFalse(metaData.updatesAreDetected(0));
} }
@Test @Test
public void deletesAreDetected() { public void deletesAreDetected() throws SQLException {
Assert.assertFalse(metaData.deletesAreDetected(0));
} }
@Test @Test
public void insertsAreDetected() { public void insertsAreDetected() throws SQLException {
Assert.assertFalse(metaData.insertsAreDetected(0));
} }
@Test @Test
public void supportsBatchUpdates() { public void supportsBatchUpdates() throws SQLException {
Assert.assertFalse(metaData.supportsBatchUpdates());
} }
@Test @Test
public void getUDTs() { public void getUDTs() throws SQLException {
Assert.assertNotNull(metaData.getUDTs("", "", "", null));
} }
@Test @Test
public void getConnection() { public void getConnection() throws SQLException {
Assert.assertNotNull(metaData.getConnection());
} }
@Test @Test
public void supportsSavepoints() { public void supportsSavepoints() throws SQLException {
Assert.assertFalse(metaData.supportsSavepoints());
} }
@Test @Test
public void supportsNamedParameters() { public void supportsNamedParameters() throws SQLException {
Assert.assertFalse(metaData.supportsNamedParameters());
} }
@Test @Test
public void supportsMultipleOpenResults() { public void supportsMultipleOpenResults() throws SQLException {
Assert.assertFalse(metaData.supportsMultipleOpenResults());
} }
@Test @Test
public void supportsGetGeneratedKeys() { public void supportsGetGeneratedKeys() throws SQLException {
Assert.assertFalse(metaData.supportsGetGeneratedKeys());
} }
@Test @Test
public void getSuperTypes() { public void getSuperTypes() throws SQLException {
Assert.assertNotNull(metaData.getSuperTypes("", "", ""));
} }
@Test @Test
public void getSuperTables() { public void getSuperTables() throws SQLException {
Assert.assertNotNull(metaData.getSuperTables("", "", ""));
} }
@Test @Test
public void getAttributes() { public void getAttributes() throws SQLException {
Assert.assertNotNull(metaData.getAttributes("", "", "", ""));
} }
@Test @Test
public void supportsResultSetHoldability() { public void supportsResultSetHoldability() throws SQLException {
Assert.assertTrue(metaData.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT));
Assert.assertFalse(metaData.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT));
} }
@Test @Test
public void getResultSetHoldability() { public void getResultSetHoldability() {
} }
@Test @Test

View File

@ -0,0 +1,79 @@
package com.taosdata.jdbc.cases;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
import java.sql.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
public class MultiThreadsWithSameStatmentTest {
private Connection conn;
private Statement stmt;
@Before
public void before() {
try {
Class.forName("com.taosdata.jdbc.TSDBDriver");
conn = DriverManager.getConnection("jdbc:TAOS://localhost:6030/?user=root&password=taosdata");
stmt = conn.createStatement();
stmt.execute("create database if not exists jdbctest");
stmt.executeUpdate("create table jdbctest.weather (ts timestamp, f1 int)");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
@Test
public void test() {
Thread t1 = new Thread(() -> {
try {
ResultSet resultSet = stmt.executeQuery("select * from log.");
sleep(5000);
while (resultSet.next()) {
ResultSetMetaData metaData = resultSet.getMetaData();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
System.out.print(metaData.getColumnLabel(i) + ": " + resultSet.getString(i));
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
}
});
Thread t2 = new Thread(() -> {
try {
stmt.executeUpdate("insert into jdbctest.weather values(now,1)");
} catch (SQLException e) {
e.printStackTrace();
}
});
t1.start();
sleep(1000);
t2.start();
}
private void sleep(long mills) {
try {
TimeUnit.MILLISECONDS.sleep(mills);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@After
public void after() {
try {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}