Beispiel #1
0
    def get_trigger_proc_text(self):
        chunks = []

        constr_name = self.constraint_name()
        raw_constr_name = self.constraint_name(quote=False)

        errmsg = 'duplicate key value violates unique ' \
                 'constraint {constr}'.format(constr=constr_name)

        for expr, origin_expr in zip(self._exprdata, self._origin_exprdata):
            exprdata = expr['exprdata']
            origin_exprdata = origin_expr['exprdata']

            schemaname, tablename = self.get_origin_table_name()
            text = '''
                PERFORM
                    TRUE
                  FROM
                    {table}
                  WHERE
                    {plain_expr} = {new_expr};
                IF FOUND THEN
                  RAISE unique_violation
                      USING
                          TABLE = '{tablename}',
                          SCHEMA = '{schemaname}',
                          CONSTRAINT = '{constr}',
                          MESSAGE = '{errmsg}',
                          DETAIL = {detail};
                END IF;
            '''.format(
                plain_expr=origin_exprdata['plain'],
                detail=common.quote_literal(
                    f"Key ({origin_exprdata['plain']}) already exists."
                ),
                new_expr=exprdata['new'],
                table=common.qname(
                    schemaname,
                    tablename + "_" + common.get_aspect_suffix("inhview")),
                schemaname=schemaname,
                tablename=tablename,
                constr=raw_constr_name,
                errmsg=errmsg,
            )

            chunks.append(text)

        text = 'BEGIN\n' + '\n\n'.join(chunks) + '\nRETURN NEW;\nEND;'

        return text
Beispiel #2
0
 def visit_StringConstant(self, node):
     self.write(common.quote_literal(node.val))
Beispiel #3
0
@dataclasses.dataclass(frozen=True)
class CompileContext:

    state: dbstate.CompilerConnectionState
    output_format: pg_compiler.OutputFormat
    expected_cardinality_one: bool
    stmt_mode: enums.CompileStatementMode
    json_parameters: bool = False


EMPTY_MAP = immutables.Map()
DEFAULT_MODULE_ALIASES_MAP = immutables.Map(
    {None: defines.DEFAULT_MODULE_ALIAS})

pg_ql = lambda o: pg_common.quote_literal(str(o))


def compile_bootstrap_script(std_schema: s_schema.Schema,
                             schema: s_schema.Schema,
                             eql: str,
                             *,
                             single_statement: bool = False,
                             expected_cardinality_one: bool = False):

    state = dbstate.CompilerConnectionState(0, schema, EMPTY_MAP, EMPTY_MAP,
                                            enums.Capability.ALL)

    ctx = CompileContext(
        state=state,
        output_format=pg_compiler.OutputFormat.JSON,