override def getColumns()

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
        }
      }
    }

  }