Kotlin Exposed 如何实现带Postgres原生函数的复杂删除查询
Kotlin Exposed 框架下的时间条件删除查询实现问题
业务需求
需编写删除查询逻辑,调用Postgres原生函数筛选待删除记录:删除所有start_at(时间戳类型)列的时间早于指定动态天数阈值(示例取值为5天)的全部记录。
参考的原生Postgres查询语句:
delete from my_table t where date_part ('day', (current_date - t.start_at))>= 5
编码卡点
目前在Kotlin编码环节,Exposed官方文档未提供这类复杂过滤条件的实现方案,梳理出两个初步可行的实现思路:
思路1:基于Exposed DSL的deleteWhere实现
尝试完全使用框架DSL语法构建过滤条件,卡在原生数据库函数部分的DSL表达:
transaction { MyTable.deleteWhere { MyTable.startAt greaterEq ?????? } }
思路2:原生SQL拼接执行
尝试直接传入拼接后的原生删除SQL执行,存在参数注入风险:
transaction { exec ("delete query here >= ${daysToFilter}") }
待解答问题
- 是否可以按照思路1的Exposed DSL形式实现该查询?
- 如果DSL形式不可行,最优的实现方式是什么?
测试验证数据集
| id | start_at |
|---|---|
| 1 | 2020-09-01 09:00:00 |
| 2 | 2020-09-02 09:00:00 |
| 3 | 2020-09-03 09:00:00 |
| 4 | 2020-09-04 09:00:00 |
内容的提问来源于stack exchange,提问作者Claudivan Moreira
相关产品推荐
相关产品推荐

