giovedì 24 giugno 2010

Pl/Java: patch per cancellare l'operazione in corso da un trigger

Lo scorso weekend ho lavorato un po' sul codice di Pl/Java per studiare se fosse possibile cancellare una operazione in atto (statement) tramite un oggetto di tipo TriggerData. Dai test che ho effettuato posso affermare di aver raggiunto lo scopo! La patch aggiunge un paio di metodi all'interfaccia TriggerData, in particolare cancelCurrentStatement e isCurrentStatementCancelled. Questi due metodi vanno ad impostare un flag che ordina poi all'oggetto TriggerData di resituire un valore che viene interpretato come NULL al backend PostgreSQL. Così facendo si ottiene che il backend annulla l'operazione corrente. 

La patch non si conclude qui: ho anche fatto in modo che eventuali ResultSet ottenuti dopo che l'operazione è stata impostata come "cacellata" siano sempre e solo in lettura. I ResultSet ottenuti prima saranno in lettura/scrittura (ovviamente si parla di quelli new) ma ciò non costituisce un problema visto che poi l'operazione verrà comunque cancellata dal backend. Avere però un ResultSet in sola lettura aiuta a mantenere coerente l'interfaccia verso l'utente.

La patch è inserita nella coda e la si può trovare qui, dove è anche disponibile un semplice trigger per testarne il funzionamento.

Nessun commento: