sqlite3_filename sqlite3_create_filename(const char *zDatabase, const char *zJournal, const char *zWal, int nParam, const char **azParam); void sqlite3_free_filename(sqlite3_filename);
Эти интерфейсы обеспечиваются для использования внедрениями прокладки VFS и не полезны за пределами этого контекста.
sqlite3_create_filename(D,J,W,N,P) ассигнует память, чтобы держать версию имени файла базы данных D с соответствующим файлом J журнала и файлом W WAL и с парами ключа/значений N параметров URI в массиве P. Результат sqlite3_create_filename(D,J,W,N,P) это указатель на имя файла базы данных, которое безопасно передать таким функциям, как:
Параметр P в sqlite3_create_filename(D,J,W,N,P) должен быть множеством 2*N указателей на последовательности. Каждая пара указателей в этом множестве соответствует ключу и значению для параметра запроса. Параметр P может быть NULL, если N = 0. Ни один из 2*N указателей во множестве P не может быть NULL, ключевые указатели не должны быть пустыми строками. Ни один из параметров D, J или W в sqlite3_create_filename(D,J,W,N,P) не может быть NULL, хотя они могут быть пустыми строками.
sqlite3_free_filename(Y) освобождает выделение памяти, ранее полученное из sqlite3_create_filename(). sqlite3_free_filename(Y), где Y = NULL ничего не делает.
Если Y для sqlite3_free_filename(Y) является чем-нибудь кроме NULL или указателя, ранее полученного из sqlite3_create_filename(), то плохие вещи, такие как повреждение кучи или segfaults могут произойти. Значение Y не должна использоваться снова, после вызова sqlite3_free_filename(Y). Это означает что, если метод sqlite3_vfs.xOpen() VFS вызвали, используя Y, то соответствующий метод [sqlite3_module.xClose() должен также быть вызван до запроса sqlite3_free_filename(Y).