ConnectedDataSet.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/postgis/ConnectedDataSet.h
22 
23  \brief Implementation of a connected dataset for the PostGIS driver.
24 */
25 
26 #ifndef __TERRALIB_POSTGIS_INTERNAL_CONNECTED_DATASET_H
27 #define __TERRALIB_POSTGIS_INTERNAL_CONNECTED_DATASET_H
28 
29 // TerraLib
30 #include "../dataaccess/dataset/DataSet.h"
31 #include "Connection.h"
32 #include "Config.h"
33 
34 // Forward declaration for libpq
35 //extern "C"
36 //{
37 // struct pg_conn;
38 // typedef struct pg_conn PGconn;
39 // struct pg_result;
40 // typedef struct pg_result PGresult;
41 //}
42 
43 namespace te
44 {
45 // Forward declaration
46  namespace da
47  {
48  class GeometryProperty;
49  }
50 
51  namespace pgis
52  {
53  // Forward declaration
54  class DataSource;
55 
56  /*!
57  \class ConnectedDataSet
58 
59  \brief Implementation of a connected dataset for the PostGIS driver.
60 
61  \sa te::da::ConnectedDataSet
62  */
64  {
65  public:
66  /*!
67  \brief Constructor.
68 
69  \param result The internal PGresult.
70  \param dataSource The DataSource to get the connection.
71  \param connectionId The connection id used by this dataset.
72  \param id_cursor The id for the current cursor.
73  \param size The number of rows the layer has.
74  \param ptypes The types of each property.
75  \param timeIsInteger A flag that indicates if the postgis stores,
76  internally, the time and timestamp as an integer.
77  */
78  ConnectedDataSet(PGresult* result,
79  DataSource* dataSource,
80  const int& connectionId,
81  const std::string& id_cursor,
82  const int& size,
83  const std::vector<int>& ptypes,
84  bool timeIsInteger = true);
85 
86  /*! \brief The destructor will clear the internal PGresult. */
88 
89  te::common::TraverseType getTraverseType() const;
90 
91  te::common::AccessPolicy getAccessPolicy() const;
92 
93  std::size_t getNumProperties() const;
94 
95  int getPropertyDataType(std::size_t i) const;
96 
97  std::string getPropertyName(std::size_t i) const;
98 
99  std::string getDatasetNameOfProperty(std::size_t i) const;
100 
101  bool isEmpty() const;
102 
103  bool isConnected() const;
104 
105  std::size_t size() const;
106 
107  std::unique_ptr<te::gm::Envelope> getExtent(std::size_t i);
108 
109  bool moveNext();
110 
111  bool movePrevious();
112 
113  bool moveBeforeFirst();
114 
115  bool moveFirst();
116 
117  bool moveLast();
118 
119  bool move(std::size_t i);
120 
121  bool isAtBegin() const;
122 
123  bool isBeforeBegin() const;
124 
125  bool isAtEnd() const;
126 
127  bool isAfterEnd() const;
128 
129  bool isPositionValid() const;
130 
131  char getChar(std::size_t i) const;
132 
133  unsigned char getUChar(std::size_t i) const;
134 
135  boost::int16_t getInt16(std::size_t i) const;
136 
137  boost::int32_t getInt32(std::size_t i) const;
138 
139  boost::int64_t getInt64(std::size_t i) const;
140 
141  bool getBool(std::size_t i) const;
142 
143  float getFloat(std::size_t i) const;
144 
145  double getDouble(std::size_t i) const;
146 
147  std::string getNumeric(std::size_t i) const;
148 
149  std::string getString(std::size_t i) const;
150 
151  std::unique_ptr<te::dt::ByteArray> getByteArray(std::size_t i) const;
152 
153  std::unique_ptr<te::gm::Geometry> getGeometry(std::size_t i) const;
154 
155  std::unique_ptr<te::rst::Raster> getRaster(std::size_t i) const;
156 
157  std::unique_ptr<te::dt::DateTime> getDateTime(std::size_t i) const;
158 
159  std::unique_ptr<te::dt::Array> getArray(std::size_t i) const;
160 
161  bool isNull(std::size_t i) const;
162 
163  /** @name PostGIS Extended Methods
164  * Methods that exists only in the PostGIS DataSet implementation.
165  */
166  //@{
167 
168  /*!
169  \brief It returns the internal pg result.
170 
171  \return The internal pg result.
172  */
173  PGresult* getPGResult() const { return m_result; }
174 
175  //Connection* getConnection() const { return m_conn; }
176 
177  //@}
178 
179  protected:
180 
181  int m_iFetch; //!< The index of the current row of current fetch.
182  int m_iLayer; //!< The index of total layer of the current row.
183  int m_size; //!< The number of datasets in the collection.
184  PGresult* m_result; //!< The internal buffer with the result query.
185  DataSource* m_ds; //!< The DataSource to get the connection.
186  int m_connectionId; //!< The connection id used by this dataset.
187  int m_fetchSize; //!< The size of cursor fetch.
188  std::string m_idcursor; //!< The id of current cursor.
189  std::vector<int> m_ptypes; //!< The list of property types.
190  te::gm::Envelope* m_mbr; //!< The dataset extent.
191  bool m_timeIsInteger; //!< It indicates if the postgis stores, internally, the time and timestamp as an integer.
192  };
193 
194  } // end namespace pgis
195 } // end namespace te
196 
197 
198 #endif // __TERRALIB_POSTGIS_INTERNAL_CONNECTED_DATASET_H
int m_iFetch
The index of the current row of current fetch.
bool m_timeIsInteger
It indicates if the postgis stores, internally, the time and timestamp as an integer.
int m_connectionId
The connection id used by this dataset.
struct pg_result PGresult
Definition: Connection.h:48
int m_size
The number of datasets in the collection.
PGresult * m_result
The internal buffer with the result query.
std::string m_idcursor
The id of current cursor.
Implementation of a connected dataset for the PostGIS driver.
#define TEPGISEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:195
The PostGIS driver.
Definition: DataSource.h:54
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
PGresult * getPGResult() const
It returns the internal pg result.
An Envelope defines a 2D rectangular region.
Definition: Envelope.h:51
Configuration flags for the PostGIS Driver Implementation of TerraLib.
URI C++ Library.
int m_fetchSize
The size of cursor fetch.
A class that implements a connection to a PostgreSQL database.
DataSource * m_ds
The DataSource to get the connection.
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:112
std::vector< int > m_ptypes
The list of property types.
int m_iLayer
The index of total layer of the current row.
te::gm::Envelope * m_mbr
The dataset extent.