- desnormalize a capabilities table, and reduce loading to 1s
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Thu, 19 Apr 2007 15:05:49 +0000 (15:05 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Thu, 19 Apr 2007 15:05:49 +0000 (15:05 +0000)
zypp2/cache/CacheStore.cpp
zypp2/cache/CacheStore.h
zypp2/cache/schema/schema.sql
zypp2/source/cached/CachedSourceImpl.cc

index 3605aa8..379ed92 100644 (file)
@@ -58,7 +58,7 @@ struct CacheStore::Impl
   sqlite3_command_ptr select_file_cmd;
   sqlite3_command_ptr insert_file_cmd;
   
-  sqlite3_command_ptr insert_dependency_entry_cmd;
+  //sqlite3_command_ptr insert_dependency_entry_cmd;
   
   sqlite3_command_ptr append_file_dependency_cmd;
   sqlite3_command_ptr append_named_dependency_cmd;
@@ -110,9 +110,9 @@ CacheStore::CacheStore( const Pathname &dbdir )
   _pimpl->select_file_cmd.reset( new sqlite3_command( _pimpl->con, "select id from files where dir_name_id=:dir_name_id and file_name_id=:file_name_id;" ));
   _pimpl->insert_file_cmd.reset( new sqlite3_command( _pimpl->con, "insert into files (dir_name_id,file_name_id) values (:dir_name_id,:file_name_id);" ));
 
-  _pimpl->insert_dependency_entry_cmd.reset( new sqlite3_command( _pimpl->con, "insert into capabilities ( resolvable_id, dependency_type, refers_kind ) values ( :resolvable_id, :dependency_type, :refers_kind );" ));
-  _pimpl->append_file_dependency_cmd.reset( new sqlite3_command( _pimpl->con, "insert into file_capabilities ( capability_id, file_id ) values ( :capability_id, :file_id );" ));
-  _pimpl->append_named_dependency_cmd.reset( new sqlite3_command( _pimpl->con, "insert into named_capabilities ( capability_id, name_id, version, release, epoch, relation ) values ( :capability_id, :name_id, :version, :release, :epoch, :relation );" ));
+  //_pimpl->insert_dependency_entry_cmd.reset( new sqlite3_command( _pimpl->con, "insert into capabilities ( resolvable_id, dependency_type, refers_kind ) values ( :resolvable_id, :dependency_type, :refers_kind );" ));
+  _pimpl->append_file_dependency_cmd.reset( new sqlite3_command( _pimpl->con, "insert into file_capabilities ( resolvable_id, dependency_type, refers_kind, file_id ) values ( :resolvable_id, :dependency_type, :refers_kind, :file_id );" ));
+  _pimpl->append_named_dependency_cmd.reset( new sqlite3_command( _pimpl->con, "insert into named_capabilities ( resolvable_id, dependency_type, refers_kind, name_id, version, release, epoch, relation ) values ( :resolvable_id, :dependency_type, :refers_kind, :name_id, :version, :release, :epoch, :relation );" ));
   
   _pimpl->append_resolvable_cmd.reset( new sqlite3_command( _pimpl->con, "insert into resolvables ( name, version, release, epoch, arch, kind, catalog_id ) values ( :name, :version, :release, :epoch, :arch, :kind, :catalog_id );" ));
   
@@ -237,10 +237,14 @@ void CacheStore::appendNamedDependency( const data::RecordId &resolvable_id, zyp
     ZYPP_THROW(Exception("bad versioned dep"));
   //DBG << "versioned : " << cap << endl;
  
-  data::RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
+  //data::RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
   data::RecordId name_id = lookupOrAppendName(cap->name());
   
-  _pimpl->append_named_dependency_cmd->bind( ":capability_id", capability_id);
+  _pimpl->append_named_dependency_cmd->bind( ":resolvable_id", resolvable_id );
+  _pimpl->append_named_dependency_cmd->bind( ":dependency_type", zypp_deptype2db_deptype(deptype) );
+  _pimpl->append_named_dependency_cmd->bind( ":refers_kind", zypp_kind2db_kind(cap->refers()) );
+  
+  //_pimpl->append_named_dependency_cmd->bind( ":capability_id", capability_id);
   _pimpl->append_named_dependency_cmd->bind( ":name_id", name_id);
   _pimpl->append_named_dependency_cmd->bind( ":version", cap->edition().version() );
   _pimpl->append_named_dependency_cmd->bind( ":release", cap->edition().release() );
@@ -256,35 +260,39 @@ void CacheStore::appendFileDependency( const data::RecordId &resolvable_id, zypp
   if ( !cap )
     ZYPP_THROW(Exception("bad file cap"));
 
-  data::RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
+  //data::RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
   data::RecordId file_id = lookupOrAppendFile(cap->filename());
   
-  _pimpl->append_file_dependency_cmd->bind( ":capability_id", capability_id);
+  _pimpl->append_file_dependency_cmd->bind( ":resolvable_id", resolvable_id );
+  _pimpl->append_file_dependency_cmd->bind( ":dependency_type", zypp_deptype2db_deptype(deptype) );
+  _pimpl->append_file_dependency_cmd->bind( ":refers_kind", zypp_kind2db_kind(cap->refers()) );
+  
+  //_pimpl->append_file_dependency_cmd->bind( ":capability_id", capability_id);
   _pimpl->append_file_dependency_cmd->bind( ":file_id", file_id);
 
   _pimpl->append_file_dependency_cmd->executenonquery();
   //delete cmd;
 }
 
-data::RecordId CacheStore::appendDependencyEntry( const data::RecordId &resolvable_id, zypp::Dep deptype, const Resolvable::Kind &refers )
-{
-  //DBG << "rid: " << resolvable_id << " deptype: " << deptype << " " << "refers: " << refers << endl;
-  _pimpl->insert_dependency_entry_cmd->bind( ":resolvable_id", resolvable_id );
-  
-  db::DependencyType dt = zypp_deptype2db_deptype(deptype);
-  if ( dt == db::DEP_TYPE_UNKNOWN )
-  {
-    ZYPP_THROW(Exception("Unknown depenency type"));
-  }
-
-  _pimpl->insert_dependency_entry_cmd->bind( ":dependency_type", zypp_deptype2db_deptype(deptype) );
-  _pimpl->insert_dependency_entry_cmd->bind( ":refers_kind", zypp_kind2db_kind(refers) );
-  
-  _pimpl->insert_dependency_entry_cmd->executenonquery();
-  //delete cmd;
-  long long id = _pimpl->con.insertid();
-  return static_cast<data::RecordId>(id);
-}
+// data::RecordId CacheStore::appendDependencyEntry( const data::RecordId &resolvable_id, zypp::Dep deptype, const Resolvable::Kind &refers )
+// {
+//   //DBG << "rid: " << resolvable_id << " deptype: " << deptype << " " << "refers: " << refers << endl;
+//   _pimpl->insert_dependency_entry_cmd->bind( ":resolvable_id", resolvable_id );
+//   
+//   db::DependencyType dt = zypp_deptype2db_deptype(deptype);
+//   if ( dt == db::DEP_TYPE_UNKNOWN )
+//   {
+//     ZYPP_THROW(Exception("Unknown depenency type"));
+//   }
+// 
+//   _pimpl->insert_dependency_entry_cmd->bind( ":dependency_type", zypp_deptype2db_deptype(deptype) );
+//   _pimpl->insert_dependency_entry_cmd->bind( ":refers_kind", zypp_kind2db_kind(refers) );
+//   
+//   _pimpl->insert_dependency_entry_cmd->executenonquery();
+//   //delete cmd;
+//   long long id = _pimpl->con.insertid();
+//   return static_cast<data::RecordId>(id);
+// }
 
 data::RecordId CacheStore::lookupOrAppendFile( const Pathname &path )
 {
index 6957120..ba64759 100644 (file)
@@ -238,8 +238,8 @@ namespace zypp
        * the capabilities table for a specific capability
        * entry.
        */
-      data::RecordId appendDependencyEntry( const data::RecordId &, 
-                                            zypp::Dep, const Resolvable::Kind & );
+//       data::RecordId appendDependencyEntry( const data::RecordId &, 
+//                                             zypp::Dep, const Resolvable::Kind & );
       
     private:
       /** Implementation. */
index b880577..7ef079c 100644 (file)
@@ -309,36 +309,32 @@ CREATE TABLE patch_packages_baseversions (
 -- Capabilities
 ------------------------------------------------
 
-CREATE TABLE capabilities (
-    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
+CREATE TABLE named_capabilities (
+   id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL 
   , resolvable_id INTEGER REFERENCES resolvables(id)
   , dependency_type INTEGER
   , refers_kind INTEGER
-);
-CREATE INDEX capability_resolvable ON capabilities (resolvable_id);
-
-CREATE TABLE named_capabilities (
-   id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL 
-  , capability_id INTEGER REFERENCES capabilities (id)
   , name_id INTEGER REFERENCES names(id)
   , version TEXT
   , release TEXT
   , epoch INTEGER
   , relation INTEGER
 );
-CREATE INDEX named_capabilities_capability_id ON named_capabilities (capability_id);
 CREATE INDEX named_capabilities_name ON named_capabilities(name_id);
 
 CREATE TABLE file_capabilities (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL 
-  , capability_id INTEGER REFERENCES capabilities (id)
+  , resolvable_id INTEGER REFERENCES resolvables(id)
+  , dependency_type INTEGER
+  , refers_kind INTEGER
   , file_id INTEGER REFERENCES files(id)
 );
-CREATE INDEX file_capabilities_capability_id ON file_capabilities (capability_id);
 
 CREATE TABLE split_capabilities (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL 
-  , capability_id INTEGER REFERENCES capabilities (id)
+  , resolvable_id INTEGER REFERENCES resolvables(id)
+  , dependency_type INTEGER
+  , refers_kind INTEGER
   , name_id INTEGER REFERENCES names(id)
   , file_id INTEGER REFERENCES files(id)
 );
index 2f0c48d..5644d4b 100644 (file)
@@ -132,8 +132,8 @@ void read_capabilities( sqlite3_connection &con, map<data::RecordId, NVRAD> &nvr
 //       
 //     }
 //   }
-  sqlite3_command select_named_cmd( con, "select c.refers_kind, n.name, v.version, v.release, v.epoch, v.relation, c.dependency_type, c.resolvable_id from  names n , named_capabilities v, capabilities c where v.name_id=n.id and c.id=v.capability_id ;");
-  sqlite3_command select_file_cmd( con, "select c.refers_kind, dn.name, fn.name, c.dependency_type, c.resolvable_id from file_capabilities fc, capabilities c, files f, dir_names dn, file_names fn where f.id=fc.file_id and f.dir_name_id=dn.id and f.file_name_id=fn.id and c.id=fc.capability_id;");
+  sqlite3_command select_named_cmd( con, "select v.refers_kind, n.name, v.version, v.release, v.epoch, v.relation, v.dependency_type, v.resolvable_id from  names n , named_capabilities v where v.name_id=n.id;");
+  sqlite3_command select_file_cmd( con, "select fc.refers_kind, dn.name, fn.name, v.dependency_type, v.resolvable_id from file_capabilities fc, files f, dir_names dn, file_names fn where f.id=fc.file_id and f.dir_name_id=dn.id and f.file_name_id=fn.id;");
   
   {
     debug::Measure mnc("read named capabilities");