Loading...
Searching...
No Matches
Transactor.h
Go to the documentation of this file.
1/* Copyright (C) 2008 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
39namespace 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
69
71
72 void begin();
73
74 void commit();
75
76 void rollBack();
77
78 bool isInTransaction() const;
79
80 std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
82 bool connected = false,
84
85 std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
86 const std::string& propertyName,
87 const te::gm::Envelope* e,
90 bool connected = false,
92
93 std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
94 const std::string& propertyName,
95 const te::gm::Geometry* g,
98 bool connected = false,
100
101 std::unique_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::unique_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::unique_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::unique_ptr<te::da::PreparedQuery> getPrepared(const std::string& qName = std::string(""));
122
123 std::unique_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 std::vector<std::string> getDataSetNames();
132
133 std::size_t getNumberOfDataSets();
134
135 std::unique_ptr<te::da::DataSetType> getDataSetType(const std::string& name);
136
137 boost::ptr_vector<te::dt::Property> getProperties(const std::string& datasetName);
138
139 std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, const std::string& name);
140
141 std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, std::size_t propertyPos);
142
143 std::vector<std::string> getPropertyNames(const std::string& datasetName);
144
145 std::size_t getNumberOfProperties(const std::string& datasetName);
146
147 bool propertyExists(const std::string& datasetName, const std::string& name);
148
149// TODO: rever o caso colunas geometricas => adicionar automaticamente as colunas do box => atualizar o cache
150 void addProperty(const std::string& datasetName, te::dt::Property* p);
151
152// TODO: rever o caso colunas geometricas => remover as colunas do box => atualizar o cache
153 void dropProperty(const std::string& datasetName, const std::string& name);
154
155// TODO: rever o caso colunas geometricas => atualizar o cache e a tabela de metadados
156 void renameProperty(const std::string& datasetName,
157 const std::string& propertyName,
158 const std::string& newPropertyName);
159
160 void changePropertyDefinition(const std::string& datasetName, const std::string& propName, te::dt::Property* newProp);
161
162 std::unique_ptr<te::da::PrimaryKey> getPrimaryKey(const std::string& datasetName);
163
164 bool primaryKeyExists(const std::string& datasetName, const std::string& name);
165
166 void addPrimaryKey(const std::string& datasetName, te::da::PrimaryKey* pk);
167
168 void dropPrimaryKey(const std::string& datasetName);
169
170 std::unique_ptr<te::da::ForeignKey> getForeignKey(const std::string& datasetName, const std::string& name);
171
172 std::vector<std::string> getForeignKeyNames(const std::string& datasetName);
173
174 bool foreignKeyExists(const std::string& datasetName, const std::string& name);
175
176 void addForeignKey(const std::string& datasetName, te::da::ForeignKey* fk);
177
178 void dropForeignKey(const std::string& datasetName, const std::string& fkName);
179
180 std::unique_ptr<te::da::UniqueKey> getUniqueKey(const std::string& datasetName, const std::string& name);
181
182 std::vector<std::string> getUniqueKeyNames(const std::string& datasetName);
183
184 bool uniqueKeyExists(const std::string& datasetName, const std::string& name);
185
186 void addUniqueKey(const std::string& datasetName, te::da::UniqueKey* uk);
187
188 void dropUniqueKey(const std::string& datasetName, const std::string& name);
189
190 std::unique_ptr<te::da::CheckConstraint> getCheckConstraint(const std::string& datasetName, const std::string& name);
191
192 std::vector<std::string> getCheckConstraintNames(const std::string& datasetName);
193
194 bool checkConstraintExists(const std::string& datasetName, const std::string& name);
195
196 void addCheckConstraint(const std::string& datasetName, te::da::CheckConstraint* cc);
197
198 void dropCheckConstraint(const std::string& datasetName, const std::string& name);
199
200 std::unique_ptr<te::da::Index> getIndex(const std::string& datasetName, const std::string& name);
201
202 std::vector<std::string> getIndexNames(const std::string& datasetName);
203
204 bool indexExists(const std::string& datasetName, const std::string& name);
205
206 void addIndex(const std::string& datasetName, te::da::Index* idx,
207 const std::map<std::string, std::string>& options);
208
209 void dropIndex(const std::string& datasetName, const std::string& idxName);
210
211 std::unique_ptr<te::da::Sequence> getSequence(const std::string& name);
212
213 std::vector<std::string> getSequenceNames();
214
215 bool sequenceExists(const std::string& name);
216
218
219 void dropSequence(const std::string& name);
220
221 std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
222 const std::string& propertyName);
223
224 std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
225 std::size_t propertyPos);
226
227 std::size_t getNumberOfItems(const std::string& datasetName);
228
230
231 bool dataSetExists(const std::string& name);
232
233 void createDataSet(te::da::DataSetType* dt, const std::map<std::string, std::string>& options);
234
235 void cloneDataSet(const std::string& name,
236 const std::string& cloneName,
237 const std::map<std::string, std::string>& options);
238
239 void dropDataSet(const std::string& name);
240
241 void renameDataSet(const std::string& name, const std::string& newName);
242
243 void add(const std::string& datasetName,
245 const std::map<std::string, std::string>& options,
246 std::size_t limit = 0,
247 bool enableProgress = true);
248
249 void remove(const std::string& datasetName, const te::da::ObjectIdSet* oids = 0);
250
251 void update(const std::string& datasetName,
252 te::da::DataSet* dataset,
253 const std::vector<std::size_t>& properties,
254 const te::da::ObjectIdSet* oids,
255 const std::map<std::string, std::string>& options,
256 std::size_t limit = 0);
257
258 void update(const std::string& datasetName,
259 te::da::DataSet* dataset,
260 const std::vector< std::set<int> >& properties,
261 const std::vector<size_t>& ids);
262
263 void optimize(const std::map<std::string, std::string>& opInfo);
264
265 DataSource* getAdoDataSource() const;
266
267 protected:
268
269 /*!
270 \brief It update the DataSetType about the Primary Key.
271
272 \param dt The DataSetType that will be updated.
273
274 \exception Exception It throws an exception if the query execution fails.
275 */
277
278 /*!
279 \brief It update the DataSetType about the Properties.
280
281 \param dt The DataSetType that will be updated.
282
283 \exception Exception It throws an exception if the query execution fails.
284 */
286
287 /*!
288 \brief It update the DataSetType about the Unique Keys.
289
290 \param dt The DataSetType that will be updated.
291
292 \exception Exception It throws an exception if the query execution fails.
293 */
295
296 /*!
297 \brief It update the DataSetType about the Indexes.
298
299 \param dt The DataSetType that will be updated.
300
301 \exception Exception It throws an exception if the query execution fails.
302 */
304
305 /*!
306 \brief It update the DataSetType about the Check Constraints.
307
308 \param dt The DataSetType that will be updated.
309
310 \exception Exception It throws an exception if the query execution fails.
311 */
313
314 /*!
315 \brief It insert a geometry property in the geometry_clumns (SFS Schema).
316
317 \param datasetName The DataSet name.
318 \param geomProp The geometry property.
319
320 \exception Exception It throws an exception if the query execution fails.
321 */
322 void insertIntoGeometryColumns(const std::string& datasetName,
323 te::gm::GeometryProperty* geomProp);
324
325 private:
326
327 DataSource* m_ds; //!< The ADO data source associated to this transactor.
328 Connection* m_conn; //!< The connection used by this transactor.
329 bool m_isInTransaction; //!< Tells if there is a transaction in progress.
330
331 };
332
334 {
335 return m_ds;
336 }
337
338 } // end namespace ado
339} // end namespace te
340
341#endif // __TERRALIB_ADO_INTERNAL_DATASOURCETRANSACTOR_H
342
343
A class that implements a connection to a ADO database.
Definition: Connection.h:61
The ADO driver.
Definition: DataSource.h:62
The transactor class for the Microsoft Access driver.
Definition: Transactor.h:63
void execute(const std::string &command)
It executes the specifed command in the data source native language.
bool foreignKeyExists(const std::string &datasetName, const std::string &name)
It checks if a foreign key with the given name exists in the data source.
DataSource * getAdoDataSource() const
Definition: Transactor.h:333
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const std::string &propertyName, const te::gm::Envelope *e, te::gm::SpatialRelation r, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name using a spatial filter over the specified property....
void rollBack()
It aborts the transaction. Any changes will be rolled-back.
std::size_t getNumberOfProperties(const std::string &datasetName)
It gets the number of properties of the given dataset.
std::vector< std::string > getSequenceNames()
It gets the sequence names available in the data source.
void cancel()
It requests that the data source stop the processing of the current command.
boost::int64_t getLastGeneratedId()
It returns the last id generated by an insertion command.
void execute(const te::da::Query &command)
It executes the specified command using a generic query representation.
void addCheckConstraint(const std::string &datasetName, te::da::CheckConstraint *cc)
It adds a check constraint to the dataset.
std::size_t getNumberOfDataSets()
It retrieves the number of data sets available in the data source.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const ObjectIdSet *oids, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
std::unique_ptr< te::da::Sequence > getSequence(const std::string &name)
It gets the sequence with the given name in the data source.
std::unique_ptr< te::da::DataSet > query(const te::da::Select &q, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It executes a query that may return some data using a generic query. A dataset can be connected or di...
std::unique_ptr< te::dt::Property > getProperty(const std::string &datasetName, std::size_t propertyPos)
It retrieves the property lying in the given position from the dataset.
Connection * m_conn
The connection used by this transactor.
Definition: Transactor.h:328
void dropPrimaryKey(const std::string &datasetName)
It removes the primary key constraint from the dataset schema.
void dropProperty(const std::string &datasetName, const std::string &name)
It removes a property from the given dataset.
std::unique_ptr< te::da::CheckConstraint > getCheckConstraint(const std::string &datasetName, const std::string &name)
It gets the check constraint of the dataset with the given name.
bool sequenceExists(const std::string &name)
It checks if a sequence with the given name exists in the data source.
void update(const std::string &datasetName, te::da::DataSet *dataset, const std::vector< std::size_t > &properties, const te::da::ObjectIdSet *oids, const std::map< std::string, std::string > &options, std::size_t limit=0)
It updates the contents of a dataset for the set of data items.
void insertIntoGeometryColumns(const std::string &datasetName, te::gm::GeometryProperty *geomProp)
It insert a geometry property in the geometry_clumns (SFS Schema).
std::vector< std::string > getUniqueKeyNames(const std::string &datasetName)
It gets the unique key names of the given dataset.
std::unique_ptr< te::gm::Envelope > getExtent(const std::string &datasetName, std::size_t propertyPos)
It retrieves the bounding rectangle for the spatial property lying in the given position in the datas...
te::da::DataSource * getDataSource() const
It returns the parent data source of the transactor.
std::unique_ptr< te::da::Index > getIndex(const std::string &datasetName, const std::string &name)
It gets the index with the given name from the dataset.
std::unique_ptr< te::da::DataSet > query(const std::string &query, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It executes a query that may return some data using the data source native language....
void begin()
It starts a new transaction.
void dropDataSet(const std::string &name)
It removes the dataset schema from the data source.
void getUniqueKeys(te::da::DataSetType *dt)
It update the DataSetType about the Unique Keys.
void cloneDataSet(const std::string &name, const std::string &cloneName, const std::map< std::string, std::string > &options)
It clones the dataset in the data source.
void remove(const std::string &datasetName, const te::da::ObjectIdSet *oids=0)
It removes all the informed items from the dataset.
std::unique_ptr< te::da::DataSetType > getDataSetType(const std::string &name)
It gets information about the given dataset.
DataSource * m_ds
The ADO data source associated to this transactor.
Definition: Transactor.h:327
std::vector< std::string > getCheckConstraintNames(const std::string &datasetName)
It gets the check constraint names of the given dataset.
std::size_t getNumberOfItems(const std::string &datasetName)
It retrieves the number of items of the given dataset.
bool hasDataSets()
It checks if the data source has any dataset.
void renameDataSet(const std::string &name, const std::string &newName)
It renames a dataset.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name. A dataset can be connected or disconnected....
void dropUniqueKey(const std::string &datasetName, const std::string &name)
It removes the unique key constraint from the dataset.
std::vector< std::string > getPropertyNames(const std::string &datasetName)
It gets the property names of the given dataset.
void optimize(const std::map< std::string, std::string > &opInfo)
For some data access drivers, this method will perform some operations to optimize the data storage.
void addPrimaryKey(const std::string &datasetName, te::da::PrimaryKey *pk)
It adds a primary key constraint to the dataset schema.
bool indexExists(const std::string &datasetName, const std::string &name)
It checks if an index with the given name exists in the dataset.
void dropIndex(const std::string &datasetName, const std::string &idxName)
It removes the index from the dataset schema.
bool primaryKeyExists(const std::string &datasetName, const std::string &name)
It checks if a primary key exists in the dataset.
bool checkConstraintExists(const std::string &datasetName, const std::string &name)
It checks if a check-constraint with the given name exists in the data source.
void getCheckConstraints(te::da::DataSetType *dt)
It update the DataSetType about the Check Constraints.
bool uniqueKeyExists(const std::string &datasetName, const std::string &name)
It checks if a unique key with the given name exists in the dataset.
std::unique_ptr< te::dt::Property > getProperty(const std::string &datasetName, const std::string &name)
It retrieves the property with the given name from the dataset.
void dropForeignKey(const std::string &datasetName, const std::string &fkName)
It removes the foreign key constraint from the dataset schema.
std::vector< std::string > getDataSetNames()
It It gets the dataset names available in the data source.
void update(const std::string &datasetName, te::da::DataSet *dataset, const std::vector< std::set< int > > &properties, const std::vector< size_t > &ids)
It updates the contents of a dataset.
void getIndexes(te::da::DataSetType *dt)
It update the DataSetType about the Indexes.
bool propertyExists(const std::string &datasetName, const std::string &name)
It checks if a property with the given name exists in the dataset.
std::vector< std::string > getForeignKeyNames(const std::string &datasetName)
It gets the foreign key names of the given dataset.
std::unique_ptr< te::da::PreparedQuery > getPrepared(const std::string &qName=std::string(""))
It creates a prepared query object that may be used for query commands (select, insert,...
std::unique_ptr< te::da::ForeignKey > getForeignKey(const std::string &datasetName, const std::string &name)
It retrieves the foreign key from the given dataset.
bool isInTransaction() const
It returns true if a transaction is in progress, otherwise, it returns false.
std::vector< std::string > getIndexNames(const std::string &datasetName)
It gets the index names of the given dataset.
void dropSequence(const std::string &name)
It removes the sequence from the data source.
std::unique_ptr< te::da::UniqueKey > getUniqueKey(const std::string &datasetName, const std::string &name)
It gets the unique key in the dataset with the given name.
void renameProperty(const std::string &datasetName, const std::string &propertyName, const std::string &newPropertyName)
It renames a property of the given dataset.
std::unique_ptr< te::da::BatchExecutor > getBatchExecutor()
It creates a batch command executor.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, const std::string &propertyName, const te::gm::Geometry *g, te::gm::SpatialRelation r, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name using a spatial filter over the given geometric prop...
void addProperty(const std::string &datasetName, te::dt::Property *p)
It adds a new property to the dataset schema.
void getPrimaryKey(te::da::DataSetType *dt)
It update the DataSetType about the Primary Key.
std::string escape(const std::string &value)
It escapes a string for using in commands and queries.
Transactor(DataSource *ds)
std::unique_ptr< te::gm::Envelope > getExtent(const std::string &datasetName, const std::string &propertyName)
It retrieves the bounding rectangle of the spatial property for the given dataset.
void add(const std::string &datasetName, te::da::DataSet *d, const std::map< std::string, std::string > &options, std::size_t limit=0, bool enableProgress=true)
It adds data items to the dataset in the data source.
bool m_isInTransaction
Tells if there is a transaction in progress.
Definition: Transactor.h:329
void addSequence(te::da::Sequence *sequence)
It creates a new sequence in the data source.
boost::ptr_vector< te::dt::Property > getProperties(const std::string &datasetName)
It retrieves the properties of the dataset.
bool dataSetExists(const std::string &name)
It checks if a dataset with the given name exists in the data source.
void commit()
It commits the transaction.
void dropCheckConstraint(const std::string &datasetName, const std::string &name)
It removes the check constraint from the dataset.
void addUniqueKey(const std::string &datasetName, te::da::UniqueKey *uk)
It adds a unique key constraint to the dataset.
void changePropertyDefinition(const std::string &datasetName, const std::string &propName, te::dt::Property *newProp)
void getProperties(te::da::DataSetType *dt)
It update the DataSetType about the Properties.
void createDataSet(te::da::DataSetType *dt, const std::map< std::string, std::string > &options)
It creates the dataset schema definition in the target data source.
void addForeignKey(const std::string &datasetName, te::da::ForeignKey *fk)
It adds a foreign key constraint to a dataset.
std::unique_ptr< te::da::PrimaryKey > getPrimaryKey(const std::string &datasetName)
It retrieves the primary key of the dataset.
void addIndex(const std::string &datasetName, te::da::Index *idx, const std::map< std::string, std::string > &options)
It adds an index to the dataset.
A class that describes a check constraint.
A class that models the description of a dataset.
Definition: DataSetType.h:73
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:114
A DataSourceTransactor can be viewed as a connection to the data source for reading/writing things in...
An abstract class for data providers like a DBMS, Web Services or a regular file.
Definition: DataSource.h:120
It models a foreign key constraint for a DataSetType.
Definition: ForeignKey.h:49
It describes an index associated to a DataSetType.
Definition: Index.h:53
This class represents a set of unique ids created in the same context. i.e. from the same data set.
Definition: ObjectIdSet.h:56
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:49
A Query is independent from the data source language/dialect.
Definition: Query.h:47
A Select models a query to be used when retrieving data from a DataSource.
Definition: Select.h:67
It describes a sequence (a number generator).
Definition: Sequence.h:57
It describes a unique key (uk) constraint.
Definition: UniqueKey.h:50
It models a property definition.
Definition: Property.h:60
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:52
Geometric property.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:78
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:54
@ FORWARDONLY
Definition: Enums.h:55
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:41
@ RAccess
Definition: Enums.h:43
SpatialRelation
Spatial relations between geometric objects.
Definition: Enums.h:128
TerraLib.
#define TEADOEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:130
Proxy configuration file for TerraView (see terraview_config.h).
Data Source for WS OGC WMS.