Skip to content

Commit

Permalink
Merge pull request #5483 from m-kuhn/postgisEmptyValue
Browse files Browse the repository at this point in the history
[postgres] Distinguish empty and NULL values
  • Loading branch information
m-kuhn authored Oct 29, 2017
2 parents 2c53ba9 + e6e6189 commit 29e8990
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/providers/postgres/qgspostgresprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2050,7 +2050,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist, Flags flags )

if ( i == flist.size() )
{
if ( v == defVal )
if ( v == defVal && defVal.isNull() == v.isNull() )
{
if ( defVal.isNull() )
{
Expand Down
26 changes: 26 additions & 0 deletions tests/src/python/test_provider_postgres.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,32 @@ def testPktMapInsert(self):
self.assertNotEqual(f[0]['obj_id'], NULL, f[0].attributes())
vl.deleteFeatures([f[0].id()])

def testNull(self):
"""
Asserts that 0, '' and NULL are treated as different values on insert
"""
vl = QgsVectorLayer(self.dbconn + ' sslmode=disable key=\'gid\' table="qgis_test"."constraints" sql=', 'test1', 'postgres')
self.assertTrue(vl.isValid())
QgsProject.instance().addMapLayer(vl)
tg = QgsTransactionGroup()
tg.addLayer(vl)
vl.startEditing()

def onError(message):
"""We should not get here. If we do, fail and say why"""
self.assertFalse(True, message)

vl.raiseError.connect(onError)

f = QgsFeature(vl.fields())
f['gid'] = 100
f['val'] = 0
f['name'] = ''
self.assertTrue(vl.addFeature(f))
feature = next(vl.getFeatures('"gid" = 100'))
self.assertEqual(f['val'], feature['val'])
self.assertEqual(f['name'], feature['name'])

def testNestedInsert(self):
tg = QgsTransactionGroup()
tg.addLayer(self.vl)
Expand Down

0 comments on commit 29e8990

Please sign in to comment.