Пример #1
0
 def test_left_outer_join(self):
     self.assert_parsed_select(
         'SELECT t1.foo, t2.bar '
         'FROM table1 t1 LEFT OUTER JOIN EACH table2 t2 ON t1.id = t2.id',
         tq_ast.Select(
             [
                 tq_ast.SelectField(tq_ast.ColumnId('t1.foo'), None, None),
                 tq_ast.SelectField(tq_ast.ColumnId('t2.bar'), None, None)
             ],
             tq_ast.Join(tq_ast.TableId('table1', 't1'), [
                 tq_ast.PartialJoin(
                     tq_ast.TableId('table2', 't2'),
                     tq_ast.JoinType.LEFT_OUTER,
                     tq_ast.BinaryOperator('=', tq_ast.ColumnId('t1.id'),
                                           tq_ast.ColumnId('t2.id')),
                 ),
             ]), None, None, None, None, None, None))
     self.assert_parsed_select(
         'SELECT t1.foo, t2.bar '
         'FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id',
         tq_ast.Select(
             [
                 tq_ast.SelectField(tq_ast.ColumnId('t1.foo'), None, None),
                 tq_ast.SelectField(tq_ast.ColumnId('t2.bar'), None, None)
             ],
             tq_ast.Join(tq_ast.TableId('table1', 't1'), [
                 tq_ast.PartialJoin(
                     tq_ast.TableId('table2', 't2'),
                     tq_ast.JoinType.LEFT_OUTER,
                     tq_ast.BinaryOperator('=', tq_ast.ColumnId('t1.id'),
                                           tq_ast.ColumnId('t2.id')),
                 ),
             ]), None, None, None, None, None, None))
Пример #2
0
 def test_subquery(self):
     self.assert_parsed_select(
         'SELECT foo FROM (SELECT val AS foo FROM table)',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('foo'), None)],
             tq_ast.Select(
                 [tq_ast.SelectField(tq_ast.ColumnId('val'), 'foo')],
                 tq_ast.TableId('table', None), None, None, None, None,
                 None), None, None, None, None, None))
Пример #3
0
def p_select(p):
    """select : SELECT select_field_list optional_limit
              | SELECT select_field_list FROM full_table_expr optional_where \
                    optional_group_by optional_order_by optional_limit
    """
    if len(p) == 4:
        p[0] = tq_ast.Select(p[2], None, None, None, None, p[3], None)
    elif len(p) == 9:
        p[0] = tq_ast.Select(p[2], p[4], p[5], p[6], p[7], p[8], None)
    else:
        assert False, 'Unexpected number of captured tokens.'
Пример #4
0
 def test_multi_clause_case(self):
     self.assert_parsed_select(
         'SELECT CASE WHEN x = 4 THEN 16 WHEN x = 5 THEN 25 END',
         tq_ast.Select(
             [
                 tq_ast.SelectField(
                     tq_ast.CaseExpression([
                         tq_ast.CaseClause(
                             tq_ast.BinaryOperator('=',
                                                   tq_ast.ColumnId('x'),
                                                   tq_ast.Literal(4)),
                             tq_ast.Literal(16)
                         ),
                         tq_ast.CaseClause(
                             tq_ast.BinaryOperator('=',
                                                   tq_ast.ColumnId('x'),
                                                   tq_ast.Literal(5)),
                             tq_ast.Literal(25)
                         ),
                     ]),
                     None
                 )
             ],
             None, None, None, None, None, None
         )
     )
Пример #5
0
 def test_fully_qualified_name(self):
     self.assert_parsed_select(
         'SELECT table.foo FROM table',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('table.foo'), None, None)],
             tq_ast.TableId('table',
                            None), None, None, None, None, None, None))
Пример #6
0
 def test_function_calls(self):
     self.assert_parsed_select(
         'SELECT ABS(-3), POW(2, 3), NOW()',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.FunctionCall('abs', [
                     tq_ast.UnaryOperator('-', literal(3))
                 ]),
                 None
             ),
             tq_ast.SelectField(
                 tq_ast.FunctionCall('pow', [literal(2), literal(3)]),
                 None
             ),
             tq_ast.SelectField(
                 tq_ast.FunctionCall('now', []),
                 None
             )],
             None,
             None,
             None,
             None,
             None,
             None
         )
     )
Пример #7
0
 def test_cross_join(self):
     self.assert_parsed_select(
         'SELECT 0 FROM table1 t1 CROSS JOIN table2 t2',
         tq_ast.Select([tq_ast.SelectField(tq_ast.Literal(0), None)],
                       tq_ast.CrossJoin(tq_ast.TableId('table1', 't1'),
                                        tq_ast.TableId('table2', 't2')),
                       None, None, None, None, None))
Пример #8
0
 def test_negative_numbers(self):
     self.assert_parsed_select(
         'SELECT -5',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.UnaryOperator('-', literal(5)), None)
         ], None, None, None, None, None, None),
     )
Пример #9
0
 def test_select_from_table(self):
     self.assert_parsed_select(
         'SELECT foo FROM bar',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('foo'), None, None)],
             tq_ast.TableId('bar',
                            None), None, None, None, None, None, None))
Пример #10
0
 def test_dot_separated_table_name(self):
     self.assert_parsed_select(
         'SELECT foo FROM dataset.table',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('foo'), None, None)],
             tq_ast.TableId('dataset.table',
                            None), None, None, None, None, None, None))
Пример #11
0
 def test_record_star(self):
     self.assert_parsed_select(
         'SELECT foo.* FROM table',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('foo.*'), None, None)],
             tq_ast.TableId('table',
                            None), None, None, None, None, None, None))
Пример #12
0
 def test_aggregates(self):
     self.assert_parsed_select(
         'SELECT MAX(foo) FROM bar',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.FunctionCall('max', [tq_ast.ColumnId('foo')]), None)
         ], tq_ast.TableId('bar', None), None, None, None, None, None))
Пример #13
0
 def test_group_by(self):
     self.assert_parsed_select(
         'SELECT foo FROM bar GROUP BY baz',
         tq_ast.Select(
             [tq_ast.SelectField(tq_ast.ColumnId('foo'), None, None)],
             tq_ast.TableId('bar', None), None, [tq_ast.ColumnId('baz')],
             None, None, None, None))
Пример #14
0
 def test_multiple_table_select(self):
     self.assert_parsed_select(
         'SELECT foo FROM table1, table2',
         tq_ast.Select([tq_ast.SelectField(tq_ast.ColumnId('foo'), None)],
                       tq_ast.TableUnion([
                           tq_ast.TableId('table1', None),
                           tq_ast.TableId('table2', None),
                       ]), None, None, None, None, None))
Пример #15
0
 def test_select_comparison(self):
     self.assert_parsed_select(
         'SELECT foo = bar FROM baz',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.BinaryOperator('=', tq_ast.ColumnId('foo'),
                                       tq_ast.ColumnId('bar')), None)
         ], tq_ast.TableId('baz', None), None, None, None, None, None))
Пример #16
0
 def test_limit(self):
     self.assert_parsed_select(
         'SELECT SUM(foo) FROM bar GROUP BY baz LIMIT 10',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.FunctionCall('sum', [tq_ast.ColumnId('foo')]), None)
         ], tq_ast.TableId('bar', None), None, [tq_ast.ColumnId('baz')],
                       None, 10, None))
Пример #17
0
 def test_other_literals(self):
     self.assert_parsed_select(
         'SELECT true, false, null',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.Literal(True), None),
             tq_ast.SelectField(tq_ast.Literal(False), None),
             tq_ast.SelectField(tq_ast.Literal(None), None)
         ], None, None, None, None, None, None))
Пример #18
0
 def test_count_star(self):
     self.assert_parsed_select(
         'SELECT COUNT(*), COUNT(((*))) FROM table',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.FunctionCall('count', [tq_ast.Literal(1)]), None),
             tq_ast.SelectField(
                 tq_ast.FunctionCall('count', [tq_ast.Literal(1)]), None)
         ], tq_ast.TableId('table', None), None, None, None, None, None))
Пример #19
0
 def test_parens(self):
     self.assert_parsed_select(
         'SELECT 2 + (3 * 4)',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.BinaryOperator(
                     '+', literal(2),
                     tq_ast.BinaryOperator('*', literal(3), literal(4))),
                 None)
         ], None, None, None, None, None, None))
Пример #20
0
 def test_where(self):
     self.assert_parsed_select(
         'SELECT foo + 2 FROM bar WHERE foo > 3',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.BinaryOperator('+', tq_ast.ColumnId('foo'),
                                       tq_ast.Literal(2)), None)
         ], tq_ast.TableId('bar', None),
                       tq_ast.BinaryOperator('>', tq_ast.ColumnId('foo'),
                                             tq_ast.Literal(3)), None, None,
                       None, None))
Пример #21
0
 def test_join_each(self):
     self.assert_parsed_select(
         'SELECT 0 FROM table1 t1 JOIN EACH table2 t2 ON t1.foo = t2.bar',
         tq_ast.Select([tq_ast.SelectField(tq_ast.Literal(0), None)],
                       tq_ast.Join(tq_ast.TableId('table1', 't1'),
                                   tq_ast.TableId('table2', 't2'),
                                   tq_ast.BinaryOperator(
                                       '=', tq_ast.ColumnId('t1.foo'),
                                       tq_ast.ColumnId('t2.bar')),
                                   is_left_outer=False), None, None, None,
                       None, None))
Пример #22
0
 def test_null_comparison_functions(self):
     self.assert_parsed_select(
         'SELECT foo IS NULL, bar IS NOT NULL FROM table',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.UnaryOperator('is_null', tq_ast.ColumnId('foo')),
                 None),
             tq_ast.SelectField(
                 tq_ast.UnaryOperator('is_not_null',
                                      tq_ast.ColumnId('bar')), None)
         ], tq_ast.TableId('table', None), None, None, None, None, None))
Пример #23
0
 def test_arithmetic_operator_parsing(self):
     self.assert_parsed_select(
         'SELECT 1 * 2 + 3 / 4',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.BinaryOperator(
                     '+', tq_ast.BinaryOperator('*', literal(1),
                                                literal(2)),
                     tq_ast.BinaryOperator('/', literal(3), literal(4))),
                 None)
         ], None, None, None, None, None, None))
Пример #24
0
 def test_group_each_by(self):
     self.assert_parsed_select(
         'SELECT 0 FROM table GROUP EACH BY foo',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.Literal(0), None)],
             tq_ast.TableId('table', None),
             None,
             [tq_ast.ColumnId('foo')],
             None,
             None,
             None))
Пример #25
0
 def test_string_literal(self):
     self.assert_parsed_select(
         'SELECT "Hello" AS foo',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.Literal('Hello'), 'foo')],
             None,
             None,
             None,
             None,
             None,
             None))
Пример #26
0
 def test_multiple_select(self):
     self.assert_parsed_select(
         'SELECT a AS foo, b bar, a + 1 baz FROM test_table',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.ColumnId('a'), 'foo'),
             tq_ast.SelectField(tq_ast.ColumnId('b'), 'bar'),
             tq_ast.SelectField(
                 tq_ast.BinaryOperator('+', tq_ast.ColumnId('a'),
                                       tq_ast.Literal(1)), 'baz')
         ], tq_ast.TableId('test_table', None), None, None, None, None,
                       None))
Пример #27
0
 def test_within_record(self):
     self.assert_parsed_select(
         'SELECT fullname, COUNT(children.name) WITHIN RECORD AS '
         'numberOfChildren FROM table',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.ColumnId('fullname'), None, None),
             tq_ast.SelectField(
                 tq_ast.FunctionCall('count',
                                     [tq_ast.ColumnId('children.name')]),
                 'numberOfChildren', 'RECORD')
         ], tq_ast.TableId('table', None), None, None, None, None, None,
                       None))
Пример #28
0
 def test_order_by(self):
     self.assert_parsed_select(
         'SELECT foo, bar, baz FROM table ORDER BY foo DESC, bar, baz ASC,',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.ColumnId('foo'), None),
             tq_ast.SelectField(tq_ast.ColumnId('bar'), None),
             tq_ast.SelectField(tq_ast.ColumnId('baz'), None)
         ], tq_ast.TableId('table', None), None, None, [
             tq_ast.Ordering(tq_ast.ColumnId('foo'), False),
             tq_ast.Ordering(tq_ast.ColumnId('bar'), True),
             tq_ast.Ordering(tq_ast.ColumnId('baz'), True)
         ], None, None))
Пример #29
0
 def test_within_clause(self):
     self.assert_parsed_select(
         'SELECT fullname, COUNT(citiesLived.yearsLived) WITHIN '
         'citiesLived AS numberOfTimesInEachCity FROM table',
         tq_ast.Select([
             tq_ast.SelectField(tq_ast.ColumnId('fullname'), None, None),
             tq_ast.SelectField(
                 tq_ast.FunctionCall(
                     'count', [tq_ast.ColumnId('citiesLived.yearsLived')]),
                 'numberOfTimesInEachCity', 'citiesLived')
         ], tq_ast.TableId('table', None), None, None, None, None, None,
                       None))
Пример #30
0
 def test_operator_precedence(self):
     self.assert_parsed_select(
         'SELECT 2 + 3 * 4 + 5',
         tq_ast.Select([
             tq_ast.SelectField(
                 tq_ast.BinaryOperator(
                     '+',
                     tq_ast.BinaryOperator(
                         '+', literal(2),
                         tq_ast.BinaryOperator('*',
                                               literal(3), literal(4))),
                     literal(5)), None)
         ], None, None, None, None, None, None))