mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 06:06:00 +00:00
mysql delimiter in code splitter
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;']);
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user