Пример #1
0
wxSQLite3Database* objsearch_pi::initDB(void)
{
    bool have_to_create = false;
    wxString sDBName = *GetpPrivateApplicationDataLocation() + wxFileName::GetPathSeparator()+ wxT("objsearch_pi.db");

    wxLogMessage( _T("OBJSEARCH_PI: Database file to be used: %s"), sDBName.c_str() );
    if ( !wxFileExists(sDBName) )
    {
        have_to_create = true;
    }
    wxSQLite3Database* db = new wxSQLite3Database();
    try
    {
        db->Open( sDBName );
    }
    catch (wxSQLite3Exception& e)
    {
        wxLogMessage( _T("OBJSEARCH_PI: DB Exception: %i : %s"), e.GetErrorCode(), e.GetMessage().c_str() );
        m_bDBUsable = false;
    }
    catch (...)
    {
        wxLogMessage( _T("OBJSEARCH_PI: Unknown exception") );
        m_bDBUsable = false;
    }

    if ( have_to_create && m_bDBUsable )
    {
        QueryDB( db, wxT("CREATE TABLE chart (id INTEGER PRIMARY KEY AUTOINCREMENT, chartname TEXT, scale REAL, nativescale INTEGER)") );
        QueryDB( db, wxT("CREATE TABLE feature (id INTEGER PRIMARY KEY AUTOINCREMENT, featurename TEXT)") );
        QueryDB( db, wxT("CREATE TABLE object (chart_id INTEGER, feature_id INTEGER, objname TEXT, lat REAL, lon REAL)") );
    }
    
    if ( m_bDBUsable )
	{
        db->CreateFunction(_T("distanceMercator"), 4, distMercFunc, true);
        //sqlite3_create_function(db, "distanceMercator", 4, SQLITE_UTF8, NULL, &distanceMercatorFunc, NULL, NULL));
		QueryDB( db, _T("PRAGMA synchronous=OFF") );
        QueryDB( db, _T("PRAGMA count_changes=OFF") );
        QueryDB( db, _T("PRAGMA journal_mode=MEMORY") );
        QueryDB( db, _T("PRAGMA temp_store=MEMORY") );
        
        //Fix the broken objects created by v 0.1 and 0.2
        QueryDB( db, _T("UPDATE object SET lon = lon - 360 WHERE lon > 180") );
        QueryDB( db, _T("UPDATE object SET lon = lon + 360 WHERE lon < - 180") );
        QueryDB( db, _T("DELETE FROM object WHERE lon < - 180 OR lon > 180 OR lat < -90 OR lat > 90") );
	}
	
    return db;
}
Пример #2
0
wxString ClimatologyUserDataDirectory()
{
    wxString s = wxFileName::GetPathSeparator();
    return *GetpPrivateApplicationDataLocation() + s + "plugins"
        + s + "climatology_pi" + s + "data" + s;
}
static wxString UserDataDirectory()
{
    wxString s = wxFileName::GetPathSeparator();
    return *GetpPrivateApplicationDataLocation() + s + "plugins"
        + s + "celestial_navigation" + s;
}