LOBase HSQL 避免必须将 table 和字段名称放在引号中

LOBase HSQL avoid having to put table and field names in quote marks

将 LO Base 与本地 HSQL 数据库文件结合使用。

我想做的事:复制并粘贴我现有的(在某些情况下很长的)查询,其形式为:

SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id

我要做的事情:

SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"

然后我注意到,当我使用 LO Base 连接到远程 MySQL 数据库和 运行 查询时,它在没有引号的情况下工作正常,但当数据源是本地 HSQL 数据库时失败.有没有办法解决?我不想编辑一大堆复杂的查询...感谢任何帮助

引号是必需的,除非 table 和字段名称是大写的,如 http://hsqldb.org/doc/2.0/guide/guide.html:

中所述

Standard SQL is not case sensitive, except when names of objects are enclosed in double-quotes... all uppercase for unquoted identifiers.

如果您不想这样做,请将数据移动到本地 MySQL 实例,或任何其他区分大小写且不带引号的数据库。

或者,编写正则表达式,在查询 运行 之前添加引号。这可以在 LibreOffice Calc 中完成,将原始查询放在一列中,然后在添加引号的下一列中放置 macro-based regular expression formula

看起来这可能会变得复杂,所以我会在 Python 中而不是 Basic 中编写一个宏,因为有一个 regex library。这是一些示例代码。

import re

def quote_identifier(matchobj):
    if matchobj.group(0).upper() in ('SELECT','FROM','WHERE'):
        return matchobj.group(0)
    else:
        return '"{}"'.format(matchobj.group(0))

s = "SELECT table1.field1, table2.field2 FROM table1, table2 WHERE table1.id=table2.id"
result = re.sub("(\w+)", quote_identifier, s)
print(result)

这会打印引用的结果:

SELECT "table1"."field1", "table2"."field2" FROM "table1", "table2" WHERE "table1"."id"="table2"."id"