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."""
|
"""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
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue