@@ -77,7 +77,8 @@ def append(self, ref):
7777 self ._aspace ._insert_reference_threadsafe (self .nodeid , ref , commit = True )
7878
7979 def remove (self , ref ):
80- raise NotImplementedError
80+ self ._aspace ._remove_reference_threadsafe (self .nodeid , ref , commit = True )
81+ list .remove (self , ref )
8182
8283
8384class AddressSpaceSQLite (AddressSpace ):
@@ -437,9 +438,8 @@ def _insert_reference(backend, nodeid, ref, table=REFS_TABLE_NAME, commit=True):
437438 assert (isinstance (ref .NodeClass , (int , ua .uaprotocol_auto .NodeClass )))
438439 assert (isinstance (ref .TypeDefinition , ua .uatypes .NodeId ))
439440
440- binNodeId = ua .ua_binary .nodeid_to_binary (nodeid ) # Our own nodeid
441- refNodeId = ua .ua_binary .nodeid_to_binary (ref .NodeId ) # Referred nodeid
442- primaryKey = binNodeId + refNodeId + pack (">B" , int (ref .IsForward ))
441+ binNodeId , refNodeId , primaryKey = \
442+ AddressSpaceSQLite ._calcRefPrimaryKey (nodeid , ref )
443443
444444 cmd = 'INSERT OR REPLACE INTO "{tn}" VALUES ({q})' .format (tn = table , q = ', ' .join ('?' * 13 ))
445445 params = (
@@ -459,6 +459,26 @@ def _insert_reference(backend, nodeid, ref, table=REFS_TABLE_NAME, commit=True):
459459 )
460460 backend .execute_write (cmd , params = params , commit = commit )
461461
462+ def _calcRefPrimaryKey (nodeid , ref ):
463+ binNodeId = ua .ua_binary .nodeid_to_binary (nodeid ) # Our own nodeid
464+ refNodeId = ua .ua_binary .nodeid_to_binary (ref .NodeId ) # Referred nodeid
465+ primaryKey = binNodeId + refNodeId + pack (">B" , int (ref .IsForward ))
466+ return binNodeId , refNodeId , primaryKey
467+
468+ def _remove_reference_threadsafe (self , nodeid , ref , table = REFS_TABLE_NAME , commit = True ):
469+ with self ._lock :
470+ AddressSpaceSQLite ._remove_reference (self .backend , nodeid , ref , table , commit = commit )
471+
472+ @staticmethod
473+ def _remove_reference (backend , nodeid , ref , table = REFS_TABLE_NAME , commit = True ):
474+ cmd = 'DELETE FROM "{tn}" WHERE _Id = ?' .format (tn = table )
475+ binNodeId , refNodeId , primaryKey = \
476+ AddressSpaceSQLite ._calcRefPrimaryKey (nodeid , ref )
477+ params = (
478+ sqlite3 .Binary (primaryKey ),
479+ )
480+ backend .execute_write (cmd , params = params , commit = commit )
481+
462482 @staticmethod
463483 def _read_reference_row (row ):
464484 ref = ua .uaprotocol_auto .ReferenceDescription ()
0 commit comments