[Gfoss] problemi con indici spaziali sqlite

a.furieri a lqt.it a.furieri a lqt.it
Ven 21 Feb 2014 09:54:08 CET


On Fri, 21 Feb 2014 09:23:49 +0100, Andrea Peri wrote:
> Ho dato una lettura al documento che indicavi.
>
> Riassumendo:
> prima della sqlite 3.6.18 i trigger ricorsivi non erano supporti e
> quindi vanno eviate versioni di sqlite cosi' vecchie.
>
> Nelle versioni successive, pero' i trigger ricorsivi erano
> disabilitati by-default, ppunto come dicevi te.
> Quindi occorre sempre inserire una clausola
>
> PRAGMA recurvive_triggers=1
>
> Usando gli applicativi di spatialite:
>  CLI e Spatialite-GUI.
> Questa clausola
> recursive_triggers va settata comunque o è implicita ?
>

con tutte le versioni attuali (CLI/GUI) e' sempre disabilitata
by default; ma per analogia con quanto gia' implementato per
l'analoga "PRAGMA foreign_keys" presumo invece che sarebbe piu'
opportuno abilitarla implicitamente.


> Detto questo.
>
> se un disgraziato lavora su QGIS, editando un dataset tramite la
> finestra degli attributi, oppure trmaite le form customized che ora
> qgis consente, tale clausola "recursive_triggers=1" probabilmente è a
> 0 , ma come puo' fare per garantirsi di settarla a 1 ?
>

vista l'architettura SQLite, gestire questo tipo di PRAGMA ricade
sotto la piena responsabilita' del sw che attiva la connessione:
non c'e' nessun modo per renderele permanenti.

il problema e' abbastanza facile da affrontare per tutti i tools che
gestiscono le connessioni in modo centralizzato (p.es. il data-provider
di QGIS, oppure i tool spatialite); ma nel caso p.es. dei plug-in 
Python
ciascun singolo plug-in e' ovviamente libero di comportarsi come meglio
crede, e non c'e' nessuna possibilita' di imporre dall'esterno un
set di comportamenti predefiniti.


> Qui mi sorge un dubbio serio...
>
> E forse comincio a capire perche' a suo tempo ebbi dei problemi...
>

N.B.: ed a questo proposito a me inizia a sorgere anche un ulteriore
dubbio; con tutta la proliferazione di tools e di interfacce che
iniziano a circolare, siamo sempre sicuri che il supporto per i vincoli
relazionali venga attivato in tutti i casi ?

perche' se da qualche parte c'e' un tool che apre una connessione per
conto proprio al di fuori del data-provider (p.es. in Python) che non
cura di impostare correttamente questo parametro di connessione:

PRAGMA foreign_keys=1

allora potrebbe addirittura accadere che tutti i vincoli 
Primary/Foreign
Key possano venire allegramente violati senza nessuna conseguenza.
e naturalmente, in caso di mancata attivazione, non funzionano neppure
le sequenze di eventi ON CASCADE ... insomma, le conseguenze potrebbero
anche avere un impatto fortemente negativo, anche peggiore di quello
dovuto a mancata attivazione del supporto ricursivo per i triggers.

ciao Sandro


Maggiori informazioni sulla lista Gfoss