forked from uwescience/raco
/
hellodatalogworld.py
48 lines (37 loc) · 1.19 KB
/
hellodatalogworld.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from raco.datalog.grammar import parse
from raco.scheme import Scheme
from raco.catalog import ASCIIFile
from raco.language import PythonAlgebra, PseudoCodeAlgebra, CCAlgebra, MyriaAlgebra#, ProtobufAlgebra
from raco.algebra import LogicalAlgebra
from raco.compile import compile, optimize, common_subexpression_elimination, showids
query = """
A(x) :- R(x,3)
A(x) :- R(x,y), A(y)
"""
# Now parse it
parsedprogram = parse(query)
exprs = parsedprogram.toRA()
# generate an RA expression
#rules = parsedprogram.rules
#ra = onlyrule.toRA(parsedprogram)
#print exprs
ra = exprs
print query
print ra
print "//-------"
# optimize applies a set of rules to translate a source
# expression to a target expression
#result = optimize(ra, target=PseudoCodeAlgebra, source=LogicalAlgebra)
#result = optimize(ra, target=ProtobufAlgebra, source=LogicalAlgebra)
result = optimize(ra, target=MyriaAlgebra, source=LogicalAlgebra)
print result
#comment(result)
physicalplan = result
#physicalplan = common_subexpression_elimination(result)
#comment(physicalplan)
#for x in showids(physicalplan):
# print x
# generate code in the target language
#print compile(physicalplan)
#compile(physicalplan)
print compile(physicalplan)