コード例 #1
0
def _get_column_index(inputs, aliases, attribute):
    """
    Find the column index of for given attribute
    :param inputs: Input queries with schema used to match against
    :param aliases: An alias for each input for dotted references
    :param attribute:  The attribute to map to an index
    :return: An UnnamedAttributeRef mapped to the given attribute
    """
    # $0
    if isinstance(attribute, (int, long)):
        return UnnamedAttributeRef(attribute)
    # alias.attribute
    elif isinstance(attribute, basestring) and '.' in attribute:
        assert aliases
        alias, attribute = map(str.strip, attribute.split('.'))
        index = aliases.index(alias)
        # ProjectingJoin will not accept a NamedAttributeRef :(
        return UnnamedAttributeRef(
            sum(len(q.query.scheme())
                for q in inputs[:index]) + NamedAttributeRef(
                    attribute).get_position(inputs[index].query.scheme()))
    # attribute
    elif isinstance(attribute, basestring):
        # ProjectingJoin will not accept a NamedAttributeRef :(
        return UnnamedAttributeRef(
            NamedAttributeRef(attribute).get_position(
                sum((q.query.scheme() for q in inputs), Scheme())))
    # lambda t1, t2: t1.attribute
    elif callable(attribute):
        ref = convert(attribute, [q.query.scheme() for q in inputs])
        schema = sum((q.query.scheme() for q in inputs), Scheme())
        return UnnamedAttributeRef(ref.get_position(schema))
コード例 #2
0
    def _execute(self, query, expected):
        projection = convert(query, [self.schema])
        self.assertIsNotNone(projection)

        expression = Apply([('out', projection)], self.scan)
        plan = self.get_query(expression)
        return self.check_result(plan, expected)
コード例 #3
0
ファイル: operators_test.py プロジェクト: strategist922/raco
    def _execute(self, query, expected):
        predicate = convert(query, [self.schema])
        self.assertIsNotNone(predicate)

        expression = Select(predicate, self.scan)
        plan = self.get_query(expression)
        return self.check_result(plan, expected)
コード例 #4
0
ファイル: fluent.py プロジェクト: uwescience/myria-python
def _get_column_index(inputs, aliases, attribute):
    """
    Find the column index of for given attribute
    :param inputs: Input queries with schema used to match against
    :param aliases: An alias for each input for dotted references
    :param attribute:  The attribute to map to an index
    :return: An UnnamedAttributeRef mapped to the given attribute
    """
    # $0
    if isinstance(attribute, (int, long)):
        return UnnamedAttributeRef(attribute)
    # alias.attribute
    elif isinstance(attribute, basestring) and '.' in attribute:
        assert aliases
        alias, attribute = map(str.strip, attribute.split('.'))
        index = aliases.index(alias)
        # ProjectingJoin will not accept a NamedAttributeRef :(
        return UnnamedAttributeRef(
            sum(len(q.query.scheme()) for q in inputs[:index]) +
            NamedAttributeRef(attribute).get_position(
                inputs[index].query.scheme()))
    # attribute
    elif isinstance(attribute, basestring):
        # ProjectingJoin will not accept a NamedAttributeRef :(
        return UnnamedAttributeRef(
            NamedAttributeRef(attribute).get_position(
                sum((q.query.scheme() for q in inputs), Scheme())))
    # lambda t1, t2: t1.attribute
    elif callable(attribute):
        ref = convert(attribute, [q.query.scheme() for q in inputs])
        schema = sum((q.query.scheme() for q in inputs), Scheme())
        return UnnamedAttributeRef(ref.get_position(schema))
コード例 #5
0
ファイル: functions_test.py プロジェクト: uwescience/raco
    def _execute(self, query, expected):
        projection = convert(query, [self.schema])
        self.assertIsNotNone(projection)

        expression = Apply([("out", projection)], self.scan)
        plan = self.get_query(expression)
        return self.check_result(plan, expected)
コード例 #6
0
ファイル: fluent.py プロジェクト: uwescience/myria-python
 def _convert(self, source_or_ast_or_callable,
              scheme=None, out_type=None, multivalued=False):
     scheme = scheme or [self.query.scheme()]
     try:
         return convert(source_or_ast_or_callable, scheme, udfs=self.udfs)
     except PythonConvertException:
         udf = _create_udf(source_or_ast_or_callable, scheme,
                           connection=self.connection,
                           out_type=out_type,
                           multivalued=multivalued)
         self.udfs.append([udf.name, len(udf.arguments), udf.typ])
         return udf
コード例 #7
0
 def _convert(self,
              source_or_ast_or_callable,
              scheme=None,
              out_type=None,
              multivalued=False):
     scheme = scheme or [self.query.scheme()]
     try:
         return convert(source_or_ast_or_callable, scheme, udfs=self.udfs)
     except PythonConvertException:
         udf = _create_udf(source_or_ast_or_callable,
                           scheme,
                           connection=self.connection,
                           out_type=out_type,
                           multivalued=multivalued)
         self.udfs.append([udf.name, len(udf.arguments), udf.typ])
         return udf
コード例 #8
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_unrecognized_keyword(self):
     query = """lambda t: t.id == foo"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #9
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_unrecognized_function(self):
     query = """lambda t: foo(t.id) == 1"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #10
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_substring_step(self):
     query = """lambda t: t.id[1:10:3] == 'x'"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #11
0
ファイル: convert_tests.py プロジェクト: uwescience/raco
 def test_ast(self):
     t = ast.parse("lambda: 0")
     e = convert(t, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #12
0
ファイル: convert_tests.py プロジェクト: strategist922/raco
 def test_lambda(self):
     f = lambda: 0
     e = convert(f, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #13
0
ファイル: convert_tests.py プロジェクト: uwescience/raco
 def test_function(self):
     def f():
         return 0
     e = convert(f, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #14
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_undefined_token(self):
     query = """lambda t: foo[0] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #15
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_syntax_error(self):
     query = """lambda t: t[0] = 6"""
     self.assertRaises(PythonSyntaxException,
                       lambda: convert(query, [self.schema]))
コード例 #16
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_invalid_dotted_attribute(self):
     query = """lambda t: t[0].foo == 6"""
     self.assertRaises(PythonUnsupportedOperationException,
                       lambda: convert(query, [self.schema]))
コード例 #17
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_invalid_attribute(self):
     query = """lambda t: t.foo == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #18
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_mismatched_parenthesis(self):
     query = """lambda t: (t[999] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #19
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_partial_keyword(self):
     query = """foolambda t: t[999] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #20
0
ファイル: convert_tests.py プロジェクト: strategist922/raco
 def test_string(self):
     f = "lambda: 0"
     e = convert(f, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #21
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_out_of_range_index(self):
     query = """lambda t: t[999] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #22
0
ファイル: convert_tests.py プロジェクト: uwescience/raco
 def test_lambda(self):
     f = lambda: 0
     e = convert(f, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #23
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_negative_index(self):
     query = """lambda t: t[-1] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #24
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_slice(self):
     query = """lambda t: t[1:2] == 6"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #25
0
ファイル: convert_tests.py プロジェクト: strategist922/raco
 def test_ast(self):
     t = ast.parse("lambda: 0")
     e = convert(t, None)
     self.assertEqual(e, NumericLiteral(0))
コード例 #26
0
ファイル: syntax_test.py プロジェクト: strategist922/raco
 def test_substring_negative_index(self):
     query = """lambda t: t.id[-5] == 'x'"""
     self.assertRaises(PythonConvertException,
                       lambda: convert(query, [self.schema]))
コード例 #27
0
ファイル: convert_tests.py プロジェクト: strategist922/raco
    def test_function(self):
        def f():
            return 0

        e = convert(f, None)
        self.assertEqual(e, NumericLiteral(0))
コード例 #28
0
ファイル: convert_tests.py プロジェクト: uwescience/raco
 def test_string(self):
     f = "lambda: 0"
     e = convert(f, None)
     self.assertEqual(e, NumericLiteral(0))