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