pgsql icon indicating copy to clipboard operation
pgsql copied to clipboard

Return values from INSERT are not parsed

Open hengestone opened this issue 6 years ago • 2 comments

For a pgsql_connection:extended_query of the form INSERT INTO address (v, acct_id, org_id,) VALUES ( $1, $2, $3) RETURNING id;

The return value is e.g. {{insert, 0, 1}, {[{record, <<00,08....>>}]}} I.e. the return value is not decoded from the raw binary as it is for a SELECT query.

Using pgsql_connection:simple_query instead, gives e.g. {{insert, 0, 1}, {[{21}]}}

It would be great to be able to use the set and return pattern as it eliminates one DB round trip.

hengestone avatar Jan 30 '19 20:01 hengestone

I am confused as there are tests with pgsql_connection:extended_query (or param_query which calls extended_query eventually) and INSERT ... RETURNING ... queries.

See: https://github.com/semiocast/pgsql/blob/master/test/pgsql_connection_test.erl#L382 and: https://github.com/semiocast/pgsql/blob/master/test/pgsql_connection_test.erl#L581

I believe there might be some problem with the decoding of the type of data you are returning, as decoding goes through two different paths whether the query is extended or simple, closely matching PostgreSQL protocol. Could you please provide a more complete case?

pguyot avatar Jan 31 '19 16:01 pguyot

Thanks, will do :+1:

hengestone avatar Feb 06 '19 19:02 hengestone