osgEarth 2.1.1
|
Public Member Functions | |
MetadataTable () | |
bool | initialize (sqlite3 *db) |
bool | store (const MetadataRecord &rec, sqlite3 *db) |
bool | load (const std::string &key, sqlite3 *db, MetadataRecord &output) |
bool | loadAllLayers (sqlite3 *db, std::vector< std::string > &output) |
Public Attributes | |
std::string | _insertSQL |
std::string | _selectSQL |
This database table holds one record for each cached layer in the database.
Definition at line 125 of file Sqlite3Cache.cpp.
MetadataTable::MetadataTable | ( | ) | [inline] |
Definition at line 127 of file Sqlite3Cache.cpp.
{ }
bool MetadataTable::initialize | ( | sqlite3 * | db | ) | [inline] |
Definition at line 129 of file Sqlite3Cache.cpp.
{ std::string sql = "CREATE TABLE IF NOT EXISTS metadata (" "layer varchar(255) PRIMARY KEY UNIQUE, " "format varchar(255), " "compressor varchar(64), " "tilesize int, " "srs varchar(1024), " "xmin double, " "ymin double, " "xmax double, " "ymax double, " "tw int, " "th int )"; OE_DEBUG << LC << "SQL = " << sql << std::endl; char* errMsg = 0L; int err = sqlite3_exec( db, sql.c_str(), 0L, 0L, &errMsg ); if ( err != SQLITE_OK ) { OE_WARN << LC << "[Sqlite3Cache] Creating metadata: " << errMsg << std::endl; sqlite3_free( errMsg ); return false; } // prep the insert/select statement SQL strings: _insertSQL = "INSERT OR REPLACE INTO metadata " "(layer,format,compressor,tilesize,srs,xmin,ymin,xmax,ymax,tw,th) " "VALUES (?,?,?,?,?,?,?,?,?,?,?)"; _selectSQL = "SELECT layer,format,compressor,tilesize,srs,xmin,ymin,xmax,ymax,tw,th " "FROM metadata WHERE layer = ?"; return true; }
bool MetadataTable::load | ( | const std::string & | key, |
sqlite3 * | db, | ||
MetadataRecord & | output | ||
) | [inline] |
Definition at line 217 of file Sqlite3Cache.cpp.
{ bool success = true; sqlite3_stmt* select = 0L; int rc = sqlite3_prepare_v2( db, _selectSQL.c_str(), _selectSQL.length(), &select, 0L ); if ( rc != SQLITE_OK ) { OE_WARN << LC << "Error preparing SQL: " << sqlite3_errmsg( db ) << "(SQL: " << _insertSQL << ")" << std::endl; return false; } sqlite3_bind_text( select, 1, key.c_str(), -1, 0L ); rc = sqlite3_step( select ); if ( rc == SQLITE_ROW ) { // got a result output._layerName = (char*)sqlite3_column_text( select, 0 ); output._format = (char*)sqlite3_column_text( select, 1 ); output._compressor = (char*)sqlite3_column_text( select, 2 ); output._tileSize = sqlite3_column_int( select, 3 ); ProfileOptions pconf; pconf.srsString() = (char*)sqlite3_column_text( select, 4 ); pconf.bounds() = Bounds( sqlite3_column_double( select, 5 ), sqlite3_column_double( select, 6 ), sqlite3_column_double( select, 7 ), sqlite3_column_double( select, 8 ) ); pconf.numTilesWideAtLod0() = sqlite3_column_int( select, 9 ); pconf.numTilesHighAtLod0() = sqlite3_column_int( select, 10 ); output._profile = Profile::create( pconf ); success = true; } else { // no result OE_DEBUG << "NO metadata record found for \"" << key << "\"" << std::endl; success = false; } sqlite3_finalize( select ); return success; }
bool MetadataTable::loadAllLayers | ( | sqlite3 * | db, |
std::vector< std::string > & | output | ||
) | [inline] |
Definition at line 267 of file Sqlite3Cache.cpp.
{ bool success = true; sqlite3_stmt* select = 0L; std::string selectLayersSQL = "select layer from \"metadata\""; int rc = sqlite3_prepare_v2( db, selectLayersSQL.c_str(), selectLayersSQL.length(), &select, 0L ); if ( rc != SQLITE_OK ) { OE_WARN << LC << "Error preparing SQL: " << sqlite3_errmsg( db ) << "(SQL: " << _insertSQL << ")" << std::endl; return false; } success = true; rc = sqlite3_step( select ); while (rc == SQLITE_ROW) { output.push_back((char*)sqlite3_column_text( select, 0 )); rc = sqlite3_step( select ); } if (rc != SQLITE_DONE) { // no result OE_WARN << "NO layers found in metadata" << std::endl; success = false; } sqlite3_finalize( select ); return success; }
bool MetadataTable::store | ( | const MetadataRecord & | rec, |
sqlite3 * | db | ||
) | [inline] |
Definition at line 169 of file Sqlite3Cache.cpp.
{ sqlite3_stmt* insert = 0; int rc = sqlite3_prepare_v2( db, _insertSQL.c_str(), _insertSQL.length(), &insert, 0L ); if ( rc != SQLITE_OK ) { OE_WARN << LC << "Error preparing SQL: " << sqlite3_errmsg( db ) << "(SQL: " << _insertSQL << ")" << std::endl; return false; } sqlite3_bind_text( insert, 1, rec._layerName.c_str(), -1, 0L ); sqlite3_bind_text( insert, 2, rec._format.c_str(), -1, 0L ); sqlite3_bind_text( insert, 3, rec._compressor.c_str(), -1, 0L ); sqlite3_bind_int ( insert, 4, rec._tileSize ); sqlite3_bind_text( insert, 5, rec._profile->getSRS()->getInitString().c_str(), -1, 0L ); sqlite3_bind_double( insert, 6, rec._profile->getExtent().xMin() ); sqlite3_bind_double( insert, 7, rec._profile->getExtent().yMin() ); sqlite3_bind_double( insert, 8, rec._profile->getExtent().xMax() ); sqlite3_bind_double( insert, 9, rec._profile->getExtent().yMax() ); unsigned int tw, th; rec._profile->getNumTiles( 0, tw, th ); sqlite3_bind_int( insert, 10, tw ); sqlite3_bind_int( insert, 11, th ); bool success; rc = sqlite3_step(insert); if ( rc != SQLITE_DONE ) { OE_WARN << LC << "SQL INSERT failed: " << sqlite3_errmsg( db ) << "; SQL = " << _insertSQL << std::endl; success = false; } else { OE_DEBUG << LC << "Stored metadata record for \"" << rec._layerName << "\"" << std::endl; success = true; } sqlite3_finalize( insert ); return success; }
std::string MetadataTable::_insertSQL |
Definition at line 302 of file Sqlite3Cache.cpp.
std::string MetadataTable::_selectSQL |
Definition at line 303 of file Sqlite3Cache.cpp.