ArcadeData / arcadedb

ArcadeDB Multi-Model Database, one DBMS that supports SQL, Cypher, Gremlin, HTTP/JSON, MongoDB and Redis. ArcadeDB is a conceptual fork of OrientDB, the first Multi-Model DBMS. ArcadeDB supports Vector Embeddings.
https://arcadedb.com
Apache License 2.0
469 stars 57 forks source link

Can i have whole record as a json in select query and having condition on referenced table as well? #1629

Open ashvin-kumbhani opened 3 weeks ago

ashvin-kumbhani commented 3 weeks ago

ArcadeDB Version:

24.1.1

OS and JDK Version:

Linux 6.5.0-1014-gcp - OpenJDK 64-Bit Server VM 11.0.22 (Temurin-11.0.22+7)

Expected behavior

To have all the properties of linked record in JSON format and to filter multiple linked records with where clause on one property of linked bucket.

Actual behavior

When we try to filter linked records with dot operator from LIST property, it simply doesn’t work without giving any error.

SQL query to produce with schema

query : select hasLocations.city from Users

*which gives all the cities associated with the linked location record. but I want to fetch all properties of Locations and I can not find any method for that.

Steps to reproduce

gramian commented 3 weeks ago

Hi, with respect to the query: did you already try something like

SELECT hasLocation.transform('asRecord') FROM Users

I haven't tested this, but it should apply the asRecord converter method to each element in the hasLocations property and thus return a list of documents.

ashvin-kumbhani commented 3 weeks ago

Hi, with respect to the query: did you already try something like

SELECT hasLocation.transform('asRecord') FROM Users

I haven't tested this, but it should apply the asRecord converter method to each element in the hasLocations property and thus return a list of documents.

this can work, however is there any way to have conditions on where clause for example SELECT hasLocation.transform('asRecord') FROM Users WHERE hasLocations.is_default = true

gramian commented 3 weeks ago

To be able to help with the filter you need to provide the error and stacktrace.

ashvin-kumbhani commented 3 weeks ago

SELECT hasLocation.transform('asRecord') FROM Users WHERE hasLocations.is_default = true

I am not getting any errors, receiving simply null records. The reason query is not able to filter because of hasLocation is a list and hasLocation.is_default will not get any value for filter. So I wanted to know about any other way for filtering linked records

ashvin-kumbhani commented 3 weeks ago

also it will be helpful to get preferred properties in hasLocation.transform('asRecord') instead of all including @rid, type etc

lvca commented 3 weeks ago

You can flatten the list in a sub query and then apply the filters you like:

SELECT FROM (
  SELECT expand( hasLocation ) FROM Users
) WHERE is_default = true