Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1bcb666

Browse files
committed
don't call parent's triggers on children (this does not work with foreign keys anyway)
1 parentddde0e9 commit1bcb666

File tree

3 files changed

+10
-111
lines changed

3 files changed

+10
-111
lines changed

‎src/partition_filter.c

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,9 @@ partition_filter_exec(CustomScanState *node)
232232
ResetExprContext(econtext);
233233

234234
/* Replace parent table with a suitable partition */
235+
old_cxt=MemoryContextSwitchTo(estate->es_query_cxt);
235236
estate->es_result_relation_info=getResultRelInfo(selected_partid,state);
237+
MemoryContextSwitchTo(old_cxt);
236238

237239
returnslot;
238240
}
@@ -285,24 +287,16 @@ getResultRelInfo(Oid partid, PartitionFilterState *state)
285287
#defineCopyToResultRelInfo(field_name) \
286288
( resultRelInfo->field_name = state->savedRelInfo->field_name )
287289

288-
#defineResizeTriggerField(field_name,field_type) \
289-
do { \
290-
if (resultRelInfo->field_name) \
291-
pfree(resultRelInfo->field_name); \
292-
resultRelInfo->field_name = (field_type *) \
293-
palloc0(resultRelInfo->ri_TrigDesc->numtriggers * sizeof(field_type)); \
294-
} while (0)
295-
296-
ResultRelInfoHolder*resultRelInfoHandle;
290+
ResultRelInfoHolder*resultRelInfoHolder;
297291
boolfound;
298292

299-
resultRelInfoHandle=hash_search(state->result_rels_table,
293+
resultRelInfoHolder=hash_search(state->result_rels_table,
300294
(constvoid*)&partid,
301295
HASH_ENTER,&found);
302296

297+
/* If not found, create & cache new ResultRelInfo */
303298
if (!found)
304299
{
305-
boolgrown_up;
306300
ResultRelInfo*resultRelInfo= (ResultRelInfo*)palloc(sizeof(ResultRelInfo));
307301

308302
InitResultRelInfo(resultRelInfo,
@@ -312,24 +306,6 @@ getResultRelInfo(Oid partid, PartitionFilterState *state)
312306

313307
ExecOpenIndices(resultRelInfo,state->onConflictAction!=ONCONFLICT_NONE);
314308

315-
resultRelInfo->ri_TrigDesc=append_trigger_descs(resultRelInfo->ri_TrigDesc,
316-
state->savedRelInfo->ri_TrigDesc,
317-
&grown_up);
318-
if (grown_up)
319-
{
320-
ResizeTriggerField(ri_TrigFunctions,FmgrInfo);
321-
ResizeTriggerField(ri_TrigWhenExprs,List*);
322-
323-
if (resultRelInfo->ri_TrigInstrument)
324-
{
325-
pfree(resultRelInfo->ri_TrigInstrument);
326-
327-
resultRelInfo->ri_TrigInstrument=
328-
InstrAlloc(resultRelInfo->ri_TrigDesc->numtriggers,
329-
state->css.ss.ps.state->es_instrument);
330-
}
331-
}
332-
333309
/* Copy necessary fields from saved ResultRelInfo */
334310
CopyToResultRelInfo(ri_WithCheckOptions);
335311
CopyToResultRelInfo(ri_WithCheckOptionExprs);
@@ -341,14 +317,15 @@ getResultRelInfo(Oid partid, PartitionFilterState *state)
341317
/* ri_ConstraintExprs will be initialized by ExecRelCheck() */
342318
resultRelInfo->ri_ConstraintExprs=NULL;
343319

344-
resultRelInfoHandle->partid=partid;
345-
resultRelInfoHandle->resultRelInfo=resultRelInfo;
346-
347320
/* Make 'range table index' point to the parent relation */
348321
resultRelInfo->ri_RangeTableIndex=state->savedRelInfo->ri_RangeTableIndex;
322+
323+
/* Now fill the ResultRelInfo holder */
324+
resultRelInfoHolder->partid=partid;
325+
resultRelInfoHolder->resultRelInfo=resultRelInfo;
349326
}
350327

351-
returnresultRelInfoHandle->resultRelInfo;
328+
returnresultRelInfoHolder->resultRelInfo;
352329
}
353330

354331
/*

‎src/utils.c

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -279,81 +279,6 @@ check_rinfo_for_partitioned_attr(List *rinfo, Index varno, AttrNumber varattno)
279279
return false;
280280
}
281281

282-
/*
283-
* Append trigger info contained in 'more' to 'src', both remain unmodified.
284-
*
285-
* This allows us to execute some of main table's triggers on children.
286-
* See ExecInsert() for more details.
287-
*/
288-
TriggerDesc*
289-
append_trigger_descs(TriggerDesc*src,TriggerDesc*more,bool*grown_up)
290-
{
291-
#defineCopyToTriggerDesc(bool_field_name) \
292-
( new_desc->bool_field_name |= (src->bool_field_name || more->bool_field_name) )
293-
294-
TriggerDesc*new_desc= (TriggerDesc*)palloc0(sizeof(TriggerDesc));
295-
Trigger*cur_trigger;
296-
inti;
297-
298-
/* Quick choices */
299-
if (!src&& !more)
300-
{
301-
*grown_up= false;
302-
returnNULL;
303-
}
304-
elseif (!src)
305-
{
306-
*grown_up= true;/* expand space for new triggers */
307-
returnmore;
308-
}
309-
elseif (!more)
310-
{
311-
*grown_up= false;/* no new triggers will be added */
312-
returnsrc;
313-
}
314-
315-
*grown_up= true;
316-
new_desc->numtriggers=src->numtriggers+more->numtriggers;
317-
new_desc->triggers= (Trigger*)palloc(new_desc->numtriggers*sizeof(Trigger));
318-
319-
cur_trigger=new_desc->triggers;
320-
321-
/* Copy triggers from 'a' */
322-
for (i=0;i<src->numtriggers;i++)
323-
memcpy(cur_trigger++,&(src->triggers[i]),sizeof(Trigger));
324-
325-
/* Copy triggers from 'b' */
326-
for (i=0;i<more->numtriggers;i++)
327-
memcpy(cur_trigger++,&(more->triggers[i]),sizeof(Trigger));
328-
329-
/* Copy insert bool flags */
330-
CopyToTriggerDesc(trig_insert_before_row);
331-
CopyToTriggerDesc(trig_insert_after_row);
332-
CopyToTriggerDesc(trig_insert_instead_row);
333-
CopyToTriggerDesc(trig_insert_before_statement);
334-
CopyToTriggerDesc(trig_insert_after_statement);
335-
336-
/* Copy update bool flags */
337-
CopyToTriggerDesc(trig_update_before_row);
338-
CopyToTriggerDesc(trig_update_after_row);
339-
CopyToTriggerDesc(trig_update_instead_row);
340-
CopyToTriggerDesc(trig_update_before_statement);
341-
CopyToTriggerDesc(trig_update_after_statement);
342-
343-
/* Copy delete bool flags */
344-
CopyToTriggerDesc(trig_delete_before_row);
345-
CopyToTriggerDesc(trig_delete_after_row);
346-
CopyToTriggerDesc(trig_delete_instead_row);
347-
CopyToTriggerDesc(trig_delete_before_statement);
348-
CopyToTriggerDesc(trig_delete_after_statement);
349-
350-
/* Copy truncate bool flags */
351-
CopyToTriggerDesc(trig_truncate_before_statement);
352-
CopyToTriggerDesc(trig_truncate_after_statement);
353-
354-
returnnew_desc;
355-
}
356-
357282
/*
358283
* Get BTORDER_PROC for two types described by Oids
359284
*/

‎src/utils.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ List * build_index_tlist(PlannerInfo *root,
3636
IndexOptInfo*index,
3737
RelationheapRelation);
3838
voidchange_varnos(Node*node,Oidold_varno,Oidnew_varno);
39-
TriggerDesc*append_trigger_descs(TriggerDesc*src,
40-
TriggerDesc*more,
41-
bool*grown_up);
4239

4340
/*
4441
* Rowmark processing.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp