-
-
Notifications
You must be signed in to change notification settings - Fork 813
Description
I created this view: https://json-view-facet-bug-demo-j7hipcg4aq-uc.a.run.app/russian-ads-8dbda00/ads_with_targets
CREATE VIEW ads_with_targets as select ads.*, json_group_array(targets.name) as target_names from ads
join ad_targets on ad_targets.ad_id = ads.id
join targets on ad_targets.target_id = targets.id
group by ad_targets.ad_id
When I try to apply faceting by array it appears to work at first: https://json-view-facet-bug-demo-j7hipcg4aq-uc.a.run.app/russian-ads/ads_with_targets?_facet_array=target_names
But actually it's doing the wrong thing - the SQL for the facets uses rowid, but rowid is not present on views at all! These results are incorrect, and clicking to select a facet will fail to produce any rows: https://json-view-facet-bug-demo-j7hipcg4aq-uc.a.run.app/russian-ads/ads_with_targets?_facet_array=target_names&target_names__arraycontains=people_who_match%3Ainterests%3AAfrican-American+Civil+Rights+Movement+%281954%E2%80%9468%29
Here's the SQL it should be using when you select a facet (note that it does not use a rowid):
So we need to do something a lot smarter here. I'm not sure what the fix will look like, or even if it's feasible given that views don't have a rowid to hook into so the JSON faceting SQL may have to be completely rewritten.
datasette publish cloudrun \
russian-ads.db \
--name json-view-facet-bug-demo \
--branch master \
--extra-options "--config sql_time_limit_ms:5000 --config facet_time_limit_ms:5000"