Ejemplo n.º 1
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")
        parser.expect_optional("OR", "REPLACE")
        parser.expect("VIEW")

        viewName = parser.parse_identifier()

        columnsExist = parser.expect_optional("(")
        columnNames = list()

        if (columnsExist):
            while not parser.expect_optional(")"):
                columnNames.append(ParserUtils.get_object_name(parser.parse_identifier()))
                parser.expect_optional(",")

        parser.expect("AS")

        query = parser.get_rest()

        view = PgView(ParserUtils.get_object_name(viewName))
        view.columnNames = columnNames
        view.query = query

        schemaName = ParserUtils.get_schema_name(viewName, database)
        schema = database.getSchema(schemaName)

        if schema is None:
            raise Exception("CannotFindSchema" % (schemaName, statement))

        schema.addView(view)
Ejemplo n.º 2
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")
        parser.expect_optional("OR", "REPLACE")
        parser.expect("VIEW")

        viewName = parser.parse_identifier()

        columnsExist = parser.expect_optional("(")
        columnNames = list()

        if (columnsExist):
            while not parser.expect_optional(")"):
                columnNames.append(
                    ParserUtils.get_object_name(parser.parse_identifier()))
                parser.expect_optional(",")

        parser.expect("AS")

        query = parser.get_rest()

        view = PgView(ParserUtils.get_object_name(viewName))
        view.columnNames = columnNames
        view.query = query

        schemaName = ParserUtils.get_schema_name(viewName, database)
        schema = database.getSchema(schemaName)

        if schema is None:
            raise Exception("CannotFindSchema" % (schemaName, statement))

        schema.addView(view)
Ejemplo n.º 3
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")

        unique = parser.expect_optional("UNIQUE")

        parser.expect("INDEX")
        parser.expect_optional("CONCURRENTLY")

        indexName = ParserUtils.get_object_name(parser.parse_identifier())

        parser.expect("ON")

        tableName = parser.parse_identifier()
        definition = parser.get_rest()
        schemaName =ParserUtils.get_schema_name(tableName, database)
        schema = database.getSchema(schemaName)

        if (schema is None):
            print 'ERROR: CreateIndexParser[Line 21]'
            # throw new RuntimeException(MessageFormat.format(
            #         Resources.getString("CannotFindSchema"), schemaName,
            #         statement));

        objectName = ParserUtils.get_object_name(tableName)
        table = schema.getTable(objectName)

        if (table is None):
            print 'ERROR: CreateIndexParser[Line 32]'
            # throw new RuntimeException(MessageFormat.format(
            #         Resources.getString("CannotFindTable"), tableName,
            #         statement));

        index = PgIndex(indexName)
        table.addIndex(index)
        schema.addIndex(index)
        index.definition = definition.strip()
        index.tableName = table.name
        index.unique = unique
Ejemplo n.º 4
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")

        unique = parser.expect_optional("UNIQUE")

        parser.expect("INDEX")
        parser.expect_optional("CONCURRENTLY")

        indexName = ParserUtils.get_object_name(parser.parse_identifier())

        parser.expect("ON")

        tableName = parser.parse_identifier()
        definition = parser.get_rest()
        schemaName = ParserUtils.get_schema_name(tableName, database)
        schema = database.getSchema(schemaName)

        if (schema is None):
            print 'ERROR: CreateIndexParser[Line 21]'
            # throw new RuntimeException(MessageFormat.format(
            #         Resources.getString("CannotFindSchema"), schemaName,
            #         statement));

        objectName = ParserUtils.get_object_name(tableName)
        table = schema.getTable(objectName)

        if (table is None):
            print 'ERROR: CreateIndexParser[Line 32]'
            # throw new RuntimeException(MessageFormat.format(
            #         Resources.getString("CannotFindTable"), tableName,
            #         statement));

        index = PgIndex(indexName)
        table.addIndex(index)
        schema.addIndex(index)
        index.definition = definition.strip()
        index.tableName = table.name
        index.unique = unique
Ejemplo n.º 5
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE", "SCHEMA")

        if parser.expect_optional("AUTHORIZATION"):
            schema = PgSchema(
                ParserUtils.get_object_name(parser.parse_identifier()))
            database.addSchema(schema)
            schema.authorization = schema.name

        else:
            schemaName = ParserUtils.get_object_name(parser.parse_identifier())
            schema = PgSchema(schemaName)
            database.schemas[schemaName] = schema

            if parser.expect_optional("AUTHORIZATION"):
                schema.authorization = ParserUtils.get_object_name(
                    parser.parse_identifier())

        definition = parser.get_rest()

        if definition:
            schema.definition = definition
Ejemplo n.º 6
0
    def parse(database, statement, ignoreSlonyTriggers):
        parser = Parser(statement)
        parser.expect("CREATE", "TRIGGER")

        triggerName = parser.parse_identifier()
        objectName = ParserUtils.get_object_name(triggerName)

        trigger = PgTrigger()
        trigger.name = objectName

        if parser.expect_optional("BEFORE"):
            trigger.event = PgTrigger.EVENT_BEFORE
        elif parser.expect_optional("AFTER"):
            trigger.event = PgTrigger.EVENT_AFTER
        elif parser.expect_optional("INSTEAD OF"):
            trigger.event = PgTrigger.EVENT_INSTEAD_OF

        first = True

        while True:
            if not first and not parser.expect_optional("OR"):
                break
            elif parser.expect_optional("INSERT"):
                trigger.onInsert = True
            elif parser.expect_optional("UPDATE"):
                trigger.onUpdate = True

                if parser.expect_optional("OF"):
                    while True:
                        trigger.updateColumns.append(parser.parse_identifier())
                        if not parser.expect_optional(","):
                            break

            elif parser.expect_optional("DELETE"):
                trigger.onDelete = True
            elif parser.expect_optional("TRUNCATE"):
                trigger.onTruncate = True
            elif (first):
                break
            else:
                parser.throw_unsupported_command()

            first = False

        parser.expect("ON")

        trigger.tableName = ParserUtils.get_object_name(parser.parse_identifier())

        if parser.expect_optional("FOR"):
            parser.expect_optional("EACH")

            if parser.expect_optional("ROW"):
                trigger.forEachRow = True
            elif parser.expect_optional("STATEMENT"):
                trigger.forEachRow = False
            else:
                parser.throw_unsupported_command()

        if parser.expect_optional("WHEN"):
            parser.expect("(")
            trigger.when = parser.get_expression()
            parser.expect(")")

        parser.expect("EXECUTE", "PROCEDURE")
        trigger.function = parser.get_rest()

        ignoreSlonyTrigger = ignoreSlonyTriggers and ("_slony_logtrigger" == trigger.name or "_slony_denyaccess" == trigger.name)

        if (not ignoreSlonyTrigger):
            schema = database.getSchema(ParserUtils.get_schema_name(trigger.tableName, database))
            container = schema.tables.get(trigger.tableName)
            if not container:
                container = schema.views.get(trigger.tableName)

            if container:
                container.triggers[trigger.name] = trigger
            else:
                raise Exception()
Ejemplo n.º 7
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")
        parser.expect_optional("OR", "REPLACE")
        parser.expect("FUNCTION")

        functionName = parser.parse_identifier();
        schemaName = ParserUtils.get_schema_name(functionName, database)
        schema = database.getSchema(schemaName)

        if schema is None:
            raise Exception("Cannot find schema '%s' for statement '%s'. Missing CREATE SCHEMA statement?" % (schemaName, statement))

        function = PgFunction()
        function.name = ParserUtils.get_object_name(functionName)

        parser.expect("(")

        while not parser.expect_optional(")"):
            mode = None

            if parser.expect_optional("IN"):
                mode = "IN"
            elif parser.expect_optional("OUT"):
                mode = "OUT"
            elif parser.expect_optional("INOUT"):
                mode = "INOUT"
            elif parser.expect_optional("VARIADIC"):
                mode = "VARIADIC"

            position = parser.position
            argumentName = None
            dataType = parser.parse_data_type()

            position2 = parser.position

            if (not parser.expect_optional(")") and not parser.expect_optional(",")
                    and not parser.expect_optional("=")
                    and not parser.expect_optional("DEFAULT")):
                parser.position = position
                argumentName = ParserUtils.get_object_name(parser.parse_identifier())
                dataType = parser.parse_data_type()
            else:
                parser.position = position2

            defaultExpression = ''

            if (parser.expect_optional("=")
                    or parser.expect_optional("DEFAULT")):
                defaultExpression = parser.get_expression()
            else:
                defaultExpression = None

            argument = Argument()
            argument.dataType = dataType
            argument.defaultExpression = defaultExpression
            argument.mode = mode
            argument.name = argumentName
            function.addArgument(argument)

            if (parser.expect_optional(")")):
                break
            else:
                parser.expect(",")

        function.body = parser.get_rest()

        schema.addFunction(function)
Ejemplo n.º 8
0
    def parse(database, statement):
        parser = Parser(statement)
        parser.expect("CREATE")
        parser.expect_optional("OR", "REPLACE")
        parser.expect("FUNCTION")

        functionName = parser.parse_identifier()
        schemaName = ParserUtils.get_schema_name(functionName, database)
        schema = database.getSchema(schemaName)

        if schema is None:
            raise Exception(
                "Cannot find schema '%s' for statement '%s'. Missing CREATE SCHEMA statement?"
                % (schemaName, statement))

        function = PgFunction()
        function.name = ParserUtils.get_object_name(functionName)

        parser.expect("(")

        while not parser.expect_optional(")"):
            mode = None

            if parser.expect_optional("IN"):
                mode = "IN"
            elif parser.expect_optional("OUT"):
                mode = "OUT"
            elif parser.expect_optional("INOUT"):
                mode = "INOUT"
            elif parser.expect_optional("VARIADIC"):
                mode = "VARIADIC"

            position = parser.position
            argumentName = None
            dataType = parser.parse_data_type()

            position2 = parser.position

            if (not parser.expect_optional(")")
                    and not parser.expect_optional(",")
                    and not parser.expect_optional("=")
                    and not parser.expect_optional("DEFAULT")):
                parser.position = position
                argumentName = ParserUtils.get_object_name(
                    parser.parse_identifier())
                dataType = parser.parse_data_type()
            else:
                parser.position = position2

            defaultExpression = ''

            if (parser.expect_optional("=")
                    or parser.expect_optional("DEFAULT")):
                defaultExpression = parser.get_expression()
            else:
                defaultExpression = None

            argument = Argument()
            argument.dataType = dataType
            argument.defaultExpression = defaultExpression
            argument.mode = mode
            argument.name = argumentName
            function.addArgument(argument)

            if (parser.expect_optional(")")):
                break
            else:
                parser.expect(",")

        function.body = parser.get_rest()

        schema.addFunction(function)