Exemple #1
0
void CreateMBTDataFile(char *filename)
{

	Field *field;
	unsigned int fileID; 

	// create the file, set header,close file
	fileID = DB_Create(filename);

	// create header record
     	field = DBField_Create("EUR_USD",DB_LEN16,-1);
        DBHeader_AddField(fileID,field);
	field = DBField_Create("EUR_CAD",DB_LEN16,0);
        DBHeader_AddField(fileID,field);
	field = DBField_Create("EUR_JPY",DB_LEN16,1);
        DBHeader_AddField(fileID,field);

	// update file header		
	DB_WriteHeader(fileID);
	DB_WriteFields(fileID);

	// close file
	DB_Close (fileID);
}
Exemple #2
0
/**
 * @brief DB_Init
 *
 * @return
 */
int DB_Init()
{
	char *to_ospath;

	isDBActive = qfalse;

	db_mode = Cvar_Get("db_mode", "0", CVAR_ARCHIVE | CVAR_LATCH);
	db_url  = Cvar_Get("db_url", "etl.db", CVAR_ARCHIVE | CVAR_LATCH); // filename in path (not real DB URL for now)

	if (db_mode->integer < 1 || db_mode->integer > 2)
	{
		Com_Printf("... DBMS is disabled\n");
		return 0; // return 0! - see isDBActive
	}

	Com_Printf("SQLite3 libversion %s - database URL '%s' - %s\n", sqlite3_libversion(), db_url->string, db_mode->integer == 1 ? "in-memory" : "in file");

	if (!db_url->string[0]) // FIXME: check extension db
	{
		Com_Printf("... can't init database - empty URL\n");
		return 1;
	}

	to_ospath                        = FS_BuildOSPath(Cvar_VariableString("fs_homepath"), db_url->string, "");
	to_ospath[strlen(to_ospath) - 1] = '\0';

	if (FS_SV_FileExists(db_url->string))
	{
		int result;

		Com_Printf("... loading existing database '%s'\n", to_ospath);

		if (db_mode->integer == 1)
		{
			// init memory table
			//result = sqlite3_open(":memory:", &db); // memory table, not shared see https://www.sqlite.org/inmemorydb.html
			result = sqlite3_open("file::memory:?cache=shared", &db); // In-memory databases with shared cache

			if (result != SQLITE_OK)
			{
				Com_Printf("... failed to open memory database - error: %s\n", sqlite3_errstr(result));
				(void) sqlite3_close(db);
				return 1;
			}

			// load from disk into memory
			result = DB_LoadOrSaveDb(db, to_ospath, 0);

			if (result != SQLITE_OK)
			{
				Com_Printf("... WARNING can't load database file %s\n", db_url->string);
				return 1;
			}
		}
		else if (db_mode->integer == 2)
		{
			result = sqlite3_open(to_ospath, &db);

			if (result != SQLITE_OK)
			{
				Com_Printf("... failed to open file database - error: %s\n", sqlite3_errstr(result));
				(void) sqlite3_close(db);
				return 1;
			}
		}
		else
		{
			Com_Printf("... failed to open database - unknown mode\n");
			return 1;
		}

		Com_Printf("... database file '%s' loaded\n", to_ospath);
	}
	else // create new
	{
		int result;

		Com_Printf("... no database file '%s' found ... creating now\n", to_ospath);
		result = DB_Create();

		if (result != 0)
		{
			Com_Printf("... WARNING can't create database [%i]\n", result);
			return 1;
		}

		// save memory db to disk
		if (db_mode->integer == 1)
		{
			result = DB_SaveMemDB();

			if (result != SQLITE_OK)
			{
				Com_Printf("... WARNING can't save memory database file [%i]\n", result);
				return 1;
			}
		}
	}

	Com_Printf("SQLite3 ET: L [%i] database '%s' init - autocommit %i\n", ETL_DBMS_VERSION, to_ospath, sqlite3_get_autocommit(db));

	isDBActive = qtrue;
	return 0;
}