Hello, Merlin. You wrote:
MM> 2011/6/1 Pavel Golub <pa...@microolap.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:pa...@gf.microolap.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers