1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.waarp.common.database.properties;
22
23 import java.sql.Connection;
24 import java.sql.ResultSet;
25 import java.sql.SQLException;
26 import java.sql.Statement;
27
28
29
30
31 public class PostgreSQLProperties implements DbProperties {
32 public static final String PROTOCOL = "postgres";
33
34 private static final String DRIVER_NAME = "org.postgresql.Driver";
35 private static final String VALIDATION_QUERY = "select 1";
36 private static final String MAX_CONNECTION_QUERY =
37 "select (select setting as mc from pg_settings where name='max_connections')::int" +
38 " - (select setting from pg_settings where name='superuser_reserved_connections')::int";
39
40
41 public PostgreSQLProperties() {
42
43 }
44
45 public static String getProtocolID() {
46 return PROTOCOL;
47 }
48
49 @Override
50 public final String getDriverName() {
51 return DRIVER_NAME;
52 }
53
54 @Override
55 public final String getValidationQuery() {
56 return VALIDATION_QUERY;
57 }
58
59 @Override
60 public final int getMaximumConnections(final Connection connection)
61 throws SQLException {
62 Statement stm = null;
63 ResultSet rs = null;
64 try {
65 stm = connection.createStatement();
66 rs = stm.executeQuery(MAX_CONNECTION_QUERY);
67 if (!rs.next()) {
68 throw new SQLException("Cannot find max connection");
69 }
70 return rs.getInt(1);
71 } finally {
72 if (rs != null) {
73 try {
74 rs.close();
75 } catch (final SQLException ignored) {
76
77 }
78 }
79 if (stm != null) {
80 try {
81 stm.close();
82 } catch (final SQLException ignored) {
83
84 }
85 }
86 }
87 }
88 }