* Copy a TriggerDesc data structure. * * The copy is allocated in the current memory context. */
| 1961 | * The copy is allocated in the current memory context. |
| 1962 | */ |
| 1963 | TriggerDesc * |
| 1964 | CopyTriggerDesc(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. |
no test coverage detected