Here is another patch for relatively redundant SQL:2008 functionality.
They standardized in CURRENT_CATALOG and CURRENT_SCHEMA (without
parentheses, as usual) for what we have as current_database() and
current_schema(). They also added SET CATALOG and SET SCHEMA. SET
CATALOG won't work in PostgreSQL, and SET SCHEMA is a subset of SET
search_path.
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
- (<literal>"</>). The text matching the portion of the pattern
+ (<literal>"</>). <!-- " font-lock sanity -->
+ The text matching the portion of the pattern
between these markers is returned.
</para>
@@ -10933,13 +10934,19 @@
<tbody>
<row>
+ <entry><literal><function>current_catalog</function></literal></entry>
+ <entry><type>name</type></entry>
+ <entry>name of current database (called <quote>catalog</quote> in the SQL standard)</entry>
+ </row>
+
+ <row>
<entry><literal><function>current_database</function>()</literal></entry>
<entry><type>name</type></entry>
<entry>name of current database</entry>
</row>
<row>
- <entry><literal><function>current_schema</function>()</literal></entry>
+ <entry><literal><function>current_schema</function>[()]</literal></entry>
<entry><type>name</type></entry>
<entry>name of current schema</entry>
</row>
@@ -11056,6 +11063,10 @@
</indexterm>
<indexterm>
+ <primary>current_catalog</primary>
+ </indexterm>
+
+ <indexterm>
<primary>current_database</primary>
</indexterm>
@@ -11083,9 +11094,12 @@
<note>
<para>
- <function>current_user</function>, <function>session_user</function>, and
- <function>user</function> have special syntactic status in <acronym>SQL</acronym>:
- they must be called without trailing parentheses.
+ <function>current_catalog</function>, <function>current_schema</function>,
+ <function>current_user</function>, <function>session_user</function>,
+ and <function>user</function> have special syntactic status
+ in <acronym>SQL</acronym>: they must be called without trailing
+ parentheses (optional in PostgreSQL in the case
+ of <function>current_schema</function>).
</para>
</note>
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 @@
<variablelist>
<varlistentry>
+ <term><literal>SCHEMA</literal></term>
+ <listitem>
+ <para>
+ <literal>SET SCHEMA '<replaceable>value</>'</> is an alias for
+ <literal>SET search_path TO <replaceable>value</></>. Only one
+ schema can be specified using this syntax.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><literal>NAMES</literal></term>
<listitem>
<para>
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"); }