Add support for more SQLite database open options. (#565)
* Add support for in-memory SQLite databases. * Add support for opening SQLite databases via file URI.
This commit is contained in:
parent
19db7aef46
commit
70d81430f8
@ -12,7 +12,9 @@ elif binary.compiler.vendor == 'msvc':
|
|||||||
|
|
||||||
binary.compiler.defines += [
|
binary.compiler.defines += [
|
||||||
'SQLITE_OMIT_LOAD_EXTENSION',
|
'SQLITE_OMIT_LOAD_EXTENSION',
|
||||||
'SQLITE_THREADSAFE'
|
'SQLITE_THREADSAFE',
|
||||||
|
'SQLITE_USE_URI',
|
||||||
|
'SQLITE_ALLOW_URI_AUTHORITY',
|
||||||
]
|
]
|
||||||
if builder.target_platform == 'linux':
|
if builder.target_platform == 'linux':
|
||||||
binary.compiler.postlink += ['-ldl', '-lpthread']
|
binary.compiler.postlink += ['-ldl', '-lpthread']
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "extension.h"
|
#include "extension.h"
|
||||||
#include "SqDriver.h"
|
#include "SqDriver.h"
|
||||||
#include "SqDatabase.h"
|
#include "SqDatabase.h"
|
||||||
|
#include <am-string.h>
|
||||||
|
|
||||||
SqDriver g_SqDriver;
|
SqDriver g_SqDriver;
|
||||||
|
|
||||||
@ -179,6 +180,15 @@ IDatabase *SqDriver::Connect(const DatabaseInfo *info, bool persistent, char *er
|
|||||||
{
|
{
|
||||||
ke::AutoLock lock(&m_OpenLock);
|
ke::AutoLock lock(&m_OpenLock);
|
||||||
|
|
||||||
|
/* Full path to the database file */
|
||||||
|
char fullpath[PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
|
if (strcmp(info->database, ":memory:") == 0 || strncmp(info->database, "file:", 5) == 0)
|
||||||
|
{
|
||||||
|
ke::SafeStrcpy(fullpath, sizeof(fullpath), info->database);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* Format our path */
|
/* Format our path */
|
||||||
char path[PLATFORM_MAX_PATH];
|
char path[PLATFORM_MAX_PATH];
|
||||||
size_t len = libsys->PathFormat(path, sizeof(path), "sqlite/%s", info->database);
|
size_t len = libsys->PathFormat(path, sizeof(path), "sqlite/%s", info->database);
|
||||||
@ -196,7 +206,6 @@ IDatabase *SqDriver::Connect(const DatabaseInfo *info, bool persistent, char *er
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Test the full path */
|
/* Test the full path */
|
||||||
char fullpath[PLATFORM_MAX_PATH];
|
|
||||||
g_pSM->BuildPath(Path_SM, fullpath, sizeof(fullpath), "data/%s", path);
|
g_pSM->BuildPath(Path_SM, fullpath, sizeof(fullpath), "data/%s", path);
|
||||||
if (!libsys->IsPathDirectory(fullpath))
|
if (!libsys->IsPathDirectory(fullpath))
|
||||||
{
|
{
|
||||||
@ -243,6 +252,7 @@ IDatabase *SqDriver::Connect(const DatabaseInfo *info, bool persistent, char *er
|
|||||||
|
|
||||||
/* Build the FINAL path. */
|
/* Build the FINAL path. */
|
||||||
g_pSM->BuildPath(Path_SM, fullpath, sizeof(fullpath), "data/sqlite/%s.sq3", info->database);
|
g_pSM->BuildPath(Path_SM, fullpath, sizeof(fullpath), "data/sqlite/%s.sq3", info->database);
|
||||||
|
}
|
||||||
|
|
||||||
/* If we're requesting a persistent connection, see if something is already open */
|
/* If we're requesting a persistent connection, see if something is already open */
|
||||||
if (persistent)
|
if (persistent)
|
||||||
|
Loading…
Reference in New Issue
Block a user