C'è un modo per avere i nomi delle colonne ARel
di scrittura (sanificati, eventualmente con aliasing, ecc.) In CONCAT()
e altre funzioni SQL?Come utilizzare funzioni come CONCAT(), ecc. In ARel?
Ecco how to do it with AVG() ...
?> name = Arel::Attribute.new(Arel::Table.new(:countries), :name)
=> #<struct Arel::Attributes::Attribute [...]
?> population = Arel::Attribute.new(Arel::Table.new(:countries), :population)
=> #<struct Arel::Attributes::Attribute [...]
?> Country.select([name, population.average]).to_sql
=> "SELECT `countries`.`name`, AVG(`countries`.`population`) AS avg_id FROM `countries`"
(sì, lo so che avg_id
sarebbe lo stesso in ogni riga, solo cercando di illustrare la mia domanda)
Quindi cosa se volevo una funzione diversa ?
?> Country.select(xyz).to_sql # Arel::Concat.new(name, population) or something?
=> "SELECT CONCAT(`countries`.`name`, ' ', `countries`.`population`) AS concat_id FROM `countries`"
Grazie!
Sequel ha un modo di selezione di colonne come ' "..." significa lit' 'SQL letterale' invece di essere interpretato come una stringa per situazioni come questo.. Questo disabilita l'escape di SQL in modo da poter iniettare quello che vuoi. Non sei sicuro di quale sia l'equivalente di AREL, ma forse è un'idea. – tadman
Ho scritto un po 'più di dettaglio su questo me stesso qui –