fix(oracle): support locked edits and OceanBase sources
This commit is contained in:
1 parent
3b004abb1e
commit
2bdab48d78
8 files changed
+394
-5
No files matched your search
@@ -64,6 +64,18 @@ describe("editable query hidden primary keys", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("preserves an Oracle FOR UPDATE clause when appending a hidden row key", () => {
|
||||
expect(
|
||||
buildQueryWithHiddenPrimaryKeys({
|
||||
sql: "SELECT * FROM APP.USERS FOR UPDATE SKIP LOCKED",
|
||||
databaseType: "oracle",
|
||||
primaryKeys: ["__DBX_ROWID"],
|
||||
existingResultNames: ["ID", "NAME"],
|
||||
sourceExpressions: { __DBX_ROWID: "ROWIDTOCHAR(ROWID)" },
|
||||
})?.sql,
|
||||
).toBe('SELECT USERS.*, ROWIDTOCHAR(ROWID) AS "__DBX_PK_0" FROM APP.USERS FOR UPDATE SKIP LOCKED');
|
||||
});
|
||||
|
||||
it("qualifies a bare Oracle wildcard when appending a hidden key", () => {
|
||||
expect(
|
||||
buildQueryWithHiddenPrimaryKeys({
|
||||
|
||||
@@ -80,6 +80,13 @@ describe("sqlSemanticModel baseline fixtures", () => {
|
||||
expect(model.cursorIntent).toEqual(expect.objectContaining({ kind: "alias_column", qualifierParts: ["b"] }));
|
||||
});
|
||||
|
||||
it("does not treat an Oracle FOR UPDATE clause as a table alias", () => {
|
||||
const sql = "SELECT * FROM APP.USERS FOR UPDATE SKIP LOCKED";
|
||||
const model = buildSqlSemanticModel(sql, sql.length, { databaseType: "oracle" });
|
||||
|
||||
expect(model.rowSources).toEqual([expect.objectContaining({ name: "USERS", qualifierParts: ["APP"], alias: undefined })]);
|
||||
});
|
||||
|
||||
it("consumes correlation column lists before parsing later comma-separated sources", () => {
|
||||
const { sql, cursor } = sqlFixtureCursor("SELECT * FROM table_a a(id), table_b b, table_c c WHERE c.|");
|
||||
const model = buildSqlSemanticModel(sql, cursor, { databaseType: "postgres" });
|
||||
|
||||
Reference in new issue
Block a user