如何使用 SQL 函数和用户提供的输入创建自定义 Diesel 查询?

Posted

技术标签:

【中文标题】如何使用 SQL 函数和用户提供的输入创建自定义 Diesel 查询?【英文标题】:How do I create a custom Diesel query using SQL functions with user-provided inputs? 【发布时间】:2019-05-04 22:27:18 【问题描述】:

我想执行一个使用 PostGIS 包的自定义 SQL 函数的查询。例如,我可以使用 psql 运行后续查询:

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

ll_to_earthearth_box 是 PostGIS 函数。如何使用 Diesel 以 latlng 的值作为输入进行此查询?

我浏览了文档,但无法理解它。

【问题讨论】:

【参考方案1】:

这是我最终得到的解决方案:

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")

【讨论】:

【参考方案2】:

Searching the Diesel documentation for function 直接导致sql_function 宏:

Diesel 仅提供对极少数 SQL 函数的支持。此宏使您能够添加来自 SQL 标准的其他函数,以及您的应用程序可能具有的任何自定义函数。

【讨论】:

以上是关于如何使用 SQL 函数和用户提供的输入创建自定义 Diesel 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在用户定义的函数中使用自定义类型?

Mysql 创建自定义函数

关系数据库SQL之可编程性函数(用户自定义函数)

SQL Server存储过程中使用表值作为输入参数示例

sql server 中的自定义函数应该如何调用?

详解Spark sql用户自定义函数:UDF与UDAF