MCPcopy Create free account
hub / github.com/apache/cloudberry / CopyTriggerDesc

Function CopyTriggerDesc

src/backend/commands/trigger.c:1963–2013  ·  view source on GitHub ↗

* Copy a TriggerDesc data structure. * * The copy is allocated in the current memory context. */

Source from the content-addressed store, hash-verified

1961 * The copy is allocated in the current memory context.
1962 */
1963TriggerDesc *
1964CopyTriggerDesc(TriggerDesc *trigdesc)
1965{
1966 TriggerDesc *newdesc;
1967 Trigger *trigger;
1968 int i;
1969
1970 if (trigdesc == NULL || trigdesc->numtriggers <= 0)
1971 return NULL;
1972
1973 newdesc = (TriggerDesc *) palloc(sizeof(TriggerDesc));
1974 memcpy(newdesc, trigdesc, sizeof(TriggerDesc));
1975
1976 trigger = (Trigger *) palloc(trigdesc->numtriggers * sizeof(Trigger));
1977 memcpy(trigger, trigdesc->triggers,
1978 trigdesc->numtriggers * sizeof(Trigger));
1979 newdesc->triggers = trigger;
1980
1981 for (i = 0; i < trigdesc->numtriggers; i++)
1982 {
1983 trigger->tgname = pstrdup(trigger->tgname);
1984 if (trigger->tgnattr > 0)
1985 {
1986 int16 *newattr;
1987
1988 newattr = (int16 *) palloc(trigger->tgnattr * sizeof(int16));
1989 memcpy(newattr, trigger->tgattr,
1990 trigger->tgnattr * sizeof(int16));
1991 trigger->tgattr = newattr;
1992 }
1993 if (trigger->tgnargs > 0)
1994 {
1995 char **newargs;
1996 int16 j;
1997
1998 newargs = (char **) palloc(trigger->tgnargs * sizeof(char *));
1999 for (j = 0; j < trigger->tgnargs; j++)
2000 newargs[j] = pstrdup(trigger->tgargs[j]);
2001 trigger->tgargs = newargs;
2002 }
2003 if (trigger->tgqual)
2004 trigger->tgqual = pstrdup(trigger->tgqual);
2005 if (trigger->tgoldtable)
2006 trigger->tgoldtable = pstrdup(trigger->tgoldtable);
2007 if (trigger->tgnewtable)
2008 trigger->tgnewtable = pstrdup(trigger->tgnewtable);
2009 trigger++;
2010 }
2011
2012 return newdesc;
2013}
2014
2015/*
2016 * Free a TriggerDesc data structure.

Callers 2

RelationBuildTriggersFunction · 0.85
InitResultRelInfoFunction · 0.85

Calls 2

pallocFunction · 0.50
pstrdupFunction · 0.50

Tested by

no test coverage detected