[Gfoss] SpatiaLite conteggio righe tabelle database

a.furieri a lqt.it a.furieri a lqt.it
Mar 30 Apr 2019 10:04:27 CEST


On Mon, 29 Apr 2019 23:36:01 -0700 (MST), pigreco wrote:
> a.furieri wrote
>>>
>>> Ci riesco con questa, ma sembra bruttina:
>>>
>>> SELECT tbl_name,
>>>        eval('select count(*) from ' || tbl_name ) AS nro_righe
>>> FROM sqlite_master
>>> where type='table'
>>> and name not like '%geom%'
>>> and name not like '%spatial%'
>>> and name not like '%sql%'
>>> and name not like '%raster%'
>>> and name not like '%SE%'
>>> and name not like '%vector_%'
>>> and sql not like '%geom%';
>>>
>>
>> SELECT tbl_name,
>>         eval('SELECT count(*) FROM "' || tbl_name || '"') AS 
>> nro_righe
>> FROM sqlite_master
>> WHERE type='table'
>> AND name NOT IN (SELECT f_table_name FROM geometry_columns)
>> ORDER BY tbl_name;
>>
>> ciao Sandro
>
> Buongiorno e grazie per la risposta,
> la query proposta ottiene tutte le tabelle del database tranne quelle 
> con
> geometry e quindi prende anche quelle tabelle del database che non ho 
> creato
> direttamente io, es: prende le tabelle idx..., SE.... ecc...
> il mio intendo era quello di 'acchiappare' solo le tabelle che ho 
> creato e
> popolato io.
>

SELECT tbl_name,
eval('SELECT count(*) FROM "' || tbl_name || '"') AS nro_righe
FROM sqlite_master
WHERE type = 'table' AND sql NOT LIKE 'CREATE VIRTUAL TABLE %'
AND name NOT IN (SELECT f_table_name FROM geometry_columns)
AND name NOT IN (SELECT 'idx_' || f_table_name || '_' || 
f_geometry_column
          FROM geometry_columns WHERE spatial_index_enabled = 1)
AND name NOT IN (SELECT 'idx_' || f_table_name || '_' || 
f_geometry_column || '_node'
          FROM geometry_columns WHERE spatial_index_enabled = 1)
AND name NOT IN (SELECT 'idx_' || f_table_name || '_' || 
f_geometry_column || '_parent'
          FROM geometry_columns WHERE spatial_index_enabled = 1)
AND name NOT IN (SELECT 'idx_' || f_table_name || '_' || 
f_geometry_column || '_rowid'
          FROM geometry_columns WHERE spatial_index_enabled = 1)
AND name NOT IN ('geometry_columns', 'geometry_columns_auth', 
'geometry_columns_time')
ORDER BY tbl_name;

Note:
===========================
1. con queste modifiche filtra automaticamente qualsiasi
    SpatialIndex e tutte le VirtualTables
2. l'ultima lista (geometry_columns etc) va espansa fino
    a definire l'elenco completo di tutte le meta-tavole
    utilizzate internamente da SpatiaLite.
    lavoro noiosetto ma per nulla difficoltoso, basta solo
    un pizzico di pazienza.
3. non copre eventuali TopoGeometry, TopoNetworks e
    RasterCoverages, ma non credo che ti interessino.
    nal caso, il problema e' facilmente risolvibile
    ricalcando lo schema applicato agli Spatial Index;
    occorre fare una subquery sulla metatavola madre
    per ricavare tutti i nomi delle tavole figlie.

ciao Sandro


Maggiori informazioni sulla lista Gfoss