尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Beekeeper Studio Query Magics 完全指南:用列名后缀格式化 SQL 查询结果

Beekeeper Studio Query Magics 完全指南:用列名后缀格式化 SQL 查询结果 Beekeeper Studio Query Magics 完全指南用列名后缀格式化 SQL 查询结果【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studioQuery Magics 是 Beekeeper Studio 内置的一组列级格式化魔法不需要改 SQL 逻辑只要在 SELECT 语句的列名末尾追加__format__xxx之类的后缀结果网格就会自动把该列渲染成可点击链接、星级评分、进度条、货币金额、图片甚至指向其他表的跳转链接。本文以官方文档为核心结合仓库源码完整梳理每种 Magic 的语法、参数、默认值与底层实现帮助你直接用一条 SQL 完成查询结果的可视化增强。Query Magics 能做什么在 Beekeeper Studio 中执行查询后结果网格由 ResultTable.vue 渲染。当你把列名改写成带 Magic 后缀的形式时该组件会调用MagicColumnBuilder.build(column.name)解析列名并把解析结果交给表格渲染器处理。官方文档给出的核心用途包括将值链接到另一张表外键跳转让 URL 变成可点击链接让邮箱地址变成可点击的 mailto 链接把 URL 直接渲染为图片把数字渲染为星级评分把数字渲染为进度条把数字渲染为本地化货币金额把数字/代码值替换为自定义枚举的可读文本基本用法在列名末尾追加魔法后缀Query Magics 的核心理念是零额外配置你只需在列名后用__双下划线分隔符追加描述性的单词即可。例如把url列渲染为可点击链接select url as url__format__link from some_table从源码看MagicColumnBuilder.ts 的解析逻辑非常简单build(columnName: string): MagicColumn | null { const parts columnName.split(__) // eg website_url__format__link // eg customer_name__goto__customers__id if (parts.length 2) return null const matching this.findCurrentMagic(parts) return matching?.render(parts) || null }列名被__分割后第二个位置是顶层 Magic 名format或goto第三个位置是具体的格式化器如link、stars。如果列名不含__或解析不到匹配的 Magic就按普通列渲染。每个 Magic 内部通过initializers声明它响应哪些关键词Magic.ts 中定义了统一接口name、initializers、render(args)以及可选的subMagics和自动补全提示。下面这张图展示了同一查询中同时使用邮箱链接、跳转链接和星级评分的实际效果。全部可用 Query Magics 详解以下所有描述中方括号[ ]内的内容均为可选参数。为方便对照每个 Magic 都列出了源码中的initializers关键词同义关键词均可使用。用自定义枚举替换值enum把列中的离散代码值如1、2替换为人类可读的标签。枚举定义在用户数据目录下的enums.json文件中。userData 目录在不同平台的位置Windows%APPDATA%\beekeeper-studioLinux~/.config/beekeeper-studiomacOS~/Library/Application Support/beekeeper-studio在该目录创建enums.json格式如下[ { name: user_type, variants: [ { id: 1, value: Default }, { id: 2, value: Admin }, { id: 3, value: Editor }, { id: 4, value: Viewer }, { id: 5, value: Guest } ] }, { name: account_type, variants: [ { id: 1, value: Personal }, { id: 2, value: Business }, { id: 3, value: Enterprise }, { id: 4, value: Student }, { id: 5, value: Trial } ] } ]在查询中使用如下格式注意需要四段列名、format、enum、枚举名select a as columnname__format__enum__enumname示例select user as user__format__enum__user_type, account_id as account__format__enum__account_type在结果表中id会被替换成对应的value。以上例而言account_id为1的所有行都会显示为Personal。从源码看EnumMagic.ts 从 Vuex 的userEnumsstore 中按名称查找枚举再调用 UserProvidedEnum.findMatch() 做id → value的映射匹配不到时原样显示原值。枚举的加载由 UserEnumsModule.ts 负责应用启动时通过enum/init初始化、enum/load读取文件并且监听了enumFileChanged事件——也就是说你修改enums.json保存后Beekeeper Studio 会自动重新加载无需重启应用。注意 UserProvidedEnum 的构造器 会校验 JSON 结构必须包含字符串类型的name和数组类型的variants且每个 variant 都要有id与value空枚举会被视为非法并报错。格式化为可点击链接link把 URL 文本渲染成可点击的超链接。源码 LinkMagic.ts 的关键词为linkenlace亦可渲染时对单元格值做 HTML 转义后同时作为链接标签与跳转地址columnname__format__linkselect website as website__format__link from some_table格式化为可点击邮箱email与链接类似但会打开系统默认邮件客户端的写信窗口。实现上复用link格式化器并额外设置urlPrefix: mailto:见 EmailMagic.tscolumname__format__email格式化为勾选/叉号check把布尔类数值渲染为对勾或叉号1显示对勾0显示叉号没有其他选项。源码 CheckMagic.ts 直接使用 Tabulator 内置的tickCross格式化器关键词为check或tickcolumname__format__check格式化为图片img/image取一个图片 URL 并直接在单元格内渲染为图片可自定义宽高。源码 ImageMagic.ts 支持的关键词为img、image、imagen默认不限制尺寸设置尺寸时以宽x高形式写在第四个段中columname__format__image[__widthxheight]示例columname__format__image -- 默认按图片原始尺寸 columname__format__image__50 -- 宽度 50px columnname__format__image__50x100 -- 宽度 50px、高度 100px说明官方文档示例写作image__50__100但从 ImageMagic.ts 的实际实现 看宽高参数是从同一个段里按x拆分的args[3].split(x)因此__50x100才是当前源码真正支持的写法。格式化为货币money/currency把数字渲染为指定币种的本地化货币金额默认 USD。源码 MoneyMagic.ts 使用Intl.NumberFormat按应用 localewindow.platformInfo.locale默认en-US格式化支持关键词money、currency、dinero币种代码有自动补全提示columname__format__money[__currencyCode]示例columname__format__money -- 美元 USD默认 columname__format__money__gbp -- 英镑 columname__format__money__cop -- 哥伦比亚比索注意无效的币种代码会显示NaN格式化抛错时被源码捕获并返回NaN。格式化为进度条progress把数字渲染成进度条默认假设数值范围是 0–100可通过第四个参数指定最大值columnname__format__progress[__max]示例columname__format__progress -- 默认 0–100 columname__format__progress__10 -- 范围 0–10文档示例中写作progress_10正确语法应为双下划线progress__10。源码 ProgressMagic.ts 使用BksProgress格式化器max参数通过_.toNumber转换关键词为progress或loading。格式化为星级评分stars把数字渲染为星级评分默认按 0–5 星处理可用第四参数指定最大星级columname__format__stars[__max]示例columname__format__stars -- 默认 0–5 星 columname__format__stars__10 -- 0–10 星源码 StarsMagic.ts 使用 Tabulator 内置star格式化器关键词为stars、rating、estrellas。链接到另一张表goto根据结果集中的值跳转到其他表行为与表格数据视图中的外键链接一致。该 Magic 的第二个关键词也可以是fk见 GoToMagic.ts。跳转目标可以可选地包含 schema 与过滤列columname__goto[__schema]__table[__column]示例columname__goto__users -- 链接到 users 表主键 columname__goto__public__users -- 链接到 public schema 下 users 表的主键 columname__goto__products__user_id -- 链接到 products 表并按 user_id 过滤因为可以指定过滤列所以它的用途不止外键跳转——例如你可以把某列链接到该用户购买过的所有商品这种一对多的过滤视图。从源码看GoToMagic.ts 的参数解析 按段数区分3 段为表4 段为表列或schema表5 段为schema表列返回结果中带foreign-key样式类点击后基于formatterParams.fk中的表键信息打开目标表。源码还实现了分层的自动补全genAutocompleteHints依次提示可用的 schema/表、表下的列、以及指定 schema 下表内的列详情见 MagicColumnBuilder.suggestWords。额外Unix 时间戳格式化unixtime除官方文档列出的 Magic 外仓库源码还内置了一个时间戳 Magic。UnixTimeMagic.ts 支持把 Unix 时间戳渲染为可读日期关键词为unixtime、unix、timestamp可选标志位顺序不限同类标志后者优先生效columname__format__unixtime[__utc][__scale][__iso]utc使用 UTC 时区默认本地时区s/ms/us/ns时间戳刻度默认秒iso输出 ISO 8601 字符串默认输出本地化的短日期中时间示例created_at__format__unixtime -- 秒级时间戳本地化显示 timestamp__format__unixtime__utc__ms__iso -- 毫秒级UTCISO 格式 time__format__unixtime__ns__utc -- 纳秒级UTC底层机制从列名到渲染的完整链路把上面所有 Magic 串起来的是 FormatMagic响应format关键词与 GoToMagic响应goto/fk两个顶层 Magic它们由 magics/index.ts 汇总而format下的全部格式化器集中在 format_magics/index.ts共 9 个Link、Image、Stars、Check、Money、Progress、Email、Enum、UnixTime。整个调用链路是用户执行含 Magic 后缀的 SQL结果返回给前端ResultTable.vue 对每一列调用MagicColumnBuilder.build(column.name)MagicColumnBuilder 按__切分列名先在顶层magics中匹配format/goto再在subMagics中匹配具体格式化器匹配成功则调用该 Magic 的render(args)得到一个符合 MagicColumn 接口 的列定义title、formatter、formatterParams、cssClass、可选的tableLinkTabulator 根据formatter渲染单元格内容。编辑器自动补全输入过程中提示 MagicQuery Magics 不只是事后格式化Beekeeper Studio 的 SQL 编辑器还提供了 Magic 关键词的自动补全。编辑器侧通过 queryMagicExtension.ts 与 CodeMirrorPlugins.ts 调用MagicColumnBuilder.suggestWords(currentWord, dbTables, defaultSchema)当你敲到列名__时会提示format、goto等顶层 Magic敲到列名__format__时会列出全部格式化器关键词link、stars、enum……对goto会结合当前数据库的表与 schema 动态提示表名、列名对enum会从已加载的enums.json中提示枚举名对money会提示完整的币种代码列表源码中autocompleteHints来自 CurrencyCodes 数据。实践建议修改enums.json后无需重启应用监听文件变化并自动重载枚举但 JSON 结构非法缺name/variants或 variant 缺字段时对应枚举会被跳过并在控制台报错建议先本地校验 JSON 格式。__是保留分隔符普通列名本身包含双下划线时可能被误解析不过build()要求至少两段且第二段匹配已知 Magic 才会生效未命中则按原列名渲染。组合使用同一条 SQL 中可以对不同列使用不同 Magic如上面的综合示例互不干扰goto是最灵活的 Magic配合过滤列可实现外键之外的关联跳转。版本差异以源码为准本文中 image 宽高写法__50x100与 progress 的__max语法均已对照仓库当前源码核实若使用旧版文档示例如image__50__100不生效请以本文与源码为准。Query Magics 让展示层逻辑完全脱离应用配置全部沉淀在 SQL 文本里——团队共享一条带__format__后缀的查询就能让所有人都看到同样格式化的结果是数据浏览与汇报场景中非常实用的原生能力。【免费下载链接】beekeeper-studioModern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows.项目地址: https://gitcode.com/GitHub_Trending/be/beekeeper-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表