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  char getChar(std::size_t i) const;
130 
131  unsigned char getUChar(std::size_t i) const;
132 
133  boost::int16_t getInt16(std::size_t i) const;
134 
135  boost::int32_t getInt32(std::size_t i) const;
136 
137  boost::int64_t getInt64(std::size_t i) const;
138 
139  bool getBool(std::size_t i) const;
140 
141  float getFloat(std::size_t i) const;
142 
143  double getDouble(std::size_t i) const;
144 
145  std::string getNumeric(std::size_t i) const;
146 
147  std::string getString(std::size_t i) const;
148 
149  std::unique_ptr<te::dt::ByteArray> getByteArray(std::size_t i) const;
150 
151  std::unique_ptr<te::gm::Geometry> getGeometry(std::size_t i) const;
152 
153  std::unique_ptr<te::rst::Raster> getRaster(std::size_t i) const;
154 
155  std::unique_ptr<te::dt::DateTime> getDateTime(std::size_t i) const;
156 
157  std::unique_ptr<te::dt::Array> getArray(std::size_t i) const;
158 
159  bool isNull(std::size_t i) const;
160 
161  /** @name PostGIS Extended Methods
162  * Methods that exists only in the PostGIS DataSet implementation.
163  */
164  //@{
165 
166  /*!
167  \brief It returns the internal pg result.
168 
169  \return The internal pg result.
170  */
171  PGresult* getPGResult() const { return m_result; }
172 
173  //Connection* getConnection() const { return m_conn; }
174 
175  //@}
176 
177  protected:
178 
179  int m_iFetch; //!< The index of the current row of current fetch.
180  int m_iLayer; //!< The index of total layer of the current row.
181  int m_size; //!< The number of datasets in the collection.
182  PGresult* m_result; //!< The internal buffer with the result query.
183  DataSource* m_ds; //!< The DataSource to get the connection.
184  int m_connectionId; //!< The connection id used by this dataset.
185  int m_fetchSize; //!< The size of cursor fetch.
186  std::string m_idcursor; //!< The id of current cursor.
187  std::vector<int> m_ptypes; //!< The list of property types.
188  te::gm::Envelope* m_mbr; //!< The dataset extent.
189  bool m_timeIsInteger; //!< It indicates if the postgis stores, internally, the time and timestamp as an integer.
190  };
191 
192  } // end namespace pgis
193 } // end namespace te
194 
195 
196 #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.