60293aa756872c4f6b9f0fd58963816ccbead219
[platform/upstream/libzypp.git] / devel / devel.dmacvicar / sqlitetime.cc
1 #include <sys/time.h>
2
3 #include <iostream>
4 #include <fstream>
5
6 #include "sqlite3.h"
7 #include "zypp2/cache/sqlite3x/sqlite3x.hpp"
8
9 #include <zypp/base/Logger.h>
10 #include <zypp/base/Measure.h>
11 #include <zypp/ZYpp.h>
12 #include <zypp/ZYppFactory.h>
13
14 #include "zypp/TmpPath.h"
15 #include "zypp/Product.h"
16 #include "zypp/detail/PackageImplIf.h"
17 #include "zypp/Package.h"
18
19 #include "zypp/data/ResolvableData.h"
20
21 using namespace std;
22 using namespace zypp;
23 using namespace sqlite3x;
24
25 #define CREATE_QUERY "CREATE TABLE dependencies ( \
26     id INTEGER PRIMAR KEY AUTO INCREMENT \
27   , dep_type INTEGER \
28   , name TEXT \
29   , version TEXT \
30   , release TEXT \
31   , epoch INTEGER \
32   , arch INTEGER \
33   , relation INTEGER \
34   , dep_target INTEGER \
35 );"
36
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"
39
40 #define ITER 20000
41 int main(int argc, char **argv)
42 {
43     try
44     {
45       filesystem::TmpDir tmpdir;
46       MIL << "Db will be in " << tmpdir << endl;
47       
48       sqlite3_connection con((tmpdir.path() + "test.db").asString().c_str() );
49       sqlite3_command createcmd(con, CREATE_QUERY);
50       createcmd.executenonquery();
51       
52       zypp::debug::Measure m("sqlite3x insert");
53       sqlite3_transaction trans(con);
54       {
55         sqlite3_command insertcmd(con, INSERT_QUERY);
56         for (int i =0; i < ITER; i++ )
57         {
58           insertcmd.bind(1, 1);
59           insertcmd.bind(2, "name", 4);
60           insertcmd.bind(3, "version", 7);
61           insertcmd.bind(4, "release", 7);
62           insertcmd.bind(5, 0);
63           insertcmd.bind(6, 3);
64           insertcmd.bind(7, 2);
65           insertcmd.bind(8, 1);
66           insertcmd.executenonquery();
67         }
68       }
69       m.elapsed();
70       m.stop();
71       
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();
75
76        while(reader.read())
77        {
78           string a = reader.getcolname(0);
79           int b = reader.getint(3);
80        }
81        
82        ms.elapsed();
83        ms.stop();
84     }
85     catch ( const Exception &e )
86     {
87       ZYPP_CAUGHT(e);
88     }
89     
90     try
91     {
92       filesystem::TmpDir tmpdir;
93       MIL << "Db 2 will be in " << tmpdir << endl;
94       
95       sqlite3 *db;
96       int rc = sqlite3_open ( (tmpdir.path() + "test.db").asString().c_str(), &db );
97       if (rc != SQLITE_OK || db == NULL )
98       {
99         ZYPP_THROW(Exception(sqlite3_errmsg(db)));
100       }
101       
102       sqlite3_exec( db, CREATE_QUERY, 0, 0, 0);
103       
104       zypp::debug::Measure m("sqlite-c insert");
105       
106       sqlite3_stmt *handle = 0;
107       rc = sqlite3_prepare( db, INSERT_QUERY, -1, &handle,0);
108       
109       sqlite3_exec( db, "BEGIN;", 0, 0, 0);
110       for (int i =0; i < ITER; i++ )
111       {
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 )
121         {
122           ZYPP_THROW(Exception("error on insert"));
123         }
124         sqlite3_reset (handle);
125       }
126       sqlite3_exec( db, "COMMIT;", 0, 0, 0);
127       m.elapsed();
128       m.stop();
129       
130       zypp::debug::Measure ms("sqlite-c select");
131       
132       rc = sqlite3_prepare( db, SELECT_QUERY, -1, &handle,0);
133
134        while( sqlite3_step(handle) == SQLITE_ROW )
135        {
136           string a = (const char *) sqlite3_column_text( handle, 0 );
137           int b = sqlite3_column_int( handle, 3 );
138        }
139        
140        sqlite3_finalize (handle);
141        ms.elapsed();
142        ms.stop();
143     }
144     catch ( const Exception &e )
145     {
146       ZYPP_CAUGHT(e);
147     }
148     
149     return 0;
150 }
151
152
153