Merge pull request #446 from realm/sk-parser-fix
Allow key paths to start with "not" in queries
This commit is contained in:
commit
c947bb946f
|
@ -16,6 +16,7 @@
|
|||
* Fix a memory leak caused by constructing a Realm instance of an already opened Realm.
|
||||
* Fix for better supporting hot module reloading.
|
||||
* Fix for some warnings when using `ListView` with React Native 0.25+
|
||||
* Fix for queries that use a keypath starting with "not".
|
||||
|
||||
0.12.0 Release notes (2016-5-4)
|
||||
=============================================================
|
||||
|
|
|
@ -24,6 +24,9 @@
|
|||
#include <pegtl/analyze.hh>
|
||||
#include <pegtl/trace.hh>
|
||||
|
||||
// String operators (e.g. AND, OR, NOT) can't be followed by [A-z0-9_].
|
||||
#define string_operator_t(s) seq< pegtl_istring_t(s), not_at< identifier_other > >
|
||||
|
||||
using namespace pegtl;
|
||||
|
||||
namespace realm {
|
||||
|
@ -93,11 +96,11 @@ struct group_pred : if_must< one< '(' >, pad< pred, blank >, one< ')' > > {};
|
|||
struct true_pred : pegtl_istring_t("truepredicate") {};
|
||||
struct false_pred : pegtl_istring_t("falsepredicate") {};
|
||||
|
||||
struct not_pre : seq< sor< one< '!' >, pegtl_istring_t("not") > > {};
|
||||
struct not_pre : seq< sor< one< '!' >, string_operator_t("not") > > {};
|
||||
struct atom_pred : seq< opt< not_pre >, pad< sor< group_pred, true_pred, false_pred, comparison_pred >, blank > > {};
|
||||
|
||||
struct and_op : pad< sor< two< '&' >, pegtl_istring_t("and") >, blank > {};
|
||||
struct or_op : pad< sor< two< '|' >, pegtl_istring_t("or") >, blank > {};
|
||||
struct and_op : pad< sor< two< '&' >, string_operator_t("and") >, blank > {};
|
||||
struct or_op : pad< sor< two< '|' >, string_operator_t("or") >, blank > {};
|
||||
|
||||
struct or_ext : if_must< or_op, pred > {};
|
||||
struct and_ext : if_must< and_op, pred > {};
|
||||
|
|
|
@ -66,6 +66,9 @@ static std::vector<std::string> valid_queries = {
|
|||
"!(0=0)",
|
||||
"! (0=0)",
|
||||
"NOT0=0", // keypath NOT0
|
||||
"NOT0.a=0", // keypath NOT0
|
||||
"NOT0a.b=0", // keypath NOT0a
|
||||
"not-1=1",
|
||||
"not 0=0",
|
||||
"NOT(0=0)",
|
||||
"not (0=0)",
|
||||
|
@ -121,6 +124,7 @@ static std::vector<std::string> invalid_queries = {
|
|||
"(0=0))",
|
||||
"! =0",
|
||||
"NOTNOT(0=0)",
|
||||
"not.a=0",
|
||||
"(!!0=0)",
|
||||
"0=0 !",
|
||||
|
||||
|
@ -130,7 +134,10 @@ static std::vector<std::string> invalid_queries = {
|
|||
"a==a &| a==a",
|
||||
"a==a && OR a==a",
|
||||
"a==aORa==a",
|
||||
//"a=1ANDNOT b=2",
|
||||
"a==a ORa==a",
|
||||
"a==a AND==a",
|
||||
"a==a ANDa==a",
|
||||
"a=1ANDNOT b=2",
|
||||
|
||||
"truepredicate &&",
|
||||
"truepredicate & truepredicate",
|
||||
|
|
Loading…
Reference in New Issue