· 8 years ago · Jul 02, 2018, 10:56 PM
1void* sqlInsert(void *arg)
2{
3
4 system("clear");
5 pthread_t tid[db_inc];
6 gotoxy(1, 3);
7 printf("Thread start processing");
8 sqlite3_stmt *stmt;
9 int rc;
10 char *zErrMsg = NULL;
11 char *db_name[db_inc];
12 sqlite3 *db;
13 char *query = NULL;
14 db_exists:
15 //dbfull: //database is full, get new name.
16
17 sprintf(&db_name, "%ddatabase.db",db_inc);
18 char* filename = &db_name;
19 int exist = cfileexists(filename);
20 if(exist){
21 gotoxy(2, 3);
22 printf("File %s exists, incrementing name...",filename);
23
24
25 db_inc++;
26 goto db_exists;
27 }
28 else
29 {
30 gotoxy(3, 3);
31 printf("File %s does not exist. Creating database...",filename);
32
33
34 }
35
36 /* Open database btc_dataBase.db*/
37
38
39 rc = sqlite3_open_v2(db_name, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_CONFIG_MULTITHREAD, NULL);
40 if (rc) {
41 gotoxy(4, 3);
42 fprintf(stderr, "Can't open database: %s", sqlite3_errmsg(db));
43 sqlite3_close(db);
44 exit(EXIT_FAILURE);
45 } else {
46
47 gotoxy(5, 3);
48 //if (sqlite3_exec(db, "SELECT ;", NULL, NULL, NULL);)
49 fprintf(stdout, "Opened database successfully");
50 }
51 sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS BITCOIN (ADDRESS TEXT, PRIVKEY TEXT)", NULL, NULL, NULL);
52 sqlite3_exec(db, "BEGIN EXCLUSIVE TRANSACTION;", NULL, NULL, NULL);
53 /* Insert generated address into database */
54 //Begin loop to mass insert our accumulated keys
55 //sqlite3_mutex_enter(sqlite3_db_mutex(db));
56 asprintf(&query, "INSERT INTO BITCOIN (ADDRESS, PRIVKEY) VALUES('16rCmCmbuWDhPjWTrpQGaU3EPdZF7MTdUk','TESTTESTTEST')");
57 sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
58 sqlite3_exec(db, query, NULL, NULL, &zErrMsg);
59 sqlite3_finalize(stmt);
60 free(query);
61 //sqlite3_mutex_leave(sqlite3_db_mutex(db));
62 for(n=0;n<=vi;n++) {
63 sqlite3_mutex_enter(sqlite3_db_mutex(db)); // Get our own connection
64 //sqlite3_busy_timeout(db, 150); // incase we get locked, slow it down.
65 //asprintf(&query, "INSERT INTO BITCOIN (ADDRESS, PRIVKEY) VALUES('%s','%s')",wallet[n], privkey[n]); //whatevs primal
66 asprintf(&query, "INSERT INTO BITCOIN (ADDRESS, PRIVKEY) VALUES('%s','%s')",wallet[n], privkey[n]); //whatevs primal
67 //free(wallet[n]);
68 //free(privkey[n]);
69 sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL); // <---I really want to use this (I finally am!)
70
71 /* Execute Insert */
72 rc = sqlite3_exec(db, query, NULL, NULL, &zErrMsg); //do the execution
73 if (rc != SQLITE_OK) {
74 gotoxy(6, 40);
75 printf("Err %s ",sqlite3_errmsg(db));
76 goto out;
77 } else {
78 processed++; // increase processed because it was a success.
79 remaining = vi - processed;
80 gotoxy(6, 6);
81 printf("Inserting records");
82 gotoxy(7, 6);
83 fprintf(stdout, "Total: %d Processed: %d", vi, processed);
84 fflush( stdout );
85 }
86 sqlite3_finalize(stmt);
87 out: // in case of error
88 free(query); //free the memory
89 sqlite3_mutex_leave(sqlite3_db_mutex(db));
90
91 } //end for
92
93 sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);
94 sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);
95
96 if (rc != SQLITE_OK) {
97 fprintf(stderr, "INSERT SQL error: %s", zErrMsg);
98 sqlite3_free(zErrMsg);
99 }
100 i = 0; //reset i for next write
101 sqlite3_close(db);
102 gotoxy(8, 3);
103
104 printf("done writing database");
105 if (tp >= db_maxsize) { //Let's change the database name now.
106 gotoxy(9, 3);
107 printf("Database filled, changing filenames");
108 db_inc++;
109 tp = 0;
110 }
111 gotoxy(10, 3);
112 printf("Total processed: %d", total_accumulated);
113 processed = 0;
114 gotoxy(11, 3);
115 FILE *fout; // out file
116 fout = fopen("cmp.sh","w");
117 if(fout == NULL) { //error opening file
118 printf("Error opening file.");
119 };
120 // write to file
121
122 fprintf(fout,"attach 'wal.db' as 'db1';\n");
123 fprintf(fout,"attach '%s' as 'db2';\n",filename);
124 fprintf(fout,"select ADDRESS from db2.BITCOIN limit 0 offset 1;\n");
125 fprintf(fout,"select a.ADDRESS, b.PRIVKEY, a.balance from db1.BITCOIN a JOIN db2.BITCOIN b on a.ADDRESS = b.ADDRESS;\n");
126 // after you are done with the file
127 fflush(fout);
128 fclose(fout);
129 gotoxy(12, 6);
130 printf("Starting comparison of %s against the main database.",filename);
131 sprintf(query, "sqlite3 < cmp.sh | tee %s.txt", filename);
132 system(query);
133
134
135 gotoxy(13, 6);
136
137 printf("%s done processing , writing output.",filename);
138
139
140 pthread_exit(NULL);
141 return NULL;
142}