diff -ur ../cvs-pgsql/doc/src/sgml/func.sgml ./doc/src/sgml/func.sgml --- ../cvs-pgsql/doc/src/sgml/func.sgml 2008-10-15 14:19:37.000000000 +0300 +++ ./doc/src/sgml/func.sgml 2008-10-22 17:04:56.000000000 +0300 @@ -3184,7 +3184,8 @@ function fails and returns null. To indicate the part of the pattern that should be returned on success, the pattern must contain two occurrences of the escape character followed by a double quote - ("). The text matching the portion of the pattern + ("). + The text matching the portion of the pattern between these markers is returned. @@ -10933,13 +10934,19 @@ + current_catalog + name + name of current database (called catalog in the SQL standard) + + + current_database() name name of current database - current_schema() + current_schema[()] name name of current schema @@ -11056,6 +11063,10 @@ + current_catalog + + + current_database @@ -11083,9 +11094,12 @@ - current_user, session_user, and - user have special syntactic status in SQL: - they must be called without trailing parentheses. + current_catalog, current_schema, + current_user, session_user, + and user have special syntactic status + in SQL: they must be called without trailing + parentheses (optional in PostgreSQL in the case + of current_schema). diff -ur ../cvs-pgsql/doc/src/sgml/ref/set.sgml ./doc/src/sgml/ref/set.sgml --- ../cvs-pgsql/doc/src/sgml/ref/set.sgml 2008-03-10 14:39:22.000000000 +0200 +++ ./doc/src/sgml/ref/set.sgml 2008-10-22 16:58:05.000000000 +0300 @@ -151,6 +151,17 @@ + SCHEMA + + + SET SCHEMA 'value' is an alias for + SET search_path TO value. Only one + schema can be specified using this syntax. + + + + + NAMES diff -ur ../cvs-pgsql/src/backend/parser/gram.y ./src/backend/parser/gram.y --- ../cvs-pgsql/src/backend/parser/gram.y 2008-10-22 14:35:44.000000000 +0300 +++ ./src/backend/parser/gram.y 2008-10-22 16:57:10.000000000 +0300 @@ -401,12 +401,13 @@ BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BY - CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P + CACHE CALLED CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHAR_P CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE CREATEDB - CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE + CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P + CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS @@ -1133,6 +1134,22 @@ n->args = $5; $$ = n; } + | CATALOG_P Sconst + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("current database cannot be changed"), + scanner_errposition(@2))); + $$ = NULL; /*not reached*/ + } + | SCHEMA Sconst + { + VariableSetStmt *n = makeNode(VariableSetStmt); + n->kind = VAR_SET_VALUE; + n->name = "search_path"; + n->args = list_make1(makeStringConst($2, @2)); + $$ = n; + } | NAMES opt_encoding { VariableSetStmt *n = makeNode(VariableSetStmt); @@ -8400,6 +8417,28 @@ n->location = @1; $$ = (Node *)n; } + | CURRENT_CATALOG + { + FuncCall *n = makeNode(FuncCall); + n->funcname = SystemFuncName("current_database"); + n->args = NIL; + n->agg_star = FALSE; + n->agg_distinct = FALSE; + n->func_variadic = FALSE; + n->location = @1; + $$ = (Node *)n; + } + | CURRENT_SCHEMA + { + FuncCall *n = makeNode(FuncCall); + n->funcname = SystemFuncName("current_schema"); + n->args = NIL; + n->agg_star = FALSE; + n->agg_distinct = FALSE; + n->func_variadic = FALSE; + n->location = @1; + $$ = (Node *)n; + } | CAST '(' a_expr AS Typename ')' { $$ = makeTypeCast($3, $5, @1); } | EXTRACT '(' extract_list ')' @@ -9335,6 +9374,7 @@ | CALLED | CASCADE | CASCADED + | CATALOG_P | CHAIN | CHARACTERISTICS | CHECKPOINT @@ -9624,6 +9664,7 @@ | BETWEEN | BINARY | CROSS + | CURRENT_SCHEMA | FREEZE | FULL | ILIKE @@ -9666,6 +9707,7 @@ | COLUMN | CONSTRAINT | CREATE + | CURRENT_CATALOG | CURRENT_DATE | CURRENT_ROLE | CURRENT_TIME diff -ur ../cvs-pgsql/src/backend/parser/keywords.c ./src/backend/parser/keywords.c --- ../cvs-pgsql/src/backend/parser/keywords.c 2008-10-22 14:35:44.000000000 +0300 +++ ./src/backend/parser/keywords.c 2008-10-22 15:31:54.000000000 +0300 @@ -83,6 +83,7 @@ {"cascaded", CASCADED, UNRESERVED_KEYWORD}, {"case", CASE, RESERVED_KEYWORD}, {"cast", CAST, RESERVED_KEYWORD}, + {"catalog", CATALOG_P, UNRESERVED_KEYWORD}, {"chain", CHAIN, UNRESERVED_KEYWORD}, {"char", CHAR_P, COL_NAME_KEYWORD}, {"character", CHARACTER, COL_NAME_KEYWORD}, @@ -116,8 +117,10 @@ {"csv", CSV, UNRESERVED_KEYWORD}, {"ctype", CTYPE, UNRESERVED_KEYWORD}, {"current", CURRENT_P, UNRESERVED_KEYWORD}, + {"current_catalog", CURRENT_CATALOG, RESERVED_KEYWORD}, {"current_date", CURRENT_DATE, RESERVED_KEYWORD}, {"current_role", CURRENT_ROLE, RESERVED_KEYWORD}, + {"current_schema", CURRENT_SCHEMA, TYPE_FUNC_NAME_KEYWORD}, {"current_time", CURRENT_TIME, RESERVED_KEYWORD}, {"current_timestamp", CURRENT_TIMESTAMP, RESERVED_KEYWORD}, {"current_user", CURRENT_USER, RESERVED_KEYWORD}, diff -ur ../cvs-pgsql/src/interfaces/ecpg/preproc/preproc.y ./src/interfaces/ecpg/preproc/preproc.y --- ../cvs-pgsql/src/interfaces/ecpg/preproc/preproc.y 2008-10-21 11:48:33.000000000 +0300 +++ ./src/interfaces/ecpg/preproc/preproc.y 2008-10-22 16:54:54.000000000 +0300 @@ -423,12 +423,13 @@ BACKWARD BEFORE BEGIN_P BETWEEN BIGINT BINARY BIT BOOLEAN_P BOTH BY - CACHE CALLED CASCADE CASCADED CASE CAST CHAIN CHAR_P + CACHE CALLED CASCADE CASCADED CASE CAST CATALOG_P CHAIN CHAR_P CHARACTER CHARACTERISTICS CHECK CHECKPOINT CLASS CLOSE CLUSTER COALESCE COLLATE COLUMN COMMENT COMMIT COMMITTED CONCURRENTLY CONFIGURATION CONNECTION CONSTRAINT CONSTRAINTS CONTENT_P CONTINUE_P CONVERSION_P COPY COST CREATE CREATEDB - CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P CURRENT_DATE CURRENT_ROLE + CREATEROLE CREATEUSER CROSS CSV CTYPE CURRENT_P + CURRENT_CATALOG CURRENT_DATE CURRENT_ROLE CURRENT_SCHEMA CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE DATA_P DATABASE DAY_P DEALLOCATE DEC DECIMAL_P DECLARE DEFAULT DEFAULTS @@ -1217,6 +1218,10 @@ { $$ = cat2_str(make_str("transaction"), $2); } | SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list { $$ = cat2_str(make_str("session characteristics as transaction"), $5); } + | CATALOG_P Sconst + { $$ = cat2_str(make_str("catalog"), $2); } + | SCHEMA Sconst + { $$ = cat2_str(make_str("schema"), $2); } | NAMES opt_encoding { $$ = cat2_str(make_str("names"), $2); } | ROLE ColId_or_Sconst @@ -4469,6 +4474,10 @@ { $$ = make_str("session_user"); } | USER { $$ = make_str("user"); } + | CURRENT_CATALOG + { $$ = make_str("current_catalog"); } + | CURRENT_SCHEMA + { $$ = make_str("current_schema"); } | CAST '(' a_expr AS Typename ')' { $$ = cat_str(5, make_str("cast("), $3, make_str("as"), $5, make_str(")")); } | EXTRACT '(' extract_list ')' @@ -6867,10 +6876,12 @@ | CONSTRAINT { $$ = make_str("constraint"); } | CREATE { $$ = make_str("create"); } | CURRENT_P { $$ = make_str("current"); } + | CURRENT_CATALOG { $$ = make_str("current_catalog"); } | CURRENT_DATE { $$ = make_str("current_date"); } | CURRENT_TIME { $$ = make_str("current_time"); } | CURRENT_TIMESTAMP { $$ = make_str("current_timestamp"); } | CURRENT_ROLE { $$ = make_str("current_role"); } + | CURRENT_SCHEMA { $$ = make_str("current_schema"); } | CURRENT_USER { $$ = make_str("current_user"); } | DEFAULT { $$ = make_str("default"); } | DEFERRABLE { $$ = make_str("deferrable"); }