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)
{
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 );" ));
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;
//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 )
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
);
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
);
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
------------------------------------------------