fix(oracle): preserve plsql block terminators
This commit is contained in:
1 parent
ef39c2bfe8
commit
fc01cea80f
4 files changed
+153
-1
No files matched your search
@@ -65,6 +65,12 @@ END;
|
||||
/
|
||||
SELECT 1;`;
|
||||
|
||||
const oracleIssue2405PlSql = `DECLARE
|
||||
PRE_TRD_DATE INTEGER ;
|
||||
BEGIN
|
||||
SELECT 1 + 2 INTO PRE_TRD_DATE FROM DUAL;
|
||||
END;`;
|
||||
|
||||
const mysqlRoutineFixture = `CREATE PROCEDURE p()
|
||||
BEGIN
|
||||
SELECT 1;
|
||||
@@ -184,6 +190,10 @@ describe("splitSqlStatementRanges", () => {
|
||||
expect(ranges[0].sql).not.toContain("\n/");
|
||||
});
|
||||
|
||||
it("keeps issue #2405 Oracle PL/SQL block together without a slash delimiter", () => {
|
||||
expect(rangeSqlTexts(splitSqlStatementRanges(oracleIssue2405PlSql, "oracle"))).toEqual([oracleIssue2405PlSql]);
|
||||
});
|
||||
|
||||
it("keeps SAP HANA DO blocks together", () => {
|
||||
const ranges = splitSqlStatementRanges(sapHanaDoBlockFixture, "saphana");
|
||||
|
||||
@@ -438,6 +448,12 @@ WHERE request_json LIKE '%"paperFlag":null%';`;
|
||||
expect(range?.sql.trim()).toBe(oraclePlSqlFixture.slice(0, oraclePlSqlFixture.indexOf("\n/")));
|
||||
});
|
||||
|
||||
it("returns the full issue #2405 Oracle PL/SQL block for cursors inside the block", () => {
|
||||
for (const cursor of [indexOf(oracleIssue2405PlSql, "PRE_TRD_DATE"), indexOf(oracleIssue2405PlSql, "SELECT 1 + 2"), indexOf(oracleIssue2405PlSql, "END;")]) {
|
||||
expect(statementRangeAtCursor(oracleIssue2405PlSql, cursor, "oracle")?.sql.trim()).toBe(oracleIssue2405PlSql);
|
||||
}
|
||||
});
|
||||
|
||||
it("returns the full SAP HANA DO block for cursors inside nested statements", () => {
|
||||
const range = statementRangeAtCursor(sapHanaDoBlockFixture, indexOf(sapHanaDoBlockFixture, "Result"), "saphana");
|
||||
|
||||
@@ -477,6 +493,10 @@ describe("executableStatementRanges", () => {
|
||||
expect(rangeSqlTexts(executableStatementRanges(oraclePlSqlFixture, "oracle"))).toEqual([oraclePlSqlFixture.slice(0, oraclePlSqlFixture.indexOf("\n/")), "SELECT 1"]);
|
||||
});
|
||||
|
||||
it("returns the issue #2405 Oracle PL/SQL block as one executable range", () => {
|
||||
expect(rangeSqlTexts(executableStatementRanges(oracleIssue2405PlSql, "oracle"))).toEqual([oracleIssue2405PlSql]);
|
||||
});
|
||||
|
||||
it("does not split executable MySQL routine ranges at inner statements", () => {
|
||||
expect(rangeSqlTexts(executableStatementRanges(mysqlRoutineFixture, "mysql"))).toEqual([mysqlRoutineFixture.slice(0, mysqlRoutineFixture.indexOf("\nSELECT 2;")).replace(/;$/, "").trim(), "SELECT 2"]);
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user