强大的 SQL 格式化、智能补全、语法检查、DDL 转换 VSCode 插件
支持 Hive、MySQL、SparkSQL、FlinkSQL、PostgreSQL、BigQuery、SQLite、StarRocks、SQL Server、Oracle、达梦 等多种 SQL 方言
SQL All in One 是一款面向 SQL 开发者的全方位 VSCode 扩展,将数据库连接管理、SQL 执行、数据编辑、表设计、执行计划、格式化、智能补全、语法检查、代码导航、DDL 转换等功能集成于一体,覆盖 SQL 开发的完整工作流。
| 发布者 | bryce-qin |
| 版本 | 2.34.0 |
| 许可证 | MIT |
| VSCode 引擎 | ^1.85.0 |
| 仓库 | GitHub |
- 12 种 SQL 方言:Hive、MySQL、SparkSQL、FlinkSQL、PostgreSQL、BigQuery、SQLite、StarRocks、SQL Server、Oracle、达梦、标准 SQL
- 8 种数据库直连:MySQL、PostgreSQL、SQLite、StarRocks、SQL Server、Oracle、达梦(含 SSH 隧道与 SSL)
- AST 驱动格式化:40+ 可配置选项,支持不完整 SQL 智能格式化
- 30 条 Lint 规则:实时诊断,含快速修复
- 7 类智能补全:关键字、580+ 函数、Schema 表/列、CTE、代码片段等
- 可视化工具链:表设计器、物化视图设计器、执行计划、数据编辑器、查询结果面板
- 完整代码工具:跳转定义、查找引用、重命名、折叠、大纲、悬停提示
- 中英双语:自动跟随 VSCode 语言设置
| Language ID | 别名 | 扩展名 |
|---|---|---|
sql |
SQL | .sql |
hive |
Hive, hive-sql | .hql |
mysql |
MySQL | .mysql |
spark |
SparkSQL, spark | .sparksql |
flinksql |
FlinkSQL, flink-sql | .flinksql |
postgresql |
PostgreSQL, postgres | .psql, .pgsql |
bigquery |
BigQuery | .bqsql |
sqlite |
SQLite | .sqlite, .sqlt |
starrocks |
StarRocks | .starrocks |
sqlserver |
SQL Server, mssql | .sqlserver |
plsql |
Oracle, PL/SQL | .plsql, .oracle |
dameng |
达梦, DM | .dameng, .dm |
- 数据工程师:编写 Hive/Spark/FlinkSQL ETL 脚本,需要规范化格式、检查语法、转换 MySQL DDL 到 Hive
- 后端开发者:在 VSCode 中直接连接 MySQL/PostgreSQL 执行查询、编辑数据、设计表结构
- DBA:浏览数据库 Schema、查看函数/存储过程/触发器定义、导出表 DDL
- 数据分析师:执行查询、分页查看结果、导出 CSV/JSON 供下游使用
- SQL 学习者:通过悬停提示、Lint 建议、补全签名了解 SQL 函数用法与最佳实践
- 打开 VSCode
- 按
Ctrl+Shift+X(Windows)或Cmd+Shift+X(Mac)打开扩展面板 - 搜索
SQL All in One - 点击「安装」
- 从 GitHub Releases 下载
hive-formatter-{version}.vsix - 在 VSCode 扩展面板点击
...→从 VSIX 安装 - 或命令行执行:
code --install-extension hive-formatter-{version}.vsix
- VSCode 1.85.0 或更高版本
- 连接达梦数据库时需安装 DM8 ODBC 驱动及 C++ 编译环境(详见下方达梦章节)
打开任意 .sql / .hql / .mysql 文件,使用以下任一方式:
- 按
Shift+Alt+F(Windows)或Shift+Option+F(Mac)格式化整个文档 - 选中部分 SQL,按
Ctrl+Shift+P→ 搜索Format Selection (SQL All in One) - 右键编辑器 → 选择「格式化文档」
格式化前:
select id,name,email from users where age>18 and status='active' order by created_at desc limit 10;格式化后(standard 风格):
SELECT
id,
name,
email
FROM users
WHERE
age > 18
AND status = 'active'
ORDER BY created_at DESC
LIMIT 10;- 点击活动栏的数据库图标,打开「Database Explorer」侧边栏
- 点击
+按钮添加连接 - 在弹出的对话框中选择数据库类型,填写主机、端口、用户名、密码等信息
- 点击「测试连接」验证,再点击「连接」保存
- 在数据库浏览器中右键数据库或表,选择「New Query」
- 在 SQL 编辑器中输入查询语句
- 按
Ctrl+Shift+E(Mac:Cmd+Shift+E)执行全部 SQL - 或选中部分 SQL,按
Ctrl+Shift+R(Mac:Cmd+Shift+R)执行选中部分 - 在弹出的查询结果面板中查看数据,支持分页、网格/表单视图切换、导出
- 设置界面:VSCode 设置 → 搜索
SQL All in One→ 调整 80+ 配置项 - 可视化配置编辑器:
Ctrl+Shift+P→ 搜索SQL All in One Config,打开图形化配置面板,支持实时预览与快速预设
支持 8 种数据库连接,统一的管理界面:
| 数据库 | 驱动 | 特性 |
|---|---|---|
| MySQL | mysql2 | 连接池、SSL、SSH 隧道、流式查询 |
| PostgreSQL | pg | 连接池、SSL、SSH 隧道、查询取消 |
| SQLite | better-sqlite3 | 文件路径、WAL 模式、查询中断 |
| StarRocks | mysql2 | MySQL 协议、OLAP DDL、物化视图 |
| SQL Server | mssql | T-SQL、Windows 身份验证、FOR XML/JSON |
| Oracle | oracledb 6.x | thin/thick 模式、PL/SQL、DBMS_METADATA |
| 达梦 DM8 | odbc | ODBC 桥接、Oracle 兼容语法 |
| SSH 隧道 | ssh2 | 适用于所有支持 SSL 的数据库 |
通用特性:
- 图形化连接对话框(替代逐步输入框)
- 连接生命周期管理(添加/编辑/删除/连接/断开)
- 连接池健康检查、空闲检查、自动重连
- 自动重试,指数退避(最多 3 次)
- 活动连接管理(单活动连接模式)
- SecretStorage 密码安全存储
- 连接导入/导出(支持密码保护)
执行控制:
| 命令 | 快捷键 | 说明 |
|---|---|---|
| Execute SQL | Ctrl+Shift+E / Cmd+Shift+E |
执行编辑器中的全部 SQL |
| Execute Selected SQL | Ctrl+Shift+R / Cmd+Shift+R |
仅执行选中部分 |
| Cancel Running Query | - | 取消正在执行的查询 |
查询结果面板(集成 Monaco 编辑器):
- 上下分栏布局:上方 SQL 编辑器,下方查询结果,比例可拖拽调整
- Monaco 编辑器:SQL 语法高亮、智能提示、代码折叠,自动跟随 VSCode 主题
- 方言化 Monarch 语法高亮:12 种方言独立 tokenizer
- 静态补全:关键字、580+ 函数签名(含参数 Snippet)、数据类型
- Schema 感知补全:输入
.或空格触发,查询数据库 Schema 返回表名/列名 - 函数签名提示:输入
(或,显示参数签名,自动高亮当前参数 - 悬停提示:函数签名、关键字说明、表结构
- Lint 诊断:编辑后自动检查,显示波浪线警告
- 从数据库浏览器点击表/视图节点,自动生成
SELECT * FROM table LIMIT 200并执行
结果展示:
- 分页与滚动预加载
- 网格视图和表单视图切换
- JSON 美化输出
- 日期格式显示(本地 / UTC / 相对时间)
- 长文本截断(可配置阈值)
- NULL 值占位符显示
- 批量执行模式(顺序 / 事务)
- 错误处理策略(停止 / 继续)
- 进度保存
| 操作 | 格式 | 说明 |
|---|---|---|
| 导出查询结果 | CSV | 可配置分隔符、编码、表头 |
| 导出查询结果 | JSON | 支持美化输出 |
| 导出查询结果 | SQL INSERT | 生成 INSERT 语句 |
| 导出表 DDL | DDL | 完整建表语句 |
| 从文件导入 | CSV / JSON | 批量导入数据 |
- 可视化表设计/编辑
- 列定义:类型、约束、注释
- 数据编辑器:只读 / 可编辑模式
- 自动提交模式
- 乐观锁并发编辑
- BLOB 预览(大小限制 + MIME 类型白名单)
- 数据验证(实时验证,外键验证可选)
- 事务状态显示
- 长事务警告
- 支持
EXPLAIN FORMAT=JSON可视化 - 树形结构展示执行计划
- 节点详情:操作类型、估算成本、行数、扫描类型
- 各方言适配:
- MySQL:
EXPLAIN FORMAT=JSON - PostgreSQL:
EXPLAIN (FORMAT JSON) - SQL Server:
SET SHOWPLAN_XML ON - Oracle:
EXPLAIN PLAN FOR+DBMS_XPLAN.DISPLAY
- MySQL:
树形视图组织数据库对象:
🔗 连接名称
├── 📁 database_1
│ ├── 📊 表
│ │ └── users
│ │ ├── id (INT, PK)
│ │ ├── name (VARCHAR)
│ │ └── email (VARCHAR)
│ ├── 👁️ 视图
│ ├── ⚡ 函数
│ ├── 📜 存储过程
│ └── 🔔 触发器
└── 📁 database_2
操作:
- 查看表数据(自动生成
SELECT * FROM ... LIMIT 200) - 查看 DDL(表、视图、函数、存储过程、触发器定义代码)
- 编辑表设计
- 复制列名
- 添加/移除收藏
- 设置默认数据库
- Schema 缓存(可配置 TTL:数据库 / 表 / 列 / 函数)
- DDL 变更后自动刷新 Schema
- 连接时预取 Schema
基于 node-sql-parser v5.x 的 AST 驱动格式化引擎,提供 40+ 可配置选项。支持格式化不完整的 SQL(v2.28 新增):当 SQL 缺少 GROUP BY、未闭合 )、不完整的 IN(...)、缺少 BETWEEN 的第二个操作数等场景时,自动补全最小化语法 token 解析,格式化后再移除补全内容。
大小写控制
| 选项 | 说明 | 默认值 |
|---|---|---|
keywordCase |
关键字(preserve/upper/lower) | preserve |
dataTypeCase |
数据类型 | preserve |
functionCase |
函数名 | preserve |
identifierCase |
标识符 | preserve |
nullCase |
NULL 关键字 | preserve |
booleanCase |
TRUE/FALSE | preserve |
缩进控制
| 选项 | 说明 | 默认值 |
|---|---|---|
indentStyle |
风格(standard/tabularLeft/tabularRight) | standard |
tabSizeOverride |
缩进宽度 | 2 |
insertSpacesOverride |
使用空格缩进 | true |
ignoreTabSettings |
忽略 VSCode 全局缩进设置 | false |
换行控制(25+ 选项)
SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、JOIN、ON、USING、WITH、CTE、CASE/WHEN/THEN/ELSE、IN、集合运算、LATERAL VIEW、DISTRIBUTE BY、CLUSTER BY、SORT BY、INSERT 列/值等子句的换行策略均可独立配置。
对齐控制
| 选项 | 说明 | 默认值 |
|---|---|---|
alignColumnDefinitions |
对齐列定义 | false |
alignWhereClauses |
对齐 WHERE 条件 | false |
alignCaseStatements |
对齐 CASE 语句 | false |
alignOnClauses |
对齐 ON 条件 | false |
alignInsertColumns |
对齐 INSERT 列 | false |
alignInsertValuesGroups |
对齐 INSERT 值组 | false |
tabulateAlias |
表格化别名 | false |
间距与其他
| 选项 | 说明 | 默认值 |
|---|---|---|
denseOperators |
去除运算符周围空格 | false |
spaceBeforeComma |
逗号前加空格 | false |
spaceInsideParentheses |
括号内加空格 | false |
expressionWidth |
表达式换行字符阈值 | 50 |
linesBetweenQueries |
查询间空行数 | 1 |
newlineBeforeSemicolon |
分号前换行 | false |
commaPosition |
逗号位置(after/before) | after |
singleLineMaxLength |
单行最大长度 | 80 |
trimTrailingSpaces |
去除行尾空格 | true |
semicolonAtEnd |
末尾加分号 | true |
commentPosition |
注释位置(preserve/newline/inline) | preserve |
subqueryParenStyle |
子查询括号风格(inline/newline) | inline |
maxItemsInlineList |
行内列表最大项数 | 5 |
indentCteBody |
缩进 CTE 主体 | true |
cteCommaPosition |
CTE 逗号位置 | before |
newlineBetweenCtes |
CTE 之间换行 | true |
indentJoinConditions |
缩进 JOIN 条件 | true |
indentWhen / indentThen |
缩进 WHEN / THEN | true |
blankLinesBeforeSetOperation |
集合运算前空行 | 1 |
blankLinesAfterSetOperation |
集合运算后空行 | 0 |
格式化器内置缓存(按方言 + 配置哈希,最多 50 实例),并支持格式化选中部分。
7 种补全类型,每种可独立启用/禁用:
| 类型 | 说明 | 示例 |
|---|---|---|
| Schema 补全 | 来自已连接数据库的表名/列名 | 输入表名前缀 → 提示表名及列 |
| 关键字补全 | 方言特定的关键字和数据类型 | SEL → SELECT |
| 函数补全 | 580+ 函数签名,含参数、返回类型、描述 | SUB → SUBSTR(string, start, length) |
| 代码片段补全 | 方言特定的代码片段 | sel → 插入 SELECT 模板 |
| CTE 名称补全 | WITH 子句中定义的 CTE 名称 | WITH cte AS (...) SELECT → 提示 cte |
| 标识符补全 | 基于上下文的表名/列名建议 | FROM 子句中提示表名 |
| 注释模板补全 | header、todo、fixme 等 | header → 插入文件头注释 |
- 防抖诊断(300ms),支持 CancellationToken
- 双层检查:AST 诊断 + Lint 诊断
- 严重级别过滤(Error / Warning / Info)
语法错误检查:HAVING 缺少 GROUP BY、LIMIT 缺少数值、JOIN 缺少 ON、DISTINCT 位置错误、WHERE 中使用聚合函数、UPDATE 中使用 *、不完整的 CASE 语句、括号不匹配、未闭合字符串、重复列别名
代码质量建议:重复表别名、保留字作为标识符、SELECT 缺少 FROM、INSERT 缺少列名、冗余 DISTINCT、子查询缺少别名、可疑的 NULL 比较
方言提示:MySQL 日期函数在 Hive 中的差异
每条规则支持 enabled + severity 配置:
| 规则 ID | 说明 | 默认启用 | 默认级别 |
|---|---|---|---|
avoid_select_star |
避免 SELECT * | ✅ | Warning |
explicit_join_type |
显式指定 JOIN 类型 | ✅ | Info |
limit_with_order_by |
LIMIT 应搭配 ORDER BY | ✅ | Warning |
avoid_column_count_mismatch |
INSERT 列数与值数不匹配 | ✅ | Error |
missing_primary_key |
CREATE TABLE 缺少主键 | ✅ | Warning |
use_current_timestamp |
使用 CURRENT_TIMESTAMP | ✅ | Info |
avoid_select_in_insert |
INSERT 中避免 SELECT | ✅ | Warning |
duplicate_column_aliases |
重复列别名 | ✅ | Warning |
missing_query_comment |
复杂查询缺少注释 | ✅ | Warning |
missing_column_comment |
DDL 列缺少 COMMENT | ✅ | Warning |
commented_out_code |
注释掉的代码 | ✅ | Info |
expired_todo |
过期的 TODO/FIXME | ✅ | Info |
having_without_group_by |
HAVING 缺少 GROUP BY | ✅ | Error |
limit_invalid_value |
LIMIT 值无效 | ✅ | Error |
reserved_word_identifier |
保留字作为标识符 | ✅ | Warning |
join_missing_on |
JOIN 缺少 ON | ✅ | Error |
select_without_from |
SELECT 缺少 FROM | ✅ | Warning |
misplaced_distinct |
DISTINCT 位置错误 | ✅ | Error |
aggregate_in_where |
WHERE 中使用聚合函数 | ✅ | Error |
subquery_without_alias |
子查询缺少别名 | ✅ | Warning |
suspicious_null_comparison |
可疑的 NULL 比较 | ✅ | Warning |
incomplete_case |
不完整的 CASE | ✅ | Error |
redundant_distinct |
冗余 DISTINCT | ✅ | Warning |
date_function_usage |
日期函数用法提示 | ✅ | Info |
wildcard_in_update |
UPDATE 中使用通配符 | ✅ | Error |
implicit_cross_join |
隐式交叉连接 | ✅ | Warning |
deprecated_function |
已弃用函数 | ✅ | Info |
postgres_boolean_comparison |
PostgreSQL 布尔比较 | ✅ | Hint |
use_coalesce_over_isnull |
使用 COALESCE 替代 ISNULL | ❌ | Info |
avoid_correlated_subqueries |
避免相关子查询 | ❌ | Warning |
long_query_line |
长查询行 | ❌ | Info |
explicit_column_aliasing |
显式列别名 | ❌ | Info |
uppercase_keywords |
关键字大写 | ❌ | Info |
consistent_aliasing |
一致的别名 | ❌ | Info |
部分规则支持子选项:
missing_query_comment:thresholdLineCount、thresholdJoinCount、thresholdSubqueryCountmissing_column_comment:aggregate、externalTableExemptcommented_out_code:thresholdLinesexpired_todo:gracePeriodDays
| 问题 | 修复建议 |
|---|---|
= NULL |
替换为 IS NULL |
!= NULL / <> NULL |
替换为 IS NOT NULL |
| 保留字作为别名 | 添加反引号包裹 |
| 子查询缺少别名 | 自动添加 AS subquery |
| INSERT 缺少列名 | 添加列名占位符 |
| HAVING 缺少 GROUP BY | 自动添加 GROUP BY |
| 功能 | 快捷键 | 说明 |
|---|---|---|
| 跳转到定义 | F12 |
CTE、表别名、列别名 |
| 查找所有引用 | Shift+F12 |
符号引用查找 |
| 重命名符号 | F2 |
含保留字/冲突校验 |
| 面包屑导航 | - | 子句级导航(SELECT/FROM/WHERE/GROUP BY/HAVING/ORDER BY) |
共享 AstNavigator 导航引擎。
基于 AST 的 MySQL ↔ Hive SQL 转换:
- 支持 CREATE TABLE、SELECT、INSERT、UPDATE、DELETE、CREATE VIEW 全语句类型
- 可插拔节点转换器架构:
- 函数映射(NOW→CURRENT_TIMESTAMP、IFNULL→COALESCE、IF→CASE WHEN)
- 类型映射(DATETIME↔TIMESTAMP、VARCHAR↔STRING)
- 列属性剥离、表选项过滤、约束移除、Hive 子句移除
- AST 解析失败时交互式回退正则转换
- 复杂类型(ARRAY/MAP/STRUCT)转换时发出警告
- 入口:右键菜单
MySQL to HiveSQL/HiveSQL to MySQL,或命令面板
智能注释切换
| 快捷键 | 功能 |
|---|---|
Ctrl+/ / Cmd+/ |
智能切换:单行用行注释,多行用块注释 |
Ctrl+Shift+/ / Cmd+Shift+/ |
高级注释:格式化禁用标记、DDL COMMENT、块注释 |
注释模板补全
| 前缀 | 说明 |
|---|---|
header |
文件头注释(自动作者、自动表依赖) |
col |
列 COMMENT |
tbl |
表 COMMENT |
todo |
TODO 注释 |
fixme |
FIXME 注释 |
hack |
HACK 注释 |
desc |
查询说明注释 |
section |
分区标题注释 |
注释 Lint 规则:missing_query_comment、missing_column_comment、commented_out_code、expired_todo
4 层解析器链:
- 参数悬停:显示参数定义
- 函数签名悬停:函数参数、返回类型、用法说明
- Schema 悬停:来自已连接数据库的表结构、列信息
- 关键字悬停:关键字用法说明
- 折叠 CTE、子查询、函数块、CASE 语句
- 文档大纲:快速定位 SELECT/FROM/WHERE 等子句
Ctrl+Shift+P → SQL All in One Config 打开:
- 图形化配置界面
- 可折叠分组、Toggle 开关
- 实时格式化预览
- 拖拽调整预览区大小
- 快速预设:默认、Hive、MySQL、紧凑
- 保存配置按钮
- 显示当前 SQL 方言
- 点击快速访问配置编辑器
- 仅在 SQL 文件中显示
- 变量高亮显示
- 批量参数替换(
Ctrl+Alt+P/Cmd+Alt+P) - 支持 JDBC
:?参数语法 - 正则注入防护
- 已执行查询的历史记录
- 可配置最大条目数(默认 500)
- 显示/清除历史命令
- 危险 SQL 拦截
- 3 个级别:
strict(所有规则)、moderate(仅确认级)、off - 防止误操作 DROP、TRUNCATE、无 WHERE 的 DELETE 等
- 中文(zh)和英文(en)
- 自动跟随 VSCode 语言设置
displayLanguage配置:auto/zh/en
通用 SQL:sel(SELECT)、seld(SELECT DISTINCT)、join、leftjoin、groupby、case、insert、insertsel、update、delete、ct(CREATE TABLE)、ctas、with、union
Hive:hivepart、hiveselpart、hiveext
SparkSQL:sparktemp、sparkglobaltemp、sparkcrtparquet、sparkcrtjdbc、sparkcrtdelta、sparkins、sparkinsinto、sparklv、sparklvp、sparkmerge、sparkwin、sparkcache、sparkpivot、sparkfn、sparkstats、sparkconvdelta、sparkoptimize、sparkvacuum、sparkdesc
FlinkSQL:flinkkafka、flinkjdbc、flinktumble、flinkhop、flinkcumulate、flinkwatermark、flinktemporal、flinkdedup
注释:header、todo、fixme、hack、desc、section、col、tbl
简介:新一代高性能 MPP 数据库,通过 MySQL 协议(mysql2 驱动)连接,语言层在 MySQL 方言基础上扩展。
前置要求:StarRocks FE 节点开启 MySQL 协议端口(默认 9030),默认用户 root
连接配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 主机 | StarRocks FE 地址 | localhost |
| 端口 | MySQL 协议端口 | 9030 |
| 用户名 | 默认管理员账户 | root |
| SSL | 支持 SSL 加密连接 | 关闭 |
| SSH 隧道 | 支持 SSH 隧道连接 | 关闭 |
语法支持:
- 专属类型:BITMAP、HLL、PERCENTILE、JSON、ARRAY、MAP、STRUCT
- OLAP 表模型:DUPLICATE KEY、AGGREGATE KEY、UNIQUE KEY
- ROLLUP、COLOCATE、DYNAMIC_PARTITION、PARTITION、BUCKETS、PROPERTIES
- 物化视图:CREATE/REFRESH MATERIALIZED VIEW
- 专属函数:BITMAP_UNION、HLL_UNION、COLLECT_LIST、EXPLODE_SPLIT 等
- 元数据浏览:表、视图(StarRocks 不支持函数/存储过程/触发器)
已知限制:旧版 StarRocks(2.x 之前)不支持事务
简介:微软企业级关系数据库,通过 mssql 驱动连接,支持 T-SQL 语法。
前置要求:SQL Server 2016 及以上版本推荐,默认端口 1433,默认用户 sa
连接配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 主机 | SQL Server 地址 | localhost |
| 端口 | 监听端口 | 1433 |
| 用户名 | 默认账户 | sa |
| 加密 | 是否加密连接 | 开启 |
| 信任服务器证书 | 自签名证书时需开启 | 关闭 |
| 域 | Windows 身份验证域(可选) | - |
| SSL | 支持 SSL 加密连接 | 关闭 |
| SSH 隧道 | 支持 SSH 隧道连接 | 关闭 |
语法支持:
- T-SQL 专属关键字:TOP、OFFSET FETCH、OUTPUT、PIVOT/UNPIVOT、MERGE、CROSS APPLY/OUTER APPLY
- T-SQL 专属类型:NVARCHAR、DATETIME2、DATETIMEOFFSET、MONEY、UNIQUEIDENTIFIER、SQL_VARIANT、HIERARCHYID、GEOGRAPHY/GEOMETRY
- 表提示:WITH (NOLOCK) 等
- FOR XML / FOR JSON 序列化
- TRY_CONVERT/TRY_CAST/STRING_AGG/IIF/CHOOSE 等函数
- 元数据浏览:表、视图、函数、存储过程、触发器、索引
- 执行计划:通过
SET SHOWPLAN_XML ON获取 XML 计划
简介:企业级关系数据库,通过 oracledb 6.x 驱动连接,默认使用 thin 模式(纯 JS,无需 Oracle Client)。
前置要求:Oracle 11g 及以上版本推荐,默认端口 1521,默认用户 system
连接配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 主机 | Oracle 服务器地址 | localhost |
| 端口 | 监听端口 | 1521 |
| 用户名 | 默认账户 | system |
| 服务名/SID | 服务名或 SID(可选 connectString 覆盖) | - |
| 使用 SID | 以 SID 方式连接(默认服务名) | 关闭 |
| 厚模式 | 启用 thick 模式(需 Instant Client) | 关闭 |
| SSL | 支持 SSL 加密连接 | 关闭 |
| SSH 隧道 | 支持 SSH 隧道连接 | 关闭 |
语法支持:
- Oracle 专属关键字:DUAL、ROWNUM、ROWID、SYSDATE、CONNECT BY、MINUS、SEQUENCE、SYNONYM、PRIOR
- Oracle 专属类型:NUMBER、VARCHAR2、NVARCHAR2、CLOB/NCLOB、BFILE、TIMESTAMP WITH TIME ZONE、INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND、XMLTYPE
- PL/SQL:PACKAGE、PRAGMA AUTONOMOUS_TRANSACTION、PLS_INTEGER、BINARY_INTEGER
- q'[...]' 替代引号机制
- 专属函数:DECODE、NVL/NVL2、LISTAGG、CONNECT_BY_ROOT、SYS_CONNECT_BY_PATH、DBMS_RANDOM 等
- 元数据浏览:表、视图、函数、存储过程、触发器、索引
- 执行计划:通过
EXPLAIN PLAN FOR+DBMS_XPLAN.DISPLAY获取 - DDL 检索:通过
DBMS_METADATA.GET_DDL获取原生 DDL
已知限制:node-sql-parser 5.x 无原生 Oracle 方言模块,复杂 PL/SQL 块解析可能失败(格式化仍可用)
简介:国产信创数据库,通过 ODBC 桥接支持连接达梦数据库,语言层基于 Oracle 方言派生。
前置要求:
- 需要在本机安装达梦 ODBC 驱动(DM8 ODBC Driver)
- 本插件依赖
odbcnpm 包(native 模块),需要 C++ 编译环境:- Windows:需安装 Visual Studio Build Tools(C++ 工作负载)
- macOS:需安装 Xcode Command Line Tools(
xcode-select --install) - Linux:需安装
python3 make g++(Debian/Ubuntu:build-essential,CentOS/RHEL:gcc-c++)
- 默认端口 5236,默认用户 SYSDBA
连接配置:
| 配置项 | 说明 | 默认值 |
|---|---|---|
| ODBC 驱动名 | ODBC 驱动注册名 | DM8 ODBC DRIVER |
| 兼容模式 | 影响 SQL 语法解析:Oracle / MySQL / PostgreSQL | Oracle |
| Schema | 可选,指定连接后的默认 Schema | - |
| 主机 | 达梦数据库服务器地址 | localhost |
| 端口 | 达梦数据库监听端口 | 5236 |
| 用户名 | 默认管理员账户 | SYSDBA |
语法支持:
SELECT TOP n ...语法LIMIT n语法(MySQL 兼容模式)- 保留 Oracle 兼容语法:CONNECT BY、ROWNUM、DUAL、
||字符串拼接、:=赋值 - 达梦特有函数:DM_HASH、DM_ENCRYPT、TO_DM_DATE
- 元数据浏览:表、视图、函数、存储过程、触发器、序列、同义词
已知限制:ODBC 不支持原生查询取消,依赖每查询超时(30s)兜底
| 命令 | Windows/Linux | Mac |
|---|---|---|
| 替换参数 | Ctrl+Alt+P |
Cmd+Alt+P |
| 切换注释 | Ctrl+/ |
Cmd+/ |
| 高级注释 | Ctrl+Shift+/ |
Cmd+Shift+/ |
| 执行 SQL | Ctrl+Shift+E |
Cmd+Shift+E |
| 执行选中 SQL | Ctrl+Shift+R |
Cmd+Shift+R |
| 格式化文档 | Shift+Alt+F |
Shift+Option+F |
| 跳转到定义 | F12 |
F12 |
| 查找所有引用 | Shift+F12 |
Shift+F12 |
| 重命名符号 | F2 |
F2 |
在 VSCode 设置中搜索 "SQL All in One" 进行配置,80+ 项设置按以下类别组织:
| 设置项 | 说明 | 默认值 |
|---|---|---|
dialect |
SQL 方言 | hive |
displayLanguage |
界面语言 | auto |
详见 SQL 格式化章节。
详见 SQL Lint 规则章节。
| 设置项 | 说明 | 默认值 |
|---|---|---|
enableLinter |
启用 Lint | true |
enableCodeFolding |
启用代码折叠 | true |
enableOutlineView |
启用大纲视图 | true |
enableStatusBar |
启用状态栏 | true |
enableParameterHighlight |
启用参数高亮 | true |
enableSnippets |
启用代码片段 | true |
enableQuickFix |
启用快速修复 | true |
enableHover |
启用悬停信息 | true |
enableNavigation |
启用代码导航 | true |
enableCompletion |
启用智能补全 | true |
enableSmartCommentToggle |
智能注释切换 | true |
| 设置项 | 说明 | 默认值 |
|---|---|---|
completion.keywords |
关键字补全 | true |
completion.functions |
函数补全 | true |
completion.snippets |
代码片段补全 | false |
completion.cteNames |
CTE 名称补全 | true |
completion.identifiers |
标识符补全 | true |
completion.commentSnippets |
注释模板补全 | true |
completion.schema |
Schema 感知补全 | true |
| 设置项 | 说明 | 默认值 |
|---|---|---|
schemaCache.databaseTtl |
数据库缓存 TTL(秒) | 600 |
schemaCache.tableTtl |
表缓存 TTL(秒) | 300 |
schemaCache.columnTtl |
列缓存 TTL(秒) | 120 |
schemaCache.functionTtl |
函数缓存 TTL(秒) | 600 |
schemaCache.refreshOnDDL |
DDL 变更后刷新 | true |
schemaCache.prefetchOnConnect |
连接时预取 | true |
| 设置项 | 说明 | 默认值 |
|---|---|---|
query.maxRows |
最大行数 | 1000 |
query.timeout |
查询超时(毫秒) | 30000 |
query.pageSize |
分页大小 | 100 |
query.nullPlaceholder |
NULL 占位符 | (NULL) |
| 设置项 | 说明 | 默认值 |
|---|---|---|
safetyGuard.level |
安全级别(strict/moderate/off) | moderate |
| 设置项 | 说明 | 默认值 |
|---|---|---|
execution.batchMode |
批量模式(sequential/transaction) | sequential |
execution.onError |
错误处理(stop/continue) | stop |
execution.saveProgress |
保存进度 | true |
execution.cancelRetries |
取消重试次数 | 3 |
execution.cancelRetryDelay |
取消重试延迟(ms) | 500 |
| 设置项 | 说明 | 默认值 |
|---|---|---|
export.defaultFormat |
默认导出格式 | csv |
export.csvDelimiter |
CSV 分隔符 | , |
export.csvEncoding |
CSV 编码 | utf-8 |
export.includeHeaders |
包含表头 | true |
| 设置项 | 说明 | 默认值 |
|---|---|---|
dataEditor.editMode |
编辑模式(readonly/editable) | readonly |
dataEditor.autoCommit |
自动提交 | true |
dataEditor.defaultView |
默认视图(grid/form) | grid |
dataEditor.optimisticLocking |
乐观锁 | false |
dataEditor.maxBlobPreviewSize |
BLOB 预览最大大小(字节) | 5242880 |
dataEditor.blobTextPreviewSize |
BLOB 文本预览大小(字节) | 1048576 |
dataEditor.longTransactionWarning |
长事务警告阈值(秒) | 300 |
dataEditor.showTransactionStatus |
显示事务状态 | true |
dataEditor.enableValidation |
启用验证 | true |
dataEditor.validateOnEdit |
编辑时验证 | true |
dataEditor.validateForeignKeys |
外键验证 | false |
| 设置项 | 说明 | 默认值 |
|---|---|---|
results.enablePreload |
启用滚动预加载 | true |
results.jsonPrettyPrint |
JSON 美化输出 | true |
results.dateFormat |
日期格式(local/utc/relative) | local |
results.longTextThreshold |
长文本截断阈值 | 200 |
| 设置项 | 说明 | 默认值 |
|---|---|---|
history.maxEntries |
最大历史条目数 | 500 |
| 设置项 | 说明 | 默认值 |
|---|---|---|
enableSmartCommentToggle |
智能注释切换 | true |
headerAuthor |
文件头作者 | "" |
headerModifier |
文件头修改人 | "" |
| 设置项 | 说明 | 默认值 |
|---|---|---|
performance.monitorLevel |
监控级别(off/light/full) | light |
Q1:安装后打开 SQL 文件没有反应,格式化无效果?
A:检查 VSCode 版本是否 ≥ 1.85.0;查看输出面板「SQL All in One」通道是否有错误日志;确认插件已被激活(打开 .sql 文件后状态栏应显示方言名称)。如未激活,尝试执行任意 SQL All in One 命令触发激活。
Q2:连接达梦数据库时报错 Cannot find package 'odbc'?
A:odbc 是 native 模块,需要 C++ 编译环境。Windows 安装 Visual Studio Build Tools(C++ 工作负载),macOS 执行 xcode-select --install,Linux 安装 build-essential 或 gcc-c++。详见上方达梦章节。
Q3:Hive 方言下使用 REGEXP 运算符格式化失败?
A:v2.27.2 已修复此问题。插件会在解析阶段将 REGEXP/NOT REGEXP 临时替换为 RLIKE/NOT RLIKE(Hive 等价别名),格式化完成后再还原。
Q4:格式化未写完的 SQL(如缺少 GROUP BY、未闭合括号)时报错?
A:v2.28.0 新增「不完整 SQL 智能格式化」机制,会自动补全最小化语法 token 后格式化,再移除补全内容。若仍失败,请通过 GitHub Issues 提供具体 SQL 样例。
Q5:执行查询时返回空结果,但 SQL 在其他客户端能正常执行?
A:检查 SQL 末尾是否有多余分号(部分驱动将末尾分号视为第二条空语句);检查 query.maxRows 配置是否过小;查看输出面板是否有错误日志。v2.27.0 已修复 MySQL 流式查询在 maxRows < batchSize 时丢失全部行数据的问题。
Q6:可视化配置页面无法切换标签页?
A:v2.26.6/v2.27.1 已修复此问题,根因是 webview 脚本中重复调用 acquireVsCodeApi() 导致崩溃。请升级到最新版本。
Q7:如何切换 SQL 方言?
A:三种方式:
- 状态栏点击当前方言名称,快速切换
- 设置 →
SQL-All-in-One.dialect选择 - 连接数据库后会自动切换为对应方言
Q8:如何禁用某些 Lint 规则?
A:在 VSCode 设置中搜索规则 ID(如 avoid_select_star),将 enabled 设为 false,或调整 severity 级别。
Q9:如何为团队统一格式化配置?
A:在 .vscode/settings.json 中配置 SQL-All-in-One.* 相关设置,提交到版本控制即可团队共享。
Q10:连接数据库支持 SSH 隧道吗?
A:支持。在添加连接时勾选「SSH 隧道」,填写 SSH 主机、端口、用户名、私钥路径或密码。ssh2 模块为按需加载,不使用 SSH 时无开销。
Q11:密码存储在哪里?
A:使用 VSCode 的 SecretStorage API 安全存储,加密保存于操作系统密钥链(macOS Keychain / Windows Credential Manager / Linux libsecret)。
Q12:如何导出/导入连接配置?
A:在数据库浏览器视图标题栏点击「...」菜单,选择 Export Connections / Import Connections。导出时可选是否包含密码(包含密码时需确认)。
- 问题反馈:GitHub Issues
- 源代码:GitHub Repository
- 更新日志:CHANGELOG.md
MIT License
SQL All in One is an all-in-one VSCode extension for SQL developers, integrating database connection management, SQL execution, data editing, table design, execution plans, formatting, smart completion, syntax checking, code navigation, DDL conversion, and more — covering the complete SQL development workflow.
| Publisher | bryce-qin |
| Version | 2.34.0 |
| License | MIT |
| VSCode Engine | ^1.85.0 |
| Repository | GitHub |
- 12 SQL dialects: Hive, MySQL, SparkSQL, FlinkSQL, PostgreSQL, BigQuery, SQLite, StarRocks, SQL Server, Oracle, Dameng, Standard SQL
- 8 database connections: MySQL, PostgreSQL, SQLite, StarRocks, SQL Server, Oracle, Dameng (with SSH tunnel and SSL)
- AST-driven formatting: 40+ configurable options, supports incomplete SQL formatting
- 30 Lint rules: Real-time diagnostics with quick fixes
- 7 completion types: Keywords, 580+ functions, schema tables/columns, CTEs, snippets, etc.
- Visual toolchain: Table designer, materialized view designer, execution plan, data editor, query result panel
- Complete code tooling: Go-to-definition, find references, rename, folding, outline, hover
- Bilingual: Auto-follows VSCode language setting (Chinese / English)
| Language ID | Aliases | Extensions |
|---|---|---|
sql |
SQL | .sql |
hive |
Hive, hive-sql | .hql |
mysql |
MySQL | .mysql |
spark |
SparkSQL, spark | .sparksql |
flinksql |
FlinkSQL, flink-sql | .flinksql |
postgresql |
PostgreSQL, postgres | .psql, .pgsql |
bigquery |
BigQuery | .bqsql |
sqlite |
SQLite | .sqlite, .sqlt |
starrocks |
StarRocks | .starrocks |
sqlserver |
SQL Server, mssql | .sqlserver |
plsql |
Oracle, PL/SQL | .plsql, .oracle |
dameng |
Dameng, DM | .dameng, .dm |
- Data Engineers: Write Hive/Spark/FlinkSQL ETL scripts with normalized formatting, syntax checking, and MySQL-to-Hive DDL conversion
- Backend Developers: Connect to MySQL/PostgreSQL directly in VSCode to execute queries, edit data, and design tables
- DBAs: Browse database schemas, view function/procedure/trigger definitions, export table DDLs
- Data Analysts: Execute queries, paginate results, export CSV/JSON for downstream use
- SQL Learners: Learn SQL function usage and best practices via hover tips, Lint suggestions, and completion signatures
- Open VSCode
- Press
Ctrl+Shift+X(Windows) orCmd+Shift+X(Mac) to open the Extensions panel - Search for
SQL All in One - Click "Install"
- Download
hive-formatter-{version}.vsixfrom GitHub Releases - In the VSCode Extensions panel, click
...→Install from VSIX... - Or run from command line:
code --install-extension hive-formatter-{version}.vsix
- VSCode 1.85.0 or higher
- Connecting to Dameng requires the DM8 ODBC driver and a C++ build environment (see the Dameng section below)
Open any .sql / .hql / .mysql file and use any of the following:
- Press
Shift+Alt+F(Windows) orShift+Option+F(Mac) to format the entire document - Select partial SQL, press
Ctrl+Shift+P→ search forFormat Selection (SQL All in One) - Right-click the editor → select "Format Document"
Before:
select id,name,email from users where age>18 and status='active' order by created_at desc limit 10;After (standard style):
SELECT
id,
name,
email
FROM users
WHERE
age > 18
AND status = 'active'
ORDER BY created_at DESC
LIMIT 10;- Click the database icon in the activity bar to open the "Database Explorer" sidebar
- Click the
+button to add a connection - In the dialog, select the database type and fill in host, port, username, password, etc.
- Click "Test Connection" to verify, then click "Connect" to save
- Right-click a database or table in the Database Explorer and select "New Query"
- Enter your query in the SQL editor
- Press
Ctrl+Shift+E(Mac:Cmd+Shift+E) to execute all SQL - Or select partial SQL and press
Ctrl+Shift+R(Mac:Cmd+Shift+R) to execute only the selection - View results in the query result panel — supports pagination, grid/form view switching, and export
- Settings UI: VSCode Settings → search
SQL All in One→ adjust 80+ options - Visual Config Editor:
Ctrl+Shift+P→ searchSQL All in One Configto open the graphical config panel with live preview and quick presets
Supports 8 database connections with a unified management interface:
| Database | Driver | Features |
|---|---|---|
| MySQL | mysql2 | Connection pool, SSL, SSH tunnel, streaming queries |
| PostgreSQL | pg | Connection pool, SSL, SSH tunnel, query cancellation |
| SQLite | better-sqlite3 | File path, WAL mode, query interrupt |
| StarRocks | mysql2 | MySQL protocol, OLAP DDL, materialized views |
| SQL Server | mssql | T-SQL, Windows authentication, FOR XML/JSON |
| Oracle | oracledb 6.x | thin/thick mode, PL/SQL, DBMS_METADATA |
| Dameng DM8 | odbc | ODBC bridge, Oracle-compatible syntax |
| SSH Tunnel | ssh2 | Available for all SSL-supported databases |
Common Features:
- Graphical connection dialog (replaces step-by-step input boxes)
- Connection lifecycle management (add/edit/remove/connect/disconnect)
- Connection pool health check, idle check, auto-reconnect
- Auto-retry with exponential backoff (max 3 retries)
- Active connection management (single active connection mode)
- SecretStorage for password security
- Connection import/export (with password protection)
Execution Controls:
| Command | Shortcut | Description |
|---|---|---|
| Execute SQL | Ctrl+Shift+E / Cmd+Shift+E |
Execute all SQL in the editor |
| Execute Selected SQL | Ctrl+Shift+R / Cmd+Shift+R |
Execute only the selection |
| Cancel Running Query | - | Cancel the running query |
Query Result Panel (integrated Monaco editor):
- Top-bottom split layout: SQL editor on top, query results on bottom, draggable ratio
- Monaco editor: SQL syntax highlighting, IntelliSense, code folding, auto-follows VSCode theme
- Dialect-aware Monarch syntax highlighting: 12 dialect-specific tokenizers
- Static completion: keywords, 580+ function signatures (with parameter snippets), data types
- Schema-aware completion: triggered by
.or space, queries database schema for table/column names - Function signature help: shows parameter signatures on
(or,, auto-highlights current parameter - Hover info: function signatures, keyword descriptions, table structure
- Lint diagnostics: auto-check on edit, shows squiggly warnings
- Clicking a table/view node in Database Explorer auto-generates
SELECT * FROM table LIMIT 200and executes it
Result Display:
- Pagination and scroll preloading
- Grid view and form view switching
- JSON pretty print
- Date format display (local / UTC / relative)
- Long text truncation (configurable threshold)
- NULL value placeholder display
- Batch execution mode (sequential / transaction)
- Error handling strategy (stop / continue)
- Progress saving
| Operation | Format | Description |
|---|---|---|
| Export query result | CSV | Configurable delimiter, encoding, headers |
| Export query result | JSON | Supports pretty print |
| Export query result | SQL INSERT | Generates INSERT statements |
| Export table DDL | DDL | Complete CREATE TABLE statements |
| Import from file | CSV / JSON | Bulk data import |
- Visual table design/edit
- Column definitions: types, constraints, comments
- Data editor: readonly / editable modes
- Auto commit mode
- Optimistic locking for concurrent editing
- BLOB preview (size limit + MIME type whitelist)
- Data validation (real-time, foreign key validation optional)
- Transaction status display
- Long transaction warning
- Supports
EXPLAIN FORMAT=JSONvisualization - Tree structure for execution plan display
- Node details: operation type, estimated cost, rows, scan type
- Dialect-specific adapters:
- MySQL:
EXPLAIN FORMAT=JSON - PostgreSQL:
EXPLAIN (FORMAT JSON) - SQL Server:
SET SHOWPLAN_XML ON - Oracle:
EXPLAIN PLAN FOR+DBMS_XPLAN.DISPLAY
- MySQL:
Tree view of database objects:
🔗 Connection Name
├── 📁 database_1
│ ├── 📊 Tables
│ │ └── users
│ │ ├── id (INT, PK)
│ │ ├── name (VARCHAR)
│ │ └── email (VARCHAR)
│ ├── 👁️ Views
│ ├── ⚡ Functions
│ ├── 📜 Procedures
│ └── 🔔 Triggers
└── 📁 database_2
Actions:
- View table data (auto-generates
SELECT * FROM ... LIMIT 200) - View DDL (table, view, function, procedure, trigger definitions)
- Edit table design
- Copy column name
- Add/remove favorites
- Set default database
- Schema cache (configurable TTL: database / table / column / function)
- Auto-refresh schema on DDL changes
- Prefetch schema on connect
AST-driven formatting engine based on node-sql-parser v5.x with 40+ configurable options. Supports formatting incomplete SQL (new in v2.28): when SQL is missing GROUP BY, unclosed ), incomplete IN(...), missing second operand of BETWEEN, etc., automatically completes minimal syntax tokens for parsing, then removes them after formatting.
Case Control
| Option | Description | Default |
|---|---|---|
keywordCase |
Keywords (preserve/upper/lower) | preserve |
dataTypeCase |
Data types | preserve |
functionCase |
Function names | preserve |
identifierCase |
Identifiers | preserve |
nullCase |
NULL keyword | preserve |
booleanCase |
TRUE/FALSE | preserve |
Indent Control
| Option | Description | Default |
|---|---|---|
indentStyle |
Style (standard/tabularLeft/tabularRight) | standard |
tabSizeOverride |
Indent width | 2 |
insertSpacesOverride |
Use spaces for indentation | true |
ignoreTabSettings |
Ignore VSCode global indent settings | false |
Newline Control (25+ options)
Newline strategies for SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, JOIN, ON, USING, WITH, CTE, CASE/WHEN/THEN/ELSE, IN, set operations, LATERAL VIEW, DISTRIBUTE BY, CLUSTER BY, SORT BY, INSERT columns/values can all be configured independently.
Alignment Control
| Option | Description | Default |
|---|---|---|
alignColumnDefinitions |
Align column definitions | false |
alignWhereClauses |
Align WHERE conditions | false |
alignCaseStatements |
Align CASE statements | false |
alignOnClauses |
Align ON conditions | false |
alignInsertColumns |
Align INSERT columns | false |
alignInsertValuesGroups |
Align INSERT value groups | false |
tabulateAlias |
Tabulate aliases | false |
Spacing & Other
| Option | Description | Default |
|---|---|---|
denseOperators |
Remove spaces around operators | false |
spaceBeforeComma |
Space before comma | false |
spaceInsideParentheses |
Space inside parentheses | false |
expressionWidth |
Expression wrap character threshold | 50 |
linesBetweenQueries |
Blank lines between queries | 1 |
newlineBeforeSemicolon |
Newline before semicolon | false |
commaPosition |
Comma position (after/before) | after |
singleLineMaxLength |
Single line max length | 80 |
trimTrailingSpaces |
Trim trailing spaces | true |
semicolonAtEnd |
Semicolon at end | true |
commentPosition |
Comment position (preserve/newline/inline) | preserve |
subqueryParenStyle |
Subquery paren style (inline/newline) | inline |
maxItemsInlineList |
Max items in inline list | 5 |
indentCteBody |
Indent CTE body | true |
cteCommaPosition |
CTE comma position | before |
newlineBetweenCtes |
Newline between CTEs | true |
indentJoinConditions |
Indent JOIN conditions | true |
indentWhen / indentThen |
Indent WHEN / THEN | true |
blankLinesBeforeSetOperation |
Blank lines before set operation | 1 |
blankLinesAfterSetOperation |
Blank lines after set operation | 0 |
The formatter has a built-in cache (by dialect + config hash, max 50 instances) and supports formatting the selection.
7 completion types, each independently toggleable:
| Type | Description | Example |
|---|---|---|
| Schema Completion | Table/column names from connected database | Type table prefix → suggest table and columns |
| Keyword Completion | Dialect-specific keywords and data types | SEL → SELECT |
| Function Completion | 580+ function signatures with params, return type, description | SUB → SUBSTR(string, start, length) |
| Snippet Completion | Dialect-specific code snippets | sel → insert SELECT template |
| CTE Name Completion | CTE names defined in WITH clause | WITH cte AS (...) SELECT → suggests cte |
| Identifier Completion | Context-aware table/column suggestions | FROM clause suggests table names |
| Comment Template Completion | header, todo, fixme, etc. | header → insert file header comment |
- Debounced diagnostics (300ms) with CancellationToken support
- Two-layer checking: AST diagnostics + Lint diagnostics
- Severity level filtering (Error / Warning / Info)
Syntax Error Checks: HAVING without GROUP BY, LIMIT without value, JOIN without ON, misplaced DISTINCT, aggregate in WHERE, wildcard in UPDATE, incomplete CASE, mismatched parentheses, unclosed strings, duplicate column aliases
Code Quality Suggestions: duplicate table aliases, reserved words as identifiers, SELECT without FROM, INSERT without column names, redundant DISTINCT, subquery without alias, suspicious NULL comparison
Dialect Hints: MySQL date function differences in Hive
Each rule supports enabled + severity configuration:
| Rule ID | Description | Default Enabled | Default Level |
|---|---|---|---|
avoid_select_star |
Avoid SELECT * | ✅ | Warning |
explicit_join_type |
Explicit JOIN type | ✅ | Info |
limit_with_order_by |
LIMIT should pair with ORDER BY | ✅ | Warning |
avoid_column_count_mismatch |
INSERT column/value count mismatch | ✅ | Error |
missing_primary_key |
CREATE TABLE missing primary key | ✅ | Warning |
use_current_timestamp |
Use CURRENT_TIMESTAMP | ✅ | Info |
avoid_select_in_insert |
Avoid SELECT in INSERT | ✅ | Warning |
duplicate_column_aliases |
Duplicate column aliases | ✅ | Warning |
missing_query_comment |
Complex queries missing comments | ✅ | Warning |
missing_column_comment |
DDL columns missing COMMENT | ✅ | Warning |
commented_out_code |
Commented-out code | ✅ | Info |
expired_todo |
Expired TODO/FIXME | ✅ | Info |
having_without_group_by |
HAVING without GROUP BY | ✅ | Error |
limit_invalid_value |
Invalid LIMIT value | ✅ | Error |
reserved_word_identifier |
Reserved word as identifier | ✅ | Warning |
join_missing_on |
JOIN missing ON | ✅ | Error |
select_without_from |
SELECT without FROM | ✅ | Warning |
misplaced_distinct |
Misplaced DISTINCT | ✅ | Error |
aggregate_in_where |
Aggregate in WHERE | ✅ | Error |
subquery_without_alias |
Subquery without alias | ✅ | Warning |
suspicious_null_comparison |
Suspicious NULL comparison | ✅ | Warning |
incomplete_case |
Incomplete CASE | ✅ | Error |
redundant_distinct |
Redundant DISTINCT | ✅ | Warning |
date_function_usage |
Date function usage hints | ✅ | Info |
wildcard_in_update |
Wildcard in UPDATE | ✅ | Error |
implicit_cross_join |
Implicit cross join | ✅ | Warning |
deprecated_function |
Deprecated function | ✅ | Info |
postgres_boolean_comparison |
PostgreSQL boolean comparison | ✅ | Hint |
use_coalesce_over_isnull |
Use COALESCE over ISNULL | ❌ | Info |
avoid_correlated_subqueries |
Avoid correlated subqueries | ❌ | Warning |
long_query_line |
Long query line | ❌ | Info |
explicit_column_aliasing |
Explicit column aliasing | ❌ | Info |
uppercase_keywords |
Uppercase keywords | ❌ | Info |
consistent_aliasing |
Consistent aliasing | ❌ | Info |
Some rules support sub-options:
missing_query_comment:thresholdLineCount,thresholdJoinCount,thresholdSubqueryCountmissing_column_comment:aggregate,externalTableExemptcommented_out_code:thresholdLinesexpired_todo:gracePeriodDays
| Problem | Fix Suggestion |
|---|---|
= NULL |
Replace with IS NULL |
!= NULL / <> NULL |
Replace with IS NOT NULL |
| Reserved word as alias | Wrap with backticks |
| Subquery without alias | Auto-add AS subquery |
| INSERT without column names | Add column name placeholders |
| HAVING without GROUP BY | Auto-add GROUP BY |
| Feature | Shortcut | Description |
|---|---|---|
| Go to Definition | F12 |
CTE, table alias, column alias |
| Find All References | Shift+F12 |
Find symbol references |
| Rename Symbol | F2 |
With reserved word/conflict checks |
| Breadcrumb Navigation | - | Clause-level (SELECT/FROM/WHERE/GROUP BY/HAVING/ORDER BY) |
Shared AstNavigator navigation engine.
AST-based MySQL ↔ Hive SQL conversion:
- Supports CREATE TABLE, SELECT, INSERT, UPDATE, DELETE, CREATE VIEW and other statement types
- Pluggable node transformer architecture:
- Function mapping (NOW→CURRENT_TIMESTAMP, IFNULL→COALESCE, IF→CASE WHEN)
- Type mapping (DATETIME↔TIMESTAMP, VARCHAR↔STRING)
- Column attribute stripping, table option filtering, constraint removal, Hive clause removal
- Interactive regex fallback when AST parsing fails
- Warnings for complex types (ARRAY/MAP/STRUCT) during conversion
- Entry: right-click menu
MySQL to HiveSQL/HiveSQL to MySQL, or command palette
Smart Comment Toggle
| Shortcut | Function |
|---|---|
Ctrl+/ / Cmd+/ |
Smart toggle: single line → line comment, multi-line → block comment |
Ctrl+Shift+/ / Cmd+Shift+/ |
Advanced: format-disable markers, DDL COMMENT, block comment |
Comment Template Completion
| Prefix | Description |
|---|---|
header |
File header comment (auto author, auto table dependencies) |
col |
Column COMMENT |
tbl |
Table COMMENT |
todo |
TODO comment |
fixme |
FIXME comment |
hack |
HACK comment |
desc |
Query description comment |
section |
Section divider comment |
Comment Lint Rules: missing_query_comment, missing_column_comment, commented_out_code, expired_todo
4-layer resolver chain:
- Parameter hover: Show parameter definitions
- Function signature hover: Function parameters, return type, usage notes
- Schema hover: Table structure and column info from connected database
- Keyword hover: Keyword usage descriptions
- Fold CTE, subquery, function blocks, CASE statements
- Document outline: quick navigation to SELECT/FROM/WHERE and other clauses
Open via Ctrl+Shift+P → SQL All in One Config:
- Graphical configuration interface
- Collapsible groups, toggle switches
- Live format preview
- Drag-to-resize preview area
- Quick presets: Default, Hive, MySQL, Compact
- Save config button
- Shows current SQL dialect
- Click for quick access to the config editor
- Only shown in SQL files
- Variable highlighting
- Batch parameter replacement (
Ctrl+Alt+P/Cmd+Alt+P) - Supports JDBC
:?parameter syntax - Regex injection protection
- History of executed queries
- Configurable max entries (default 500)
- Show/clear history commands
- Dangerous SQL interception
- 3 levels:
strict(all rules),moderate(confirmation-level only),off - Prevents accidental DROP, TRUNCATE, DELETE without WHERE, etc.
- Chinese (zh) and English (en)
- Auto-follows VSCode language setting
displayLanguageconfig:auto/zh/en
Common SQL: sel (SELECT), seld (SELECT DISTINCT), join, leftjoin, groupby, case, insert, insertsel, update, delete, ct (CREATE TABLE), ctas, with, union
Hive: hivepart, hiveselpart, hiveext
SparkSQL: sparktemp, sparkglobaltemp, sparkcrtparquet, sparkcrtjdbc, sparkcrtdelta, sparkins, sparkinsinto, sparklv, sparklvp, sparkmerge, sparkwin, sparkcache, sparkpivot, sparkfn, sparkstats, sparkconvdelta, sparkoptimize, sparkvacuum, sparkdesc
FlinkSQL: flinkkafka, flinkjdbc, flinktumble, flinkhop, flinkcumulate, flinkwatermark, flinktemporal, flinkdedup
Comments: header, todo, fixme, hack, desc, section, col, tbl
Overview: A new-generation high-performance MPP database, connected via MySQL protocol (mysql2 driver), with the language layer extending the MySQL dialect.
Prerequisites: StarRocks FE node must enable the MySQL protocol port (default 9030), default user root
Connection Configuration:
| Setting | Description | Default |
|---|---|---|
| Host | StarRocks FE address | localhost |
| Port | MySQL protocol port | 9030 |
| Username | Default admin account | root |
| SSL | SSL encrypted connection | Off |
| SSH Tunnel | SSH tunnel connection | Off |
Syntax Support:
- Specific types: BITMAP, HLL, PERCENTILE, JSON, ARRAY, MAP, STRUCT
- OLAP table models: DUPLICATE KEY, AGGREGATE KEY, UNIQUE KEY
- ROLLUP, COLOCATE, DYNAMIC_PARTITION, PARTITION, BUCKETS, PROPERTIES
- Materialized views: CREATE/REFRESH MATERIALIZED VIEW
- Specific functions: BITMAP_UNION, HLL_UNION, COLLECT_LIST, EXPLODE_SPLIT, etc.
- Metadata browsing: tables, views (StarRocks does not support functions/procedures/triggers)
Known Limitations: Older StarRocks (before 2.x) does not support transactions
Overview: Microsoft's enterprise relational database, connected via the mssql driver, supports T-SQL syntax.
Prerequisites: SQL Server 2016 or later recommended, default port 1433, default user sa
Connection Configuration:
| Setting | Description | Default |
|---|---|---|
| Host | SQL Server address | localhost |
| Port | Listening port | 1433 |
| Username | Default account | sa |
| Encryption | Encrypt connection | On |
| Trust server certificate | Required for self-signed certificates | Off |
| Domain | Windows authentication domain (optional) | - |
| SSL | SSL encrypted connection | Off |
| SSH Tunnel | SSH tunnel connection | Off |
Syntax Support:
- T-SQL specific keywords: TOP, OFFSET FETCH, OUTPUT, PIVOT/UNPIVOT, MERGE, CROSS APPLY/OUTER APPLY
- T-SQL specific types: NVARCHAR, DATETIME2, DATETIMEOFFSET, MONEY, UNIQUEIDENTIFIER, SQL_VARIANT, HIERARCHYID, GEOGRAPHY/GEOMETRY
- Table hints: WITH (NOLOCK), etc.
- FOR XML / FOR JSON serialization
- TRY_CONVERT/TRY_CAST/STRING_AGG/IIF/CHOOSE and other functions
- Metadata browsing: tables, views, functions, procedures, triggers, indexes
- Execution plan: via
SET SHOWPLAN_XML ONfor XML plan
Overview: Enterprise relational database, connected via the oracledb 6.x driver, defaults to thin mode (pure JS, no Oracle Client required).
Prerequisites: Oracle 11g or later recommended, default port 1521, default user system
Connection Configuration:
| Setting | Description | Default |
|---|---|---|
| Host | Oracle server address | localhost |
| Port | Listening port | 1521 |
| Username | Default account | system |
| Service Name/SID | Service name or SID (optional connectString override) | - |
| Use SID | Connect via SID (default service name) | Off |
| Thick Mode | Enable thick mode (requires Instant Client) | Off |
| SSL | SSL encrypted connection | Off |
| SSH Tunnel | SSH tunnel connection | Off |
Syntax Support:
- Oracle-specific keywords: DUAL, ROWNUM, ROWID, SYSDATE, CONNECT BY, MINUS, SEQUENCE, SYNONYM, PRIOR
- Oracle-specific types: NUMBER, VARCHAR2, NVARCHAR2, CLOB/NCLOB, BFILE, TIMESTAMP WITH TIME ZONE, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND, XMLTYPE
- PL/SQL: PACKAGE, PRAGMA AUTONOMOUS_TRANSACTION, PLS_INTEGER, BINARY_INTEGER
- q'[...]' alternative quoting mechanism
- Specific functions: DECODE, NVL/NVL2, LISTAGG, CONNECT_BY_ROOT, SYS_CONNECT_BY_PATH, DBMS_RANDOM, etc.
- Metadata browsing: tables, views, functions, procedures, triggers, indexes
- Execution plan: via
EXPLAIN PLAN FOR+DBMS_XPLAN.DISPLAY - DDL retrieval: via
DBMS_METADATA.GET_DDLfor native DDL
Known Limitations: node-sql-parser 5.x has no native Oracle dialect module; complex PL/SQL blocks may fail to parse (formatting still works)
Overview: A domestic Chinese database, connected via an ODBC bridge, with the language layer derived from the Oracle dialect.
Prerequisites:
- Install the Dameng ODBC driver (DM8 ODBC Driver) on your machine
- This extension depends on the
odbcnpm package (native module), which requires a C++ build environment:- Windows: install Visual Studio Build Tools (C++ workload)
- macOS: install Xcode Command Line Tools (
xcode-select --install) - Linux: install
python3 make g++(Debian/Ubuntu:build-essential, CentOS/RHEL:gcc-c++)
- Default port 5236, default user
SYSDBA
Connection Configuration:
| Setting | Description | Default |
|---|---|---|
| ODBC driver name | Registered ODBC driver name | DM8 ODBC DRIVER |
| Compatibility mode | Affects SQL parsing: Oracle / MySQL / PostgreSQL | Oracle |
| Schema | Optional, default schema after connecting | - |
| Host | Dameng database server address | localhost |
| Port | Dameng database listening port | 5236 |
| Username | Default administrator account | SYSDBA |
Syntax Support:
SELECT TOP n ...syntaxLIMIT nsyntax (MySQL compatibility mode)- Oracle-compatible syntax retained: CONNECT BY, ROWNUM, DUAL,
||string concatenation,:=assignment - Dameng-specific functions: DM_HASH, DM_ENCRYPT, TO_DM_DATE
- Metadata browsing: tables, views, functions, procedures, triggers, sequences, synonyms
Known Limitations: ODBC does not support native query cancellation; relies on per-query timeout (30s) as fallback
| Command | Windows/Linux | Mac |
|---|---|---|
| Replace Parameter | Ctrl+Alt+P |
Cmd+Alt+P |
| Toggle Comment | Ctrl+/ |
Cmd+/ |
| Advanced Comment | Ctrl+Shift+/ |
Cmd+Shift+/ |
| Execute SQL | Ctrl+Shift+E |
Cmd+Shift+E |
| Execute Selected SQL | Ctrl+Shift+R |
Cmd+Shift+R |
| Format Document | Shift+Alt+F |
Shift+Option+F |
| Go to Definition | F12 |
F12 |
| Find All References | Shift+F12 |
Shift+F12 |
| Rename Symbol | F2 |
F2 |
Search "SQL All in One" in VSCode settings to configure 80+ options organized into the following categories:
| Setting | Description | Default |
|---|---|---|
dialect |
SQL dialect | hive |
displayLanguage |
UI language | auto |
See the SQL Formatting section.
See the SQL Lint Rules section.
| Setting | Description | Default |
|---|---|---|
enableLinter |
Enable linting | true |
enableCodeFolding |
Enable code folding | true |
enableOutlineView |
Enable outline view | true |
enableStatusBar |
Enable status bar | true |
enableParameterHighlight |
Enable parameter highlighting | true |
enableSnippets |
Enable code snippets | true |
enableQuickFix |
Enable quick fix | true |
enableHover |
Enable hover information | true |
enableNavigation |
Enable code navigation | true |
enableCompletion |
Enable smart completion | true |
enableSmartCommentToggle |
Smart comment toggle | true |
| Setting | Description | Default |
|---|---|---|
completion.keywords |
Keyword completion | true |
completion.functions |
Function completion | true |
completion.snippets |
Snippet completion | false |
completion.cteNames |
CTE name completion | true |
completion.identifiers |
Identifier completion | true |
completion.commentSnippets |
Comment template completion | true |
completion.schema |
Schema-aware completion | true |
| Setting | Description | Default |
|---|---|---|
schemaCache.databaseTtl |
Database cache TTL (seconds) | 600 |
schemaCache.tableTtl |
Table cache TTL (seconds) | 300 |
schemaCache.columnTtl |
Column cache TTL (seconds) | 120 |
schemaCache.functionTtl |
Function cache TTL (seconds) | 600 |
schemaCache.refreshOnDDL |
Refresh on DDL changes | true |
schemaCache.prefetchOnConnect |
Prefetch on connect | true |
| Setting | Description | Default |
|---|---|---|
query.maxRows |
Max rows | 1000 |
query.timeout |
Query timeout (ms) | 30000 |
query.pageSize |
Page size | 100 |
query.nullPlaceholder |
NULL placeholder | (NULL) |
| Setting | Description | Default |
|---|---|---|
safetyGuard.level |
Safety level (strict/moderate/off) | moderate |
| Setting | Description | Default |
|---|---|---|
execution.batchMode |
Batch mode (sequential/transaction) | sequential |
execution.onError |
Error handling (stop/continue) | stop |
execution.saveProgress |
Save progress | true |
execution.cancelRetries |
Cancel retries | 3 |
execution.cancelRetryDelay |
Cancel retry delay (ms) | 500 |
| Setting | Description | Default |
|---|---|---|
export.defaultFormat |
Default export format | csv |
export.csvDelimiter |
CSV delimiter | , |
export.csvEncoding |
CSV encoding | utf-8 |
export.includeHeaders |
Include headers | true |
| Setting | Description | Default |
|---|---|---|
dataEditor.editMode |
Edit mode (readonly/editable) | readonly |
dataEditor.autoCommit |
Auto commit | true |
dataEditor.defaultView |
Default view (grid/form) | grid |
dataEditor.optimisticLocking |
Optimistic locking | false |
dataEditor.maxBlobPreviewSize |
Max BLOB preview size (bytes) | 5242880 |
dataEditor.blobTextPreviewSize |
BLOB text preview size (bytes) | 1048576 |
dataEditor.longTransactionWarning |
Long transaction warning threshold (seconds) | 300 |
dataEditor.showTransactionStatus |
Show transaction status | true |
dataEditor.enableValidation |
Enable validation | true |
dataEditor.validateOnEdit |
Validate on edit | true |
dataEditor.validateForeignKeys |
Foreign key validation | false |
| Setting | Description | Default |
|---|---|---|
results.enablePreload |
Enable scroll preloading | true |
results.jsonPrettyPrint |
JSON pretty print | true |
results.dateFormat |
Date format (local/utc/relative) | local |
results.longTextThreshold |
Long text truncation threshold | 200 |
| Setting | Description | Default |
|---|---|---|
history.maxEntries |
Max history entries | 500 |
| Setting | Description | Default |
|---|---|---|
enableSmartCommentToggle |
Smart comment toggle | true |
headerAuthor |
File header author | "" |
headerModifier |
File header modifier | "" |
| Setting | Description | Default |
|---|---|---|
performance.monitorLevel |
Monitoring level (off/light/full) | light |
Q1: After installation, opening a SQL file has no response and formatting doesn't work?
A: Check if VSCode version is ≥ 1.85.0; check the "SQL All in One" channel in the output panel for error logs; confirm the extension is activated (the status bar should show the dialect name after opening a .sql file). If not activated, try executing any SQL All in One command to trigger activation.
Q2: Error Cannot find package 'odbc' when connecting to Dameng?
A: odbc is a native module that requires a C++ build environment. Install Visual Studio Build Tools (C++ workload) on Windows, run xcode-select --install on macOS, or install build-essential / gcc-c++ on Linux. See the Dameng section above for details.
Q3: Formatting fails when using the REGEXP operator in Hive dialect?
A: Fixed in v2.27.2. The plugin temporarily replaces REGEXP/NOT REGEXP with RLIKE/NOT RLIKE (Hive equivalent aliases) during parsing, then restores the original syntax after formatting.
Q4: Error when formatting incomplete SQL (e.g., missing GROUP BY, unclosed parentheses)?
A: v2.28.0 introduces an "incomplete SQL smart formatting" mechanism that automatically completes minimal syntax tokens for parsing, then removes them after formatting. If it still fails, please provide a specific SQL sample via GitHub Issues.
Q5: Query returns empty results, but the SQL works in other clients?
A: Check if the SQL has a trailing semicolon (some drivers treat it as a second empty statement); check if query.maxRows is too small; check the output panel for error logs. v2.27.0 fixed an issue where MySQL streaming queries lost all rows when maxRows < batchSize.
Q6: Visual config panel cannot switch tabs?
A: Fixed in v2.26.6/v2.27.1. The root cause was a crash from repeated acquireVsCodeApi() calls in webview scripts. Please upgrade to the latest version.
Q7: How to switch SQL dialect?
A: Three ways:
- Click the current dialect name in the status bar for quick switching
- Settings →
SQL-All-in-One.dialectto select - Automatically switches to the corresponding dialect when connecting to a database
Q8: How to disable certain Lint rules?
A: Search for the rule ID (e.g., avoid_select_star) in VSCode settings, set enabled to false, or adjust the severity level.
Q9: How to share formatting configuration across a team?
A: Configure SQL-All-in-One.* settings in .vscode/settings.json and commit it to version control for team sharing.
Q10: Does database connection support SSH tunnel?
A: Yes. When adding a connection, check "SSH Tunnel" and fill in the SSH host, port, username, private key path, or password. The ssh2 module is loaded on demand with no overhead when SSH is not used.
Q11: Where are passwords stored?
A: Using VSCode's SecretStorage API, passwords are encrypted and stored in the OS keychain (macOS Keychain / Windows Credential Manager / Linux libsecret).
Q12: How to export/import connection configurations?
A: Click the "..." menu in the Database Explorer view title bar and select Export Connections / Import Connections. You can choose whether to include passwords when exporting (confirmation required when including passwords).
- Issues: GitHub Issues
- Source: GitHub Repository
- Changelog: CHANGELOG.md
MIT License