@@ -157,7 +157,9 @@ def test_unique(features, num_features):
157157 test_unique ([f for f in vl .getFeatures ()], 4 )
158158
159159 # See http://hub.qgis.org/issues/14262
160+ # TODO: accept multi-featured layers, and an array of values/fids
160161 def testSignedIdentifiers (self ):
162+
161163 def test_layer (ql , att , val , fidval ):
162164 self .assertTrue (ql .isValid ())
163165 features = ql .getFeatures ()
@@ -177,9 +179,42 @@ def test(dbconn, query, att, val, fidval):
177179 # now with estimated metadata
178180 uri += ' estimatedmetadata="true"'
179181 test_layer (ql , att , val , fidval )
180- test (self .dbconn , '(SELECT -1::int4 i, NULL::geometry(Point) g)' , 'i' , - 1 , 4294967295 )
181- test (self .dbconn , '(SELECT -2::int2 i, NULL::geometry(Point) g)' , 'i' , - 2 , 4294967294 )
182+
183+ #### --- INT16 ----
184+ # zero
185+ test (self .dbconn , '(SELECT 0::int2 i, NULL::geometry(Point) g)' , 'i' , 0 , 0 )
186+ # low positive
187+ test (self .dbconn , '(SELECT 1::int2 i, NULL::geometry(Point) g)' , 'i' , 1 , 1 )
188+ # low negative
189+ test (self .dbconn , '(SELECT -1::int2 i, NULL::geometry(Point) g)' , 'i' , - 1 , 4294967295 )
190+ # max positive signed 16bit integer
191+ test (self .dbconn , '(SELECT 32767::int2 i, NULL::geometry(Point) g)' , 'i' , 32767 , 32767 )
192+ # max negative signed 16bit integer
193+ test (self .dbconn , '(SELECT -32767::int2 i, NULL::geometry(Point) g)' , 'i' , - 32767 , 4294934529 )
194+
195+ #### --- INT32 ----
196+ # zero
197+ test (self .dbconn , '(SELECT 0::int4 i, NULL::geometry(Point) g)' , 'i' , 0 , 0 )
198+ # low positive
199+ test (self .dbconn , '(SELECT 2::int4 i, NULL::geometry(Point) g)' , 'i' , 2 , 2 )
200+ # low negative
201+ test (self .dbconn , '(SELECT -2::int4 i, NULL::geometry(Point) g)' , 'i' , - 2 , 4294967294 )
202+ # max positive signed 32bit integer
203+ test (self .dbconn , '(SELECT 2147483647::int4 i, NULL::geometry(Point) g)' , 'i' , 2147483647 , 2147483647 )
204+ # max negative signed 32bit integer
205+ test (self .dbconn , '(SELECT -2147483647::int4 i, NULL::geometry(Point) g)' , 'i' , - 2147483647 , 2147483649 )
206+
207+ #### --- INT64 (FIDs are always 1 because assigned ex-novo) ----
208+ # zero
209+ test (self .dbconn , '(SELECT 0::int8 i, NULL::geometry(Point) g)' , 'i' , 0 , 1 )
210+ # low positive
211+ test (self .dbconn , '(SELECT 3::int8 i, NULL::geometry(Point) g)' , 'i' , 3 , 1 )
212+ # low negative
182213 test (self .dbconn , '(SELECT -3::int8 i, NULL::geometry(Point) g)' , 'i' , - 3 , 1 )
214+ # max positive signed 64bit integer
215+ test (self .dbconn , '(SELECT 9223372036854775807::int8 i, NULL::geometry(Point) g)' , 'i' , 9223372036854775807 , 1 )
216+ # max negative signed 32bit integer
217+ test (self .dbconn , '(SELECT -9223372036854775807::int8 i, NULL::geometry(Point) g)' , 'i' , - 9223372036854775807 , 1 )
183218
184219 def testPktIntInsert (self ):
185220 vl = QgsVectorLayer ('{} table="qgis_test"."{}" key="pk" sql=' .format (self .dbconn , 'bikes_view' ), "bikes_view" , "postgres" )
0 commit comments