COMPLETION() 表值函数

、概述

COMPLETION 扩展实现了一个名为“completion”的表值函数,可用于在交互式 SQL 输入期间建议完成部分输入的单词。例如,完成表可用于帮助实现制表符完成。

2.细节

设计的查询接口为:

SELECT DISTINCT candidate COLLATE nocase
  FROM completion($prefix, $wholeline)
 ORDER BY 1;

上面的查询将返回以 $prefix 开头的整个输入词的建议。$wholeline 参数是从行首到插入点的所有文本。$wholeline 参数用于上下文。

$prefix 参数可以为 NULL,在这种情况下前缀是从 $wholeline 推导出来的。或者,如果上下文信息不可用或不需要上下文感知完成,则 $wholeline 参数可以为 NULL 或省略。

完成表可能会多次返回同一个候选人,并且会以任意顺序返回候选人。在上面的示例查询中添加了 DISTINCT 关键字和 ORDER BY 以使答案唯一且按字典顺序排列。

2.1. 用法示例

完成表与 unix 的 readline 或 linenoise 输入行编辑包一起用于在命令行 shell中实现制表符完成 。有关示例代码,请参阅 https://sqlite.org/src/file/src/shell.c.in源文件。搜索“FROM completion”以找到相关的代码部分。

因为完成表内置在命令行 shell 中以提供制表符完成,所以您可以直接在命令行 shell 中针对完成表运行测试查询。只需键入如上例所示的查询,为 $prefix 和 $wholeline 填写适当的值,然后观察输出。

3.限制

完成表专为交互式使用而设计。它将以适合人类打字的速度返回答案。只要响应时间在用户界面中几乎是瞬时的,就不会做出异常高效的努力。

在撰写本文时(2017-07-13),完成虚拟表仅查找 SQL 关键字以及架构、表和列名称。$wholeline 中包含的上下文被完全忽略。未来的增强将尝试返回从函数和 pragma 名称和其他来源获取的新完成,并考虑更多上下文。完成表应被视为正在进行的工作。