From: | Pavel Golub <pavel(at)microolap(dot)com> |
---|---|
To: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, <pgsql-interfaces(at)postgresql(dot)org> |
Subject: | Re: [HACKERS] PQdeleteTuple function in libpq |
Date: | 2011-06-02 08:24:18 |
Message-ID: | 16110385996.20110602112418@gf.microolap.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | Postg토토 사이트 추천SQL pgsql-interfaces |
Hello, Merlin.
You wrote:
MM> 2011/6/1 Pavel Golub <pavel(at)microolap(dot)com>:
>> Hello.
>>
>> I'm some kind of PQdeleteTuple function will be very usefull in libpq.
>> Because right now after deleting some record I need refetch result
>> set, or mark tuple as deleted and this is headache for me.
>>
>> So I checked fe-exec.c sources and wrote this:
>>
>> int PQdeleteTuple(PGresult *src, int tup_num)
>> {
>> if (!src)
>> return NULL;
>>
>> int i,
>> field;
>>
>> /* Invalid tup_num, must be < ntups */
>> if (tup_num < 0 || tup_num >= src->ntups)
>> return FALSE;
>>
>> free(src->tuples[tup_num]);
>>
>> for (i = tup_num; i < src->ntups - 1; i++)
>> {
>> src->tuples[i] = src->tuples[i + 1];
>> }
>> src->ntups--;
>> return TRUE;
>> }
>>
>> But I'm pretty sure, that "free(src->tuples[tup_num])" is bullshit!
>> Because memory is allocated by pqResultAlloc, which in turn plays with
>> memory blocks and so on...
>>
>> Can anyone help me in this?
>>
>> PS I'm not a C guru, so don't please kick me hard. :)
MM> well, you have PQaddTuple, but this was exposed mainly for the purpose
MM> of building a PQresult from outside the libpq library -- not so much
MM> to remove the 'constness' property of the PGResult. I have no
MM> philosophical objection to making the PGresult able to be manipulated
MM> in that fashion (although others might).
From this point of view why we have PQmakeEmptyPGresult, PQcopyResult,
PQsetResultAttrs, PQsetvalue and PQresultAlloc? If we have these
functions I suppose we must have one more to delete (or hide) some
tuples/attributes.
MM> You could maybe just NULL
MM> out tuples[i] and add some logic to various places to check that, like
MM> in PQgetvalue.
This is what I call headache. In this case to know rows number I
cannot use PQntuples, but need to iterate through all tuples checking
them for NULL or smth.
MM> But before going down that road you need to make the case why this
MM> should be handled in the library and not in your code -- PGresult
MM> memory is slab allocated and therefore can only grow in size -- not
MM> shrink and as such is not so much designed as a general purpose client
MM> side dataset in the high level sense.
Thinking of this I propose to hide tuples and not to eliminate\free
them, because PQclear will free all PGResult resources.
MM> merlin
--
With best wishes,
Pavel mailto:pavel(at)gf(dot)microolap(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Golub | 2011-06-02 08:28:26 | Re: [HACKERS] PQdeleteTuple function in libpq |
Previous Message | Pavel Stehule | 2011-06-02 07:59:00 | Re: Hacking gram.y Error syntax error at or near "MERGEJOIN" |
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Golub | 2011-06-02 08:28:26 | Re: [HACKERS] PQdeleteTuple function in libpq |
Previous Message | Andrew Chernow | 2011-06-01 20:48:55 | Re: PQdeleteTuple function in libpq |