Mercurial > hg > monetdb-java
annotate src/main/java/org/monetdb/mcl/net/ClientInfo.java @ 905:a52bc2dcdb8c
Implement ClientInfo API
And move ClientInfo out out MapiSocket
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Mon, 17 Jun 2024 15:54:45 +0200 (10 months ago) |
parents | 2d880f90be2a |
children | cc6425e98017 |
rev | line source |
---|---|
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
1 package org.monetdb.mcl.net; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
2 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
3 import org.monetdb.jdbc.MonetDriver; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
4 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
5 import java.io.File; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
6 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
|
7 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
|
8 import java.net.InetAddress; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
9 import java.net.UnknownHostException; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
10 import java.sql.ClientInfoStatus; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
11 import java.sql.SQLClientInfoException; |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
12 import java.sql.SQLException; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
13 import java.sql.SQLWarning; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
14 import java.util.HashMap; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
15 import java.util.Map; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
16 import java.util.Properties; |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
17 import java.util.Set; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
18 |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
19 /** |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
20 * 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
|
21 * @{link SQLClientInfoException} if there is a failure |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
22 */ |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
23 public class ClientInfo { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
24 private static final String defaultHostname = findHostname(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
25 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
26 private static final String defaultClientLibrary = findClientLibrary(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
27 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
28 private static final String defaultApplicationName = findApplicationName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
29 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
30 private static final String defaultPid = findPid(); |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
31 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
32 private final Properties props; |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
33 private HashMap<String, ClientInfoStatus> problems = null; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
34 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
35 public ClientInfo() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
36 props = new Properties(); |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
37 } |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
38 |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
39 public void setDefaults() { |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
40 props.setProperty("ClientHostname", defaultHostname); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
41 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
|
42 props.setProperty("ClientPid", defaultPid); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
43 props.setProperty("ApplicationName", defaultApplicationName); |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
44 props.setProperty("ClientRemark", ""); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
45 } |
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 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
|
48 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
49 return InetAddress.getLocalHost().getHostName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
50 } catch (UnknownHostException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
51 return ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
52 } |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
53 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
54 |
904
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
55 private static String findApplicationName() { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
56 String appName = ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
57 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
58 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
|
59 if (prop != null) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
60 // 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
|
61 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
|
62 // keep only the basename5 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
63 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
|
64 if (idx >= 0) |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
65 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
|
66 appName = prop; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
67 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
68 } catch (SecurityException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
69 // ignore |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
70 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
71 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
72 return appName; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
73 } |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
74 |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
75 private static String findPid() { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
76 try { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
77 RuntimeMXBean mxbean = ManagementFactory.getRuntimeMXBean(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
78 String pidAtHostname = mxbean.getName(); |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
79 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
|
80 } catch (RuntimeException e) { |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
81 return ""; |
2d880f90be2a
Try to use reasonable defaults for ClientInfo
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
903
diff
changeset
|
82 } |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
83 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
84 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
85 private static String findClientLibrary() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
86 return "monetdb-java " + MonetDriver.getDriverVersion(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
87 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
88 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
89 public String format() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
90 StringBuilder builder = new StringBuilder(200); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
91 for (String name : props.stringPropertyNames()) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
92 String value = props.getProperty(name); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
93 builder.append(name); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
94 builder.append('='); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
95 builder.append(value); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
96 builder.append('\n'); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
97 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
98 return builder.toString(); |
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 Properties get() { |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
102 return props; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
103 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
104 |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
105 public HashMap<String,ClientInfoStatus> getProblems() { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
106 return problems; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
107 } |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
108 |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
109 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
|
110 if (value == null) |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
111 value = ""; |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
112 |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
113 if (known != null && !known.contains(name)) { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
114 addProblem(name, ClientInfoStatus.REASON_UNKNOWN_PROPERTY); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
115 } else if (value.contains("\n")) { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
116 addProblem(name, ClientInfoStatus.REASON_VALUE_INVALID); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
117 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
|
118 } else { |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
119 props.setProperty(name, value); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
120 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
121 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
122 |
905
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
123 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
|
124 set(name, value, null); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
125 } |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
126 |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
127 private void addProblem(String name, ClientInfoStatus status) { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
128 if (problems == null) |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
129 problems = new HashMap<>(); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
130 ClientInfoStatus old = problems.get(name); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
131 if (old == null || status.compareTo(old) > 0) |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
132 problems.put(name, status); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
133 } |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
134 |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
135 public SQLClientInfoException wrapException(SQLException e) { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
136 return new SQLClientInfoException(problems, e); |
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 public SQLWarning warnings() { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
140 SQLWarning ret = null; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
141 if (problems == null) |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
142 return null; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
143 for (Map.Entry<String, ClientInfoStatus> entry: problems.entrySet()) { |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
144 if (!entry.getValue().equals(ClientInfoStatus.REASON_UNKNOWN_PROPERTY)) |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
145 continue; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
146 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
|
147 if (ret == null) |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
148 ret = warning; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
149 else |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
150 ret.setNextWarning(warning); |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
151 } |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
152 return ret; |
a52bc2dcdb8c
Implement ClientInfo API
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
904
diff
changeset
|
153 } |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
diff
changeset
|
154 } |