provide table for UID mappings, fill during migration

This commit is contained in:
Helmut Merz 2024-02-01 11:43:37 +01:00
parent 2dbbf977d4
commit 16a8bcf5c3
3 changed files with 31 additions and 4 deletions

View file

@ -2,6 +2,9 @@
"""Compatibility layer on cco.storage: common functionality.""" """Compatibility layer on cco.storage: common functionality."""
from sqlalchemy import Table, Column, BigInteger, Text
from zope.sqlalchemy import mark_changed
from cco.storage import common from cco.storage import common
@ -11,11 +14,31 @@ class Storage(common.Storage):
def __init__(self, engine, schema=None): def __init__(self, engine, schema=None):
super(Storage, self).__init__(engine, schema) super(Storage, self).__init__(engine, schema)
#self.uidTable = self.getUidTable(self.schema) self.uidTable = self.getUidTable(self.schema)
self.session = self.Session()
def storeUid(self, ouid, nuid):
ouid = int(ouid)
t = self.uidTable
stmt = t.update().values(standard=nuid).where(t.c.legacy == ouid)
n = self.session.execute(stmt).rowcount
if n == 0:
stmt = t.insert().values(legacy=ouid, standard=nuid)
self.session.execute(stmt)
mark_changed(self.session)
def getUidTable(self, schema=None): def getUidTable(self, schema=None):
#table = getExistingTable(self.storage, self.tableName) #table = getExistingTable(self.storage, self.tableName)
#if table is None: #if table is None:
return createUidTable(self.storage) return createUidTable(self)
def createUidTable(storage):
metadata = storage.metadata
cols = [Column('legacy', BigInteger, primary_key=True),
Column('standard', Text, nullable=False, unique=True, index=True)]
table = Table('uid_mapping', metadata, *cols, extend_existing=True)
metadata.create_all(storage.engine)
return table

View file

@ -6,9 +6,11 @@ from datetime import datetime
import transaction import transaction
import config import config
from cco.storage.common import Storage, getEngine from cco.storage.common import getEngine
from cco.storage import tracking from cco.storage import tracking
from loops.config.base import LoopsOptions from loops.config.base import LoopsOptions
from loops.storage.compat.common import Storage
from loops import util
def migrate(loopsRoot, recFolderName, factory=tracking.Container): def migrate(loopsRoot, recFolderName, factory=tracking.Container):
@ -35,5 +37,7 @@ def migrate(loopsRoot, recFolderName, factory=tracking.Container):
track = container.itemFactory(*head, trackId=int(id), track = container.itemFactory(*head, trackId=int(id),
timeStamp=ts, data=inTrack.data) timeStamp=ts, data=inTrack.data)
container.upsert(track) container.upsert(track)
ouid = util.getUidForObject(inTrack)
storage.storeUid(ouid, track.uid)
transaction.commit() transaction.commit()

View file

@ -1,4 +1,4 @@
# loops.storage.test.common # loops.storage.tests.common
"""Common definitions for testing the SQL-based storage implementation. """Common definitions for testing the SQL-based storage implementation.
""" """