Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 4ccc5bd

Browse files
committed
Pull in tableoid for inheiritance with rowMarks
As noted by Etsuro Fujita [1] and Dean Rasheed[2], cb1ca4d changed ExecBuildAuxRowMark() to always look for the tableoid in the target list, but didn't also change preprocess_targetlist() to always include the tableoid. This resulted in errors with soon-to-be-added RLS with inheritance tests, and errors when using inheritance with foreign tables. Authors: Etsuro Fujita and Dean Rasheed (independently) Minor word-smithing on the comments by me. [1] 552CF0B6.8010006@lab.ntt.co.jp [2] CAEZATCVmFUfUOwwhnBTcgi6AquyjQ0-1fyKd0T3xBWJvn+xsFA@mail.gmail.com
1 parent 54a16df commit 4ccc5bd

File tree

2 files changed

+43
-43
lines changed

2 files changed

+43
-43
lines changed

contrib/postgres_fdw/expected/postgres_fdw.out

+26-26
Original file line numberDiff line numberDiff line change
@@ -3193,26 +3193,26 @@ select * from bar where f1 in (select f1 from foo) for update;
31933193
QUERY PLAN
31943194
----------------------------------------------------------------------------------------------
31953195
LockRows
3196-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3196+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
31973197
-> Hash Join
3198-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3198+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
31993199
Hash Cond: (bar.f1 = foo.f1)
32003200
-> Append
32013201
-> Seq Scan on public.bar
3202-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*
3202+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
32033203
-> Foreign Scan on public.bar2
3204-
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.tableoid, bar2.*
3204+
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
32053205
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR UPDATE
32063206
-> Hash
3207-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3207+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32083208
-> HashAggregate
3209-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3209+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32103210
Group Key: foo.f1
32113211
-> Append
32123212
-> Seq Scan on public.foo
3213-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3213+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32143214
-> Foreign Scan on public.foo2
3215-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3215+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32163216
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32173217
(22 rows)
32183218

@@ -3230,26 +3230,26 @@ select * from bar where f1 in (select f1 from foo) for share;
32303230
QUERY PLAN
32313231
----------------------------------------------------------------------------------------------
32323232
LockRows
3233-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3233+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
32343234
-> Hash Join
3235-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*, foo.ctid, foo.tableoid, foo.*
3235+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid, foo.ctid, foo.*, foo.tableoid
32363236
Hash Cond: (bar.f1 = foo.f1)
32373237
-> Append
32383238
-> Seq Scan on public.bar
3239-
Output: bar.f1, bar.f2, bar.ctid, bar.tableoid, bar.*
3239+
Output: bar.f1, bar.f2, bar.ctid, bar.*, bar.tableoid
32403240
-> Foreign Scan on public.bar2
3241-
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.tableoid, bar2.*
3241+
Output: bar2.f1, bar2.f2, bar2.ctid, bar2.*, bar2.tableoid
32423242
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR SHARE
32433243
-> Hash
3244-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3244+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32453245
-> HashAggregate
3246-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3246+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32473247
Group Key: foo.f1
32483248
-> Append
32493249
-> Seq Scan on public.foo
3250-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3250+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32513251
-> Foreign Scan on public.foo2
3252-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3252+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32533253
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32543254
(22 rows)
32553255

@@ -3272,37 +3272,37 @@ update bar set f2 = f2 + 100 where f1 in (select f1 from foo);
32723272
Foreign Update on public.bar2
32733273
Remote SQL: UPDATE public.loct2 SET f2 = $2 WHERE ctid = $1
32743274
-> Hash Join
3275-
Output: bar.f1, (bar.f2 + 100), bar.ctid, foo.ctid, foo.tableoid, foo.*
3275+
Output: bar.f1, (bar.f2 + 100), bar.ctid, foo.ctid, foo.*, foo.tableoid
32763276
Hash Cond: (bar.f1 = foo.f1)
32773277
-> Seq Scan on public.bar
32783278
Output: bar.f1, bar.f2, bar.ctid
32793279
-> Hash
3280-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3280+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32813281
-> HashAggregate
3282-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3282+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32833283
Group Key: foo.f1
32843284
-> Append
32853285
-> Seq Scan on public.foo
3286-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3286+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32873287
-> Foreign Scan on public.foo2
3288-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3288+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
32893289
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
32903290
-> Hash Join
3291-
Output: bar2.f1, (bar2.f2 + 100), bar2.f3, bar2.ctid, foo.ctid, foo.tableoid, foo.*
3291+
Output: bar2.f1, (bar2.f2 + 100), bar2.f3, bar2.ctid, foo.ctid, foo.*, foo.tableoid
32923292
Hash Cond: (bar2.f1 = foo.f1)
32933293
-> Foreign Scan on public.bar2
32943294
Output: bar2.f1, bar2.f2, bar2.f3, bar2.ctid
32953295
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct2 FOR UPDATE
32963296
-> Hash
3297-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3297+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
32983298
-> HashAggregate
3299-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3299+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
33003300
Group Key: foo.f1
33013301
-> Append
33023302
-> Seq Scan on public.foo
3303-
Output: foo.ctid, foo.tableoid, foo.*, foo.f1
3303+
Output: foo.ctid, foo.*, foo.tableoid, foo.f1
33043304
-> Foreign Scan on public.foo2
3305-
Output: foo2.ctid, foo2.tableoid, foo2.*, foo2.f1
3305+
Output: foo2.ctid, foo2.*, foo2.tableoid, foo2.f1
33063306
Remote SQL: SELECT f1, f2, f3, ctid FROM public.loct1
33073307
(37 rows)
33083308

src/backend/optimizer/prep/preptlist.c

+17-17
Original file line numberDiff line numberDiff line change
@@ -107,23 +107,6 @@ preprocess_targetlist(PlannerInfo *root, List *tlist)
107107
pstrdup(resname),
108108
true);
109109
tlist = lappend(tlist, tle);
110-
111-
/* if parent of inheritance tree, need the tableoid too */
112-
if (rc->isParent)
113-
{
114-
var = makeVar(rc->rti,
115-
TableOidAttributeNumber,
116-
OIDOID,
117-
-1,
118-
InvalidOid,
119-
0);
120-
snprintf(resname, sizeof(resname), "tableoid%u", rc->rowmarkId);
121-
tle = makeTargetEntry((Expr *) var,
122-
list_length(tlist) + 1,
123-
pstrdup(resname),
124-
true);
125-
tlist = lappend(tlist, tle);
126-
}
127110
}
128111
if (rc->allMarkTypes & (1 << ROW_MARK_COPY))
129112
{
@@ -139,6 +122,23 @@ preprocess_targetlist(PlannerInfo *root, List *tlist)
139122
true);
140123
tlist = lappend(tlist, tle);
141124
}
125+
126+
/* If parent of inheritance tree, always fetch the tableoid too. */
127+
if (rc->isParent)
128+
{
129+
var = makeVar(rc->rti,
130+
TableOidAttributeNumber,
131+
OIDOID,
132+
-1,
133+
InvalidOid,
134+
0);
135+
snprintf(resname, sizeof(resname), "tableoid%u", rc->rowmarkId);
136+
tle = makeTargetEntry((Expr *) var,
137+
list_length(tlist) + 1,
138+
pstrdup(resname),
139+
true);
140+
tlist = lappend(tlist, tle);
141+
}
142142
}
143143

144144
/*

0 commit comments

Comments
 (0)