Skip to content

Commit 29e8990

Browse files
authoredOct 29, 2017
Merge pull request #5483 from m-kuhn/postgisEmptyValue
[postgres] Distinguish empty and NULL values
2 parents 2c53ba9 + e6e6189 commit 29e8990

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed
 

‎src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2050,7 +2050,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist, Flags flags )
20502050

20512051
if ( i == flist.size() )
20522052
{
2053-
if ( v == defVal )
2053+
if ( v == defVal && defVal.isNull() == v.isNull() )
20542054
{
20552055
if ( defVal.isNull() )
20562056
{

‎tests/src/python/test_provider_postgres.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,32 @@ def testPktMapInsert(self):
303303
self.assertNotEqual(f[0]['obj_id'], NULL, f[0].attributes())
304304
vl.deleteFeatures([f[0].id()])
305305

306+
def testNull(self):
307+
"""
308+
Asserts that 0, '' and NULL are treated as different values on insert
309+
"""
310+
vl = QgsVectorLayer(self.dbconn + ' sslmode=disable key=\'gid\' table="qgis_test"."constraints" sql=', 'test1', 'postgres')
311+
self.assertTrue(vl.isValid())
312+
QgsProject.instance().addMapLayer(vl)
313+
tg = QgsTransactionGroup()
314+
tg.addLayer(vl)
315+
vl.startEditing()
316+
317+
def onError(message):
318+
"""We should not get here. If we do, fail and say why"""
319+
self.assertFalse(True, message)
320+
321+
vl.raiseError.connect(onError)
322+
323+
f = QgsFeature(vl.fields())
324+
f['gid'] = 100
325+
f['val'] = 0
326+
f['name'] = ''
327+
self.assertTrue(vl.addFeature(f))
328+
feature = next(vl.getFeatures('"gid" = 100'))
329+
self.assertEqual(f['val'], feature['val'])
330+
self.assertEqual(f['name'], feature['name'])
331+
306332
def testNestedInsert(self):
307333
tg = QgsTransactionGroup()
308334
tg.addLayer(self.vl)

0 commit comments

Comments
 (0)
Please sign in to comment.