--- /dev/null
+## Process this file with automake to produce Makefile.in
+## ##################################################
+
+# Do NOT list devel.* in subdirs. It's developers playgound and
+# must not prevent anything from building.
+SUBDIRS =
+
+## ##################################################
+
+TESTS = SourceCacheInitializer
+
+check_PROGRAMS = SourceCacheInitializer
+
+## ##################################################
+
+LDADD = $(top_srcdir)/zypp/lib@PACKAGE@.la
+
+## ##################################################
+
+SourceCacheInitializer_SOURCES = SourceCacheInitializer.cc
+SourceCacheInitializer_LDADD = $(LDADD) -lboost_unit_test_framework
+
+## ##################################################
+
+.PHONY: always
+
+$(noinst_PROGRAMS): $(top_srcdir)/zypp/lib@PACKAGE@.la
+
+#$(top_srcdir)/zypp/lib@PACKAGE@.la: always
+# $(MAKE) -C $(top_srcdir)/zypp
+
+## ##################################################
--- /dev/null
+
+#include <iostream>
+#include <list>
+#include <string>
+
+#include "zypp/base/Logger.h"
+#include "zypp/Arch.h"
+#include "zypp/TmpPath.h"
+#include "zypp/cache/SourceCacheInitializer.h"
+
+// Boost.Test
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/test/unit_test.hpp>
+
+#include "zypp/cache/sqlite3x/sqlite3x.hpp"
+
+using boost::unit_test::test_suite;
+using boost::unit_test::test_case;
+using boost::test_tools::close_at_tolerance;
+
+using namespace std;
+using namespace zypp;
+using namespace sqlite3x;
+
+/******************************************************************
+**
+**
+** FUNCTION NAME : main
+** FUNCTION TYPE : int
+**
+** DESCRIPTION :
+*/
+void cacheinit_test()
+{
+ filesystem::TmpDir tmpdir;
+ cache::SourceCacheInitializer initializer(tmpdir.path(), "test.db");
+ sqlite3_connection con( (tmpdir.path() + "test.db").asString().c_str());
+ //con.executenonquery(SOURCES_TABLE_SCHEMA);
+ int count = con.executeint("select count(*) from sqlite_master where type='table';");
+ BOOST_CHECK( initializer.justInitialized() );
+ BOOST_CHECK_EQUAL( count, 3);
+}
+
+test_suite*
+init_unit_test_suite( int, char* [] )
+{
+ test_suite* test= BOOST_TEST_SUITE( "CacheInit" );
+ test->add( BOOST_TEST_CASE( &cacheinit_test ), 0 /* expected zero error */ );
+ return test;
+}
static const char * SOURCES_TABLE_SCHEMA = "create table sources ( id integer primary key autoincrement, alias varchar unique, type varchar, description varchar, url varchar, path varchar, enabled integer, autorefresh integer, timestamp varchar, checksum varchar);";
+static const char * RESOLVABLES_TABLE_SCHEMA = "\
+ CREATE TABLE resolvables ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, version VARCHAR, release VARCHAR, epoch INTEGER, arch INTEGER, installed_size INTEGER, catalog VARCHAR, installed INTEGER, local INTEGER, status INTEGER, category VARCHAR, license VARCHAR, kind INTEGER); \
+ CREATE INDEX resolvable_sources ON resolvables (sources); \
+ CREATE INDEX resolvable_name ON resolvables (name); \
+ CREATE INDEX resolvable_spec ON resolvables (name, version, release, epoch, arch); \
+ CREATE TRIGGER remove_resolvables AFTER DELETE ON resolvables BEGIN DELETE FROM package_details WHERE resolvable_id = old.id; \
+ DELETE FROM patch_details WHERE resolvable_id = old.id; \
+ DELETE FROM pattern_details WHERE resolvable_id = old.id; \
+ DELETE FROM product_details WHERE resolvable_id = old.id; \
+ DELETE FROM message_details WHERE resolvable_id = old.id; \
+ DELETE FROM script_details WHERE resolvable_id = old.id; \
+ DELETE FROM dependencies WHERE resolvable_id = old.id; \
+ DELETE FROM files WHERE resolvable_id = old.id; END;";
+
+static const char * PACKAGES_DETAILS_TABLE_SCHEMA = "CREATE TABLE package_details ( resolvable_id INTEGER NOT NULL, rpm_group VARCHAR, summary VARCHAR, description VARCHAR, package_url VARCHAR, package_filename VARCHAR, signature_filename VARCHAR, file_size INTEGER, install_only INTEGER, media_nr INTEGER); \
+CREATE INDEX package_details_resolvable_id ON package_details (resolvable_id);";
+
// id 0, alias 1 , type 2, desc 3, url 4, path 5, enabled 6, autorefresh 7, timestamp 8, checksum 9
SourceCacheInitializer::SourceCacheInitializer( const Pathname &root_r, const Pathname &db_file )
{
try
{
- _con.reset( new sqlite3_connection(db_file.asString().c_str()) );
+ _con.reset( new sqlite3_connection( (_root + db_file).asString().c_str()) );
}
catch(exception &ex) {
ERR << "Exception Occured: " << ex.what() << endl;
bool SourceCacheInitializer::tablesCreated() const
{
- unsigned int count = _con->executeint("select count(*) from sqlite_master where type='table';");
- return ( count == 1 );
+ unsigned int count = _con->executeint("select count(*) from sqlite_master where type='table';");
+ return ( count == 1 );
}
void SourceCacheInitializer::createTables()
{
sqlite3_transaction trans(*_con);
-
{
- _con->executenonquery(SOURCES_TABLE_SCHEMA);
-
+ _con->executenonquery(SOURCES_TABLE_SCHEMA);
+ _con->executenonquery(RESOLVABLES_TABLE_SCHEMA);
}
trans.commit();