Groovy SQL игнорирует предложение order by в динамическом операторе select - PullRequest
3 голосов
/ 01 декабря 2011

Я использую Groovy SQL в приложении Grails для запросов к базе данных, которая не подключена как источник данных приложения. По умолчанию для страницы оператор SQL select не содержит предложение order by. Если пользователь нажимает на один из тегов, я хочу динамически изменить запрос для сортировки по указанному столбцу в указанном направлении. Когда я пытаюсь добавить предложение order by в оператор select, я получаю (перехваченное) SQLException, которое говорит, что мой запрос был неправильно завершен.

Мой запрос:

sql.eachRow("select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${sortColumn} ${sortOrder}") { row ->
                    results << row.toRowResult()
                }

Я могу обойти эту проблему, отсортировав возвращаемый список, однако я бы хотел сделать это в операторе SQL, если это вообще возможно. Это известная проблема?

1 Ответ

7 голосов
/ 01 декабря 2011

Groovy пытается заменить все ваши параметры на ? и делает PreparedStatement

Это не работает с предложением ORDER BY, поэтому вам нужно использовать Sql.expand

Попробуйте:

sql.eachRow( "select * from mytable where type = 'SUMMARY' and acolumn=${columnValue} order by ${Sql.expand(sortColumn)} ${Sql.expand(sortOrder)}") { row ->
  results << row.toRowResult()
}
...