View Javadoc

1   /**
2      This file is part of GoldenGate Project (named also GoldenGate or GG).
3   
4      Copyright 2009, Frederic Bregier, 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 GoldenGate Project is free software: you can redistribute it and/or 
9      modify it under the terms of the GNU General Public License as published 
10     by the Free Software Foundation, either version 3 of the License, or
11     (at your option) any later version.
12  
13     GoldenGate is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU General Public License for more details.
17  
18     You should have received a copy of the GNU General Public License
19     along with GoldenGate .  If not, see <http://www.gnu.org/licenses/>.
20   */
21  package goldengate.common.database.model;
22  
23  import java.sql.Connection;
24  import java.sql.SQLException;
25  
26  import goldengate.common.database.DbSession;
27  import goldengate.common.database.exception.GoldenGateDatabaseNoConnectionException;
28  import goldengate.common.database.exception.GoldenGateDatabaseNoDataException;
29  import goldengate.common.database.exception.GoldenGateDatabaseSqlException;
30  
31  /**
32   * Interface for Database Model
33   *
34   * This class is an interface for special functions that needs special implementations according to
35   * the database model used.
36   *
37   * @author Frederic Bregier
38   *
39   */
40  public interface DbModel {
41      /**
42       * 
43       * @param server
44       * @param user
45       * @param passwd
46       * @return a connection according to the underlying Database Model
47       * @throws SQLException
48       */
49      public Connection getDbConnection(String server, String user, String passwd) throws SQLException;
50      
51      /**
52       * Release any internal resources if needed
53       */
54      public void releaseResources();
55      
56      /**
57       * 
58       * @return the number of Pooled Connections if any
59       */
60      public int currentNumberOfPooledConnections();
61      /**
62       * 
63       * @return the current DbType used
64       */
65      public DbType getDbType();
66      /**
67       * Create all necessary tables into the database
68       * @param session SQL session
69       * @throws GoldenGateDatabaseNoConnectionException
70       */
71      public void createTables(DbSession session) throws GoldenGateDatabaseNoConnectionException;
72  
73      /**
74       * Reset the sequence (example)
75       * @param session SQL session
76       * @throws GoldenGateDatabaseNoConnectionException
77       */
78      public void resetSequence(DbSession session, long newvalue) throws GoldenGateDatabaseNoConnectionException;
79  
80      /**
81       * @param dbSession
82       * @return The next unique specialId
83       */
84      public long nextSequence(DbSession dbSession)
85              throws GoldenGateDatabaseNoConnectionException, GoldenGateDatabaseSqlException,
86              GoldenGateDatabaseNoDataException;
87  
88      /**
89       * Validate connection
90       * @param dbSession
91       * @throws GoldenGateDatabaseNoConnectionException
92       */
93      public void validConnection(DbSession dbSession) throws GoldenGateDatabaseNoConnectionException;
94  
95      /**
96       * Add a limit on the request to get the "limit" first rows. Note that
97       * it must be compatible to add the "limit" condition.<br>
98       * <b>DO NOT CHANGE (add) ANYTHING to the request</b><br>
99       *
100      * On Oracle: select allfield from (request) where rownnum <= limit<br>
101      * On others: request LIMIT limit<br>
102      *
103      * @param allfields string representing the equivalent to "*" in "select *" but more precisely
104      *          as "field1, field2" in "select field1, field2"
105      * @param request
106      * @param limit
107      * @return the new request String which will limit the result to the specified number of rows
108      */
109     public String limitRequest(String allfields, String request, int limit);
110 }