Skip to content

Commit

Permalink
Version edgedbinstdata (#7561)
Browse files Browse the repository at this point in the history
  • Loading branch information
msullivan authored Jul 16, 2024
1 parent 7f9fdf9 commit c809efc
Show file tree
Hide file tree
Showing 8 changed files with 83 additions and 67 deletions.
2 changes: 1 addition & 1 deletion edb/buildmeta.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
# The merge conflict there is a nice reminder that you probably need
# to write a patch in edb/pgsql/patches.py, and then you should preserve
# the old value.
EDGEDB_CATALOG_VERSION = 2024_07_09_00_00
EDGEDB_CATALOG_VERSION = 2024_07_15_00_00
EDGEDB_MAJOR_VERSION = 6


Expand Down
2 changes: 1 addition & 1 deletion edb/pgsql/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def get_unique_random_name() -> str:
return base64.b64encode(uuidgen.uuid1mc().bytes).rstrip(b'=').decode()


VERSIONED_SCHEMAS = ('edgedb', 'edgedbstd', 'edgedbsql')
VERSIONED_SCHEMAS = ('edgedb', 'edgedbstd', 'edgedbsql', 'edgedbinstdata')


def versioned_schema(s: str, version: Optional[int]=None) -> str:
Expand Down
32 changes: 20 additions & 12 deletions edb/pgsql/dbops/ddl.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,15 +143,17 @@ def __init__(self, dbname, **kwargs):
self.dbname = dbname

def code(self, block: base.PLBlock) -> str:
from .. import trampoline

key = f'{self.dbname}metadata'
return textwrap.dedent(f'''\
return textwrap.dedent(trampoline.fixup_query(f'''\
SELECT
json
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = {ql(key)}
''')
'''))


class PutMetadata(DDLOperation):
Expand Down Expand Up @@ -210,15 +212,17 @@ def code(self, block: base.PLBlock) -> str:

class SetSingleDBMetadata(PutSingleDBMetadata):
def code(self, block: base.PLBlock) -> str:
from .. import trampoline

metadata = ql(json.dumps(self.metadata))
return textwrap.dedent(f'''\
return textwrap.dedent(trampoline.fixup_query(f'''\
UPDATE
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
SET
json = {metadata}
WHERE
key = {ql(self.key)};
''')
'''))


class UpdateMetadata(PutMetadata):
Expand Down Expand Up @@ -253,21 +257,23 @@ def code(self, block: base.PLBlock) -> str:

class UpdateSingleDBMetadata(PutSingleDBMetadata):
def code(self, block: base.PLBlock) -> str:
from .. import trampoline

metadata_qry = GetSingleDBMetadata(self.dbname).code(block)
json_v = block.declare_var('jsonb')
meta_v = block.declare_var('jsonb')
block.add_command(f'{json_v} := ({metadata_qry});')
upd_metadata = ql(json.dumps(self.metadata))
block.add_command(f'{meta_v} := {upd_metadata}::jsonb')

return textwrap.dedent(f'''\
return textwrap.dedent(trampoline.fixup_query(f'''\
UPDATE
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
SET
json = {json_v} || {meta_v}
WHERE
key = {ql(self.key)}
''')
'''))


class UpdateMetadataSectionMixin:
Expand Down Expand Up @@ -328,15 +334,17 @@ def _metadata_query(self) -> base.Command:
return GetSingleDBMetadata(self.dbname)

def code(self, block: base.PLBlock) -> str:
from .. import trampoline

json_v, meta_v = self._merge(block)
return textwrap.dedent(f'''\
return textwrap.dedent(trampoline.fixup_query(f'''\
UPDATE
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
SET
json = {json_v} || {meta_v}
WHERE
key = {ql(self.key)}
''')
'''))


class CreateObject(SchemaObjectOperation):
Expand Down
9 changes: 6 additions & 3 deletions edb/pgsql/dbops/roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from ..common import quote_ident as qi
from ..common import quote_literal as ql


from . import base
from . import ddl

Expand Down Expand Up @@ -148,16 +149,18 @@ def code(self, block: base.PLBlock) -> str:
return ''

def generate_extra(self, block: base.PLBlock) -> None:
from .. import trampoline

super().generate_extra(block)
if getattr(self.object, 'single_role_metadata', None):
value = json.dumps(self.object.single_role_metadata)
query = base.Query(
query = base.Query(trampoline.fixup_query(
f'''
UPDATE edgedbinstdata.instdata
UPDATE edgedbinstdata_VER.instdata
SET json = {ql(value)}::jsonb
WHERE key = 'single_role_metadata'
'''
)
))
block.add_command(query.code(block))


Expand Down
12 changes: 6 additions & 6 deletions edb/pgsql/delta.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,17 +467,17 @@ def apply(
if not backend_params.has_create_database:
key = f'{edbdef.EDGEDB_TEMPLATE_DB}metadata'
lock = dbops.Query(
f'''
trampoline.fixup_query(f'''
SELECT
json
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = {ql(key)}
FOR UPDATE
INTO _dummy_text
'''
)
))
elif backend_params.has_superuser_access:
# Only superusers are generally allowed to make an UPDATE
# lock on shared catalogs.
Expand Down Expand Up @@ -3958,14 +3958,14 @@ def _fixup_configs(
validate=False,
)
spec_json = config.spec_to_json(new_local_spec)
self.pgops.add(dbops.Query(textwrap.dedent(f'''\
self.pgops.add(dbops.Query(textwrap.dedent(trampoline.fixup_query(f'''\
UPDATE
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
SET
json = {ql(spec_json)}
WHERE
key = 'configspec_ext';
''')))
'''))))

for sub in self.get_subcommands(type=s_pointers.DeletePointer):
if types.has_table(sub.scls, orig_schema):
Expand Down
16 changes: 8 additions & 8 deletions edb/pgsql/metaschema.py
Original file line number Diff line number Diff line change
Expand Up @@ -1067,7 +1067,7 @@ class GetBackendCapabilitiesFunction(trampoline.VersionedFunction):
SELECT
(json ->> 'capabilities')::bigint
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = 'backend_instance_params'
'''
Expand All @@ -1089,7 +1089,7 @@ class GetBackendTenantIDFunction(trampoline.VersionedFunction):
SELECT
(json ->> 'tenant_id')::text
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = 'backend_instance_params'
'''
Expand Down Expand Up @@ -1341,7 +1341,7 @@ class GetDatabaseMetadataFunction(trampoline.VersionedFunction):
(SELECT
json
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = "dbname" || 'metadata'
),
Expand Down Expand Up @@ -3369,7 +3369,7 @@ class SysConfigFullFunction(trampoline.VersionedFunction):
(s.value->>'typemod') AS typemod,
(s.value->>'backend_setting') AS backend_setting
FROM
edgedbinstdata.instdata as id,
edgedbinstdata_VER.instdata as id,
LATERAL jsonb_each(id.json) AS s
WHERE id.key LIKE 'configspec%'
),
Expand Down Expand Up @@ -3931,7 +3931,7 @@ def __init__(self, config_spec: edbconfig.Spec) -> None:
false
)
FROM
edgedbinstdata.instdata as id,
edgedbinstdata_VER.instdata as id,
LATERAL jsonb_each(id.json) AS s(key, val)
WHERE id.key = 'configspec_ext' AND s.key = "name"
'''
Expand Down Expand Up @@ -5392,7 +5392,7 @@ def _generate_single_role_views(schema: s_schema.Schema) -> List[dbops.View]:
SELECT
{format_fields(schema, Role, view_query_fields)}
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
WHERE
key = 'single_role_metadata'
AND json->>'tenant_id' = edgedb_VER.get_backend_tenant_id()
Expand Down Expand Up @@ -5438,7 +5438,7 @@ def _generate_single_role_views(schema: s_schema.Schema) -> List[dbops.View]:
SELECT
{format_fields(schema, annos, annos_link_fields)}
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
CROSS JOIN LATERAL
ROWS FROM (
jsonb_array_elements(json->'annotations')
Expand All @@ -5458,7 +5458,7 @@ def _generate_single_role_views(schema: s_schema.Schema) -> List[dbops.View]:
SELECT
{format_fields(schema, int_annos, int_annos_link_fields)}
FROM
edgedbinstdata.instdata
edgedbinstdata_VER.instdata
CROSS JOIN LATERAL
ROWS FROM (
jsonb_array_elements(json->'annotations__internal')
Expand Down
Loading

0 comments on commit c809efc

Please sign in to comment.