Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-2420

[umbrella] Identify, fix DatabaseMetaData.getColumns() bugs

    XMLWordPrintableJSON

Details

    • Task
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.1.0
    • Client - JDBC, Metadata
    • None

    Description

      Drill's implementation of DatabaseMetaData.getColumns(...) (currently at org.apache.drill.jdbc.MetaImpl.getColumns()) doesn't match the JDBC specification (the Javadoc documentation for DatabaseMetaData.getColumns(...) (as of Java 7)). In the returned ResultSet:

      1. Column DATA_TYPE is of type VARCHAR (containing the type name) rather than being of type INTEGER (containing values per java.sql.Types.*). [Fixed by DRILL-2128.]
      2. Column TYPE_NAME is missing. [Fixed by DRILL-2128.]
      3. Column COLUMN_SIZE is missing. [Fixed by DRILL-2465.]
      4. (Columns after DATA_TYPE are at incorrect indexes.) [Fixed by DRILL-2465.]
      5. Column DECIMAL_DIGITS is misnamed DECIMAL_PRECISION. [Fixed by DRILL-2465.]
      6. Column REMARKS is an empty string, but probably should be NULL. [Fixed by DRILL-2465.]
      7. Column COLUMN_DEF is an empty string, but probably should be NULL. [Fixed by DRILL-2465.]
      8. Column CHAR_OCTET_LENGTH is always 4, but should be "the maximum number of bytes in the column" for character types. [Fixed by DRILL-2465.]
      8.5 Column IS_NULLABLE seems to always return 'NO'.
      9. Column ORDINAL_POSITION is always 1, but should be the index of the specific column. [Fixed by DRILL-2465.]
      10. Column IS_NULLABLE is 'YES', which doesn't seem to correspond to the value for NULLABLE (DatabaseMetaData.columnNullableUnknown). [Fixed (unidentified change).\`]
      11. Column SCOPE_CATALOG is an empty string, but should be NULL. [Fixed by DRILL-2465.]
      12. Column SCOPE_SCHEMA is an empty string, but should be NULL. [Fixed by DRILL-2465.]
      13. Column SCOPE_TABLE is an empty string, but should be NULL. [Fixed by DRILL-2465.]
      14. Column SOURCE_DATA_TYPE is an empty string, but should be NULL. [Fixed by DRILL-2465.]
      Additional bugs or suspect behavior:

      • DECIMAL_DIGITS/DECIMAL_PRECISION is -1 when it should be NULL (when not applicable). [Fixed by DRILL-2465.]
      • NUM_PREC_RADIX is -1 when it probably should be NULL (when not applicable). [Fixed by DRILL-2465.]

      (Other columns to check:

      Re BUFFER_LENGTH, SQL_DATA_TYPE, and SQL_DATETIME_SUB: When JDBC says a column is not used, are there any requirements on the values (e.g., being NULL)?

      Re IS_AUTOINCREMENT: Do we know that a column is not auto-incremented? If so, the value could be 'NO' rather than an empty string.

      Re IS_GENERATEDCOLUMN: Do we know that a column is not generated? If so, the value could be 'NO' rather than an empty string.

      (Re NULLABLE : Do know whether a column is nullable or not? If so, we could return the specific answer rather that just saying that it's unknown.)

      Attachments

        Issue Links

          Activity

            People

              dsbos Daniel Barclay
              dsbos Daniel Barclay
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: