@@ -678,23 +678,26 @@ bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
678
678
return true ;
679
679
}
680
680
681
- QString QgsPostgresProvider::pkParamWhereClause ( int offset ) const
681
+ QString QgsPostgresProvider::pkParamWhereClause ( int offset, const char *alias ) const
682
682
{
683
683
QString whereClause;
684
684
685
+ QString aliased;
686
+ if ( alias ) aliased = QString (" %1." ).arg ( alias );
687
+
685
688
switch ( mPrimaryKeyType )
686
689
{
687
690
case pktTid:
688
- whereClause = QString ( " ctid =$%1" ).arg ( offset );
691
+ whereClause = QString ( " %2ctid =$%1" ).arg ( offset ). arg ( aliased );
689
692
break ;
690
693
691
694
case pktOid:
692
- whereClause = QString ( " oid =$%1" ).arg ( offset );
695
+ whereClause = QString ( " %2oid =$%1" ).arg ( offset ). arg ( aliased );
693
696
break ;
694
697
695
698
case pktInt:
696
699
Q_ASSERT ( mPrimaryKeyAttrs .size () == 1 );
697
- whereClause = QString ( " %1=$%2" ).arg ( quotedIdentifier ( field ( mPrimaryKeyAttrs [0 ] ).name () ) ).arg ( offset );
700
+ whereClause = QString ( " %3% 1=$%2" ).arg ( quotedIdentifier ( field ( mPrimaryKeyAttrs [0 ] ).name () ) ).arg ( offset ). arg ( aliased );
698
701
break ;
699
702
700
703
case pktFidMap:
@@ -705,7 +708,7 @@ QString QgsPostgresProvider::pkParamWhereClause( int offset ) const
705
708
int idx = mPrimaryKeyAttrs [i];
706
709
const QgsField &fld = field ( idx );
707
710
708
- whereClause += delim + QString ( " %1=$%2" ).arg ( mConnectionRO ->fieldExpression ( fld ) ).arg ( offset++ );
711
+ whereClause += delim + QString ( " %3% 1=$%2" ).arg ( mConnectionRO ->fieldExpression ( fld ) ).arg ( offset++ ). arg ( aliased );
709
712
delim = " AND " ;
710
713
}
711
714
}
@@ -2404,13 +2407,13 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
2404
2407
// Later, we'll replace the old TopoGeometry with the new one,
2405
2408
// to avoid orphans and retain higher level in an eventual
2406
2409
// hierarchical definition
2407
- update = QString ( " UPDATE %1 SET %2= toTopoGeom(%3,t.name,layer_id(%2))"
2410
+ update = QString ( " UPDATE %1 o SET %2 = toTopoGeom(%3, t.name, layer_id(%2))"
2408
2411
" FROM topology.topology t WHERE t.id = topology_id(%2)"
2409
2412
" AND %4 RETURNING layer_id(%2), id(%2), t.name" )
2410
2413
.arg ( mQuery )
2411
2414
.arg ( quotedIdentifier ( mGeometryColumn ) )
2412
2415
.arg ( geomParam ( 1 ) )
2413
- .arg ( pkParamWhereClause ( 2 ) );
2416
+ .arg ( pkParamWhereClause ( 2 , " o " ) );
2414
2417
2415
2418
QString getid = QString ( " SELECT id(%1) FROM %2 WHERE %3" )
2416
2419
.arg ( quotedIdentifier ( mGeometryColumn ) )
@@ -2433,6 +2436,7 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
2433
2436
.arg ( mQuery )
2434
2437
.arg ( quotedIdentifier ( mGeometryColumn ) )
2435
2438
.arg ( pkParamWhereClause ( 2 ) );
2439
+ QgsDebugMsg ( " TopoGeom swap: " + replace );
2436
2440
result = mConnectionRW ->PQprepare ( " replacetopogeom" , replace, 2 , NULL );
2437
2441
if ( result.PQresultStatus () != PGRES_COMMAND_OK )
2438
2442
{
@@ -2546,13 +2550,15 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
2546
2550
params << QString::number ( old_tg_id );
2547
2551
appendPkParams ( iter.key (), params );
2548
2552
QgsDebugMsg ( " Replacing topogeom reference to use id " + QString::number ( old_tg_id ) );
2553
+ QgsDebugMsg ( " Params are: " + params.join (" ," ));
2549
2554
result = mConnectionRW ->PQexecPrepared ( " replacetopogeom" , params );
2550
2555
if ( result.PQresultStatus () != PGRES_COMMAND_OK )
2551
2556
{
2552
2557
QgsDebugMsg ( QString ( " Exception thrown due to PQexecPrepared of 'replacetopogeom' returning != PGRES_COMMAND_OK (%1 != expected %2)" )
2553
2558
.arg ( result.PQresultStatus () ).arg ( PGRES_COMMAND_OK ) );
2554
2559
throw PGException ( result );
2555
2560
}
2561
+ QgsDebugMsg ( QString ( " TopoGeom swap affected " + QString::number (result.PQntuples ())) );
2556
2562
} // if TopoGeometry
2557
2563
2558
2564
} // for each feature
0 commit comments