对于经常写sql的人来说智能提示是非常重要的,这个非常影响写sql的效率和心情。

这里说的智能提示不仅仅是关键字(select等)的智能提示,还得要做到表字段的智能提示。

例如: 下面是mysql的智能提示(是利用codemirror做的)

image

上图是我很久以前搞的一个快速开发的后台系统中的一个小工具。

如果大家需要mysql结合db的schema来智能提示的可以去参考下开源AntMgr后台快速开发系统

clickhouse的智能提示

今天给大家分享ace_editor来封装clickhouse的智能提示。

效果如下:

image

使用方法

git clone下代码后打开demo

https://github.com/yuzd/ace_clickhouse

image

ace_clickhouse.js

我把 ace_editor 和 ace_lang_tools 还有关于 clickhouse的基本关键字提示的全都放在这一个js里面了。

打开ace_clickhouse.js 里面有四大部分

  • 最上面的ace_editor
  • ace.define("ace/snippets"开头的是ace_lang_tools
  • 然后是clickhouse的扩展内容(关键字和clickhouse的函数等)
  • 最后一部分是theme

image

有需要你可以拆出来。

注意:我为了使用简单,暴露了一个ace_langTools在window的scope下。方便给下面的js使用(下面会讲到)

另外一个js:model-sql.js

这个是做表字段的智能提示的,


window.sqlTablesCompleter = {
target: {
database: 'log',
table: 'testdb'
},
completerCache: [],
getCompletions: function (editor, session, pos, prefix, callback) {
var self = this;
var key = self.target.database + '.' + self.target.table;
if (self.completerCache[key]) {
callback(null, self.completerCache[key]);
return;
} var sql = self.buildExploreQuery("COLUMNS");
self._post(sql, function (response) {
self.completerCache[key] = response.data.map(function (item) {
return {
caption: item.text,
value: item.text,
meta: key,
docHTML: self._convertToHTML(item),
};
});
callback(null, self.completerCache[key]);
});
},
_convertToHTML: function (item) {
var desc = item.value, space_index = 0, start = 0, line = "", next_line_end = 60, lines = [];
for (var i = 0; i < desc.length; i++) {
if (desc[i] === ' ') {
space_index = i;
} else if (i >= next_line_end && space_index !== 0) {
line = desc.slice(start, space_index);
lines.push(line);
start = space_index + 1;
next_line_end = i + 60;
space_index = 0;
}
}
line = desc.slice(start);
lines.push(line);
return ["<b>", item.text, "</b>", "<hr></hr>", lines.join("&nbsp<br>")].join("");
},
_post: function (sql, callback) {
//这里需要改造成去请求表的schema的数据,接口的返回格式如下所示
callback(JSON.parse("{\n" +
" \"data\": [\n" +
" {\n" +
" \"text\": \"field1\",\n" +
" \"value\": \"DateTime\"\n" +
" },\n" +
" {\n" +
" \"text\": \"field2\",\n" +
" \"value\": \"String\"\n" +
" }\n" +
" ]\n" +
"}"));
}
};

如上面代码里面的注释一样,你需要调用一个接口去获取你需要智能提示的clickhouse的表的字段信息

然后在去把这个智能提示注册到ace_editor里面去


winwo.ace_langTools.addCompleter(sqlTablesCompleter);

这样就搞定了

如果有哪些clickhouse的函数没有提示的,可以把函数提示内容添加到第一个js文件里面的

ace.define("ace/mode/clickhouse_info" 代码块中Funcs 和 FunctionsCompletions

照葫芦画瓢即可!

欢迎关注我的公众号,分析我的一些个人作品给大家,希望能帮助到大家!

最新文章

  1. 高性能Javascript--高效的数据访问
  2. svn快速教程
  3. 基于 CentOS7 的 Kubernetes 集群
  4. Android 计算布局背景的透明度
  5. 【LeetCode】Rotate Array
  6. error LNK2019: 无法解析的外部符号 __imp___CrtDbgReportW
  7. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
  8. 用批处理来重启IIS的应用程序池
  9. C 语言---漂亮的宏定义
  10. HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】
  11. Android推送 百度云推送 入门篇
  12. IdentityServer Topics(7)- 注销
  13. webpack 打包测试和生产多个版本
  14. Java 对字符串数据进行MD5/SHA1哈希散列运算
  15. MySql之视图的使用
  16. cygwin下如何编译安装minicom?
  17. T-SQL 有参数存储过程的创建与执行
  18. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters
  19. go语言之进阶篇接口的继承
  20. BootStrap--scroll

热门文章

  1. Net6 Configuration &amp; Options 源码分析 Part2 Options
  2. Spfa 求含负权边的最短路 + 判断是否存在负权回路
  3. kubernetes更改coredns增加解析
  4. Django项目常用的logging配置。
  5. 论php常见的问题[转载自原乌云]
  6. 题解0007:小木棍(P1120)
  7. 动态规划优化算法——wqs二分 and 折线优化
  8. POI完成Excel文件的读和写
  9. HMS Core 机器学习服务6.4.0版本更新啦,文本翻译功能增加10种小语种语言类型!
  10. flexible如何实现自动判断dpr?