q. A simple case would be where q is looking for
[?e :some/attrib ?v], then you just look for anytime any transaction with
:some/attriboccurs. The functions for figuring this out are in
src/posh/lib/q_analyze.cljc. The simpler version is called
pattern-from-eav--old, which is more easy to understand but generates patterns that are much less specific than the query. ("eav" is an entity-attrib-value rule). The more complex function is called
pattern-from-eavand unfortunately it worked really well until we found out it missed one common case, which I couldn't figure out how to fix, so posh is just using the simpler one for now.
:datomsflag you'll get a list of all the relevant datoms for a query, which you could run on the datomic db and then just send all the datoms over to datascript. How the
:datomsthing works, if I remember correctly, is the original query is changed so that instead of returning the stuff specified in the
qquery, it just returns all possible combinations of the
?query vars in the
:whereeav rules. Then to construct the datoms, it goes through all query eav rules and replaces all the
?vars with every possible combos.
qon the set of possible vars (not the whole db), so it should still be pretty fast
pullis more efficient than
q, so you might be able to get away with a large ui if you use mostly pulls.
hey @mpdairy first of all thanks for the great work that you have done with posh !! that is definitely the missing piece in reactive programming that I was looking for.
I just started working with it and got some errors using
pull. I checked the source code and
Cursive showed me that there are three functions used with less than their declared arguments; namely
posh.plugin-base/missing-pull-resultline 20 and 22
object[TypeError TypeError: null is not an object (evaluating 'new cljs.core.Keyword(null,"conn?","conn?",167224275).cljs$core$IFn$_invoke$arity$1(dcfg).call')] posh$plugin_base$get_db cljs$core$IFn$_invoke$arity$5 posh$plugin_base$pull cljs$core$IFn$_invoke$arity$4 G__10589__3 G__10589 eval code eval@[native code] figwheel$client$utils$eval_helper
Since I just started working with posh, I am not sure if this is a problem with my configuration or an actual bug in the implementation, so I wanted to ask you first. I am happy to submit a PR to fix that if you want.
travis cifor one of my projects. I didnt setup the auto deploy myself but I think that the file is pretty self-explanatory. The only things that you would need to change are the your encripted env vars and your release config in
project.clj. Links below
(reg-query-sub :cur-form-def '[:find (pull ?e [*]) :in $ :where [_ :designer/cur-form-id ?id] [?e :form/id ?id] ])
[:code (pr-str @conn)]inside my root component re-render on every db change?
debug-connhere will work. Haven’t really stress tested it though might just be getting lucky. If you want to be more efficient you could rig up a
listen!on the conn.