diff --git a/README.md b/README.md index 146dd66..8313336 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,15 @@ execsql An npm project. Node.js Execute your *.sql files which contain multiple sql statements. +### SQL File Format + +Make sure each `query` is in a single line. + ```sql + SELECT * FROM table_name; + SELECT * FROM table_name; + ``` + + ## Usage ### As a CLI tool @@ -55,6 +64,9 @@ Execute your *.sql files which contain multiple sql statements. .execFile(sqlFile, function (err, results) { if (err) throw err; console.log(results); - }) - .end(); + if(err === null && results === null) { + // comepleted + console.log('Execution Completed'); + } + }); ``` diff --git a/bin/execsql b/bin/execsql index f1bae81..ce7541d 100755 --- a/bin/execsql +++ b/bin/execsql @@ -44,7 +44,10 @@ if (isConfig) { results.forEach(function (result, i) { console.log(i + ' -- \r\n' + JSON.stringify(result)); }); - execsql.end(); + if(err === null && results === null) { + // comepleted + console.log('Execution Completed'); + } process.exit(0); } } diff --git a/index.js b/index.js index a5d4429..1bdb319 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ var fs = require('fs'), _ = require('underscore'), mysql = require('mysql'), + readLine = require('readline'), config = { multipleStatements: true }, @@ -19,19 +20,28 @@ function exec(sql, callback) { } function execFile(filename, callback) { - fs.readFile(filename, 'utf8', function (err, data) { - if (err) throw err; - exec(data, callback); + var fileStream = fs.createReadStream(filename); // file stream to read created + + const rl = readLine.createInterface({ + input: fileStream, + output: process.stdout, + terminal: false + }); + + rl.on('line', function(line) { // reading the file line by line + var query = line.replace(/{{[ ]{0,2}([a-zA-Z0-9\.\_\-]*)[ ]{0,2}}}/g, function(str, mch){ return data[mch]}); + exec(query, callback); + }) + .on('close' function(line) { // triggered on the end of the file + // stop reading + conn.end(); + callback(null, null); }); return this; } exports.exec = exec; exports.execFile = execFile; -exports.end = function () { - conn.end(); - return this; -}; exports.config = function (options) { _.extend(config, _.pick(options, ['host', 'port', 'user', 'password'])); conn = mysql.createConnection(config);