首页 > 解决方案 > 从三值逻辑到二值逻辑的一般转换

问题描述

我有一个使用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 等等)。

标签: sql

解决方案


推荐阅读