Commit 39c283e4 authored by Tom Lane's avatar Tom Lane

Fix _SPI_execute_plan() for CREATE TABLE IF NOT EXISTS foo AS ...

When IF NOT EXISTS was added to CREATE TABLE AS, this logic didn't get
the memo, possibly resulting in an Assert failure.  It looks like there
would have been no ill effects in a non-Assert build, though.  Back-patch
to 9.5 where the IF NOT EXISTS option was added.

Stas Kelvich
parent b0e40d18
......@@ -2217,15 +2217,23 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI,
*/
if (IsA(stmt, CreateTableAsStmt))
{
Assert(strncmp(completionTag, "SELECT ", 7) == 0);
_SPI_current->processed = pg_strtouint64(completionTag + 7,
NULL, 10);
CreateTableAsStmt *ctastmt = (CreateTableAsStmt *) stmt;
if (strncmp(completionTag, "SELECT ", 7) == 0)
_SPI_current->processed =
pg_strtouint64(completionTag + 7, NULL, 10);
else
{
/* Must be an IF NOT EXISTS that did nothing */
Assert(ctastmt->if_not_exists);
_SPI_current->processed = 0;
}
/*
* For historical reasons, if CREATE TABLE AS was spelled
* as SELECT INTO, return a special return code.
*/
if (((CreateTableAsStmt *) stmt)->is_select_into)
if (ctastmt->is_select_into)
res = SPI_OK_SELINTO;
}
else if (IsA(stmt, CopyStmt))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment