Skip to content
Permalink
Browse files

Merge pull request #5483 from m-kuhn/postgisEmptyValue

[postgres] Distinguish empty and NULL values
  • Loading branch information
m-kuhn committed Oct 29, 2017
2 parents 2c53ba9 + e6e6189 commit 29e8990ec1eb059bf0c3891b23907b55bbcd5785
Showing with 27 additions and 1 deletion.
  1. +1 −1 src/providers/postgres/qgspostgresprovider.cpp
  2. +26 −0 tests/src/python/test_provider_postgres.py
@@ -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() )
{
@@ -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)

0 comments on commit 29e8990

Please sign in to comment.
You can’t perform that action at this time.