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

Reply via email to