elixir-ecto / db_connection

Database connection behaviour
http://hexdocs.pm/db_connection/DBConnection.html
309 stars 112 forks source link

Accessing a connection's state right after it connected #299

Open greg-rychlewski opened 1 year ago

greg-rychlewski commented 1 year ago

Background

I implemented data change notifications for the SQLite driver. Given a connection and a pid, whenever an insert/update/delete on the connection is performed, the SQLite NIF will send a message to the pid.

This works well on the driver level but on the Ecto level it's not so straight forward for a couple reasons:

  1. We are accessing a pool and not creating the connections ourselves directly
  2. The SQLite driver stores the handle for the database in the connection's state.

Why # 2 is relevant is because I thought about using :after_connect to hook the connections to the listener. But the only argument passed to it is %DBConnection{}, which doesn't have the database handle. Without access to the state it's not possible to use the SQLite connection.

Proposal/question

Would it make sense to allow users to supply a 2-arity function which receives the connection and the state? If the answer is yes, we also allow {m, f, a} so should that one be deprecated to avoid confusion (i.e. why is state not passed to mfa)?

josevalim commented 1 year ago

I would like to hold on this one for now because I think that SQLite should not be using db_connection. We have on going discussions about this on their issues tracker. :)

greg-rychlewski commented 1 year ago

Ah I'll take a look at that discussion. Thanks!