在我们的应用程序中,用户可以输入 SQL 代码来从 NexusDB 数据库中检索数据。我们希望在不实际执行查询的情况下确定此类查询结果的元数据。我们使用元数据来确定字段的数量和每个结果字段的数据类型。
[补充] 我们将此功能用作用户定义的转换过程的一部分。实际的转换稍后在类似批处理的过程中完成,但我们需要事先元数据,因此用户可以在转换中指定其他字段特征或修改,如应用插件、创建父子关系等。 [/addition ]
到现在为止,我们基本上是通过添加WHERE FALSE
到 SQL 查询或将所有已经存在WHERE
的语句替换为WHERE FALSE AND
. 但当然,我们必须解析整个 SQL 以确定要调整的正确 where 子句的确切位置,同时考虑注释、嵌套的 SELECTS、JOIN 和其他子句。这种方式变得相当复杂:-(
另一个缺点是,大多数时候查询的执行仍然需要很长时间,即使我们事先知道结果集是空的。
我们想知道是否有另一种方法可以实现这一目标。
即 TQuery 对象必须有自己的解析器,将 SQL 语句拆分为不同的子句。如果我们可以在执行之前更改 where 子句,我们就不必自己进行解析。但是我们有点急于深入 TQuery 对象的内部,只是为了发现没有办法以我们想要的方式使用它。
有人对此有任何建议吗?