"lastQuery":"SELECT SUM(\"article\".\"click_num\") FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? ;",
"name":"Sum 带 JOIN (table.column 格式)",
"result":true,
"sum":0
},
{
"count":9,
"lastQuery":"SELECT COUNT(*) FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? ;",
"lastQuery":"SELECT * FROM \"admin\" WHERE \"role_id\" \u003e? AND \"state\" =? ORDER BY id DESC LIMIT 5 ;",
"name":"Select 多条件自动AND测试",
"result":true
},
{
"affected":1,
"name":"Update 更新测试",
"result":true
},
{
"affected":1,
"name":"Delete 删除测试",
"result":true
}
]
},
"2_condition_syntax":{
"name":"条件查询语法测试",
"success":true,
"tests":[
{
"count":3,
"name":"等于条件 (=)",
"result":true
},
{
"count":3,
"lastQuery":"SELECT id,title,state FROM \"article\" WHERE \"state\" !=? LIMIT 3 ;",
"name":"不等于条件 ([!])",
"result":true
},
{
"count":3,
"name":"大于小于条件 ([\u003e], [\u003c])",
"result":true
},
{
"count":3,
"name":"大于等于小于等于条件 ([\u003e=], [\u003c=])",
"result":true
},
{
"count":1,
"lastQuery":"SELECT id,title FROM \"article\" WHERE \"title\" LIKE ? LIMIT 3 ;",
"name":"LIKE 模糊查询 ([~])",
"result":true
},
{
"count":0,
"name":"右模糊查询 ([~!])",
"result":true
},
{
"count":3,
"lastQuery":"SELECT id,title,click_num FROM \"article\" WHERE \"click_num\" BETWEEN ? AND ? LIMIT 3 ;",
"name":"BETWEEN 区间查询 ([\u003c\u003e])",
"result":true
},
{
"count":3,
"name":"NOT BETWEEN 查询 ([\u003e\u003c])",
"result":true
},
{
"count":5,
"lastQuery":"SELECT id,title FROM \"article\" WHERE (\"id\" BETWEEN ? AND ? ) LIMIT 5 ;",
"name":"IN 查询",
"result":true
},
{
"count":5,
"name":"NOT IN 查询 ([!])",
"result":true
},
{
"count":3,
"name":"IS NULL 查询",
"result":true
},
{
"count":3,
"name":"IS NOT NULL 查询 ([!])",
"result":true
},
{
"count":3,
"lastQuery":"SELECT id,title,create_time FROM \"article\" WHERE \"create_time\" \u003e DATEADD(DAY, -365, NOW()) LIMIT 3 ;",
"name":"直接 SQL 片段查询 ([##])",
"result":true
},
{
"count":3,
"name":"显式 AND 条件",
"result":true
},
{
"count":5,
"name":"OR 条件",
"result":true
},
{
"count":5,
"lastQuery":"SELECT id,title,sort,state FROM \"article\" WHERE (( \"click_num\" \u003e? OR \"sort\" \u003e=? ) AND \"state\" =?) LIMIT 5 ;",
"name":"嵌套 AND/OR 条件",
"result":true
}
]
},
"3_chain_query":{
"name":"链式查询测试",
"success":true,
"tests":[
{
"count":9,
"name":"基本链式查询 Table().Where().Select()",
"result":true
},
{
"count":9,
"name":"链式 And 条件",
"result":true
},
{
"count":9,
"name":"链式 Or 条件",
"result":true
},
{
"count":5,
"name":"链式 Order 排序",
"result":true
},
{
"count":3,
"name":"链式 Limit 限制",
"result":true
},
{
"article":{
"author":"管理员",
"id":1,
"title":"数据库入门指南"
},
"name":"链式 Get 获取单条",
"result":true
},
{
"count":9,
"name":"链式 Count 统计",
"result":true
},
{
"count":5,
"name":"链式 Page 分页",
"result":true
},
{
"name":"链式 Group 分组",
"result":true,
"stats":[
{
"cnt":3,
"ctg_id":1
},
{
"cnt":4,
"ctg_id":2
},
{
"cnt":1,
"ctg_id":3
},
{
"cnt":1,
"ctg_id":4
}
]
},
{
"affected":0,
"name":"链式 Update 更新",
"result":true
}
]
},
"4_join_query":{
"name":"JOIN查询测试",
"success":true,
"tests":[
{
"count":5,
"data":[
{
"ctg_name":"新闻资讯",
"id":1,
"title":"数据库入门指南"
},
{
"ctg_name":"新闻资讯",
"id":2,
"title":"新闻发布系统上线公告"
},
{
"ctg_name":"技术文档",
"id":3,
"title":"Go语言最佳实践"
},
{
"ctg_name":"技术文档",
"id":4,
"title":"API接口设计规范"
},
{
"ctg_name":"公告通知",
"id":5,
"title":"系统维护通知"
}
],
"name":"LEFT JOIN 链式查询",
"result":true
},
{
"count":5,
"lastQuery":"SELECT \"article\".\"id\", \"article\".\"title\", \"ctg\".\"name\" as ctg_name FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? LIMIT 5 ;",
"name":"传统 JOIN 语法",
"result":true
},
{
"count":5,
"data":[
{
"admin_name":"超级管理员",
"ctg_name":"新闻资讯",
"id":1,
"title":"数据库入门指南"
},
{
"admin_name":"编辑员",
"ctg_name":"新闻资讯",
"id":2,
"title":"新闻发布系统上线公告"
},
{
"admin_name":"超级管理员",
"ctg_name":"技术文档",
"id":3,
"title":"Go语言最佳实践"
},
{
"admin_name":"审核员",
"ctg_name":"技术文档",
"id":4,
"title":"API接口设计规范"
},
{
"admin_name":"超级管理员",
"ctg_name":"公告通知",
"id":5,
"title":"系统维护通知"
}
],
"name":"多表 JOIN",
"result":true
},
{
"count":5,
"name":"INNER JOIN",
"result":true
}
]
},
"5_aggregate":{
"name":"聚合函数测试",
"success":true,
"tests":[
{
"count":11,
"name":"Count 总数统计",
"result":true
},
{
"count":9,
"name":"Count 条件统计",
"result":true
},
{
"lastQuery":"SELECT SUM(click_num) FROM \"article\" WHERE \"state\" =? ;",
"name":"Sum 求和 (单字段名)",
"result":true,
"sum":12311
},
{
"avg":1367.888889,
"lastQuery":"SELECT AVG(click_num) FROM \"article\" WHERE \"state\" =? ;",
"name":"Avg 平均值 (单字段名)",
"result":true
},
{
"lastQuery":"SELECT MAX(click_num) FROM \"article\" WHERE \"state\" =? ;",
"max":9999,
"name":"Max 最大值 (单字段名)",
"result":true
},
{
"lastQuery":"SELECT MIN(sort) FROM \"article\" WHERE \"state\" =? ;",
"min":1,
"name":"Min 最小值 (单字段名)",
"result":true
},
{
"name":"GROUP BY 分组统计",
"result":true,
"stats":[
{
"article_count":4,
"avg_clicks":"450",
"ctg_id":2,
"total_clicks":1800
},
{
"article_count":3,
"avg_clicks":"3461",
"ctg_id":1,
"total_clicks":10383
},
{
"article_count":1,
"avg_clicks":"32",
"ctg_id":3,
"total_clicks":32
},
{
"article_count":1,
"avg_clicks":"96",
"ctg_id":4,
"total_clicks":96
}
]
},
{
"lastQuery":"SELECT SUM(\"article\".\"click_num\") FROM \"article\" WHERE \"state\" =? ;",
"lastQuery":"SELECT SUM(\"article\".\"click_num\") FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? ;",
"name":"Sum 带 JOIN (table.column 格式)",
"result":true,
"sum":0
},
{
"count":9,
"lastQuery":"SELECT COUNT(*) FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? ;",
"name":"Count 带 JOIN",
"result":true
}
]
},
"6_pagination":{
"name":"分页查询测试",
"success":true,
"tests":[
{
"count":5,
"name":"PageSelect 分页查询",
"result":true
},
{
"count":4,
"name":"PageSelect 第二页",
"result":true
},
{
"count":3,
"name":"链式 Page 分页",
"result":true
},
{
"count":3,
"lastQuery":"SELECT id,title FROM \"article\" WHERE (\"state\" =?) LIMIT 3 OFFSET 2 ;",
"lastQuery":"MERGE INTO \"admin\" USING (SELECT ? AS \"title\", NOW() AS \"create_time\", NOW() AS \"modify_time\", ? AS \"name\", ? AS \"phone\", ? AS \"state\", ? AS \"password\", ? AS \"role_id\") src ON (\"admin\".\"phone\" = src.\"phone\") WHEN MATCHED THEN UPDATE SET \"name\" = src.\"name\", \"state\" = src.\"state\", \"title\" = src.\"title\", \"modify_time\" = NOW() WHEN NOT MATCHED THEN INSERT (\"title\", \"create_time\", \"modify_time\", \"name\", \"phone\", \"state\", \"password\", \"role_id\") VALUES (src.\"title\", src.\"create_time\", src.\"modify_time\", src.\"name\", src.\"phone\", src.\"state\", src.\"password\", src.\"role_id\")",
"lastQuery":"SELECT * FROM \"admin\" WHERE \"role_id\" \u003e? AND \"state\" =? ORDER BY id DESC LIMIT 5 ;",
"name":"Select 多条件自动AND测试",
"result":true
},
{
"affected":1,
"name":"Update 更新测试",
"result":true
},
{
"affected":1,
"name":"Delete 删除测试",
"result":true
}
]
},
"status":0
}
}
],
"ctr":"test",
"method":"GET",
"params":[],
"path":"/app/test/crud",
"project":"app",
"summary":"基础 CRUD 测试",
"tested":true
},
{
"cases":[
{
"name":"JOIN查询",
"method":"GET",
"passed":true,
"response":{
"result":{
"name":"JOIN查询测试",
"success":true,
"tests":[
{
"count":5,
"data":[
{
"ctg_name":"新闻资讯",
"id":1,
"title":"数据库入门指南"
},
{
"ctg_name":"新闻资讯",
"id":2,
"title":"新闻发布系统上线公告"
},
{
"ctg_name":"技术文档",
"id":3,
"title":"Go语言最佳实践"
},
{
"ctg_name":"技术文档",
"id":4,
"title":"API接口设计规范"
},
{
"ctg_name":"公告通知",
"id":5,
"title":"系统维护通知"
}
],
"name":"LEFT JOIN 链式查询",
"result":true
},
{
"count":5,
"lastQuery":"SELECT \"article\".\"id\", \"article\".\"title\", \"ctg\".\"name\" as ctg_name FROM \"article\" LEFT JOIN \"ctg\" ON \"article\".\"ctg_id\" = \"ctg\".\"id\" WHERE \"article\".\"state\" =? LIMIT 5 ;",
"name":"传统 JOIN 语法",
"result":true
},
{
"count":5,
"data":[
{
"admin_name":"超级管理员",
"ctg_name":"新闻资讯",
"id":1,
"title":"数据库入门指南"
},
{
"admin_name":"编辑员",
"ctg_name":"新闻资讯",
"id":2,
"title":"新闻发布系统上线公告"
},
{
"admin_name":"超级管理员",
"ctg_name":"技术文档",
"id":3,
"title":"Go语言最佳实践"
},
{
"admin_name":"审核员",
"ctg_name":"技术文档",
"id":4,
"title":"API接口设计规范"
},
{
"admin_name":"超级管理员",
"ctg_name":"公告通知",
"id":5,
"title":"系统维护通知"
}
],
"name":"多表 JOIN",
"result":true
},
{
"count":5,
"name":"INNER JOIN",
"result":true
}
]
},
"status":0
}
}
],
"ctr":"test",
"method":"GET",
"params":[],
"path":"/app/test/join",
"project":"app",
"summary":"JOIN 查询测试",
"tested":true
},
{
"cases":[
{
"name":"分页查询",
"method":"GET",
"passed":true,
"response":{
"result":{
"name":"分页查询测试",
"success":true,
"tests":[
{
"count":5,
"name":"PageSelect 分页查询",
"result":true
},
{
"count":4,
"name":"PageSelect 第二页",
"result":true
},
{
"count":3,
"name":"链式 Page 分页",
"result":true
},
{
"count":3,
"lastQuery":"SELECT id,title FROM \"article\" WHERE (\"state\" =?) LIMIT 3 OFFSET 2 ;",
"lastQuery":"MERGE INTO \"admin\" USING (SELECT NOW() AS \"create_time\", NOW() AS \"modify_time\", ? AS \"name\", ? AS \"phone\", ? AS \"state\", ? AS \"password\", ? AS \"role_id\", ? AS \"title\") src ON (\"admin\".\"phone\" = src.\"phone\") WHEN MATCHED THEN UPDATE SET \"name\" = src.\"name\", \"state\" = src.\"state\", \"title\" = src.\"title\", \"modify_time\" = NOW() WHEN NOT MATCHED THEN INSERT (\"create_time\", \"modify_time\", \"name\", \"phone\", \"state\", \"password\", \"role_id\", \"title\") VALUES (src.\"create_time\", src.\"modify_time\", src.\"name\", src.\"phone\", src.\"state\", src.\"password\", src.\"role_id\", src.\"title\")",