Использование Groovy SQL для разбиения на страницы, сортировки и поиска / фильтрации строк - PullRequest
0 голосов
/ 31 марта 2012

Я использую Groovy SQL для доступа к БД.Очень хорошо, но у меня есть потребность, для которой я не могу найти решение.

Я вижу, что нумерация страниц хорошо поддерживается в классе Sql, например:

sql.eachRow('select * from VENDOR', ((pageNumber-1)*pageSize)+1, pageSize) { row -> 
...
}

Я также вижу поиск/ фильтрация так:

def rows = sql.rows("select * from PROJECT where name like 'Gra%'")

И, наконец, сортировка (и фильтрация?) следующим образом (с использованием класса DataSet):

def vemdpr = new DataSet(sql, 'VENDOR') 
def sortedVendorsOfInterest = vendor.
    findAll{ it.vendorName like '%Alpha%' }.
    sort{ it.vendorName }.reverse() //for desc order, leave off "reverse" for asc

Может кто-нибудь сказать мне, как объединить их все для работывсе вместе?У меня есть flexigrid, в котором я показываю строки таблицы, и она позволяет комбинировать все эти функции.

Спасибо!Пометить

PS Запретить любому, кто знает, как использовать Groovy для этого (мое предпочтение), если кто-нибудь может сказать мне, как объединить все это в запрос SQL, я всегда могу просто выполнить запрос.

1 Ответ

0 голосов
/ 04 апреля 2012

Одним из решений было бы сделать это как SQL-запрос с параметрами:

sql.eachRow('select * from VENDOR where vendorName like ? order by vendorName asc', ['%Alpha%'] ((pageNumber-1)*pageSize)+1, pageSize) { row -> 
...
}

Изучение источников DataSet показывает, что оно не обеспечивает подкачку страниц. Его можно легко добавить, расширив DataSet.rows () с помощью соответствующих параметров offset и maxRows и изменив базовый вызов super.rows (getSql (), getParameters (), offset, maxRows).

- Обновление -

Я поднял проблему в Groovy JIRA и создал запрос на извлечение для ее решения в проекте Groovy, который перешел в Groovy 2.0 и в Groovy 1.8.7 (еще не выпущен). Теперь подкачка страниц поддерживается и в DataSet!

См. Groovy 2.0.0 API:

...