-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Bruce Momjian wrote: > An array subscript expression will return null if either the array itself > or any of the subscript expressions are null. Also, null is returned > if a subscript is outside the array bounds (this case does not raise an > error). For example, if <literal>schedule</> currently has the > dimensions <literal>[1:3][1:2]</> then referencing > <literal>schedule[3][3]</> yields NULL. Similarly, an array reference > with the wrong number of subscripts yields a null rather than an error. > > An array slice expression likewise yields null if the array itself or > any of the subscript expressions are null. However, in other corner > cases such as selecting an array slice that is completely outside the > current array bounds, a slice expression yields an empty > (zero-dimensional) array instead of null. If the requested slice > partially overlaps the array bounds, then it is silently reduced to just > the overlapping region. > > Is there a reason out-of-bounds array accesses behave differently for > slices and non-slices? > > Having slices and non-slices behave differently is very confusing to me. I think the case of partially-out-of-bound slices is a good reason to have this difference:
fastgraph=# select ('{foo,bar}'::text[])[1:2]; text - ----------- {foo,bar} (1 row) fastgraph=# select ('{foo,bar}'::text[])[2:3]; text - ------- {bar} (1 row) fastgraph=# select ('{foo,bar}'::text[])[3:4]; text - ------ {} (1 row) We cannot return an empty array in case of unsliced out-of-bounds access because the type wouldn't match at all. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFHjdsOzhchXT4RR5ARAvBvAKCGVxgl6u2ZUcB/Bvl2jPN2/p6hzACdFXE3 9w01URr/xPYukzHhD5qhudE= =iZxq -----END PGP SIGNATURE----- ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend