void SaSourceSelect::setSql( const QModelIndex &index ) { if ( !index.parent().isValid() ) { SaDebugMsg( "schema item found" ); return; } QgsVectorLayer *vlayer = new QgsVectorLayer( layerURI( mProxyModel.mapToSource( index ) ), "querybuilder", "sqlanywhere" ); if ( !vlayer->isValid() ) { delete vlayer; return; } // create a query builder object QgsQueryBuilder *qb = new QgsQueryBuilder( vlayer, this ); if ( qb->exec() ) { mTableModel.setSql( mProxyModel.mapToSource( index ), qb->sql() ); } delete qb; delete vlayer; }
void QgsVectorLayerProperties::on_pbnQueryBuilder_clicked() { // launch the query builder QgsQueryBuilder *qb = new QgsQueryBuilder( layer, this ); // Set the sql in the query builder to the same in the prop dialog // (in case the user has already changed it) qb->setSql( txtSubsetSQL->toPlainText() ); // Open the query builder if ( qb->exec() ) { // if the sql is changed, update it in the prop subset text box txtSubsetSQL->setText( qb->sql() ); //TODO If the sql is changed in the prop dialog, the layer extent should be recalculated // The datasource for the layer needs to be updated with the new sql since this gets // saved to the project file. This should happen at the map layer level... } // delete the query builder object delete qb; }
void QgsSpatiaLiteSourceSelect::setSql( const QModelIndex &index ) { QModelIndex idx = mProxyModel.mapToSource( index ); QString tableName = mTableModel.itemFromIndex( idx.sibling( idx.row(), 0 ) )->text(); QgsVectorLayer *vlayer = new QgsVectorLayer( layerURI( idx ), tableName, "spatialite" ); if ( !vlayer->isValid() ) { delete vlayer; return; } // create a query builder object QgsQueryBuilder *gb = new QgsQueryBuilder( vlayer, this ); if ( gb->exec() ) { mTableModel.setSql( mProxyModel.mapToSource( index ), gb->sql() ); } delete gb; delete vlayer; }