<div dir="ltr"><div><div><div><div><div><div>Ho dato una lettura al documento che indicavi.<br><br></div>Riassumendo:<br></div>prima della sqlite 3.6.18 i trigger ricorsivi non erano supporti e quindi vanno eviate versioni di sqlite cosi' vecchie.<br>
<br></div>Nelle versioni successive, pero' i trigger ricorsivi erano disabilitati by-default, ppunto come dicevi te.<br>Quindi occorre sempre inserire una clausola<br><br>PRAGMA recurvive_triggers=1<br><br></div>Usando gli applicativi di spatialite:<br>
CLI e Spatialite-GUI.<br>Questa clausola <br>recursive_triggers va settata comunque o è implicita ?<br><br></div>Detto questo.<br><br>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 ?<br>
<br>Qui mi sorge un dubbio serio...<br></div><div>E forse comincio a capire perche' a suo tempo ebbi dei problemi...<br><br></div>A<br><div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
Il giorno 20 febbraio 2014 22:31,  <span dir="ltr"><<a href="mailto:a.furieri@lqt.it" target="_blank">a.furieri@lqt.it</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">On Thu, 20 Feb 2014 21:44:33 +0100, Luca Lanteri wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Io creo la colonna della geometria con RecoverGeometryColumn(), poi<br>
popolo semplicemente i dati mediante un update della colonna<br>
geometrica, prendendo la geometria da un'atra tabella invece che<br>
dall'interfaccia di qgis. I trigger che popolano gli indici dovrebbero<br>
essere scatenati tanto dal mio update quanto da un inserimento diretto<br>
in QGIS, no ?<br>
<br>
</blockquote>
<br></div>
ok, almeno in teoria torna perfettamente:<br>
- RecoverGeometryColumn() dovrebbe installare tutti i triggers<br>
- dopo di che ogni volta che fai un'INSERT/UPDATE/DELETE l'R*Tree<br>
  verra' immediatamente aggiornato perche' ci pensano comunque i<br>
  triggers in modo automatico.<br>
<br>
natualmente, tra la teoria e la pratica c'e' sempre spazio a sufficienza<br>
perche' ci si infili in mezzo lo zoccolo bifido di Messer Satanasso :-)<div class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Spero che cosi sia, visto che sto utilizzando Sqlite proprio per poter<br>
utilizzare le funzionalità dei trigger.<br>
<br>
</blockquote>
<br></div>
questo fa nascere un dubbio ulteriore: i Triggers di SQLite sono basati<br>
su una buona implementazione, ma ci sono alcuni caveats da tener di conto:<br>
- alcune versioni molto vecchie (< 3.7.x) non dovrebbero essere in grado<br>
  di supportare Triggers ricursivi.<br>
  cioe', se un triggers fa partire un secondo trigger che ne scatena un<br>
  terzo etc, con le vecchie versioni dovrebbe partire solo il primo,<br>
  perche' poi la catena si spezza<br>
- ma anche con le versioni recenti, c'e' comunque un limite nei livelli<br>
  di nidificazione supportati dai triggers.<br>
  e comunque occorre invocare esplicitamente una PRAGMA per abilitare la<br>
  ricursivita' per i Triggers (by default e' comunque disabled).<br>
  vedi: <a href="http://www.sqlite.org/pragma.html#pragma_recursive_triggers" target="_blank">http://www.sqlite.org/pragma.<u></u>html#pragma_recursive_triggers</a><div class=""><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
A questo punto, qual'è lo strumento migliore per creare un DB<br>
Spatialite DOC, come lo chiamava Andrea ?<br>
<br>
</blockquote>
<br></div>
naturalmente il mio non e' un parere spassionato: ma non ho comunque<br>
il minimo dubbio. spatialite CLI oppure SpatiaLite GUI<br>
<br>
cioe' i due strumenti piu' strettamente integrati con il DBMS, direttamente<br>
gestiti dal medesimo gruppo di sviluppatori che segue il DBMS, e che sono<br>
quindi sempre certamente allineati con le specifiche tecniche del DBMS via<br>
via che vanno evolvendosi di versione in versione.<br>
e che piu' facilmente tendono a recepire una vasta casistica di casi d'uso<br>
che spaziono dalle micro-app per Android/smartphones fino alle piu'<br>
complesse applicazioni ultra-professionali in contesti enterprise.<div class=""><br>
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Io li ho sempre creati da QGIS, che tra l'altro nella versione 2.0 mi<br>
pare ci metta un tempo eterno (non vorrei che il problema fosse<br>
proprio li). Con la 2.1 i tempi di creazione sono decisamente più<br>
sensati.<br>
<br>
</blockquote>
<br></div>
in occasione del rilascio di splite v.4.0 e' stato introdotto un<br>
modestissimo cambiamento in una funzione SQL legata all'inizializzazione<br>
di un nuovo DB.<br>
modifica peraltro messa in forte rilievo nelle note di rilascio, ed<br>
abbondamente discussa piu' e piu' volte nella ML di spatialite.<br>
qgis 2.0 non ha supportato tempestivamente la modifica, e quindi e'<br>
soggetto ad una discreta lentezza in fase di creazione di un nuovo DB<br>
(anche se comunque alla fine i risultati del processo sono perfettamente<br>
corretti); viceversa poi qgis 2.1 e' stato correttamente aggiornato,<br>
ed ora alla fine tutto e' tornato a funzionare in modo ottimale.<div class=""><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Esiste un modo per verificare se un DB Spatialite è corretto ed ha<br>
tutti i trigger e gli indici a posto?<br>
<br>
</blockquote>
<br></div>
in linea di massima non e' possibile, perche' la casistica "degli<br>
interventi cinesi" (come li chiama Andrea) e' potenzialmente illimitata.<br>
in caso di dubbio una chiamata (tutta di seguito) a questa coppia di<br>
funzioni dovebbe rimettere tutti i Triggers per ciascuna colonna geometrica<br>
correttamente a posto:<br>
- DiscardGeometryColumn()<br>
- RecoverGeometryColumn()<div class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Se ci fossero problemi esiste il modo di farne un repair ?<br>
 <br>
</blockquote>
<br></div>
ci sono due funzioni SQL fatte apposta per verificare/ricostruire<br>
gli Spatial Index (quantomeno, nei casi d'uso piu' comuni e ragionevoli):<br>
- CheckSpatialIndex()<br>
- RepairSpatialIndex()<br>
<br>
qua ci trovi maggiori informazioni:<br>
<a href="http://www.gaia-gis.it/gaia-sins/SpatialIndex-Update.pdf" target="_blank">http://www.gaia-gis.it/gaia-<u></u>sins/SpatialIndex-Update.pdf</a><div class="HOEnZb"><div class="h5"><br>
<br>
ciao Sandro<br>
______________________________<u></u>_________________<br>
<a href="mailto:Gfoss@lists.gfoss.it" target="_blank">Gfoss@lists.gfoss.it</a><br>
<a href="http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss" target="_blank">http://lists.gfoss.it/cgi-bin/<u></u>mailman/listinfo/gfoss</a><br>
Questa e' una lista di discussione pubblica aperta a tutti.<br>
I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it.<br>
666 iscritti al 22.7.2013</div></div></blockquote></div><br><br clear="all"><br>-- <br>-----------------<br>Andrea Peri<br>. . . . . . . . . <br>qwerty àèìòù<br>-----------------<br>
</div>