记录一下最近sv.db的完善

1. 让查询可以使用 json path

有时候我们会存储 json 到 db,也有时会只取json部分数据,或者通过json部分数据进行过滤

所以sv.db 也支持这些场景,(目前只有 db 实现,json的操作都是依靠db json 函数)

举例:

数据

a.ExecuteNonQuery("""
INSERT INTO Weather
(name, value)
VALUES ('Hello', '{"a":2}'),('A', '{"a":3,"c":[4,5,{"f":7}]}')
""");

然后配置字段允许json

 [Db(StaticInfo.Demo)]
[Table(nameof(Weather))]
public class Weather
{
[Select, Where, OrderBy]
public string Name { get; set; } [Select(Field = "Value"), Where, OrderBy, Column(IsJson = true)]
public string V { get; set; }
}

api 方法不用做额外的实现

[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}

用户查询api 时就可以对json字段进行任意操作,比如

curl --location 'http://localhost:5259/weather?Fields=v,json(v,'$.a',vvva)&OrderBy=json(v,'$.a') asc&Where=json(v,'$.a') != 1'

结果

{
"totalCount": null,
"rows": [
{
"vvva": 2,
"v": "{\"a\":2}"
},
{
"vvva": 3,
"v": "{\"a\":3,\"c\":[4,5,{\"f\":7}]}"
}
]
}

ps:json 实现对应 db json 函数

db json 函数
SQLite json_extract
PostgreSQL jsonb_path_query_first
MySql json_unquote(json_extract())
sql server JSON_QUERY

2. 字段白名单验证

默认会对解析的statement结果进行字段验证,不通过的会返回 400

验证:

  • 不在字段配置的白名单范围
  • 不允许类似 1 = 1, 只能 field = 1
  • 未配置 json 字段不允许使用 json 函数

如需改变 验证逻辑或自行验证,可以通过 SelectStatementOptions 自行处理

public record class SelectStatementOptions
{
public bool AllowNotFoundFields { get; init; } = false;
public bool AllowNonStrictCondition { get; init; } = false;
public Action<Statement> Visiter { get; init; } = null;
}

3. swagger 生成

安装 swagger

<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />

swagger gen 配置 sv.db 方法

builder.Services.AddSwaggerGen(c =>
{
c.AddDbSwagger();
});

api 方法配置 swagger

[DbSwaggerByType(typeof(Weather))]
[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}

只需配置这些,swagger 将为大家自动生成字段描述

4. 主要功能已完善,已发布 nuget

如想尝试,只需安装所需 package

<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.WebApi" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Analyzers" Version="0.0.2.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SV.Db.Sloth.MSSql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.MySql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.PostgreSQL" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.Sqlite" Version="0.0.2.3" />

让查询可以使用 json path的更多相关文章

  1. JMeter 插件 Json Path 解析HTTP响应JSON数据

    一.基本简介 JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为JSON数据格式.JSON 简介,JSON 教程. JSON 已经成为数 ...

  2. JMeter 插件 Json Path 解析 HTTP 响应 JSON 数据(转)

    JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为 JSON 数据格式.JSON 简介,JSON 教程. JSON 已经成为数据交换格式 ...

  3. jmeter之--断言json响应&json path espressions的语法

    一.提取所需要断言的内容: 响应数据如下:加入需要提取id为90的值 { , "name" : "python", "url" : &quo ...

  4. 继续说一下openjson 以及 json path 的使用 (2)

    在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子 ) = N' {"name":"test", "obj" ...

  5. 【JEMTER】后置处理器JSON Path Extractor获取server端返回的json中某项值

    需求1:点击所有报表模板时,server端返回所有报表模板的ID(templateId),测试时需要下载某个模板生成的报表 需求2:点击单个报表模板时,server端返回这个报表模板下的所有报表ID( ...

  6. jmeter里json path postprocessor的用法

    后置处理器添加 json path postprocessor. 用处: 当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递. 如下,从登陆接口返回的json中提取user id,变 ...

  7. SQL FOR JSON PATH 返回 json

    --直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...

  8. 查询返回JSON数据结果集

    查询返回JSON数据结果集 设计目标: 1)一次性可以返回N个数据表的JSON数据 2)跨数据库引擎 { "tables": [ { "cols": [ { & ...

  9. Jmeter 中JSON Path Extractor高级用法

    好久没玩jemter了,由于项目原因又重新拾起.在使用JSON Path Extractor(jmeter 4.0已经默认支持了,4.0以下要自行安装插件)时,可以进行条件过滤,不用再自行写shell ...

  10. JMeter----正则表达式&JSON Path Extractor

    最近在用JMerter给公司一个项目做性能测试,期间遇到要提取上一个接口返回的数据作为下个接口的请求.这里做下记录 如图所示,需要将“扫描二维码”接口请求的返回值中的data部分,作为“处理提交码值” ...

随机推荐

  1. MindSpore 计算框架 模型参数 和 优化器 参数的重新载入

    本文主要内容源于: https://www.mindspore.cn/tutorial/training/zh-CN/master/use/load_model_for_inference_and_t ...

  2. Linux中scanf类型匹配错误,特指scanf("%d", &c ) ,导致死循环的解决方法 —— fflush(stdin)和getchar()的使用

    如题,朋友领导的孩子大学作业是个C语言编写的管理信息系统发来要我给改改,原代码的配置环境是Windows的C环境,由于10多年没有搞过Windows下的C语言了于是换上了Ubuntu18.04的系统上 ...

  3. JMH:基准测试工具套件-应用

    1.背景 多线程性能测试 JMH:简介 JMH is a Java harness for building, running, and analysing nano/micro/milli/macr ...

  4. Camera | 7.瑞芯微rk3568平台摄像头控制器MIPI-CSI驱动架构梳理

    因为有拍照.录制视频.直播等刚需,现在手机的摄像头基本都是高清,支持高清摄像头的SoC都支持MIPI-CSI. 不同SoC的MIPI-CSI在实现上有一定差别,即使同一厂家设计生产的芯片也都不尽相同. ...

  5. Elsa V3学习之脚本

    在前面的文章中,可以看到我们经常使用JS脚本来获取变量的值.在Elsa中是支持多种脚本的,最常用的基本是JS脚本和C#脚本. 本文来介绍以下这两个脚本使用. Javascript 在ELSA中的jav ...

  6. JavaScript设计模式样例九 —— 桥接模式

    桥接模式(Bridge Pattern) 定义:是用于把抽象化与实现化解耦,使得二者可以独立变化. 目的:将抽象部分与实现部分分离,使它们都可以独立的变化. 场景:实现系统可能有多个角度分类,每一种角 ...

  7. Element-UI 中使用rules验证 金额 数字

    data中定义验证规则:var checkCount = function (rule, val, callback) { if (!val) { return callback(new Error( ...

  8. WSL 使用

    WSL 是一个为在 Windows 10 和 Windows Server 2019 以上能够原生运行 Linux 二进制可执行文件(ELF 格式)的兼容层.可以把它当作一个只能用命令行交互的 Lin ...

  9. [WPF]数据绑定时为何会出现StringFormat失效

    在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如 Button的 Content属性以及ToolTi ...

  10. freebsd 上硬盘操作

    列出硬盘 # egrep 'ad[0-9]|cd[0-9]' /var/run/dmesg.boot or # geom disk list or # camcontrol devlist 查看cac ...