最后,我在客户端使用 SQL 解析器构建条件树,并像 json 一样发送到服务器。
它是我的简化管理界面:
https ://gist.github.com/Somewater/5705567
简而言之:
1) ReQueryBulder 生成 SQL 请求(字符串)
2) SQL Parser 创建 SQL 请求结构
3)我的代码将 SQL Parser 结构转换为简单的 json(如上所述)
4)发送json到服务器
和服务器请求解析器(ruby):
https ://gist.github.com/Somewater/5705620
我可以像这样处理服务器上的请求(在我的例子中是 Rails 请求控制器):
include ConditionsBuilder
cond = JSON.parse(request.params['cond']) # conditions like json string
condTree = self.parse_sql_conditions_from_json(cond) # conditions like btree structure
# perform some conditions checks, for example, add additional conditions
permission_conds = And[ GtEq['permissions', 12], Eq['is_admin', 1] ]
condTree = And[condTree, permission_conds]
conditions = self.build_sql_conditions((Time.new - 90.days).to_i, Time.new.to_i, condTree)
# handle sql request: "SELECT * FROM tablename WHERE " + conditions.to_s