widget query 使用文档

widget query使用文档

简体中文 | English


widget-query

一个将思源笔记数据库查询结果以表格样式渲染的挂件

现已上架思源笔记社区集市, 如果您喜欢本挂件, 欢迎为本项目点亮一个⭐!

思源数据库表与字段详情请见: 思源数据库表与字段 · 语雀

预览

预览https://github.com/Zuoqiu-Yingyi/widget-query/blob/main/preview.png

背景颜色状态指示:

  • 白色:

    • 初始化
    • 正在处理查询
  • 绿色

    • 查询成功
  • 蓝色

    • 请继续操作
  • 黄色

    • 查询结果为空
  • 红色

    • SQL 语句错误
    • 未知错误

功能

  1. 点选自动查询复选框, 下次打开该页面时自动进行一次查询

  2. 为挂件块设置自定义属性 input​ 可以指定某个代码块或嵌入块中的 SQL 语句作为查询语句

    • 例如在其他文档中有一个代码块或嵌入块 ID 为 20220418210605-ibussa1​, 那么为挂件块设置自定义块属性 input​: 20220418210605-ibussa1​ 可以引用该块的 SQL 语句进行查询
    • 只有挂件块前一个块不是具有自定义属性 type​: query-code​ 的代码块时才会触发
  3. 为挂件块设置自定义属性 output​ 可以指定某个表格块作为查询结果展示块

    • 例如在其他文档中有一个表格块 ID 为 20220604112815-sfiwyi7​, 那么为挂件块设置自定义块属性 output​: 20220604112815-sfiwyi7​ 可以将查询结果渲染到该表格中
    • 只有挂件块后一个块不是具有自定义属性 type​: query-table​ 的表格块时才会触发
  4. 符合正则表达式 ^\s*SELECT\s+\*\s+FROM\s+blocks\s+.*​ 的 SQL 语句将启用默认块查询模式

    • 该正则表达式在 /src/script/module/config.js​ 文件中 config.query.regs.blocks​ 定义
    • 示例: SELECT * FROM blocks WHERE content LIKE '%内容块%'
    • 该模式下, 查询结果渲染样式将以如下配置选项进行控制
  5. 不符合默认块查询模式​的查询均为普通查询模式

    • 示例

      • 查询帮助文档 请从这里开始​ 及其下级所有的文档

        SELECT
            '[' || b.content || '](siyuan://blocks/' || b.id || ')' AS __1____pre__文档标题,
            b.hpath AS __2__文档路径
        FROM
            blocks AS b
        WHERE
            b.type = 'd'
            AND b.hpath LIKE '%请从这里开始%'
        ORDER BY
            b.path
        LIMIT 10
        
      • 查询思源数据库所有表

        SELECT
            *
        FROM
            sqlite_master
        
      • 查询思源数据库 blocks​ 表中所有字段

        PRAGMA table_info('blocks')
        
      • 自定义属性视图

        SELECT
            '[' || b.content || '](siyuan://blocks/' || a.block_id || ')' AS __1____pre__文档标题,
            MAX(
                CASE
                    WHEN a.name = 'name' THEN a.value
                    ELSE NULL
                END
            ) AS __2____kbd__命名,
            MAX(
                CASE
                    WHEN a.name = 'alias' THEN REPLACE(
                        '<kbd>' || a.value || '</kbd>',
                        ',',
                        '</kbd><br/><kbd>'
                    )
                    ELSE NULL
                END
            ) AS __3____pre__别名,
            MAX(
                CASE
                    WHEN a.name = 'memo' THEN REPLACE(
                        '<kbd>' || a.value || '</kbd>',
                        ',',
                        '</kbd><br/><kbd>'
                    )
                    ELSE NULL
                END
            ) AS __3____pre__备注
        FROM
            attributes AS a
            INNER JOIN blocks AS b ON a.block_id = b.id
        WHERE
            (
                a.name = 'name'
                OR a.name = 'alias'
                OR a.name = 'memo'
            )
            AND b.type = 'd'
        GROUP BY
            a.block_id
        ORDER BY
            RANDOM()
        LIMIT
            10;
        

        自定义属性视图https://github.com/Zuoqiu-Yingyi/widget-query/blob/main/image/README/1649676356928.png

    • 使用字段别名前缀定义查询显示样式

      • __hidden__别名0​:

        • 该字段不显示在查询结果中
      • __ref__别名1​:

        • 该字段渲染为块引用
        • 示例: ((<value> "<value>"))
      • __link__别名2​:

        • 该字段渲染为块链接
        • 示例: [<value>](siyuan://blocks/<value>)
      • __raw__别名3​:

        • 该字段渲染为原始值(行内代码样式)
        • 示例: <value>
      • __date__别名4​:

        • 该字段渲染为日期
        • 示例: yyyy-MM-dd
      • __time__别名5​:

        • 该字段渲染为时间
        • 示例: HH:mm:ss
      • __datetime__别名6​:

        • 该字段渲染为日期时间
        • 示例: yyyy-MM-dd HH:mm:ss
      • __s__别名7​:

        • 该字段渲染为删除线
        • 示例: ~~<value>~~
      • __u__别名8​:

        • 该字段渲染为下划线
        • 示例: <u><value></u>
      • __em__别名9​:

        • 该字段渲染为斜体
        • 示例: *<value>*
      • __tag__别名10​:

        • 该字段渲染为标签
        • 示例: <kbd><value></kbd>
      • __kbd__别名11​:

        • 该字段渲染为按键样式
        • 示例: ~<value>~
      • __sub__别名12​:

        • 该字段渲染为下标样式
        • 示例: ^<value>^
      • __sup__别名13​:

        • 该字段渲染为上标样式
        • 示例: #<value>#
      • __code__别名14​:

        • 该字段渲染为行内代码
        • 示例: <value>
      • __mark__别名15​:

        • 该字段渲染为标记
        • 示例: ==<value>==
      • __math__别名16​:

        • 该字段渲染为公式
        • 示例: $<value>$
      • __strong__别名17​:

        • 该字段渲染为粗体
        • 示例: **<value>**
      • __pre__别名18​:

        • 该字段渲染为预览(渲染 markdown 行级标识符)
        • 示例: <value>
    • 使用字段别名前缀定义查询结果字段顺序

      • __<数字>__别名8​:

        • 该字段可以放置在查询样式前缀字段的前面

        • 示例:

          • __1____pre__别名9
          • __02____raw__别名10
    • 默认显示查询结果原始值(使用行内代码)

    • 字段别名前缀示例

      • SELECT
            b.id AS __00____ref__ref,
            b.id AS __01____link__link,
            b.id AS __02____pre__pre,
            b.id AS __03____raw__raw,
            b.created AS __04____date__date,
            b.created AS __05____time__time,
            b.created AS __06____datetime__datetime,
            b.id AS __07____s__s,
            b.id AS __08____u__u,
            b.id AS __09____em__em,
            b.id AS __10____tag__tag,
            b.id AS __11____kbd__kbd,
            b.id AS __12____sub__sub,
            b.id AS __13____sup__sup,
            b.id AS __14____code__code,
            b.id AS __15____mark__mark,
            b.id AS __16____math__math,
            b.id AS __17____strong__strong
        FROM
            blocks AS b
        WHERE
            id = '.root{.id}'
        

        字段别名前缀示例https://github.com/Zuoqiu-Yingyi/widget-query/blob/main/image/README/1648568044659.png

  6. 部分模板字段解析支持

    • .<prefix>{.<field>}

      • <prefix>​: 前缀字段

        • block​: 挂件块
        • parent​: 挂件块的上级块
        • root​: 挂件块所在文档块
      • <field>​: 属性字段

        • 数据库中 blocks​ 表的字段名, 详情请参考 blocks
      • 示例: SELECT * FROM blocks WHERE id = '.root{.id}' content LIKE '%内容块%'

        • 等价于 SELECT * FROM blocks WHERE id = '.block{.root_id}' content LIKE '%内容块%'
        • 查询挂件所在文档中所有含有 内容块​ 三个字的块

自定义配置

全局自定义配置

  1. 创建文件 <工作空间>/data/widgets/custom.js
  2. 在文件 <工作空间>/data/widgets/custom.js​ 中定义的值将覆盖 <工作空间>/data/widgets/Query/src/script/module/config.js​ 中对应的值

配置示例

/**
 * 文件路径
 *    <工作空间>/data/widgets/custom.js
 * 示例功能 | Example function:
 *    默认块查询结果中将块属性分列显示
 */

export const config = {
    query: {
        render: {
            ial: {
                shape: 'columns',
            },
        },
    },
};

更多配置项请参考 config.js

块自定义配置

  • 在挂件块(笔记中的Query按钮)中设置自定义块属性

    • 自定义属性名称为 src/script/module/config.js​ 文件中 config​ 对象中的属性
    • 例如, 如果想要自定义查询结果字段列表, 可以设置自定义块属性 query-fields​: ["hpath", "type", "markdown"]​, 在该块中将会替换 config.query.fields​ 字段

开始

该挂件已在思源笔记社区集市上架, 可直接在集市中安装

参考 & 感谢

作者 项目 许可证
leolee9086 leolee9086/cc-baselib Unknown

image.png

留下你的脚步
推荐阅读