Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cryptic list index out of range exception when pushing computations to postgres #533

Open
shrjain opened this issue Aug 14, 2016 · 1 comment
Assignees

Comments

@shrjain
Copy link

shrjain commented Aug 14, 2016

For the following query:
`k = scan(kmercntnorm_11_forward_Pkmer);
--kmers = select * from k;

------- original query
X = select a.sampleid as asample, b.sampleid as bsample,
case when a.norm_cnt < b.norm_cnt then a.norm_cnt else b.norm_cnt end as minv
from k a, k b
where a.kmer = b.kmer
and a.sampleid < b.sampleid;

Y = select asample, bsample, 1 - sum(minv) as BCdis
from X;
store(Y, BC);`

when push_sql is false, the query runs fine, but when push_sql is true, the compilation fails with the following trace:
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 504, in post
multiway_join=multiway_join, push_sql=push_sql)
File "/usr/local/myria-web/appengine/myria_web_main.py", line 124, in get_physical_plan
multiway_join=multiway_join, push_sql=push_sql)
File "/usr/local/myria-web/appengine/myria_web_main.py", line 110, in get_plan
push_sql=push_sql)
File "/usr/local/myria-web/appengine/raco/myrial/interpreter.py", line 451, in get_physical_plan
return self.get_physical_plan_for(target_phys_algebra, **kwargs)
File "/usr/local/myria-web/appengine/raco/myrial/interpreter.py", line 440, in get_physical_plan_for
return optimize(logical_plan, **kwargs)
File "/usr/local/myria-web/appengine/raco/compile.py", line 70, in optimize
return optimize_by_rules(expr, target.opt_rules(**kwargs))
File "/usr/local/myria-web/appengine/raco/compile.py", line 59, in optimize_by_rules
expr = recursiverule(expr)
File "/usr/local/myria-web/appengine/raco/compile.py", line 44, in recursiverule
newe = rule(e)
File "/usr/local/myria-web/appengine/raco/rules.py", line 31, in call
return self.fire(expr)
File "/usr/local/myria-web/appengine/raco/backends/myria/myria.py", line 1500, in fire
sql_plan = cat.get_sql(expr)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 185, in _get_unary_sql
input = self.get_sql(plan.input).alias("input")
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 247, in get_sql
return self._get_unary_sql(plan)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 190, in _get_unary_sql
cond = self._convert_expr(cols, plan.condition, input_sch)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 116, in _convert_expr
return self._convert_binary_expr(cols, expr, input_scheme)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 156, in _convert_binary_expr
right = self._convert_expr(cols, expr.right, input_scheme)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 110, in _convert_expr
return self._convert_attribute_ref(cols, expr, input_scheme)
File "/usr/local/myria-web/appengine/raco/backends/sql/catalog.py", line 133, in _convert_attribute_ref
return cols[expr.position]
IndexError: list index out of range

@bmyerz
Copy link
Member

bmyerz commented Aug 14, 2016

Looks like a bug in get_sql having to do with attribute indexes, perhaps after a join or after a projection. I would print out what the positions are as the plan is traversed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants