Mercurial > hg > monetdb-java
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(); }