|
1 | 1 | package com.clickhouse.jdbc.metadata; |
2 | 2 |
|
| 3 | +import com.clickhouse.data.ClickHouseDataType; |
3 | 4 | import com.clickhouse.jdbc.ConnectionImpl; |
4 | 5 | import com.clickhouse.jdbc.Driver; |
5 | 6 | import com.clickhouse.jdbc.JdbcV2Wrapper; |
@@ -867,7 +868,49 @@ public ResultSet getCrossReference(String parentCatalog, String parentSchema, St |
867 | 868 |
|
868 | 869 | @Override |
869 | 870 | public ResultSet getTypeInfo() throws SQLException { |
870 | | - return null; |
| 871 | + return connection.createStatement().executeQuery(DATA_TYPE_INFO_SQL); |
| 872 | + } |
| 873 | + |
| 874 | + private static final String DATA_TYPE_INFO_SQL = getDataTypeInfoSql(); |
| 875 | + |
| 876 | + private static String getDataTypeInfoSql() { |
| 877 | + StringBuilder sql = new StringBuilder("SELECT " + |
| 878 | + "name AS TYPE_NAME, " + |
| 879 | + JdbcUtils.generateSqlTypeEnum("name") +" AS DATA_TYPE, " + |
| 880 | + "attrs.c2 AS PRECISION, " + |
| 881 | + "NULL AS LITERAL_PREFIX, " + |
| 882 | + "NULL AS LITERAL_SUFFIX, " + |
| 883 | + "NULL AS CREATE_PARAMS, " + |
| 884 | + java.sql.DatabaseMetaData.typeNullable + " AS NULLABLE, " + |
| 885 | + "not(dt.case_insensitive) AS CASE_SENSITIVE, " + |
| 886 | + java.sql.DatabaseMetaData.typeSearchable + " AS SEARCHABLE, " + |
| 887 | + "attrs.c3 AS UNSIGNED_ATTRIBUTE, " + |
| 888 | + "false AS FIXED_PREC_SCALE, " + |
| 889 | + "false AS AUTO_INCREMENT, " + |
| 890 | + "name AS LOCAL_TYPE_NAME, " + |
| 891 | + "attrs.c4 AS MINIMUM_SCALE, " + |
| 892 | + "attrs.c5 AS MAXIMUM_SCALE, " + |
| 893 | + "0 AS SQL_DATA_TYPE, " + |
| 894 | + "0 AS SQL_DATETIME_SUB, " + |
| 895 | + "0 AS NUM_PREC_RADIX " + |
| 896 | + "FROM system.data_type_families dt " + |
| 897 | + " LEFT JOIN (SELECT * FROM VALUES ( "); |
| 898 | + for (ClickHouseDataType type : ClickHouseDataType.values()) { |
| 899 | + sql.append("(") |
| 900 | + .append('\'').append(type.name()).append("',") // c1 |
| 901 | + .append(type.getMaxPrecision()).append(',') // c2 |
| 902 | + .append(type.isSigned()).append(',') // c3 |
| 903 | + .append(type.getMinScale()).append(',') // c4 |
| 904 | + .append(type.getMaxScale()) // c5 |
| 905 | + .append("),"); |
| 906 | + } |
| 907 | + sql.setLength(sql.length() - 1); |
| 908 | + sql.append(") "); |
| 909 | + |
| 910 | + sql.append(") as attrs ON (dt.name = attrs.c1)") |
| 911 | + .append(" WHERE alias_to == ''"); |
| 912 | + System.out.println(sql.toString()); |
| 913 | + return sql.toString(); |
871 | 914 | } |
872 | 915 |
|
873 | 916 | @Override |
|
0 commit comments