27 #include "../../../common/STLUtils.h" 
   28 #include "../../../dataaccess/dataset/DataSet.h" 
   29 #include "../../../dataaccess/dataset/DataSetType.h" 
   30 #include "../../../dataaccess/dataset/ObjectIdSet.h" 
   31 #include "../../../dataaccess/datasource/DataSourceCatalog.h" 
   32 #include "../../../dataaccess/query/BinaryFunction.h" 
   33 #include "../../../dataaccess/query/DataSetName.h" 
   34 #include "../../../dataaccess/query/Distinct.h" 
   35 #include "../../../dataaccess/query/Field.h" 
   36 #include "../../../dataaccess/query/Fields.h" 
   37 #include "../../../dataaccess/query/From.h" 
   38 #include "../../../dataaccess/query/LiteralDouble.h" 
   39 #include "../../../dataaccess/query/LiteralGeom.h" 
   40 #include "../../../dataaccess/query/LiteralInt16.h" 
   41 #include "../../../dataaccess/query/LiteralInt32.h" 
   42 #include "../../../dataaccess/query/LiteralString.h" 
   43 #include "../../../dataaccess/query/OrderByItem.h" 
   44 #include "../../../dataaccess/query/PropertyName.h" 
   45 #include "../../../dataaccess/query/Select.h" 
   46 #include "../../../dataaccess/query/SQLVisitor.h" 
   47 #include "../../../dataaccess/utils/Utils.h" 
   48 #include "../../../geometry/Geometry.h" 
   49 #include "../../../geometry/GeometryCollection.h" 
   50 #include "../../../geometry/GeometryProperty.h" 
   51 #include "ui_WhereClauseWidgetForm.h" 
   56 #include <QMessageBox> 
   57 #include <QToolButton> 
   64     m_ui(new Ui::WhereClauseWidgetForm)
 
   71   m_ui->m_addWhereClausePushButton->setIcon(QIcon::fromTheme(
"list-add"));
 
   72   m_ui->m_clearAllPushButton->setIcon(QIcon::fromTheme(
"edit-clear"));
 
   80   m_ui->m_sqlTextEdit->setReadOnly(
true);
 
   98   int row = m_ui->m_whereClauseTableWidget->rowCount();
 
  104   std::string lastConnectorName = 
"";
 
  106   for(
int i = 0; i < row; ++i)
 
  109     std::string propName = 
"";
 
  110     QTableWidgetItem* itemPropName = m_ui->m_whereClauseTableWidget->item(i, 1);
 
  112       propName = itemPropName->text().toStdString();
 
  115       QWidget* w = m_ui->m_whereClauseTableWidget->cellWidget(i, 1);
 
  116       QComboBox* cmbBox = 
dynamic_cast<QComboBox*
>(w);
 
  118         propName = cmbBox->currentText().toStdString();
 
  121     std::string funcName = 
"";
 
  122     QTableWidgetItem* itemFuncName = m_ui->m_whereClauseTableWidget->item(i, 2);
 
  124       funcName = itemFuncName->text().toStdString();
 
  127       QWidget* w = m_ui->m_whereClauseTableWidget->cellWidget(i, 2);
 
  128       QComboBox* cmbBox = 
dynamic_cast<QComboBox*
>(w);
 
  130         funcName = cmbBox->currentText().toStdString();
 
  134     QTableWidgetItem* itemValue = m_ui->m_whereClauseTableWidget->item(i, 3);
 
  137       expIdx = itemValue->data(Qt::UserRole).toInt();
 
  141       QWidget* w = m_ui->m_whereClauseTableWidget->cellWidget(i, 3);
 
  142       QComboBox* cmbBox = 
dynamic_cast<QComboBox*
>(w);
 
  144         expIdx = m_comboMap[cmbBox].first;
 
  156     if(leftSide != 0 && lastConnectorName.empty() == 
false)
 
  159       leftSide = connectFunc;
 
  167     QTableWidgetItem* itemConnectorName = m_ui->m_whereClauseTableWidget->item(i, 4);
 
  168     if(itemConnectorName)
 
  170       if(itemPropName->text().isEmpty() == 
false)
 
  171         lastConnectorName = itemConnectorName->text().toStdString();
 
  173         lastConnectorName = 
"";
 
  177       QWidget* w = m_ui->m_whereClauseTableWidget->cellWidget(i, 4);
 
  178       QComboBox* cmbBox = 
dynamic_cast<QComboBox*
>(w);
 
  180         lastConnectorName = cmbBox->currentText().toStdString();
 
  191   std::string sql = 
"";
 
  223   m_ui->m_layerComboBox->clear();
 
  225   std::list<te::map::AbstractLayerPtr>::iterator it = layerList.begin();
 
  227   while(it != layerList.end())
 
  231     std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
 
  235       if(dsType->hasGeom())
 
  236         m_ui->m_layerComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
 
  249   m_ui->m_restrictValueComboBox->clear();
 
  250   m_ui->m_valuePropertyComboBox->clear();
 
  252   for(
size_t t = 0; t <vec.size(); ++t)
 
  254     m_ui->m_restrictValueComboBox->addItem(vec[t].c_str());
 
  255     m_ui->m_valuePropertyComboBox->addItem(vec[t].c_str());
 
  263   m_ui->m_geomAttrComboBox->clear();
 
  265   for(
size_t t = 0; t <vec.size(); ++t)
 
  267     m_ui->m_geomAttrComboBox->addItem(vec[t].c_str());
 
  273   m_ui->m_OperatorComboBox->clear();
 
  275   for(
size_t t = 0; t <vec.size(); ++t)
 
  277     m_ui->m_OperatorComboBox->addItem(vec[t].c_str());
 
  283   m_ui->m_SpatialOperatorComboBox->clear();
 
  285   for(
size_t t = 0; t <vec.size(); ++t)
 
  287     m_ui->m_SpatialOperatorComboBox->addItem(vec[t].c_str());
 
  293   m_connectorsList.clear();
 
  295   m_connectorsList.append(
"");
 
  297   for(
size_t t = 0; t <vec.size(); ++t)
 
  299     m_connectorsList.append(vec[t].c_str());
 
  311   m_ui->m_whereClauseTableWidget->setRowCount(0);
 
  323   m_ui->m_restrictValueComboBox->clear();
 
  324   m_ui->m_valuePropertyComboBox->clear();
 
  325   m_ui->m_valueValueComboBox->clear();
 
  326   m_ui->m_geomAttrComboBox->clear();
 
  327   m_ui->m_OperatorComboBox->clear();
 
  328   m_ui->m_SpatialOperatorComboBox->clear();
 
  329   m_ui->m_sqlTextEdit->clear();
 
  330   m_ui->m_tabWidget->setCurrentIndex(0);
 
  335   std::string restrictValue = 
"";
 
  336   std::string operatorStr = 
"";
 
  337   std::string valueStr = 
"";
 
  339   setCursor(Qt::WaitCursor);
 
  341   if(m_ui->m_criteriaTabWidget->currentIndex() == 0) 
 
  343     int expId = ++m_count;
 
  345     if(m_ui->m_restrictValueComboBox->currentText().isEmpty())
 
  347       setCursor(Qt::ArrowCursor);
 
  348       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Restrict value not defined."));
 
  352     if(m_ui->m_valuePropertyRadioButton->isChecked() == 
false &&
 
  353        m_ui->m_valueValueRadioButton->isChecked() == 
false)
 
  355        if(m_ui->m_valueValueComboBox->currentText().isEmpty())
 
  357         setCursor(Qt::ArrowCursor);
 
  358         QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Value not defined."));
 
  363     if(m_ui->m_valueValueRadioButton->isChecked())
 
  365       if(m_ui->m_valueValueComboBox->currentText().isEmpty())
 
  367         setCursor(Qt::ArrowCursor);
 
  368         QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Value not defined."));
 
  373     restrictValue = m_ui->m_restrictValueComboBox->currentText().toStdString();
 
  375     if(m_ui->m_OperatorComboBox->currentText().isEmpty())
 
  377       setCursor(Qt::ArrowCursor);
 
  378       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Operator not defined."));
 
  381     operatorStr = m_ui->m_OperatorComboBox->currentText().toStdString();
 
  388     if(m_ui->m_valuePropertyRadioButton->isChecked())
 
  390       valueStr = m_ui->m_valuePropertyComboBox->currentText().toStdString();
 
  398       m_mapExp.insert(std::map<int, ExpressionProperty*>::value_type(expId, ep));
 
  400     else if(m_ui->m_valueValueRadioButton->isChecked())
 
  402       valueStr = m_ui->m_valueValueComboBox->currentText().toStdString();
 
  404       te::da::Expression* exp = getExpression(m_ui->m_valueValueComboBox->currentText(), restrictValue);
 
  410       m_mapExp.insert(std::map<int, ExpressionProperty*>::value_type(expId, ep));
 
  413     std::string connector = tr(
"and").toStdString();
 
  416     int newrow = m_ui->m_whereClauseTableWidget->rowCount();
 
  418     m_ui->m_whereClauseTableWidget->insertRow(newrow);
 
  421     QToolButton* removeBtn = 
new QToolButton(m_ui->m_whereClauseTableWidget);
 
  422     removeBtn->setIcon(QIcon::fromTheme(
"list-remove"));
 
  423     connect(removeBtn, SIGNAL(clicked()), 
this, SLOT(onRemoveWhereClausePushButtonClicked()));
 
  424     m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 0, removeBtn);
 
  427     QComboBox* cmbProperty = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  428     connect(cmbProperty, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  429     std::pair<int, int> pairProperty(expId, 1);
 
  430     m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(cmbProperty, pairProperty));
 
  431     copyCombo(m_ui->m_restrictValueComboBox, cmbProperty, restrictValue);
 
  432     m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 1, cmbProperty);
 
  435     QComboBox* cmbOperator = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  436     connect(cmbOperator, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  437     std::pair<int, int> pairOperator(expId, 2);
 
  438     m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(cmbOperator, pairOperator));
 
  439     copyCombo(m_ui->m_OperatorComboBox, cmbOperator, operatorStr);
 
  440     m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 2, cmbOperator);
 
  443     QComboBox* cmbValue = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  444     connect(cmbValue, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  445     connect(cmbValue, SIGNAL(editTextChanged(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  446     std::pair<int, int> pairValue(expId, 3);
 
  447     m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(cmbValue, pairValue));
 
  448     if(m_ui->m_valuePropertyRadioButton->isChecked())
 
  449       copyCombo(m_ui->m_valuePropertyComboBox, cmbValue, valueStr);
 
  452       cmbValue->setEditable(
true);
 
  453       copyCombo(m_ui->m_valueValueComboBox, cmbValue, valueStr);
 
  455     m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 3, cmbValue);
 
  466     QComboBox* connectorCmbBox = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  467     connect(connectorCmbBox, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  468     std::pair<int, int> pairConnector(expId, 4);
 
  469     m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(connectorCmbBox, pairConnector));
 
  470     connectorCmbBox->addItems(m_connectorsList);
 
  471     m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 4, connectorCmbBox);
 
  473     for(
int i = 0; i < connectorCmbBox->count(); ++i)
 
  475       if(connectorCmbBox->itemText(i).toStdString() == connector)
 
  477         connectorCmbBox->setCurrentIndex(i);
 
  484     if(m_ui->m_SpatialOperatorComboBox->currentText().isEmpty())
 
  486       setCursor(Qt::ArrowCursor);
 
  487       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Operator not defined."));
 
  490     operatorStr = m_ui->m_SpatialOperatorComboBox->currentText().toStdString();
 
  492     restrictValue = m_ui->m_geomAttrComboBox->currentText().toStdString();
 
  495     int layerIdx = m_ui->m_layerComboBox->currentIndex();
 
  496     QVariant varLayer = m_ui->m_layerComboBox->itemData(layerIdx, Qt::UserRole);
 
  499     std::auto_ptr<const te::map::LayerSchema> schema(layer->getSchema());
 
  505       setCursor(Qt::ArrowCursor);
 
  506       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Selected layer has no geometry property."));
 
  510     std::auto_ptr<te::da::DataSet> ds;
 
  512     if(m_ui->m_selectedObjCheckBox->isChecked())
 
  516       if(!selecteds || selecteds->
size() == 0)
 
  518         setCursor(Qt::ArrowCursor);
 
  519         QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Selected layer has no selected geometries."));
 
  523       ds = layer->getData(selecteds);
 
  527       ds = layer->getData();
 
  530     ds->moveBeforeFirst();
 
  532     size_t dsSize = ds->size();
 
  536     while(ds->moveNext())
 
  539       int expId = ++m_count;
 
  543       geom->
setSRID(layer->getSRID());
 
  546       if(layer->getSRID() != m_srid)
 
  552       valueStr = tr(
"Geometry Value").toStdString();
 
  564       m_mapExp.insert(std::map<int, ExpressionProperty*>::value_type(expId, ep));
 
  567       std::string connector = 
"";
 
  569       if(count < dsSize - 1)
 
  570         connector = tr(
"or").toStdString();
 
  575       int newrow = m_ui->m_whereClauseTableWidget->rowCount();
 
  577       m_ui->m_whereClauseTableWidget->insertRow(newrow);
 
  580       QToolButton* removeBtn = 
new QToolButton(m_ui->m_whereClauseTableWidget);
 
  581       removeBtn->setIcon(QIcon::fromTheme(
"list-remove"));
 
  582       connect(removeBtn, SIGNAL(clicked()), 
this, SLOT(onRemoveWhereClausePushButtonClicked()));
 
  583       m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 0, removeBtn);
 
  586       QComboBox* cmbProperty = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  587       connect(cmbProperty, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  588       std::pair<int, int> pairProperty(expId, 1);
 
  589       m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(cmbProperty, pairProperty));
 
  590       copyCombo(m_ui->m_geomAttrComboBox, cmbProperty, restrictValue);
 
  591       m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 1, cmbProperty);
 
  594       QComboBox* cmbOperator = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  595       connect(cmbOperator, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  596       std::pair<int, int> pairOperator(expId, 2);
 
  597       m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(cmbOperator, pairOperator));
 
  598       copyCombo(m_ui->m_SpatialOperatorComboBox, cmbOperator, operatorStr);
 
  599       m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 2, cmbOperator);
 
  602       QTableWidgetItem* itemValue = 
new QTableWidgetItem(valueStr.c_str());
 
  603       itemValue->setData(Qt::UserRole, QVariant(expId));
 
  604       m_ui->m_whereClauseTableWidget->setItem(newrow, 3, itemValue);
 
  607       QComboBox* connectorCmbBox = 
new QComboBox(m_ui->m_whereClauseTableWidget);
 
  608       connect(connectorCmbBox, SIGNAL(activated(QString)), 
this, SLOT(onComboBoxActivated(QString)));
 
  609       std::pair<int, int> pairConnector(expId, 4);
 
  610       m_comboMap.insert(std::map< QComboBox*, std::pair<int, int> >::value_type(connectorCmbBox, pairConnector));
 
  611       connectorCmbBox->addItems(m_connectorsList);
 
  612       m_ui->m_whereClauseTableWidget->setCellWidget(newrow, 4, connectorCmbBox);
 
  614       for(
int i = 0; i < connectorCmbBox->count(); ++i)
 
  616         if(connectorCmbBox->itemText(i).toStdString() == connector)
 
  618           connectorCmbBox->setCurrentIndex(i);
 
  625   m_ui->m_whereClauseTableWidget->resizeColumnsToContents();
 
  628   std::string sql = getWhereString();
 
  630   m_ui->m_sqlTextEdit->setText(sql.c_str());
 
  632   setCursor(Qt::ArrowCursor);
 
  637   QToolButton* button = 
dynamic_cast<QToolButton*
>(sender());
 
  642     for(
int i = 0; i < m_ui->m_whereClauseTableWidget->rowCount(); ++i)
 
  644       QWidget* w = m_ui->m_whereClauseTableWidget->cellWidget(i, 0);
 
  653       m_ui->m_whereClauseTableWidget->removeRow(row);
 
  655     m_ui->m_whereClauseTableWidget->resizeColumnsToContents();
 
  659   std::string sql = getWhereString();
 
  661   m_ui->m_sqlTextEdit->setText(sql.c_str());
 
  666   std::string propertyName = m_ui->m_restrictValueComboBox->currentText().toStdString();
 
  668   m_ui->m_valueValueComboBox->clear();
 
  669   m_ui->m_valueValueComboBox->addItems(getPropertyValues(propertyName));
 
  674   m_ui->m_whereClauseTableWidget->setRowCount(0);
 
  675   m_ui->m_whereClauseTableWidget->resizeColumnsToContents();
 
  678   std::string sql = getWhereString();
 
  680   m_ui->m_sqlTextEdit->setText(sql.c_str());
 
  685   if(value.isEmpty() || !m_ui->m_valueValueRadioButton->isChecked())
 
  688   onValuePropertyRadioButtonClicked();
 
  693   QComboBox* cmbBox = 
dynamic_cast<QComboBox*
>(sender());
 
  697   int expId = m_comboMap[cmbBox].first;
 
  698   int column = m_comboMap[cmbBox].second;
 
  725       ep->
m_value = value.toStdString();
 
  747   std::string sql = getWhereString();
 
  749   m_ui->m_sqlTextEdit->setText(sql.c_str());
 
  754   std::string dataSetName;
 
  755   std::string dataSetAliasName;
 
  756   std::string propertyName = propName;
 
  758   std::size_t pos = propName.find(
".");
 
  759   if(pos != std::string::npos)
 
  761     dataSetAliasName = propName.substr(0, pos);
 
  762     propertyName = propName.substr(pos + 1, propName.size() - 1);
 
  766   if(m_fromItems.size() == 1)
 
  768     dataSetName = m_fromItems[0].first;
 
  772     for(
size_t t = 0; t < m_fromItems.size(); ++t)
 
  774       if(m_fromItems[t].second == dataSetAliasName)
 
  776         dataSetName = m_fromItems[t].first;
 
  782   if(dataSetName.empty())
 
  786   std::auto_ptr<te::da::DataSetType> dsType = m_ds->getDataSetType(dataSetName);
 
  824   for(
int i = 0; i < input->count(); ++i)
 
  826     output->addItem(input->itemText(i));
 
  828     if(!curValue.empty() && input->itemText(i).toStdString() == curValue)
 
  832   output->setCurrentIndex(idx);
 
  844   fields->push_back(f);
 
  848   for(
size_t t = 0; t < m_fromItems.size(); ++t)
 
  860   std::auto_ptr<te::da::DataSet> dataset;
 
  864     dataset = m_ds->query(*select);
 
  866   catch(
const std::exception& e)
 
  868     std::string msg =  
"An exception has occurred: ";
 
  871     QMessageBox::warning(0, 
"Query Error: ", msg.c_str());
 
  877     std::string msg =  
"An unexpected exception has occurred!";
 
  879     QMessageBox::warning(0, 
"Query Error: ", msg.c_str());
 
  884   std::size_t pos = propertyName.find(
".");
 
  885   if(pos != std::string::npos)
 
  887     std::string dataSetAliasName = propertyName.substr(0, pos);
 
  888     propertyName = propertyName.substr(pos + 1, propertyName.size() - 1);
 
  891   std::set<std::string> valuesStr;
 
  892   std::set<double> valuesDouble;
 
  893   std::set<int> valuesInt;
 
  896   std::size_t propertyPos;
 
  897   for(std::size_t t = 0; t < dataset->getNumProperties(); ++t)
 
  899     if(dataset->getPropertyName(t) == propertyName)
 
  912   int propertyType = dataset->getPropertyDataType(propertyPos);
 
  916     while(dataset->moveNext())
 
  918       if(!dataset->isNull(propertyName))
 
  922           int value = dataset->getInt32(propertyName);
 
  924           std::set<int>::iterator it = valuesInt.find(value);
 
  926           if(it == valuesInt.end())
 
  927             valuesInt.insert(value);
 
  931           double value = dataset->getDouble(propertyName);
 
  933           std::set<double>::iterator it = valuesDouble.find(value);
 
  935           if(it == valuesDouble.end())
 
  936             valuesDouble.insert(value);
 
  940           std::string value = dataset->getAsString(propertyName);
 
  942           std::set<std::string>::iterator it = valuesStr.find(value);
 
  944           if(it == valuesStr.end())
 
  945             valuesStr.insert(value);
 
  953     std::set<int>::iterator it = valuesInt.begin();
 
  955     while(it != valuesInt.end())
 
  957       list.append(QString::number(*it));
 
  964     std::set<double>::iterator it = valuesDouble.begin();
 
  966     while(it != valuesDouble.end())
 
  968       list.append(QString::number(*it, 
'f', 5));
 
  975     std::set<std::string>::iterator it = valuesStr.begin();
 
  977     while(it != valuesStr.end())
 
  979       list.append((*it).c_str());
 
An abstract class that models a source of data in a query. 
 
The Field class can be used to model an expression that takes part of the output items of a SELECT...
 
A class that models the name of a dataset used in a From clause. 
 
boost::shared_ptr< DataSource > DataSourcePtr
 
A class that models the name of any property of an object. 
 
virtual void transform(int srid)=0
It converts the coordinate values of the geometry to the new spatial reference system. 
 
It models a property definition. 
 
This is an abstract class that models a query expression. 
 
This class models a literal value. 
 
This class represents a set of unique ids created in the same context. i.e. from the same data set...
 
std::size_t size() const 
It returns the object id set size. 
 
boost::ptr_vector< Field > Fields
Fields is just a boost::ptr_vector of Field pointers. 
 
A class that can be used to model a filter expression that can be applied to a query. 
 
Expression * getExp() const 
 
A class that models a literal for double values. 
 
Geometry is the root class of the geometries hierarchy, it follows OGC and ISO standards. 
 
A Select models a query to be used when retrieving data from a DataSource. 
 
boost::ptr_vector< FromItem > From
It models the FROM clause for a query. 
 
int getType() const 
It returns the property data type. 
 
virtual ReturnType accept(VisitorType &guest) const =0
It call the visit method from the guest object. 
 
A visitor for building an SQL statement from a given Query hierarchy. 
 
virtual Expression * clone() const =0
It creates a new copy of this expression. 
 
TEDATAACCESSEXPORT te::gm::GeometryProperty * GetFirstGeomProperty(const DataSetType *dt)
 
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
 
void FreeContents(boost::unordered_map< K, V * > &m)
This function can be applied to a map of pointers. It will delete each pointer in the map...
 
A base class for binary functions. 
 
void setFields(Fields *f)
It sets the list of output expressions used to form the result set. 
 
virtual void setSRID(int srid)=0
It sets the Spatial Reference System ID of the geometry and all its parts if it is a GeometryCollecti...
 
A class that models a literal for Geometry values. 
 
void setFrom(From *f)
It sets the list of source information. 
 
This class models a string Literal value.