feat(SQL 题): 增删改题除了第 1 组,其余测试数据可以一行都不改——用来抓学生多改(WHERE 写漏、写宽)
Deploy / deploy (push) Canceled after 0s

原来每组数据都必须有被标准答案改到的行,所以「这组里没有研发部,看学生会不会把别的部门也改了」
这种测试数据建不了。现在只有第 1 组(题面上给学生看的那组)还要求改到行;其余组一行都没改时
出题页写「一行都没改」、预览写「执行后所有表都没有变化」。删掉第 1 组、别的组顶上来时自动按
新位置重查。判题本来就不管这一条,不受影响。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-09 19:17:42 +08:00
1 parent 2cb39fd96b
commit 033a245abb
9 files changed
+54 -9

No files matched your search

+2
View File
@@ -236,6 +236,8 @@ export function previewSQLTestcase(data: {
initSql: string
refSql: string
mode: "query" | "modify"
/** 是不是题面上展示的那组(第 1 组):增删改题只有它必须改到行 */
shown: boolean
}) {
return api.post<SqlDisplay>("admin/sql-test-cases/preview", data)
}
+9 -3
View File
@@ -221,8 +221,12 @@ function onTagsChange(tags: string[]) {
// ---------------------------------------------------------------- 测试数据:自动重跑
/** 一组数据跑出来的结果取决于这三样,任何一样变了,原来的结果就作废 */
const signatureOf = (g: ScriptGroup) => JSON.stringify([form.answer, form.sqlConfig.mode, g.sql])
/**
* 一组数据跑出来的结果取决于这几样,任何一样变了,原来的结果就作废。
* 排在第一也算:删掉第 1 组之后,原来的第 2 组成了题面展示的那组,增删改题得重查它改没改到行
*/
const signatureOf = (g: ScriptGroup) =>
JSON.stringify([form.answer, form.sqlConfig.mode, g.sql, groups.value[0] === g])
function statusOf(g: ScriptGroup): GroupStatus {
if (!g.sql.trim()) return "empty"
@@ -243,6 +247,7 @@ async function run(g: ScriptGroup) {
initSql: g.sql,
refSql: form.answer,
mode: form.sqlConfig.mode,
shown: groups.value[0] === g,
})
} catch (err) {
errorRaw =
@@ -261,7 +266,8 @@ function runAll() {
}
watchDebounced(
() => [form.answer, form.sqlConfig.mode, groups.value.map((g) => g.sql)] as const,
// 带上 key:删组、挪了谁排第一也要重跑(见 signatureOf)
() => [form.answer, form.sqlConfig.mode, groups.value.map((g) => `${g.key}:${g.sql}`)] as const,
runAll,
{ debounce: 600, deep: true },
)
@@ -33,7 +33,7 @@ export function explainSqlError(message: string) {
[/(\d+) values for (\d+) columns/, (m) => `一行给了 ${m[1]} 个值,但表有 ${m[2]} 列`],
]
if (message.includes("标准答案未修改任何表数据")) {
return "标准答案在这组数据上一行都没改:增删改题的每组数据里都要有会被改到的行"
return "标准答案在这组数据上一行都没改:第 1 组是题面上给学生看的,里面要有会被改到的行"
}
for (const [pattern, say] of rules) {
const match = message.match(pattern)