Skip to content

Commit c2cb3b8

Browse files
committed
postgres provider fixes
1 parent af7af6e commit c2cb3b8

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

src/providers/postgres/qgspostgresprovider.cpp

100755100644
+22-10
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
538538
{
539539
qBox = QString( "setsrid('BOX3D(%1)'::box3d,%2)" )
540540
.arg( rect.asWktCoordinates() )
541-
.arg( mDetectedSrid );
541+
.arg( mRequestedSrid );
542542
}
543543
else
544544
{
@@ -547,7 +547,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
547547
.arg( rect.yMinimum() )
548548
.arg( rect.xMaximum() )
549549
.arg( rect.yMaximum() )
550-
.arg( mDetectedSrid );
550+
.arg( mRequestedSrid );
551551
}
552552

553553
whereClause = QString( "%1 && %2" )
@@ -562,7 +562,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
562562
}
563563
}
564564

565-
if ( !mRequestedSrid.isEmpty() && mRequestedSrid != mDetectedSrid )
565+
if ( mRequestedSrid != mDetectedSrid )
566566
{
567567
whereClause += QString( " AND %1(%2)=%3" )
568568
.arg( mConnectionRO->majorVersion() < 2 ? "srid" : "st_srid" )
@@ -731,10 +731,13 @@ void QgsPostgresProvider::appendPkParams( QgsFeatureId featureId, QStringList &p
731731
{
732732
switch ( mPrimaryKeyType )
733733
{
734-
case pktTid:
735734
case pktOid:
736735
case pktInt:
737-
params << quotedValue( QString::number( featureId ) );
736+
params << QString::number( featureId );
737+
break;
738+
739+
case pktTid:
740+
params << QString( "'(%1,%2)'" ).arg( FID_TO_NUMBER( featureId ) >> 16 ).arg( FID_TO_NUMBER( featureId ) & 0xffff );
738741
break;
739742

740743
case pktFidMap:
@@ -1816,7 +1819,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
18161819
.arg( mConnectionRO->majorVersion() < 2 ? "geomfromwkb" : "st_geomfromwkb" )
18171820
.arg( offset++ )
18181821
.arg( mConnectionRW->useWkbHex() ? "" : "::bytea" )
1819-
.arg( mDetectedSrid );
1822+
.arg( mRequestedSrid );
18201823
delim = ",";
18211824
}
18221825

@@ -1953,15 +1956,19 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
19531956
QString v;
19541957
if ( attr == attributevec.end() )
19551958
{
1959+
const QgsField &fld = field( fieldId[i] );
19561960
v = paramValue( defaultValues[i], defaultValues[i] );
1957-
features->addAttribute( fieldId[i], v );
1961+
features->addAttribute( fieldId[i], convertValue( fld.type(), v ) );
19581962
}
19591963
else
19601964
{
19611965
v = paramValue( attr.value().toString(), defaultValues[i] );
19621966

19631967
if ( v != attr.value().toString() )
1964-
features->changeAttribute( fieldId[i], v );
1968+
{
1969+
const QgsField &fld = field( fieldId[i] );
1970+
features->changeAttribute( fieldId[i], convertValue( fld.type(), v ) );
1971+
}
19651972
}
19661973

19671974
params << v;
@@ -1995,7 +2002,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
19952002

19962003
foreach( int idx, mPrimaryKeyAttrs )
19972004
{
1998-
primaryKeyVals << attributevec[ mPrimaryKeyAttrs[idx] ];
2005+
primaryKeyVals << attributevec[ idx ];
19992006
}
20002007

20012008
features->setFeatureId( lookupFid( QVariant( primaryKeyVals ) ) );
@@ -2318,7 +2325,7 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
23182325
.arg( quotedIdentifier( mGeometryColumn ) )
23192326
.arg( mConnectionRW->majorVersion() < 2 ? "geomfromwkb" : "st_geomfromwkb" )
23202327
.arg( mConnectionRW->useWkbHex() ? "" : "::bytea" )
2321-
.arg( mDetectedSrid )
2328+
.arg( mRequestedSrid )
23222329
.arg( pkParamWhereClause( 2 ) );
23232330

23242331
QgsDebugMsg( "updating: " + update );
@@ -2718,6 +2725,11 @@ bool QgsPostgresProvider::getGeometryDetails()
27182725
mDetectedGeomType = QgsPostgresConn::geomTypeFromPostgis( type );
27192726
mDetectedSrid = srid;
27202727

2728+
if ( mRequestedSrid.isEmpty() )
2729+
{
2730+
mRequestedSrid = srid;
2731+
}
2732+
27212733
mValid = mDetectedGeomType != QGis::UnknownGeometry || mRequestedGeomType != QGis::UnknownGeometry;
27222734

27232735
if ( !mValid )

0 commit comments

Comments
 (0)