fintp_udal
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Database.h
Go to the documentation of this file.
1 /*
2 * FinTP - Financial Transactions Processing Application
3 * Copyright (C) 2013 Business Information Systems (Allevo) S.R.L.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>
17 * or contact Allevo at : 031281 Bucuresti, 23C Calea Vitan, Romania,
18 * phone +40212554577, office@allevo.ro <mailto:office@allevo.ro>, www.allevo.ro.
19 */
20 
21 #ifndef ABSTRACTDATABASE_H
22 #define ABSTRACTDATABASE_H
23 
24 #include <string>
25 #include <xercesc/dom/DOM.hpp>
26 
27 using namespace std;
28 
29 #include "AppExceptions.h"
30 
31 #include "ConnectionString.h"
32 #include "DataSet.h"
33 #include "DataCommand.h"
34 
35 namespace FinTP
36 {
40  class ExportedUdalObject DBWarningException : public AppException
41  {
42  public:
43  explicit DBWarningException( const string& argumentName = "No argument", const EventType::EventTypeEnum eventType = EventType::Warning, const NameValueCollection* additionalInfo = NULL );
44  ~DBWarningException() throw() {}
45  };
46 
50  class ExportedUdalObject DBErrorException : public AppException
51  {
52  private :
53  string m_Code;
54 
55  public:
56 
57  explicit DBErrorException( const string& argumentName = "No argument", const EventType::EventTypeEnum eventType = EventType::Error, const NameValueCollection* additionalInfo = NULL );
58  ~DBErrorException() throw() {}
59 
60  string code() const;
61  void setCode( const string& code );
62  };
63 
67  class ExportedUdalObject DBConnectionLostException : public AppException
68  {
69  public:
70 
71  explicit DBConnectionLostException( const string& argumentName = "No argument", const EventType::EventTypeEnum eventType = EventType::Error, const NameValueCollection* additionalInfo = NULL );
73  };
74 
80  class ExportedUdalObject DBNoUpdatesException : public AppException
81  {
82  public:
83  explicit DBNoUpdatesException( const string& argumentName = "No argument",const EventType::EventTypeEnum eventType = EventType::Warning, const NameValueCollection* additionalInfo = NULL );
84  ~DBNoUpdatesException() throw() {}
85  };
86 
91  {
92  public :
93 
97  typedef enum
98  {
102  ROLLBACK
103  } TRANSACTION_TYPE;
104 
110  static string ToString( TRANSACTION_TYPE type );
111  };
112 
137  {
138  protected :
140  CacheManager< string, DataCommand > m_StatementCache;
145 
146  public:
147 
148  Database();
149  virtual ~Database();
150 
155  virtual void BeginTransaction( const bool readonly ) = 0;
157  BeginTransaction( false );
158  }
159 
166  virtual void EndTransaction( const TransactionType::TRANSACTION_TYPE transactionType, const bool throwOnError ) = 0;
167  void EndTransaction( const TransactionType::TRANSACTION_TYPE transactionType ) {
168  EndTransaction( transactionType, true );
169  }
170 
175  virtual void Connect( const ConnectionString& connectionString ) = 0;
176 
180  virtual void Disconnect() = 0;
181 
186  virtual bool IsConnected() = 0;
187 
195  virtual void ExecuteNonQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, bool onCursor ) = 0;
196  void ExecuteNonQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement )
197  {
198  ExecuteNonQuery( commandType, stringStatement, false );
199  }
200 
209  virtual void ExecuteNonQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, bool onCursor ) = 0;
210  void ExecuteNonQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement )
211  {
212  ExecuteNonQueryCached( commandType, stringStatement, false );
213  }
214 
223  virtual void ExecuteNonQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, bool onCursor ) = 0;
224  void ExecuteNonQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters )
225  {
226  ExecuteNonQuery( commandType, stringStatement, vectorOfParameters, false );
227  }
228 
238  virtual void ExecuteNonQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, bool onCursor ) = 0;
239  void ExecuteNonQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters )
240  {
241  ExecuteNonQueryCached( commandType, stringStatement, vectorOfParameters, false );
242  }
243 
253  virtual DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, bool holdCursor, const unsigned int fetchRows ) = 0;
254  DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, bool holdCursor )
255  {
256  return ExecuteQuery( commandType, stringStatement, holdCursor, 0 );
257  }
258  DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement )
259  {
260  return ExecuteQuery( commandType, stringStatement, false, 0 );
261  }
262 
272  virtual DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const bool holdCursor, const unsigned int fetchRows ) = 0;
273  DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, bool holdCursor )
274  {
275  return ExecuteQueryCached( commandType, stringStatement, holdCursor, 0 );
276  }
277  DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement )
278  {
279  return ExecuteQueryCached( commandType, stringStatement, false, 0 );
280  }
281 
291  virtual DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, bool holdCursor, const unsigned int fetchRows ) = 0;
292  DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, bool holdCursor )
293  {
294  return ExecuteQuery( commandType, stringStatement, vectorOfParameters, holdCursor, 0 );
295  }
296  DataSet* ExecuteQuery( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters )
297  {
298  return ExecuteQuery( commandType, stringStatement, vectorOfParameters, false, 0 );
299  }
300 
310  virtual DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, const bool holdCursor, const unsigned int fetchRows ) = 0;
311  DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters, bool holdCursor )
312  {
313  return ExecuteQueryCached( commandType, stringStatement, vectorOfParameters, holdCursor, 0 );
314  }
315  DataSet* ExecuteQueryCached( const DataCommand::COMMAND_TYPE commandType, const string& stringStatement, const ParametersVector& vectorOfParameters )
316  {
317  return ExecuteQueryCached( commandType, stringStatement, vectorOfParameters, false, 0 );
318  }
319 
324  virtual void ReleaseCursor( const bool checkConn ) = 0;
325  void ReleaseCursor() {
326  ReleaseCursor( true );
327  }
328 
333  virtual bool CursorHeld() const {
334  return false;
335  }
336 
340  virtual void RewindCursor() = 0;
341 
346  static void DisplayDataSet( const DataSet* theDataSet );
347 
349  return m_LastNumberofAffectedRows;
350  }
351 
354  static string DateFormat;
355  static string TimestampFormat;
370  static XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* ConvertToXML( const DataSet* theDataSet, const bool doTrimm = true );
371  };
372 }
373 
374 #endif // ABSTRACTDATABASE_H