changeset 792:9dea0795a926 monetdbs

Understand so_timeout, treat_clob_as_varchar and treat_blob_as_binary
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Fri, 01 Dec 2023 15:47:20 +0100 (16 months ago)
parents 4de810c22328
children 5bfe3357fb1c
files src/main/java/org/monetdb/mcl/net/Parameter.java src/main/java/org/monetdb/mcl/net/Target.java tests/UrlTester.java tests/tests.md
diffstat 4 files changed, 96 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/mcl/net/Parameter.java
+++ b/src/main/java/org/monetdb/mcl/net/Parameter.java
@@ -29,6 +29,9 @@ public enum Parameter {
     DEBUG("debug", ParameterType.Bool, false, "specific to jdbc", false),
     LOGFILE("logfile", ParameterType.Str, "", "specific to jdbc", false),
 
+    SO_TIMEOUT("so_timeout", ParameterType.Int, 0, "abort if network I/O does not complete in this many milliseconds", false),
+    CLOB_AS_VARCHAR("treat_clob_as_varchar", ParameterType.Bool, true, "return CLOB/TEXT data as type VARCHAR instead of type CLOB", false),
+    BLOB_AS_BINARY("treat_blob_as_binary", ParameterType.Bool, true, "return BLOB data as type BINARY instead of type BLOB", false),
     ;
 
     public final String name;
@@ -71,6 +74,9 @@ public enum Parameter {
             case "hash": return HASH;
             case "debug": return DEBUG;
             case "logfile": return LOGFILE;
+            case "so_timeout": return SO_TIMEOUT;
+            case "treat_clob_as_varchar": return CLOB_AS_VARCHAR;
+            case "treat_blob_as_binary": return BLOB_AS_BINARY;
             default: return null;
         }
     }
--- a/src/main/java/org/monetdb/mcl/net/Target.java
+++ b/src/main/java/org/monetdb/mcl/net/Target.java
@@ -28,6 +28,9 @@ public class Target {
     private String hash = "";
     private boolean debug = false;
     private String logfile = "";
+    private int soTimeout = 0;
+    private boolean treatClobAsVarchar = true;
+    private boolean treatBlobAsBinary = true;
 
     private boolean userWasSet = false;
     private boolean passwordWasSet = false;
@@ -102,8 +105,13 @@ public class Target {
             case HASH: setHash((String)value); break;
             case DEBUG: setDebug((boolean)value); break;
             case LOGFILE: setLogfile((String)value); break;
+
+            case SO_TIMEOUT: setSoTimeout((int)value); break;
+            case CLOB_AS_VARCHAR: setTreatClobAsVarchar((boolean)value); break;
+            case BLOB_AS_BINARY: setTreatBlobAsBinary((boolean)value); break;
+
             default:
-                throw new IllegalStateException("unreachable -- missing case");
+                throw new IllegalStateException("unreachable -- missing case: " + parm.name);
         }
     }
 
@@ -138,6 +146,9 @@ public class Target {
             case HASH: return hash;
             case DEBUG: return debug;
             case LOGFILE: return logfile;
+            case SO_TIMEOUT: return soTimeout;
+            case CLOB_AS_VARCHAR: return treatClobAsVarchar;
+            case BLOB_AS_BINARY: return treatBlobAsBinary;
             default:
                 throw new IllegalStateException("unreachable -- missing case");
         }
@@ -340,6 +351,31 @@ public class Target {
         this.logfile = logfile;
     }
 
+    public int getSoTimeout() {
+        return soTimeout;
+    }
+
+
+    public void setSoTimeout(int soTimeout) {
+        this.soTimeout = soTimeout;
+    }
+
+    public void setTreatClobAsVarchar(boolean treatClobAsVarchar) {
+        this.treatClobAsVarchar = treatClobAsVarchar;
+    }
+
+    public boolean isTreatClobAsVarchar() {
+        return treatClobAsVarchar;
+    }
+
+    public boolean isTreatBlobAsBinary() {
+        return treatBlobAsBinary;
+    }
+
+    public void setTreatBlobAsBinary(boolean treatBlobAsBinary) {
+        this.treatBlobAsBinary = treatBlobAsBinary;
+    }
+
     public Validated validate() throws ValidationError {
         return new Validated();
     }
@@ -519,6 +555,18 @@ public class Target {
             return logfile;
         }
 
+        public int getSoTimeout() {
+            return soTimeout;
+        }
+
+        public boolean isTreatClobAsVarchar() {
+            return treatClobAsVarchar;
+        }
+
+        public boolean isTreatBlobAsBinary() {
+            return treatBlobAsBinary;
+        }
+
         public boolean connectScan() {
             if (database.isEmpty()) return false;
             if (!sock.isEmpty() || !host.isEmpty() || port != -1) return false;
--- a/tests/UrlTester.java
+++ b/tests/UrlTester.java
@@ -21,6 +21,7 @@ public class UrlTester {
 
     public static void main(String[] args) throws Exception {
         checkDefaults();
+        checkParameters();
 
         int exitcode;
         UrlTester tester = new UrlTester();
@@ -30,6 +31,7 @@ public class UrlTester {
         System.exit(exitcode);
     }
 
+
     private static void checkDefaults() {
         Target target = new Target();
 
@@ -39,8 +41,17 @@ public class UrlTester {
                 continue;
             Object actual = target.getObject(parm);
             if (!expected.equals(actual)) {
-                System.err.println("Default for " + parm.name + " expected to be <" + expected + "> but is <" + actual + ">");
-                System.exit(1);
+                throw new RuntimeException("Default for " + parm.name + " expected to be <" + expected + "> but is <" + actual + ">");
+            }
+        }
+    }
+
+    private static void checkParameters() {
+        for (Parameter parm: Parameter.values()) {
+            Parameter found = Parameter.forName(parm.name);
+            if (parm != found) {
+                String foundStr = found != null ? found.name : "null";
+                throw new RuntimeException("Looking up <" + parm.name + ">, found <" + foundStr);
             }
         }
     }
--- a/tests/tests.md
+++ b/tests/tests.md
@@ -1457,3 +1457,31 @@ EXPECT language=sql
 ACCEPT mapi:monetdb://localhost:12345/db?_l%61nguage=mal
 ```
 
+# lalala Java
+
+```test
+ONLY jdbc
+EXPECT so_timeout=0
+SET so_timeout=42
+EXPECT so_timeout=42
+ACCEPT monetdb://?so_timeout=99
+EXPECT so_timeout=99
+```
+
+```test
+ONLY jdbc
+EXPECT treat_clob_as_varchar=true
+SET treat_clob_as_varchar=off
+EXPECT treat_clob_as_varchar=false
+ACCEPT monetdb://?treat_clob_as_varchar=yes
+EXPECT treat_clob_as_varchar=on
+```
+
+```test
+ONLY jdbc
+EXPECT treat_blob_as_binary=true
+SET treat_blob_as_binary=off
+EXPECT treat_blob_as_binary=false
+ACCEPT monetdb://?treat_blob_as_binary=yes
+EXPECT treat_blob_as_binary=on
+```