query :entity-record-type broken
Closed this issue · 2 comments
I found no way to actually restrict the query to an entity-record-type within one kind.
Given
(ds/defentity Article [title, body, created, updated] :kind "Post")
(ds/defentity Comment [parent, index, author, link, body, created, updated] :kind "Post")
2 Articles stored and no Comments (and 2 other instances or another entity/kind):
tlog.models=> (ds/query :kind "Post" :count-only? true)
2
tlog.models=> (ds/query :kind "Post" :entity-record-type Comment :count-only? true)
2
tlog.models=> (ds/query :kind "Post" :entity-record-type Article :count-only? true)
2
tlog.models=> (ds/query :entity-record-type Comment :count-only? true)
4
tlog.models=> (ds/query :entity-record-type Article :count-only? true)
4
tlog.models=> (ds/query :kind Article :entity-record-type Article :count-only? true)
0
tlog.models=> (ds/query :kind "Article" :entity-record-type Article :count-only? true)
0
tlog.models=> (ds/query :kind "Article" :entity-record-type "Article" :count-only? true)
0
I guess the workaround will be filtering for a non-nil property present in one type, but not the other.
Right, that isn't supported. :kind refers specifically to the "kind of entity stored in the datastore." You can think of "kinds" as "tables." If two entity types share a "kind," they go into the same table. This is just how App Engine behaves. By default, omitting the kind should treat the entity type as the kind (this is a behavior provided by appengine-magic). :entity-record-type is just provided so when you query stuff out, it goes into the correct record type.
In your example, I'm not sure why Article and Comment have the same :kind.
Ah, I thought :entity-record-type would be about what is being queried for, too. So I though :kind "Post" for Article and Comment would allow me to very easily query among either or both.
Thanks for clearing this up!