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