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