From a97d2e5764cc1e3f2678942c682399aba2b55159 Mon Sep 17 00:00:00 2001 From: johnlim Date: Tue, 25 Oct 2016 17:45:48 +0800 Subject: [PATCH] Should allow an equalTo query with a 'null' value so that the client is able to query for data that does not have a specific key. --- firebase-query.html | 14 +++++++++----- test/firebase-query.html | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/firebase-query.html b/firebase-query.html index 2edaf32..beef1cd 100644 --- a/firebase-query.html +++ b/firebase-query.html @@ -69,7 +69,7 @@ */ query: { type: Object, - computed: '__computeQuery(ref, orderByChild, orderByValue, limitToFirst, limitToLast, startAt, endAt, equalTo)', + computed: '__computeQuery(ref, orderByChild, orderByValue, limitToFirst, limitToLast, startAt, endAt, equalTo, equalToNull)', observer: '__queryChanged' }, @@ -127,7 +127,11 @@ type: Object, value: null }, - + equalToNull: { + type: Boolean, + reflectToAttribute: true, + value: false + }, /** * The maximum number of nodes to include in the query. * @@ -240,7 +244,7 @@ } }, - __computeQuery: function(ref, orderByChild, orderByValue, limitToFirst, limitToLast, startAt, endAt, equalTo) { + __computeQuery: function(ref, orderByChild, orderByValue, limitToFirst, limitToLast, startAt, endAt, equalTo, equalToNull) { if (ref == null) { return null; } @@ -269,7 +273,7 @@ query = query.endAt(endAt); } - if (equalTo !== null) { + if (equalTo !== null || equalToNull) { query = query.equalTo(equalTo); } @@ -375,7 +379,7 @@ var targetIndex = previousChildKey ? this.__indexFromKey(previousChildKey) : 0; this._log('Firebase child_moved:', key, value, - 'to index', targetIndex); + 'to index', targetIndex); if (value) { var index = this.__indexFromKey(key); diff --git a/test/firebase-query.html b/test/firebase-query.html index d946ff0..ca81347 100644 --- a/test/firebase-query.html +++ b/test/firebase-query.html @@ -280,6 +280,21 @@ expect(query.data.length).to.be.eql(2); }); }); + + test('should allow an equalTo query with a `null` value to enable query for data without a specific key', function() { + query.orderByChild = 'thing'; + query.equalTo = null; + query.equalToNull = true; + + return setFirebaseValue(query.path, { + a: {thing: true}, + b: {thing: false}, + c: {nothing: false} + }).then(function() { + expect(query.data[0].$key).to.be.eql('c'); + expect(query.data.length).to.be.eql(1); + }); + }); }); suite('instance isolation', function() {