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) 2011-2011 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/stmemory/Transactor.h
22 
23  \brief An implementation of DataSourceTransactor class for the ST In-memory driver.
24 */
25 
26 #ifndef __TERRALIB_STMEMORY_INTERNAL_TRANSACTOR_H
27 #define __TERRALIB_STMEMORY_INTERNAL_TRANSACTOR_H
28 
29 // TerraLib
30 #include "../dataaccess/datasource/DataSourceTransactor.h"
31 #include "Config.h"
32 
33 namespace te { namespace dt { class DateTimePeriod; } }
34 
35 namespace te
36 {
37  namespace stmem
38  {
39  // Forward declaration
40  class DataSource;
41 
42  /*!
43  \class Transactor
44 
45  \brief An implementation of DataSourceTransactor class for the ST in-memory driver.
46 
47  \sa te::da::DataSourceTransactor
48  */
50  {
51  public:
52 
53  /*!
54  \brief It constructs a Transactor.
55  */
56  Transactor(DataSource* parent);
57 
58  /*!
59  \brief It constructs a Transactor.
60  */
61  ~Transactor();
62 
63  /** @name inherited methods
64  *
65  */
66  //@{
67 
68  te::da::DataSource* getDataSource() const;
69 
70  void begin();
71 
72  void commit();
73 
74  void rollBack();
75 
76  bool isInTransaction() const;
77 
78  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
80  bool connected = false,
81  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
82 
83  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
84  const std::string& propertyName,
85  const te::gm::Envelope* e,
88  bool connected = false,
89  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
90 
91  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
92  const std::string& propertyName,
93  const te::gm::Geometry* g,
96  bool connected = false,
97  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
98 
99  std::auto_ptr<te::da::DataSet> query(const te::da::Select& q,
101  bool connected = false,
102  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
103 
104  std::auto_ptr<te::da::DataSet> query(const std::string& query,
106  bool connected = false,
107  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
108 
109  void execute(const te::da::Query& command);
110 
111  void execute(const std::string& command);
112 
113  std::auto_ptr<te::da::PreparedQuery> getPrepared(const std::string& qName = std::string(""));
114 
115  std::auto_ptr<te::da::BatchExecutor> getBatchExecutor();
116 
117  void cancel();
118 
119  boost::int64_t getLastGeneratedId();
120 
121  std::string escape(const std::string& value);
122 
123  bool isDataSetNameValid(const std::string& datasetName);
124 
125  bool isPropertyNameValid(const std::string& propertyName);
126 
127  std::vector<std::string> getDataSetNames();
128 
129  std::size_t getNumberOfDataSets();
130 
131  std::auto_ptr<te::da::DataSetType> getDataSetType(const std::string& name);
132 
133  boost::ptr_vector<te::dt::Property> getProperties(const std::string& datasetName);
134 
135  std::auto_ptr<te::dt::Property> getProperty(const std::string& datasetName, const std::string& name);
136 
137  std::auto_ptr<te::dt::Property> getProperty(const std::string& datasetName, std::size_t propertyPos);
138 
139  std::vector<std::string> getPropertyNames(const std::string& datasetName);
140 
141  std::size_t getNumberOfProperties(const std::string& datasetName);
142 
143  bool propertyExists(const std::string& datasetName, const std::string& name);
144 
145  void addProperty(const std::string& datasetName, te::dt::Property* p);
146 
147  void dropProperty(const std::string& datasetName, const std::string& name);
148 
149  void renameProperty(const std::string& datasetName,
150  const std::string& propertyName,
151  const std::string& newPropertyName);
152 
153  std::auto_ptr<te::da::PrimaryKey> getPrimaryKey(const std::string& datasetName);
154 
155  bool primaryKeyExists(const std::string& datasetName, const std::string& name);
156 
157  void addPrimaryKey(const std::string& datasetName, te::da::PrimaryKey* pk);
158 
159  void dropPrimaryKey(const std::string& datasetName);
160 
161  std::auto_ptr<te::da::ForeignKey> getForeignKey(const std::string& datasetName, const std::string& name);
162 
163  std::vector<std::string> getForeignKeyNames(const std::string& datasetName);
164 
165  bool foreignKeyExists(const std::string& datasetName, const std::string& name);
166 
167  void addForeignKey(const std::string& datasetName, te::da::ForeignKey* fk);
168 
169  void dropForeignKey(const std::string& datasetName, const std::string& fkName);
170 
171  std::auto_ptr<te::da::UniqueKey> getUniqueKey(const std::string& datasetName, const std::string& name);
172 
173  std::vector<std::string> getUniqueKeyNames(const std::string& datasetName);
174 
175  bool uniqueKeyExists(const std::string& datasetName, const std::string& name);
176 
177  void addUniqueKey(const std::string& datasetName, te::da::UniqueKey* uk);
178 
179  void dropUniqueKey(const std::string& datasetName, const std::string& name);
180 
181  std::auto_ptr<te::da::CheckConstraint> getCheckConstraint(const std::string& datasetName, const std::string& name);
182 
183  std::vector<std::string> getCheckConstraintNames(const std::string& datasetName);
184 
185  bool checkConstraintExists(const std::string& datasetName, const std::string& name) ;
186 
187  void addCheckConstraint(const std::string& datasetName, te::da::CheckConstraint* cc);
188 
189  void dropCheckConstraint(const std::string& datasetName, const std::string& name);
190 
191  std::auto_ptr<te::da::Index> getIndex(const std::string& datasetName, const std::string& name);
192 
193  std::vector<std::string> getIndexNames(const std::string& datasetName);
194 
195  bool indexExists(const std::string& datasetName, const std::string& name);
196 
197  void addIndex(const std::string& datasetName, te::da::Index* idx,
198  const std::map<std::string, std::string>& options);
199 
200  void dropIndex(const std::string& datasetName, const std::string& idxName);
201 
202  std::auto_ptr<te::da::Sequence> getSequence(const std::string& name);
203 
204  std::vector<std::string> getSequenceNames();
205 
206  bool sequenceExists(const std::string& name);
207 
208  void addSequence(te::da::Sequence* sequence);
209 
210  void dropSequence(const std::string& name);
211 
212  std::auto_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
213  const std::string& propertyName);
214 
215  std::auto_ptr<te::gm::Envelope> getExtent(const std::string& datasetName,
216  std::size_t propertyPos);
217 
218  std::size_t getNumberOfItems(const std::string& datasetName);
219 
220  bool hasDataSets();
221 
222  bool dataSetExists(const std::string& name);
223 
224  void createDataSet(te::da::DataSetType* dt, const std::map<std::string, std::string>& options);
225 
226  void cloneDataSet(const std::string& name,
227  const std::string& cloneName,
228  const std::map<std::string, std::string>& options);
229 
230  void dropDataSet(const std::string& name);
231 
232  void renameDataSet(const std::string& name, const std::string& newName);
233 
234  void add(const std::string& datasetName,
235  te::da::DataSet* d,
236  const std::map<std::string, std::string>& options,
237  std::size_t limit = 0) ;
238 
239  void remove(const std::string& datasetName, const te::da::ObjectIdSet* oids = 0);
240 
241  void update(const std::string& datasetName,
242  te::da::DataSet* dataset,
243  const std::vector<std::size_t>& properties,
244  const te::da::ObjectIdSet* oids,
245  const std::map<std::string, std::string>& options,
246  std::size_t limit = 0);
247 
248  void optimize(const std::map<std::string, std::string>& opInfo);
249  //@}
250 
251  /*!
252  \brief It returns its associated ST In-Memory DataSource
253  */
254  DataSource* getSTMemDataSource() const;
255 
256  /*!
257  \brief It adds the DataSet and its type associated to a given name.
258 
259  \param name The DataSet name.
260  \param t The DataSet Type.
261  \param d The DataSet.
262 
263  \note It will take the ownership of the given pointers.
264  */
265  void add(const std::string& name, te::da::DataSetType* t, DataSet* d);
266 
267  /*!
268  \brief It returns a data set with observations whose phenomenon times satisfy a
269  given temporal relation.
270 
271  The possible temporal relations are: 1. AFTER;
272  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
273 
274  \param name The DataSet name.
275  \param dt A given datetime.
276  \param r A given temporal relation.
277  \param travType The traverse type associated to the returned dataset.
278  \param connected If the returned DataSet is connecet or not.
279 
280  \return A pointer to a new DataSet that shares the intenal content.
281 
282  \note The caller will take the ownership of the returned pointer.
283  \note When the temporal relation is DURING, dt must be a time period.
284  \note It can throw an Exception when internal errors occur.
285  */
286  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
289  bool connected = false,
290  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
291 
292  /*!
293  \brief It returns a data set with observations whose observed geometries satisfy a
294  given spatial relation and phenomenon times satisfy a given temporal relation.
295 
296  The possible spatial relations are: INTERSECTS
297  The possible temporal relations are: 1. AFTER;
298  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
299 
300  \param name The DataSet name.
301  \param geom A given geometry.
302  \param sr A given spatial relation.
303  \param dt A given datetime.
304  \param tr A given temporal relation.
305  \param travType The traverse type associated to the returned dataset.
306  \param connected If the returned DataSet is connecet or not.
307 
308  \return A pointer to a new DataSet that shares the intenal content.
309 
310  \note The caller will take the ownership of the returned pointer.
311  \note It will NOT take the ownership of the given pointers.
312  \note When the temporal relation is DURING, dt must be a time period.
313  \note It can throw an Exception when internal errors occur.
314  */
315  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
319  bool connected = false,
320  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
321 
322  /*!
323  \brief It returns a data set with observations whose observed geometries satisfy a
324  given spatial relation and phenomenon times satisfy a given temporal relation.
325 
326  The possible spatial relations are: INTERSECTS
327  The possible temporal relations are: 1. AFTER;
328  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
329 
330  \param name The DataSet name.
331  \param e A given envelope.
332  \param sr A given spatial relation.
333  \param dt A given datetime.
334  \param tr A given temporal relation.
335  \param travType The traverse type associated to the returned dataset.
336  \param connected If the returned DataSet is connecet or not.
337 
338  \return A pointer to a new DataSet that shares the intenal content.
339 
340  \note The caller will take the ownership of the returned pointer.
341  \note It will NOT take the ownership of the given pointers.
342  \note When the temporal relation is DURING, dt must be a time period.
343  \note It can throw an Exception when internal errors occur.
344  */
345  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
349  bool connected = false,
350  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
351  /*!
352  \brief It returns the temporal extent associated to a DataSet.
353 
354  \param name The DataSet name.
355 
356  \return A pointer to its temporal extent.
357 
358  \note The caller will take the ownership of the returned pointer.
359  \note It can throw an Exception when internal errors occur.
360  */
361  std::auto_ptr<te::dt::DateTimePeriod> getTemporalExtent(const std::string& name);
362 
363  protected:
364 
365  /*!
366  \brief It returns the DataSetType associated to a given name.
367  */
368  te::da::DataSetType* getType(const std::string& datasetName);
369 
370  /*!
371  \brief It returns the DataSet associated to a given name.
372  */
373  DataSet* getData(const std::string& datasetName);
374 
375  private:
376 
377  DataSource* m_ds; //!< The associated data source.
378  };
379 
380  } // end namespace stmem
381 } // end namespace te
382 
383 #endif // __TERRALIB_STMEMORY_INTERNAL_TRANSACTOR_H
384 
385 
386 
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
Implementation of a in-memory data set that contains spatiotemporal observations indexed by time and ...
Definition: DataSet.h:61
A Select models a query to be used when retrieving data from a DataSource.
Definition: Select.h:65
An implementation of DataSourceTransactor class for the ST in-memory driver.
Definition: Transactor.h:49
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:52
DataSource * m_ds
The associated data source.
Definition: Transactor.h:377
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
#define TESTMEMORYEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:128
A Query is independent from the data source language/dialect.
Definition: Query.h:46
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:73
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991).
Definition: Enums.h:76
It describes a unique key (uk) constraint.
Definition: UniqueKey.h:53
Implements a DataSource that contains In-Memory DataSets indexed by space and time.
Definition: DataSource.h:57
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:53
An abstract class for data providers like a DBMS, Web Services or a regular file. ...
Definition: DataSource.h:116
A class that models the description of a dataset.
Definition: DataSetType.h:72
It models a property definition.
Definition: Property.h:59
A class that describes a check constraint.
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
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...