realm-java icon indicating copy to clipboard operation
realm-java copied to clipboard

Array of Primitives: Support queries

Open cmelchior opened this issue 7 years ago • 15 comments

Split from https://github.com/realm/realm-java/pull/5031

We need to add support for arrays of values to RealmQuery. Based on API discussions we don't want to add a ton of extra methods, so instead we are going to use the empty field name "" when querying arrays of primitives.

E.g

public class Person extends RealmObject {
  public RealmList<String> names;
}

// Query list in object
RealmResults<Person> results =  realm.where(Person.class).equalTo("names", "John").findAll();

This also include support for RealmList.min()/max()/average()/sum()/minDate()/maxDate() which depends on the query system

Out of scope for now

// Query list directly
Person p = getPerson();
RealmResults<String> results = p.names.where().like("", "Jo*").findAll();

cmelchior avatar Oct 01 '17 09:10 cmelchior

I actually think

// Query list in object
RealmResults<Person> results =  realm.where(Person.class).equalTo("names", "John").findAll();

has a higher importance than the others, so that you can replace RealmString link queries with it.

Zhuinden avatar Oct 05 '17 13:10 Zhuinden

Yes. No doubt about that

cmelchior avatar Oct 05 '17 13:10 cmelchior

Any progress/updates on this? I am eagerly waiting for this feature to support the primitive list from my Wordpress API the native way without a wrapper. :)

vivekkiran avatar Dec 14 '17 06:12 vivekkiran

Agreed, I was hoping for end of 2017, but maybe this year :smile:

Surprised it's blocked, I thought subtable query does this.

Zhuinden avatar Jan 02 '18 01:01 Zhuinden

+1, I have to use .findAll() and filter in java :(

mgohin avatar Apr 27 '18 13:04 mgohin

@mgohin another option of course is to map the list into a single string field with some convention like |value1|value2|value3| and then contains("flatList", "|${searchValue}|")

But that's lame that we still have to do that, i agree

Zhuinden avatar Apr 27 '18 14:04 Zhuinden

+1

amaslanka avatar Jan 23 '19 17:01 amaslanka

Hi, Any update on this much needed feature? It's 2019 and I don't think using a wrapper seems agreeable anymore. If anyone has a workaround apart from flatlists, I would love to learn!

aritrobanerjee93 avatar Jul 25 '19 12:07 aritrobanerjee93

Hi @Zhuinden

Any updates for this or what is the best workaround that u suggest for this

ismdcf avatar Nov 08 '19 14:11 ismdcf

It's something we expect to prioritize "soonish" - but we are currently prioritizing getting Core6 tested, integrated and rolled out. I know that doesn't say much in terms of timeline, but it's unlikely to happen on this side of New Year.

bmunkholm avatar Nov 08 '19 14:11 bmunkholm

@bmunkholm Can you suggest a workaround for this other than writing a custom deserializer which we removed after the introduction of primitive data realm list

ismdcf avatar Nov 08 '19 14:11 ismdcf

@ismdcf I've already posted the workaround, as unfortunate as it is: https://github.com/realm/realm-java/issues/5361#issuecomment-384979058

For Realm's roadmap, take a look at https://www.mongodb.com/realm#roadmap

Estimated January 2020 through July 2020

Realm Database and Realm Cloud

After releasing Realm Database (Core) 6.0, we’ll be able to start building exciting new functionality that we’ve heard requested from the Realm community.

In Realm Database 6.1 and 6.2 expect to see features like:

  • Support for embedded objects, dictionaries, and mixed types in the Realm Schema: have more flexibility in how you map, store, and interact with your data so that you can build a highly performant app.

  • Support for Query Operators on Single-Typed Arrays: interact with arrays in Realm to run more powerful queries, meaning faster data processing and simpler code.

  • Realm sharing between apps: allow a device to share one Realm across multiple apps, making it simple to keep data consistent across a suite of apps regardless of connectivity.

So you should probably map them to a single String field with separators and expect the feature for July 2020.

The good old RealmList<RealmString> also works but I recommend against it.

Zhuinden avatar Nov 08 '19 14:11 Zhuinden

This has now been implemented in Core and ObjectStore, awaiting implementation here.

bmunkholm avatar May 13 '20 06:05 bmunkholm

➤ Claus Rørbech commented:

The currently used old syntax for queries does not support querying on primitive list elements. Filed this with core in RCORE-309.

RealmBot avatar Jul 03 '20 08:07 RealmBot

➤ Claus Rørbech commented:

The currently used old syntax for queries does not support querying on primitive list elements. Filed this with core in RCORE-309.

Since we have migrated to use the query parser API internally we could maybe revisit this 🤔

rorbech avatar Dec 06 '21 10:12 rorbech