uwescience / raco

Compilation and rule-based optimization framework for relational algebra. Raco is the language, optimization, and query translation layer for the Myria project.
Other
72 stars 19 forks source link

Error in recursive Datalog query #571

Open senderista opened 7 years ago

senderista commented 7 years ago

Opened by @akashsa (https://github.com/uwescience/myria-web/issues/318)

When I try to generate a JSON file with the following datalog query i get an error.

sg(X,Y) :- tiny_graph(1,X), tiny_graph(1,Y);
sg(X,Y) :- tiny_graph(A,X), sg(A,B), tiny_graph(B,Y);

The error seems to be due to recursion in second rule: sg(X,Y) :- tiny_graph(A,X), sg(A,B), tiny_graph(B,Y);

Traceback (most recent call last):
File "/opt/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/usr/local/myria-web/appengine/myria_web_main.py", line 467, in get
query, language, self.app.connection, push_sql=push_sql))
File "/usr/local/myria-web/appengine/myria_web_main.py", line 118, in get_logical_plan
return get_plan(query, language, 'logical', connection, push_sql=push_sql)
File "/usr/local/myria-web/appengine/myria_web_main.py", line 86, in get_plan
dlog.fromDatalog(query)
File "/usr/local/myria-web/appengine/raco/init.py", line 19, in fromDatalog
self.logicalplan = self.parsed.toRA()
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 79, in toRA
for r in rules])])
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 89, in compileIDB
plans = [r.toRA(self) for r in rules]
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 374, in toRA
plan = joinsequence.makePlan(conditions, program)
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 125, in makePlan
for t in self.terms]
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 800, in makeLeaf
plan = program.compileIDB(self.name)
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 89, in compileIDB
plans = [r.toRA(self) for r in rules]
File "/usr/local/myria-web/appengine/raco/datalog/model.py", line 295, in toRA
self.fixpoint = algebra.Fixpoint()
TypeError: Can't instantiate abstract class Fixpoint with abstract methods partitioning