Re: minimal update - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: minimal update |
Date | |
Msg-id | 200805080116.m481GuH15769@momjian.us Whole thread Raw |
In response to | Re: minimal update (Andrew Dunstan <andrew@dunslane.net>) |
Responses |
Re: minimal update
|
List | pgsql-hackers |
Andrew Dunstan wrote: > > Not that I know of. I never saw Gurjeet's completed code. This is Gurjeet's code, but it is not complete. http://archives.postgresql.org/pgsql-hackers/2008-03/msg00668.php --------------------------------------------------------------------------- > > 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 > >> > > > > -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + If your life is a hard drive, Christ can be your backup. +
pgsql-hackers by date: