I don't believe  in relational databases.  Obviously  an ACID transaction   upon
relational data (ie ennumerated objects that refer to other ennumerated objects)
are  sometimes  specifically  useful,  and often will kind of work and  besides,
that's what vendors are still selling...

rsdoiel's  recent  phost is about the lack of an equivalency  mechanism  between
CSVs and SQL tables. I believe in sqlite3 this is called a virtual table module.

It makes me feel a little like a sell-out  (like death) but with the game my
non-cyber-space  computer group is making, we are using sqlite3 for saving state
(focus  of next month) so this is on my mind.  However  I haven't  used  the csv
virtual table module mechanism, it just exists on the periphery of my knowledge.
Eskwewel     wizards     by    the   way   can    you    improve     my    quick
what-does-an-sql-ite3-statement-look-like-in-C  example (that creates a table in
test.db) ?

```C
#include <stdlib.h>
#include <stdio.h>

#include <sqlite3.h>

static int callback(void *, int, char **, char **);

int
main(void)
{
       sqlite3 *db;
       char *zErrMsg = 0;
       int rc;

       rc = sqlite3_open("test.db", &db);
       if (rc) {
           fprintf(stderr, "Can't open db: %s\n", sqlite3_errmsg(db));
           sqlite3_close(db);
           return EXIT_FAILURE;
       }
       rc = sqlite3_exec(db,
           "CREATE TABLE Foo ("
           "Key int, "
           "Name varchar(255), "
           "Story text)",
           callback, 0, &zErrMsg);
       if (rc) {
           fprintf(stderr, "SQL failure: %s\n", sqlite3_errmsg(db));
           sqlite3_close(db);
           return EXIT_FAILURE;
       }

       sqlite3_close(db);
       puts("");

       return EXIT_SUCCESS;
}

static int
callback(void *NotUsed, int N, char **results, char **azColName)
{
       return EXIT_SUCCESS;
}
```