Array behavior oddities
От | Bruce Momjian |
---|---|
Тема | Array behavior oddities |
Дата | |
Msg-id | 200801150431.m0F4V6010850@momjian.us обсуждение исходный текст |
Ответы |
Re: Array behavior oddities
Re: Array behavior oddities |
Список | pgsql-hackers |
In reading our array documentation I came across two unusual behaviors. The issue relates to slices: We can also access arbitrary rectangular slices of an array, or subarrays. An array slice is denoted by writing <literal><replaceable>lower-bound</replaceable>:<replaceable>upper-bound</replaceable></literal>for one or more array dimensions. For example, this query retrieves the first item on Bill's schedule for the first two days of the week: SELECT schedule[1:2][1:1] FROM sal_emp WHERE name = 'Bill'; First issue: If any dimension is written as a slice, i.e. contains a colon, then all dimensions are treated as slices. Any dimensionthat has only a single number (no colon) is treated as being from <literal>1</> to the number specified. For example,<literal>[2]</> is treated as <literal>[1:2]</>, as in this example: Is the the behavior of assuming an entry with no colon is a slice what we want, or are we just stuck with it? Also: 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 ratherthan 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 sliceexpression yields an empty (zero-dimensional) array instead of null. If the requested slice partially overlaps thearray 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. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://postgres.enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
В списке pgsql-hackers по дате отправления: