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/memory/Transactor.h
22 
23  \brief An implementation of the Transactor class for the Memory Data Access driver.
24 */
25 
26 #ifndef __TERRALIB_MEMORY_INTERNAL_TRANSACTOR_H
27 #define __TERRALIB_MEMORY_INTERNAL_TRANSACTOR_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 
37 namespace te
38 {
39  namespace mem
40  {
41 // Forward declaration
42  class DataSource;
43 
44  /*!
45  \class Transactor
46 
47  \brief An implementation of the Transactor class for the Memory Data Access driver.
48 
49  \sa te::da::DataSourceTransactor
50  */
52  {
53  public:
54 
55  /*!
56  \brief Constructor.
57 
58  \param ds The Memory data source associated to this transactor.
59  */
61 
63 
65 
66  void begin();
67 
68  void commit();
69 
70  void rollBack();
71 
72  bool isInTransaction() const;
73 
74  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
76  bool connected = false);
77 
78  std::unique_ptr<te::da::DataSet> getDataSet(const std::string& name,
79  const std::string& propertyName,
80  const te::gm::Envelope* e,
83  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::Geometry* g,
90  bool connected = false);
91 
92  std::unique_ptr<te::da::DataSet> query(const te::da::Select& q,
94  bool connected = false);
95 
96  std::unique_ptr<te::da::DataSet> query(const std::string& query,
98  bool connected = false);
99 
100  void execute(const te::da::Query& command);
101 
102  void execute(const std::string& command);
103 
104  std::unique_ptr<te::da::PreparedQuery> getPrepared(const std::string& qName = std::string(""));
105 
106  std::unique_ptr<te::da::BatchExecutor> getBatchExecutor();
107 
108  void cancel();
109 
110  boost::int64_t getLastGeneratedId();
111 
112  std::string escape(const std::string& value);
113 
114  bool isDataSetNameValid(const std::string& datasetName);
115 
116  bool isPropertyNameValid(const std::string& propertyName);
117 
118  std::vector<std::string> getDataSetNames();
119 
120  std::size_t getNumberOfDataSets();
121 
122  std::unique_ptr<te::da::DataSetType> getDataSetType(const std::string& name);
123 
124  boost::ptr_vector<te::dt::Property> getProperties(const std::string& datasetName);
125 
126  std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, const std::string& name);
127 
128  std::unique_ptr<te::dt::Property> getProperty(const std::string& datasetName, std::size_t propertyPos);
129 
130  std::vector<std::string> getPropertyNames(const std::string& datasetName);
131 
132  std::size_t getNumberOfProperties(const std::string& datasetName);
133 
134  bool propertyExists(const std::string& datasetName, const std::string& name);
135 
136  void addProperty(const std::string& datasetName, te::dt::Property* p);
137 
138  void dropProperty(const std::string& datasetName, const std::string& name);
139 
140  void renameProperty(const std::string& datasetName,
141  const std::string& propertyName,
142  const std::string& newPropertyName);
143 
144  std::unique_ptr<te::da::PrimaryKey> getPrimaryKey(const std::string& datasetName);
145 
146  bool primaryKeyExists(const std::string& datasetName, const std::string& name);
147 
148  void addPrimaryKey(const std::string& datasetName, te::da::PrimaryKey* pk);
149 
150  void dropPrimaryKey(const std::string& datasetName);
151 
152  std::unique_ptr<te::da::ForeignKey> getForeignKey(const std::string& datasetName, const std::string& name);
153 
154  std::vector<std::string> getForeignKeyNames(const std::string& datasetName);
155 
156  bool foreignKeyExists(const std::string& datasetName, const std::string& name);
157 
158  void addForeignKey(const std::string& datasetName, te::da::ForeignKey* fk);
159 
160  void dropForeignKey(const std::string& datasetName, const std::string& fkName);
161 
162  std::unique_ptr<te::da::UniqueKey> getUniqueKey(const std::string& datasetName, const std::string& name);
163 
164  std::vector<std::string> getUniqueKeyNames(const std::string& datasetName);
165 
166  bool uniqueKeyExists(const std::string& datasetName, const std::string& name);
167 
168  void addUniqueKey(const std::string& datasetName, te::da::UniqueKey* uk);
169 
170  void dropUniqueKey(const std::string& datasetName, const std::string& name);
171 
172  std::unique_ptr<te::da::CheckConstraint> getCheckConstraint(const std::string& datasetName, const std::string& name);
173 
174  std::vector<std::string> getCheckConstraintNames(const std::string& datasetName);
175 
176  bool checkConstraintExists(const std::string& datasetName, const std::string& name);
177 
178  void addCheckConstraint(const std::string& datasetName, te::da::CheckConstraint* cc);
179 
180  void dropCheckConstraint(const std::string& datasetName, const std::string& name);
181 
182  std::unique_ptr<te::da::Index> getIndex(const std::string& datasetName, const std::string& name);
183 
184  std::vector<std::string> getIndexNames(const std::string& datasetName);
185 
186  bool indexExists(const std::string& datasetName, const std::string& name);
187 
188  void addIndex(const std::string& datasetName, te::da::Index* idx,
189  const std::map<std::string, std::string>& options);
190 
191  void dropIndex(const std::string& datasetName, const std::string& idxName);
192 
193  std::unique_ptr<te::da::Sequence> getSequence(const std::string& name);
194 
195  std::vector<std::string> getSequenceNames();
196 
197  bool sequenceExists(const std::string& name);
198 
199  void addSequence(te::da::Sequence* sequence);
200 
201  void dropSequence(const std::string& name);
202 
203  std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
204  const std::string& propertyName);
205 
206  std::unique_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
207  std::size_t propertyPos);
208 
209  std::size_t getNumberOfItems(const std::string& datasetName);
210 
211  bool hasDataSets();
212 
213  bool dataSetExists(const std::string& name);
214 
215  void createDataSet(te::da::DataSetType* dt, const std::map<std::string, std::string>& options);
216 
217  void cloneDataSet(const std::string& name,
218  const std::string& cloneName,
219  const std::map<std::string, std::string>& options);
220 
221  void dropDataSet(const std::string& name);
222 
223  void renameDataSet(const std::string& name, const std::string& newName);
224 
225  void add(const std::string& datasetName,
226  te::da::DataSet* d,
227  const std::map<std::string, std::string>& options,
228  std::size_t limit = 0);
229 
230  void remove(const std::string& datasetName, const te::da::ObjectIdSet* oids = 0);
231 
232  void update(const std::string& datasetName,
233  te::da::DataSet* dataset,
234  const std::vector<std::size_t>& properties,
235  const te::da::ObjectIdSet* oids,
236  const std::map<std::string, std::string>& options,
237  std::size_t limit = 0);
238 
239  void optimize(const std::map<std::string, std::string>& opInfo);
240 
241  private:
242 
243  DataSource* m_ds; //!< The associated data source.
244  };
245 
246  } // end namespace mem
247 } // end namespace te
248 
249 #endif // __TERRALIB_MEMORY_INTERNAL_TRANSACTOR_H
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
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:78
Implementation of a random-access dataset class for the TerraLib In-Memory Data Access driver.
Definition: DataSource.h:53
An implementation of the Transactor class for the Memory Data Access driver.
Definition: Transactor.h:52
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.
void addPrimaryKey(const std::string &datasetName, te::da::PrimaryKey *pk)
It adds a primary key constraint to the dataset schema.
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,...
void dropCheckConstraint(const std::string &datasetName, const std::string &name)
It removes the check constraint from the dataset.
std::size_t getNumberOfItems(const std::string &datasetName)
It retrieves the number of items of the given dataset.
bool indexExists(const std::string &datasetName, const std::string &name)
It checks if an index with the given name exists in the dataset.
bool isInTransaction() const
It returns true if a transaction is in progress, otherwise, it returns false.
std::unique_ptr< te::da::Sequence > getSequence(const std::string &name)
It gets the sequence with the given name in the data source.
std::vector< std::string > getIndexNames(const std::string &datasetName)
It gets the index names of the given dataset.
std::unique_ptr< te::da::ForeignKey > getForeignKey(const std::string &datasetName, const std::string &name)
It retrieves the foreign key from the given dataset.
te::da::DataSource * getDataSource() const
It returns the parent data source of the transactor.
void dropProperty(const std::string &datasetName, const std::string &name)
It removes a property from the given dataset.
void renameProperty(const std::string &datasetName, const std::string &propertyName, const std::string &newPropertyName)
It renames a property of the given dataset.
void dropPrimaryKey(const std::string &datasetName)
It removes the primary key constraint from the dataset schema.
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)
void execute(const std::string &command)
It executes the specifed command in the data source native language.
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.
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.
bool isDataSetNameValid(const std::string &datasetName)
It returns true if the given string is a valid dataset name.
bool dataSetExists(const std::string &name)
It checks if a dataset with the given name exists in the data source.
void addProperty(const std::string &datasetName, te::dt::Property *p)
It adds a new property to the dataset schema.
std::string escape(const std::string &value)
It escapes a string for using in commands and queries.
void remove(const std::string &datasetName, const te::da::ObjectIdSet *oids=0)
It removes all the informed items from the dataset.
bool hasDataSets()
It checks if the data source has any 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.
std::vector< std::string > getForeignKeyNames(const std::string &datasetName)
It gets the foreign key names of the given dataset.
std::size_t getNumberOfDataSets()
It retrieves the number of data sets available in the data source.
std::unique_ptr< te::da::BatchExecutor > getBatchExecutor()
It creates a batch command executor.
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 dropForeignKey(const std::string &datasetName, const std::string &fkName)
It removes the foreign key constraint from the dataset schema.
boost::ptr_vector< te::dt::Property > getProperties(const std::string &datasetName)
It retrieves the properties of the dataset.
bool sequenceExists(const std::string &name)
It checks if a sequence with the given name exists in the data source.
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.
std::unique_ptr< te::da::DataSet > query(const te::da::Select &q, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false)
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.
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)
bool primaryKeyExists(const std::string &datasetName, const std::string &name)
It checks if a primary key exists in the dataset.
void dropDataSet(const std::string &name)
It removes the dataset schema from the data source.
void commit()
It commits the transaction.
void addCheckConstraint(const std::string &datasetName, te::da::CheckConstraint *cc)
It adds a check constraint to the dataset.
void dropSequence(const std::string &name)
It removes the sequence from the data source.
bool uniqueKeyExists(const std::string &datasetName, const std::string &name)
It checks if a unique key with the given name exists in the dataset.
boost::int64_t getLastGeneratedId()
It returns the last id generated by an insertion command.
bool isPropertyNameValid(const std::string &propertyName)
It checks if the given property name is valid.
std::vector< std::string > getSequenceNames()
It gets the sequence names available in the data source.
std::unique_ptr< te::da::DataSetType > getDataSetType(const std::string &name)
It gets information about the given dataset.
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.
void dropIndex(const std::string &datasetName, const std::string &idxName)
It removes the index from the dataset schema.
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.
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...
void cancel()
It requests that the data source stop the processing of the current command.
void add(const std::string &datasetName, te::da::DataSet *d, const std::map< std::string, std::string > &options, std::size_t limit=0)
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.
void renameDataSet(const std::string &name, const std::string &newName)
It renames a dataset.
std::size_t getNumberOfProperties(const std::string &datasetName)
It gets the number of properties of the given dataset.
void addUniqueKey(const std::string &datasetName, te::da::UniqueKey *uk)
It adds a unique key constraint to the dataset.
void dropUniqueKey(const std::string &datasetName, const std::string &name)
It removes the unique key constraint from the dataset.
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)
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.
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 begin()
It starts a new transaction.
bool propertyExists(const std::string &datasetName, const std::string &name)
It checks if a property with the given name exists in the dataset.
Transactor(DataSource *ds)
Constructor.
DataSource * m_ds
The associated data source.
Definition: Transactor.h:243
void execute(const te::da::Query &command)
It executes the specified command using a generic query representation.
void addForeignKey(const std::string &datasetName, te::da::ForeignKey *fk)
It adds a foreign key constraint to a dataset.
void addSequence(te::da::Sequence *sequence)
It creates a new sequence in the data source.
std::vector< std::string > getCheckConstraintNames(const std::string &datasetName)
It gets the check constraint names of the given dataset.
std::vector< std::string > getDataSetNames()
It It gets the dataset names available in the data source.
void rollBack()
It aborts the transaction. Any changes will be rolled-back.
std::unique_ptr< te::da::DataSet > getDataSet(const std::string &name, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false)
std::unique_ptr< te::da::PrimaryKey > getPrimaryKey(const std::string &datasetName)
It retrieves the primary key of the dataset.
std::vector< std::string > getUniqueKeyNames(const std::string &datasetName)
It gets the unique key names of the given dataset.
std::vector< std::string > getPropertyNames(const std::string &datasetName)
It gets the property names of the given dataset.
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:54
@ FORWARDONLY
Definition: Enums.h:55
SpatialRelation
Spatial relations between geometric objects.
Definition: Enums.h:128
TerraLib.
#define TEMEMORYEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:84
Proxy configuration file for TerraView (see terraview_config.h).
Data Source for WS OGC WMS.