Skip to content

Commit

Permalink
Updated mquery version, removed sort hacks
Browse files Browse the repository at this point in the history
Updated to new mquery version which gets rid of the terrible internal
sort syntax.
  • Loading branch information
ebensing authored and aheckmann committed Aug 19, 2013
1 parent 74f0d4d commit ddb14ba
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 69 deletions.
20 changes: 1 addition & 19 deletions lib/query.js
Expand Up @@ -139,15 +139,7 @@ Query.prototype.toConstructor = function toConstructor () {

p.options = {};

// this is an ugly hack to deal with the terrible way that sort information
// is internally stored. [[field, 1]] syntax is causing trouble when we are
// calling `sort` via `apply` and the arguments are getting passed
// incorrectly
var opts = utils.clone(this.options);
if (opts.sort) {
opts.sort = [opts.sort];
}
p.setOptions(opts);
p.setOptions(this.options);

p.op = this.op;
p._conditions = utils.clone(this._conditions);
Expand Down Expand Up @@ -849,16 +841,6 @@ Query.prototype.setOptions = function (options, overwrite) {
return this;
}

// more terrible hacks to deal with the awful storage format of `sort`!
// This mainly comes up due to weird stuff with `toConstructor()`
if (options.sort) {
if (Array.isArray(options.sort)) {
if (Array.isArray(options.sort[0]) && !Array.isArray(options.sort[0][0])) {
options.sort = [options.sort];
}
}
}

return Query.base.setOptions.call(this, options);
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -13,7 +13,7 @@
, "mpromise": "0.3.0"
, "mpath": "0.1.1"
, "regexp-clone": "0.0.1"
, "mquery" : "0.2.4"
, "mquery" : "0.2.6"
}
, "devDependencies": {
"mocha": "1.12.0"
Expand Down
32 changes: 12 additions & 20 deletions test/model.findAndRemoveOne.test.js
Expand Up @@ -304,18 +304,14 @@ describe('model: findByIdAndRemove:', function(){
, query;

query = M.findByIdAndRemove(_id, { sort: 'author -title' });
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);

query = M.findOneAndRemove({}, { sort: 'author -title' });
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);
done();
})

Expand All @@ -330,18 +326,14 @@ describe('model: findByIdAndRemove:', function(){
, query;

query = M.findByIdAndRemove(_id, { sort: { author: 1, title: -1 }});
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);

query = M.findOneAndRemove(_id, { sort: { author: 1, title: -1 }});
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);
done();
});

Expand Down
32 changes: 12 additions & 20 deletions test/model.findAndUpdateOne.test.js
Expand Up @@ -669,18 +669,14 @@ describe('model: findByIdAndUpdate:', function(){
, query;

query = M.findByIdAndUpdate(_id, { $set: { date: now }}, { sort: 'author -title' });
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);

query = M.findOneAndUpdate({}, { $set: { date: now }}, { sort: 'author -title' });
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);
done();
})

Expand All @@ -695,18 +691,14 @@ describe('model: findByIdAndUpdate:', function(){
, query;

query = M.findByIdAndUpdate(_id, { $set: { date: now }}, { sort: { author: 1, title: -1 }});
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);

query = M.findOneAndUpdate(_id, { $set: { date: now }}, { sort: { author: 1, title: -1 }});
assert.equal(2, query.options.sort.length);
assert.equal('author', query.options.sort[0][0]);
assert.equal(1, query.options.sort[0][1]);
assert.equal('title', query.options.sort[1][0]);
assert.equal(-1, query.options.sort[1][1]);
assert.equal(2, Object.keys(query.options.sort).length);
assert.equal(1, query.options.sort.author);
assert.equal(-1, query.options.sort.title);
done();
});

Expand Down
12 changes: 5 additions & 7 deletions test/query.test.js
Expand Up @@ -676,10 +676,10 @@ describe('Query', function(){
it('works', function(done){
var query = new Query({}, {}, null, p1.collection);
query.sort('a -c b');
assert.deepEqual(query.options.sort, [['a', 1], ['c', -1], ['b', 1]]);
assert.deepEqual(query.options.sort, {'a': 1 , 'c': -1,'b': 1});
query = new Query({}, {}, null, p1.collection);
query.sort({'a': 1, 'c': -1, 'b': 'asc', e: 'descending', f: 'ascending'});
assert.deepEqual(query.options.sort, [['a', 1], ['c', -1], ['b', 'asc'], ['e', 'descending'], ['f', 'ascending']]);
assert.deepEqual(query.options.sort, {'a': 1, 'c': -1, 'b': 1, 'e': -1, 'f': 1});
query = new Query({}, {}, null, p1.collection);
var e;

Expand Down Expand Up @@ -1367,11 +1367,9 @@ describe('Query', function(){
assert.equal(q.options.batchSize, 10);
assert.equal(q.options.limit, 4);
assert.equal(q.options.skip, 3);
assert.equal(q.options.sort.length, 2);
assert.equal(q.options.sort[0][0], 'blah');
assert.equal(q.options.sort[0][1], -1);
assert.equal(q.options.sort[1][0], 'woot');
assert.equal(q.options.sort[1][1], -1);
assert.equal(Object.keys(q.options.sort).length, 2);
assert.equal(q.options.sort.blah, -1);
assert.equal(q.options.sort.woot, -1);
assert.equal(q.options.hint.index1, 1);
assert.equal(q.options.hint.index2, -1);
assert.equal(q.options.readPreference.mode, 'secondary');
Expand Down
4 changes: 2 additions & 2 deletions test/query.toconstructor.test.js
Expand Up @@ -26,7 +26,7 @@ var cName = 'Comment' + random();
mongoose.model(prodName, Product);
mongoose.model(cName, Comment);

describe('Query: ', function(){
describe('Query:', function(){
describe('toConstructor', function () {
it('creates a query', function (done) {
var db = start();
Expand Down Expand Up @@ -111,7 +111,7 @@ describe('Query: ', function(){

var nq = prodC(null, { limit : 3 });
assert.deepEqual(nq._mongooseOptions, { lean : true, limit : 3 });
assert.deepEqual(nq.options, { sort : [['title', 1]], limit : 3 });
assert.deepEqual(nq.options, { sort : { 'title': 1 }, limit : 3 });
done();
})

Expand Down

0 comments on commit ddb14ba

Please sign in to comment.