[Gfoss] sqlite - row number

a.furieri a lqt.it a.furieri a lqt.it
Mer 11 Dic 2013 17:26:24 CET


On Wed, 11 Dec 2013 16:56:20 +0100, Andrea Peri wrote:
> Ci sarebbe il ROWID.
> E' un attributo hidden che sqlite aggiunge sempre sistematicamente a
> ogni tabella che viene creata.
>
> Ma è a livello di tabella, non so' se la sua visibilita' si espande
> fino alla vista.
>

dov'e' il problema ?
qualsiasi tavola (vedi sotto per l'eccezione alla regola) ha sempre
una propria colonna "fantasma" di nome ROWID, che e' semplicemente
un alias name ma che sintatticamente funziona esattamente come
qualsiasi altro nome-colonna.

ergo, per rendere visibile il ROWID do una tavola dentro ad una
qualsiasi VIEW basta fare semplicemente qualcosa come:

CREATE VIEW armageddon AS
SELECT a.ROWID AS rowid_tavola1, ... altre colonne ...
FROM tavola1 AS a, tavola2 AS b
WHERE ... qualche clausola ...;


> Un potenziale problema per il futuro è che a partire dalla 3..8.2
> hanno avuto la bellissima pensata di rendere tale attributo
> facoltativo (sigh) e uindi in seguito non sar'a piu' vero.
>
> La 3.8.2 è uscita da circa una settimana.
>

per l'appunto: l'eccezione alla regola di cui sopra.

per quello che ho potuto verificare fino ad ora si sono
completamente scordati di aggiungere qualsiasi tipo di
supporto lato meta-info / catalogo.

ergo, una volta che la tavola e' stata creata con questa
stravagante nuova opzione WITHOUT ROWID diventa oltretutto
molto rognoso capire in modo predittivo se il ROWID c'e'
realmente oppure no.

sfortunatamente il meta-catalogo "sqlite3_master" non
fornisce nessuna informazione in proposito, e parrebbe
proprio che non ci sia neppure nessuna PRAGMA che
consente di interrogare questa proprieta'.

l'unico approccio possibile pare quello di andarsi direttamente
a verificare lo statement CREATE TABLE iniziale, in questo modo:

SELECT * FROM sqlite_master
WHERE sql LIKE '%WITHOUT ROWID%';

ma pare una soluzione decisamente fragile e molto poco convincente.

ciao Sandro



Maggiori informazioni sulla lista Gfoss