fix(query): keep Oracle NUM column results editable
This commit is contained in:
1 parent
715d834c32
commit
d79dc05cf5
5 files changed
+124
-9
No files matched your search
+47
@@ -342,6 +342,53 @@ test("rejects ambiguous case-only result column mapping", () => {
|
||||
assert.equal(sourceColumnsForResult(analysis, ["Id"]), undefined);
|
||||
});
|
||||
|
||||
test("does not bind non-Oracle same-arity label mismatches by projection order", () => {
|
||||
const analysis = analyzeEditableQuery("select id, amount as num from users");
|
||||
assert.ok(analysis);
|
||||
assert.equal(sourceColumnsForResult(analysis, ["id", "amount"]), undefined);
|
||||
assert.equal(allEditableColumnsWriteable(analysis, ["id", "amount"]), false);
|
||||
assert.equal(sourceColumnsForResult(analysis, ["id", "amount"], undefined, "mysql"), undefined);
|
||||
assert.equal(allEditableColumnsWriteable(analysis, ["id", "amount"], undefined, "mysql"), false);
|
||||
});
|
||||
|
||||
test("keeps Oracle queries with a NUM column or alias editable when result labels disagree", () => {
|
||||
const byName = analyzeEditableQuery("select id, num from users");
|
||||
assert.ok(byName);
|
||||
assert.deepEqual(
|
||||
byName.columns,
|
||||
[
|
||||
{ sourceName: "id", sourceNameQuoted: false, resultName: "id", expression: "id" },
|
||||
{ sourceName: "num", sourceNameQuoted: false, resultName: "num", expression: "num" },
|
||||
],
|
||||
);
|
||||
assert.deepEqual(sourceColumnsForResult(byName, ["ID", "NUM"], undefined, "oracle"), ["id", "num"]);
|
||||
assert.equal(allEditableColumnsWriteable(byName, ["ID", "NUM"], undefined, "oracle"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(byName, ["ID", "ROWNUM"], undefined, "oracle"), ["id", undefined]);
|
||||
assert.equal(sourceColumnsForResult(byName, ["ID", "ROWNUM"], undefined, "oracle")?.[1], undefined);
|
||||
|
||||
const byAlias = analyzeEditableQuery("select id, amount as num from users");
|
||||
assert.ok(byAlias);
|
||||
assert.deepEqual(sourceColumnsForResult(byAlias, ["ID", "AMOUNT"], undefined, "oracle"), ["id", "amount"]);
|
||||
assert.equal(allEditableColumnsWriteable(byAlias, ["ID", "AMOUNT"], undefined, "oracle"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(byAlias, ["ID", "NUM", "ROWNUM"], undefined, "oracle"), ["id", "amount", undefined]);
|
||||
assert.equal(allEditableColumnsWriteable(byAlias, ["ID", "NUM", "ROWNUM"], undefined, "oracle"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(byAlias, ["ID", "AMOUNT", "__dbx_row_num"], undefined, "oracle"), ["id", "amount", undefined]);
|
||||
assert.deepEqual(sourceColumnsForResult(byAlias, ["ID", "AMOUNT", "dbx_rn"], undefined, "oracle"), ["id", "amount", undefined]);
|
||||
assert.equal(allEditableColumnsWriteable(byAlias, ["ID", "AMOUNT", "__dbx_row_num"], undefined, "oracle"), true);
|
||||
});
|
||||
|
||||
test("tolerates trailing pagination labels for non-Oracle engines", () => {
|
||||
const analysis = analyzeEditableQuery("select id, amount as num from users");
|
||||
assert.ok(analysis);
|
||||
assert.deepEqual(sourceColumnsForResult(analysis, ["id", "num", "__dbx_row_num"], undefined, "mysql"), ["id", "amount", undefined]);
|
||||
assert.equal(allEditableColumnsWriteable(analysis, ["id", "num", "__dbx_row_num"], undefined, "mysql"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(analysis, ["id", "num", "dbx_rn"], undefined, "mysql"), ["id", "amount", undefined]);
|
||||
assert.equal(allEditableColumnsWriteable(analysis, ["id", "num", "dbx_rn"], undefined, "mysql"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(analysis, ["id", "num", "ROWNUM"], undefined, "mysql"), ["id", "amount", undefined]);
|
||||
assert.equal(allEditableColumnsWriteable(analysis, ["id", "num", "ROWNUM"], undefined, "mysql"), true);
|
||||
assert.deepEqual(sourceColumnsForResult(analysis, ["id", "num", "rownum"], undefined, "mysql"), ["id", "amount", undefined]);
|
||||
});
|
||||
|
||||
test("maps ClickHouse simple query results when identifier columns are returned", () => {
|
||||
const analysis = analyzeEditableQuery("SELECT id, name, score + 1 AS next_score FROM default.people");
|
||||
|
||||
|
||||
Reference in new issue
Block a user