test and bug fixes for data queries

This commit is contained in:
Ari Lazier 2015-11-19 15:17:57 -08:00
parent 3a9137fa08
commit 22ca94e36e
3 changed files with 38 additions and 11 deletions

View File

@ -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<String> &&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<String> &&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<Binary> &&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<Binary> &&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.");

View File

@ -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);
},
});

View File

@ -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]]
]
}
}