annotate src/main/java/org/monetdb/mcl/net/ClientInfo.java @ 911:95be1b83ae86

Add copyright info
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 18 Jul 2024 18:35:25 +0200 (9 months ago)
parents cc6425e98017
children 2543e24eb79a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
911
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
1 /*
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
2 * SPDX-License-Identifier: MPL-2.0
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
3 *
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
7 *
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
8 * Copyright 2024 MonetDB Foundation;
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
9 * Copyright August 2008 - 2023 MonetDB B.V.;
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
10 * Copyright 1997 - July 2008 CWI.
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
11 */
95be1b83ae86 Add copyright info
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 907
diff changeset
12
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
13 package org.monetdb.mcl.net;
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
14
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
15 import org.monetdb.jdbc.MonetDriver;
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
16
904
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
17 import java.io.File;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
18 import java.lang.management.ManagementFactory;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
19 import java.lang.management.RuntimeMXBean;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
20 import java.net.InetAddress;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
21 import java.net.UnknownHostException;
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
22 import java.sql.ClientInfoStatus;
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
23 import java.sql.SQLClientInfoException;
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
24 import java.sql.SQLException;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
25 import java.sql.SQLWarning;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
26 import java.util.HashMap;
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
27 import java.util.Map;
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
28 import java.util.Properties;
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
29 import java.util.Set;
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
30
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
31 /**
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
32 * Manage ClientInfo properties to track, and help generating a
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
33 * @{link SQLClientInfoException} if there is a failure
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
34 */
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
35 public class ClientInfo {
907
cc6425e98017 Implement DatabaseMetaData.getClientInfoProperties
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 905
diff changeset
36 public static final String defaultHostname = findHostname();
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
37
907
cc6425e98017 Implement DatabaseMetaData.getClientInfoProperties
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 905
diff changeset
38 public static final String defaultClientLibrary = findClientLibrary();
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
39
907
cc6425e98017 Implement DatabaseMetaData.getClientInfoProperties
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 905
diff changeset
40 public static final String defaultApplicationName = findApplicationName();
904
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
41
907
cc6425e98017 Implement DatabaseMetaData.getClientInfoProperties
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 905
diff changeset
42 public static final String defaultPid = findPid();
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
43
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
44 private final Properties props;
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
45 private HashMap<String, ClientInfoStatus> problems = null;
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
46
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
47 public ClientInfo() {
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
48 props = new Properties();
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
49 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
50
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
51 public void setDefaults() {
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
52 props.setProperty("ClientHostname", defaultHostname);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
53 props.setProperty("ClientLibrary", defaultClientLibrary);
904
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
54 props.setProperty("ClientPid", defaultPid);
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
55 props.setProperty("ApplicationName", defaultApplicationName);
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
56 props.setProperty("ClientRemark", "");
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
57 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
58
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
59 private static String findHostname() {
904
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
60 try {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
61 return InetAddress.getLocalHost().getHostName();
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
62 } catch (UnknownHostException e) {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
63 return "";
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
64 }
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
65 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
66
904
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
67 private static String findApplicationName() {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
68 String appName = "";
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
69 try {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
70 String prop = System.getProperty("sun.java.command");
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
71 if (prop != null) {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
72 // we want only the command, and not the arguments
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
73 prop = prop.split("\\s", 2)[0];
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
74 // keep only the basename5
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
75 int idx = prop.lastIndexOf(File.separatorChar);
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
76 if (idx >= 0)
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
77 prop = prop.substring(idx + 1);
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
78 appName = prop;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
79 }
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
80 } catch (SecurityException e) {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
81 // ignore
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
82 }
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
83
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
84 return appName;
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
85 }
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
86
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
87 private static String findPid() {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
88 try {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
89 RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean();
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
90 String pidAtHostname = mxbean.getName();
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
91 return pidAtHostname.split("@", 2)[0];
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
92 } catch (RuntimeException e) {
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
93 return "";
2d880f90be2a Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 903
diff changeset
94 }
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
95 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
96
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
97 private static String findClientLibrary() {
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
98 return "monetdb-java " + MonetDriver.getDriverVersion();
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
99 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
100
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
101 public String format() {
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
102 StringBuilder builder = new StringBuilder(200);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
103 for (String name : props.stringPropertyNames()) {
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
104 String value = props.getProperty(name);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
105 builder.append(name);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
106 builder.append('=');
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
107 builder.append(value);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
108 builder.append('\n');
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
109 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
110 return builder.toString();
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
111 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
112
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
113 public Properties get() {
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
114 return props;
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
115 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
116
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
117 public HashMap<String,ClientInfoStatus> getProblems() {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
118 return problems;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
119 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
120
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
121 public void set(String name, String value, Set<String> known) throws SQLClientInfoException {
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
122 if (value == null)
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
123 value = "";
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
124
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
125 if (known != null && !known.contains(name)) {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
126 addProblem(name, ClientInfoStatus.REASON_UNKNOWN_PROPERTY);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
127 } else if (value.contains("\n")) {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
128 addProblem(name, ClientInfoStatus.REASON_VALUE_INVALID);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
129 throw new SQLClientInfoException("Invalid value for Client Info property '" + name + "'", "01M07", problems);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
130 } else {
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
131 props.setProperty(name, value);
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
132 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
133 }
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
134
905
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
135 public void set(String name, String value) throws SQLClientInfoException {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
136 set(name, value, null);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
137 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
138
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
139 private void addProblem(String name, ClientInfoStatus status) {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
140 if (problems == null)
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
141 problems = new HashMap<>();
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
142 ClientInfoStatus old = problems.get(name);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
143 if (old == null || status.compareTo(old) > 0)
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
144 problems.put(name, status);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
145 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
146
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
147 public SQLClientInfoException wrapException(SQLException e) {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
148 return new SQLClientInfoException(problems, e);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
149 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
150
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
151 public SQLWarning warnings() {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
152 SQLWarning ret = null;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
153 if (problems == null)
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
154 return null;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
155 for (Map.Entry<String, ClientInfoStatus> entry: problems.entrySet()) {
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
156 if (!entry.getValue().equals(ClientInfoStatus.REASON_UNKNOWN_PROPERTY))
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
157 continue;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
158 SQLWarning warning = new SQLWarning("unknown client info property: " + entry.getKey(), "01M07");
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
159 if (ret == null)
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
160 ret = warning;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
161 else
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
162 ret.setNextWarning(warning);
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
163 }
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
164 return ret;
a52bc2dcdb8c Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 904
diff changeset
165 }
903
778959b2e0a4 Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff changeset
166 }