diff --git a/src/composables/sqlTable.ts b/src/composables/sqlTable.ts index 7705f8b..2d35c21 100644 --- a/src/composables/sqlTable.ts +++ b/src/composables/sqlTable.ts @@ -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[] { + 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] ?? ""]), + ) + }) } diff --git a/src/desktop/SqlSection.vue b/src/desktop/SqlSection.vue index 2d66fa3..a5135af 100644 --- a/src/desktop/SqlSection.vue +++ b/src/desktop/SqlSection.vue @@ -3,7 +3,7 @@ import { computed, watch } from "vue" import CodeEditor from "../components/CodeEditor.vue" import { output } from "../composables/code" import { selectedTableId } from "../composables/sqlTable" -import { sqlTables } from "../data/sqlTables" +import { buildSetupSql, sqlTables } from "../data/sqlTables" import OutputSection from "./OutputSection.vue" const selectedTable = computed( @@ -21,7 +21,7 @@ watch(selectedTableId, () => {