21 #include "../common/Translator.h"
22 #include "../dataaccess/dataset/ObjectId.h"
23 #include "../dataaccess/dataset/ObjectIdSet.h"
24 #include "../dataaccess/query/DataSetName.h"
25 #include "../dataaccess/query/Query.h"
26 #include "../dataaccess/query/Select.h"
27 #include "../dataaccess/utils/Utils.h"
28 #include "../datatype/ByteArray.h"
29 #include "../datatype/Date.h"
30 #include "../datatype/TimeInstant.h"
31 #include "../geometry/Envelope.h"
32 #include "../geometry/GeometryProperty.h"
33 #include "../srs/Config.h"
41 #include <ogrsf_frmts.h>
77 : te::da::DataSourceTransactor(),
97 if (!m_ogrDs->getOGRDataSource())
118 if (!m_ogrDs->getOGRDataSource())
119 return std::auto_ptr<te::da::DataSet>();
121 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
123 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
124 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
127 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
129 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
140 if (!m_ogrDs->getOGRDataSource())
141 return std::auto_ptr<te::da::DataSet>();
143 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
145 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
146 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
149 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
153 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
164 if (!m_ogrDs->getOGRDataSource())
165 return std::auto_ptr<te::da::DataSet>();
167 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
169 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
170 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
173 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
177 layer->SetSpatialFilter(ogrg);
179 OGRGeometryFactory::destroyGeometry(ogrg);
181 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
189 if (!m_ogrDs->getOGRDataSource())
190 return std::auto_ptr<te::da::DataSet>();
192 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
196 SQLVisitor visitor(*m_ogrDs->getDialect(), sql);
202 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
205 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
212 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
220 if (!m_ogrDs->getOGRDataSource())
221 return std::auto_ptr<te::da::DataSet>();
223 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
226 std::string queryCopy = query;
227 std::size_t pos = queryCopy.find(
"*");
228 if(pos != std::string::npos)
230 std::string fid =
"FID, *";
231 queryCopy.replace(pos, 1, fid);
234 OGRLayer* layer = ds->ExecuteSQL(queryCopy.c_str(), 0, 0);
237 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
239 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
254 if (!m_ogrDs->getOGRDataSource())
257 OGRLayer* layer = m_ogrDs->getOGRDataSource()->ExecuteSQL(command.c_str(), 0,
"");
260 m_ogrDs->getOGRDataSource()->ReleaseResultSet(layer);
265 return std::auto_ptr<te::da::PreparedQuery>(0);
270 return std::auto_ptr<te::da::BatchExecutor>(0);
289 std::vector<std::string> names;
291 if (!m_ogrDs->getOGRDataSource())
294 for(
int i=0; i<m_ogrDs->getOGRDataSource()->GetLayerCount(); i++)
295 names.push_back(m_ogrDs->getOGRDataSource()->GetLayer(i)->GetName());
302 if (!m_ogrDs->getOGRDataSource())
305 return m_ogrDs->getOGRDataSource()->GetLayerCount();
310 if (!m_ogrDs->getOGRDataSource())
311 return std::auto_ptr<te::da::DataSetType>();
313 std::string sql(
"SELECT FID, * FROM \'");
316 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
319 return std::auto_ptr<te::da::DataSetType>();
321 std::auto_ptr<te::da::DataSetType> type(
Convert2TerraLib(l->GetLayerDefn()));
325 const char* colIdName = l->GetFIDColumn();
327 if(colIdName == 0 || colIdName[0] ==
'\0')
330 int pos = l->GetLayerDefn()->GetFieldIndex(colIdName);
334 pk->
add(type->getProperty(pos));
344 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
353 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str());
357 cap->setSupportAddColumn((l->TestCapability(OLCCreateField) == 0) ?
false :
true);
358 cap->setSupportRemoveColumn((l->TestCapability(OLCDeleteField) == 0) ?
false :
true);
359 cap->setSupportDataEdition((l->TestCapability(OLCRandomWrite) == 0) ?
false :
true);
367 boost::ptr_vector<te::dt::Property> ps;
369 if (!m_ogrDs->getOGRDataSource())
372 std::string sql(
"SELECT FID, * FROM \'");
373 sql += datasetName +
"\'";
375 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
380 std::auto_ptr<te::da::DataSetType> dt(
Convert2TerraLib(l->GetLayerDefn(),srs));
381 std::vector<te::dt::Property*> props = dt->getProperties();
382 std::vector<te::dt::Property*>::iterator it;
384 for(it=props.begin(); it!=props.end(); ++it)
385 ps.push_back((*it)->clone());
388 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
395 if (!m_ogrDs->getOGRDataSource())
396 return std::auto_ptr<te::dt::Property>();
399 std::string sql(
"SELECT FID, * FROM \'");
400 sql += datasetName +
"\'";
402 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
405 idx = l->GetLayerDefn()->GetFieldIndex(name.c_str());
407 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
409 return getProperty(datasetName, idx);
414 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
416 return std::auto_ptr<te::dt::Property>();
418 std::auto_ptr<te::dt::Property> res;
419 std::string sql (
"SELECT FID, * FROM \'");
420 sql += datasetName +
"\'";
422 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
426 OGRFeatureDefn* def = l->GetLayerDefn();
427 OGRFieldDefn* fdef = def->GetFieldDefn(propertyPos);
433 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
440 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
442 return std::vector<std::string>();
444 std::vector<std::string> res;
445 std::string sql (
"SELECT FID, * FROM \'");
446 sql += datasetName +
"\'";
448 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
452 OGRFeatureDefn* def = l->GetLayerDefn();
454 for(
int i=0; i<def->GetFieldCount(); i++)
455 res.push_back(def->GetFieldDefn(i)->GetNameRef());
458 ogrds->ReleaseResultSet(l);
465 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
469 std::string sql(
"SELECT FID, * FROM \'");
470 sql += datasetName +
"\'";
472 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
478 res = l->GetLayerDefn()->GetFieldCount();
479 ogrds->ReleaseResultSet(l);
487 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
491 std::string sql(
"SELECT FID, * FROM \'");
492 sql += datasetName +
"\'";
495 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
499 res = (l->GetLayerDefn()->GetFieldIndex(name.c_str()) != -1);
500 ogrds->ReleaseResultSet(l);
508 if (!m_ogrDs->getOGRDataSource())
511 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
521 OGRErr error = l->CreateField(nField);
525 if(error != OGRERR_NONE)
526 throw Exception(
TE_TR(
"Error when attempting add the property: " + p->
getName() +
"."));
528 error = l->SyncToDisk();
530 if(error != OGRERR_NONE)
531 throw Exception(
TE_TR(
"Error saving changes on the file."));
538 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
542 if(!l->TestCapability(OLCDeleteField))
543 throw Exception(
TE_TR(
"This dataset do not support remove properties operation."));
545 int fPos = l->GetLayerDefn()->GetFieldIndex(name.c_str());
548 throw Exception(
TE_TR(
"Field not found."));
550 OGRErr error = l->DeleteField(fPos);
552 if(error != OGRERR_NONE)
553 throw Exception(
TE_TR(
"Error when attempting remove the property."));
555 error = l->SyncToDisk();
557 if(error != OGRERR_NONE)
558 throw Exception(
TE_TR(
"Error saving changes on the file."));
563 const std::string& propertyName,
564 const std::string& newPropertyName)
566 if (!m_ogrDs->getOGRDataSource())
569 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
573 int idx = l->GetLayerDefn()->GetFieldIndex(propertyName.c_str());
576 throw Exception(
TE_TR(
"Field to be renamed does not exists."));
578 OGRFieldDefn* df = l->GetLayerDefn()->GetFieldDefn(idx);
580 OGRFieldDefn* dfn =
new OGRFieldDefn(df);
582 dfn->SetName(newPropertyName.c_str());
584 OGRErr err = l->AlterFieldDefn(idx, dfn, ALTER_NAME_FLAG);
586 if(err != OGRERR_NONE)
587 throw Exception(
TE_TR(
"Fail to rename field."));
593 if (!m_ogrDs->getOGRDataSource())
596 std::auto_ptr<te::dt::Property> p;
600 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
604 if(!l->TestCapability(OLCAlterFieldDefn))
605 throw Exception(
TE_TR(
"This data source do not support the operation of alter columns type."));
607 int idx = l->GetLayerDefn()->GetFieldIndex(propName.c_str());
610 throw Exception(
TE_TR(
"Field to be renamed does not exists."));
612 OGRFieldDefn* dfn =
new OGRFieldDefn(l->GetLayerDefn()->GetFieldDefn(idx));
616 OGRErr err = l->AlterFieldDefn(idx, dfn, ALTER_TYPE_FLAG);
618 if(err != OGRERR_NONE)
619 throw Exception(
TE_TR(
"Fail to to change field type."));
621 std::string name = m_ogrDs->getOGRDataSource()->GetName();
623 err = l->SyncToDisk();
629 if (!m_ogrDs->getOGRDataSource())
630 return std::auto_ptr<te::da::PrimaryKey>();
632 std::auto_ptr<te::da::PrimaryKey> res;
633 std::string sql(
"SELECT FID, * FROM \'");
634 sql += datasetName +
"\'";
636 OGRLayer* layer = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
640 const char* colIdName = layer->GetFIDColumn();
642 if(colIdName == 0 || colIdName[0] ==
'\0')
645 int pos = layer->GetLayerDefn()->GetFieldIndex(colIdName);
650 res->add(getProperty(datasetName, pos).
get());
654 m_ogrDs->getOGRDataSource()->ReleaseResultSet(layer);
674 return std::auto_ptr<te::da::ForeignKey>();
679 return std::vector<std::string>();
697 return std::auto_ptr<te::da::UniqueKey>();
702 return std::vector<std::string>();
720 return std::auto_ptr<te::da::CheckConstraint>();
725 return std::vector<std::string>();
743 return std::auto_ptr<te::da::Index>();
748 return std::vector<std::string>();
757 const std::map<std::string, std::string>& )
767 return std::auto_ptr<te::da::Sequence>();
772 return std::vector<std::string>();
789 const std::string& propertyName)
791 if (!m_ogrDs->getOGRDataSource())
792 return std::auto_ptr<te::gm::Envelope>();
794 std::auto_ptr<te::gm::Envelope> res;
795 std::string sql(
"SELECT ");
796 sql += propertyName +
" FROM \'";
797 sql += datasetName +
"\'";
799 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
803 std::auto_ptr<OGREnvelope> env(
new OGREnvelope);
805 if(l->GetExtent(env.get()) != OGRERR_NONE)
807 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
808 throw Exception(
TE_TR(
"Error when attempting get extent."));
813 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
822 return getExtent(datasetName,
"OGR_GEOMETRY");
827 if (!m_ogrDs->getOGRDataSource())
830 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
833 return l->GetFeatureCount();
840 if (!m_ogrDs->getOGRDataSource())
843 return (m_ogrDs->getOGRDataSource()->GetLayerCount() > 0);
848 if (!m_ogrDs->getOGRDataSource())
851 return (m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str()) != 0);
856 if (!m_ogrDs->getOGRDataSource())
859 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCCreateLayer))
860 throw Exception(
TE_TR(
"This driver does not support dataset creation."));
862 OGRwkbGeometryType geomType = wkbUnknown;
863 OGRSpatialReference* srs = 0;
870 srs =
new OGRSpatialReference();
871 srs->importFromEPSG(srid);
875 char** papszOptions = 0;
876 std::map<std::string, std::string>::const_iterator it = m_ogrDs->getConnectionInfo().begin();
877 while(it != m_ogrDs->getConnectionInfo().end())
879 if(it->first ==
"URI" || it->first ==
"SOURCE" || it->first ==
"DRIVER")
884 papszOptions = CSLSetNameValue(papszOptions, it->first.c_str(), it->second.c_str());
888 OGRLayer* newLayer = m_ogrDs->getOGRDataSource()->CreateLayer(dt->
getName().c_str(), srs, geomType, papszOptions);
891 CSLDestroy(papszOptions);
894 throw Exception(
TE_TR(
"Error when attempting create the dataset type."));
896 dt->
setName(newLayer->GetName());
899 for(
size_t i = 0; i < dt->
size(); ++i)
904 const std::string& cloneName,
905 const std::map<std::string, std::string>& )
907 if (!m_ogrDs->getOGRDataSource())
910 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCCreateLayer))
911 throw Exception(
TE_TR(
"This driver does not support creates a dataset."));
913 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str());
916 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
918 OGRLayer* cl = m_ogrDs->getOGRDataSource()->CopyLayer(l, cloneName.c_str());
921 throw Exception(
TE_TR(
"Error when attempting clone the dataset."));
926 if (!m_ogrDs->getOGRDataSource())
929 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCDeleteLayer))
930 throw Exception(
TE_TR(
"This driver does not support remove a dataset."));
934 for(; i<m_ogrDs->getOGRDataSource()->GetLayerCount(); i++)
935 if(name.compare(m_ogrDs->getOGRDataSource()->GetLayer(i)->GetName()) == 0)
938 if(i == m_ogrDs->getOGRDataSource()->GetLayerCount())
939 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
941 if(m_ogrDs->getOGRDataSource()->DeleteLayer(i) != OGRERR_NONE)
942 throw Exception(
TE_TR(
"Error when attempting to remove the dataset."));
951 const std::map<std::string, std::string>& options,
955 limit = std::string::npos;
957 if (!m_ogrDs->getOGRDataSource())
960 OGRLayer* layer = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
963 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
971 std::size_t nProcessedRows = 0;
973 while(d->
moveNext() && (nProcessedRows != limit))
975 OGRFeature* feat = OGRFeature::CreateFeature(layer->GetLayerDefn());
977 std::size_t currfield = 0;
979 for(std::size_t i = 0; i != nproperties; ++i)
992 feat->SetField(currfield, d->
getInt16(i));
997 feat->SetField(currfield, d->
getInt32(i));
1002 feat->SetField(currfield, d->
getAsString(i).c_str());
1007 feat->SetField(currfield, d->
getDouble(i));
1012 feat->SetField(currfield, atof(d->
getNumeric(i).c_str()));
1018 std::auto_ptr<te::dt::ByteArray> ba(d->
getByteArray(i));
1019 feat->SetField(currfield, ba->bytesUsed(),
reinterpret_cast<unsigned char*
>(ba->getData()));
1026 std::auto_ptr<te::dt::DateTime> dtm(d->
getDateTime(i));
1032 feat->SetField(currfield,
1033 static_cast<int>(dtime->getYear()),
1034 static_cast<int>(dtime->getMonth()),
1035 static_cast<int>(dtime->getDay()));
1044 feat->SetField(currfield, 0, 0, 0,
1045 static_cast<int>(tduration->
getHours()),
1056 feat->SetField(currfield,
1057 static_cast<int>(dtime->getYear()),
1058 static_cast<int>(dtime->getMonth()),
1059 static_cast<int>(dtime->getDay()),
1060 static_cast<int>(tduration->
getHours()),
1067 throw Exception (
TE_TR(
"Unsupported date and time type by OGR."));
1073 std::auto_ptr<te::gm::Geometry> geom(d->
getGeometry(i));
1075 feat->SetGeometryDirectly(OGRgeom);
1080 throw Exception(
TE_TR(
"Unsupported data type by OGR."));
1084 if(layer->CreateFeature(feat) != OGRERR_NONE)
1086 OGRFeature::DestroyFeature(feat);
1087 throw Exception(
TE_TR(
"Fail to insert dataset item."));
1090 OGRFeature::DestroyFeature(feat);
1105 if(!m_ogrDs->getOGRDataSource())
1108 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
1111 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
1113 if(!l->TestCapability(OLCDeleteFeature))
1114 throw Exception(
TE_TR(
"Driver does not support removal of features."));
1116 std::set<te::da::ObjectId*, te::common::LessCmp<te::da::ObjectId*> >::const_iterator it = oids->
begin();
1118 while(it != oids->
end())
1122 if(l->DeleteFeature(atoi((*it)->getValue()[0].toString().c_str())) != OGRERR_NONE)
1125 throw Exception(
TE_TR(
"Error when attempting to remove the feature."));
1137 const std::vector<std::size_t>& properties,
1139 const std::map<std::string, std::string>& ,
1145 const std::vector<size_t>& ids)
1147 if(m_ogrDs->getOGRDataSource() == 0)
1148 throw Exception(
TE_TR(
"Data source failure"));
1150 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
1153 throw Exception(
TE_TR(
"Could not retrieve dataset"));
1160 size_t id_pos = ids[0];
1161 int id = dataset->
getInt32(id_pos);
1163 OGRFeature* feat = l->GetFeature(
id)->Clone();
1165 std::set<int> ls = properties[i];
1166 std::set<int>::iterator it;
1168 for(it = ls.begin(); it != ls.end(); ++it)
1171 int fpos_o = fpos - 1;
1176 feat->SetField(fpos_o, dataset->
getInt32(fpos));
1181 feat->SetField(fpos_o, dataset->
getDouble(fpos));
1185 feat->SetField(fpos_o, dataset->
getString(fpos).c_str());
1190 l->SetFeature(feat);
Property * getProperty(std::size_t i) const
It returns the i-th property.
std::vector< std::string > getUniqueKeyNames(const std::string &datasetName)
It gets the unique key names of the given dataset.
te::common::CharEncoding getEncoding()
It return the DataSource current encoding.
void dropProperty(const std::string &datasetName, const std::string &name)
It removes a property from the given dataset.
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).
std::auto_ptr< te::gm::Envelope > getExtent(const std::string &datasetName, const std::string &propertyName)
It retrieves the bounding rectangle of the spatial property for the given dataset.
void add(te::dt::Property *p)
It adds a property to the list of properties of the primary key.
void addForeignKey(const std::string &datasetName, te::da::ForeignKey *fk)
It adds a foreign key constraint to a dataset.
Utility functions for the data access module.
void dropCheckConstraint(const std::string &datasetName, const std::string &name)
It removes the check constraint from the dataset.
boost::int64_t getLastGeneratedId()
It returns the last id generated by an insertion command.
A class that informs what kind of constraint and index is supported by a given data source...
TEOGREXPORT OGRGeometry * Convert2OGR(const te::gm::Geometry *teGeom)
It converts the TerraLib Geometry to OGR Geometry.
void setSRID(int srid)
It sets the spatial reference system identifier associated to this property.
virtual boost::int32_t getInt32(std::size_t i) const =0
Method for retrieving a 32-bit integer attribute value (4 bytes long).
CharEncoding
Supported charsets (character encoding).
A class for data providers of OGR.
bool isInTransaction() const
It returns true if a transaction is in progress, otherwise, it returns false.
void commit()
It commits the transaction.
bool hasGeom() const
It returns true if the DataSetType has at least one geometry property; otherwise, it returns false...
boost::ptr_vector< te::dt::Property > getProperties(const std::string &datasetName)
It retrieves the properties of the dataset.
std::auto_ptr< te::da::Sequence > getSequence(const std::string &name)
It gets the sequence with the given name in the data source.
std::auto_ptr< te::da::DataSetTypeCapabilities > getCapabilities(const std::string &name)
It gets capabilities about a data set.
bool sequenceExists(const std::string &name)
It checks if a sequence with the given name exists in the data source.
te::da::DataSource * getDataSource() const
It returns the parent data source of the transactor.
A class that models the description of a dataset.
void addProperty(const std::string &datasetName, te::dt::Property *p)
It adds a new property to the dataset schema.
long getSeconds() const
It returns the seconds of a minute - from 0 to 59.
std::size_t getNumberOfProperties(const std::string &datasetName)
It gets the number of properties of the given dataset.
std::auto_ptr< te::da::Index > getIndex(const std::string &datasetName, const std::string &name)
It gets the index with the given name from the dataset.
bool checkConstraintExists(const std::string &datasetName, const std::string &name)
It checks if a check-constraint with the given name exists in the data source.
void cloneDataSet(const std::string &name, const std::string &cloneName, const std::map< std::string, std::string > &options)
It clones the dataset in the data source.
void dropForeignKey(const std::string &datasetName, const std::string &fkName)
It removes the foreign key constraint from the dataset schema.
virtual std::auto_ptr< te::dt::ByteArray > getByteArray(std::size_t i) const =0
Method for retrieving a byte array.
bool indexExists(const std::string &datasetName, const std::string &name)
It checks if an index with the given name exists in the dataset.
double m_urx
Upper right corner x-coordinate.
void renameDataSet(const std::string &name, const std::string &newName)
It renames a dataset.
SpatialRelation
Spatial relations between geometric objects.
It describes a sequence (a number generator).
std::auto_ptr< te::da::PrimaryKey > getPrimaryKey(const std::string &datasetName)
It retrieves the primary key of the dataset.
bool dataSetExists(const std::string &name)
It checks if a dataset with the given name exists in the data source.
std::auto_ptr< te::da::CheckConstraint > getCheckConstraint(const std::string &datasetName, const std::string &name)
It gets the check constraint of the dataset with the given name.
Transactor(DataSource *ds)
A class that describes a check constraint.
An abstract class for data providers like a DBMS, Web Services or a regular file. ...
virtual std::string getNumeric(std::size_t i) const =0
Method for retrieving a numeric attribute value.
#define TE_TR(message)
It marks a string in order to get translated.
TEOGREXPORT std::string RemoveSpatialSql(const std::string &sql)
std::auto_ptr< te::da::BatchExecutor > getBatchExecutor()
It creates a batch command executor.
void dropUniqueKey(const std::string &datasetName, const std::string &name)
It removes the unique key constraint from the dataset.
void dropDataSet(const std::string &name)
It removes the dataset schema from the data source.
Implementation of a DataSet for OGR data provider.
void update(const std::string &datasetName, te::da::DataSet *dataset, const std::vector< std::size_t > &properties, const te::da::ObjectIdSet *oids, const std::map< std::string, std::string > &options, std::size_t limit=0)
It updates the contents of a dataset for the set of data items.
It models a property definition.
void cancel()
It requests that the data source stop the processing of the current command.
bool foreignKeyExists(const std::string &datasetName, const std::string &name)
It checks if a foreign key with the given name exists in the data source.
void remove(const std::string &datasetName, const te::da::ObjectIdSet *oids=0)
It removes all the informed items from the dataset.
virtual double getDouble(std::size_t i) const =0
Method for retrieving a double attribute value.
void optimize(const std::map< std::string, std::string > &opInfo)
For some data access drivers, this method will perform some operations to optimize the data storage...
A class to represent time instant.
void addPrimaryKey(const std::string &datasetName, te::da::PrimaryKey *pk)
It adds a primary key constraint to the dataset schema.
std::vector< std::string > getCheckConstraintNames(const std::string &datasetName)
It gets the check constraint names of the given dataset.
bool primaryKeyExists(const std::string &datasetName, const std::string &name)
It checks if a primary key exists in the dataset.
void begin()
It starts a new transaction.
std::size_t getNumberOfDataSets()
It retrieves the number of data sets available in the data source.
virtual bool moveNext()=0
It moves the internal pointer to the next item of the collection.
AccessPolicy
Supported data access policies (can be used as bitfield).
TraverseType
A dataset can be traversed in two ways:
void addCheckConstraint(const std::string &datasetName, te::da::CheckConstraint *cc)
It adds a check constraint to the dataset.
void setName(const std::string &name)
It sets the property name.
double m_llx
Lower left corner x-coordinate.
int getSRID() const
It returns the spatial reference system identifier associated to this property.
An Envelope defines a 2D rectangular region.
#define TE_UNKNOWN_SRS
A numeric value to represent a unknown SRS identification in TerraLib.
A base class for date data types.
This class represents a set of unique ids created in the same context. i.e. from the same data set...
virtual bool isNull(std::size_t i) const =0
It checks if the attribute value is NULL.
void changePropertyDefinition(const std::string &datasetName, const std::string &propName, te::dt::Property *newProp)
TEOGREXPORT te::gm::Geometry * Convert2TerraLib(OGRGeometry *ogrGeom)
It converts the OGR Geometry to TerraLib Geometry.
std::auto_ptr< te::dt::Property > getProperty(const std::string &datasetName, const std::string &name)
It retrieves the property with the given name from the dataset.
A visitor for building an SQL statement using OGR dialect.
It models a foreign key constraint for a DataSetType.
virtual std::string getAsString(std::size_t i, int precision=0) const
Method for retrieving a data value as a string plain representation.
It describes a unique key (uk) constraint.
std::size_t size() const
It returns the number of properties of the CompositeProperty.
std::auto_ptr< te::da::ForeignKey > getForeignKey(const std::string &datasetName, const std::string &name)
It retrieves the foreign key from the given dataset.
virtual std::size_t getNumProperties() const =0
It returns the number of properties that composes an item of the dataset.
std::vector< std::string > getDataSetNames()
It It gets the dataset names available in the data source.
The OGR data source provider.
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards.
void dropPrimaryKey(const std::string &datasetName)
It removes the primary key constraint from the dataset schema.
A Select models a query to be used when retrieving data from a DataSource.
virtual std::auto_ptr< te::gm::Geometry > getGeometry(std::size_t i) const =0
Method for retrieving a geometric attribute value.
void dropSequence(const std::string &name)
It removes the sequence from the data source.
double m_lly
Lower left corner y-coordinate.
void execute(const te::da::Query &command)
It executes the specified command using a generic query representation.
void dropIndex(const std::string &datasetName, const std::string &idxName)
It removes the index from the dataset schema.
int getType() const
It returns the property data type.
A dataset is the unit of information manipulated by the data access module of TerraLib.
std::string escape(const std::string &value)
It escapes a string for using in commands and queries.
void createDataSet(te::da::DataSetType *dt, const std::map< std::string, std::string > &options)
It creates the dataset schema definition in the target data source.
double m_ury
Upper right corner y-coordinate.
virtual ReturnType accept(VisitorType &guest) const =0
It call the visit method from the guest object.
std::set< ObjectId *, te::common::LessCmp< ObjectId * > >::const_iterator end() const
Returns an iterator for the object ids in container.
A class to represent time duration with nano-second/micro-second resolution.
void addSequence(te::da::Sequence *sequence)
It creates a new sequence in the data source.
It describes a primary key (pk) constraint.
void renameProperty(const std::string &datasetName, const std::string &propertyName, const std::string &newPropertyName)
It renames a property of the given dataset.
std::auto_ptr< te::da::DataSet > query(const te::da::Select &q, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It executes a query that may return some data using a generic query. A dataset can be connected or di...
std::auto_ptr< te::da::DataSet > getDataSet(const std::string &name, te::common::TraverseType travType=te::common::FORWARDONLY, bool connected=false, const te::common::AccessPolicy accessPolicy=te::common::RAccess)
It gets the dataset identified by the given name. A dataset can be connected or disconnected. A connected dataset, after its creation through the data source transactor, continues to depend on the connection given by its associated data source. Differently, a disconnected dataset, after its creation, no more depends of the connection given by the data source, and it continues to live after the connection has been released to the data source.
Implementation of a DataSet for OGR data provider.
void add(const std::string &datasetName, te::da::DataSet *d, const std::map< std::string, std::string > &options, std::size_t limit=0)
It adds data items to the dataset in the data source.
void rollBack()
It aborts the transaction. Any changes will be rolled-back.
std::auto_ptr< te::da::DataSetType > getDataSetType(const std::string &name)
It gets information about the given dataset.
virtual std::string getString(std::size_t i) const =0
Method for retrieving a string value attribute.
std::vector< std::string > getPropertyNames(const std::string &datasetName)
It gets the property names of the given dataset.
std::auto_ptr< te::da::UniqueKey > getUniqueKey(const std::string &datasetName, const std::string &name)
It gets the unique key in the dataset with the given name.
long getMinutes() const
It returns the minutes of a hour - from 0 to 59.
std::vector< std::string > getForeignKeyNames(const std::string &datasetName)
It gets the foreign key names of the given dataset.
TEDATAACCESSEXPORT te::gm::GeometryProperty * GetFirstGeomProperty(const DataSetType *dt)
virtual int getPropertyDataType(std::size_t i) const =0
It returns the underlying data type of the property at position pos.
void addUniqueKey(const std::string &datasetName, te::da::UniqueKey *uk)
It adds a unique key constraint to the dataset.
OGRFieldType GetOGRType(int te_type)
std::set< ObjectId *, te::common::LessCmp< ObjectId * > >::const_iterator begin() const
Returns an iterator for the object ids in container.
std::auto_ptr< te::da::PreparedQuery > getPrepared(const std::string &qName=std::string(""))
It creates a prepared query object that may be used for query commands (select, insert, update and delete) that are used repeatedly.
std::vector< std::string > getSequenceNames()
It gets the sequence names available in the data source.
virtual bool moveFirst()=0
It moves the internal pointer to the first item in the collection.
void addIndex(const std::string &datasetName, te::da::Index *idx, const std::map< std::string, std::string > &options)
It adds an index to the dataset.
bool propertyExists(const std::string &datasetName, const std::string &name)
It checks if a property with the given name exists in the dataset.
bool uniqueKeyExists(const std::string &datasetName, const std::string &name)
It checks if a unique key with the given name exists in the dataset.
A Query is independent from the data source language/dialect.
It describes an index associated to a DataSetType.
long getHours() const
It returns the hours of a day - from 0 to 23.
TEOGREXPORT int Convert2TerraLibProjection(OGRSpatialReference *osrs)
It converts the OGR Projection to TerraLib Projection.
std::size_t getNumberOfItems(const std::string &datasetName)
It retrieves the number of items of the given dataset.
const std::string & getName() const
It returns the property name.
std::vector< std::string > getIndexNames(const std::string &datasetName)
It gets the index names of the given dataset.
bool hasDataSets()
It checks if the data source has any dataset.