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

View File

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

View File

@@ -41,3 +41,9 @@ test('semicolon inside identyifier - mssql', () => {
});
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;']);
});