feat: isolate student SQL output and add result-row parsing

This commit is contained in:
2026-07-05 00:37:56 -06:00
parent 9a01d0e972
commit 436f39d424
2 changed files with 31 additions and 4 deletions

View File

@@ -1,5 +1,10 @@
import { ref } from "vue"
import { buildSetupSql, defaultSqlTableId, sqlTables } from "../data/sqlTables"
import {
buildSetupSql,
defaultSqlTableId,
sqlTables,
type SqlColumn,
} from "../data/sqlTables"
export const selectedTableId = ref(defaultSqlTableId)
@@ -12,5 +17,27 @@ export function buildSqlScript(studentSql: string) {
sqlTables.find((item) => item.id === selectedTableId.value) ??
sqlTables[0]
const normalizedSql = studentSql.trim().replace(/;?\s*$/, ";")
return `${buildSetupSql(table)}\n\n${normalizedSql}\n\nSELECT * FROM ${table.tableName};`
return [
buildSetupSql(table),
".output /dev/null",
normalizedSql,
".output stdout",
`SELECT * FROM ${table.tableName};`,
].join("\n\n")
}
export function parseResultRows(
output: string,
columns: SqlColumn[],
): Record<string, string | number>[] {
return output
.split("\n")
.map((line) => line.trim())
.filter(Boolean)
.map((line) => {
const cells = line.split("|")
return Object.fromEntries(
columns.map((column, index) => [column.name, cells[index] ?? ""]),
)
})
}