mirror of
https://github.com/knex/knex.git
synced 2025-11-09 14:23:53 +00:00
added option() to resolve overlapping column names on joins
This commit is contained in:
parent
b5c1696ae9
commit
0d1593373f
@ -32,7 +32,7 @@ _.extend(MysqlClient.prototype, base.protoProps, {
|
|||||||
if (debug) base.debug(builder, conn);
|
if (debug) base.debug(builder, conn);
|
||||||
|
|
||||||
// Call the querystring and then release the client
|
// Call the querystring and then release the client
|
||||||
conn.query(builder.sql, builder.bindings, function (err, resp) {
|
conn.query(_.extend({sql: builder.sql}, builder.opts), builder.bindings, function (err, resp) {
|
||||||
|
|
||||||
if (err) return dfd.reject(err);
|
if (err) return dfd.reject(err);
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ _.extend(PostgresClient.prototype, base.protoProps, {
|
|||||||
if (debug) base.debug(builder, conn);
|
if (debug) base.debug(builder, conn);
|
||||||
|
|
||||||
// Call the querystring and then release the client
|
// Call the querystring and then release the client
|
||||||
conn.query(builder.sql, builder.bindings, function (err, resp) {
|
conn.query(_.extend({text: builder.sql}, builder.opts), builder.bindings, function (err, resp) {
|
||||||
if (err) return dfd.reject(err);
|
if (err) return dfd.reject(err);
|
||||||
resp || (resp = {});
|
resp || (resp = {});
|
||||||
|
|
||||||
|
|||||||
@ -86,6 +86,7 @@ define(function(require, exports) {
|
|||||||
this.orders = [];
|
this.orders = [];
|
||||||
this.columns = [];
|
this.columns = [];
|
||||||
this.bindings = [];
|
this.bindings = [];
|
||||||
|
this.opts = [];
|
||||||
this.isDistinct = false;
|
this.isDistinct = false;
|
||||||
this.isReturning = false;
|
this.isReturning = false;
|
||||||
},
|
},
|
||||||
@ -401,6 +402,11 @@ define(function(require, exports) {
|
|||||||
return this._setType('delete');
|
return this._setType('delete');
|
||||||
},
|
},
|
||||||
|
|
||||||
|
option: function(opts) {
|
||||||
|
this.opts = _.extend(this.opts, opts);
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
// Truncate
|
// Truncate
|
||||||
truncate: function() {
|
truncate: function() {
|
||||||
return this._setType('truncate');
|
return this._setType('truncate');
|
||||||
|
|||||||
@ -107,6 +107,7 @@ define(function(require, exports) {
|
|||||||
|
|
||||||
// Prep the SQL associated with the this.
|
// Prep the SQL associated with the this.
|
||||||
this.sql = this.toSql();
|
this.sql = this.toSql();
|
||||||
|
this.opts = this.opts;
|
||||||
this.bindings = this._cleanBindings();
|
this.bindings = this._cleanBindings();
|
||||||
if (!_.isArray(this.sql)) this.sql = [this.sql];
|
if (!_.isArray(this.sql)) this.sql = [this.sql];
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@ define(function(require, exports) {
|
|||||||
var Raw = function(sql, bindings) {
|
var Raw = function(sql, bindings) {
|
||||||
this.bindings = (!_.isArray(bindings) ? (bindings ? [bindings] : []) : bindings);
|
this.bindings = (!_.isArray(bindings) ? (bindings ? [bindings] : []) : bindings);
|
||||||
this.sql = sql;
|
this.sql = sql;
|
||||||
|
this.opts = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
_.extend(Raw.prototype, {
|
_.extend(Raw.prototype, {
|
||||||
|
|||||||
@ -43,6 +43,18 @@ module.exports = function(Knex, dbName, resolver) {
|
|||||||
.select(['accounts.email as e1', 'a2.email as e2'])
|
.select(['accounts.email as e1', 'a2.email as e2'])
|
||||||
.then(resolver(ok), ok);
|
.then(resolver(ok), ok);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('supports joins with overlapping column names', function(ok) {
|
||||||
|
var blah = Knex('accounts as a1')
|
||||||
|
.join('accounts as a2', function() {
|
||||||
|
this.on('a1.email', '<>', 'a2.email');
|
||||||
|
}, 'left')
|
||||||
|
.select(['a1.email', 'a2.email'])
|
||||||
|
.where(Knex.Raw('a1.id = 1'))
|
||||||
|
.option({ nestTables: true, rowMode: 'array' })
|
||||||
|
.limit(2)
|
||||||
|
.then(resolver(ok), ok);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -672,6 +672,20 @@ module.exports = {
|
|||||||
bindings: []
|
bindings: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'joins.6': {
|
||||||
|
mysql: {
|
||||||
|
sql: ['select `a1`.`email`, `a2`.`email` from `accounts` as `a1` left join `accounts` as `a2` on `a1`.`email` <> `a2`.`email` where a1.id = 1 limit 2'],
|
||||||
|
bindings: []
|
||||||
|
},
|
||||||
|
postgres: {
|
||||||
|
sql: ['select "a1"."email", "a2"."email" from "accounts" as "a1" left join "accounts" as "a2" on "a1"."email" <> "a2"."email" where a1.id = 1 limit 2'],
|
||||||
|
bindings: []
|
||||||
|
},
|
||||||
|
sqlite3: {
|
||||||
|
sql: ['select "a1"."email", "a2"."email" from "accounts" as "a1" left join "accounts" as "a2" on "a1"."email" <> "a2"."email" where a1.id = 1 limit 2'],
|
||||||
|
bindings: []
|
||||||
|
}
|
||||||
|
},
|
||||||
'deletes.1': {
|
'deletes.1': {
|
||||||
mysql: {
|
mysql: {
|
||||||
sql: ['delete from `accounts` where `email` = ?'],
|
sql: ['delete from `accounts` where `email` = ?'],
|
||||||
@ -3184,6 +3198,35 @@ module.exports = {
|
|||||||
e2: 'test5@example.com'
|
e2: 'test5@example.com'
|
||||||
}]
|
}]
|
||||||
},
|
},
|
||||||
|
'joins.6': {
|
||||||
|
mysql: [{
|
||||||
|
a1: {
|
||||||
|
email: 'test100@example.com'
|
||||||
|
},
|
||||||
|
a2: {
|
||||||
|
email: 'test2@example.com'
|
||||||
|
}
|
||||||
|
},{
|
||||||
|
a1: {
|
||||||
|
email: 'test100@example.com'
|
||||||
|
},
|
||||||
|
a2: {
|
||||||
|
email: 'test3@example.com'
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
postgres: [{
|
||||||
|
0: 'test100@example.com',
|
||||||
|
1: 'test2@example.com'
|
||||||
|
},{
|
||||||
|
0: 'test100@example.com',
|
||||||
|
1: 'test3@example.com'
|
||||||
|
}],
|
||||||
|
sqlite3: [{
|
||||||
|
email: 'test2@example.com'
|
||||||
|
},{
|
||||||
|
email: 'test3@example.com'
|
||||||
|
}]
|
||||||
|
},
|
||||||
'deletes.1': {
|
'deletes.1': {
|
||||||
mysql: 1,
|
mysql: 1,
|
||||||
postgres: 1,
|
postgres: 1,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user