Vraag Hoe dynamische SQL-query's te schrijven met sql "" "interpolatie in slick


Ik ben nieuw bij Scala en Slick en probeer een gewone SQL-query met Slick-interpolatie te schrijven.

Zaak 1: Ik wil de code generaliseren, zodat query's worden opgeslagen als constanten.

bijvoorbeeld:

val SQL_ALL_TABLE_METADATA: String = """SELECT DISTINCT table_name, column_name, data_type
                                            FROM information_schema.columns
                                                    WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name""";

En maak een duidelijke query van constant iets als

var plainQuery = sql"""$SQL_ALL_TABLE_METADATA""".as[List[String]]

Case 2: Vervang een deel van de query

Bijvoorbeeld: krijg informatie over kolom f_name uit tabel 'table1'

var column= "f_name"
var plainQuery = sql"""SELECT $column FROM table1""".as[String]

Wanneer ik de bovenstaande gevallen probeer, werkt het niet omdat het lijkt alsof de query statisch bindend is tijdens het compileren.

Houd er rekening mee dat ik vanaf nu eenvoudige SQL wil gebruiken en in de toekomst geavanceerde Slick API wil gebruiken.


12
2017-12-06 06:56


oorsprong


antwoorden:


Zaak 1

Waarom niet gewoon dit hebben?

val SQL_ALL_TABLE_METADATA: StaticQuery = sql"""SELECT DISTINCT table_name, column_name, data_type
                                            FROM information_schema.columns
                                                    WHERE table_schema = 'apollo' OR table_schema = 'dpa' ORDER BY table_name"""

var plainQuery = SQL_ALL_TABLE_METADATA.as[List[String]]

Case 2

Gebruik #$ in plaats van $

var column= "f_name"
var plainQuery = sql"""SELECT #$column FROM table1""".as[String]

12
2017-12-06 13:26