SQL 模板
结构搜索可帮助您查找与用户定义搜索模板匹配的代码段。 如果模板与源代码的某部分匹配,相应的表达式将被高亮显示。 搜索模板本质上是由文本、变量、筛选器、作用域和上下文组成的查询。 利用这些元素,您可以优化搜索,实现更精确的结果。
搜索工具
一个 变量 是由美元符号括起来的字符序列,例如, $name$ 或 $field$。
下面的屏幕截图显示了一个用于搜索结构体的模板。

修饰符 是可应用于变量和搜索模板的用户定义条件。 它们允许您:
检查变量出现的次数,
验证变量的类型,
将变量与纯文本或正则表达式进行匹配,
应用 Groovy 脚本。
有关可用修饰符的完整列表,请参见 搜索模板、修饰符和脚本约束。
下一个示例展示了与之前相同的模板,但将 $name$ 变量的 文本 修饰符设置为 Employee。 请注意编辑器中高亮显示的搜索结果发生了怎样的变化。

如果我们将 type 修饰符设置为 [string] 值,就会在 SELECT 语句中找到所有字符串值。 但要在表定义(CREATE TABLE 语句)中找到所有字符串类型,您需要应用 类型 上下文。 要设置上下文,您也需要使用过滤器。 但与变量不同的是,过滤器应用于特定变量,而上下文过滤器应用于整个搜索模板。

上下文 是内置的内部模板,帮助搜索引擎识别变量。 上下文仅用于 SQL,以消除语言歧义。 通过使用上下文,您可以告诉搜索引擎在哪里以及搜索什么变量。 您可以为搜索模板设置以下上下文:
表达式 :一个或多个值、运算符或返回值的 SQL 函数。 使用 表达式 上下文,IDE 将在
SELECT $expression_1$ FROM table_name where $expression_2$这样的结构中查找$expression_1$和$expression_2$。类型 :可以存储在表列中的值类型(例如,
varchar(100))。 使用 类型 上下文,IDE 将在CREATE TABLE table_name (id_1 $type_1$, id_2 $type_2$)这样的结构中查找$type_1$和$type_2$。查询子句 :查询子句,例如
DISTINCT、FROM、WHERE、ORDER BY、GROUP BY或HAVING。 在 查询子句 上下文中,您需要使用带有变量的子句关键字。 例如,IDE 将在select * from table_name $variables$;这样的结构中查找where $variables$。 如果您在WHERE子句中有类似a + b的表达式,您可以像where $variable_1$ + $variable_2$;一样明确指定您的变量。 并将任何变量定义为搜索目标。

搜索目标 是一个列表,您可以在其中指定 IDE 应该搜索模板的哪一部分:单个变量或整个模板。 例如,您可以使用搜索目标,通过 context = query clause 从 where $a$ + $b$ 搜索模板中找到 $b$ 值。

范围 定义了您希望执行搜索的信息来源。 它可以是打开的文件或当前文件、 项目 工具窗口中的目录 Alt+1 、最近更改的文件以及其他来源。 要在特定目录中搜索,请选择 目录 ,按下 浏览 按钮。

文件类型 定义了您希望搜索的文件方言。

SQL 模板如何用于结构化搜索
让我们看看搜索引擎如何处理搜索模板。 假设您在搜索字段中有 WHERE $a$ 搜索模板,并设置了 context = query clause。
GoLand 获取 查询子句 上下文模板的定义。 对于 查询子句 上下文模板,其定义为
SELECT id from dummy $pattern$。 您可以在 现有模板 菜单项下查看所有现有的上下文模板。IDE 将
$pattern$变量替换为您在搜索模板中定义的值。 在我们的情况下,是WHERE $a$。 替换结果将如下所示:SELECT id from dummy WHERE $a$。IDE 解析最终的
SELECT语句,并在语法树中搜索WHERE $a$。当找到
WHERE $a$时,IDE 会在编辑器中将其高亮显示。
结构化搜索和替换
结构化搜索
单击 。
从 文件类型 列表中,选择您希望在搜索中使用的语言。
在 搜索模板 字段中,输入搜索模板或选择现有模板。
不要选择 节点下的模板,这些模板由搜索引擎内部使用以消除语言歧义。 保存的 SQL 模板位于 节点下。
如果修饰符面板被隐藏,请点击 切换修饰符面板 按钮(
)。
点击每个模板变量并设置搜索修饰符。 要设置修饰符,请点击 添加修饰符 链接。
GoLand 会在编辑器中即时高亮显示所找到的代码。
(仅限 SQL)添加 SQL 上下文。
在 搜索模板 字段中,将光标放在模板的开头并点击 添加修饰符 链接。 从列表中选择 上下文。
(可选)从 范围 列表中选择您希望搜索的位置:项目、模块、目录或自定义范围内。
(可选)从 搜索目标 列表中选择您希望搜索模板的哪一部分:单独的变量或整个模板(完全匹配)。
单击 查找。

结构化替换
在主菜单中,进入 .
在 搜索模板 字段中,输入搜索模板或选择现有模板。
不要选择 节点下的模板,这些模板由搜索引擎内部使用以消除语言歧义。 保存的 SQL 模板位于 节点下。
在 替换模板 字段中,输入搜索模板或选择现有模板。
如果您需要为替换模板中的变量添加修饰符,请将光标放在变量上,并使用修饰符区域来管理修饰符。
单击 查找。 GoLand 在 查找 工具窗口中显示结果。
在 查找 工具窗口中,您可以进一步处理结果,逐一替换找到的项目、一次性替换所有项目,或预览潜在的更改。
