docs: public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern,
        String columnNamePattern)
        throws SQLException {
      Options options = urlParser.getOptions();
      String sql = "SELECT TABLE_SCHEMA TABLE_CAT, NULL TABLE_SCHEM, TABLE_NAME, COLUMN_NAME,"
          + dataTypeClause("COLUMN_TYPE") + " DATA_TYPE,"
          + columnTypeClause(options) + " TYPE_NAME, "
          + " CASE DATA_TYPE"
          + "  WHEN 'time' THEN "
          + (datePrecisionColumnExist
          ? "IF(DATETIME_PRECISION = 0, 10, CAST(11 + DATETIME_PRECISION as signed integer))" : "10")
          + "  WHEN 'date' THEN 10"
          + "  WHEN 'datetime' THEN "
          + (datePrecisionColumnExist
          ? "IF(DATETIME_PRECISION = 0, 19, CAST(20 + DATETIME_PRECISION as signed integer))" : "19")
          + "  WHEN 'timestamp' THEN "
          + (datePrecisionColumnExist
          ? "IF(DATETIME_PRECISION = 0, 19, CAST(20 + DATETIME_PRECISION as signed integer))" : "19")
          + (options.yearIsDateType ? "" : " WHEN 'year' THEN 5")
          + "  ELSE "
          + "  IF(NUMERIC_PRECISION IS NULL, LEAST(CHARACTER_MAXIMUM_LENGTH," + Integer.MAX_VALUE
          + "), NUMERIC_PRECISION) "
          + " END"
          + " COLUMN_SIZE, 65535 BUFFER_LENGTH, "
  
          + " CONVERT (CASE DATA_TYPE"
          + " WHEN 'year' THEN " + (options.yearIsDateType ? "NUMERIC_SCALE" : "0")
          + " WHEN 'tinyint' THEN " + (options.tinyInt1isBit ? "0" : "NUMERIC_SCALE")
          + " ELSE NUMERIC_SCALE END, UNSIGNED INTEGER) DECIMAL_DIGITS,"
  
          + " 10 NUM_PREC_RADIX, IF(IS_NULLABLE = 'yes',1,0) NULLABLE,COLUMN_COMMENT REMARKS,"
          + " COLUMN_DEFAULT COLUMN_DEF, 0 SQL_DATA_TYPE, 0 SQL_DATETIME_SUB,  "
          + " LEAST(CHARACTER_OCTET_LENGTH," + Integer.MAX_VALUE + ") CHAR_OCTET_LENGTH,"
          + " ORDINAL_POSITION, IS_NULLABLE, NULL SCOPE_CATALOG, NULL SCOPE_SCHEMA, NULL SCOPE_TABLE, NULL SOURCE_DATA_TYPE,"
          + " IF(EXTRA = 'auto_increment','YES','NO') IS_AUTOINCREMENT, "
          + " IF(EXTRA in ('VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED') ,'YES','NO') IS_GENERATEDCOLUMN "
          + " FROM INFORMATION_SCHEMA.COLUMNS  WHERE "
          + catalogCond("TABLE_SCHEMA", catalog)
          + " AND "
          + patternCond("TABLE_NAME", tableNamePattern)
          + " AND "
          + patternCond("COLUMN_NAME", columnNamePattern)
          + " ORDER BY TABLE_CAT, TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION";
  
      try {
        return executeQuery(sql);
      } catch (SQLException sqlException) {
        if (sqlException.getMessage().contains("Unknown column 'DATETIME_PRECISION'")) {
          datePrecisionColumnExist = false;
          return getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);
        }
        throw sqlException;
      }
  
    }