コード例 #1
0
ikptr
ik_sqlite3_uri_parameter (ikptr s_filename, ikptr s_param_name, ikpcb * pcb)
{
#ifdef HAVE_SQLITE3_URI_PARAMETER
  const char *	filename	= IK_CHARP_FROM_BYTEVECTOR_OR_POINTER_OR_MBLOCK(s_filename);
  const char *	param_name	= IK_CHARP_FROM_BYTEVECTOR_OR_POINTER_OR_MBLOCK(s_param_name);
  const char *	rv;
  rv = sqlite3_uri_parameter(filename, param_name);
  return (rv)? ika_bytevector_from_cstring(pcb, rv) : IK_FALSE;
#else
  feature_failure(__func__);
#endif
}
コード例 #2
0
ファイル: PackageService.cpp プロジェクト: noriter/nit
	static int VFSAccess(sqlite3_vfs* pVfs, const char* zPath, int flags, int* pResOut)
	{
		*pResOut = 0;

		if (flags != SQLITE_ACCESS_EXISTS && flags != SQLITE_ACCESS_READ)
			return SQLITE_OK;

		// Allow *.db or *.sqlite as file extension.
		// It seems to be safe to ignore other extensions.
		// (the db is readonly but these extensions are -journal -wal etc. for writing purpose)

		if (!Wildcard::match("*.db", zPath) && !Wildcard::match("*.sqlite", zPath))
			return SQLITE_OK;

		Ref<StreamLocator> locator;
		const char* packname = sqlite3_uri_parameter(zPath, "pack");

		if (packname)
		{
			if (strcmp(packname, "$bundle") == 0)
				locator = g_Package->getBundle();
			else
				locator = g_Package->load(packname);
		}
		else if (g_SessionService && g_Session)
			locator = g_Session->getPackage();

		if (locator == NULL)
			return SQLITE_OK;

		Ref<StreamSource> source = locator->locate(zPath, false);
		if (source == NULL)
			return SQLITE_OK;

		*pResOut = 1;
		return SQLITE_OK;
	}
コード例 #3
0
ファイル: PackageService.cpp プロジェクト: noriter/nit
	static int VFSOpen(sqlite3_vfs* pVfs, const char* zPath, sqlite3_file* pFile, int flags, int* pOutFlags)
	{
		const NitSqliteVFS* vfs = (NitSqliteVFS*)pVfs;
		DBFile* file = (DBFile*)pFile;

		// methods must be set to NULL, even if xOpen call fails
		file->methods = NULL;

		// Only permit readonly permission
		if ( 
			zPath == NULL ||
			(flags & SQLITE_OPEN_DELETEONCLOSE) ||
			(flags & SQLITE_OPEN_READWRITE) ||
			(flags & SQLITE_OPEN_CREATE) ||
			!(flags & SQLITE_OPEN_READONLY) ||
			!(flags & SQLITE_OPEN_MAIN_DB) 
			)
			return SQLITE_PERM;

		Ref<StreamLocator> locator;
		const char* packname = sqlite3_uri_parameter(zPath, "pack");

		if (packname)
		{
			if (strcmp(packname, "$bundle") == 0)
				locator = g_Package->getBundle();
			else
				locator = g_Package->load(packname);
		}
		else if (g_SessionService && g_Session)
			locator = g_Session->getPackage();

		if (locator == NULL)
		{
			LOG(0, "*** can't find package for db path '%s'\n", zPath);
			return SQLITE_CANTOPEN;
		}

		Ref<StreamSource> source = locator->locate(zPath, false);
		if (source == NULL)
		{
			LOG(0, "*** can't find db file '%s' from '%s'\n", zPath, locator->getName().c_str());
			return SQLITE_CANTOPEN;
		}

		Ref<StreamReader> reader = source->open();

		if (dynamic_cast<FileReader*>(reader.get()) == NULL)
		{
			LOG(0, "?? db file '%s' is not based on a real file\n", source->getUrl().c_str());
		}

		if (!(reader->isSized() && reader->isSeekable()) )
		{
			LOG(0, "?? db file '%s': whole contents into memory\n", source->getUrl().c_str());
			reader = new MemoryBuffer::Reader(reader);
		}

		file->reader = reader;

		file->size = reader->getSize();
		file->locator = locator;
		locator->incUseCount();

		file->methods = vfs->methods;

		if (pOutFlags)
			*pOutFlags = flags;

		return SQLITE_OK;
	}
コード例 #4
0
ファイル: SQLite.cpp プロジェクト: Xaymar/BlitzUtility
DLL_FUNCTION(const char*) BU_SQLite_URI_Parameter(const char* zFilename, const char* zParam) {
#pragma comment(linker, "/EXPORT:BU_SQLite_URI_Parameter=_BU_SQLite_URI_Parameter@8")
	return sqlite3_uri_parameter(zFilename, zParam);
}