Changeset: 9af775dc71c8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9af775dc71c8 Added Files: sql/jdbc/tests/Tests/Test_Dobjects.SQL.bat Removed Files: sql/test/Users/Tests/util.py Modified Files: java/ChangeLog java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java java/tests/Test_Dobjects.java monetdb5/optimizer/opt_volcano.c sql/backends/monet5/sql_optimizer.c sql/jdbc/tests/Tests/All sql/jdbc/tests/Tests/Test_Dobjects.stable.out sql/jdbc/tests/Tests/Test_PSmetadata.stable.out sql/jdbc/tests/Tests/Test_Rmetadata.stable.out sql/jdbc/tests/Tests/Test_Rsqldata.stable.out sql/test/Users/Tests/changePasswordUser.SQL.py sql/test/Users/Tests/changeSchemaUser.SQL.py sql/test/Users/Tests/columnRights.SQL.py sql/test/Users/Tests/dropManyUsers.Bug-3764.SQL.py sql/test/Users/Tests/grantMonetdb.SQL.py sql/test/Users/Tests/grantMonetdbToRegularUser.Bug-3771.SQL.py sql/test/Users/Tests/grantMonetdbToSchemaOwner.Bug-3771.SQL.py sql/test/Users/Tests/grantPrivilegesNonDefaultRole.Bug-3365.SQL.py sql/test/Users/Tests/grantRevokeAndGrantAgain.Bug-3765.SQL.py sql/test/Users/Tests/grantRole.Bug-3772.SQL.py sql/test/Users/Tests/renameUser.SQL.py sql/test/Users/Tests/role.SQL.py sql/test/Users/Tests/schemaRights.SQL.py sql/test/Users/Tests/withGrantOption.SQL.py sql/test/pg_regress/Tests/int8.sql sql/test/pg_regress/Tests/int8.stable.err sql/test/pg_regress/Tests/int8.stable.out sql/test/pg_regress/Tests/int8.stable.out.int128 Branch: embedded Log Message:
merge diffs (truncated from 791 to 300 lines): diff --git a/java/ChangeLog b/java/ChangeLog --- a/java/ChangeLog +++ b/java/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog file for java # This file is updated with Maddlog +* Thu Feb 4 2016 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> +- Method getFunctionColumns() in DatabaseMetadata used to throw an + SQLException: getFunctionColumns(String, String, String, String) is + not implemented This method is now implemented and returns a resultset. + * Thu Jan 28 2016 Martin van Dinther <martin.van.dint...@monetdbsolutions.com> - Method getFunctions() in DatabaseMetadata used to throw an SQLException: SELECT: no such column 'functions.sql' This has been corrected. It diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java --- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java +++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java @@ -10,7 +10,6 @@ package nl.cwi.monetdb.jdbc; import java.sql.Connection; import java.sql.DatabaseMetaData; -import java.sql.Driver; import java.sql.Statement; import java.sql.SQLException; import java.sql.ResultSet; @@ -47,12 +46,12 @@ public class MonetDatabaseMetaData exten } /** - * Internal cache for 3 environment properties retrieved from the + * Internal cache for 3 environment values retrieved from the * server, to avoid querying the server over and over again. * Once a value is read, it is kept in the private env_* variables for reuse. * We currently only need the env values of: current_user, monet_version and max_clients. */ - private synchronized void getEnvProperties() { + private synchronized void getEnvValues() { Statement st = null; ResultSet rs = null; try { @@ -135,7 +134,7 @@ public class MonetDatabaseMetaData exten @Override public String getUserName() throws SQLException { if (env_current_user == null) - getEnvProperties(); + getEnvValues(); return env_current_user; } @@ -210,7 +209,7 @@ public class MonetDatabaseMetaData exten @Override public String getDatabaseProductVersion() throws SQLException { if (env_monet_version == null) - getEnvProperties(); + getEnvValues(); return env_monet_version; } @@ -655,16 +654,16 @@ public class MonetDatabaseMetaData exten /** * Are expressions in "ORDER BY" lists supported? - * * e.g. select * from t order by a + b; * - * MonetDB does not support this (yet?) + * MonetDB supports this, try: + * select (radix * 1000) + digits as comp, * from types order by (radix * 1000) + digits, -id; * * @return true if so */ @Override public boolean supportsExpressionsInOrderBy() { - return false; + return true; } /** @@ -1297,7 +1296,7 @@ public class MonetDatabaseMetaData exten @Override public int getMaxConnections() { if (env_max_clients == null) - getEnvProperties(); + getEnvValues(); int max_clients = 16; if (env_max_clients != null) { @@ -3266,7 +3265,7 @@ public class MonetDatabaseMetaData exten @Override public int getDatabaseMajorVersion() throws SQLException { if (env_monet_version == null) - getEnvProperties(); + getEnvValues(); int major = 0; if (env_monet_version != null) { try { @@ -3288,7 +3287,7 @@ public class MonetDatabaseMetaData exten @Override public int getDatabaseMinorVersion() throws SQLException { if (env_monet_version == null) - getEnvProperties(); + getEnvValues(); int minor = 0; if (env_monet_version != null) { try { @@ -3549,9 +3548,43 @@ public class MonetDatabaseMetaData exten * Retrieves a description of the given catalog's system or user * function parameters and return type. * - * We don't implement this, because it is too much work, and left as - * an SQL exercise for the future. This function is here just for - * JDBC4. + * + * Only descriptions matching the schema, function and parameter name criteria are returned. + * They are ordered by FUNCTION_CAT, FUNCTION_SCHEM, FUNCTION_NAME and SPECIFIC_ NAME. + * Within this, the return value, if any, is first. Next are the parameter descriptions in call order. + * The column descriptions follow in column number order. + * + * 1. FUNCTION_CAT String => function catalog (may be null) + * 2. FUNCTION_SCHEM String => function schema (may be null) + * 3. FUNCTION_NAME String => function name. This is the name used to invoke the function + * 4. COLUMN_NAME String => column/parameter name + * 5. COLUMN_TYPE Short => kind of column/parameter: + * functionColumnUnknown - nobody knows + * functionColumnIn - IN parameter + * functionColumnInOut - INOUT parameter + * functionColumnOut - OUT parameter + * functionColumnReturn - function return value + * functionColumnResult - Indicates that the parameter or column is a column in the ResultSet + * 6. DATA_TYPE int => SQL type from java.sql.Types + * 7. TYPE_NAME String => SQL type name, for a UDT type the type name is fully qualified + * 8. PRECISION int => precision + * 9. LENGTH int => length in bytes of data + * 10. SCALE short => scale - null is returned for data types where SCALE is not applicable. + * 11. RADIX short => radix + * 12. NULLABLE short => can it contain NULL. + * functionNoNulls - does not allow NULL values + * functionNullable - allows NULL values + * functionNullableUnknown - nullability unknown + * 13. REMARKS String => comment describing column/parameter + * 14. CHAR_OCTET_LENGTH int => the maximum length of binary and character based parameters or columns. For any other datatype the returned value is a NULL + * 15. ORDINAL_POSITION int => the ordinal position, starting from 1, for the input and output parameters. + * A value of 0 is returned if this row describes the function's return value. For result set columns, it is the ordinal position of the column in the result set starting from 1. + * 16. IS_NULLABLE String => ISO rules are used to determine the nullability for a parameter or column. + * YES --- if the parameter or column can include NULLs + * NO --- if the parameter or column cannot include NULLs + * empty string --- if the nullability for the parameter or column is unknown + * 17. SPECIFIC_NAME String => the name which uniquely identifies this function within its schema. + * This is a user specified, or DBMS generated, name that may be different then the FUNCTION_NAME for example with overload functions * * @param catalog a catalog name; must match the catalog name as * it is stored in the database; "" retrieves those without a @@ -3577,7 +3610,42 @@ public class MonetDatabaseMetaData exten String columnNamePattern) throws SQLException { - throw new SQLException("getFunctionColumns(String, String, String, String) is not implemented", "0A000"); + StringBuilder query = new StringBuilder(2600); + query.append("SELECT DISTINCT CAST(null as char(1)) AS \"FUNCTION_CAT\", ") + .append("\"schemas\".\"name\" AS \"FUNCTION_SCHEM\", ") + .append("\"functions\".\"name\" AS \"FUNCTION_NAME\", ") + .append("\"args\".\"name\" AS \"COLUMN_NAME\", ") + .append("CAST(CASE \"args\".\"inout\"") + .append(" WHEN 0 THEN (CASE \"args\".\"number\" WHEN 0 THEN ").append(DatabaseMetaData.functionReturn).append(" ELSE ").append(DatabaseMetaData.functionColumnOut).append(" END)") + .append(" WHEN 1 THEN ").append(DatabaseMetaData.functionColumnIn) + .append(" ELSE ").append(DatabaseMetaData.functionColumnUnknown).append(" END AS smallint) AS \"COLUMN_TYPE\", ") + .append("CAST(").append(MonetDriver.getSQLTypeMap("\"args\".\"type\"")).append(" AS int) AS \"DATA_TYPE\", ") + .append("\"args\".\"type\" AS \"TYPE_NAME\", ") + .append("CASE \"args\".\"type\" WHEN 'tinyint' THEN 3 WHEN 'smallint' THEN 5 WHEN 'int' THEN 10 WHEN 'bigint' THEN 19 WHEN 'hugeint' THEN 38 WHEN 'oid' THEN 19 WHEN 'wrd' THEN 19 ELSE \"args\".\"type_digits\" END AS \"PRECISION\", ") + .append("CASE \"args\".\"type\" WHEN 'tinyint' THEN 1 WHEN 'smallint' THEN 2 WHEN 'int' THEN 4 WHEN 'bigint' THEN 8 WHEN 'hugeint' THEN 16 WHEN 'oid' THEN 8 WHEN 'wrd' THEN 8 ELSE \"args\".\"type_digits\" END AS \"LENGTH\", ") + .append("CAST(CASE WHEN \"args\".\"type\" IN ('tinyint','smallint','int','bigint','hugeint','oid','wrd','decimal','numeric','time','timetz','timestamp','timestamptz','sec_interval') THEN \"args\".\"type_scale\" ELSE NULL END AS smallint) AS \"SCALE\", ") + .append("CAST(CASE WHEN \"args\".\"type\" IN ('tinyint','smallint','int','bigint','hugeint','oid','wrd','decimal','numeric') THEN 10 WHEN \"args\".\"type\" IN ('real','float','double') THEN 2 ELSE NULL END AS smallint) AS \"RADIX\", ") + .append("CAST(").append(DatabaseMetaData.functionNullableUnknown).append(" AS smallint) AS \"IS_NULLABLE\", ") + .append("CAST(null as char(1)) AS \"REMARKS\", ") + .append("CASE WHEN \"args\".\"type\" IN ('char','varchar','binary','varbinary') THEN \"args\".\"type_digits\" ELSE NULL END AS \"CHAR_OCTET_LENGTH\", ") + .append("\"args\".\"number\" AS \"ORDINAL_POSITION\", ") + .append("CAST('' as varchar(3)) AS \"IS_NULLABLE\", ") + .append("CAST(null as char(1)) AS \"SPECIFIC_NAME\" ") + .append("FROM \"sys\".\"args\", \"sys\".\"functions\", \"sys\".\"schemas\" ") + .append("WHERE \"args\".\"func_id\" = \"functions\".\"id\" ") + .append("AND \"functions\".\"schema_id\" = \"schemas\".\"id\" ") + // exclude procedures (type = 2). Those need to be returned via getProcedures() + .append("AND \"functions\".\"type\" <> 2"); + + if (schemaPattern != null) { + query.append(" AND \"schemas\".\"name\" ").append(composeMatchPart(schemaPattern)); + } + if (functionNamePattern != null) { + query.append(" AND \"functions\".\"name\" ").append(composeMatchPart(functionNamePattern)); + } + query.append(" ORDER BY \"FUNCTION_SCHEM\", \"FUNCTION_NAME\", \"ORDINAL_POSITION\""); + + return getStmt().executeQuery(query.toString()); } //== 1.7 methods (JDBC 4.1) diff --git a/java/tests/Test_Dobjects.java b/java/tests/Test_Dobjects.java --- a/java/tests/Test_Dobjects.java +++ b/java/tests/Test_Dobjects.java @@ -35,9 +35,9 @@ public class Test_Dobjects { try { // inspect the catalog by use of dbmd functions dumpResultSet(dbmd.getCatalogs()); - dumpResultSet(dbmd.getSchemas()); +// dumpResultSet(dbmd.getSchemas()); // this produces different outputs on different platforms due to dependency on SAMTOOLS and NETCDF. so exclude it dumpResultSet(dbmd.getSchemas(null, "sys")); - dumpResultSet(dbmd.getTables(null, null, null, null)); + dumpResultSet(dbmd.getTables(null, "sys", null, null)); } catch (SQLException e) { System.out.println("FAILED :( "+ e.getMessage()); System.out.println("ABORTING TEST!!!"); diff --git a/monetdb5/optimizer/opt_volcano.c b/monetdb5/optimizer/opt_volcano.c --- a/monetdb5/optimizer/opt_volcano.c +++ b/monetdb5/optimizer/opt_volcano.c @@ -7,7 +7,8 @@ */ /* - * Mark the production and use of candidate lists. + * Selectively inject serialization operations when we know the + * raw footprint of the query exceeds 80% of RAM. */ #include "monetdb_config.h" diff --git a/sql/backends/monet5/sql_optimizer.c b/sql/backends/monet5/sql_optimizer.c --- a/sql/backends/monet5/sql_optimizer.c +++ b/sql/backends/monet5/sql_optimizer.c @@ -191,7 +191,7 @@ addOptimizers(Client c, MalBlkPtr mb, ch space = SQLgetStatistics(c, be->mvc, mb); if(space && (pipe == NULL || strcmp(pipe,"default_pipe")== 0)){ - if( space > (lng)(0.8 * MT_npages() * MT_pagesize()) ){ + if( space > (lng)(0.8 * MT_npages() * MT_pagesize()) && GDKnr_threads > 1){ pipe = "volcano_pipe"; //mnstr_printf(GDKout, "#use volcano optimizer pipeline? "SZFMT"\n", space); }else diff --git a/sql/jdbc/tests/Tests/All b/sql/jdbc/tests/Tests/All --- a/sql/jdbc/tests/Tests/All +++ b/sql/jdbc/tests/Tests/All @@ -5,7 +5,7 @@ HAVE_JDBCTESTS?Test_Creplysize HAVE_JDBCTESTS?Test_Csavepoints HAVE_JDBCTESTS?Test_Ctransaction #HAVE_JDBCTESTS?Test_Csendthread # unfortunately has runtime-dependant output -HAVE_JDBCTESTS&HAVE_SAMTOOLS&HAVE_NETCDF?Test_Dobjects +HAVE_JDBCTESTS?Test_Dobjects HAVE_JDBCTESTS?Test_PSgeneratedkeys HAVE_JDBCTESTS?Test_PSsomeamount HAVE_JDBCTESTS?Test_PSlargebatchval diff --git a/sql/jdbc/tests/Tests/Test_Dobjects.SQL.bat b/sql/jdbc/tests/Tests/Test_Dobjects.SQL.bat new file mode 100755 --- /dev/null +++ b/sql/jdbc/tests/Tests/Test_Dobjects.SQL.bat @@ -0,0 +1,1 @@ +@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/Test_Dobjects.stable.out b/sql/jdbc/tests/Tests/Test_Dobjects.stable.out --- a/sql/jdbc/tests/Tests/Test_Dobjects.stable.out +++ b/sql/jdbc/tests/Tests/Test_Dobjects.stable.out @@ -30,24 +30,11 @@ Ready. Resultset with 1 columns TABLE_CAT - -Resultset with 3 columns -TABLE_SCHEM TABLE_CATALOG TABLE_CAT -bam null null -json null null -profiler null null -sys null null -tmp null null Resultset with 3 columns TABLE_SCHEM TABLE_CATALOG TABLE_CAT sys null null Resultset with 10 columns TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME REF_GENERATION -null bam export SYSTEM TABLE null null null null rowid SYSTEM -null bam files SYSTEM TABLE null null null null rowid SYSTEM -null bam pg SYSTEM TABLE null null null null rowid SYSTEM -null bam rg SYSTEM TABLE null null null null rowid SYSTEM -null bam sq SYSTEM TABLE null null null null rowid SYSTEM null sys _columns SYSTEM TABLE null null null null rowid SYSTEM null sys _tables SYSTEM TABLE null null null null rowid SYSTEM null sys args SYSTEM TABLE null null null null rowid SYSTEM @@ -76,12 +63,6 @@ null sys table_types SYSTEM TABLE null n null sys triggers SYSTEM TABLE null null null null rowid SYSTEM null sys types SYSTEM TABLE null null null null rowid SYSTEM null sys user_role SYSTEM TABLE null null null null rowid SYSTEM -null tmp _columns SYSTEM TABLE null null null null rowid SYSTEM -null tmp _tables SYSTEM TABLE null null null null rowid SYSTEM -null tmp idxs SYSTEM TABLE null null null null rowid SYSTEM -null tmp keys SYSTEM TABLE null null null null rowid SYSTEM -null tmp objects SYSTEM TABLE null null null null rowid SYSTEM -null tmp triggers SYSTEM TABLE null null null null rowid SYSTEM null sys columns SYSTEM VIEW SELECT * FROM (SELECT p.* FROM "sys"."_columns" AS p UNION ALL SELECT t.* FROM "tmp"."_columns" AS t) AS columns; null null null rowid SYSTEM null sys environment SYSTEM VIEW create view sys.environment as select * from sys.environment(); null null null rowid SYSTEM null sys optimizers SYSTEM VIEW create view sys.optimizers as select * from sys.optimizers(); null null null rowid SYSTEM diff --git a/sql/jdbc/tests/Tests/Test_PSmetadata.stable.out b/sql/jdbc/tests/Tests/Test_PSmetadata.stable.out --- a/sql/jdbc/tests/Tests/Test_PSmetadata.stable.out +++ b/sql/jdbc/tests/Tests/Test_PSmetadata.stable.out @@ -52,7 +52,7 @@ Ready. _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list