diff --git a/README.md b/README.md index 9ebfd83..2d4a686 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ MariaDB node.js connector is a [mysql](https://www.npmjs.com/package/mysql) compatible driver, used to connect applications developed in Java to MariaDB and MySQL databases. MariaDB Connector/J is LGPL licensed. -Tracker link https://jira.mariadb.org/projects/CONJS/issues/ +Extended documentation of API : [Complete documentation](/documentation/readme.md) ## Status [![Linux Build](https://travis-ci.org/rusher/mariadb-connector-nodejs.svg?branch=master)](https://travis-ci.org/rusher/mariadb-connector-nodejs) @@ -24,7 +24,6 @@ Tracker link https://j

- explain why good perfs (avoiding string concatenation, buffer are send are binary, not hexa string, ...) @@ -47,3 +46,6 @@ For a Getting started guide, API docs, recipes, etc. see the ## Contributing To get started with a development installation and learn more about contributing, please follow the instructions at our [Developers Guide.](/documentation/developers-guide.md) + +Tracker link
https://jira.mariadb.org/projects/CONJS/issues/ + diff --git a/benchmarks/benchmarkOne.js b/benchmarks/benchmarkOne.js index af77de6..3f367ad 100644 --- a/benchmarks/benchmarkOne.js +++ b/benchmarks/benchmarkOne.js @@ -9,10 +9,10 @@ var run = function() { bench = new Bench(run); var launchBenchs = function(path) { - var test = 'bench_select_one_user.js'; + var test = 'bench_select_param.js'; var m = require(path + '/' + test); bench.initFcts.push(m.initFct); - bench.add(m.title, m.displaySql, m.benchFct, m.onComplet); + bench.add(m.title, m.displaySql, m.benchFct, m.onComplete); }; fs.access('./benchs', function(err) { diff --git a/benchmarks/benchmarks.js b/benchmarks/benchmarks.js index 1bb14d2..981c1a7 100644 --- a/benchmarks/benchmarks.js +++ b/benchmarks/benchmarks.js @@ -1,14 +1,14 @@ -var fs = require('fs'); -var Bench = require('./common_benchmarks'); -var bench; +const fs = require('fs'); +const Bench = require('./common_benchmarks'); +let bench; -var run = function() { +const run = function() { bench.suite.run(); }; bench = new Bench(run); -var launchBenchs = function(path) { +const launchBenchs = function(path) { fs.readdir(path, function(err, list) { if (err) { console.error(err); @@ -16,8 +16,8 @@ var launchBenchs = function(path) { } //launch all benchmarks - for (var i = 0; i < list.length; i++) { - var m = require('./benchs/' + list[i]); + for (let i = 0; i < list.length; i++) { + const m = require('./benchs/' + list[i]); bench.initFcts.push(m.initFct); bench.add(m.title, m.displaySql, m.benchFct, m.onComplete); } diff --git a/benchmarks/benchs/bench_basic_insert.js b/benchmarks/benchs/bench_basic_insert.js index b3b3fa9..092a24f 100644 --- a/benchmarks/benchs/bench_basic_insert.js +++ b/benchmarks/benchs/bench_basic_insert.js @@ -1,4 +1,4 @@ -var assert = require('assert'); +const assert = require('assert'); module.exports.title = 'simple insert'; module.exports.displaySql = 'INSERT INTO testn.perfTest(test) VALUES (?) (into BLACKHOLE ENGINE) '; diff --git a/benchmarks/benchs/bench_insert.js b/benchmarks/benchs/bench_insert.js index b2519d0..036d784 100644 --- a/benchmarks/benchs/bench_insert.js +++ b/benchmarks/benchs/bench_insert.js @@ -1,22 +1,22 @@ -var assert = require('assert'); +const assert = require('assert'); -var basechars = '123456789abcdefghijklmnop\\Z'; -var chars = basechars.split(''); +const basechars = '123456789abcdefghijklmnop\\Z'; +const chars = basechars.split(''); chars.push('😎'); chars.push('🌶'); chars.push('🎤'); chars.push('🥂'); function randomString(length) { - var result = ''; - for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; + let result = ''; + for (let i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]; return result; } -var sqlTable = 'CREATE TABLE testn.perfTestText (id MEDIUMINT NOT NULL AUTO_INCREMENT,t0 text'; -var sqlParam = ''; -var sqlCol = 't0'; -for (var i = 1; i < 10; i++) { +let sqlTable = 'CREATE TABLE testn.perfTestText (id MEDIUMINT NOT NULL AUTO_INCREMENT,t0 text'; +let sqlParam = ''; +let sqlCol = 't0'; +for (let i = 1; i < 10; i++) { sqlParam += ',?'; sqlCol += ',t' + i; sqlTable += ',t' + i + ' text'; @@ -29,8 +29,8 @@ module.exports.displaySql = 'INSERT INTO testn.perfTestText VALUES (<100 ?>) (into BLACKHOLE ENGINE)'; module.exports.benchFct = function(conn, deferred) { - var params = []; - for (var i = 0; i < 10; i++) { + const params = []; + for (let i = 0; i < 10; i++) { params.push(randomString(10)); } diff --git a/benchmarks/benchs/bench_select_collation.js b/benchmarks/benchs/bench_select_collation.js index 8848741..12627cf 100644 --- a/benchmarks/benchs/bench_select_collation.js +++ b/benchmarks/benchs/bench_select_collation.js @@ -1,4 +1,4 @@ -var assert = require('assert'); +const assert = require('assert'); module.exports.title = 'select multiple collation'; module.exports.displaySql = 'select * from information_schema.COLLATIONS'; diff --git a/benchmarks/benchs/bench_select_one_user.js b/benchmarks/benchs/bench_select_one_user.js index b057c79..2a35f84 100644 --- a/benchmarks/benchs/bench_select_one_user.js +++ b/benchmarks/benchs/bench_select_one_user.js @@ -1,4 +1,4 @@ -var assert = require('assert'); +const assert = require('assert'); module.exports.title = 'select one mysql.user'; module.exports.displaySql = diff --git a/benchmarks/benchs/bench_select_param.js b/benchmarks/benchs/bench_select_param.js index 92933ef..56677c7 100644 --- a/benchmarks/benchs/bench_select_param.js +++ b/benchmarks/benchs/bench_select_param.js @@ -1,10 +1,10 @@ -var assert = require('assert'); +const assert = require('assert'); module.exports.title = 'select ?'; module.exports.displaySql = 'select ?'; module.exports.benchFct = function(conn, deferred) { - var rand = Math.floor(Math.random() * 50000000); + const rand = Math.floor(Math.random() * 50000000); conn.query('select ? as t', [rand], function(err, rows) { assert.ifError(err); assert.equal(rand, rows[0].t); diff --git a/benchmarks/common_benchmarks.js b/benchmarks/common_benchmarks.js index f72f3c0..bad411f 100644 --- a/benchmarks/common_benchmarks.js +++ b/benchmarks/common_benchmarks.js @@ -1,11 +1,11 @@ -var Benchmark = require('benchmark'); -var conf = require('../test/conf'); +const Benchmark = require('benchmark'); +const conf = require('../test/conf'); -var colors = require('colors'); -var mariadb = require('../index.js'); -var mysql = require('mysql'); -var mysql2 = require('mysql2'); -var mariasqlC; +const colors = require('colors'); +const mariadb = require('../index.js'); +const mysql = require('mysql'); +const mysql2 = require('mysql2'); +let mariasqlC; try { mariasqlC = require('mariasql'); } catch (err) { @@ -13,10 +13,10 @@ try { } function Bench(callback) { - var dbReady = 0; + let dbReady = 0; this.reportData = {}; - var ready = function(name) { + const ready = function(name) { console.log('driver for ' + name + ' connected'); dbReady++; if (dbReady === (mariasqlC ? 4 : 3)) { @@ -25,8 +25,12 @@ function Bench(callback) { } }; - var config = conf.baseConfig; + const config = conf.baseConfig; config.charsetNumber=224; + if (process.platform !== 'win32') { + config.socketPath= '\\\\.\\pipe\\MySQL'; + } + this.CONN = {}; this.CONN['MYSQL'] = { drv: mysql.createConnection(config), desc: 'mysql' }; @@ -52,7 +56,7 @@ function Bench(callback) { }); if (mariasqlC) { - var configC = Object.assign({}, common.config); + const configC = Object.assign({}, config); configC.charset = undefined; this.CONN['MARIASQLC'] = { @@ -68,11 +72,11 @@ function Bench(callback) { this.queue = true; this.async = true; this.minSamples = 200; - var bench = this; + const bench = this; this.suite = new Benchmark.Suite('foo', { // called when the suite starts running onStart: function() { - for (var i = 0; i < bench.initFcts.length; i++) { + for (let i = 0; i < bench.initFcts.length; i++) { if (bench.initFcts[i]) { bench.initFcts[i].call(this, bench.CONN.MYSQL.drv); } @@ -85,11 +89,11 @@ function Bench(callback) { mysql2.clearParserCache(); console.log(event.target.toString()); - var drvType = event.target.options.drvType; - var benchTitle = + const drvType = event.target.options.drvType; + const benchTitle = event.target.options.benchTitle + ' ( sql: ' + event.target.options.displaySql + ' )'; - var iteration = 1 / event.target.times.period; - var variation = event.target.stats.rme; + const iteration = 1 / event.target.times.period; + const variation = event.target.stats.rme; if (!bench.reportData[benchTitle]) { bench.reportData[benchTitle] = []; @@ -137,14 +141,14 @@ Bench.prototype.displayReport = function() { .gray ); - var keys = Object.keys(this.reportData); - for (var i = 0; i < keys.length; i++) { - var base = 0; - var best = 0; - var data = this.reportData[keys[i]]; + const keys = Object.keys(this.reportData); + for (let i = 0; i < keys.length; i++) { + let base = 0; + let best = 0; + let data = this.reportData[keys[i]]; - for (var j = 0; j < data.length; j++) { - var o = data[j]; + for (let j = 0; j < data.length; j++) { + let o = data[j]; if (o.drvType === (mariasqlC ? 'mariasqlC' : 'mysql')) { base = o.iteration; } @@ -155,11 +159,11 @@ Bench.prototype.displayReport = function() { console.log(''); console.log('bench : ' + keys[i]); - for (var j = 0; j < data.length; j++) { - var o = data[j]; - var val = 100 * (o.iteration - base) / base; - var perc = simpleFormat.format(val); - var tt = + for (let j = 0; j < data.length; j++) { + let o = data[j]; + const val = 100 * (o.iteration - base) / base; + const perc = simpleFormat.format(val); + const tt = ' ' + this.fill(o.drvType, 10) + ' : ' + @@ -196,7 +200,7 @@ Bench.prototype.fill = function(val, length, right) { }; Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { - var self = this; + const self = this; if (conn) { this.suite.add({ @@ -221,7 +225,7 @@ Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { fn: function(deferred) { fct.call(self, self.CONN.MYSQL.drv, deferred); }, - onComplete: function() { + onComplete: () => { if (onComplete) onComplete.call(self, self.CONN.MYSQL.drv); }, async: this.async, @@ -238,7 +242,7 @@ Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { fn: function(deferred) { fct.call(self, self.CONN.MYSQL.drv, deferred); }, - onComplete: function(defer) { + onComplete: () => { if (onComplete) onComplete.call(self, self.CONN.MYSQL2.drv); }, async: this.async, @@ -255,7 +259,7 @@ Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { fn: function(deferred) { fct.call(self, self.CONN.MYSQL2.drv, deferred); }, - onComplete: function(defer) { + onComplete: () => { if (onComplete) onComplete.call(self, self.CONN.MARIADB.drv); }, async: this.async, @@ -272,7 +276,7 @@ Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { fn: function(deferred) { fct.call(self, self.CONN.MARIADB.drv, deferred); }, - onComplete: function(defer) { + onComplete: () => { if (onComplete) onComplete.call(self, self.CONN.MARIADB.drv); }, async: this.async, @@ -290,7 +294,7 @@ Bench.prototype.add = function(title, displaySql, fct, onComplete, conn) { fn: function(deferred) { fct.call(self, self.CONN.MARIASQLC.drv, deferred); }, - onComplete: function(defer) { + onComplete: () => { if (onComplete) onComplete.call(self, self.CONN.MARIASQLC.drv); }, async: this.async, diff --git a/documentation/readme.md b/documentation/readme.md index c8ba81d..9dbcbf5 100644 --- a/documentation/readme.md +++ b/documentation/readme.md @@ -32,6 +32,31 @@ Not implemented : escape function are not implemented, since it can lead to injection. statistic method is public in mysql, but not documented. + +### Initiate a connection + +For faster connections to localhost, either the Unix socket file to use (default /tmp/mysql.sock), +or, on Windows where the server has been started with the --enable-named-pipe option, the name (case-insensitive) of the named pipe to use (default MySQL). + + +This is done by setting the option 'socketPath' (host and port option are then ignored). +This permit to avoid TCP-IP layer. + +If not on localhost, then hostname must be set, port is optional with default 3306. + +```javascript +var mariadb = require('mariadb-connector'); + +//localhost on windows +var conn1 = mariadb.createConnection({socketPath: '\\\\.\\pipe\\MySQL'}); + +//localhost on unix +var conn2 = mariadb.createConnection({socketPath: '/tmp/mysql.sock'}); + +//not localhost +var conn3 = mariadb.createConnection({host: 'mydb.com', port:9999}); +``` + ## Query `connection.query(sql[, values][,callback])` diff --git a/package.json b/package.json index 278a7f9..364167b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "nodejs-mariadb", + "name": "mariadb-connector", "version": "0.0.1", - "description": "fast mysql/mariadb driver.", + "description": "fast mariadb/mysql driver.", "main": "index.js", "directories": { "src": "src",