Support additional synax for choosing table distribution strategy
authorPavan Deolasee <[email protected]>
Fri, 15 Jan 2016 07:58:12 +0000 (13:28 +0530)
committerPavan Deolasee <[email protected]>
Fri, 15 Jan 2016 07:58:12 +0000 (13:28 +0530)
DISTRIBUTED BY (col) maps to DISTRIBUTE BY HASH (col)
DISTRIBUTED RANDOMLY maps to DISTRIBUTE BY ROUNDROBIN

src/backend/parser/gram.y
src/include/parser/kwlist.h

index 978dbfca5266d7f705dcb43c6593fa34b40bc080..8d272573c0c7ed75c2c3650d9e5945e981248b81 100644 (file)
@@ -580,7 +580,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
  */
 
 /* ordinary key words in alphabetical order */
-/* PGXC - added DISTRIBUTE, DIRECT, COORDINATOR, CLEAN,  NODE, BARRIER */
+/* PGXC - added DISTRIBUTE, DISTRIBUTED, RANDOMLY, DIRECT, COORDINATOR, CLEAN,  NODE, BARRIER */
 %token <keyword> ABORT_P ABSOLUTE_P ACCESS ACTION ADD_P ADMIN AFTER
        AGGREGATE ALL ALSO ALTER ALWAYS ANALYSE ANALYZE AND ANY ARRAY AS ASC
        ASSERTION ASSIGNMENT ASYMMETRIC AT ATTRIBUTE AUTHORIZATION
@@ -600,7 +600,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
        DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS
        DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DESC
 /* PGXC_BEGIN */
-       DICTIONARY DIRECT DISABLE_P DISCARD DISTINCT DISTRIBUTE DO DOCUMENT_P DOMAIN_P DOUBLE_P
+       DICTIONARY DIRECT DISABLE_P DISCARD DISTINCT DISTRIBUTE DISTRIBUTED DO DOCUMENT_P DOMAIN_P DOUBLE_P
 /* PGXC_END */
        DROP
 
@@ -645,7 +645,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
 
        QUOTE
 
-       RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REFRESH REINDEX
+       RANDOMLY RANGE READ REAL REASSIGN RECHECK RECURSIVE REF REFERENCES REFRESH REINDEX
        RELATIVE_P RELEASE RENAME REPEATABLE REPLACE REPLICA
        RESET RESTART RESTRICT RETURNING RETURNS REVOKE RIGHT ROLE ROLLBACK ROLLUP
        ROW ROWS RULE
@@ -3597,6 +3597,20 @@ OptDistributeByInternal:  DISTRIBUTE BY OptDistributeType '(' name ')'
                                        n->colname = NULL;
                                        $$ = n;
                                }
+                       | DISTRIBUTED BY '(' name ')'
+                               {
+                                       DistributeBy *n = makeNode(DistributeBy);
+                                       n->disttype = DISTTYPE_HASH;
+                                       n->colname = $4;
+                                       $$ = n;
+                               }
+                       | DISTRIBUTED RANDOMLY
+                               {
+                                       DistributeBy *n = makeNode(DistributeBy);
+                                       n->disttype = DISTTYPE_ROUNDROBIN;
+                                       n->colname = NULL;
+                                       $$ = n;
+                               }
                ;
 
 OptSubCluster: OptSubClusterInternal                           { $$ = $1; }
@@ -14058,7 +14072,7 @@ ColLabel:       IDENT                                                                   { $$ = $1; }
 
 /* "Unreserved" keywords --- available for use as any kind of name.
  */
-/* PGXC - added DISTRIBUTE, DIRECT, COORDINATOR, CLEAN, NODE, BARRIER */
+/* PGXC - added DISTRIBUTE, DISTRIBUTED, RANDOMLY, DIRECT, COORDINATOR, CLEAN, NODE, BARRIER */
 unreserved_keyword:
                          ABORT_P
                        | ABSOLUTE_P
@@ -14130,6 +14144,7 @@ unreserved_keyword:
                        | DISCARD
 /* PGXC_BEGIN */
                        | DISTRIBUTE
+                       | DISTRIBUTED
 /* PGXC_END */
                        | DOCUMENT_P
                        | DOMAIN_P
@@ -14248,6 +14263,9 @@ unreserved_keyword:
                        | PROCEDURE
                        | PROGRAM
                        | QUOTE
+/* PGXC_BEGIN */
+                       | RANDOMLY
+/* PGXC_END */
                        | RANGE
                        | READ
                        | REASSIGN
index f4f00642cc649f4dafa7b3d970742b6d9c50be8b..ec5c880c91f3756e0a642c74ed63aa9c349532fd 100644 (file)
@@ -141,6 +141,7 @@ PG_KEYWORD("discard", DISCARD, UNRESERVED_KEYWORD)
 PG_KEYWORD("distinct", DISTINCT, RESERVED_KEYWORD)
 #ifdef PGXC
 PG_KEYWORD("distribute", DISTRIBUTE, UNRESERVED_KEYWORD)
+PG_KEYWORD("distributed", DISTRIBUTED, UNRESERVED_KEYWORD)
 #endif
 PG_KEYWORD("do", DO, RESERVED_KEYWORD)
 PG_KEYWORD("document", DOCUMENT_P, UNRESERVED_KEYWORD)
@@ -323,6 +324,9 @@ PG_KEYWORD("procedural", PROCEDURAL, UNRESERVED_KEYWORD)
 PG_KEYWORD("procedure", PROCEDURE, UNRESERVED_KEYWORD)
 PG_KEYWORD("program", PROGRAM, UNRESERVED_KEYWORD)
 PG_KEYWORD("quote", QUOTE, UNRESERVED_KEYWORD)
+#ifdef PGXC
+PG_KEYWORD("randomly", RANDOMLY, UNRESERVED_KEYWORD)
+#endif
 PG_KEYWORD("range", RANGE, UNRESERVED_KEYWORD)
 PG_KEYWORD("read", READ, UNRESERVED_KEYWORD)
 PG_KEYWORD("real", REAL, COL_NAME_KEYWORD)