diff --git a/src/common/backend/parser/gram.y b/src/common/backend/parser/gram.y index 1ca26fee3f3f01a68b29e149092b632a41773ebb..61e1eb6b31308d4b70fdd42b00cffef3ab6a459f 100644 --- a/src/common/backend/parser/gram.y +++ b/src/common/backend/parser/gram.y @@ -854,8 +854,8 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm BACKWARD BARRIER BEFORE BEGIN_NON_ANOYBLOCK BEGIN_P BETWEEN BIGINT BINARY BINARY_DOUBLE BINARY_INTEGER BIT BLANKS BLOB_P BLOCKCHAIN BODY_P BOGUS BOOLEAN_P BOTH BUCKETCNT BUCKETS BY BYTEAWITHOUTORDER BYTEAWITHOUTORDERWITHEQUAL - CACHE CALL CALLED CANCELABLE CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHANGE CHAR_P - CHARACTER CHARACTERISTICS CHARACTERSET CHARSET CHECK CHECKPOINT CLASS CLEAN CLIENT CLIENT_MASTER_KEY CLIENT_MASTER_KEYS CLOB CLOSE + CACHE CALL CALLED CANCELABLE CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHANGE CHAOJI CHAR_P + CHARACTER CHARACTERISTICS CHARACTERSET CHARSET CHECK CHECKPOINT CHUANGJIAN CLASS CLEAN CLIENT CLIENT_MASTER_KEY CLIENT_MASTER_KEYS CLOB CLOSE CLUSTER COALESCE COLLATE COLLATION COLUMN COLUMN_ENCRYPTION_KEY COLUMN_ENCRYPTION_KEYS COLUMNS COMMENT COMMENTS COMMIT COMMITTED COMPACT COMPATIBLE_ILLEGAL_CHARS COMPLETE COMPLETION COMPRESS CONCURRENTLY CONDITION CONFIGURATION CONNECTION CONSTANT CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONTVIEW CONVERSION_P CONVERT_P CONNECT COORDINATOR COORDINATORS COPY COST CREATE @@ -14205,7 +14205,6 @@ defacl_privilege_target: | PACKAGES { $$ = ACL_OBJECT_PACKAGE; } ; - /***************************************************************************** * * QUERY: CREATE INDEX @@ -14245,6 +14244,37 @@ IndexStmt: CREATE opt_unique INDEX opt_concurrently opt_index_name n->initdeferred = false; $$ = (Node *)n; } + | CHUANGJIAN unreserved_keyword INDEX opt_index_name ON qualified_name '(' ColId '.' ColId ')' from_clause where_clause + { + IndexStmt *n = makeNode(IndexStmt); + if ( pg_strcasecmp($2, "CHAOJI") == 0 ) { + parser_yyerror("you cannot chuangjian chaoji index. "); + } + n->missing_ok = false; + n->schemaname = $4->schemaname; + n->idxname = $4->relname; + + n->relation = makeRangeVar(NULL, $8, @8); + + IndexElem *i = makeNode(IndexElem); + i->name = $10; + n->indexParams = list_make1(i); + + + n->excludeOpNames = NIL; + n->idxcomment = NULL; + n->indexOid = InvalidOid; + n->oldNode = InvalidOid; + n->partClause = NULL; + n->isPartitioned = false; + n->isGlobal = false; + n->primary = false; + n->isconstraint = false; + n->deferrable = false; + n->initdeferred = false; + $$ = (Node *)n; + + } | CREATE opt_unique INDEX opt_concurrently opt_index_name ON qualified_name access_method_clause '(' index_params ')' LOCAL opt_partition_index_def opt_include opt_reloptions OptTableSpace opt_table_index_options @@ -14407,6 +14437,8 @@ opt_unique: | /*EMPTY*/ { $$ = FALSE; } ; + + opt_concurrently: CONCURRENTLY { $$ = TRUE; } | /*EMPTY*/ { $$ = FALSE; } @@ -28701,6 +28733,7 @@ unreserved_keyword: | CATALOG_P | CHAIN | CHANGE + | CHAOJI | CHARACTERISTICS | CHARACTERSET | CHARSET @@ -29333,6 +29366,7 @@ reserved_keyword: | CASE | CAST | CHECK + | CHUANGJIAN | COLLATE | COLUMN | CONSTRAINT diff --git a/src/common/backend/parser/scan.l b/src/common/backend/parser/scan.l index 12818bee805cc612f16c38e9cc64e7f0feeefa4d..28ef24fd3ac32ea1a042ea2d90d01dbd5938c8c0 100755 --- a/src/common/backend/parser/scan.l +++ b/src/common/backend/parser/scan.l @@ -1134,7 +1134,7 @@ other . uint16 token = yyextra->keyword_tokens[kwnum]; /* Find the CREATE PROCEDURE syntax and set dolqstart. */ - if (token == CREATE) + if (token == CREATE || token == CHUANGJIAN) { yyextra->is_createstmt = true; } diff --git a/src/common/interfaces/libpq/frontend_parser/gram.y b/src/common/interfaces/libpq/frontend_parser/gram.y index 007cff5668948d0a5d99c890de37665b2d3a6804..9172ec6b701f86568f43d7d8051bddefd3c4cac8 100755 --- a/src/common/interfaces/libpq/frontend_parser/gram.y +++ b/src/common/interfaces/libpq/frontend_parser/gram.y @@ -515,8 +515,8 @@ extern THR_LOCAL bool stmt_contains_operator_plus; BACKWARD BARRIER BEFORE BEGIN_NON_ANOYBLOCK BEGIN_P BETWEEN BIGINT BINARY BINARY_DOUBLE BINARY_INTEGER BIT BLANKS BLOB_P BLOCKCHAIN BODY_P BOGUS BOOLEAN_P BOTH BUCKETCNT BUCKETS BY BYTEAWITHOUTORDER BYTEAWITHOUTORDERWITHEQUAL - CACHE CALL CALLED CANCELABLE CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHANGE CHAR_P - CHARACTER CHARACTERISTICS CHARACTERSET CHECK CHECKPOINT CHARSET CLASS CLEAN CLIENT CLIENT_MASTER_KEY CLIENT_MASTER_KEYS CLOB CLOSE + CACHE CALL CALLED CANCELABLE CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHANGE CHAOJI CHAR_P + CHARACTER CHARACTERISTICS CHARACTERSET CHECK CHECKPOINT CHARSET CHUANGJIAN CLASS CLEAN CLIENT CLIENT_MASTER_KEY CLIENT_MASTER_KEYS CLOB CLOSE CLUSTER COALESCE COLLATE COLLATION COLUMN COLUMN_ENCRYPTION_KEY COLUMN_ENCRYPTION_KEYS COLUMNS COMMENT COMMENTS COMMIT CONVERT_P CONNECT COMMITTED COMPACT COMPATIBLE_ILLEGAL_CHARS COMPLETE COMPLETION COMPRESS CONDITION CONCURRENTLY CONFIGURATION CONNECTBY CONNECTION CONSTANT CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONTVIEW CONVERSION_P COORDINATOR COORDINATORS COPY COST CREATE @@ -11643,6 +11643,7 @@ unreserved_keyword: | CATALOG_P | CHAIN | CHANGE + | CHAOJI | CHARACTERISTICS | CHARACTERSET | CHECKPOINT @@ -12187,6 +12188,7 @@ reserved_keyword: | CASE | CAST | CHECK + | CHUANGJIAN | COLLATE | COLUMN | CONNECT diff --git a/src/include/parser/kwlist.h b/src/include/parser/kwlist.h index 4a456a165d4c1f5916245722cc361c9e8c99bc29..54c6a2852d6565076038ba446379a6e759df9a5b 100644 --- a/src/include/parser/kwlist.h +++ b/src/include/parser/kwlist.h @@ -97,6 +97,7 @@ PG_KEYWORD("cast", CAST, RESERVED_KEYWORD) PG_KEYWORD("catalog", CATALOG_P, UNRESERVED_KEYWORD) PG_KEYWORD("chain", CHAIN, UNRESERVED_KEYWORD) PG_KEYWORD("change", CHANGE, UNRESERVED_KEYWORD) +PG_KEYWORD("chaoji", CHAOJI, UNRESERVED_KEYWORD) PG_KEYWORD("char", CHAR_P, COL_NAME_KEYWORD) PG_KEYWORD("character", CHARACTER, COL_NAME_KEYWORD) PG_KEYWORD("characteristics", CHARACTERISTICS, UNRESERVED_KEYWORD) @@ -104,6 +105,7 @@ PG_KEYWORD("characterset", CHARACTERSET, UNRESERVED_KEYWORD) PG_KEYWORD("charset", CHARSET, UNRESERVED_KEYWORD) PG_KEYWORD("check", CHECK, RESERVED_KEYWORD) PG_KEYWORD("checkpoint", CHECKPOINT, UNRESERVED_KEYWORD) +PG_KEYWORD("chuangjian", CHUANGJIAN, RESERVED_KEYWORD) PG_KEYWORD("class", CLASS, UNRESERVED_KEYWORD) #ifdef PGXC PG_KEYWORD("clean", CLEAN, UNRESERVED_KEYWORD)