- add split and filesystem caps to cache
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 3 Aug 2007 11:41:16 +0000 (11:41 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 3 Aug 2007 11:41:16 +0000 (11:41 +0000)
- make cache initializer go out of scope as soon it is not needed anymore

zypp/cache/CacheInitializer.h
zypp/cache/CacheStore.cc
zypp/cache/CacheStore.h
zypp/cache/schema/schema.sql

index 88d5d76..43d7096 100644 (file)
@@ -19,7 +19,7 @@
 #include "zypp/Pathname.h"
 #include "zypp/cache/sqlite3x/sqlite3x.hpp"
 
-#define ZYPP_CACHE_SCHEMA_VERSION 1002
+#define ZYPP_CACHE_SCHEMA_VERSION 1003
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
index a853251..c8e6c6f 100644 (file)
@@ -54,17 +54,18 @@ struct CacheStore::Impl
   Impl( const Pathname &dbdir )
   : name_cache_hits(0)
   {
-    cache::CacheInitializer initializer(dbdir, "zypp.db");
-    if ( initializer.justInitialized() )
+    // let the initializer go out of scope after it executes
     {
-      MIL << "database " << (dbdir + "zypp.db") << " was just created" << endl;
+      cache::CacheInitializer initializer(dbdir, "zypp.db");
+      if ( initializer.justInitialized() )
+      {
+        MIL << "database " << (dbdir + "zypp.db") << " was just created" << endl;
+      }
     }
-
+    
     try
     {
       con.open( (dbdir + "zypp.db").asString().c_str());
-      //_insert_resolvable_cmd = new sqlite3_command( *_con, INSERT_RESOLVABLE_QUERY );
-      //_insert_package_cmd = new sqlite3_command( *_con, INSERT_PACKAGE_QUERY );
     }
     catch(exception &ex)
     {
@@ -108,6 +109,10 @@ struct CacheStore::Impl
 
     append_hal_dependency_cmd.reset( new sqlite3_command( con, "insert into hal_capabilities ( resolvable_id, dependency_type, refers_kind, name, value, relation ) values ( :resolvable_id, :dependency_type, :refers_kind, :name, :value, :relation );" ));
 
+    append_filesystem_dependency_cmd.reset( new sqlite3_command( con, "insert into filesystem_capabilities ( resolvable_id, dependency_type, refers_kind, name_id ) values ( :resolvable_id, :dependency_type, :refers_kind, :name_id );" ));
+    
+    append_split_dependency_cmd.reset( new sqlite3_command( con, "insert into split_capabilities ( resolvable_id, dependency_type, refers_kind, name_id, file_id ) values ( :resolvable_id, :dependency_type, :refers_kind, :name_id, :file_id );" ));
+    
     append_other_dependency_cmd.reset( new sqlite3_command( con, "insert into other_capabilities ( resolvable_id, dependency_type, refers_kind, value ) values ( :resolvable_id, :dependency_type, :refers_kind, :value );" ));
 
     append_resolvable_cmd.reset( new sqlite3_command( con, "insert into resolvables ( name, version, release, epoch, arch, kind, shared_id, repository_id ) values ( :name, :version, :release, :epoch, :arch, :kind, :shared_id, :repository_id );" ));
@@ -179,6 +184,8 @@ struct CacheStore::Impl
   sqlite3_command_ptr append_named_dependency_cmd;
   sqlite3_command_ptr append_modalias_dependency_cmd;
   sqlite3_command_ptr append_hal_dependency_cmd;
+  sqlite3_command_ptr append_filesystem_dependency_cmd;
+  sqlite3_command_ptr append_split_dependency_cmd;
   sqlite3_command_ptr append_other_dependency_cmd;
 
   sqlite3_command_ptr append_resolvable_cmd;
@@ -649,6 +656,49 @@ void CacheStore::appendFileDependency( const RecordId &resolvable_id, zypp::Dep
   //delete cmd;
 }
 
+void CacheStore::appendFilesystemDependency( const data::RecordId &resolvable_id,
+                                             zypp::Dep deptype,
+                                             capability::FilesystemCap::Ptr cap )
+{
+  if ( !cap )
+    ZYPP_THROW(Exception("bad versioned dep"));
+  //DBG << "versioned : " << cap << endl;
+
+  //RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
+  RecordId name_id = lookupOrAppendName(cap->name());
+
+  _pimpl->append_filesystem_dependency_cmd->bind( ":resolvable_id", resolvable_id );
+  _pimpl->append_filesystem_dependency_cmd->bind( ":dependency_type", lookupOrAppendType("deptype", deptype.asString()) );
+  _pimpl->append_filesystem_dependency_cmd->bind( ":refers_kind", lookupOrAppendType("kind", cap->refers().asString()) );
+
+  //_pimpl->append_filesystem_dependency_cmd->bind( ":capability_id", capability_id);
+  _pimpl->append_filesystem_dependency_cmd->bind( ":name_id", name_id);
+  _pimpl->append_filesystem_dependency_cmd->executenonquery();
+}
+
+
+void CacheStore::appendSplitDependency( const data::RecordId &resolvable_id,
+                                        zypp::Dep deptype,
+                                        capability::SplitCap::Ptr cap )
+{
+  if ( !cap )
+    ZYPP_THROW(Exception("bad versioned dep"));
+  //DBG << "versioned : " << cap << endl;
+
+  //RecordId capability_id = appendDependencyEntry( resolvable_id, deptype, cap->refers() );
+  RecordId name_id = lookupOrAppendName(cap->name());
+  RecordId file_id = lookupOrAppendFile(cap->path());
+   
+  _pimpl->append_split_dependency_cmd->bind( ":resolvable_id", resolvable_id );
+  _pimpl->append_split_dependency_cmd->bind( ":dependency_type", lookupOrAppendType("deptype", deptype.asString()) );
+  _pimpl->append_split_dependency_cmd->bind( ":refers_kind", lookupOrAppendType("kind", cap->refers().asString()) );
+
+  //_pimpl->append_split_dependency_cmd->bind( ":capability_id", capability_id);
+  _pimpl->append_split_dependency_cmd->bind( ":name_id", name_id);
+  _pimpl->append_split_dependency_cmd->bind( ":file_id", file_id);
+  _pimpl->append_split_dependency_cmd->executenonquery();
+}
+
 void CacheStore::appendUnknownDependency( const RecordId &resolvable_id,
                                                zypp::Dep deptype,
                                                capability::CapabilityImpl::Ptr cap )
index 447d914..59243cd 100644 (file)
@@ -377,6 +377,44 @@ namespace zypp
                                       capability::HalCap::Ptr cap );
 
       /**
+       * Adds a Filesystem dependency to the store.
+       *
+       * A \ref FilesystemCap::Ptr \a cap to be specified. Among
+       * which type of dependency \ref zypp::Dep it is as
+       * the \a deptype argument.
+       *
+       * \a resolvable_id is the resolvable Id in the CacheStore
+       * that will own the capability
+       *
+       * You can create the filesystem capability using either
+       * \ref capability::parse or \ref capability::buildFilesystem
+       *
+       * FIXME should it \throw if the resolvable does not exist?
+       */
+      void appendFilesystemDependency( const data::RecordId &resolvable_id,
+                                       zypp::Dep deptype,
+                                       capability::FilesystemCap::Ptr cap );
+      
+      /**
+       * Adds a split dependency to the store.
+       *
+       * A \ref SplitCap::Ptr \a cap to be specified. Among
+       * which type of dependency \ref zypp::Dep it is as
+       * the \a deptype argument.
+       *
+       * \a resolvable_id is the resolvable Id in the CacheStore
+       * that will own the capability
+       *
+       * You can create the filesystem capability using either
+       * \ref capability::parse or \ref capability::buildSplit
+       *
+       * FIXME should it \throw if the resolvable does not exist?
+       */
+      void appendSplitDependency( const data::RecordId &resolvable_id,
+                                  zypp::Dep deptype,
+                                  capability::SplitCap::Ptr cap );
+      
+      /**
        * Adds a unknown dependency to the store.
        *
        * A \ref Capability::Ptr \a cap to be specified. Among
index ddc8899..44c75e3 100644 (file)
@@ -240,14 +240,14 @@ CREATE TABLE file_capabilities (
 );
 CREATE INDEX file_capabilities_resolvable ON file_capabilities(resolvable_id);
 
-CREATE TABLE other_capabilities (
+CREATE TABLE filesystem_capabilities (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
   , resolvable_id INTEGER REFERENCES resolvables(id)
   , dependency_type INTEGER
   , refers_kind INTEGER
-  , value TEXT
+  , name_id INTEGER REFERENCES names(id)
 );
-CREATE INDEX other_capabilities_resolvable ON other_capabilities(resolvable_id);
+CREATE INDEX filesystem_capabilities_resolvable ON filesystem_capabilities(resolvable_id);
 
 CREATE TABLE split_capabilities (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
@@ -259,6 +259,15 @@ CREATE TABLE split_capabilities (
 );
 CREATE INDEX split_capabilities_resolvable ON split_capabilities(resolvable_id);
 
+CREATE TABLE other_capabilities (
+   id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
+  , resolvable_id INTEGER REFERENCES resolvables(id)
+  , dependency_type INTEGER
+  , refers_kind INTEGER
+  , value TEXT
+);
+CREATE INDEX other_capabilities_resolvable ON other_capabilities(resolvable_id);
+
 ------------------------------------------------
 -- File list
 ------------------------------------------------