OSDN Git Service

Since SQL:2003, the array size specification in the SQL ARRAY syntax has
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 29 Oct 2008 11:24:53 +0000 (11:24 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 29 Oct 2008 11:24:53 +0000 (11:24 +0000)
been optional.

doc/src/sgml/array.sgml
src/backend/parser/gram.y

index b0d6e19..4d762c5 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/array.sgml,v 1.66 2008/04/28 14:48:57 alvherre Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/array.sgml,v 1.67 2008/10/29 11:24:52 petere Exp $ -->
 
 <sect1 id="arrays">
  <title>Arrays</title>
@@ -76,9 +76,12 @@ CREATE TABLE tictactoe (
 <programlisting>
     pay_by_quarter  integer ARRAY[4],
 </programlisting>
-  This syntax requires an integer constant to denote the array size.
+  Or, if no array size is to be specified:
+<programlisting>
+    pay_by_quarter  integer ARRAY,
+</programlisting>
   As before, however, <productname>PostgreSQL</> does not enforce the
-  size restriction.
+  size restriction in any case.
  </para>
  </sect2>
 
index 4759e04..8b44e5b 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.631 2008/10/28 14:09:45 petere Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.632 2008/10/29 11:24:53 petere Exp $
  *
  * HISTORY
  *       AUTHOR                        DATE                    MAJOR EVENT
@@ -7124,19 +7124,29 @@ Typename:       SimpleTypename opt_array_bounds
                                        $$->arrayBounds = $3;
                                        $$->setof = TRUE;
                                }
+                       /* SQL standard syntax, currently only one-dimensional */
                        | SimpleTypename ARRAY '[' Iconst ']'
                                {
-                                       /* SQL99's redundant syntax */
                                        $$ = $1;
                                        $$->arrayBounds = list_make1(makeInteger($4));
                                }
                        | SETOF SimpleTypename ARRAY '[' Iconst ']'
                                {
-                                       /* SQL99's redundant syntax */
                                        $$ = $2;
                                        $$->arrayBounds = list_make1(makeInteger($5));
                                        $$->setof = TRUE;
                                }
+                       | SimpleTypename ARRAY
+                               {
+                                       $$ = $1;
+                                       $$->arrayBounds = list_make1(makeInteger(-1));
+                               }
+                       | SETOF SimpleTypename ARRAY
+                               {
+                                       $$ = $2;
+                                       $$->arrayBounds = list_make1(makeInteger(-1));
+                                       $$->setof = TRUE;
+                               }
                ;
 
 opt_array_bounds: