2015-10-23 21 views
10

Sto tentando di stampare un'istruzione Slick2 SQL interpolata per il debug e tutto quello che ottengo è quello con punti interrogativi, ad es.Stampa query interpolata SQL in Slick

def query(name: String) = sql"SELECT MAX(age) FROM users WHERE name = $name".as[Int] 
println(query("Bob").getStatement) 

Le stampe di sopra di questo:

SELECT MAX(age) FROM users WHERE name = ? 

come posso fare Stampa questa:

SELECT MAX(age) FROM users WHERE name = 'Bob' 

Nota: Questa domanda non è un duplicato di this

+1

Il problema che si sta tentando di risolvere non è strettamente correlato a slick: slick crea istruzioni preparate a livello di JDBC e quelle sono stampate in quel modo. Sospetto che dovresti esaminare come stampare le dichiarazioni preparate da JDBC piuttosto che focalizzare la tua attenzione sulla chiazza di petrolio. Non sono sicuro che ci sia un modo per farlo in JDBC. –

risposta

2

Dalla chiazza di petrolio documentation: "È possibile utilizzare # $ anziché $ per ottenere il valore letterale inserito direttamente nella query ".

//note the '#' 
def query(name : String) = sql"SELECT MAX(age) FROM users WHERE name = '#$name'".as[Int] 
+0

No, non voglio '# $' dato che serve per unire parti dell'istruzione SQL stessa (ad esempio nomi di tabelle, ecc.). Questo produrrebbe un SQL non corretto poiché farebbe "where name = Bob' invece di" where name = 'Bob''. Voglio '$' per legare le variabili ... – pathikrit

+0

Questo non funzionerà anche per i primitivi es: 'def query (birthdate: LocalDate) = sql" SELEZIONA MAX (età) DEGLI utenti DOVE compleanno> $ data di nascita ". come [Int] ' Qui, se ho il implicito corretto nell'ambito, verrà convertito nella corretta variabile di binding SQL. Se uso '# $', metterebbe semplicemente '.toString' di' LocalDate', che potrei non volere. – pathikrit

+0

Ho aggiunto le virgolette singole nella query per produrre sql corretto. Non so cosa vorreste che println mostrasse per "non primitivi" poiché questi sono gli unici tipi di valori che possono entrare in una query sql ... –

3

Probabilmente si desidera aggiungere quanto segue al application.conf

logger.scala.slick.session=DEBUG 

Questo dovrebbe mostrare stringhe di query compilati nella console.

+0

Ho un'app Play. L'ho aggiunto a entrambi i miei application.conf e l'ho aggiunto al mio logger.xml: '' Ma, non lo vedo ... – pathikrit

+0

Cosa succede quando si passa al livello di registrazione su "DEBUG" in logger.xml? –

+0

Stesso. Ho anche eseguito il downgrade a DEBUG. Niente. Sono su Slick 2.0 + Play 2.2 – pathikrit