Re: minimal update - Mailing list pgsql-hackers
From | Andrew Dunstan |
---|---|
Subject | Re: minimal update |
Date | |
Msg-id | 48224B6A.9010400@dunslane.net Whole thread Raw |
In response to | Re: minimal update (Bruce Momjian <bruce@momjian.us>) |
Responses |
Re: minimal update
(Bruce Momjian <bruce@momjian.us>)
|
List | pgsql-hackers |
Not that I know of. I never saw Gurjeet's completed code. cheers andrew Bruce Momjian wrote: > Is there a version of this patch ready for application? > > --------------------------------------------------------------------------- > > Gurjeet Singh wrote: > >> On Tue, Mar 18, 2008 at 7:46 PM, Andrew Dunstan <andrew@dunslane.net> wrote: >> >> >>> >>> >>> >>> Gurjeet Singh wrote: >>> >>>> On Fri, Mar 7, 2008 at 9:40 PM, Bruce Momjian <bruce@momjian.us >>>> <mailto:bruce@momjian.us>> wrote: >>>> >>>> >>>> I assume don't want a TODO for this? (Suppress UPDATE no changed >>>> columns) >>>> >>>> >>>> I am starting to implement this. Do we want to have this trigger >>>> function in the server, or in an external module? >>>> >>>> >>>> >>> I have the trigger part of this done, in fact. What remains to be done >>> is to add it to the catalog and document it. The intention is to make it >>> a builtin as it will be generally useful. If you want to work on the >>> remaining parts then I will happily ship you the C code for the trigger. >>> >>> >>> >> In fact, I just finished writing the C code and including it in the catalog >> (Just tested that it's visible in the catalog). I will test it to see if it >> does actually do what we want it to. >> >> I have incorporated all the suggestions above. Would love to see your code >> in the meantime. >> >> Here's the C code: >> >> Datum >> trig_ignore_duplicate_updates( PG_FUNCTION_ARGS ) >> { >> TriggerData *trigData; >> HeapTuple oldTuple; >> HeapTuple newTuple; >> >> if (!CALLED_AS_TRIGGER(fcinfo)) >> elog(ERROR, "trig_ignore_duplicate_updates: not called by trigger >> manager."); >> >> if( !TRIGGER_FIRED_BY_UPDATE(trigData->tg_event) >> && !TRIGGER_FIRED_BEFORE(trigData->tg_event) >> && !TRIGGER_FIRED_FOR_ROW(trigData->tg_event) ) >> { >> elog(ERROR, "trig_ignore_duplicate_updates: Can only be executed for >> UPDATE, BEFORE and FOR EACH ROW."); >> } >> >> trigData = (TriggerData *) fcinfo->context; >> oldTuple = trigData->tg_trigtuple; >> newTuple = trigData->tg_newtuple; >> >> if (newTuple->t_len == oldTuple->t_len >> && newTuple->t_data->t_hoff == oldTuple->t_data->t_hoff >> && HeapTupleHeaderGetNatts(newTuple->t_data) == >> HeapTupleHeaderGetNatts(oldTuple->t_data) >> && (newTuple->t_data->t_infomask & ~HEAP_XACT_MASK) >> == (oldTuple->t_data->t_infomask & ~HEAP_XACT_MASK) >> && memcmp( (char*)(newTuple->t_data) + offsetof(HeapTupleHeaderData, >> t_bits), >> (char*)(oldTuple->t_data) + offsetof(HeapTupleHeaderData, >> t_bits), >> newTuple->t_len - offsetof(HeapTupleHeaderData, t_bits) >> ) == 0 ) >> { >> /* return without crating a new tuple */ >> return PointerGetDatum( NULL ); >> } >> >> return PointerGetDatum( trigData->tg_newtuple ); >> } >> >> >> >> -- >> gurjeet[.singh]@EnterpriseDB.com >> singh.gurjeet@{ gmail | hotmail | indiatimes | yahoo }.com >> >> EnterpriseDB http://www.enterprisedb.com >> >> 17? 29' 34.37"N, 78? 30' 59.76"E - Hyderabad * >> 18? 32' 57.25"N, 73? 56' 25.42"E - Pune >> 37? 47' 19.72"N, 122? 24' 1.69" W - San Francisco >> >> http://gurjeet.frihost.net >> >> Mail sent from my BlackLaptop device >> > >
pgsql-hackers by date: