Генерация динамического SQL где предложение из коллекции Scala - PullRequest
0 голосов
/ 20 марта 2012

Я хочу сгенерировать динамическое предложение SQL where из коллекции Scala, например, Map

Пример, с объектом Map("firstName" -> "Chuck", "lastName" -> "Norris"), я хочу сгенерировать следующее предложение:

where firstName = 'Chuck'
and lastName = 'Norris'

По сути, для первого элемента в коллекции предшествует ключевое слово where, а для последующих - and.

Я действительно изо всех сил пытаюсь сделать этот алгоритм вСкала, поэтому я прошу твоей помощи.Может быть, Map не подходит для этой задачи?

Ответы [ 3 ]

6 голосов
/ 20 марта 2012

Возможное решение:

myMap.map {case (k, v) => """%s = '%s'""".format(k, v)}
  .mkString("where ", "\nand ", "")

Функция map с форматом преобразует ключ / значения в key = 'value', а mkString создает предложение where.

3 голосов
/ 20 марта 2012

И, поскольку кому-то нужно это сказать, ради бога, не делайте ничего подобного в производственном коде!Такого рода вещи - просто попрошайничество с использованием SQL-инъекций, когда кто-то выдает вам искаженный ввод, который вы слепо форматируете в SQL, что делает вещи, совершенно отличные от того, что вы хотите.Вот пример: http://xkcd.com/327/

0 голосов
/ 20 марта 2012

Пока вы генерируете реальные операторы SQL, вы можете захотеть взглянуть на более надежные модели для доступа к базе данных.Мой любимый Squeryl , но есть и другие вкусы.

...