Changeset: 869218e72161 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=869218e72161
Modified Files:
        clients/mapiclient/mclient.c
        common/stream/stream.c
        java/src/main/java/nl/cwi/monetdb/jdbc/MonetDatabaseMetaData.java
        java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
Branch: default
Log Message:

Merge with Jun2016 branch.


diffs (221 lines):

diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1995,6 +1995,8 @@ doFileBulk(Mapi mid, stream *fp)
        buf = malloc(bufsize + 1);
        if (!buf) {
                fprintf(stderr, "cannot allocate memory for send buffer\n");
+               if (fp)
+                       close_stream(fp);
                return 1;
        }
 
@@ -2067,6 +2069,8 @@ doFileBulk(Mapi mid, stream *fp)
 
        free(buf);
        mnstr_flush(toConsole);
+       if (fp)
+               close_stream(fp);
        return errseen;
 }
 
@@ -2637,11 +2641,12 @@ doFile(Mapi mid, stream *fp, int useinse
                                         * convert filename from UTF-8
                                         * to locale */
                                        if ((s = open_rastream(line)) == NULL ||
-                                           mnstr_errnr(s))
+                                           mnstr_errnr(s)) {
+                                               if (s)
+                                                       close_stream(s);
                                                fprintf(stderr, "%s: cannot 
open\n", line);
-                                       else
+                                       } else
                                                doFile(mid, s, 0, 0, 0);
-                                       close_stream(s);
                                        continue;
                                }
                                case '>':
@@ -2832,6 +2837,7 @@ doFile(Mapi mid, stream *fp, int useinse
        if (prompt)
                deinit_readline();
 #endif
+       close_stream(fp);
        return errseen;
 }
 
@@ -3381,7 +3387,9 @@ main(int argc, char **argv)
                        stream *s;
 
                        if (fp == NULL &&
-                           (fp = fopen(argv[optind], "r")) == NULL) {
+                           (fp = (strcmp(argv[optind], "-") == 0 ?
+                                  stdin :
+                                  fopen(argv[optind], "r"))) == NULL) {
                                fprintf(stderr, "%s: cannot open\n", 
argv[optind]);
                                c |= 1;
                        } else if ((s = file_rastream(fp, argv[optind])) == 
NULL) {
@@ -3389,7 +3397,6 @@ main(int argc, char **argv)
                                c |= 1;
                        } else {
                                c |= doFile(mid, s, useinserts, interactive, 
save_history);
-                               close_stream(s);
                        }
                        fp = NULL;
                        optind++;
@@ -3400,7 +3407,6 @@ main(int argc, char **argv)
        if (!has_fileargs && command == NULL) {
                stream *s = file_rastream(stdin, "<stdin>");
                c = doFile(mid, s, useinserts, interactive, save_history);
-               mnstr_destroy(s);
        }
 
        mapi_destroy(mid);
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -4575,6 +4575,8 @@ cb_destroy(stream *s)
 
        if (cb->destroy)
                (*cb->destroy)(cb->private);
+       free(cb);
+       s->stream_data.p = NULL;
        destroy(s);
 }
 
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
@@ -1190,7 +1190,7 @@ public class MonetDatabaseMetaData exten
         */
        @Override
        public boolean supportsStoredProcedures() {
-               return false;
+               return true;
        }
 
        /**
@@ -2476,7 +2476,7 @@ public class MonetDatabaseMetaData exten
                if (table != null) {
                        query.append(" AND \"tables\".\"name\" 
").append(composeMatchPart(table));
                }
-               if (scope != DatabaseMetaData.bestRowSession) {
+               if (scope != DatabaseMetaData.bestRowSession && scope != 
DatabaseMetaData.bestRowTransaction && scope != 
DatabaseMetaData.bestRowTemporary) {
                        query.append(" AND 1 = 0");
                }
                if (!nullable) {
diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java 
b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
--- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
+++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
@@ -345,11 +345,14 @@ public class MonetResultSet extends Mone
        public InputStream getAsciiStream(String columnName) throws 
SQLException {
                throw newSQLFeatureNotSupportedException("getAsciiStream");
        }
+
        @Override
+       @Deprecated
        public InputStream getUnicodeStream(int columnIndex) throws 
SQLException {
                throw newSQLFeatureNotSupportedException("getUnicodeStream");
        }
        @Override
+       @Deprecated
        public InputStream getUnicodeStream(String columnName) throws 
SQLException {
                throw newSQLFeatureNotSupportedException("getUnicodeStream");
        }
@@ -633,6 +636,7 @@ public class MonetResultSet extends Mone
         * @throws SQLException if a database access error occurs
         */
        @Override
+       @Deprecated
        public BigDecimal getBigDecimal(int columnIndex, int scale)
                throws SQLException
        {
@@ -675,6 +679,7 @@ public class MonetResultSet extends Mone
         * @throws SQLException if a database access error occurs
         */
        @Override
+       @Deprecated
        public BigDecimal getBigDecimal(String columnName, int scale)
                throws SQLException
        {
@@ -1574,32 +1579,29 @@ public class MonetResultSet extends Mone
                         */
                        @Override
                        public String getColumnClassName(int column) throws 
SQLException {
-                               try {
-                                       if (conn == null) {
-                                               // prevent NullPointerException 
when statement is null (i.c. MonetVirtualResultSet)
-                                               if (getStatement() != null) {
-                                                       // first time, get a 
Connection object and cache it for all next columns
-                                                       conn = 
getStatement().getConnection();
-                                               }
+                               final String MonetDBtype = 
getColumnTypeName(column);
+                               Class<?> type = null;
+                               if (conn == null) {
+                                       // prevent NullPointerException when 
statement is null (i.c. MonetVirtualResultSet)
+                                       if (getStatement() != null) {
+                                               // first time, get a Connection 
object and cache it for all next columns
+                                               conn = 
getStatement().getConnection();
                                        }
-                                       if (conn != null) {
-                                               Class type = null;
-                                               Map map = conn.getTypeMap();
-                                               if (map != null && 
map.containsKey(types[column - 1])) {
-                                                       type = 
(Class)map.get(types[column - 1]);
-                                               } else {
-                                                       type = 
getClassForType(getJavaType(types[column - 1]));
-                                               }
-                                               if (type != null)
-                                                       return type.getName();
+                               }
+                               if (conn != null) {
+                                       Map map = conn.getTypeMap();
+                                       if (map != null && 
map.containsKey(MonetDBtype)) {
+                                               type = 
(Class)map.get(MonetDBtype);
                                        }
-                                       throw new SQLException("column type 
mapping null: " + types[column - 1], "M0M03");
-                               } catch (IndexOutOfBoundsException e) {
-                                       throw new SQLException("No such column 
" + column, "M1M05");
-                               } catch (NullPointerException npe) {
-                                       /* do nothing */
                                }
-                               return "";
+                               if (type == null) {
+                                       // fallback to the standard Class 
mappings
+                                       type = 
getClassForType(getJavaType(MonetDBtype));
+                               }
+                               if (type != null) {
+                                       return type.getName();
+                               }
+                               throw new SQLException("column type mapping 
null: " + MonetDBtype, "M0M03");
                        }
 
                        /**
@@ -1797,8 +1799,6 @@ public class MonetResultSet extends Mone
                                throw new SQLException(ie.getMessage(), 
"M0M27");
                        } catch (IllegalAccessException iae) {
                                throw new SQLException(iae.getMessage(), 
"M0M27");
-                       } catch (IllegalArgumentException ige) {
-                               throw new SQLException(ige.getMessage(), 
"M0M27");
                        } catch (InvocationTargetException ite) {
                                throw new SQLException(ite.getMessage(), 
"M0M27");
                        }
@@ -2013,7 +2013,7 @@ public class MonetResultSet extends Mone
                 * This switch returns the types as objects according to table 
B-3 from
                 * Oracle's JDBC specification 4.1
                 */
-               // keep this switch aligned with getObject(int, Map) !
+               // keep this switch regarding the returned classes aligned with 
getObject(int, Map) !
                switch(type) {
                        case Types.CHAR:
                        case Types.VARCHAR:
@@ -2022,9 +2022,9 @@ public class MonetResultSet extends Mone
                        case Types.NUMERIC:
                        case Types.DECIMAL:
                                return BigDecimal.class;
-                       case Types.BIT: // we don't use type BIT, it's here for 
completeness
                        case Types.BOOLEAN:
                                return Boolean.class;
+                       case Types.BIT: // MonetDB doesn't support type BIT, 
it's here for completeness
                        case Types.TINYINT:
                        case Types.SMALLINT:
                                return Short.class;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to