Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
71e9f3b0
Commit
71e9f3b0
authored
Jul 01, 2003
by
Peter Eisentraut
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Change EXECUTE INTO to CREATE TABLE AS EXECUTE.
parent
df08f5c0
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
52 additions
and
51 deletions
+52
-51
doc/src/sgml/ref/create_table_as.sgml
doc/src/sgml/ref/create_table_as.sgml
+22
-14
doc/src/sgml/ref/execute.sgml
doc/src/sgml/ref/execute.sgml
+2
-21
src/backend/commands/prepare.c
src/backend/commands/prepare.c
+8
-8
src/backend/parser/gram.y
src/backend/parser/gram.y
+16
-4
src/test/regress/expected/prepare.out
src/test/regress/expected/prepare.out
+2
-2
src/test/regress/sql/prepare.sql
src/test/regress/sql/prepare.sql
+2
-2
No files found.
doc/src/sgml/ref/create_table_as.sgml
View file @
71e9f3b0
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table_as.sgml,v 1.1
3 2003/05/04 00:03:55 tgl
Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_table_as.sgml,v 1.1
4 2003/07/01 00:04:31 petere
Exp $
PostgreSQL documentation
-->
...
...
@@ -26,11 +26,12 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name
<para>
<command>CREATE TABLE AS</command> creates a table and fills it
with data computed by a <command>SELECT</command> command. The
table columns have the names and data types associated with the
output columns of the <command>SELECT</command> (except that you
can override the column names by giving an explicit list of new
column names).
with data computed by a <command>SELECT</command> command or an
<command>EXECUTE</command> that runs a prepared
<command>SELECT</command> command. The table columns have the
names and data types associated with the output columns of the
<command>SELECT</command> (except that you can override the column
names by giving an explicit list of new column names).
</para>
<para>
...
...
@@ -73,7 +74,9 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name
<para>
The name of a column in the new table. If column names are not
provided, they are taken from the output column names of the
query.
query. If the table is created out of an
<command>EXECUTE</command> command, a column name list can
currently not be specified.
</para>
</listitem>
</varlistentry>
...
...
@@ -82,10 +85,12 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name
<term><replaceable>query</replaceable></term>
<listitem>
<para>
A query statement (that is, a <command>SELECT</command>
command). Refer to
<xref linkend="sql-select" endterm="sql-select-title">
for a description of the allowed syntax.
A query statement (that is, a <command>SELECT</command> command
or an <command>EXECUTE</command> command that runs a prepared
<command>SELECT</command> command). Refer to <xref
linkend="sql-select" endterm="sql-select-title"> or <xref
linkend="sql-execute" endterm="sql-execute-title">,
respectively, for a description of the allowed syntax.
</para>
</listitem>
</varlistentry>
...
...
@@ -96,9 +101,11 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name
<title>Diagnostics</title>
<para>
Refer to <xref linkend="sql-createtable" endterm="sql-createtable-title"> and
<xref linkend="sql-select" endterm="sql-select-title">
for a summary of possible output messages.
Refer to <xref linkend="sql-createtable"
endterm="sql-createtable-title">, <xref linkend="sql-select"
endterm="sql-select-title">, and <xref linkend="sql-execute"
endterm="sql-execute-title"> for a summary of possible output
messages.
</para>
</refsect1>
...
...
@@ -131,6 +138,7 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE <replaceable>table_name
<simplelist type="inline">
<member><xref linkend="sql-createtable" endterm="sql-createtable-title"></member>
<member><xref linkend="sql-createview" endterm="sql-createview-title"></member>
<member><xref linkend="sql-execute" endterm="sql-execute-title"></member>
<member><xref linkend="sql-select" endterm="sql-select-title"></member>
<member><xref linkend="sql-selectinto" endterm="sql-selectinto-title"></member>
</simplelist>
...
...
doc/src/sgml/ref/execute.sgml
View file @
71e9f3b0
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/execute.sgml,v 1.
4 2003/04/26 23:56:5
1 petere Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/execute.sgml,v 1.
5 2003/07/01 00:04:3
1 petere Exp $
PostgreSQL documentation
-->
...
...
@@ -16,7 +16,7 @@ PostgreSQL documentation
<refsynopsisdiv>
<synopsis>
EXECUTE <replaceable class="PARAMETER">plan_name</replaceable> [ (<replaceable class="PARAMETER">parameter</replaceable> [, ...] ) ]
[ INTO [ TEMPORARY | TEMP ] <replaceable class="PARAMETER">table</replaceable> ]
EXECUTE <replaceable class="PARAMETER">plan_name</replaceable> [ (<replaceable class="PARAMETER">parameter</replaceable> [, ...] ) ]
</synopsis>
</refsynopsisdiv>
...
...
@@ -40,13 +40,6 @@ EXECUTE <replaceable class="PARAMETER">plan_name</replaceable> [ (<replaceable c
name of a prepared statement must be unique within a database session.
</para>
<para>
Like <command>SELECT INTO</command>, <command>EXECUTE</command> can
store the results of executing a query into a newly-created
table, by specifying an <literal>INTO</> clause. For more information on this behavior,
see <xref linkend="sql-selectinto" endterm="sql-selectinto-title">.
</para>
<para>
For more information on the creation and usage of prepared statements,
see <xref linkend="sql-prepare" endterm="sql-prepare-title">.
...
...
@@ -78,18 +71,6 @@ EXECUTE <replaceable class="PARAMETER">plan_name</replaceable> [ (<replaceable c
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable class="PARAMETER">table</replaceable></term>
<listitem>
<para>
The name of the table in which to store the results of executing
the statement (if it is a <command>SELECT</command>). If no
table is specified, the results are returned to the client (as
normal).
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
...
...
src/backend/commands/prepare.c
View file @
71e9f3b0
...
...
@@ -10,7 +10,7 @@
* Copyright (c) 2002-2003, PostgreSQL Global Development Group
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/prepare.c,v 1.1
8 2003/05/08 18:16:36 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/prepare.c,v 1.1
9 2003/07/01 00:04:31 petere
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -140,10 +140,10 @@ ExecuteQuery(ExecuteStmt *stmt, DestReceiver *dest)
portal
=
CreateNewPortal
();
/*
* For
EXECUTE INTO, make a copy of the stored query so that we can
*
modify its destination (yech, but INTO has always been ugly).
*
For regular EXECUTE we can just use the stored query where it sits,
* since the executor is read-only.
* For
CREATE TABLE / AS EXECUTE, make a copy of the stored query
*
so that we can modify its destination (yech, but this has
*
always been ugly). For regular EXECUTE we can just use the
* s
tored query where it sits, s
ince the executor is read-only.
*/
if
(
stmt
->
into
)
{
...
...
@@ -159,10 +159,10 @@ ExecuteQuery(ExecuteStmt *stmt, DestReceiver *dest)
qcontext
=
PortalGetHeapMemory
(
portal
);
if
(
length
(
query_list
)
!=
1
)
elog
(
ERROR
,
"
INTO clause specified for non-SELECT query
"
);
elog
(
ERROR
,
"
prepared statement is not a SELECT
"
);
query
=
(
Query
*
)
lfirst
(
query_list
);
if
(
query
->
commandType
!=
CMD_SELECT
)
elog
(
ERROR
,
"
INTO clause specified for non-SELECT query
"
);
elog
(
ERROR
,
"
prepared statement is not a SELECT
"
);
query
->
into
=
copyObject
(
stmt
->
into
);
MemoryContextSwitchTo
(
oldContext
);
...
...
@@ -519,7 +519,7 @@ ExplainExecuteQuery(ExplainStmt *stmt, TupOutputState *tstate)
if
(
execstmt
->
into
)
{
if
(
query
->
commandType
!=
CMD_SELECT
)
elog
(
ERROR
,
"
INTO clause specified for non-SELECT query
"
);
elog
(
ERROR
,
"
prepared statement is not a SELECT
"
);
/* Copy the query so we can modify it */
query
=
copyObject
(
query
);
...
...
src/backend/parser/gram.y
View file @
71e9f3b0
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.42
3 2003/06/29 00:33:43 tgl
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.42
4 2003/07/01 00:04:31 petere
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -4116,17 +4116,29 @@ PreparableStmt:
/*****************************************************************************
*
*
QUERY:
*
EXECUTE <plan_name> [(params, ...)] [INTO ...
]
*
EXECUTE <plan_name> [(params, ...)]
*
CREATE TABLE <name> AS EXECUTE <plan_name> [(params, ...)
]
*
*****************************************************************************/
ExecuteStmt: EXECUTE name execute_param_clause
into_clause
ExecuteStmt: EXECUTE name execute_param_clause
{
ExecuteStmt *n = makeNode(ExecuteStmt);
n->name = $2;
n->params = $3;
n->into = NULL;
$$ = (Node *) n;
}
| CREATE OptTemp TABLE qualified_name OptCreateAs AS EXECUTE name execute_param_clause
{
ExecuteStmt *n = makeNode(ExecuteStmt);
n->name = $8;
n->params = $9;
$4->istemp = $2;
n->into = $4;
if ($5)
elog(ERROR, "column name list not allowed in CREATE TABLE / AS EXECUTE");
/* ... because it's not implemented, but it could be */
$$ = (Node *) n;
}
;
...
...
src/test/regress/expected/prepare.out
View file @
71e9f3b0
...
...
@@ -80,10 +80,10 @@ ERROR: Parameter $3 of type boolean cannot be coerced into the expected type do
-- invalid type
PREPARE q4(nonexistenttype) AS SELECT $1;
ERROR: Type "nonexistenttype" does not exist
--
execute into
--
create table as execute
PREPARE q5(int, text) AS
SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2;
EXECUTE q5(200, 'DTAAAA') INTO TEMPORARY q5_prep_results
;
CREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA')
;
SELECT * FROM q5_prep_results;
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
...
...
src/test/regress/sql/prepare.sql
View file @
71e9f3b0
...
...
@@ -38,8 +38,8 @@ EXECUTE q3(5::smallint, 10.5::float, false, 500::oid, 4::bigint, 'bytea');
-- invalid type
PREPARE
q4
(
nonexistenttype
)
AS
SELECT
$
1
;
--
execute into
--
create table as execute
PREPARE
q5
(
int
,
text
)
AS
SELECT
*
FROM
tenk1
WHERE
unique1
=
$
1
OR
stringu1
=
$
2
;
EXECUTE
q5
(
200
,
'DTAAAA'
)
INTO
TEMPORARY
q5_prep_results
;
CREATE
TEMPORARY
TABLE
q5_prep_results
AS
EXECUTE
q5
(
200
,
'DTAAAA'
)
;
SELECT
*
FROM
q5_prep_results
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment