在 SQL 之上定义用户定义语言
Defining a User Defined Language on top of SQL
好的,所以我们的基本想法是在 SQL 之上构建一种语言。我们的主要目标是预处理包含 SQL 和不同内容的字符串,解析我们的 "invented" 语言,在另一端生成 SQL 并最终执行 SQL 字符串.
它类似于 ASP/PHP 对 HTML 所做的事情(我知道这在语义上是不正确的,我只是在寻找语法部分)
我们已经有了一个非常有用的解析器,但是随着查询变得越来越长,我们不断向 "language" 添加新功能,如果我有 Notepad++,我会很高兴正确突出我的语法。
代码示例:
WHERE PARENT_ID = {GETVAR|PARENT_ID**'}
这实际上是获取名为 PARENT_ID 的变量,并将其填充到由两个 '.看起来像
WHERE PARENT_ID = 'a parent'
我一直纠结的是那个单引号,它是不匹配的,不应该被识别为 SQL 字符串,因为它在我们的 "function" 中。如果在 { 和 } 中,如何正确地告诉记事本 ++ 避免使用此类单引号?
非常感谢。
您可以通过从 PL-SQL 示例开始并添加您的扩展来创建用户定义的语言。它不像内部解析器那么强大,但它可以让你:
- 添加
'
作为新关键字,例如,
- 运算符添加
*
,
- 并创建一个新的分隔符
{}
,允许运算符和其中的新关键字。
这将排除 '...'
分隔符并允许使用 '
关键字,这正是您想要的。
注意 关键字需要分隔,如果 *
是一个运算符(因此用作分隔符),'
将只是一个关键字。此外,您可能需要编写 \'
而不仅仅是 '
。
好的,所以我们的基本想法是在 SQL 之上构建一种语言。我们的主要目标是预处理包含 SQL 和不同内容的字符串,解析我们的 "invented" 语言,在另一端生成 SQL 并最终执行 SQL 字符串.
它类似于 ASP/PHP 对 HTML 所做的事情(我知道这在语义上是不正确的,我只是在寻找语法部分)
我们已经有了一个非常有用的解析器,但是随着查询变得越来越长,我们不断向 "language" 添加新功能,如果我有 Notepad++,我会很高兴正确突出我的语法。
代码示例:
WHERE PARENT_ID = {GETVAR|PARENT_ID**'}
这实际上是获取名为 PARENT_ID 的变量,并将其填充到由两个 '.看起来像
WHERE PARENT_ID = 'a parent'
我一直纠结的是那个单引号,它是不匹配的,不应该被识别为 SQL 字符串,因为它在我们的 "function" 中。如果在 { 和 } 中,如何正确地告诉记事本 ++ 避免使用此类单引号?
非常感谢。
您可以通过从 PL-SQL 示例开始并添加您的扩展来创建用户定义的语言。它不像内部解析器那么强大,但它可以让你:
- 添加
'
作为新关键字,例如, - 运算符添加
*
, - 并创建一个新的分隔符
{}
,允许运算符和其中的新关键字。
这将排除 '...'
分隔符并允许使用 '
关键字,这正是您想要的。
注意 关键字需要分隔,如果 *
是一个运算符(因此用作分隔符),'
将只是一个关键字。此外,您可能需要编写 \'
而不仅仅是 '
。