in linkis-computation-governance/linkis-jdbc-driver/src/main/scala/org/apache/linkis/ujes/jdbc/UJESSQLDatabaseMetaData.scala [484:637]
override def getColumns(
catalog: String,
schemaPattern: String,
tableNamePattern: String,
columnNamePattern: String
): ResultSet = {
val resultCatalog = if (StringUtils.isNotBlank(schemaPattern)) {
schemaPattern
} else if (StringUtils.isNotBlank(catalog)) {
catalog
} else {
s"${getUserName}_ind"
}
val getColumnsAction = GetColumnsAction
.builder()
.setUser(getUserName)
.setDatabase(resultCatalog)
.setTable(JDBCUtils.convertPattern(tableNamePattern))
.build()
val result = ujesSQLConnection.ujesClient.getColumns(getColumnsAction)
val columns = result.getColumns
val resultColumns = new util.ArrayList[JdbcColumn]()
var ordinalPos = 1
columns.foreach { column =>
val jdbcColumn = new JdbcColumn(
column.get("columnName").asInstanceOf[String],
tableNamePattern,
resultCatalog,
column.get("columnType").asInstanceOf[String],
column.get("columnComment").asInstanceOf[String],
ordinalPos
)
resultColumns.add(jdbcColumn)
ordinalPos = ordinalPos + 1
}
new LinkisMetaDataResultSet[JdbcColumn](
util.Arrays.asList(
"TABLE_CAT",
"TABLE_SCHEM",
"TABLE_NAME",
"COLUMN_NAME",
"DATA_TYPE",
"TYPE_NAME",
"COLUMN_SIZE",
"BUFFER_LENGTH",
"DECIMAL_DIGITS",
"NUM_PREC_RADIX",
"NULLABLE",
"REMARKS",
"COLUMN_DEF",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"CHAR_OCTET_LENGTH",
"ORDINAL_POSITION",
"IS_NULLABLE",
"SCOPE_CATLOG",
"SCOPE_SCHEMA",
"SCOPE_TABLE",
"SOURCE_DATA_TYPE"
),
util.Arrays.asList(
"string",
"string",
"string",
"string",
"int",
"string",
"int",
"int",
"int",
"int",
"int",
"string",
"string",
"int",
"int",
"int",
"int",
"string",
"string",
"string",
"string",
"int"
),
resultColumns
) {
private var cnt = 0
override def next(): Boolean = {
if (cnt < data.size()) {
val jdbcColumn = new util.ArrayList[Object](20)
val column = data.get(cnt)
jdbcColumn.add(column.getTableCatalog) // TABLE_CAT String => table catalog (may be null)
jdbcColumn.add(null) // TABLE_SCHEM String => table schema (may be null)
jdbcColumn.add(column.getTableName) // TABLE_NAME String => table name
jdbcColumn.add(column.getColumnName) // COLUMN_NAME String => column name
jdbcColumn.add(column.getSqlType) // DATA_TYPE short => SQL type from java.sql.Types
jdbcColumn.add(column.getType) // TYPE_NAME String => Data source dependent type name.
jdbcColumn.add(column.getColumnSize) // COLUMN_SIZE int => column size.
jdbcColumn.add(null) // BUFFER_LENGTH is not used.
jdbcColumn.add(
column.getDecimalDigits
) // DECIMAL_DIGITS int => number of fractional digits
jdbcColumn.add(column.getNumPrecRadix) // NUM_PREC_RADIX int => typically either 10 or 2
jdbcColumn.add(
DatabaseMetaData.columnNullable.asInstanceOf[Object]
) // NULLABLE int => is NULL allowed?
jdbcColumn.add(
column.getComment
) // REMARKS String => comment describing column (may be null)
jdbcColumn.add(null) // COLUMN_DEF String => default value (may be null)
jdbcColumn.add(null) // SQL_DATA_TYPE int => unused
jdbcColumn.add(null) // SQL_DATETIME_SUB int => unused
jdbcColumn.add(null) // CHAR_OCTET_LENGTH int
jdbcColumn.add(column.getOrdinalPos.asInstanceOf[Object]) // ORDINAL_POSITION int
jdbcColumn.add("YES") // IS_NULLABLE String
jdbcColumn.add(null) // SCOPE_CATLOG String
jdbcColumn.add(null) // SCOPE_SCHEMA String
jdbcColumn.add(null) // SCOPE_TABLE String
jdbcColumn.add(null) // SOURCE_DATA_TYPE short
row = jdbcColumn
cnt = cnt + 1
true
} else {
false
}
}
}
}