ActiveRecordExtended
ActiveRecordExtended copied to clipboard
CTE with values does not work
Ex:
cte = { "user_names(name)" => "values('jimmy'),('tommy'),('gummy')" }
User.with(cte).joins("JOIN user_names ON users.name = user_names.name").order(:name).to_a
ActiveRecord -- User Load -- { :sql => "WITH \"user_names(name)\" AS (values('jimmy'),('tommy'),('gummy')) SELECT \"users\".* FROM \"users\" JOIN user_names ON users.name = user_names.name ORDER BY \"users\".\"name\" ASC", :allocations => 909, :cached => nil }
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "user_names" does not exist
LINE 1: ...y'),('gummy')) SELECT "users".* FROM "users" JOIN user_names...
^
Generated SQL:
User.with(cte).joins("JOIN user_names ON users.name = user_names.name").order(:name).to_sql
Actual SQL - Errored
"WITH \"user_names(name)\" AS (values('jimmy'),('tommy'),('gummy')) SELECT \"users\".* FROM \"users\" JOIN user_names ON users.name = user_names.name ORDER BY \"users\".\"name\" ASC"
Expected SQL
"WITH user_names(name) AS (values('jimmy'),('tommy'),('gummy')) SELECT \"users\".* FROM \"users\" JOIN user_names ON users.name = user_names.name ORDER BY \"users\".\"name\" ASC"
Observation:
As the cte name is quoted, it raise PG::UndefinedTable
Fix:
Try to avoid quoting when cte name/key is of such format, one of the way is to look for (
and )
inside the key.