changeset 808:6b7778153d23 monetdbs

Fully implement Target.buildURL
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Tue, 12 Dec 2023 11:59:03 +0100 (16 months ago)
parents 9239a3ef0bbd
children aa4108a5bc34
files src/main/java/org/monetdb/mcl/net/MonetUrlParser.java src/main/java/org/monetdb/mcl/net/Target.java
diffstat 2 files changed, 35 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/mcl/net/MonetUrlParser.java
+++ b/src/main/java/org/monetdb/mcl/net/MonetUrlParser.java
@@ -4,6 +4,7 @@ import java.io.UnsupportedEncodingExcept
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URLDecoder;
+import java.net.URLEncoder;
 
 public class MonetUrlParser {
     private final Target target;
@@ -49,7 +50,7 @@ public class MonetUrlParser {
         target.barrier();
     }
 
-    private static String percentDecode(String context, String text) throws URISyntaxException {
+    public static String percentDecode(String context, String text) throws URISyntaxException {
         try {
             return URLDecoder.decode(text, "UTF-8");
         } catch (UnsupportedEncodingException e) {
@@ -59,6 +60,14 @@ public class MonetUrlParser {
         }
     }
 
+    public static String percentEncode(String text) {
+        try {
+            return URLEncoder.encode(text, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     private void parseModern() throws URISyntaxException, ValidationError {
         clearBasic();
 
--- a/src/main/java/org/monetdb/mcl/net/Target.java
+++ b/src/main/java/org/monetdb/mcl/net/Target.java
@@ -409,11 +409,31 @@ public class Target {
 
     public String buildUrl() {
         final StringBuilder sb = new StringBuilder(128);
-        sb.append("jdbc:monetdb://").append(host)
-                .append(':').append(port)
-                .append('/').append(database);
-        if (!language.equals("sql"))
-            sb.append("?language=").append(language);
+        sb.append("jdbc:");
+        sb.append(tls ? "monetdbs": "monetdb");
+        sb.append("://");
+        sb.append(packHost(host));
+        if (!Parameter.PORT.getDefault().equals(port)) {
+            sb.append(':');
+            sb.append(port);
+        }
+        sb.append('/').append(database);
+        String sep = "?";
+        for (Parameter parm: Parameter.values()) {
+            if (parm.isCore || parm == Parameter.USER || parm == Parameter.PASSWORD)
+                continue;
+            Object defaultValue = parm.getDefault();
+            if (defaultValue == null)
+                continue;
+            Object value = getObject(parm);
+            if (value.equals(defaultValue))
+                continue;
+            sb.append(sep).append(parm.name).append('=');
+            String raw = getString(parm);
+            String encoded = MonetUrlParser.percentEncode(raw);
+            sb.append(encoded);
+            sep = "&";
+        }
         return sb.toString();
     }