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/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  /*!
253  \brief It returns its associated ST In-Memory DataSource
254  */
255  DataSource* getSTMemDataSource() const;
256 
257  /*!
258  \brief It adds the DataSet and its type associated to a given name.
259 
260  \param name The DataSet name.
261  \param t The DataSet Type.
262  \param d The DataSet.
263 
264  \note It will take the ownership of the given pointers.
265  */
266  void add(const std::string& name, te::da::DataSetType* t, DataSet* d);
267 
268  /*!
269  \brief It returns a data set with observations whose phenomenon times satisfy a
270  given temporal relation.
271 
272  The possible temporal relations are: 1. AFTER;
273  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
274 
275  \param name The DataSet name.
276  \param dt A given datetime.
277  \param r A given temporal relation.
278  \param travType The traverse type associated to the returned dataset.
279  \param connected If the returned DataSet is connecet or not.
280 
281  \return A pointer to a new DataSet that shares the intenal content.
282 
283  \note The caller will take the ownership of the returned pointer.
284  \note When the temporal relation is DURING, dt must be a time period.
285  \note It can throw an Exception when internal errors occur.
286  */
287  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
290  bool connected = false,
291  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
292 
293  /*!
294  \brief It returns a data set with observations whose observed geometries satisfy a
295  given spatial relation and phenomenon times satisfy a given temporal relation.
296 
297  The possible spatial relations are: INTERSECTS
298  The possible temporal relations are: 1. AFTER;
299  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
300 
301  \param name The DataSet name.
302  \param geom A given geometry.
303  \param sr A given spatial relation.
304  \param dt A given datetime.
305  \param tr A given temporal relation.
306  \param travType The traverse type associated to the returned dataset.
307  \param connected If the returned DataSet is connecet or not.
308 
309  \return A pointer to a new DataSet that shares the intenal content.
310 
311  \note The caller will take the ownership of the returned pointer.
312  \note It will NOT take the ownership of the given pointers.
313  \note When the temporal relation is DURING, dt must be a time period.
314  \note It can throw an Exception when internal errors occur.
315  */
316  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
320  bool connected = false,
321  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
322 
323  /*!
324  \brief It returns a data set with observations whose observed geometries satisfy a
325  given spatial relation and phenomenon times satisfy a given temporal relation.
326 
327  The possible spatial relations are: INTERSECTS
328  The possible temporal relations are: 1. AFTER;
329  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
330 
331  \param name The DataSet name.
332  \param e A given envelope.
333  \param sr A given spatial relation.
334  \param dt A given datetime.
335  \param tr A given temporal relation.
336  \param travType The traverse type associated to the returned dataset.
337  \param connected If the returned DataSet is connecet or not.
338 
339  \return A pointer to a new DataSet that shares the intenal content.
340 
341  \note The caller will take the ownership of the returned pointer.
342  \note It will NOT take the ownership of the given pointers.
343  \note When the temporal relation is DURING, dt must be a time period.
344  \note It can throw an Exception when internal errors occur.
345  */
346  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
350  bool connected = false,
351  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
352  /*!
353  \brief It returns the temporal extent associated to a DataSet.
354 
355  \param name The DataSet name.
356 
357  \return A pointer to its temporal extent.
358 
359  \note The caller will take the ownership of the returned pointer.
360  \note It can throw an Exception when internal errors occur.
361  */
362  std::auto_ptr<te::dt::DateTimePeriod> getTemporalExtent(const std::string& name);
363 
364  protected:
365 
366  /*!
367  \brief It returns the DataSetType associated to a given name.
368  */
369  te::da::DataSetType* getType(const std::string& datasetName);
370 
371  /*!
372  \brief It returns the DataSet associated to a given name.
373  */
374  DataSet* getData(const std::string& datasetName);
375 
376  private:
377 
378  DataSource* m_ds; //!< The associated data source.
379  };
380 
381  } // end namespace stmem
382 } // end namespace te
383 
384 #endif // __TERRALIB_STMEMORY_INTERNAL_TRANSACTOR_H
385 
386 
387 
A class that models the description of a dataset.
Definition: DataSetType.h:72
Implements a DataSource that contains In-Memory DataSets indexed by space and time.
Definition: DataSource.h:57
TemporalRelation
Temporal relations between date and time (Source: Allen, 1991).
Definition: Enums.h:140
SpatialRelation
Spatial relations between geometric objects.
Definition: Enums.h:127
It describes a sequence (a number generator).
Definition: Sequence.h:56
A class that describes a check constraint.
An abstract class for data providers like a DBMS, Web Services or a regular file. ...
Definition: DataSource.h:119
DataSource * m_ds
The associated data source.
Definition: Transactor.h:378
It models a property definition.
Definition: Property.h:59
AccessPolicy
Supported data access policies (can be used as bitfield).
Definition: Enums.h:40
TraverseType
A dataset can be traversed in two ways:
Definition: Enums.h:53
#define TESTMEMORYEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:76
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
This class represents a set of unique ids created in the same context. i.e. from the same data set...
Definition: ObjectIdSet.h:55
URI C++ Library.
It models a foreign key constraint for a DataSetType.
Definition: ForeignKey.h:50
It describes a unique key (uk) constraint.
Definition: UniqueKey.h:53
A DataSourceTransactor can be viewed as a connection to the data source for reading/writing things in...
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
Definition: Geometry.h:74
An implementation of DataSourceTransactor class for the ST in-memory driver.
Definition: Transactor.h:49
A Select models a query to be used when retrieving data from a DataSource.
Definition: Select.h:65
Implementation of a in-memory data set that contains spatiotemporal observations indexed by time and ...
Definition: DataSet.h:61
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:112
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:52
A Query is independent from the data source language/dialect.
Definition: Query.h:46
It describes an index associated to a DataSetType.
Definition: Index.h:54