1
0
Fork 0

Move cache schema into its own file.

This commit is contained in:
James Turner 2013-09-30 18:02:27 +01:00
parent c8b5cc8a26
commit cc37e31ac9
3 changed files with 56 additions and 109 deletions

View file

@ -38,6 +38,7 @@ set(HEADERS
NavDataCache.hxx
PositionedOctree.hxx
PolyLine.hxx
CacheSchema.h
)
flightgear_component(Navaids "${SOURCES}" "${HEADERS}")

44
src/Navaids/CacheSchema.h Normal file
View file

@ -0,0 +1,44 @@
#ifndef FG_NAVCACHE_SCHEMA_HXX
#define FG_NAVCACHE_SCHEMA_HXX
const int SCHEMA_VERSION = 9;
#define SCHEMA_SQL \
"CREATE TABLE properties (key VARCHAR, value VARCHAR);" \
"CREATE TABLE stat_cache (path VARCHAR unique, stamp INT);"\
\
"CREATE TABLE positioned (type INT, ident VARCHAR collate nocase," \
"name VARCHAR collate nocase, airport INT64, lon FLOAT, lat FLOAT," \
"elev_m FLOAT, octree_node INT, cart_x FLOAT, cart_y FLOAT, cart_z FLOAT);" \
\
"CREATE INDEX pos_octree ON positioned(octree_node);" \
"CREATE INDEX pos_ident ON positioned(ident collate nocase);" \
"CREATE INDEX pos_name ON positioned(name collate nocase);" \
"CREATE INDEX pos_apt_type ON positioned(airport, type);"\
\
"CREATE TABLE airport (has_metar BOOL);" \
"CREATE TABLE comm (freq_khz INT,range_nm INT);" \
"CREATE INDEX comm_freq ON comm(freq_khz);" \
\
"CREATE TABLE runway (heading FLOAT, length_ft FLOAT, width_m FLOAT," \
"surface INT, displaced_threshold FLOAT,stopway FLOAT,reciprocal INT64,ils INT64);" \
"CREATE TABLE navaid (freq INT,range_nm INT,multiuse FLOAT, runway INT64,colocated INT64);" \
"CREATE INDEX navaid_freq ON navaid(freq);" \
\
"CREATE TABLE octree (children INT);" \
\
"CREATE TABLE airway (ident VARCHAR collate nocase, network INT);" \
"CREATE INDEX airway_ident ON airway(ident);" \
\
"CREATE TABLE airway_edge (network INT,airway INT64,a INT64,b INT64);" \
"CREATE INDEX airway_edge_from ON airway_edge(a);" \
\
"CREATE TABLE taxi_node (hold_type INT,on_runway BOOL,pushback BOOL);" \
"CREATE TABLE parking (heading FLOAT,radius INT,gate_type VARCHAR," \
"airlines VARCHAR,pushback INT64);" \
"CREATE TABLE groundnet_edge (airport INT64,a INT64,b INT64);" \
"CREATE INDEX groundnet_edge_airport ON groundnet_edge(airport);" \
"CREATE INDEX groundnet_edge_from ON groundnet_edge(a);"
#endif

View file

@ -72,6 +72,7 @@
#include "poidb.hxx"
#include <Airports/parking.hxx>
#include <Airports/gnnode.hxx>
#include "CacheSchema.h"
using std::string;
@ -81,7 +82,7 @@ using std::string;
namespace {
const int MAX_RETRIES = 10;
const int SCHEMA_VERSION = 8;
const int CACHE_SIZE_KBYTES= 32 * 1024;
// bind a std::string to a sqlite statement. The std::string must live the
@ -422,116 +423,17 @@ public:
execSelect(stmt);
reset(stmt);
}
void initTables()
{
runSQL("CREATE TABLE properties ("
"key VARCHAR,"
"value VARCHAR"
")");
runSQL("CREATE TABLE stat_cache ("
"path VARCHAR unique,"
"stamp INT"
")");
runSQL("CREATE TABLE positioned ("
"type INT,"
"ident VARCHAR collate nocase,"
"name VARCHAR collate nocase,"
"airport INT64,"
"lon FLOAT,"
"lat FLOAT,"
"elev_m FLOAT,"
"octree_node INT,"
"cart_x FLOAT,"
"cart_y FLOAT,"
"cart_z FLOAT"
")");
runSQL("CREATE INDEX pos_octree ON positioned(octree_node)");
runSQL("CREATE INDEX pos_ident ON positioned(ident collate nocase)");
runSQL("CREATE INDEX pos_name ON positioned(name collate nocase)");
// allow efficient querying of 'all ATIS at this airport' or
// 'all towers at this airport'
runSQL("CREATE INDEX pos_apt_type ON positioned(airport, type)");
runSQL("CREATE TABLE airport ("
"has_metar BOOL"
")"
);
runSQL("CREATE TABLE comm ("
"freq_khz INT,"
"range_nm INT"
")"
);
runSQL("CREATE INDEX comm_freq ON comm(freq_khz)");
runSQL("CREATE TABLE runway ("
"heading FLOAT,"
"length_ft FLOAT,"
"width_m FLOAT,"
"surface INT,"
"displaced_threshold FLOAT,"
"stopway FLOAT,"
"reciprocal INT64,"
"ils INT64"
")"
);
runSQL("CREATE TABLE navaid ("
"freq INT,"
"range_nm INT,"
"multiuse FLOAT,"
"runway INT64,"
"colocated INT64"
")"
);
runSQL("CREATE INDEX navaid_freq ON navaid(freq)");
runSQL("CREATE TABLE octree (children INT)");
runSQL("CREATE TABLE airway ("
"ident VARCHAR collate nocase,"
"network INT" // high-level or low-level
")");
runSQL("CREATE INDEX airway_ident ON airway(ident)");
runSQL("CREATE TABLE airway_edge ("
"network INT,"
"airway INT64,"
"a INT64,"
"b INT64"
")");
runSQL("CREATE INDEX airway_edge_from ON airway_edge(a)");
runSQL("CREATE TABLE taxi_node ("
"hold_type INT,"
"on_runway BOOL,"
"pushback BOOL"
")");
runSQL("CREATE TABLE parking ("
"heading FLOAT,"
"radius INT,"
"gate_type VARCHAR,"
"airlines VARCHAR,"
"pushback INT64"
")");
runSQL("CREATE TABLE groundnet_edge ("
"airport INT64,"
"a INT64,"
"b INT64"
")");
runSQL("CREATE INDEX groundnet_edge_airport ON groundnet_edge(airport)");
runSQL("CREATE INDEX groundnet_edge_from ON groundnet_edge(a)");
string_list commands = simgear::strutils::split(SCHEMA_SQL, ";");
BOOST_FOREACH(std::string sql, commands) {
if (sql.empty()) {
continue;
}
runSQL(sql);
} // of commands in scheme loop
}
void prepareQueries()