mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-08-07 23:23:52 +08:00
🐛 fix(sql-editor): 修复存储过程定义执行截断
This commit is contained in:
@@ -86,6 +86,72 @@ describe('sqlStatementSelection', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('keeps Oracle CREATE PROCEDURE definitions as one executable statement', () => {
|
||||
const sql = [
|
||||
'CREATE OR REPLACE PROCEDURE proc_tally2accept(',
|
||||
' p_tallyacceptno IN t_tally_accept_h.acceptno%TYPE,',
|
||||
' out_acceptno OUT t_accept_h.acceptno%TYPE',
|
||||
') IS',
|
||||
' v_busno t_tally_accept_h.busno%TYPE;',
|
||||
' v_count PLS_INTEGER;',
|
||||
'BEGIN',
|
||||
" SELECT COUNT(*) INTO v_count FROM t_tally_accept_h WHERE acceptno = p_tallyacceptno;",
|
||||
' IF v_count > 0 THEN',
|
||||
' out_acceptno := p_tallyacceptno;',
|
||||
' END IF;',
|
||||
'END;',
|
||||
'SELECT 1 FROM dual;',
|
||||
].join('\n');
|
||||
|
||||
const ranges = findSqlStatementRanges(sql).map((range) => range.text);
|
||||
|
||||
expect(ranges).toEqual([
|
||||
[
|
||||
'CREATE OR REPLACE PROCEDURE proc_tally2accept(',
|
||||
' p_tallyacceptno IN t_tally_accept_h.acceptno%TYPE,',
|
||||
' out_acceptno OUT t_accept_h.acceptno%TYPE',
|
||||
') IS',
|
||||
' v_busno t_tally_accept_h.busno%TYPE;',
|
||||
' v_count PLS_INTEGER;',
|
||||
'BEGIN',
|
||||
" SELECT COUNT(*) INTO v_count FROM t_tally_accept_h WHERE acceptno = p_tallyacceptno;",
|
||||
' IF v_count > 0 THEN',
|
||||
' out_acceptno := p_tallyacceptno;',
|
||||
' END IF;',
|
||||
'END;',
|
||||
].join('\n'),
|
||||
'SELECT 1 FROM dual',
|
||||
]);
|
||||
expect(resolveExecutableSql(sql, sql.indexOf('v_busno'))).toEqual({
|
||||
sql: ranges[0],
|
||||
source: 'statement',
|
||||
});
|
||||
});
|
||||
|
||||
it('keeps PostgreSQL dollar-quoted CREATE FUNCTION definitions as one executable statement', () => {
|
||||
const sql = [
|
||||
'CREATE OR REPLACE FUNCTION refresh_stats() RETURNS void AS $$',
|
||||
'BEGIN',
|
||||
' PERFORM refresh_now();',
|
||||
'END;',
|
||||
'$$ LANGUAGE plpgsql;',
|
||||
'SELECT 2;',
|
||||
].join('\n');
|
||||
|
||||
const ranges = findSqlStatementRanges(sql).map((range) => range.text);
|
||||
|
||||
expect(ranges).toEqual([
|
||||
[
|
||||
'CREATE OR REPLACE FUNCTION refresh_stats() RETURNS void AS $$',
|
||||
'BEGIN',
|
||||
' PERFORM refresh_now();',
|
||||
'END;',
|
||||
'$$ LANGUAGE plpgsql',
|
||||
].join('\n'),
|
||||
'SELECT 2',
|
||||
]);
|
||||
});
|
||||
|
||||
it('still splits transaction BEGIN statements', () => {
|
||||
const sql = 'BEGIN; UPDATE accounts SET balance = balance - 1 WHERE id = 1; COMMIT;';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user