comparison src/main/java/org/monetdb/jdbc/MonetDatabaseMetaData.java @ 642:dd9b4fb14256

Added recognition of 'xml' type. Use default mapping to Types.VARCHAR for easy and fast (as java.lang.String) retrieval, display and setting data of columns of type 'xml'.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 10 Feb 2022 15:12:30 +0100 (2022-02-10)
parents 06d69b82d409
children fbed03097738
comparison
equal deleted inserted replaced
641:fac0ed642af2 642:dd9b4fb14256
2962 query.append("SELECT \"sqlname\" AS \"TYPE_NAME\", " + 2962 query.append("SELECT \"sqlname\" AS \"TYPE_NAME\", " +
2963 // TODO map 'day_interval' to 'interval day' (or 'interval day to second'), 'month_interval' to 'interval month' (or 'interval year to month'), 'sec_interval' to 'interval second' 2963 // TODO map 'day_interval' to 'interval day' (or 'interval day to second'), 'month_interval' to 'interval month' (or 'interval year to month'), 'sec_interval' to 'interval second'
2964 "cast(").append(MonetDriver.getSQLTypeMap("\"sqlname\"")).append(" AS int) AS \"DATA_TYPE\", " + 2964 "cast(").append(MonetDriver.getSQLTypeMap("\"sqlname\"")).append(" AS int) AS \"DATA_TYPE\", " +
2965 "\"digits\" AS \"PRECISION\", " + // note that when radix is 2 the precision shows the number of bits 2965 "\"digits\" AS \"PRECISION\", " + // note that when radix is 2 the precision shows the number of bits
2966 "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval') THEN ''''" + 2966 "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval') THEN ''''" +
2967 " WHEN \"sqlname\" IN ('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob') THEN \"sqlname\"||' '''" + 2967 " WHEN \"sqlname\" IN ('clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml') THEN \"sqlname\"||' '''" +
2968 " ELSE NULL END AS varchar(16)) AS \"LITERAL_PREFIX\", " + 2968 " ELSE NULL END AS varchar(16)) AS \"LITERAL_PREFIX\", " +
2969 "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval'" + 2969 "cast(CASE WHEN \"sqlname\" IN ('char','varchar','sec_interval','day_interval','month_interval'" +
2970 ",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob') THEN ''''" + 2970 ",'clob','inet','json','url','uuid','date','time','timetz','timestamp','timestamptz','blob','sqlblob','xml') THEN ''''" +
2971 " ELSE NULL END AS varchar(2)) AS \"LITERAL_SUFFIX\", " + 2971 " ELSE NULL END AS varchar(2)) AS \"LITERAL_SUFFIX\", " +
2972 "CASE WHEN \"sqlname\" IN ('char','varchar') THEN 'max length'" + 2972 "CASE WHEN \"sqlname\" IN ('char','varchar') THEN 'max length'" +
2973 " WHEN \"sqlname\" = 'decimal' THEN 'precision, scale'" + 2973 " WHEN \"sqlname\" = 'decimal' THEN 'precision, scale'" +
2974 " WHEN \"sqlname\" IN ('time','timetz','timestamp','timestamptz','sec_interval') THEN 'precision'" + 2974 " WHEN \"sqlname\" IN ('time','timetz','timestamp','timestamptz','sec_interval') THEN 'precision'" +
2975 " ELSE NULL END AS \"CREATE_PARAMS\", " + 2975 " ELSE NULL END AS \"CREATE_PARAMS\", " +
2976 "cast(CASE WHEN \"systemname\" = 'oid' THEN ").append(DatabaseMetaData.typeNoNulls) 2976 "cast(CASE WHEN \"systemname\" = 'oid' THEN ").append(DatabaseMetaData.typeNoNulls)
2977 .append(" ELSE ").append(DatabaseMetaData.typeNullable).append(" END AS smallint) AS \"NULLABLE\", " + 2977 .append(" ELSE ").append(DatabaseMetaData.typeNullable).append(" END AS smallint) AS \"NULLABLE\", " +
2978 "CASE WHEN \"systemname\" IN ('str','json','url') THEN true ELSE false END AS \"CASE_SENSITIVE\", " + 2978 "CASE WHEN \"systemname\" IN ('str','json','url','xml') THEN true ELSE false END AS \"CASE_SENSITIVE\", " +
2979 "cast(CASE WHEN \"systemname\" IN ('str','inet','json','url','uuid') THEN ").append(DatabaseMetaData.typeSearchable) 2979 "cast(CASE WHEN \"systemname\" IN ('str','inet','json','url','uuid','xml') THEN ").append(DatabaseMetaData.typeSearchable)
2980 .append(" ELSE ").append(DatabaseMetaData.typePredBasic).append(" END AS smallint) AS \"SEARCHABLE\", " + 2980 .append(" ELSE ").append(DatabaseMetaData.typePredBasic).append(" END AS smallint) AS \"SEARCHABLE\", " +
2981 "CASE WHEN \"sqlname\" IN ('tinyint','smallint','int','bigint','hugeint','decimal','real','double'" + 2981 "CASE WHEN \"sqlname\" IN ('tinyint','smallint','int','bigint','hugeint','decimal','real','double'" +
2982 ",'day_interval','month_interval','sec_interval') THEN false ELSE true END AS \"UNSIGNED_ATTRIBUTE\", " + 2982 ",'day_interval','month_interval','sec_interval') THEN false ELSE true END AS \"UNSIGNED_ATTRIBUTE\", " +
2983 "CASE \"sqlname\" WHEN 'decimal' THEN true ELSE false END AS \"FIXED_PREC_SCALE\", " + 2983 "CASE \"sqlname\" WHEN 'decimal' THEN true ELSE false END AS \"FIXED_PREC_SCALE\", " +
2984 "CASE WHEN \"sqlname\" IN ('tinyint','smallint','int','bigint') THEN true ELSE false END AS \"AUTO_INCREMENT\", " + 2984 "CASE WHEN \"sqlname\" IN ('tinyint','smallint','int','bigint') THEN true ELSE false END AS \"AUTO_INCREMENT\", " +
3259 // next 4 UDTs are standard 3259 // next 4 UDTs are standard
3260 " WHEN 'inet' THEN 'org.monetdb.jdbc.types.INET'" + 3260 " WHEN 'inet' THEN 'org.monetdb.jdbc.types.INET'" +
3261 " WHEN 'json' THEN 'java.lang.String'" + 3261 " WHEN 'json' THEN 'java.lang.String'" +
3262 " WHEN 'url' THEN 'org.monetdb.jdbc.types.URL'" + 3262 " WHEN 'url' THEN 'org.monetdb.jdbc.types.URL'" +
3263 " WHEN 'uuid' THEN 'java.lang.String'" + 3263 " WHEN 'uuid' THEN 'java.lang.String'" +
3264 // next UDT only when "CREATE TYPE xml EXTERNAL NAME xml;" is executed
3265 " WHEN 'xml' THEN 'java.lang.String'" +
3264 " ELSE 'java.lang.Object' END AS \"CLASS_NAME\", " + 3266 " ELSE 'java.lang.Object' END AS \"CLASS_NAME\", " +
3265 "cast(CASE WHEN t.\"sqlname\" IN ('inet', 'json', 'url', 'uuid') THEN ").append(Types.JAVA_OBJECT) 3267 "cast(CASE WHEN t.\"sqlname\" IN ('inet','json','url','uuid','xml') THEN ").append(Types.JAVA_OBJECT)
3266 .append(" ELSE ").append(Types.STRUCT).append(" END AS int) AS \"DATA_TYPE\", " + 3268 .append(" ELSE ").append(Types.STRUCT).append(" END AS int) AS \"DATA_TYPE\", " +
3267 "t.\"systemname\" AS \"REMARKS\", " + 3269 "t.\"systemname\" AS \"REMARKS\", " +
3268 "cast(null as smallint) AS \"BASE_TYPE\" " + 3270 "cast(null as smallint) AS \"BASE_TYPE\" " +
3269 "FROM \"sys\".\"types\" t " + 3271 "FROM \"sys\".\"types\" t " +
3270 "JOIN \"sys\".\"schemas\" s ON t.\"schema_id\" = s.\"id\" " + 3272 "JOIN \"sys\".\"schemas\" s ON t.\"schema_id\" = s.\"id\" " +