def testAddData(self): db = Database(MapDirectory(self.testdatadir), "db00", 'a') table = db.getTableByName("R_GR0") beforedata = [curs.getRow().asList() for curs in table.getCursor(0)] ## Add an empty row refrow = Row(table) refrow.setColumn(0, 1) table.writeRow(refrow) refdata = refrow.asList() db.close() db = Database(MapDirectory(self.testdatadir), "db00") table = db.getTableByName("R_GR0") aux = db.getTableByName("AUX_GR0") am = AuxTableManager(aux) afterdata = [curs.getRow().asList() for curs in table.getCursor(0)] for curs in table.getCursor(0): row = curs.getRow() index = row.asDict()['NAME_REF'] & 0xffffff offset = row.asDict()['NAME_REF'] >> 24 self.assertEqual(beforedata + [refdata], afterdata)
def close(self): if self.isopen: if self.mode in ['w', 'a']: self.maintable.setMode('w') self.addtable.setMode('w') self.auxtable.setMode('w') aux = AuxTableManager(self.auxtable) # Write features to database addrow = 0 for f in self.xfeatures: textslot = aux.appendText(f.name, self.maintable.getRowCount() + 1) # Update cell elements for ref, e in zip(f.cellelementrefs, f.getCellElements(self.map)): e.textslot = textslot layer = self.map.getLayerByIndex(f.layerindex) layer.updateCellElement(ref, e) row = Row(self.maintable) row.setColumnUInt( self.maintable.getColumnIndex("NAME_REF"), textslot) row.setColumnUInt( self.maintable.getColumnIndex("OBJ_TYPE"), f.getObjtypeIndex(self)) cellelementrefs = f.getCellElementRefs() if len(cellelementrefs) == 1: row.setColumnUInt( self.maintable.getColumnIndex("CELL_NUM"), cellelementrefs[0][0]) row.setColumnUInt( self.maintable.getColumnIndex("N_IN_C"), cellelementrefs[0][1] + 1) else: row.setColumnUInt( self.maintable.getColumnIndex("CELL_NUM"), 0x80000000 | (addrow + 1)) row.setColumnUInt( self.maintable.getColumnIndex("N_IN_C"), len(cellelementrefs)) for cref in cellelementrefs: rowrc = Row(self.addtable) rowrc.setColumnUInt( self.addtable.getColumnIndex("CELL_NUM"), cref[0]) rowrc.setColumnUInt( self.addtable.getColumnIndex("N_IN_C"), cref[1] + 1) self.addtable.writeRow(rowrc) addrow += 1 self.maintable.writeRow(row) self.isopen = False
def testSimple(self): db = Database(MapDirectory(self.testdatadir), "db00") table = db.getTableByName("R_GR0") for curs in table.getCursor(0): row = curs.getRow() aux = db.getTableByName("AUX_GR0") am = AuxTableManager(aux) index = row.asDict()['NAME_REF'] & 0xffffff offset = row.asDict()['NAME_REF'] >> 24
def _initDB(self, db): maintablename = "POIPOINT_" # Create tables if opened in append mode if self.mode == "w" and not maintablename in db.getTableNames(): createPOITables(db, self.poiprefix) # Open category manager self.catman.open(db, self.mode, poiprefix=self.poiprefix) self.auxtable = db.getTableByName("AUXTEXT_") self.maintable = db.getTableByName(maintablename) self.auxmanager = AuxTableManager(self.auxtable, endchar=chr(7), searchindex=False)
def _initDB(self, db): groupnumber = self.map.getGroupIndex(self) maintablename = "R_GR%d" % groupnumber addtablename = "RC_GR%d" % groupnumber auxtablename = "AUX_GR%d" % groupnumber # Create tables if opened in append mode if self.mode == "w" and not maintablename in db.getTableNames(): # Build main table fields = [ FieldStruct(name='NAME_REF', fd_type=FieldTypeLONGINT), FieldStruct(name='CELL_NUM', fd_type=FieldTypeLONGINT), FieldStruct(name='N_IN_C', fd_type=FieldTypeSHORTINT), FieldStruct(name='OBJ_TYPE', fd_type=FieldTypeCHARACTER) ] + self.extrafields db.addTable(name=maintablename, filename=self.map.mapnumstr + "gr%d.ext" % groupnumber, fieldstructlist=fields) # Build additional cells table fields = [ FieldStruct(name='CELL_NUM', fd_type=FieldTypeLONGINT), FieldStruct(name='N_IN_C', fd_type=FieldTypeSHORTINT), ] db.addTable(name=addtablename, filename=self.map.mapnumstr + "gr%d.clp" % groupnumber, fieldstructlist=fields) # Build aux table fields = [ FieldStruct(name='NAME_BUF', fd_type=FieldTypeCHARACTER, fd_dim1=248, fd_dim2=1) ] db.addTable(name=auxtablename, filename=self.map.mapnumstr + "gr%d.aux" % groupnumber, fieldstructlist=fields) self.maintable = db.getTableByName(maintablename) self.addtable = db.getTableByName(addtablename) self.auxtable = db.getTableByName(auxtablename) self.auxmanager = AuxTableManager(self.auxtable)
def close(self): if self.mode in ['w', 'a']: self.maintable.clear() self.auxtable.clear() aux = AuxTableManager(self.auxtable, endchar=chr(7), searchindex=False) # sort categories, note that this will create new category ids # and the features have to be updated if self.sortcategories: cattrans, subcattrans = self.catman.sortCategories() # translate categories for f in self.features: oldcatid = f.getCategoryId() oldsubcatid = f.getSubCategoryId() f.setCategoryId(cattrans[oldcatid]) f.setSubCategoryId(subcattrans[(oldcatid, oldsubcatid)]) # Sort features on ids self.features.sort(lambda x, y: cmp( (x.getCategoryId(), x.getSubCategoryId(), x.name.upper()), (y.getCategoryId(), y.getSubCategoryId(), y.name.upper()))) # Clear category statistics for cat in self.catman.getCategories(): cat.clearStatistics() for subcat in cat.getSubCategories(): subcat.clearStatistics() # Write features to database slot = 1 for f in self.features: # Update category statistics cat = self.catman.getCategory(f.getCategoryId()) subcat = cat.getSubCategory(f.getSubCategoryId()) cat.updateFromPOI(slot, f.getAux()[0]) subcat.updateFromPOI(slot, f.getAux()[0]) textslot = aux.appendText('\t'.join(f.getAux()) + '\t') # Update cell elements for ref, e in zip(f.cellelementrefs, f.getCellElements(self.map)): e.textslot = textslot e.setCategoryId(f.getCategoryId()) e.setSubCategoryId(f.getSubCategoryId()) layer = self.map.getPOILayers()[0] layer.updateCellElement(ref, e) row = Row(self.maintable) row.setColumnUInt(self.maintable.getColumnIndex("TEXT_SLOT"), textslot) row.setColumnUInt(self.maintable.getColumnIndex("CATG_ID"), f.getCategoryId()) row.setColumnUInt(self.maintable.getColumnIndex("SUBCAT_ID"), f.getSubCategoryId()) cellelementrefs = f.getCellElementRefs() row.setColumnUInt(self.maintable.getColumnIndex("CELL_NUMBER"), cellelementrefs[0][0]) row.setColumnUInt( self.maintable.getColumnIndex("NUMBER_IN_CELL"), cellelementrefs[0][1] + 1) self.maintable.writeRow(row) slot += 1 self.catman.close()