diff --git a/src/barrel/statements.ts b/src/barrel/statements.ts index ae6a1bb..e628b13 100644 --- a/src/barrel/statements.ts +++ b/src/barrel/statements.ts @@ -8,6 +8,7 @@ export * from "../lexer/statements/mysql/rename"; export * from "../lexer/statements/postgres/alter"; export * from "../lexer/statements/postgres/create"; +export * from "../lexer/statements/postgres/do"; export * from "../lexer/statements/postgres/drop"; export * from "../lexer/statements/postgres/select"; export * from "../lexer/statements/postgres/truncate"; diff --git a/src/lexer/statementFactory.ts b/src/lexer/statementFactory.ts index cdee9b7..8125b4f 100644 --- a/src/lexer/statementFactory.ts +++ b/src/lexer/statementFactory.ts @@ -7,6 +7,7 @@ import { Drop, Truncate, Rename, + Do, } from "../barrel/statements"; class StatementFactory { @@ -21,6 +22,7 @@ class StatementFactory { alter: new Alter(), truncate: new Truncate(), rename: new Rename(), + do: new Do(), }; if (Object.keys(statementMap).includes(statement)) { diff --git a/src/lexer/statements/postgres/do.ts b/src/lexer/statements/postgres/do.ts new file mode 100644 index 0000000..1d65ed8 --- /dev/null +++ b/src/lexer/statements/postgres/do.ts @@ -0,0 +1,36 @@ +import { Query } from "../../../reader/query"; +import { ILexer } from "../../interface"; +import { cleanUnquotedIdentifier } from "../../lexer"; +import { Keyword } from "../../../syntax/keywords"; +import { Types } from "../../types"; +import { Token } from "../../token"; + +class Do implements ILexer { + public options: string[] = []; + + public tokenise(query: Query): Query { + let lastToken = ""; + + query.lines.forEach((line) => { + line.content.split(" ").forEach((word) => { + let item = word.toLowerCase().trim(); + if (item === Keyword.Do) { + line.tokens.push(new Token(Types.Keyword, item)); + } else if (lastToken === Keyword.Do) { + item = cleanUnquotedIdentifier(item); + + if (item.length > 0) { + line.tokens.push( + new Token(Types.Option, cleanUnquotedIdentifier(item)) + ); + } + } + lastToken = item; + }); + }); + + return query; + } +} + +export { Do }; \ No newline at end of file diff --git a/src/syntax/keywords.ts b/src/syntax/keywords.ts index 45f0828..ef3e54d 100644 --- a/src/syntax/keywords.ts +++ b/src/syntax/keywords.ts @@ -8,6 +8,7 @@ export enum Keyword { Declare = "declare", Delete = "delete", Delimiter = "delimiter", + Do = "do", Drop = "drop", Else = "else", End = "end",