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); }
/** * @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; }