mysql delimiter in code splitter

This commit is contained in:
Jan Prochazka
2021-05-31 22:16:30 +02:00
parent 202873be71
commit f7b15cc17e
3 changed files with 17 additions and 7 deletions

View File

@@ -1,7 +1,7 @@
export interface SplitterOptions { export interface SplitterOptions {
stringsBegins: string[]; stringsBegins: string[];
stringsEnds: { string: string }; stringsEnds: { [begin: string]: string };
stringEscapes: string[]; stringEscapes: { [begin: string]: string };
allowSemicolon: boolean; allowSemicolon: boolean;
allowCustomDelimiter: boolean; allowCustomDelimiter: boolean;
@@ -9,7 +9,7 @@ export interface SplitterOptions {
allowDollarDollarString: boolean; allowDollarDollarString: boolean;
} }
export const defaultSplitterOptions = { export const defaultSplitterOptions: SplitterOptions = {
stringsBegins: ["'"], stringsBegins: ["'"],
stringsEnds: { "'": "'" }, stringsEnds: { "'": "'" },
stringEscapes: { "'": "'" }, stringEscapes: { "'": "'" },
@@ -17,17 +17,19 @@ export const defaultSplitterOptions = {
allowSemicolon: true, allowSemicolon: true,
allowCustomDelimiter: false, allowCustomDelimiter: false,
allowGoDelimiter: false, allowGoDelimiter: false,
allowDollarDollarString: false,
}; };
export const mysqlSplitterOptions = { export const mysqlSplitterOptions: SplitterOptions = {
...defaultSplitterOptions, ...defaultSplitterOptions,
allowCustomDelimiter: true,
stringsBegins: ["'", '`'], stringsBegins: ["'", '`'],
stringsEnds: { "'": "'", '`': '`' }, stringsEnds: { "'": "'", '`': '`' },
stringEscapes: { "'": '\\', '`': '`' }, stringEscapes: { "'": '\\', '`': '`' },
}; };
export const mssqlSplitterOptions = { export const mssqlSplitterOptions: SplitterOptions = {
...defaultSplitterOptions, ...defaultSplitterOptions,
allowSemicolon: false, allowSemicolon: false,
allowGoDelimiter: true, allowGoDelimiter: true,
@@ -37,7 +39,7 @@ export const mssqlSplitterOptions = {
stringEscapes: { "'": "'" }, stringEscapes: { "'": "'" },
}; };
export const postgreSplitterOptions = { export const postgreSplitterOptions: SplitterOptions = {
...defaultSplitterOptions, ...defaultSplitterOptions,
allowDollarDollarString: true, allowDollarDollarString: true,

View File

@@ -142,8 +142,10 @@ export function splitQuery(sql: string, options: SplitterOptions = null): string
context.position += token.length; context.position += token.length;
break; break;
case 'set_delimiter': case 'set_delimiter':
pushQuery(context);
context.currentDelimiter = token.value; context.currentDelimiter = token.value;
context.position += token.length; context.position += token.length;
context.currentCommandStart = context.position;
break; break;
case 'delimiter': case 'delimiter':
pushQuery(context); pushQuery(context);
@@ -177,6 +179,6 @@ export function splitQuery(sql: string, options: SplitterOptions = null): string
// publishStatement(context); // publishStatement(context);
// console.log('RESULT', context.output); // console.log('RESULT', context.output);
return context.output; return context.output;
} }

View File

@@ -41,3 +41,9 @@ test('semicolon inside identyifier - mssql', () => {
}); });
expect(output).toEqual(input); expect(output).toEqual(input);
}); });
test('delimiter test', () => {
const input = 'SELECT 1;\n DELIMITER $$\n SELECT 2; SELECT 3; \n DELIMITER ;';
const output = splitQuery(input, mysqlSplitterOptions);
expect(output).toEqual(['SELECT 1', 'SELECT 2; SELECT 3;']);
});