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/SpatialReferenceSystemManager.h"
34 #include "../srs/Config.h"
42 #include <ogrsf_frmts.h>
78 :
te::da::DataSourceTransactor(),
98 if (!m_ogrDs->getOGRDataSource())
119 if (!m_ogrDs->getOGRDataSource())
120 return std::auto_ptr<te::da::DataSet>();
122 OGRDataSource* ds = m_ogrDs->getOGRDataSource();
125 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
126 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
129 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
131 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
142 if (!m_ogrDs->getOGRDataSource())
143 return std::auto_ptr<te::da::DataSet>();
145 OGRDataSource* ds = m_ogrDs->getOGRDataSource();
148 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
149 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
152 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
156 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
167 if (!m_ogrDs->getOGRDataSource())
168 return std::auto_ptr<te::da::DataSet>();
170 OGRDataSource* ds = m_ogrDs->getOGRDataSource();
173 std::string sql =
"SELECT FID, * FROM \'" + name +
"\'";
174 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
177 throw Exception(
TE_TR(
"The informed data set could not be found in the data source."));
181 layer->SetSpatialFilter(ogrg);
183 OGRGeometryFactory::destroyGeometry(ogrg);
185 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
193 if (!m_ogrDs->getOGRDataSource())
194 return std::auto_ptr<te::da::DataSet>();
196 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
200 SQLVisitor visitor(*m_ogrDs->getDialect(), sql);
206 OGRLayer* layer = ds->ExecuteSQL(sql.c_str(), 0, 0);
209 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
216 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
224 if (!m_ogrDs->getOGRDataSource())
225 return std::auto_ptr<te::da::DataSet>();
227 OGRDataSource* ds = OGRSFDriverRegistrar::Open(m_ogrDs->getOGRDataSource()->GetName());
230 std::string queryCopy = query;
231 std::size_t pos = queryCopy.find(
"*");
232 if(pos != std::string::npos)
234 std::string fid =
"FID, *";
235 queryCopy.replace(pos, 1, fid);
238 OGRLayer* layer = ds->ExecuteSQL(queryCopy.c_str(), 0, 0);
241 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
243 return std::auto_ptr<te::da::DataSet>(
new DataSet(ds, layer));
258 if (!m_ogrDs->getOGRDataSource())
261 OGRLayer* layer = m_ogrDs->getOGRDataSource()->ExecuteSQL(command.c_str(), 0,
"");
264 m_ogrDs->getOGRDataSource()->ReleaseResultSet(layer);
269 return std::auto_ptr<te::da::PreparedQuery>(0);
274 return std::auto_ptr<te::da::BatchExecutor>(0);
293 std::vector<std::string> names;
295 if (!m_ogrDs->getOGRDataSource())
298 for(
int i=0; i<m_ogrDs->getOGRDataSource()->GetLayerCount(); i++)
299 names.push_back(m_ogrDs->getOGRDataSource()->GetLayer(i)->GetName());
306 if (!m_ogrDs->getOGRDataSource())
309 return m_ogrDs->getOGRDataSource()->GetLayerCount();
314 if (!m_ogrDs->getOGRDataSource())
315 return std::auto_ptr<te::da::DataSetType>();
317 std::string sql(
"SELECT FID, * FROM \'");
320 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
323 return std::auto_ptr<te::da::DataSetType>();
325 std::auto_ptr<te::da::DataSetType> type(
Convert2TerraLib(l->GetLayerDefn()));
329 const char* colIdName = l->GetFIDColumn();
331 if(colIdName == 0 || colIdName[0] ==
'\0')
334 int pos = l->GetLayerDefn()->GetFieldIndex(colIdName);
338 pk->
add(type->getProperty(pos));
348 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
357 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str());
361 cap->setSupportAddColumn((l->TestCapability(OLCCreateField) == 0) ?
false :
true);
362 cap->setSupportRemoveColumn((l->TestCapability(OLCDeleteField) == 0) ?
false :
true);
363 cap->setSupportDataEdition((l->TestCapability(OLCRandomWrite) == 0) ?
false :
true);
371 boost::ptr_vector<te::dt::Property> ps;
373 if (!m_ogrDs->getOGRDataSource())
376 std::string sql(
"SELECT FID, * FROM \'");
377 sql += datasetName +
"\'";
379 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
384 std::auto_ptr<te::da::DataSetType> dt(
Convert2TerraLib(l->GetLayerDefn(),srs));
385 std::vector<te::dt::Property*> props = dt->getProperties();
386 std::vector<te::dt::Property*>::iterator it;
388 for(it=props.begin(); it!=props.end(); ++it)
389 ps.push_back((*it)->clone());
392 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
399 if (!m_ogrDs->getOGRDataSource())
400 return std::auto_ptr<te::dt::Property>();
403 std::string sql(
"SELECT FID, * FROM \'");
404 sql += datasetName +
"\'";
406 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
409 idx = l->GetLayerDefn()->GetFieldIndex(name.c_str());
411 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
413 return getProperty(datasetName, idx);
418 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
420 return std::auto_ptr<te::dt::Property>();
422 std::auto_ptr<te::dt::Property> res;
423 std::string sql (
"SELECT FID, * FROM \'");
424 sql += datasetName +
"\'";
426 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
430 OGRFeatureDefn* def = l->GetLayerDefn();
431 OGRFieldDefn* fdef = def->GetFieldDefn(propertyPos);
437 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
444 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
446 return std::vector<std::string>();
448 std::vector<std::string> res;
449 std::string sql (
"SELECT FID, * FROM \'");
450 sql += datasetName +
"\'";
452 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
456 OGRFeatureDefn* def = l->GetLayerDefn();
458 for(
int i=0; i<def->GetFieldCount(); i++)
459 res.push_back(def->GetFieldDefn(i)->GetNameRef());
462 ogrds->ReleaseResultSet(l);
469 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
473 std::string sql(
"SELECT FID, * FROM \'");
474 sql += datasetName +
"\'";
476 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
482 res = l->GetLayerDefn()->GetFieldCount();
483 ogrds->ReleaseResultSet(l);
491 OGRDataSource* ogrds = m_ogrDs->getOGRDataSource();
495 std::string sql(
"SELECT FID, * FROM \'");
496 sql += datasetName +
"\'";
499 OGRLayer* l = ogrds->ExecuteSQL(sql.c_str(), 0, 0);
503 res = (l->GetLayerDefn()->GetFieldIndex(name.c_str()) != -1);
504 ogrds->ReleaseResultSet(l);
512 if (!m_ogrDs->getOGRDataSource())
515 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
525 OGRErr error = l->CreateField(nField);
529 if(error != OGRERR_NONE)
530 throw Exception(
TE_TR(
"Error when attempting add the property: " + p->
getName() +
"."));
532 error = l->SyncToDisk();
534 if(error != OGRERR_NONE)
535 throw Exception(
TE_TR(
"Error saving changes on the file."));
542 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
546 if(!l->TestCapability(OLCDeleteField))
547 throw Exception(
TE_TR(
"This dataset do not support remove properties operation."));
549 int fPos = l->GetLayerDefn()->GetFieldIndex(name.c_str());
552 throw Exception(
TE_TR(
"Field not found."));
554 OGRErr error = l->DeleteField(fPos);
556 if(error != OGRERR_NONE)
557 throw Exception(
TE_TR(
"Error when attempting remove the property."));
559 error = l->SyncToDisk();
561 if(error != OGRERR_NONE)
562 throw Exception(
TE_TR(
"Error saving changes on the file."));
567 const std::string& propertyName,
568 const std::string& newPropertyName)
570 if (!m_ogrDs->getOGRDataSource())
573 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
577 int idx = l->GetLayerDefn()->GetFieldIndex(propertyName.c_str());
580 throw Exception(
TE_TR(
"Field to be renamed does not exists."));
582 OGRFieldDefn* df = l->GetLayerDefn()->GetFieldDefn(idx);
584 OGRFieldDefn* dfn =
new OGRFieldDefn(df);
586 dfn->SetName(newPropertyName.c_str());
588 OGRErr err = l->AlterFieldDefn(idx, dfn, ALTER_NAME_FLAG);
590 if(err != OGRERR_NONE)
591 throw Exception(
TE_TR(
"Fail to rename field."));
597 if (!m_ogrDs->getOGRDataSource())
600 std::auto_ptr<te::dt::Property> p;
604 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
608 if(!l->TestCapability(OLCAlterFieldDefn))
609 throw Exception(
TE_TR(
"This data source do not support the operation of alter columns type."));
611 int idx = l->GetLayerDefn()->GetFieldIndex(propName.c_str());
614 throw Exception(
TE_TR(
"Field to be renamed does not exists."));
616 OGRFieldDefn* dfn =
new OGRFieldDefn(l->GetLayerDefn()->GetFieldDefn(idx));
620 OGRErr err = l->AlterFieldDefn(idx, dfn, ALTER_TYPE_FLAG);
622 if(err != OGRERR_NONE)
623 throw Exception(
TE_TR(
"Fail to to change field type."));
625 std::string name = m_ogrDs->getOGRDataSource()->GetName();
627 err = l->SyncToDisk();
633 if (!m_ogrDs->getOGRDataSource())
634 return std::auto_ptr<te::da::PrimaryKey>();
636 std::auto_ptr<te::da::PrimaryKey> res;
637 std::string sql(
"SELECT FID, * FROM \'");
638 sql += datasetName +
"\'";
640 OGRLayer* layer = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
644 const char* colIdName = layer->GetFIDColumn();
646 if(colIdName == 0 || colIdName[0] ==
'\0')
649 int pos = layer->GetLayerDefn()->GetFieldIndex(colIdName);
654 res->add(getProperty(datasetName, pos).
get());
658 m_ogrDs->getOGRDataSource()->ReleaseResultSet(layer);
678 return std::auto_ptr<te::da::ForeignKey>();
683 return std::vector<std::string>();
701 return std::auto_ptr<te::da::UniqueKey>();
706 return std::vector<std::string>();
724 return std::auto_ptr<te::da::CheckConstraint>();
729 return std::vector<std::string>();
747 return std::auto_ptr<te::da::Index>();
752 return std::vector<std::string>();
761 const std::map<std::string, std::string>& )
771 return std::auto_ptr<te::da::Sequence>();
776 return std::vector<std::string>();
793 const std::string& propertyName)
795 if (!m_ogrDs->getOGRDataSource())
796 return std::auto_ptr<te::gm::Envelope>();
798 std::auto_ptr<te::gm::Envelope> res;
799 std::string sql(
"SELECT ");
800 sql += propertyName +
" FROM \'";
801 sql += datasetName +
"\'";
803 OGRLayer* l = m_ogrDs->getOGRDataSource()->ExecuteSQL(sql.c_str(), 0, 0);
807 std::auto_ptr<OGREnvelope> env(
new OGREnvelope);
809 if(l->GetExtent(env.get()) != OGRERR_NONE)
811 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
812 throw Exception(
TE_TR(
"Error when attempting get extent."));
817 m_ogrDs->getOGRDataSource()->ReleaseResultSet(l);
826 return getExtent(datasetName,
"OGR_GEOMETRY");
831 if (!m_ogrDs->getOGRDataSource())
834 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
837 return l->GetFeatureCount();
844 if (!m_ogrDs->getOGRDataSource())
847 return (m_ogrDs->getOGRDataSource()->GetLayerCount() > 0);
852 if (!m_ogrDs->getOGRDataSource())
855 return (m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str()) != 0);
860 if (!m_ogrDs->getOGRDataSource())
863 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCCreateLayer))
864 throw Exception(
TE_TR(
"This driver does not support dataset creation."));
866 OGRwkbGeometryType geomType = wkbUnknown;
867 OGRSpatialReference* srs = 0;
878 char** papszOptions = 0;
879 std::map<std::string, std::string>::const_iterator it = m_ogrDs->getConnectionInfo().begin();
880 while(it != m_ogrDs->getConnectionInfo().end())
882 if(it->first ==
"URI" || it->first ==
"SOURCE" || it->first ==
"DRIVER")
887 papszOptions = CSLSetNameValue(papszOptions, it->first.c_str(), it->second.c_str());
891 OGRLayer* newLayer = m_ogrDs->getOGRDataSource()->CreateLayer(dt->
getName().c_str(), srs, geomType, papszOptions);
894 CSLDestroy(papszOptions);
897 throw Exception(
TE_TR(
"Error when attempting create the dataset type."));
899 dt->
setName(newLayer->GetName());
902 for(
size_t i = 0; i < dt->
size(); ++i)
907 const std::string& cloneName,
908 const std::map<std::string, std::string>& )
910 if (!m_ogrDs->getOGRDataSource())
913 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCCreateLayer))
914 throw Exception(
TE_TR(
"This driver does not support creates a dataset."));
916 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(name.c_str());
919 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
921 OGRLayer* cl = m_ogrDs->getOGRDataSource()->CopyLayer(l, cloneName.c_str());
924 throw Exception(
TE_TR(
"Error when attempting clone the dataset."));
929 if (!m_ogrDs->getOGRDataSource())
932 if(!m_ogrDs->getOGRDataSource()->TestCapability(ODsCDeleteLayer))
933 throw Exception(
TE_TR(
"This driver does not support remove a dataset."));
937 for(; i<m_ogrDs->getOGRDataSource()->GetLayerCount(); i++)
938 if(name.compare(m_ogrDs->getOGRDataSource()->GetLayer(i)->GetName()) == 0)
941 if(i == m_ogrDs->getOGRDataSource()->GetLayerCount())
942 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
944 if(m_ogrDs->getOGRDataSource()->DeleteLayer(i) != OGRERR_NONE)
945 throw Exception(
TE_TR(
"Error when attempting to remove the dataset."));
954 const std::map<std::string, std::string>& options,
958 limit = std::string::npos;
960 if (!m_ogrDs->getOGRDataSource())
963 OGRLayer* layer = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
966 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
974 std::size_t nProcessedRows = 0;
976 while(d->
moveNext() && (nProcessedRows != limit))
978 OGRFeature* feat = OGRFeature::CreateFeature(layer->GetLayerDefn());
980 std::size_t currfield = 0;
982 for(std::size_t i = 0; i != nproperties; ++i)
995 feat->SetField(currfield, d->
getInt16(i));
1000 feat->SetField(currfield, d->
getInt32(i));
1005 feat->SetField(currfield, d->
getAsString(i).c_str());
1010 feat->SetField(currfield, d->
getDouble(i));
1015 feat->SetField(currfield, atof(d->
getNumeric(i).c_str()));
1021 std::auto_ptr<te::dt::ByteArray> ba(d->
getByteArray(i));
1022 feat->SetField(currfield, ba->bytesUsed(),
reinterpret_cast<unsigned char*
>(ba->getData()));
1029 std::auto_ptr<te::dt::DateTime> dtm(d->
getDateTime(i));
1035 feat->SetField(currfield,
1036 static_cast<int>(dtime->getYear()),
1037 static_cast<int>(dtime->getMonth()),
1038 static_cast<int>(dtime->getDay()));
1047 feat->SetField(currfield, 0, 0, 0,
1048 static_cast<int>(tduration->
getHours()),
1059 feat->SetField(currfield,
1060 static_cast<int>(dtime->getYear()),
1061 static_cast<int>(dtime->getMonth()),
1062 static_cast<int>(dtime->getDay()),
1063 static_cast<int>(tduration->
getHours()),
1070 throw Exception (
TE_TR(
"Unsupported date and time type by OGR."));
1076 std::auto_ptr<te::gm::Geometry> geom(d->
getGeometry(i));
1078 feat->SetGeometryDirectly(OGRgeom);
1083 throw Exception(
TE_TR(
"Unsupported data type by OGR."));
1087 if(layer->CreateFeature(feat) != OGRERR_NONE)
1089 OGRFeature::DestroyFeature(feat);
1090 throw Exception(
TE_TR(
"Fail to insert dataset item."));
1093 OGRFeature::DestroyFeature(feat);
1108 if(!m_ogrDs->getOGRDataSource())
1111 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
1114 throw Exception(
TE_TR(
"Could not retrieve the DataSet from data source."));
1116 if(!l->TestCapability(OLCDeleteFeature))
1117 throw Exception(
TE_TR(
"Driver does not support removal of features."));
1119 std::set<te::da::ObjectId*, te::common::LessCmp<te::da::ObjectId*> >::const_iterator it = oids->
begin();
1121 while(it != oids->
end())
1125 if(l->DeleteFeature(atoi((*it)->getValue()[0].toString().c_str())) != OGRERR_NONE)
1128 throw Exception(
TE_TR(
"Error when attempting to remove the feature."));
1140 const std::vector<std::size_t>& properties,
1142 const std::map<std::string, std::string>& ,
1148 const std::vector<size_t>& ids)
1150 if(m_ogrDs->getOGRDataSource() == 0)
1151 throw Exception(
TE_TR(
"Data source failure"));
1153 OGRLayer* l = m_ogrDs->getOGRDataSource()->GetLayerByName(datasetName.c_str());
1156 throw Exception(
TE_TR(
"Could not retrieve dataset"));
1163 size_t id_pos = ids[0];
1164 int id = dataset->
getInt32(id_pos);
1166 OGRFeature* feat = l->GetFeature(
id)->Clone();
1168 std::set<int> ls = properties[i];
1169 std::set<int>::iterator it;
1171 for(it = ls.begin(); it != ls.end(); ++it)
1174 int fpos_o = fpos - 1;
1179 feat->SetField(fpos_o, dataset->
getInt32(fpos));
1184 feat->SetField(fpos_o, dataset->
getDouble(fpos));
1188 feat->SetField(fpos_o, dataset->
getString(fpos).c_str());
1193 std::auto_ptr<te::gm::Geometry> gm = dataset->
getGeometry(fpos);
1199 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.
TEOGREXPORT OGRSpatialReference * Convert2OGRProjection(int srid)
It converts the TerraLib Projection to OGR Projection.
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.