示例#1
0
def test_create_type_statement():
    sql = "CREATE TYPE FLUENCY AS ENUM ('basic', 'intermediate');"
    statement = next(parse_statements(sqlparse.parse(sql)))

    assert_is_instance(statement, CreateType)
    assert_equals('FLUENCY', statement.get_name())
    assert_equals(['basic', 'intermediate'], statement.get_enum_labels())
示例#2
0
def test_set_statement():
    sql = "SET search_path = 'cover_art_archive';"
    statement = next(parse_statements(sqlparse.parse(sql)))

    assert_is_instance(statement, Set)
    assert_equals('search_path', statement.get_name())
    assert_equals('cover_art_archive', statement.get_value())
示例#3
0
def test_create_index():
    sql = '''CREATE INDEX statistic_name ON statistic (name); '''
    statement = next(parse_statements(sqlparse.parse(sql)))

    assert_is_instance(statement, CreateIndex)
    assert_equal('statistic_name', statement.get_name())
    assert_equal('statistic', statement.get_table())
    assert_equal(['name'], statement.get_columns())
    assert_false(statement.is_unique())
示例#4
0
def test_create_unique_index():
    sql = '''CREATE UNIQUE INDEX statistic_name_date_collected ON statistic (name, date_collected); '''
    statement = next(parse_statements(sqlparse.parse(sql)))

    statement._pprint_tree()

    assert_is_instance(statement, CreateIndex)
    assert_equal('statistic_name_date_collected', statement.get_name())
    assert_equal('statistic', statement.get_table())
    assert_equal(['name', 'date_collected'], statement.get_columns())
    assert_true(statement.is_unique())
示例#5
0
def test_create_table_statement_named_check_constraint():
    sql = '''CREATE TABLE table_name (column INTEGER(2) NOT NULL DEFAULT 0 CONSTRAINT check_column CHECK (edits_pending > 0)); '''
    statement = next(parse_statements(sqlparse.parse(sql)))

    assert_is_instance(statement, CreateTable)
    columns = list(statement.get_columns())
    assert_equal(1, len(columns))

    column = columns[0]
    check = column.get_check_constraint()
    assert_true(check)
    assert_equal('check_column', check.get_name())
    assert_equal('edits_pending>0', str(check.get_body()))
示例#6
0
def test_parse_statements():
    sql = '''
SET search_path = 'cover_art_archive';

CREATE TABLE table_name (
    id SERIAL, -- PK
    name VARCHAR
);

CREATE TYPE FLUENCY AS ENUM ('basic', 'intermediate', 'advanced', 'native');
    '''
    statements = sqlparse.parse(sql)
    for statement in statements:
        statement._pprint_tree()
        print()
    statements = parse_statements(statements)
    for statement in statements:
        print(repr(statement))
示例#7
0
def parse_sql(sql, schema='musicbrainz'):
    tables = []
    types = []
    indexes = []

    statements = parse_statements(sqlparse.parse(sql))
    for statement in statements:
        if isinstance(statement, Set) and statement.get_name() == 'search_path':
            schema = statement.get_value().split(',')[0].strip()

        elif isinstance(statement, CreateTable):
            tables.append(parse_create_table(statement, schema))

        elif isinstance(statement, CreateType):
            types.append(parse_create_type(statement, schema))

        elif isinstance(statement, CreateIndex):
            indexes.append(parse_create_index(statement, schema))

    return tables, types, indexes
示例#8
0
def test_create_table_statement():
    sql = '''
CREATE TABLE table_name (
    id SERIAL, -- PK
    name VARCHAR(100) NOT NULL,
    created TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
);
    '''
    statement = next(parse_statements(sqlparse.parse(sql)))

    assert_is_instance(statement, CreateTable)
    assert_equals('table_name', statement.get_name())

    columns = list(statement.get_columns())
    assert_equals(3, len(columns))

    column = columns[0]
    assert_equals('id', column.get_name())
    assert_equals('SERIAL', column.get_type())
    assert_equals(None, column.get_default_value())
    assert_equals(['-- PK'], column.get_comments())
    assert_equals(False, column.is_not_null())
    assert_equals(None, column.get_check_constraint())

    column = columns[1]
    assert_equals('name', column.get_name())
    assert_equals('VARCHAR(100)', column.get_type())
    assert_equals(None, column.get_default_value())
    assert_equals([], column.get_comments())
    assert_equals(True, column.is_not_null())
    assert_equals(None, column.get_check_constraint())

    column = columns[2]
    assert_equals('created', column.get_name())
    assert_equals('TIMESTAMP WITH TIME ZONE', column.get_type())
    assert_equals('now()', column.get_default_value())
    assert_equals([], column.get_comments())
    assert_equals(True, column.is_not_null())
    assert_equals(None, column.get_check_constraint())