1 /*
2 * This file is part of Waarp Project (named also Waarp or GG).
3 *
4 * Copyright (c) 2019, Waarp SAS, and individual contributors by the @author
5 * tags. See the COPYRIGHT.txt in the distribution for a full listing of
6 * individual contributors.
7 *
8 * All Waarp Project is free software: you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or (at your
11 * option) any later version.
12 *
13 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * Waarp . If not, see <http://www.gnu.org/licenses/>.
19 */
20 package org.waarp.common.database.model;
21
22 import org.waarp.common.database.DbSession;
23 import org.waarp.common.database.exception.WaarpDatabaseNoConnectionException;
24 import org.waarp.common.database.exception.WaarpDatabaseNoDataException;
25 import org.waarp.common.database.exception.WaarpDatabaseSqlException;
26 import org.waarp.common.database.model.DbModelAbstract.DbTypeResolver;
27
28 import java.sql.Connection;
29 import java.sql.SQLException;
30
31 /**
32 * Interface for Database Model
33 * <p>
34 * This class is an interface for special functions that needs special
35 * implementations according to the
36 * database model used.
37 */
38 public interface DbModel {
39 /**
40 * @param server
41 * @param user
42 * @param passwd
43 *
44 * @return a connection according to the underlying Database Model
45 *
46 * @throws SQLException
47 */
48 Connection getDbConnection(String server, String user, String passwd)
49 throws SQLException;
50
51 /**
52 * Release any internal resources if needed
53 */
54 void releaseResources();
55
56 /**
57 * @return the number of Pooled Connections if any
58 */
59 int currentNumberOfPooledConnections();
60
61 /**
62 * @return the current DbType used
63 */
64 DbType getDbType();
65
66 /**
67 * @return the current DbTypeResolver
68 */
69 DbTypeResolver getDbTypeResolver();
70
71 /**
72 * Create all necessary tables into the database
73 *
74 * @param session SQL session
75 *
76 * @throws WaarpDatabaseNoConnectionException
77 */
78 void createTables(DbSession session)
79 throws WaarpDatabaseNoConnectionException;
80
81 /**
82 * Reset the sequence (example)
83 *
84 * @param session SQL session
85 *
86 * @throws WaarpDatabaseNoConnectionException
87 */
88 void resetSequence(DbSession session, long newvalue)
89 throws WaarpDatabaseNoConnectionException;
90
91 /**
92 * @param dbSession
93 *
94 * @return The next unique specialId
95 */
96 long nextSequence(DbSession dbSession)
97 throws WaarpDatabaseNoConnectionException, WaarpDatabaseSqlException,
98 WaarpDatabaseNoDataException;
99
100 /**
101 * Validate connection
102 *
103 * @param dbSession
104 *
105 * @throws WaarpDatabaseNoConnectionException
106 */
107 void validConnection(DbSession dbSession)
108 throws WaarpDatabaseNoConnectionException;
109
110 /**
111 * Add a limit on the request to get the "limit" first rows. Note that it
112 * must
113 * be compatible to add the
114 * "limit" condition.<br>
115 * <b>DO NOT CHANGE (add) ANYTHING to the request</b><br>
116 * <p>
117 * On Oracle: select allfield from (request) where rownnum <= limit<br>
118 * On others: request LIMIT limit<br>
119 *
120 * @param allfields string representing the equivalent to "*" in
121 * "select
122 * *" but more precisely as "field1,
123 * field2" in "select field1, field2"
124 * @param request
125 * @param limit
126 *
127 * @return the new request String which will limit the result to the
128 * specified
129 * number of rows
130 */
131 String limitRequest(String allfields, String request, int limit);
132
133 /**
134 * Upgrade Database from version
135 *
136 * @param session
137 * @param version
138 *
139 * @return True if the Database is upgraded
140 *
141 * @throws WaarpDatabaseNoConnectionException
142 */
143 boolean upgradeDb(DbSession session, String version)
144 throws WaarpDatabaseNoConnectionException;
145
146 /**
147 * Check if Database is ok from version
148 *
149 * @param session
150 * @param version
151 * @param tryFix True will imply a try to fix if possible
152 *
153 * @return True if the Database needs an upgrade
154 *
155 * @throws WaarpDatabaseNoConnectionException
156 */
157 boolean needUpgradeDb(DbSession session, String version, boolean tryFix)
158 throws WaarpDatabaseNoConnectionException;
159 }