Как создать пользовательский запрос Diesel, используя функции SQL с вводом данных пользователем? - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу выполнить запрос, использующий пользовательские функции SQL комплектов PostGIS.Например, я могу выполнить следующий запрос с помощью psql:

SELECT * FROM places 
WHERE earth_box(ll_to_earth(40.6333125,-8.659492), 20)
@> ll_to_earth(places.lat, places.lng);

ll_to_earth и earth_box - функции PostGIS.Как я могу сделать этот запрос с Diesel с этими значениями lat и lng в качестве ввода?

Я просмотрел документацию, но не могу обернуть ее вокруг.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Это решение, которое я выбрал:

pub fn get_near(lat: f32, lng: f32, conn: &PgConnection) -> Vec<Places> {
    diesel::sql_query("SELECT * FROM places WHERE earth_box(ll_to_earth($1,$2), 20) @> ll_to_earth(places.lat, places.lng)")
        .bind::<diesel::sql_types::Float, _>(lat)
        .bind::<diesel::sql_types::Float, _>(lng)
        .load(conn)
        .expect("An error has occured")
}
0 голосов
/ 03 декабря 2018

Поиск в документации дизеля для function приводит непосредственно к макросу sql_function:

Дизель обеспечивает поддержку только очень небольшого числафункций SQL.Этот макрос позволяет добавлять дополнительные функции из стандарта SQL, а также любые пользовательские функции, которые может иметь ваше приложение.

...