From 482ecd7c382ac4215f07cd4db1ed185cf9d302e1 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 28 Oct 2021 11:24:23 +0200 Subject: [PATCH] query-splitter: documentatin for streaming support --- packages/query-splitter/README.md | 39 ++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/packages/query-splitter/README.md b/packages/query-splitter/README.md index 088e5546..a74c2213 100644 --- a/packages/query-splitter/README.md +++ b/packages/query-splitter/README.md @@ -1,15 +1,15 @@ [![NPM version](https://img.shields.io/npm/v/dbgate-query-splitter.svg)](https://www.npmjs.com/package/dbgate-query-splitter) -dbgate-query-splitter -==================== +# dbgate-query-splitter -Splits long SQL query into into particular statements. Designed to have zero dependencies and to be fast. +Splits long SQL query into into particular statements. Designed to have zero dependencies and to be fast. Also supports nodejs-streams. Supports following SQL dialects: -* MySQL -* PostgreSQL -* SQLite -* Microsoft SQL Server + +- MySQL +- PostgreSQL +- SQLite +- Microsoft SQL Server ## Usage @@ -19,10 +19,26 @@ import { splitQuery, mysqlSplitterOptions, mssqlSplitterOptions, postgreSplitter const output = splitQuery('SELECT * FROM `table1`;SELECT * FROM `table2`;', mysqlSplitterOptions); // output is ['SELECT * FROM `table1`', 'SELECT * FROM `table2`'] +``` + +## Streaming support in nodejs +Function splitQueryStream accepts input stream and query options. Result is object stream, each object for one splitted query. +Tokens must not be divided into more input chunks. This can be accomplished eg. when input stream emits one chunk per line (eg. using byline module) + +```js +const { mysqlSplitterOptions, mssqlSplitterOptions, postgreSplitterOptions } = require('dbgate-query-splitter'); +const { splitQueryStream } = require('dbgate-query-splitter/lib/splitQueryStream'); +const fs = require('fs'); +const byline = require('byline'); + +const fileStream = fs.createReadStream('INPUT_FILE_NAME', 'utf-8'); +const lineStream = byline(fileStream); +const splittedStream = splitQueryStream(lineStream, mysqlSplitterOptions); ``` ## Contributing + Please run tests before pushing any changes. ```sh @@ -30,7 +46,8 @@ yarn test ``` ## Supported syntax -* Comments -* Dollar strings (PostgreSQL) -* GO separators (MS SQL) -* Custom delimiter, setby DELIMITER keyword (MySQL) + +- Comments +- Dollar strings (PostgreSQL) +- GO separators (MS SQL) +- Custom delimiter, setby DELIMITER keyword (MySQL)