Small. Fast. Reliable.
Choose any three.
*** 87,89 ****
--- 87,147 ----
  
  My proposition : look at Firebird RDBMS at http://firebird.sourceforge.net and also http://www.ibphoenix.com {linebreak} 
  It is using multigenerational database engine for years . There are some technical FAQ articles on those sites, describing in detail something called here "shadow pager" (multiversioning database)
+ 
+ ====
+ _By kevin lyda on 2005-03-04:_
+ 
+ two suggestions:
+ 
+ it would be nice to have gcc idiot check the _printf functions.  there's an __attribute__ method to do this, but it gets confused by the %q and %Q format codes.  w/o changes to gcc it's not possible to do.  if i pestered the gcc folks - and i don't know how successful i'd be - would there be any interest in modifying the headerfiles to define these attributes:
+ 
+     int sqlite_exec_printf(sqlite *db,
+                            char *sqlfmt,
+                            int (*xCallback)(void*,int,char**,char**),
+                            void *pArg,
+                            char **errmsg,
+                            ...)  __attribute__((format(printf, 2, 6)));
+ 
+ it really does catch a fair number of silly and yet painful errors.
+ 
+ second suggestion:
+ 
+ i sometimes would like to log all my sql calls - but using my own logging functions.  i'd also like it to be something i can turn on and off at run time.  using version 2.8.15 i made the following change:
+ 
+     --- sqlite/src/main.c   13 Jan 2005 10:54:45 -0000      1.1
+     +++ sqlite/src/main.c   4 Mar 2005 13:01:45 -0000
+     @@ -463,6 +463,9 @@
+      const char sqlite_encoding[] = "iso8859";
+      #endif
+  
+     +/* logger function */
+     +void (*sqlite_logger_func)(const char *);
+     +
+      /*
+      ** Open a new SQLite database.  Construct an "sqlite" structure to define
+      ** the state of this database and return a pointer to that structure.
+     @@ -635,6 +638,9 @@
+        int nCallback;
+  
+        if( zSql==0 ) return SQLITE_OK;
+     +  if (sqlite_logger_func)
+     +      (*sqlite_logger_func)(zSql);
+     +
+        while( rc==SQLITE_OK && zSql[0] ){
+          pVm = 0;
+          rc = sqlite_compile(db, zSql, &zLeftover, &pVm, pzErrMsg);
+ 
+     --- sqlite/src/sqlite.h.in      13 Jan 2005 10:54:46 -0000      1.1
+     +++ sqlite/src/sqlite.h.in      4 Mar 2005 13:09:07 -0000
+     @@ -59,6 +59,11 @@
+      typedef struct sqlite sqlite;
+  
+      /*
+     +** you can log all sql statements by assigning this variable a function
+     +*/
+     +extern void (*sqlite_logger_func)(const char *);
+     +
+     +/*
+      ** A function to open a new sqlite database.
+      **
+      ** If the database does not exist and mode indicates write