Загрузить базу данных SQLite3 из виртуальной файловой системы (afero) - PullRequest
0 голосов
/ 29 августа 2018

Установка:

1) Файл базы данных SQLite3 загружается на файловый сервер

2) Файлы сохраняются в виртуальной файловой системе

3) Я хочу выполнить sql запросы к этой базе данных

В настоящее время я использую go-sqlite3 с файлом базы данных, расположенным в afero .


Вопрос:

Есть ли возможность загрузить файл базы данных в go-sqlite3 с другим источником, чем файл из файловой системы os.


Текущий подход:

Мое текущее решение - скопировать файл из afero в каталог os.TempDir (), но это не работает с нашим ci и не является реальным решением, поскольку он больше не использует выделенную файловую систему.

1 Ответ

0 голосов
/ 29 августа 2018

После небольшого погружения с источником я вижу это в sqlite3.go

name := C.CString(dsn)
defer C.free(unsafe.Pointer(name))
rv := C._sqlite3_open_v2(name, &db,
    mutex|C.SQLITE_OPEN_READWRITE|C.SQLITE_OPEN_CREATE,
     nil)

Таким образом, это отвечает на ваш вопрос, фактическое открытие базы данных происходит «вне» Go и «внутри» библиотеки sqlite3. Если мы проверим функцию sqlite3_open_v2, мы увидим, что для нее требуется имя файла:

int sqlite3_open_v2(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb,         /* OUT: SQLite db handle */
  int flags,              /* Flags */
  const char *zVfs        /* Name of VFS module to use */
);

Я думаю, что единственный способ здесь - реализовать собственную Sqlite VFS , которая каким-то образом взаимодействует с afero абстракциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...