67 rdef = eschema.rdef(rschema) |
67 rdef = eschema.rdef(rschema) |
68 else: |
68 else: |
69 rdef = rschema.rdef(solution[rel.children[0].name], |
69 rdef = rschema.rdef(solution[rel.children[0].name], |
70 solution[rel.children[1].children[0].name]) |
70 solution[rel.children[1].children[0].name]) |
71 if not user.matching_groups(rdef.get_groups('read')): |
71 if not user.matching_groups(rdef.get_groups('read')): |
|
72 # XXX rqlexpr not allowed |
72 raise Unauthorized('read', rel.r_type) |
73 raise Unauthorized('read', rel.r_type) |
73 localchecks = {} |
74 localchecks = {} |
74 # iterate on defined_vars and not on solutions to ignore column aliases |
75 # iterate on defined_vars and not on solutions to ignore column aliases |
75 for varname in rqlst.defined_vars: |
76 for varname in rqlst.defined_vars: |
76 eschema = schema.eschema(solution[varname]) |
77 eschema = schema.eschema(solution[varname]) |
282 if not lcheckdef: |
283 if not lcheckdef: |
283 continue |
284 continue |
284 myrqlst = select.copy(solutions=lchecksolutions) |
285 myrqlst = select.copy(solutions=lchecksolutions) |
285 myunion.append(myrqlst) |
286 myunion.append(myrqlst) |
286 # in-place rewrite + annotation / simplification |
287 # in-place rewrite + annotation / simplification |
287 lcheckdef = [((varmap, 'X'), rqlexprs) |
288 lcheckdef = [((var, 'X'), rqlexprs) for var, rqlexprs in lcheckdef] |
288 for varmap, rqlexprs in lcheckdef] |
|
289 rewrite(myrqlst, lcheckdef, lchecksolutions, self.args) |
289 rewrite(myrqlst, lcheckdef, lchecksolutions, self.args) |
290 add_noinvariant(noinvariant, restricted, myrqlst, nbtrees) |
290 add_noinvariant(noinvariant, restricted, myrqlst, nbtrees) |
291 if () in localchecks: |
291 if () in localchecks: |
292 select.set_possible_types(localchecks[()]) |
292 select.set_possible_types(localchecks[()]) |
293 add_types_restriction(self.schema, select) |
293 add_types_restriction(self.schema, select) |