Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/pog_ffi.erl
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ start(Config) ->
query(Pool, Sql, Arguments, Timeout) ->
Res = case Pool of
{single_connection, Conn} ->
pgo_handler:extended_query(Conn, Sql, Arguments, #{});
DecodeOpts = element(11, Conn),
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a conn as defined in pgo_internal. Perhaps we could use the record field access syntax by importing that header file (which would be the less fragile way to do this rather than use tuple indexing). That said, I think this module is not part of PGO's public API, so I don't know if we can use it.

@tsloughter Do you have any guidance here?

Looking at the definition of extended_query/5 it's not clear to me why it takes the decode options twice, once in the conn and once as the 4th argument. Is there a way to either get the function to use the decode options from the conn, or for our code to get the decode options out of the conn?

pgo_handler:extended_query(Conn, Sql, Arguments, DecodeOpts, #{});
{pool, Name} ->
Options = #{
pool => Name,
Expand Down
14 changes: 13 additions & 1 deletion test/pog_test.gleam
Original file line number Diff line number Diff line change
Expand Up @@ -515,13 +515,25 @@ pub fn expected_maps_test() {
VALUES
(DEFAULT, 'neo', true, ARRAY ['black'], '2022-10-10 11:30:30', '2020-03-04')
RETURNING
id"
id, name"

let assert Ok(pog.Returned(rows: [id], ..)) =
pog.query(sql)
|> pog.returning(decode.at(["id"], decode.int))
|> pog.execute(db.data)

let assert Ok(pog.Returned(1, ["neo"])) =
pog.transaction(db.data, fn(conn) {
let assert Ok(returned) =
pog.query(sql)
|> pog.returning(decode.at(["name"], decode.string))
|> pog.execute(conn)

assert returned.rows == ["neo"]

Ok(returned)
})
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Split this into a new test please, and add a comment explaining what is being tested


let assert Ok(returned) =
pog.query("SELECT * FROM cats WHERE id = $1")
|> pog.parameter(pog.int(id))
Expand Down