我有一个系统使用OGC Filter Encoding(一种类似于SQL的通用过滤语言),用于查询各种后端。
当后端碰巧是一个关系数据酶时,将过滤器转换为SQL并使其在数据库中运行是很有效的。
但是,存在一个问题,OGC过滤器编码具有二值逻辑,而数据库具有三值逻辑,这导致某些过滤器返回的结果与在内存中求值的结果不同。
我目前有一个翻译系统,可以做“显而易见的”事情,也就是说,访问过滤器定义树并为比较添加空检查,以防万一过滤器的上层有否定的情况,例如将not(a = 1)
变成not(a = 1 and a is not null)
。
我想知道是否有人找到了更通用的转换机制来将SQL语句强制转换为二值逻辑行为?
解决方案应该独立于数据库,我的目标是各种各样的数据库(Oracle,SQL Server,PostgreSQL,MySQL,db2,h2,SQLite等)。