@@ -198,7 +198,7 @@ QgsPostgresProvider::QgsPostgresProvider( QString const & uri )
198
198
key = " tid" ;
199
199
break ;
200
200
case pktInt:
201
- case pktInt64 :
201
+ case pktUint64 :
202
202
Q_ASSERT ( mPrimaryKeyAttrs .size () == 1 );
203
203
Q_ASSERT ( mPrimaryKeyAttrs [0 ] >= 0 && mPrimaryKeyAttrs [0 ] < mAttributeFields .count () );
204
204
key = mAttributeFields .at ( mPrimaryKeyAttrs .at ( 0 ) ).name ();
@@ -407,7 +407,7 @@ QString QgsPostgresProvider::pkParamWhereClause( int offset, const char *alias )
407
407
break ;
408
408
409
409
case pktInt:
410
- case pktInt64 :
410
+ case pktUint64 :
411
411
Q_ASSERT ( mPrimaryKeyAttrs .size () == 1 );
412
412
whereClause = QString ( " %3%1=$%2" ).arg ( quotedIdentifier ( field ( mPrimaryKeyAttrs [0 ] ).name () ) ).arg ( offset ).arg ( aliased );
413
413
break ;
@@ -448,7 +448,7 @@ void QgsPostgresProvider::appendPkParams( QgsFeatureId featureId, QStringList &p
448
448
switch ( mPrimaryKeyType )
449
449
{
450
450
case pktOid:
451
- case pktInt64 :
451
+ case pktUint64 :
452
452
params << QString::number ( featureId );
453
453
break ;
454
454
@@ -521,7 +521,7 @@ QString QgsPostgresUtils::whereClause( QgsFeatureId featureId, const QgsFields&
521
521
whereClause = QString ( " %1=%2" ).arg ( QgsPostgresConn::quotedIdentifier ( fields[ pkAttrs[0 ] ].name () ) ).arg ( featureId - PKINT_OFFSET );
522
522
break ;
523
523
524
- case pktInt64 :
524
+ case pktUint64 :
525
525
Q_ASSERT ( pkAttrs.size () == 1 );
526
526
whereClause = QString ( " %1=%2" ).arg ( QgsPostgresConn::quotedIdentifier ( fields[ pkAttrs[0 ] ].name () ) ).arg ( featureId );
527
527
break ;
@@ -573,7 +573,7 @@ QString QgsPostgresUtils::whereClause( const QgsFeatureIds& featureIds, const Qg
573
573
{
574
574
case pktOid:
575
575
case pktInt:
576
- case pktInt64 :
576
+ case pktUint64 :
577
577
{
578
578
QString expr;
579
579
@@ -585,7 +585,7 @@ QString QgsPostgresUtils::whereClause( const QgsFeatureIds& featureIds, const Qg
585
585
586
586
Q_FOREACH ( const QgsFeatureId featureId, featureIds )
587
587
{
588
- expr += delim + FID_TO_STRING ( pkType == pktOid ? featureId : pkType == pktInt64 ? featureId : featureId - PKINT_OFFSET );
588
+ expr += delim + FID_TO_STRING ( pkType == pktOid ? featureId : pkType == pktUint64 ? featureId : featureId - PKINT_OFFSET );
589
589
delim = ' ,' ;
590
590
}
591
591
expr += ' )' ;
@@ -1332,7 +1332,11 @@ bool QgsPostgresProvider::determinePrimaryKey()
1332
1332
}
1333
1333
else if ( fld.type () == QVariant::LongLong )
1334
1334
{
1335
- mPrimaryKeyType = pktInt64; // 64bit integer
1335
+ // unless we can guarantee all values are unsigned
1336
+ // (in which case we could use pktUint64)
1337
+ // we'll have to use a Map type.
1338
+ // See http://hub.qgis.org/issues/14262
1339
+ mPrimaryKeyType = pktFidMap; // pktUint64
1336
1340
}
1337
1341
else if ( fld.type () == QVariant::Int )
1338
1342
{
@@ -1435,7 +1439,7 @@ void QgsPostgresProvider::determinePrimaryKeyFromUriKeyColumn()
1435
1439
const QgsField& fld = mAttributeFields .at ( 0 );
1436
1440
if ( fld.type () == QVariant::LongLong )
1437
1441
{
1438
- mPrimaryKeyType = pktInt64 ; // 64bit integer
1442
+ mPrimaryKeyType = pktUint64 ; // 64bit integer
1439
1443
}
1440
1444
else if ( fld.type () == QVariant::Int )
1441
1445
{
@@ -1869,7 +1873,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
1869
1873
delim = ' ,' ;
1870
1874
}
1871
1875
1872
- if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktInt64 )
1876
+ if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktUint64 )
1873
1877
{
1874
1878
Q_FOREACH ( int idx, mPrimaryKeyAttrs )
1875
1879
{
@@ -1978,7 +1982,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
1978
1982
1979
1983
insert += values + ' )' ;
1980
1984
1981
- if ( mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktInt || mPrimaryKeyType == pktInt64 )
1985
+ if ( mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktInt || mPrimaryKeyType == pktUint64 )
1982
1986
{
1983
1987
insert += " RETURNING " ;
1984
1988
@@ -2054,13 +2058,13 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
2054
2058
}
2055
2059
2056
2060
// update feature ids
2057
- if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktInt64 )
2061
+ if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktUint64 )
2058
2062
{
2059
2063
for ( QgsFeatureList::iterator features = flist.begin (); features != flist.end (); ++features )
2060
2064
{
2061
2065
QgsAttributes attrs = features->attributes ();
2062
2066
2063
- if ( mPrimaryKeyType == pktInt64 )
2067
+ if ( mPrimaryKeyType == pktUint64 )
2064
2068
{
2065
2069
features->setFeatureId ( STRING_TO_FID ( attrs.at ( mPrimaryKeyAttrs .at ( 0 ) ) ) );
2066
2070
}
0 commit comments