From 22ca94e36eb9c2d92769a8081e60b6bdce2463d1 Mon Sep 17 00:00:00 2001 From: Ari Lazier Date: Thu, 19 Nov 2015 15:17:57 -0800 Subject: [PATCH] test and bug fixes for data queries --- src/object-store/parser/query_builder.cpp | 20 +++++++++--------- tests/QueryTests.js | 4 ++++ tests/queryTests.json | 25 ++++++++++++++++++++++- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/object-store/parser/query_builder.cpp b/src/object-store/parser/query_builder.cpp index 353588e8..59425aaa 100644 --- a/src/object-store/parser/query_builder.cpp +++ b/src/object-store/parser/query_builder.cpp @@ -102,7 +102,7 @@ void add_bool_constraint_to_query(Query &query, Predicate::Operator operatorType void add_string_constraint_to_query(Query &query, Predicate::Operator op, Columns &&column, - std::string value) { + std::string &&value) { bool case_sensitive = true; switch (op) { case Predicate::Operator::BeginsWith: @@ -127,7 +127,7 @@ void add_string_constraint_to_query(Query &query, void add_string_constraint_to_query(realm::Query &query, Predicate::Operator op, - std::string value, + std::string &&value, Columns &&column) { bool case_sensitive = true; switch (op) { @@ -145,22 +145,22 @@ void add_string_constraint_to_query(realm::Query &query, void add_binary_constraint_to_query(Query &query, Predicate::Operator op, Columns &&column, - std::string value) { + std::string &&value) { switch (op) { case Predicate::Operator::BeginsWith: - query.begins_with(column.m_column, value); + query.begins_with(column.m_column, BinaryData(value)); break; case Predicate::Operator::EndsWith: - query.ends_with(column.m_column, value); + query.ends_with(column.m_column, BinaryData(value)); break; case Predicate::Operator::Contains: - query.contains(column.m_column, value); + query.contains(column.m_column, BinaryData(value)); break; case Predicate::Operator::Equal: - query.equal(column.m_column, value); + query.equal(column.m_column, BinaryData(value)); break; case Predicate::Operator::NotEqual: - query.not_equal(column.m_column, value); + query.not_equal(column.m_column, BinaryData(value)); break; default: throw std::runtime_error("Unsupported operator for binary queries."); @@ -173,10 +173,10 @@ void add_binary_constraint_to_query(realm::Query &query, Columns &&column) { switch (op) { case Predicate::Operator::Equal: - query.equal(column.m_column, value); + query.equal(column.m_column, BinaryData(value)); break; case Predicate::Operator::NotEqual: - query.not_equal(column.m_column, value); + query.not_equal(column.m_column, BinaryData(value)); break; default: throw std::runtime_error("Substring comparison not supported for keypath substrings."); diff --git a/tests/QueryTests.js b/tests/QueryTests.js index bb6932a4..3bf35e70 100644 --- a/tests/QueryTests.js +++ b/tests/QueryTests.js @@ -13,6 +13,7 @@ var testCases = require('./queryTests.json'); var typeConverters = {}; typeConverters[Realm.Types.DATE] = function(value) { return new Date(value); }; +typeConverters[Realm.Types.DATA] = function(value) { return new Uint8Array(value); }; function runQuerySuite(suite) { var realm = new Realm({schema: suite.schema}); @@ -84,6 +85,9 @@ module.exports = BaseTest.extend({ testStringQueries: function() { runQuerySuite(testCases.stringTests); }, + testBinaryQueries: function() { + runQuerySuite(testCases.binaryTests); + }, }); diff --git a/tests/queryTests.json b/tests/queryTests.json index e1272cc3..30b3cd01 100644 --- a/tests/queryTests.json +++ b/tests/queryTests.json @@ -202,6 +202,29 @@ ["Disabled", "QueryCount", 4, "StringObject", "stringCol ENDSWITH[c] 'c'"], ["Disabled", "QueryCount", 2, "StringObject", "stringCol CONTAINS[c] 'B'"] ] +}, + +"binaryTests" : { + "schema" : [{ + "name": "BinaryObject", + "properties": [{ "name": "binaryCol", "type": "data" }] + }], + "objects": [ + { "type": "BinaryObject", "value": [[1, 100, 233, 255, 0]] }, + { "type": "BinaryObject", "value": [[1, 100]] }, + { "type": "BinaryObject", "value": [[100]] }, + { "type": "BinaryObject", "value": [[]] }, + { "type": "BinaryObject", "value": [[255, 0]] } + ], + "tests": [ + ["QueryCount", 1, "BinaryObject", "binaryCol == $0", [1, 0]], + ["QueryCount", 1, "BinaryObject", "$0 == binaryCol", [2, 0]], + ["QueryCount", 4, "BinaryObject", "binaryCol != $0", [0, 0]], + ["QueryCount", 1, "BinaryObject", "binaryCol BEGINSWITH $0", [0, 0]], + ["QueryCount", 2, "BinaryObject", "binaryCol BEGINSWITH $0", [1, 0]], + ["QueryCount", 2, "BinaryObject", "binaryCol ENDSWITH $0", [4, 0]], + ["QueryCount", 3, "BinaryObject", "binaryCol CONTAINS $0", [2, 0]] + ] } -} \ No newline at end of file +}