I have a question: what are cases make the table: :table_name definition worthy to be duplicated?
In your example:
defmodule UserQuery do
use Defql
defselect get(conds), table: :users
definsert add(params), table: :users
defupdate update(params, conds), table: :users
defdelete delete(conds), table: :users
defquery get_by_name(name, limit) do
"SELECT * FROM users WHERE name = $name LIMIT $limit"
end
end
Maybe you consider (architecturally) the possibility to have get/add/etc. queries to different tables within one xQuery module?
The table name is not duplicated. When you write the whole query with defquery you type table name inside a query string. But if you want to use other macros with are some kind of shortcuts for common queries, you have to provide a table name, but you don’t type any SQL.
I can see use case where one table name per module has downsides. For example module
defmodule QueryHelpers do
use Defql
defselect get_users(conds), table: :users
defselect get_accounts(conds), table: :accounts
definsert add_user(params), table: :users
definsert add_account(params), table: :accounts
...
end
Im not saying it’s a good solution, but having one table name per module, you would enforce programmer to write module per database table. I understand convenience, but rather advise against such restriction.