provide table for UID mappings, fill during migration
This commit is contained in:
parent
2dbbf977d4
commit
16a8bcf5c3
3 changed files with 31 additions and 4 deletions
|
@ -2,6 +2,9 @@
|
|||
|
||||
"""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
|
||||
|
||||
|
||||
|
@ -11,11 +14,31 @@ class Storage(common.Storage):
|
|||
|
||||
def __init__(self, engine, schema=None):
|
||||
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):
|
||||
#table = getExistingTable(self.storage, self.tableName)
|
||||
#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
|
||||
|
||||
|
|
|
@ -6,9 +6,11 @@ from datetime import datetime
|
|||
import transaction
|
||||
|
||||
import config
|
||||
from cco.storage.common import Storage, getEngine
|
||||
from cco.storage.common import getEngine
|
||||
from cco.storage import tracking
|
||||
from loops.config.base import LoopsOptions
|
||||
from loops.storage.compat.common import Storage
|
||||
from loops import util
|
||||
|
||||
|
||||
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),
|
||||
timeStamp=ts, data=inTrack.data)
|
||||
container.upsert(track)
|
||||
ouid = util.getUidForObject(inTrack)
|
||||
storage.storeUid(ouid, track.uid)
|
||||
transaction.commit()
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# loops.storage.test.common
|
||||
# loops.storage.tests.common
|
||||
|
||||
"""Common definitions for testing the SQL-based storage implementation.
|
||||
"""
|
||||
|
|
Loading…
Add table
Reference in a new issue