fix: ALTER TABLE DROP COLUMN only modifies schema, demo page deep-copies query results to prevent reference sharing
CI / test (18.x) (push) Successful in 10m0s
CI / test (20.x) (push) Successful in 10m2s
CI / test (22.x) (push) Successful in 9m58s
CI / test (24.x) (push) Successful in 9m54s

This commit is contained in:
thzxx
2026-07-29 22:28:47 +08:00
parent e778d1feae
commit 29f8fd52a1
10 changed files with 48 additions and 36 deletions
+1 -8
View File
@@ -5667,15 +5667,8 @@ class QueryExecutor {
if (!schema.columns[stmt.column.name]) {
throw new DatabaseError(`Column "${stmt.column.name}" does not exist in table "${stmt.name}"`, 'COLUMN_NOT_FOUND');
}
// 从 schema 引用上删除列定义(保留所有行数据
// 从 schema 引用上删除列定义,不碰行数据(避免引用共享导致查询结果被篡改
delete schema.columns[stmt.column.name];
// 清除已有行中该列的值(MemoryEngine 的 find 返回引用,delete 直接生效)
const rows = await this.engine.find(stmt.name, { table: stmt.name });
const colName = stmt.column.name;
for (const row of rows) {
if (colName in row)
delete row[colName];
}
}
}
async executeTruncateTable(stmt) {