Ejemplo n.º 1
0
async def _create_edgedb_template_database(cluster, conn):
    instance_params = cluster.get_runtime_params().instance_params
    capabilities = instance_params.capabilities
    have_c_utf8 = (capabilities & pgcluster.BackendCapabilities.C_UTF8_LOCALE)

    logger.info('Creating template database...')
    block = dbops.SQLBlock()
    dbid = uuidgen.uuid1mc()
    db = dbops.Database(
        edbdef.EDGEDB_TEMPLATE_DB,
        owner=edbdef.EDGEDB_SUPERUSER,
        is_template=True,
        template='template0',
        lc_collate='C',
        lc_ctype='C.UTF-8' if have_c_utf8 else 'en_US.UTF-8',
        encoding='UTF8',
        metadata=dict(
            id=str(dbid),
            builtin=True,
        ),
    )

    dbops.CreateDatabase(db).generate(block)
    await _execute_block(conn, block)
    return dbid
Ejemplo n.º 2
0
async def _ensure_edgedb_database(
    conn,
    database,
    owner,
    *,
    cluster,
    builtin: bool = False,
    objid: Optional[uuid.UUID] = None,
):
    result = await _get_db_info(conn, database)
    if not result:
        logger.info(f'Creating database: ' f'{database}')

        block = dbops.SQLBlock()
        if objid is None:
            objid = uuidgen.uuid1mc()
        db = dbops.Database(
            database,
            owner=owner,
            metadata=dict(
                id=str(objid),
                builtin=builtin,
            ),
        )
        dbops.CreateDatabase(db).generate(block)
        await _execute_block(conn, block)
Ejemplo n.º 3
0
async def _create_edgedb_database(
    ctx: BootstrapContext,
    database: str,
    owner: str,
    *,
    builtin: bool = False,
    objid: Optional[uuid.UUID] = None,
) -> uuid.UUID:
    logger.info(f'Creating database: {database}')
    block = dbops.SQLBlock()
    if objid is None:
        objid = uuidgen.uuid1mc()
    instance_params = ctx.cluster.get_runtime_params().instance_params
    db = dbops.Database(
        ctx.cluster.get_db_name(database),
        owner=ctx.cluster.get_role_name(owner),
        metadata=dict(
            id=str(objid),
            tenant_id=instance_params.tenant_id,
            name=database,
            builtin=builtin,
        ),
    )
    tpl_db = ctx.cluster.get_db_name(edbdef.EDGEDB_TEMPLATE_DB)
    dbops.CreateDatabase(db, template=tpl_db).generate(block)
    await _execute_block(ctx.conn, block)
    return objid
Ejemplo n.º 4
0
async def _create_edgedb_template_database(
    ctx: BootstrapContext,
) -> uuid.UUID:
    backend_params = ctx.cluster.get_runtime_params()
    have_c_utf8 = backend_params.has_c_utf8_locale

    logger.info('Creating template database...')
    block = dbops.SQLBlock()
    dbid = uuidgen.uuid1mc()
    db = dbops.Database(
        ctx.cluster.get_db_name(edbdef.EDGEDB_TEMPLATE_DB),
        owner=ctx.cluster.get_role_name(edbdef.EDGEDB_SUPERUSER),
        is_template=True,
        lc_collate='C',
        lc_ctype='C.UTF-8' if have_c_utf8 else 'en_US.UTF-8',
        encoding='UTF8',
        metadata=dict(
            id=str(dbid),
            tenant_id=backend_params.tenant_id,
            name=edbdef.EDGEDB_TEMPLATE_DB,
            builtin=True,
        ),
    )

    dbops.CreateDatabase(db, template='template0').generate(block)
    await _execute_block(ctx.conn, block)
    return dbid
Ejemplo n.º 5
0
async def _ensure_edgedb_database(conn, database, owner, *, cluster):
    result = await _get_db_info(conn, database)
    if not result:
        logger.info(
            f'Creating database: '
            f'{database}')

        block = dbops.SQLBlock()
        db = dbops.Database(database, owner=owner)
        dbops.CreateDatabase(db).generate(block)
        await _execute_block(conn, block)
Ejemplo n.º 6
0
async def _ensure_edgedb_template_database(cluster, conn):
    result = await _get_db_info(conn, edbdef.EDGEDB_TEMPLATE_DB)

    if not result:
        logger.info('Creating template database...')
        block = dbops.SQLBlock()
        dbid = uuidgen.uuid1mc()
        db = dbops.Database(
            edbdef.EDGEDB_TEMPLATE_DB,
            owner=edbdef.EDGEDB_SUPERUSER,
            is_template=True,
            template='template0',
            lc_collate='C',
            lc_ctype=('C.UTF-8' if cluster.supports_c_utf8_locale()
                      else 'en_US.UTF-8'),
            encoding='UTF8',
            metadata=dict(
                id=str(dbid),
                builtin=True,
            ),
        )
        dbops.CreateDatabase(db).generate(block)
        await _execute_block(conn, block)

        return dbid
    else:
        alter = []
        alter_owner = False

        if not result['datistemplate']:
            alter.append('IS_TEMPLATE = true')

        if result['rolname'] != edbdef.EDGEDB_SUPERUSER:
            alter_owner = True

        if alter or alter_owner:
            logger.info('Altering template database parameters...')
            if alter:
                await _execute(
                    conn,
                    'ALTER DATABASE {} WITH {}'.format(
                        edbdef.EDGEDB_TEMPLATE_DB,
                        ' '.join(alter)))

            if alter_owner:
                await _execute(
                    conn,
                    'ALTER DATABASE {} OWNER TO {}'.format(
                        edbdef.EDGEDB_TEMPLATE_DB,
                        edbdef.EDGEDB_SUPERUSER))

        return None
Ejemplo n.º 7
0
async def _create_edgedb_database(
    conn,
    database,
    owner,
    *,
    builtin: bool = False,
    objid: Optional[uuid.UUID] = None,
) -> uuid.UUID:
    logger.info(f'Creating database: {database}')
    block = dbops.SQLBlock()
    if objid is None:
        objid = uuidgen.uuid1mc()
    db = dbops.Database(
        database,
        owner=owner,
        metadata=dict(
            id=str(objid),
            builtin=builtin,
        ),
    )
    dbops.CreateDatabase(db).generate(block)
    await _execute_block(conn, block)
    return objid
Ejemplo n.º 8
0
async def _ensure_edgedb_database(conn, database, owner, *, cluster):
    result = await _get_db_info(conn, database)
    if not result:
        logger.info(f'Creating database: ' f'{database}')

        block = dbops.SQLBlock()
        db = dbops.Database(database, owner=owner)
        dbops.CreateDatabase(db).generate(block)
        await _execute_block(conn, block)

        if owner != edgedb_defines.EDGEDB_SUPERUSER:
            block = dbops.SQLBlock()
            reassign = dbops.ReassignOwned(edgedb_defines.EDGEDB_SUPERUSER,
                                           owner)
            reassign.generate(block)

            dbconn = await cluster.connect(
                database=database, user=edgedb_defines.EDGEDB_SUPERUSER)

            try:
                await _execute_block(dbconn, block)
            finally:
                await dbconn.close()