[GRASS5] SQLite

Radim Blazek radim.blazek at gmail.com
Fri Sep 16 05:17:08 EDT 2005


Hi,

I wrote SQLite driver. It is not compiled by default, 
IOW SQLite is not requirement (yet). To compile the 
driver you have to configure with --with-sqlite=yes
and optionaly --with-sqlite-includes= and 
--with-sqlite-libs=.

To use it, you have to set driver and database, e.g.:
db.connect driver=sqlite \
    database='$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db'

The database is created automaticaly when used first time.
That is SQLite feature followed also in the driver.

SQLite uses "type affinity", (http://www.sqlite.org/datatype3.html)
that means column types are recommended, but not required.

If the driver in GRASS has to determin column type, it first reads 
"affinity" if available (table column) and then data types of values
in the first row. If a column in a query does not come from table and there 
are no results, the driver cannot recognize column type.
Example:
echo "select 1 as col1 where 1 = 2" | db.select
WARNING: SQLite driver: column 'col1', SQLite type 0 is not supported

For direct work with SQLite database you can use CLI called 'sqlite3'
which is part of SQLite distribution or one of available GUIs, 
for example  Kexi: 
http://www.koffice.org/kexi/screenshots.php
http://www.koffice.org/kexi/

Related. I also added new type DB_SQL_TYPE_TEXT, which is mapped 
to DB_C_TYPE_STRING. 
That means you don't get warning like

  WARNING: column 'c3' : type text is stored as varchar(250) 
                 some data may be lost

until you try to copy the TEXT column with a driver which does not support
TEXT. Currently TEXT is support by sqlite and postgres driver.
It is possible and easy to add TEXT support to mysql driver, but I don't 
have MySQL installed. If you are interested in TEXT in mysql 
modify /drivers/mysql/create_table.c according to 
 /drivers/postgres/create_table.c


Radim




More information about the grass-dev mailing list