PreparedQuery.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/PreparedQuery.h
22 
23  \brief A class that implements a prepared query for PostgreSQL data access driver.
24 */
25 
26 #ifndef __TERRALIB_POSTGIS_INTERNAL_PREPAREDQUERY_H
27 #define __TERRALIB_POSTGIS_INTERNAL_PREPAREDQUERY_H
28 
29 // TerraLib
30 #include "../dataaccess/datasource/PreparedQuery.h"
31 #include "Config.h"
32 
33 // Forward delcarations for libpq
34 extern "C"
35 {
36  struct pg_conn;
37  typedef struct pg_conn PGconn;
38 
39  struct pg_result;
40  typedef struct pg_result PGresult;
41 }
42 
43 namespace te
44 {
45 // Forward declarations
46  namespace da
47  {
48  class DataSetType;
49  }
50 
51  namespace pgis
52  {
53 // Forward declarations
54  class Transactor;
55 
56  /*!
57  \class PreparedQuery
58 
59  \brief A class that implements a prepared query for PostgreSQL data access driver.
60 
61  \note Some general notes:
62  - bind doesn't need to set length for fixed-size types.
63 
64  \note Review pending bind methods (raster, date, array, ...).
65 
66  \note We need a numeric type by tomorrow!
67  */
69  {
70  public:
71 
72  PreparedQuery(Transactor* t, const std::string& pqname);
73 
74  ~PreparedQuery();
75 
76  std::string getName() const;
77 
78  void prepare(const te::da::Query& query, const std::vector<te::dt::Property*>& paramTypes);
79 
80  void prepare(const std::string& query, const std::vector<te::dt::Property*>& paramTypes);
81 
82  void execute();
83 
86 
87  void bind(int i, char value);
88 
89  void bind(int i, unsigned char value);
90 
91  void bind(int i, boost::int16_t value);
92 
93  void bind(int i, boost::int32_t value);
94 
95  void bind(int i, boost::int64_t value);
96 
97  void bind(int i, bool value);
98 
99  void bind(int i, float value);
100 
101  void bind(int i, double value);
102 
103  void bindNumeric(int i, const std::string& value);
104 
105  void bind(int i, const std::string& value);
106 
107  void bind(int i, const te::dt::ByteArray& value);
108 
109  void bind(int i, const te::gm::Geometry& value);
110 
111  void bind(int i, const te::rst::Raster& value);
112 
113  void bind(int i, const te::dt::DateTime& value);
114 
115  void bind(int i, const te::da::DataSet& value);
116 
117  void bind(int i, const te::dt::AbstractData& ad);
118 
119  te::da::DataSourceTransactor* getTransactor() const;
120 
121  /*!
122  \note PostgeSQL driver extended method.
123  */
124  void prepare(const std::string& query, const std::vector<int>& paramTypes);
125 
126  /*!
127  \note PostgeSQL driver extended method.
128  */
129  void bind(const std::vector<std::size_t>& propertiesPos, std::size_t offset, te::da::DataSet* d);
130 
131  /*!
132  \note PostgeSQL driver extended method.
133  */
134  void bind(const std::vector<std::size_t>& propertiesPos, te::da::DataSet* d);
135 
136  /*!
137  \note PostgeSQL driver extended method.
138  */
139  void bind(te::da::DataSet* d);
140 
141  /*!
142  \note PostgeSQL driver extended method.
143  */
144  void clear();
145 
146  private:
147 
154  std::size_t m_nparams;
155  std::string m_qname;
156  };
157 
158  } // end namespace pgis
159 } // end namespace te
160 
161 
162 #endif // __TERRALIB_POSTGIS_INTERNAL_PREPAREDQUERY_H
A class that model a prepared query.
Definition: PreparedQuery.h:69
struct pg_result PGresult
Definition: Connection.h:48
#define TEPGISEXPORT
You can use this macro in order to export/import classes and functions from this module.
Definition: Config.h:195
The transactor class for the PostGIS driver.
Definition: Transactor.h:62
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
struct pg_conn PGconn
Definition: Connection.h:45
An abstract class for raster data strucutures.
Definition: Raster.h:71
Configuration flags for the PostGIS Driver Implementation of TerraLib.
URI C++ Library.
A base class for values that can be retrieved from the data access module.
Definition: AbstractData.h:57
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
A dataset is the unit of information manipulated by the data access module of TerraLib.
Definition: DataSet.h:112
A class that implements a prepared query for PostgreSQL data access driver.
Definition: PreparedQuery.h:68
A Query is independent from the data source language/dialect.
Definition: Query.h:46
A class for representing binary data.
Definition: ByteArray.h:51