All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Transactor.h
Go to the documentation of this file.
1 /* Copyright (C) 2008-2013 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib 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 Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/ado/Transactor.h
22 
23  \brief DataSourceTransactor class implementation for Microsoft Access driver.
24 */
25 
26 #ifndef __TERRALIB_ADO_INTERNAL_DATASOURCETRANSACTOR_H
27 #define __TERRALIB_ADO_INTERNAL_DATASOURCETRANSACTOR_H
28 
29 // TerraLib
30 #include "../dataaccess/datasource/DataSourceTransactor.h"
31 #include "Config.h"
32 #include "DataSource.h"
33 
34 // STL
35 #include <memory>
36 #include <map>
37 #include <string>
38 
39 namespace te
40 {
41 // Forward declarations
42  namespace dt { class Property; }
43  namespace gm { class Envelope; class Geometry; }
44 
45  namespace ado
46  {
47  // Forward declarations
48  class BatchExecutor;
49  class Connection;
50  class DataSet;
51  class ObjectIdSet;
52  class PreparedQuery;
53  class Query;
54 
55  /*!
56  \class Transactor
57 
58  \brief The transactor class for the Microsoft Access driver.
59 
60  \sa te::da::DataSourceTransactor, DataSource
61  */
63  {
64  public:
65 
67 
68  ~Transactor();
69 
70  te::da::DataSource* getDataSource() const;
71 
72  void begin();
73 
74  void commit();
75 
76  void rollBack();
77 
78  bool isInTransaction() const;
79 
80  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
82  bool connected = false,
83  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
84 
85  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
86  const std::string& propertyName,
87  const te::gm::Envelope* e,
90  bool connected = false,
91  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
92 
93  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
94  const std::string& propertyName,
95  const te::gm::Geometry* g,
98  bool connected = false,
99  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
100 
101  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
102  const ObjectIdSet* oids,
104  bool connected = false,
105  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
106 
107  std::auto_ptr<te::da::DataSet> query(const te::da::Select& q,
109  bool connected = false,
110  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
111 
112  std::auto_ptr<te::da::DataSet> query(const std::string& query,
114  bool connected = false,
115  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
116 
117  void execute(const te::da::Query& command);
118 
119  void execute(const std::string& command);
120 
121  std::auto_ptr<te::da::PreparedQuery> getPrepared(const std::string& qName = std::string(""));
122 
123  std::auto_ptr<te::da::BatchExecutor> getBatchExecutor();
124 
125  void cancel();
126 
127  boost::int64_t getLastGeneratedId();
128 
129  std::string escape(const std::string& value);
130 
131  bool isDataSetNameValid(const std::string& datasetName);
132 
133  bool isPropertyNameValid(const std::string& propertyName);
134 
135  std::vector<std::string> getDataSetNames();
136 
137  std::size_t getNumberOfDataSets();
138 
139  std::auto_ptr<te::da::DataSetType> getDataSetType(const std::string& name);
140 
141  boost::ptr_vector<te::dt::Property> getProperties(const std::string& datasetName);
142 
143  std::auto_ptr<te::dt::Property> getProperty(const std::string& datasetName, const std::string& name);
144 
145  std::auto_ptr<te::dt::Property> getProperty(const std::string& datasetName, std::size_t propertyPos);
146 
147  std::vector<std::string> getPropertyNames(const std::string& datasetName);
148 
149  std::size_t getNumberOfProperties(const std::string& datasetName);
150 
151  bool propertyExists(const std::string& datasetName, const std::string& name);
152 
153 // TODO: rever o caso colunas geometricas => adicionar automaticamente as colunas do box => atualizar o cache
154  void addProperty(const std::string& datasetName, te::dt::Property* p);
155 
156 // TODO: rever o caso colunas geometricas => remover as colunas do box => atualizar o cache
157  void dropProperty(const std::string& datasetName, const std::string& name);
158 
159 // TODO: rever o caso colunas geometricas => atualizar o cache e a tabela de metadados
160  void renameProperty(const std::string& datasetName,
161  const std::string& propertyName,
162  const std::string& newPropertyName);
163 
164  std::auto_ptr<te::da::PrimaryKey> getPrimaryKey(const std::string& datasetName);
165 
166  bool primaryKeyExists(const std::string& datasetName, const std::string& name);
167 
168  void addPrimaryKey(const std::string& datasetName, te::da::PrimaryKey* pk);
169 
170  void dropPrimaryKey(const std::string& datasetName);
171 
172  std::auto_ptr<te::da::ForeignKey> getForeignKey(const std::string& datasetName, const std::string& name);
173 
174  std::vector<std::string> getForeignKeyNames(const std::string& datasetName);
175 
176  bool foreignKeyExists(const std::string& datasetName, const std::string& name);
177 
178  void addForeignKey(const std::string& datasetName, te::da::ForeignKey* fk);
179 
180  void dropForeignKey(const std::string& datasetName, const std::string& fkName);
181 
182  std::auto_ptr<te::da::UniqueKey> getUniqueKey(const std::string& datasetName, const std::string& name);
183 
184  std::vector<std::string> getUniqueKeyNames(const std::string& datasetName);
185 
186  bool uniqueKeyExists(const std::string& datasetName, const std::string& name);
187 
188  void addUniqueKey(const std::string& datasetName, te::da::UniqueKey* uk);
189 
190  void dropUniqueKey(const std::string& datasetName, const std::string& name);
191 
192  std::auto_ptr<te::da::CheckConstraint> getCheckConstraint(const std::string& datasetName, const std::string& name);
193 
194  std::vector<std::string> getCheckConstraintNames(const std::string& datasetName);
195 
196  bool checkConstraintExists(const std::string& datasetName, const std::string& name);
197 
198  void addCheckConstraint(const std::string& datasetName, te::da::CheckConstraint* cc);
199 
200  void dropCheckConstraint(const std::string& datasetName, const std::string& name);
201 
202  std::auto_ptr<te::da::Index> getIndex(const std::string& datasetName, const std::string& name);
203 
204  std::vector<std::string> getIndexNames(const std::string& datasetName);
205 
206  bool indexExists(const std::string& datasetName, const std::string& name);
207 
208  void addIndex(const std::string& datasetName, te::da::Index* idx,
209  const std::map<std::string, std::string>& options);
210 
211  void dropIndex(const std::string& datasetName, const std::string& idxName);
212 
213  std::auto_ptr<te::da::Sequence> getSequence(const std::string& name);
214 
215  std::vector<std::string> getSequenceNames();
216 
217  bool sequenceExists(const std::string& name);
218 
219  void addSequence(te::da::Sequence* sequence);
220 
221  void dropSequence(const std::string& name);
222 
223  std::auto_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
224  const std::string& propertyName);
225 
226  std::auto_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
227  std::size_t propertyPos);
228 
229  std::size_t getNumberOfItems(const std::string& datasetName);
230 
231  bool hasDataSets();
232 
233  bool dataSetExists(const std::string& name);
234 
235  void createDataSet(te::da::DataSetType* dt, const std::map<std::string, std::string>& options);
236 
237  void cloneDataSet(const std::string& name,
238  const std::string& cloneName,
239  const std::map<std::string, std::string>& options);
240 
241  void dropDataSet(const std::string& name);
242 
243  void renameDataSet(const std::string& name, const std::string& newName);
244 
245  void add(const std::string& datasetName,
246  te::da::DataSet* d,
247  const std::map<std::string, std::string>& options,
248  std::size_t limit = 0);
249 
250  void remove(const std::string& datasetName, const te::da::ObjectIdSet* oids = 0);
251 
252  void update(const std::string& datasetName,
253  te::da::DataSet* dataset,
254  const std::vector<std::size_t>& properties,
255  const te::da::ObjectIdSet* oids,
256  const std::map<std::string, std::string>& options,
257  std::size_t limit = 0);
258 
259  void optimize(const std::map<std::string, std::string>& opInfo);
260 
261  DataSource* getAdoDataSource() const;
262 
263  protected:
264 
265  /*!
266  \brief It update the DataSetType about the Primary Key.
267 
268  \param dt The DataSetType that will be updated.
269 
270  \exception Exception It throws an exception if the query execution fails.
271  */
272  void getPrimaryKey(te::da::DataSetType* dt);
273 
274  /*!
275  \brief It update the DataSetType about the Properties.
276 
277  \param dt The DataSetType that will be updated.
278 
279  \exception Exception It throws an exception if the query execution fails.
280  */
281  void getProperties(te::da::DataSetType* dt);
282 
283  /*!
284  \brief It update the DataSetType about the Unique Keys.
285 
286  \param dt The DataSetType that will be updated.
287 
288  \exception Exception It throws an exception if the query execution fails.
289  */
290  void getUniqueKeys(te::da::DataSetType* dt);
291 
292  /*!
293  \brief It update the DataSetType about the Indexes.
294 
295  \param dt The DataSetType that will be updated.
296 
297  \exception Exception It throws an exception if the query execution fails.
298  */
299  void getIndexes(te::da::DataSetType* dt);
300 
301  /*!
302  \brief It update the DataSetType about the Check Constraints.
303 
304  \param dt The DataSetType that will be updated.
305 
306  \exception Exception It throws an exception if the query execution fails.
307  */
308  void getCheckConstraints(te::da::DataSetType* dt);
309 
310  /*!
311  \brief It insert a geometry property in the geometry_clumns (SFS Schema).
312 
313  \param datasetName The DataSet name.
314  \param geomProp The geometry property.
315 
316  \exception Exception It throws an exception if the query execution fails.
317  */
318  void insertIntoGeometryColumns(const std::string& datasetName,
319  te::gm::GeometryProperty* geomProp);
320 
321  private:
322 
323  DataSource* m_ds; //!< The ADO data source associated to this transactor.
324  Connection* m_conn; //!< The connection used by this transactor.
325  bool m_isInTransaction; //!< Tells if there is a transaction in progress.
326 
327  };
328 
330  {
331  return m_ds;
332  }
333 
334  } // end namespace ado
335 } // end namespace te
336 
337 #endif // __TERRALIB_ADO_INTERNAL_DATASOURCETRANSACTOR_H
338 
339 
The transactor class for the Microsoft Access driver.
Definition: Transactor.h:62
It describes an index associated to a DataSetType.
Definition: Index.h:54
This class represents a set of unique ids created in the same context. i.e. from the same data set...
Definition: ObjectIdSet.h:53
A Select models a query to be used when retrieving data from a DataSource.
Definition: Select.h:65
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:52
It describes a sequence (a number generator).
Definition: Sequence.h:56
SpatialRelation
Spatial relations between geometric objects.
Definition: Enums.h:122
It models a foreign key constraint for a DataSetType.
Definition: ForeignKey.h:50
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:40
A Query is independent from the data source language/dialect.
Definition: Query.h:46
Configuration flags for the TerraLib ADO Data Access driver.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:73
Implementation of the data source class for the ADO driver.
It describes a unique key (uk) constraint.
Definition: UniqueKey.h:53
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:53
DataSource * m_ds
The ADO data source associated to this transactor.
Definition: Transactor.h:323
An abstract class for data providers like a DBMS, Web Services or a regular file. ...
Definition: DataSource.h:116
DataSource * getAdoDataSource() const
Definition: Transactor.h:329
A class that models the description of a dataset.
Definition: DataSetType.h:72
It models a property definition.
Definition: Property.h:59
Connection * m_conn
The connection used by this transactor.
Definition: Transactor.h:324
bool m_isInTransaction
Tells if there is a transaction in progress.
Definition: Transactor.h:325
#define TEADOEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:167
A class that describes a check constraint.
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
The ADO driver.
Definition: DataSource.h:61
Geometric property.
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:111
A DataSourceTransactor can be viewed as a connection to the data source for reading/writing things in...
A class that implements a connection to a ADO database.
Definition: Connection.h:60