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  te::common::CharEncoding getEncoding();
251  //@}
252 
253  /*!
254  \brief It returns its associated ST In-Memory DataSource
255  */
256  DataSource* getSTMemDataSource() const;
257 
258  /*!
259  \brief It adds the DataSet and its type associated to a given name.
260 
261  \param name The DataSet name.
262  \param t The DataSet Type.
263  \param d The DataSet.
264 
265  \note It will take the ownership of the given pointers.
266  */
267  void add(const std::string& name, te::da::DataSetType* t, DataSet* d);
268 
269  /*!
270  \brief It returns a data set with observations whose phenomenon times satisfy a
271  given temporal relation.
272 
273  The possible temporal relations are: 1. AFTER;
274  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
275 
276  \param name The DataSet name.
277  \param dt A given datetime.
278  \param r A given temporal relation.
279  \param travType The traverse type associated to the returned dataset.
280  \param connected If the returned DataSet is connecet or not.
281 
282  \return A pointer to a new DataSet that shares the intenal content.
283 
284  \note The caller will take the ownership of the returned pointer.
285  \note When the temporal relation is DURING, dt must be a time period.
286  \note It can throw an Exception when internal errors occur.
287  */
288  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
291  bool connected = false,
292  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
293 
294  /*!
295  \brief It returns a data set with observations whose observed geometries satisfy a
296  given spatial relation and phenomenon times satisfy a given temporal relation.
297 
298  The possible spatial relations are: INTERSECTS
299  The possible temporal relations are: 1. AFTER;
300  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
301 
302  \param name The DataSet name.
303  \param geom A given geometry.
304  \param sr A given spatial relation.
305  \param dt A given datetime.
306  \param tr A given temporal relation.
307  \param travType The traverse type associated to the returned dataset.
308  \param connected If the returned DataSet is connecet or not.
309 
310  \return A pointer to a new DataSet that shares the intenal content.
311 
312  \note The caller will take the ownership of the returned pointer.
313  \note It will NOT take the ownership of the given pointers.
314  \note When the temporal relation is DURING, dt must be a time period.
315  \note It can throw an Exception when internal errors occur.
316  */
317  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
321  bool connected = false,
322  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
323 
324  /*!
325  \brief It returns a data set with observations whose observed geometries satisfy a
326  given spatial relation and phenomenon times satisfy a given temporal relation.
327 
328  The possible spatial relations are: INTERSECTS
329  The possible temporal relations are: 1. AFTER;
330  2. AFTER | EQUALS; 3. BEFORE; 4. BEFORE | EQUALS; 5. DURING; 6. EQUALS
331 
332  \param name The DataSet name.
333  \param e A given envelope.
334  \param sr A given spatial relation.
335  \param dt A given datetime.
336  \param tr A given temporal relation.
337  \param travType The traverse type associated to the returned dataset.
338  \param connected If the returned DataSet is connecet or not.
339 
340  \return A pointer to a new DataSet that shares the intenal content.
341 
342  \note The caller will take the ownership of the returned pointer.
343  \note It will NOT take the ownership of the given pointers.
344  \note When the temporal relation is DURING, dt must be a time period.
345  \note It can throw an Exception when internal errors occur.
346  */
347  std::auto_ptr<te::da::DataSet> getDataSet(const std::string& name,
351  bool connected = false,
352  const te::common::AccessPolicy accessPolicy = te::common::RAccess);
353  /*!
354  \brief It returns the temporal extent associated to a DataSet.
355 
356  \param name The DataSet name.
357 
358  \return A pointer to its temporal extent.
359 
360  \note The caller will take the ownership of the returned pointer.
361  \note It can throw an Exception when internal errors occur.
362  */
363  std::auto_ptr<te::dt::DateTimePeriod> getTemporalExtent(const std::string& name);
364 
365  protected:
366 
367  /*!
368  \brief It returns the DataSetType associated to a given name.
369  */
370  te::da::DataSetType* getType(const std::string& datasetName);
371 
372  /*!
373  \brief It returns the DataSet associated to a given name.
374  */
375  DataSet* getData(const std::string& datasetName);
376 
377  private:
378 
379  DataSource* m_ds; //!< The associated data source.
380  };
381 
382  } // end namespace stmem
383 } // end namespace te
384 
385 #endif // __TERRALIB_STMEMORY_INTERNAL_TRANSACTOR_H
386 
387 
388 
CharEncoding
Supported charsets (character encoding).
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:118
DataSource * m_ds
The associated data source.
Definition: Transactor.h:379
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:73
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