# -*- coding: utf-8 -*- from tests.utils import TestCaseBase import sqlparse from sqlparse import sql from sqlparse import tokens as T class RegressionTests(TestCaseBase): def test_issue9(self): # make sure where doesn't consume parenthesis p = sqlparse.parse('(where 1)')[0] self.assert_(isinstance(p, sql.Statement)) self.assertEqual(len(p.tokens), 1) self.assert_(isinstance(p.tokens[0], sql.Parenthesis)) prt = p.tokens[0] self.assertEqual(len(prt.tokens), 3) self.assertEqual(prt.tokens[0].ttype, T.Punctuation) self.assertEqual(prt.tokens[-1].ttype, T.Punctuation) def test_issue13(self): parsed = sqlparse.parse(("select 'one';\n" "select 'two\\'';\n" "select 'three';")) self.assertEqual(len(parsed), 3) self.assertEqual(str(parsed[1]).strip(), "select 'two\\'';") def test_issue26(self): # parse stand-alone comments p = sqlparse.parse('--hello')[0] self.assertEqual(len(p.tokens), 1) self.assert_(p.tokens[0].ttype is T.Comment.Single) p = sqlparse.parse('-- hello')[0] self.assertEqual(len(p.tokens), 1) self.assert_(p.tokens[0].ttype is T.Comment.Single) p = sqlparse.parse('--hello\n')[0] self.assertEqual(len(p.tokens), 1) self.assert_(p.tokens[0].ttype is T.Comment.Single) p = sqlparse.parse('--')[0] self.assertEqual(len(p.tokens), 1) self.assert_(p.tokens[0].ttype is T.Comment.Single) p = sqlparse.parse('--\n')[0] self.assertEqual(len(p.tokens), 1) self.assert_(p.tokens[0].ttype is T.Comment.Single) def test_issue34(self): t = sqlparse.parse("create")[0].token_first() self.assertEqual(t.match(T.Keyword.DDL, "create"), True) self.assertEqual(t.match(T.Keyword.DDL, "CREATE"), True) def test_issue35(self): # missing space before LIMIT sql = sqlparse.format("select * from foo where bar = 1 limit 1", reindent=True) self.ndiffAssertEqual(sql, "\n".join(["select *", "from foo", "where bar = 1 limit 1"])) def test_issue38(self): sql = sqlparse.format("SELECT foo; -- comment", strip_comments=True) self.ndiffAssertEqual(sql, "SELECT foo;") sql = sqlparse.format("/* foo */", strip_comments=True) self.ndiffAssertEqual(sql, "") def test_issue39(self): p = sqlparse.parse('select user.id from user')[0] self.assertEqual(len(p.tokens), 7) idt = p.tokens[2] self.assertEqual(idt.__class__, sql.Identifier) self.assertEqual(len(idt.tokens), 3) self.assertEqual(idt.tokens[0].match(T.Name, 'user'), True) self.assertEqual(idt.tokens[1].match(T.Punctuation, '.'), True) self.assertEqual(idt.tokens[2].match(T.Name, 'id'), True) def test_issue40(self): # make sure identifier lists in subselects are grouped p = sqlparse.parse(('SELECT id, name FROM ' '(SELECT id, name FROM bar) as foo'))[0] self.assertEqual(len(p.tokens), 7) self.assertEqual(p.tokens[2].__class__, sql.IdentifierList) self.assertEqual(p.tokens[-1].__class__, sql.Identifier) self.assertEqual(p.tokens[-1].get_name(), u'foo') sp = p.tokens[-1].tokens[0] self.assertEqual(sp.tokens[3].__class__, sql.IdentifierList) # make sure that formatting works as expected self.ndiffAssertEqual( sqlparse.format(('SELECT id, name FROM ' '(SELECT id, name FROM bar)'), reindent=True), ('SELECT id,\n' ' name\n' 'FROM\n' ' (SELECT id,\n' ' name\n' ' FROM bar)')) self.ndiffAssertEqual( sqlparse.format(('SELECT id, name FROM ' '(SELECT id, name FROM bar) as foo'), reindent=True), ('SELECT id,\n' ' name\n' 'FROM\n' ' (SELECT id,\n' ' name\n' ' FROM bar) as foo')) def test_issue78(): # the bug author provided this nice examples, let's use them! def _get_identifier(sql): p = sqlparse.parse(sql)[0] return p.tokens[2] results = (('get_name', 'z'), ('get_real_name', 'y'), ('get_parent_name', 'x'), ('get_alias', 'z'), ('get_typecast', 'text')) variants = ( 'select x.y::text as z from foo', 'select x.y::text as "z" from foo', 'select x."y"::text as z from foo', 'select x."y"::text as "z" from foo', 'select "x".y::text as z from foo', 'select "x".y::text as "z" from foo', 'select "x"."y"::text as z from foo', 'select "x"."y"::text as "z" from foo', ) for variant in variants: i = _get_identifier(variant) assert isinstance(i, sql.Identifier) for func_name, result in results: func = getattr(i, func_name) assert func() == result