7 #include "zypp2/cache/sqlite3x/sqlite3x.hpp"
9 #include <zypp/base/Logger.h>
10 #include <zypp/base/Measure.h>
11 #include <zypp/ZYpp.h>
12 #include <zypp/ZYppFactory.h>
14 #include "zypp/TmpPath.h"
15 #include "zypp/Product.h"
16 #include "zypp/detail/PackageImplIf.h"
17 #include "zypp/Package.h"
19 #include "zypp/data/ResolvableData.h"
23 using namespace sqlite3x;
25 #define CREATE_QUERY "CREATE TABLE dependencies ( \
26 id INTEGER PRIMAR KEY AUTO INCREMENT \
34 , dep_target INTEGER \
37 #define INSERT_QUERY "insert into dependencies (dep_type, name, version, release, epoch, arch, relation, dep_target) values (?,?,?,?,?,?,?,?);"
38 #define SELECT_QUERY "select name,version,release,epoch from dependencies"
41 int main(int argc, char **argv)
45 filesystem::TmpDir tmpdir;
46 MIL << "Db will be in " << tmpdir << endl;
48 sqlite3_connection con((tmpdir.path() + "test.db").asString().c_str() );
49 sqlite3_command createcmd(con, CREATE_QUERY);
50 createcmd.executenonquery();
52 zypp::debug::Measure m("sqlite3x insert");
53 sqlite3_transaction trans(con);
55 sqlite3_command insertcmd(con, INSERT_QUERY);
56 for (int i =0; i < ITER; i++ )
59 insertcmd.bind(2, "name", 4);
60 insertcmd.bind(3, "version", 7);
61 insertcmd.bind(4, "release", 7);
66 insertcmd.executenonquery();
72 zypp::debug::Measure ms("sqlite3x select");
73 sqlite3_command selectcmd(con, "select name,version,release,epoch from dependencies");
74 sqlite3_reader reader = selectcmd.executereader();
78 string a = reader.getcolname(0);
79 int b = reader.getint(3);
85 catch ( const Exception &e )
92 filesystem::TmpDir tmpdir;
93 MIL << "Db 2 will be in " << tmpdir << endl;
96 int rc = sqlite3_open ( (tmpdir.path() + "test.db").asString().c_str(), &db );
97 if (rc != SQLITE_OK || db == NULL )
99 ZYPP_THROW(Exception(sqlite3_errmsg(db)));
102 sqlite3_exec( db, CREATE_QUERY, 0, 0, 0);
104 zypp::debug::Measure m("sqlite-c insert");
106 sqlite3_stmt *handle = 0;
107 rc = sqlite3_prepare( db, INSERT_QUERY, -1, &handle,0);
109 sqlite3_exec( db, "BEGIN;", 0, 0, 0);
110 for (int i =0; i < ITER; i++ )
112 rc = sqlite3_bind_int( handle, 1, 1);
113 rc = sqlite3_bind_text( handle, 2, "name", -1, SQLITE_STATIC );
114 rc = sqlite3_bind_text( handle, 3, "version", -1, SQLITE_STATIC );
115 rc = sqlite3_bind_text( handle, 4, "release", -1, SQLITE_STATIC );
116 rc = sqlite3_bind_int( handle, 5, 0);
117 rc = sqlite3_bind_int( handle, 6, 3);
118 rc = sqlite3_bind_int( handle, 7, 2);
119 rc = sqlite3_bind_int( handle, 8, 1);
120 if ( sqlite3_step(handle) != SQLITE_DONE )
122 ZYPP_THROW(Exception("error on insert"));
124 sqlite3_reset (handle);
126 sqlite3_exec( db, "COMMIT;", 0, 0, 0);
130 zypp::debug::Measure ms("sqlite-c select");
132 rc = sqlite3_prepare( db, SELECT_QUERY, -1, &handle,0);
134 while( sqlite3_step(handle) == SQLITE_ROW )
136 string a = (const char *) sqlite3_column_text( handle, 0 );
137 int b = sqlite3_column_int( handle, 3 );
140 sqlite3_finalize (handle);
144 catch ( const Exception &e )