Skip to content

Commit 5cd2319

Browse files
committed
Also retrieve generated values for pktInt
1 parent eecd77a commit 5cd2319

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

src/providers/postgres/qgspostgresprovider.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1918,7 +1918,7 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
19181918

19191919
insert += values + ')';
19201920

1921-
if ( mPrimaryKeyType == pktFidMap )
1921+
if ( mPrimaryKeyType == pktFidMap || mPrimaryKeyType == pktInt )
19221922
{
19231923
insert += " RETURNING ";
19241924

tests/src/python/test_provider_postgres.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -165,15 +165,26 @@ def test_query_attribute(dbconn, query, att, val, fidval):
165165
test_query_attribute(self.dbconn, '(SELECT -1::int8 i, NULL::geometry(Point) g)', 'i', -1, 1)
166166
test_query_attribute(self.dbconn, '(SELECT -65535::int8 i, NULL::geometry(Point) g)', 'i', -65535, 1)
167167

168-
def testPktMapInsert(self):
168+
def testPktIntInsert(self):
169169
vl = QgsVectorLayer('{} table="qgis_test"."{}" key="pk" sql='.format(self.dbconn, 'bikes_view'), "bikes_view", "postgres")
170170
self.assertTrue(vl.isValid())
171171
f = QgsFeature(vl.fields())
172172
f['pk'] = NULL
173173
f['name'] = 'Cilo'
174174
r, f = vl.dataProvider().addFeatures([f])
175175
self.assertTrue(r)
176-
self.assertNotEqual(f[0]['pk'], NULL)
176+
self.assertNotEqual(f[0]['pk'], NULL, f[0].attributes())
177+
vl.deleteFeatures([f[0].id()])
178+
179+
def testPktMapInsert(self):
180+
vl = QgsVectorLayer('{} table="qgis_test"."{}" key="obj_id" sql='.format(self.dbconn, 'oid_serial_table'), "oid_serial", "postgres")
181+
self.assertTrue(vl.isValid())
182+
f = QgsFeature(vl.fields())
183+
f['obj_id'] = vl.dataProvider().defaultValue(0)
184+
f['name'] = 'Test'
185+
r, f = vl.dataProvider().addFeatures([f])
186+
self.assertTrue(r)
187+
self.assertNotEqual(f[0]['obj_id'], NULL, f[0].attributes())
177188
vl.deleteFeatures([f[0].id()])
178189

179190
if __name__ == '__main__':

tests/testdata/provider/testdata_pg.sql

+16-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ INSERT INTO qgis_test.child_table2_good (geom, code2) VALUES ('srid=4326;Point(-
310310
INSERT INTO qgis_test.child_table2_good (geom, code2) VALUES ('srid=4326;Point(-1 1)'::geometry, 'child2 2');
311311

312312
--------------------------------------
313-
-- A writable view
313+
-- A writable view with an int pk
314314
--
315315

316316
CREATE TABLE qgis_test.bikes
@@ -342,3 +342,18 @@ END; $BODY$
342342

343343
CREATE TRIGGER bikes_view_ON_INSERT INSTEAD OF INSERT ON qgis_test.bikes_view
344344
FOR EACH ROW EXECUTE PROCEDURE qgis_test.bikes_view_insert();
345+
346+
--------------------------------------
347+
-- A string primary key to force usage of pktMap
348+
--
349+
350+
CREATE SEQUENCE qgis_test.oid_serial;
351+
352+
CREATE TABLE qgis_test.oid_serial_table
353+
(
354+
obj_id varchar(16) NOT NULL,
355+
name character varying(255),
356+
CONSTRAINT pkey_oid_serial PRIMARY KEY (obj_id)
357+
);
358+
359+
ALTER TABLE qgis_test.oid_serial_table ALTER COLUMN obj_id SET DEFAULT 'prf_' || nextval('qgis_test.oid_serial');

0 commit comments

Comments
 (0)