@@ -374,14 +374,20 @@ static struct custom_operations db_wrap_ops = {
374
374
};
375
375
376
376
#ifdef SQLITE_HAS_OPEN_V2
377
- static inline int get_open_flags (value v_mode , value v_mutex , value v_cache )
377
+ static inline int get_open_flags (value v_mode , value v_uri , value v_memory , value v_mutex , value v_cache )
378
378
{
379
379
int flags ;
380
380
switch (Int_val (v_mode )) {
381
381
case 0 : flags = (SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE ); break ;
382
382
case 1 : flags = SQLITE_OPEN_READWRITE ; break ;
383
383
default : flags = SQLITE_OPEN_READONLY ; break ;
384
384
}
385
+ if (Bool_val (v_uri )) {
386
+ flags |= SQLITE_OPEN_URI ;
387
+ }
388
+ if (Bool_val (v_memory )) {
389
+ flags |= SQLITE_OPEN_MEMORY ;
390
+ }
385
391
switch (Int_val (v_mutex )) {
386
392
case 0 : break ;
387
393
case 1 : flags |= SQLITE_OPEN_NOMUTEX ; break ;
@@ -402,13 +408,13 @@ static inline int get_open_flags(value v_mode, value v_mutex, value v_cache)
402
408
}
403
409
#endif
404
410
405
- CAMLprim value caml_sqlite3_open (
406
- value v_mode , value v_mutex , value v_cache , value v_vfs_opt , value v_file )
411
+ CAMLprim value caml_sqlite3_open_native (
412
+ value v_mode , value v_uri , value v_memory , value v_mutex , value v_cache , value v_vfs_opt , value v_file )
407
413
{
408
414
sqlite3 * db ;
409
415
int res ;
410
416
#ifdef SQLITE_HAS_OPEN_V2
411
- int flags = get_open_flags (v_mode , v_mutex , v_cache );
417
+ int flags = get_open_flags (v_mode , v_uri , v_memory , v_mutex , v_cache );
412
418
char * vfs ;
413
419
#endif
414
420
int file_len = caml_string_length (v_file ) + 1 ;
@@ -423,7 +429,7 @@ CAMLprim value caml_sqlite3_open(
423
429
memcpy (vfs , String_val (v_vfs ), vfs_len );
424
430
}
425
431
#else
426
- if (Int_val (v_mode ) || Int_val (v_mutex ) || Int_val (v_cache ))
432
+ if (Int_val (v_mode ) || Bool_val ( v_uri ) || Bool_val ( v_memory ) || Int_val (v_mutex ) || Int_val (v_cache ))
427
433
caml_failwith ("SQLite3 version < 3.5 does not support open flags" );
428
434
if (v_vfs_opt != Val_None )
429
435
caml_failwith ("SQLite3 version < 3.5 does not support VFS modules" );
@@ -466,6 +472,11 @@ CAMLprim value caml_sqlite3_open(
466
472
}
467
473
}
468
474
475
+ CAMLprim value caml_sqlite3_open_bytecode (value * argv , int argn )
476
+ {
477
+ return caml_sqlite3_open_native (argv [0 ], argv [1 ], argv [2 ], argv [3 ], argv [4 ], argv [5 ], argv [6 ]);
478
+ }
479
+
469
480
CAMLprim value caml_sqlite3_close (value v_db )
470
481
{
471
482
int ret , not_busy ;
0 commit comments