--- Cyrus Durgin <[EMAIL PROTECTED]> wrote:
> i'm wondering if there's a "standard" way to get an open file handle from an
> sqlite3 pointer using the C API.  anyone know?

Patch below implements getting a file descriptor for a UNIX database 
using the existing sqlite3 API function sqlite3_file_control() and a 
new non-standard option SQLITE_FCNTL_FD. If the function succeeds 
SQLITE_OK is returned.

Sample usage:

 // The second parameter to sqlite3_file_control is the database alias.
 // "main" is the default database alias.
 // If you ran the command "attach database 'test.db' as 'whatever';",
 // then "whatever" would be the second parameter.
 int fd = -1;
 if (SQLITE_OK == sqlite3_file_control(db, "main", SQLITE_FCNTL_FD, &fd)){
   printf("\nSQLITE_FCNTL_FD = %d\n", fd);
 }

Patch is OS dependent. To add Windows support, change winFileControl in 
os_win.c in the same way as unixFileControl below.

_________________________________________________________________________
Index: src/os_unix.c
===================================================================
RCS file: /sqlite/sqlite/src/os_unix.c,v
retrieving revision 1.169
diff -u -3 -p -r1.169 os_unix.c
--- src/os_unix.c       20 Sep 2007 10:02:54 -0000      1.169
+++ src/os_unix.c       10 Oct 2007 03:51:41 -0000
@@ -2018,6 +2018,10 @@ static int unixFileControl(sqlite3_file
       *(int*)pArg = ((unixFile*)id)->locktype;
       return SQLITE_OK;
     }
+    case SQLITE_FCNTL_FD: {
+      *(int*)pArg = ((unixFile*)id)->h;
+      return SQLITE_OK;
+    }
   }
   return SQLITE_ERROR;
 }
Index: src/sqlite.h.in
===================================================================
RCS file: /sqlite/sqlite/src/sqlite.h.in,v
retrieving revision 1.266
diff -u -3 -p -r1.266 sqlite.h.in
--- src/sqlite.h.in     3 Oct 2007 20:15:28 -0000       1.266
+++ src/sqlite.h.in     10 Oct 2007 03:51:42 -0000
@@ -557,6 +557,7 @@ struct sqlite3_io_methods {
 ** is defined.
 */
 #define SQLITE_FCNTL_LOCKSTATE        1
+#define SQLITE_FCNTL_FD               64

 /*
 ** CAPI3REF: Mutex Handle




       
____________________________________________________________________________________
Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, 
photos & more. 
http://mobile.yahoo.com/go?refer=1GNXIC

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to