add stuff for transactions
authorKlaus Kaempf <kkaempf@suse.de>
Tue, 7 Feb 2006 12:29:47 +0000 (12:29 +0000)
committerKlaus Kaempf <kkaempf@suse.de>
Tue, 7 Feb 2006 12:29:47 +0000 (12:29 +0000)
adapt to ZYpp

zmd/backend/Makefile.am
zmd/backend/dbsource/DbAccess.h
zmd/backend/dbsource/DbPackageImpl.cc
zmd/backend/dbsource/DbPackageImpl.h
zmd/backend/dbsource/DbSourceImpl.cc
zmd/backend/dbsource/DbSourceImpl.h
zmd/backend/dbsource/DbSources.cc
zmd/backend/dbsource/DbSources.h
zmd/backend/query-files.cc
zmd/backend/query-system.cc

index c72ec25..b675a89 100644 (file)
@@ -6,16 +6,16 @@ SUBDIRS = dbsource
 PKG_MANAGEMENT_LIBS = dbsource/lib@PACKAGE@_dbsource.la $(top_srcdir)/zypp/lib@PACKAGE@.la
 PKG_MANAGEMENT_CFLAGS = -I$(top_srcdir)
 
-query_systemdir = $(libdir)/zmd
-query_system_PROGRAMS = query-system
-query_system_SOURCES = query-system.cc
-query_system_CFLAGS = $(PKG_MANAGEMENT_CFLAGS) $(SQLITE_CFLAGS)
-query_system_LDADD = $(PKG_MANAGEMENT_LIBS) $(SQLITE_LIBS)
+CFLAGS = $(PKG_MANAGEMENT_CFLAGS) $(SQLITE_CFLAGS)
+LDADD = $(PKG_MANAGEMENT_LIBS) $(SQLITE_LIBS)
 
-query_filesdir = $(libdir)/zmd
-query_files_PROGRAMS = query-files
-query_files_SOURCES = query-files.cc
-query_files_CFLAGS = $(PKG_MANAGEMENT_CFLAGS) $(SQLITE_CFLAGS)
-query_files_LDADD = $(PKG_MANAGEMENT_LIBS) $(SQLITE_LIBS)
+bindir = $(libdir)/zmd
 
+bin_PROGRAMS = \
+       query-system            \
+       query-files             \
+       resolve-dependencies
 
+query_system_SOURCES = query-system.cc
+query_files_SOURCES = query-files.cc
+resolve_dependencies_SOURCES = resolve-dependencies.cc add-transactions.cc add-transactions.h
index 1af02b8..15d385a 100644 (file)
@@ -32,6 +32,9 @@
 DEFINE_PTR_TYPE(DbAccess);
 
 typedef std::list<zypp::ResObject::constPtr> ResObjectList;
+typedef std::map<sqlite_int64, zypp::ResObject::constPtr> IdMap;
+//-----------------------------------------------------------------------------
+// relations
 
 #define RELATION_ANY 0
 #define RELATION_EQUAL (1 << 0)
@@ -51,6 +54,8 @@ typedef enum {
        RC_RELATION_NONE               = RELATION_NONE,
 } RCResolvableRelation;
 
+//-----------------------------------------------------------------------------
+// architectures
 
 typedef enum {
     RC_ARCH_UNKNOWN = -1,
@@ -71,6 +76,9 @@ typedef enum {
     RC_ARCH_SPARC64,
 } RCArch;
 
+//-----------------------------------------------------------------------------
+// dependencies
+
 typedef enum {
        RC_DEP_TYPE_REQUIRE = 0,
        RC_DEP_TYPE_PROVIDE,
index 8ef3fbb..c87d5c6 100644 (file)
@@ -45,8 +45,10 @@ DbPackageImpl::DbPackageImpl (Source_Ref source_r)
  */
 
 void
-DbPackageImpl::readHandle( sqlite3_stmt *handle )
+DbPackageImpl::readHandle( sqlite_int64 id, sqlite3_stmt *handle )
 {
+    _zmdid = id;
+
     const char * text = (const char *) sqlite3_column_text (handle, 12);
     if (text != NULL)
        _summary = TranslatedText( string( text ) );
@@ -78,6 +80,9 @@ PackageGroup DbPackageImpl::group() const
 ByteCount DbPackageImpl::size() const
 { return _size_installed; }
 
+ZmdId DbPackageImpl::zmdid() const
+{ return _zmdid; }
+
 /** */
 ByteCount DbPackageImpl::archivesize() const
 { return _size_archive; }
index 8d7e704..980d0bb 100644 (file)
@@ -33,7 +33,7 @@ public:
        /** Default ctor
        */
        DbPackageImpl( Source_Ref source_r );
-       void readHandle( sqlite3_stmt *handle );
+       void readHandle( sqlite_int64 id, sqlite3_stmt *handle );
 
        /** Package summary */
        virtual TranslatedText summary() const;
@@ -48,6 +48,8 @@ public:
        virtual bool installOnly() const;
        /** */
        virtual Source_Ref source() const;
+        /** */
+       virtual ZmdId zmdid() const;
 
 protected:
        Source_Ref _source;
@@ -55,6 +57,7 @@ protected:
        TranslatedText _description;
        PackageGroup _group;
        bool _install_only;
+       ZmdId _zmdid;
 
        ByteCount _size_installed;
        ByteCount _size_archive;
index b5c05bb..b64d10c 100644 (file)
@@ -42,6 +42,7 @@ using namespace zypp;
 
 DbSourceImpl::DbSourceImpl()
     : _db (NULL)
+    , _idmap (NULL)
 {
 }
 
@@ -69,7 +70,7 @@ DbSourceImpl::factoryInit()
 void
 DbSourceImpl::factoryCtor( const media::MediaId & media_r, const Pathname & path_r, const std::string & alias_r, const Pathname cache_dir_r)
 {
-    MIL << "DbSourceImpl::factoryCtor(<media>, " << path_r << ", " << alias_r << ", " << cache_dir_r << ")" << endl;
+//    MIL << "DbSourceImpl::factoryCtor(<media>, " << path_r << ", " << alias_r << ", " << cache_dir_r << ")" << endl;
     _media = media_r;
     _alias = alias_r;
     _cache_dir = cache_dir_r;
@@ -81,6 +82,12 @@ DbSourceImpl::attachDatabase( sqlite3 *db)
     _db = db;
 }
 
+void
+DbSourceImpl::attachIdMap (IdMap *idmap)
+{
+  _idmap = idmap;
+}
+
 //-----------------------------------------------------------------------------
 
 static sqlite3_stmt *
@@ -181,7 +188,7 @@ DbSourceImpl::createPackages(void)
            unsigned epoch = sqlite3_column_int (handle, 4);
            Arch arch (DbAccess::Rc2Arch( (RCArch)(sqlite3_column_int (handle, 5)) ) );
 
-           impl->readHandle( handle );
+           impl->readHandle( id, handle );
 
            // Collect basic Resolvable data
            NVRAD dataCollect( name,
@@ -191,6 +198,8 @@ DbSourceImpl::createPackages(void)
 
            Package::Ptr package = detail::makeResolvableFromImpl(dataCollect, impl);
            _store.insert( package );
+           if (_idmap != 0)
+               (*_idmap)[id] = package;
        }
        catch (const Exception & excpt_r)
        {
@@ -277,7 +286,7 @@ DbSourceImpl::createDependencies (sqlite_int64 resolvable_id)
            }
        }
        catch ( Exception & excpt_r ) {
-           ERR << "Can't parse dependencies for resolvable_id " << resolvable_id << ", name " << name << endl;
+           ERR << "Can't parse dependencies for resolvable_id " << resolvable_id << ", name '" << name << "', version '" << version << "', release '" << release << "'" << endl;
            ZYPP_CAUGHT( excpt_r );
        }
     }
index deb93be..258e349 100644 (file)
@@ -84,9 +84,11 @@ class DbSourceImpl : public zypp::source::SourceImpl {
     { return true; }
 
     void attachDatabase( sqlite3 *db );
+    void attachIdMap (IdMap *idmap);
 
   private:
     zypp::Source_Ref _source;
+    IdMap *_idmap;
     void createResolvables( zypp::Source_Ref source_r );
 };
 
index 9189f3a..f3f5e4f 100644 (file)
@@ -50,6 +50,17 @@ DbSources::~DbSources ()
 {
 }
 
+
+ResObject::constPtr
+DbSources::getById (sqlite_int64 id) const
+{
+    IdMap::const_iterator it = _idmap.find(id);
+    if (it == _idmap.end())
+       return NULL;
+    return it->second;
+}
+
+
 const SourcesList &
 DbSources::sources (bool refresh)
 {
@@ -81,6 +92,8 @@ DbSources::sources (bool refresh)
     media::MediaId mediaid = mmgr.open(Url("file://"));
     SourceFactory factory;
 
+    // read catalogs table
+
     while ((rc = sqlite3_step (handle)) == SQLITE_ROW) {
        string id ((const char *) sqlite3_column_text (handle, 0));
        string name ((const char *) sqlite3_column_text (handle, 1));
@@ -108,6 +121,7 @@ DbSources::sources (bool refresh)
            impl->setPriorityUnsubscribed( priority_unsub );
 
            impl->attachDatabase (_db);
+           impl->attachIdMap (&_idmap);
 
            Source_Ref src( factory.createFrom( impl ) );
            _sources.push_back( src );
index af6f02f..80be0af 100644 (file)
 #include <iosfwd>
 #include <string>
 #include <list>
+#include <map>
 
 #include <sqlite3.h>
 #include "zypp/Source.h"
+#include "zypp/PoolItem.h"
+
+#include "DbAccess.h"
 
 ///////////////////////////////////////////////////////////////////
 //
@@ -40,6 +44,7 @@ class DbSources
   private:
      sqlite3 *_db;
      SourcesList _sources;
+     IdMap _idmap;
 
   public:
 
@@ -47,6 +52,7 @@ class DbSources
     virtual ~DbSources();
 
     const SourcesList & sources (bool refresh = false);
+    zypp::ResObject::constPtr getById (sqlite_int64 id) const;
 };
 
 #endif  // ZMD_BACKEND_DBSOURCES_H
index 7f80a17..e67f104 100644 (file)
@@ -146,7 +146,7 @@ int
 main (int argc, char **argv)
 {
     ZYppFactory zf;
-    ZYpp::Ptr God = zf.letsTest();
+    ZYpp::Ptr God = zf.getZYpp();
 
     try {
        God->initTarget("/");
index 8d52af3..2bd13d6 100644 (file)
@@ -20,7 +20,7 @@ main (int argc, char **argv)
     }
 
     ZYppFactory zf;
-    ZYpp::Ptr God = zf.letsTest();
+    ZYpp::Ptr God = zf.getZYpp();
 
     try {
        God->initTarget("/");