Changeset: 3b7ea2095f19 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3b7ea2095f19 Modified Files: java/src/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java Branch: default Log Message:
Merge with Jul2015 branch. diffs (95 lines): diff --git a/java/src/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java b/java/src/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java --- a/java/src/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java +++ b/java/src/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java @@ -2045,72 +2045,43 @@ public class MonetDatabaseMetaData exten boolean nullable ) throws SQLException { - String query = - "SELECT \"columns\".\"name\" AS \"COLUMN_NAME\", \"columns\".\"type\" AS \"TYPE_NAME\", " + + String query = "SELECT " + DatabaseMetaData.bestRowSession + " AS \"SCOPE\", " + + "\"columns\".\"name\" AS \"COLUMN_NAME\", " + + MonetDriver.getSQLTypeMap("\"columns\".\"type\"") + " AS \"DATA_TYPE\", " + + "\"columns\".\"type\" AS \"TYPE_NAME\", " + "\"columns\".\"type_digits\" AS \"COLUMN_SIZE\", 0 AS \"BUFFER_LENGTH\", " + - "\"columns\".\"type_scale\" AS \"DECIMAL_DIGITS\", \"keys\".\"type\" AS \"keytype\" " + + "\"columns\".\"type_scale\" AS \"DECIMAL_DIGITS\", " + + DatabaseMetaData.bestRowNotPseudo + " AS \"PSEUDO_COLUMN\" " + "FROM \"sys\".\"keys\" AS \"keys\", " + "\"sys\".\"objects\" AS \"objects\", " + "\"sys\".\"columns\" AS \"columns\", " + "\"sys\".\"tables\" AS \"tables\", " + "\"sys\".\"schemas\" AS \"schemas\" " + - "WHERE \"keys\".\"id\" = \"objects\".\"id\" AND \"keys\".\"table_id\" = \"tables\".\"id\" " + + "WHERE \"keys\".\"id\" = \"objects\".\"id\" " + + "AND \"keys\".\"table_id\" = \"tables\".\"id\" " + "AND \"keys\".\"table_id\" = \"columns\".\"table_id\" " + "AND \"objects\".\"name\" = \"columns\".\"name\" " + "AND \"tables\".\"schema_id\" = \"schemas\".\"id\" " + - "AND \"keys\".\"type\" IN (0, 1) "; - - // SCOPE, DATA_TYPE, PSEUDO_COLUMN have to be generated with Java logic + "AND \"keys\".\"type\" IN (0, 1) "; // only primary keys (type = 0) and unique keys (type = 1), not fkeys (type = 2) if (schema != null) { - query += "AND LOWER(\"schemas\".\"name\") LIKE '" + escapeQuotes(schema).toLowerCase() + "' "; + if (schema.contains("%") || schema.contains("_")) + query += "AND LOWER(\"schemas\".\"name\") LIKE '" + escapeQuotes(schema).toLowerCase() + "' "; + else + query += "AND \"schemas\".\"name\" = '" + escapeQuotes(schema) + "' "; } if (table != null) { - query += "AND LOWER(\"tables\".\"name\") LIKE '" + escapeQuotes(table).toLowerCase() + "' "; + if (table.contains("%") || table.contains("_")) + query += "AND LOWER(\"tables\".\"name\") LIKE '" + escapeQuotes(table).toLowerCase() + "' "; + else + query += "AND \"tables\".\"name\" = '" + escapeQuotes(table) + "' "; } if (!nullable) { query += "AND \"columns\".\"null\" = false "; } + query += "ORDER BY \"keys\".\"type\""; - query += "ORDER BY \"keytype\""; - - String columns[] = { - "SCOPE", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", - "BUFFER_LENGTH", "DECIMAL_DIGITS", "PSEUDO_COLUMN" - }; - - String types[] = { - "int", "varchar", "int", "varchar", "int", - "int", "int", "int" - }; - - List<String[]> tmpRes = new ArrayList<String[]>(); - - ResultSet rs = getStmt().executeQuery(query); - try { - while (rs.next()) { - String[] result = new String[8]; - result[0] = "" + DatabaseMetaData.bestRowSession; - result[1] = rs.getString("column_name"); - result[2] = "" + MonetDriver.getJavaType(rs.getString("type_name")); - result[3] = rs.getString("type_name"); - result[4] = rs.getString("column_size"); - result[5] = rs.getString("buffer_length"); - result[6] = rs.getString("decimal_digits"); - result[7] = "" + DatabaseMetaData.bestRowNotPseudo; - tmpRes.add(result); - } - } finally { - rs.close(); - } - - String[][] results = tmpRes.toArray(new String[tmpRes.size()][]); - - try { - return new MonetVirtualResultSet(columns, types, results); - } catch (IllegalArgumentException e) { - throw new SQLException("Internal driver error: " + e.getMessage(), "M0M03"); - } + return getStmt().executeQuery(query); } /** _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list