27 #include "../common/Globals.h" 
   28 #include "../common/Translator.h" 
   29 #include "../dataaccess/dataset/DataSet.h" 
   30 #include "../dataaccess/dataset/DataSetType.h" 
   31 #include "../dataaccess/query/Query.h" 
   32 #include "../datatype/ByteArray.h" 
   33 #include "../datatype/DateTime.h" 
   34 #include "../geometry/Geometry.h" 
   35 #include "../memory/DataSet.h" 
   48 #include <boost/date_time.hpp> 
   49 #include <boost/format.hpp> 
   61       int retval = SQLITE_OK;
 
   67         retval = sqlite3_bind_null(stmt, i + 1);
 
   69         if(retval != SQLITE_OK)
 
   75       switch(propertyDataType)
 
   78           retval = sqlite3_bind_int(stmt, i + 1, d->
getChar(propertyPos));
 
   82           retval = sqlite3_bind_int(stmt, i + 1, d->
getUChar(propertyPos));
 
   86           retval = sqlite3_bind_int(stmt, i + 1, d->
getInt16(propertyPos));
 
   90           retval = sqlite3_bind_int(stmt, i + 1, d->
getInt32(propertyPos));
 
   94           retval = sqlite3_bind_int64(stmt, i + 1, d->
getInt64(propertyPos));
 
  102           retval = sqlite3_bind_double(stmt, i + 1, static_cast<double>(d->
getFloat(propertyPos)));
 
  106           retval = sqlite3_bind_double(stmt, i + 1, d->
getDouble(propertyPos));
 
  111             std::string value = d->
getNumeric(propertyPos);
 
  112             retval = sqlite3_bind_text(stmt, i + 1, value.c_str(), value.size(), SQLITE_TRANSIENT);
 
  118             std::string value = d->
getString(propertyPos);
 
  119             retval = sqlite3_bind_text(stmt, i + 1, value.c_str(), value.size(), SQLITE_TRANSIENT);
 
  133             std::auto_ptr<te::gm::Geometry> g(d->
getGeometry(propertyPos));
 
  137             unsigned char* ewkb = 
new unsigned char[ewkbSize];
 
  141             retval = sqlite3_bind_blob(stmt, i + 1, ewkb, ewkbSize, SQLITE_TRANSIENT);
 
  149             std::auto_ptr<te::dt::DateTime> dt(d->
getDateTime(propertyPos));
 
  151             std::string sdate = dt->toString();
 
  153             retval = sqlite3_bind_text(stmt, i + 1, sdate.c_str(), sdate.size(), SQLITE_TRANSIENT);
 
  169           throw te::common::Exception(TR_COMMON(
"There is a TerraLib data type that can not be mapped to SQLite type system!"));
 
  172       if(retval != SQLITE_OK)
 
  188   sqlite3_finalize(m_stmt);
 
  198   assert(m_t && m_t->getDataSource() && m_t->getDataSource()->getDialect());
 
  201   SQLVisitor visitor(*(m_t->getDataSource()->getDialect()), sql);
 
  209   sqlite3_finalize(m_stmt);
 
  213   int ret = sqlite3_prepare_v2(m_db, query.c_str(), -1, &m_stmt, 0);
 
  218       sqlite3_finalize(m_stmt);
 
  222     throw te::common::Exception((boost::format(TR_COMMON(
"Could not excute the given query due to the following error: %1%.")) % sqlite3_errmsg(m_db)).str());
 
  228   int retval = sqlite3_step(m_stmt);
 
  230   if(retval != SQLITE_DONE)
 
  232     boost::format errmsg(TR_COMMON(
"Could not execute prepared query due to the following error: %1%."));
 
  234     const char* litemsg = sqlite3_errmsg(m_db);
 
  237       errmsg = errmsg % litemsg;
 
  242   retval = sqlite3_reset(m_stmt);
 
  244   if(retval != SQLITE_OK)
 
  246     boost::format errmsg(TR_COMMON(
"Could not reset the prepared query to its initial state due to the following error: %1%."));
 
  248     const char* litemsg = sqlite3_errmsg(m_db);
 
  251       errmsg = errmsg % litemsg;
 
  305   int retval = sqlite3_bind_int(m_stmt, i + 1, value);
 
  307   if(retval != SQLITE_OK)
 
  313   int retval = sqlite3_bind_int(m_stmt, i + 1, value);
 
  315   if(retval != SQLITE_OK)
 
  321   int retval = sqlite3_bind_int(m_stmt, i + 1, value);
 
  323   if(retval != SQLITE_OK)
 
  329   int retval = sqlite3_bind_int(m_stmt, i + 1, value);
 
  331   if(retval != SQLITE_OK)
 
  337   int retval = sqlite3_bind_int64(m_stmt, i + 1, value);
 
  339   if(retval != SQLITE_OK)
 
  347   if(retval != SQLITE_OK)
 
  353   int retval = sqlite3_bind_double(m_stmt, i + 1, static_cast<double>(value));
 
  355   if(retval != SQLITE_OK)
 
  361   int retval = sqlite3_bind_double(m_stmt, i + 1, value);
 
  363   if(retval != SQLITE_OK)
 
  369   int retval = sqlite3_bind_text(m_stmt, i + 1, value.c_str(), value.size(), SQLITE_TRANSIENT);
 
  371   if(retval != SQLITE_OK)
 
  377   int retval = sqlite3_bind_text(m_stmt, i + 1, value.c_str(), value.size(), SQLITE_TRANSIENT);
 
  379   if(retval != SQLITE_OK)
 
  385   int retval = sqlite3_bind_blob(m_stmt, i + 1, value.
getData(), value.
bytesUsed(), SQLITE_TRANSIENT);
 
  387   if(retval != SQLITE_OK)
 
  395   unsigned char* ewkb = 
new unsigned char[ewkbSize];
 
  399   int retval = sqlite3_bind_blob(m_stmt, i + 1, ewkb, ewkbSize, SQLITE_TRANSIENT);
 
  403   if(retval != SQLITE_OK)
 
  414   std::string sdate = value.
toString();
 
  416   int retval = sqlite3_bind_text(m_stmt, i + 1, sdate.c_str(), sdate.size(), SQLITE_TRANSIENT);
 
  418   if(retval != SQLITE_OK)
 
  440   sqlite3_finalize(m_stmt);
 
  444   sqlite3_finalize(m_stmt);
 
  448   int ret = sqlite3_prepare_v2(m_db, query.c_str(), -1, &m_stmt, 0);
 
  453       sqlite3_finalize(m_stmt);
 
  457     throw te::common::Exception((boost::format(TR_COMMON(
"Could not excute the given query due to the following error: %1%.")) % sqlite3_errmsg(m_db)).str());
 
  465   const std::size_t nparams = propertiesPos.size();
 
  467   for(std::size_t i = 0; i != nparams; ++i)
 
  468     BindValue(m_stmt, d, i + offset, propertiesPos[i]);
 
  474   const std::size_t nparams = propertiesPos.size();
 
  476   for(std::size_t i = 0; i != nparams; ++i)
 
  477     BindValue(m_stmt, d, i, propertiesPos[i]);
 
  484   for(std::size_t i = 0; i != nparams; ++i)
 
virtual std::auto_ptr< te::dt::DateTime > getDateTime(std::size_t i) const =0
Method for retrieving a date and time attribute value. 
 
virtual boost::int16_t getInt16(std::size_t i) const =0
Method for retrieving a 16-bit integer attribute value (2 bytes long). 
 
void BindValue(sqlite3_stmt *stmt, te::da::DataSet *d, std::size_t i, std::size_t propertyPos)
 
A visitor for building an SQL statement using SQLite dialect. 
 
#define TE_SQLITE_BOOL_FALSE
A flag that indicates a false value (boolean). 
 
virtual boost::int32_t getInt32(std::size_t i) const =0
Method for retrieving a 32-bit integer attribute value (4 bytes long). 
 
std::size_t bytesUsed() const 
It returns the number of used bytes in the internal buffer. 
 
void prepare(const te::da::Query &query, const std::vector< te::dt::Property * > ¶mTypes)
It prepares the query that may be used for commands that are used mutiple times (select, insert, update and delete). 
 
virtual char getChar(std::size_t i) const =0
Method for retrieving a signed character attribute value (1 byte long). 
 
virtual bool getBool(std::size_t i) const =0
Method for retrieving a boolean attribute value. 
 
virtual boost::int64_t getInt64(std::size_t i) const =0
Method for retrieving a 64-bit integer attribute value (8 bytes long). 
 
te::da::DataSet * query(te::common::TraverseType travType=te::common::FORWARDONLY, te::common::AccessPolicy rwRole=te::common::RAccess)
 
static const MachineByteOrder sm_machineByteOrder
A flag that indicates the machine byte order (Big Endian or Little Endian). 
 
virtual std::string toString() const =0
It returns the data value in a string notation. 
 
virtual std::string getNumeric(std::size_t i) const =0
Method for retrieving a numeric attribute value. 
 
A class that implements a prepared query for the TerraLib SQLite Data Access Driver. 
 
virtual double getDouble(std::size_t i) const =0
Method for retrieving a double attribute value. 
 
AccessPolicy
Supported data access policies (can be used as bitfield). 
 
TraverseType
A dataset can be traversed in two ways: 
 
Implementation of a random-access dataset class for the TerraLib In-Memory Data Access driver...
 
PreparedQuery()
Constructor. 
 
virtual float getFloat(std::size_t i) const =0
Method for retrieving a float attribute value. 
 
An abstract class for raster data strucutures. 
 
virtual bool isNull(std::size_t i) const =0
It checks if the attribute value is NULL. 
 
char * getData() const 
It returns the data array. 
 
A class that helps to determine the size of a SpatiaLite geometry. 
 
std::string getName() const 
It returns the prepared query name. 
 
A base class for values that can be retrieved from the data access module. 
 
void bind(int i, char value)
Binds the i-th parameter of the query to a value. 
 
A DataSourceTransactor can be viewed as a connection to the data source for reading/writing things in...
 
virtual std::size_t getNumProperties() const =0
It returns the number of properties that composes an item of the dataset. 
 
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
 
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards. 
 
virtual std::auto_ptr< te::gm::Geometry > getGeometry(std::size_t i) const =0
Method for retrieving a geometric attribute value. 
 
A class that serializes a geometry to the SpatiaLite EWKB format. 
 
A visitor for building an SQL statement using SQLite dialect. 
 
A dataset is the unit of information manipulated by the data access module of TerraLib. 
 
~PreparedQuery()
Virtual destructor. 
 
virtual ReturnType accept(VisitorType &guest) const =0
It call the visit method from the guest object. 
 
void bindNumeric(int i, const std::string &value)
Binds the i-th parameter of the query to a value. 
 
Implements the DataSource class for the SQLite Data Access Driver. 
 
struct sqlite3_stmt sqlite3_stmt
 
An implementation of DataSourceTransactor class for the TerraLib SQLite Data Access Driver...
 
virtual std::string getString(std::size_t i) const =0
Method for retrieving a string value attribute. 
 
virtual unsigned char getUChar(std::size_t i) const =0
Method for retrieving an unsigned character attribute value (1 byte long). 
 
virtual int getPropertyDataType(std::size_t i) const =0
It returns the underlying data type of the property at position pos. 
 
static std::size_t getEWKBSize(const te::gm::Geometry *g)
 
te::da::DataSourceTransactor * getTransactor() const 
It returns a pointer to the underlying data source transactor. 
 
#define TE_SQLITE_BOOL_TRUE
A flag that indicates a false value (boolean). 
 
A Query is independent from the data source language/dialect. 
 
Implementation of a forward-only dataset for the TerraLib SQLite Data Access driver. 
 
A class for representing binary data.