@@ -538,7 +538,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
538
538
{
539
539
qBox = QString ( " setsrid('BOX3D(%1)'::box3d,%2)" )
540
540
.arg ( rect.asWktCoordinates () )
541
- .arg ( mDetectedSrid );
541
+ .arg ( mRequestedSrid );
542
542
}
543
543
else
544
544
{
@@ -547,7 +547,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
547
547
.arg ( rect.yMinimum () )
548
548
.arg ( rect.xMaximum () )
549
549
.arg ( rect.yMaximum () )
550
- .arg ( mDetectedSrid );
550
+ .arg ( mRequestedSrid );
551
551
}
552
552
553
553
whereClause = QString ( " %1 && %2" )
@@ -562,7 +562,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
562
562
}
563
563
}
564
564
565
- if ( ! mRequestedSrid . isEmpty () && mRequestedSrid != mDetectedSrid )
565
+ if ( mRequestedSrid != mDetectedSrid )
566
566
{
567
567
whereClause += QString ( " AND %1(%2)=%3" )
568
568
.arg ( mConnectionRO ->majorVersion () < 2 ? " srid" : " st_srid" )
@@ -731,10 +731,13 @@ void QgsPostgresProvider::appendPkParams( QgsFeatureId featureId, QStringList &p
731
731
{
732
732
switch ( mPrimaryKeyType )
733
733
{
734
- case pktTid:
735
734
case pktOid:
736
735
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 );
738
741
break ;
739
742
740
743
case pktFidMap:
@@ -1816,7 +1819,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
1816
1819
.arg ( mConnectionRO ->majorVersion () < 2 ? " geomfromwkb" : " st_geomfromwkb" )
1817
1820
.arg ( offset++ )
1818
1821
.arg ( mConnectionRW ->useWkbHex () ? " " : " ::bytea" )
1819
- .arg ( mDetectedSrid );
1822
+ .arg ( mRequestedSrid );
1820
1823
delim = " ," ;
1821
1824
}
1822
1825
@@ -1953,15 +1956,19 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
1953
1956
QString v;
1954
1957
if ( attr == attributevec.end () )
1955
1958
{
1959
+ const QgsField &fld = field ( fieldId[i] );
1956
1960
v = paramValue ( defaultValues[i], defaultValues[i] );
1957
- features->addAttribute ( fieldId[i], v );
1961
+ features->addAttribute ( fieldId[i], convertValue ( fld. type (), v ) );
1958
1962
}
1959
1963
else
1960
1964
{
1961
1965
v = paramValue ( attr.value ().toString (), defaultValues[i] );
1962
1966
1963
1967
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
+ }
1965
1972
}
1966
1973
1967
1974
params << v;
@@ -1995,7 +2002,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
1995
2002
1996
2003
foreach ( int idx, mPrimaryKeyAttrs )
1997
2004
{
1998
- primaryKeyVals << attributevec[ mPrimaryKeyAttrs [ idx] ];
2005
+ primaryKeyVals << attributevec[ idx ];
1999
2006
}
2000
2007
2001
2008
features->setFeatureId ( lookupFid ( QVariant ( primaryKeyVals ) ) );
@@ -2318,7 +2325,7 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
2318
2325
.arg ( quotedIdentifier ( mGeometryColumn ) )
2319
2326
.arg ( mConnectionRW ->majorVersion () < 2 ? " geomfromwkb" : " st_geomfromwkb" )
2320
2327
.arg ( mConnectionRW ->useWkbHex () ? " " : " ::bytea" )
2321
- .arg ( mDetectedSrid )
2328
+ .arg ( mRequestedSrid )
2322
2329
.arg ( pkParamWhereClause ( 2 ) );
2323
2330
2324
2331
QgsDebugMsg ( " updating: " + update );
@@ -2718,6 +2725,11 @@ bool QgsPostgresProvider::getGeometryDetails()
2718
2725
mDetectedGeomType = QgsPostgresConn::geomTypeFromPostgis ( type );
2719
2726
mDetectedSrid = srid;
2720
2727
2728
+ if ( mRequestedSrid .isEmpty () )
2729
+ {
2730
+ mRequestedSrid = srid;
2731
+ }
2732
+
2721
2733
mValid = mDetectedGeomType != QGis::UnknownGeometry || mRequestedGeomType != QGis::UnknownGeometry;
2722
2734
2723
2735
if ( !mValid )
0 commit comments