不要怂,就是干,撸起袖子干!

Commit 95df903a by reedog117

work in progress: currently debugging

1 parent c7fb0217
...@@ -108,7 +108,7 @@ module.exports = (function() { ...@@ -108,7 +108,7 @@ module.exports = (function() {
} else if (this.poolCfg) { } else if (this.poolCfg) {
//the user has requested pooling, so create our connection pool //the user has requested pooling, so create our connection pool
this.pool = Pooling.Pool({ this.pool = Pooling.Pool({
name: 'sequelize-mariasql', name: 'sequelize-mariadb',
create: function (done) { create: function (done) {
connect.call(self, done) connect.call(self, done)
}, },
...@@ -207,33 +207,48 @@ module.exports = (function() { ...@@ -207,33 +207,48 @@ module.exports = (function() {
var disconnect = function(client) { var disconnect = function(client) {
var self = this; var self = this;
if (!this.useQueue) {
client.on('close', function() {
self.client = null
self.isConnecting = false
})
client.end()
/* if (!this.useQueue) {
this.client = null; this.client = null;
} }
*/
client.end(function() { // moved outside of anon function
if (!self.useQueue) {
return client.destroy();
}
var intervalObj = null /* if (!self.useQueue && client.connected) {
var cleanup = function () { return client.destroy()
var retryCt = 0 } else {
// make sure to let client finish before calling destroy client.end()
if (self && self.hasQueuedItems) { }
return
} var intervalObj = null
// needed to prevent mariasql connection leak var cleanup = function () {
client.destroy() var retryCt = 0
if (self && self.client) { // make sure to let client finish before calling destroy
self.client = null if (self && self.hasQueuedItems) {
} return
clearInterval(intervalObj) }
// needed to prevent mariasql connection leak
// client.destroy()
if (self && self.client) {
self.client = null
} }
clearInterval(intervalObj)
}
if(client.connected) {
intervalObj = setInterval(cleanup, 10) intervalObj = setInterval(cleanup, 10)
cleanup() cleanup()
return }*/
}) return
} }
var connect = function(done, config) { var connect = function(done, config) {
...@@ -295,6 +310,10 @@ module.exports = (function() { ...@@ -295,6 +310,10 @@ module.exports = (function() {
} }
var transferQueuedItems = function(count) { var transferQueuedItems = function(count) {
// prevent possible overrun condition
if( count > this.queue.length )
count = this.queue.length
for(var i = 0; i < count; i++) { for(var i = 0; i < count; i++) {
var queueItem = this.queue.shift(); var queueItem = this.queue.shift();
if (queueItem) { if (queueItem) {
...@@ -332,7 +351,7 @@ module.exports = (function() { ...@@ -332,7 +351,7 @@ module.exports = (function() {
}) })
ConnectorManager.prototype.__defineGetter__('isConnected', function() { ConnectorManager.prototype.__defineGetter__('isConnected', function() {
return this.client != null return this.client != null && this.client.connected == true
}) })
var disconnectIfNoConnections = function() { var disconnectIfNoConnections = function() {
......
...@@ -23,30 +23,53 @@ module.exports = (function() { ...@@ -23,30 +23,53 @@ module.exports = (function() {
this.options.logging('Executing: ' + this.sql) this.options.logging('Executing: ' + this.sql)
} }
var resultSet = []; var query = this.client.query(this.sql),
resultSet = [],
errorDetected = false,
temp = 1
this.client.query(this.sql) query.on('result', function(results) {
.on('result', function(results) {
var resultStream = results;
results.on('row', function(row) {
resultSet.push(row); results.on('row', function(row) {
}) resultSet.push(row);
.on('error', function(err) {
this.emit('error', err, this.callee)
})
.on('end', function(info) {
//console.log(info)
});
}) })
.on('error', function(err) {
//console.log('error in result-loop for: ' + self.sql)
errorDetected = true
this.emit('sql', this.sql)
console.log('Failed query : ' + this.sql)
console.log(err)
resultStream.abort()
this.emit('error', err, this.callee)
}.bind(this))
.on('end', function(info) {
//console.log(info)
if(errorDetected)
return
//this.emit('sql', this.sql)
//this.emit('success', this.formatResults(resultSet))
}.bind(this));
}.bind(this))
.on('error', function(err) { .on('error', function(err) {
console.log( stack ) //console.log( err )
//this.emit('error', err, this.callee) //console.log('error in query: ' + this.sql)
}) // if(errorDetected)
// return
// errorDetected = true
// this.emit('sql', this.sql)
// this.emit('error', err, this.callee)
console.log('query error')
}.bind(this))
.on('end', function() { .on('end', function() {
if(errorDetected)
return
this.emit('sql', this.sql) this.emit('sql', this.sql)
console.log('Successful query : ' + this.sql)
console.log(resultSet)
this.emit('success', this.formatResults(resultSet)) this.emit('success', this.formatResults(resultSet))
}.bind(this)) }.bind(this)).setMaxListeners(100)
return this return this
} }
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
"validator": "1.1.1", "validator": "1.1.1",
"moment": "~1.7.0", "moment": "~1.7.0",
"commander": "~0.6.0", "commander": "~0.6.0",
"generic-pool": "1.0.9", "generic-pool": "1.0.12",
"dottie": "0.0.6-1", "dottie": "0.0.6-1",
"toposort-class": "0.1.4" "toposort-class": "0.1.4"
}, },
...@@ -47,8 +47,7 @@ ...@@ -47,8 +47,7 @@
"mariasql": "~0.1.18", "mariasql": "~0.1.18",
"buster": "~0.6.0", "buster": "~0.6.0",
"watchr": "~2.2.0", "watchr": "~2.2.0",
"yuidocjs": "~0.3.36", "yuidocjs": "~0.3.36"
"mariasql": "~0.1.18"
}, },
"keywords": [ "keywords": [
"mysql", "mysql",
......
...@@ -25,7 +25,7 @@ module.exports = { ...@@ -25,7 +25,7 @@ module.exports = {
database: 'sequelize_test', database: 'sequelize_test',
host: '127.0.0.1', host: '127.0.0.1',
port: 3306, port: 3306,
pool: { maxConnections: 5, maxIdleTime: 30} pool: { maxConnections: 1, maxIdleTime: 30}
}, },
sqlite: { sqlite: {
......
...@@ -168,6 +168,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -168,6 +168,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
Helpers.checkMatchForDialects(dialect, err.message, { Helpers.checkMatchForDialects(dialect, err.message, {
sqlite: /.*SQLITE_CONSTRAINT.*/, sqlite: /.*SQLITE_CONSTRAINT.*/,
mysql: /.*Duplicate\ entry.*/, mysql: /.*Duplicate\ entry.*/,
mariadb: /.*Duplicate\ entry.*/,
postgres: /.*duplicate\ key\ value.*/ postgres: /.*duplicate\ key\ value.*/
}) })
...@@ -190,6 +191,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -190,6 +191,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
Helpers.checkMatchForDialects(dialect, err.message, { Helpers.checkMatchForDialects(dialect, err.message, {
sqlite: /.*SQLITE_CONSTRAINT.*/, sqlite: /.*SQLITE_CONSTRAINT.*/,
mysql: "Column 'smth' cannot be null", mysql: "Column 'smth' cannot be null",
mariadb: "Column 'smth' cannot be null",
postgres: /.*column "smth" violates not-null.*/ postgres: /.*column "smth" violates not-null.*/
}) })
...@@ -200,6 +202,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -200,6 +202,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
Helpers.checkMatchForDialects(dialect, err.message, { Helpers.checkMatchForDialects(dialect, err.message, {
sqlite: /.*SQLITE_CONSTRAINT.*/, sqlite: /.*SQLITE_CONSTRAINT.*/,
mysql: "Duplicate entry 'foo' for key 'username'", mysql: "Duplicate entry 'foo' for key 'username'",
mariadb: "Duplicate entry 'foo' for key 'username'",
postgres: /.*duplicate key value violates unique constraint.*/ postgres: /.*duplicate key value violates unique constraint.*/
}) })
...@@ -1499,7 +1502,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -1499,7 +1502,7 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
}) })
}) })
if (dialect === "mysql") { if (dialect === "mysql" /* || dialect === "mariadb" */) {
it("should take schemaDelimiter into account if applicable", function(done){ it("should take schemaDelimiter into account if applicable", function(done){
var UserSpecialUnderscore = this.sequelize.define('UserSpecialUnderscore', {age: Sequelize.INTEGER}, {schema: 'hello', schemaDelimiter: '_'}) var UserSpecialUnderscore = this.sequelize.define('UserSpecialUnderscore', {age: Sequelize.INTEGER}, {schema: 'hello', schemaDelimiter: '_'})
var UserSpecialDblUnderscore = this.sequelize.define('UserSpecialDblUnderscore', {age: Sequelize.INTEGER}) var UserSpecialDblUnderscore = this.sequelize.define('UserSpecialDblUnderscore', {age: Sequelize.INTEGER})
......
...@@ -7,7 +7,7 @@ if(typeof require === 'function') { ...@@ -7,7 +7,7 @@ if(typeof require === 'function') {
var qq = function(str) { var qq = function(str) {
if (dialect == 'postgres' || dialect == 'sqlite') { if (dialect == 'postgres' || dialect == 'sqlite') {
return '"' + str + '"' return '"' + str + '"'
} else if (dialect == 'mysql') { } else if (dialect == 'mysql' || dialect == 'mariadb') {
return '`' + str + '`' return '`' + str + '`'
} else { } else {
return str return str
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!