1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-05 23:56:58 +03:00

Avoid generating bad remote SQL for INSERT ... DEFAULT VALUES.

"INSERT INTO foo() VALUES ()" is invalid syntax, so don't do that.
This commit is contained in:
Tom Lane 2013-03-11 14:26:05 -04:00
parent 41eef0ff75
commit 8f9cc41daf

View File

@ -505,38 +505,44 @@ deparseInsertSql(StringInfo buf, PlannerInfo *root, Index rtindex,
appendStringInfoString(buf, "INSERT INTO "); appendStringInfoString(buf, "INSERT INTO ");
deparseRelation(buf, rte->relid); deparseRelation(buf, rte->relid);
appendStringInfoString(buf, "(");
first = true; if (targetAttrs)
foreach(lc, targetAttrs)
{ {
int attnum = lfirst_int(lc); appendStringInfoString(buf, "(");
Form_pg_attribute attr = tupdesc->attrs[attnum - 1];
Assert(!attr->attisdropped); first = true;
foreach(lc, targetAttrs)
{
int attnum = lfirst_int(lc);
Form_pg_attribute attr = tupdesc->attrs[attnum - 1];
if (!first) Assert(!attr->attisdropped);
appendStringInfoString(buf, ", ");
first = false;
deparseColumnRef(buf, rtindex, attnum, root); if (!first)
appendStringInfoString(buf, ", ");
first = false;
deparseColumnRef(buf, rtindex, attnum, root);
}
appendStringInfoString(buf, ") VALUES (");
pindex = 1;
first = true;
foreach(lc, targetAttrs)
{
if (!first)
appendStringInfoString(buf, ", ");
first = false;
appendStringInfo(buf, "$%d", pindex);
pindex++;
}
appendStringInfoString(buf, ")");
} }
else
appendStringInfoString(buf, ") VALUES ("); appendStringInfoString(buf, " DEFAULT VALUES");
pindex = 1;
first = true;
foreach(lc, targetAttrs)
{
if (!first)
appendStringInfoString(buf, ", ");
first = false;
appendStringInfo(buf, "$%d", pindex);
pindex++;
}
appendStringInfoString(buf, ")");
if (returningList) if (returningList)
deparseReturningList(buf, root, rtindex, rel, returningList); deparseReturningList(buf, root, rtindex, rel, returningList);