Merge pull request #3721 from taosdata/feature/TD-1313
[TD-1313]<hotfix>: update TSDBDatabaseMetadata
This commit is contained in:
commit
50af70aaab
|
@ -55,6 +55,7 @@
|
||||||
<version>4.13</version>
|
<version>4.13</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -67,14 +67,23 @@ public class DatabaseMetaDataResultSet implements ResultSet {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean next() throws SQLException {
|
public boolean next() throws SQLException {
|
||||||
|
// boolean ret = false;
|
||||||
|
// if (rowDataList.size() > 0) {
|
||||||
|
// ret = rowDataList.iterator().hasNext();
|
||||||
|
// if (ret) {
|
||||||
|
// rowCursor = rowDataList.iterator().next();
|
||||||
|
// cursorRowNumber++;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return ret;
|
||||||
|
|
||||||
|
/**** add by zyyang 2020-09-29 ****************/
|
||||||
boolean ret = false;
|
boolean ret = false;
|
||||||
if (rowDataList.size() > 0) {
|
if (!rowDataList.isEmpty() && cursorRowNumber < rowDataList.size()) {
|
||||||
ret = rowDataList.iterator().hasNext();
|
rowCursor = rowDataList.get(cursorRowNumber++);
|
||||||
if (ret) {
|
ret = true;
|
||||||
rowCursor = rowDataList.iterator().next();
|
|
||||||
cursorRowNumber++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +100,8 @@ public class DatabaseMetaDataResultSet implements ResultSet {
|
||||||
@Override
|
@Override
|
||||||
public String getString(int columnIndex) throws SQLException {
|
public String getString(int columnIndex) throws SQLException {
|
||||||
columnIndex--;
|
columnIndex--;
|
||||||
return rowCursor.getString(columnIndex, columnMetaDataList.get(columnIndex).getColType());
|
int colType = columnMetaDataList.get(columnIndex).getColType();
|
||||||
|
return rowCursor.getString(columnIndex, colType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -586,7 +586,171 @@ public class TSDBDatabaseMetaData implements java.sql.DatabaseMetaData {
|
||||||
|
|
||||||
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
|
public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
return getEmptyResultSet();
|
|
||||||
|
|
||||||
|
/** add by zyyang **********/
|
||||||
|
Statement stmt = null;
|
||||||
|
if (null != conn && !conn.isClosed()) {
|
||||||
|
stmt = conn.createStatement();
|
||||||
|
if (catalog == null || catalog.length() < 1) {
|
||||||
|
catalog = conn.getCatalog();
|
||||||
|
}
|
||||||
|
stmt.executeUpdate("use " + catalog);
|
||||||
|
|
||||||
|
DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
|
||||||
|
// set up ColumnMetaDataList
|
||||||
|
List<ColumnMetaData> 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<TSDBResultSetRowData> 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);
|
||||||
|
|
||||||
|
// GetColumnsResultSet getColumnsResultSet = new GetColumnsResultSet(resultSet0, catalog, schemaPattern, tableNamePattern, columnNamePattern);
|
||||||
|
// return getColumnsResultSet;
|
||||||
|
// DatabaseMetaDataResultSet resultSet = new DatabaseMetaDataResultSet();
|
||||||
|
return resultSet;
|
||||||
|
} else {
|
||||||
|
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************/
|
||||||
|
|
||||||
|
// return getEmptyResultSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern)
|
||||||
|
|
Loading…
Reference in New Issue