dict @ 03aa0fe6c664f74e8e4e5877ef89b4e053b30bc5

  1#include <stdlib.h>
  2#include <stdio.h>
  3
  4#include "data.h"
  5
  6const char *insert_into = "INSERT INTO words (LINE) VALUES($VVV);";
  7const char *select_words = "SELECT Id, Line FROM words LIMIT 10;";
  8const char *create_table =  "CREATE TABLE IF NOT EXISTS words (ID INTEGER PRIMARY KEY AUTOINCREMENT, LINE TEXT NOT NULL);";
  9
 10Data* new_data(const char* con) {
 11    Data* data = (Data*)malloc(sizeof(Data));
 12
 13    int v = sqlite3_open(con, &(data->db));
 14    if (v == SQLITE_OK) {
 15        return data;
 16    }
 17
 18    print_result_code(v);
 19    return NULL;
 20}
 21
 22
 23void free_data(Data* data) {
 24    sqlite3_close(data->db);
 25    free(data);
 26}
 27
 28void insert(Data* data, char* line, int len) {
 29    sqlite3_stmt *stmt; 
 30    int r = sqlite3_prepare_v2(data->db, insert_into, -1, &stmt, NULL);
 31
 32    if (r != SQLITE_OK) {
 33        printf("Error executing insert: ");
 34        print_result_code(r);
 35        printf("\n");
 36        return;
 37    }
 38
 39    // binds the paremets to the statement, in this case the line;
 40    sqlite3_bind_text(stmt, 1, line, len, NULL);
 41
 42    int c = sqlite3_step(stmt);
 43    if (c != SQLITE_DONE) {
 44        printf("Error executing insert: ");
 45        print_result_code(r);
 46        printf("\n");
 47    }
 48
 49    sqlite3_finalize(stmt);
 50}
 51
 52void bootstrap(Data* data) {
 53    sqlite3_stmt *stmt; 
 54    int r = sqlite3_prepare_v2(data->db, create_table, -1, &stmt, NULL);
 55
 56    if (r != SQLITE_OK) {
 57        printf("Error preparing bootstrap: ");
 58        print_result_code(r);
 59        printf("\n");
 60        return;
 61    }
 62
 63    int c = sqlite3_step(stmt);
 64    if (c != SQLITE_DONE) {
 65        printf("Error executing bootstrap: ");
 66        print_result_code(r);
 67        printf("\n");
 68    }
 69
 70    sqlite3_finalize(stmt);
 71}
 72
 73LIST* select(Data* data) {
 74    sqlite3_stmt *stmt; 
 75    int r = sqlite3_prepare_v2(data->db, select_words, -1, &stmt, NULL);
 76
 77    if (r != SQLITE_OK) {
 78        printf("Error executing select: ");
 79        print_result_code(r);
 80        printf("\n");
 81        return NULL;
 82    }
 83
 84    LIST *list = NULL;
 85
 86    int m =  sqlite3_step(stmt);
 87    while(m == SQLITE_ROW) {
 88        Word *word = (Word*)malloc(sizeof(Word));
 89
 90        int id = sqlite3_column_int(stmt, 0);
 91        const unsigned char *line = sqlite3_column_text(stmt, 1);
 92
 93        word->Id = id;
 94        word->Line = line;
 95        list = list_add(list, word);
 96
 97        m = sqlite3_step(stmt);
 98    }
 99
100    sqlite3_finalize(stmt);
101
102    return list;
103}
104
105void print_result_code(int code) {
106    switch(code) {
107        // Primary result code
108        case SQLITE_ABORT:
109            printf("SQLITE_ABORT");
110            break;
111        case SQLITE_AUTH:
112            printf("SQLITE_AUTH");
113            break;
114        case SQLITE_BUSY:
115            printf("SQLITE_BUSY");
116            break;
117        case SQLITE_CANTOPEN:
118            printf("SQLITE_CANTOPEN");
119            break;
120        case SQLITE_CONSTRAINT:
121            printf("SQLITE_CONSTRAINT");
122            break;
123        case SQLITE_CORRUPT:
124            printf("SQLITE_CORRUPT");
125            break;
126        case SQLITE_DONE:
127            printf("SQLITE_DONE");
128            break;
129        case SQLITE_EMPTY:
130            printf("SQLITE_EMPTY");
131            break;
132        case SQLITE_ERROR:
133            printf("SQLITE_ERROR");
134            break;
135        case SQLITE_FORMAT:
136            printf("SQLITE_FORMAT");
137            break;
138        case SQLITE_INTERNAL:
139            printf("SQLITE_INTERNAL");
140            break;
141        case SQLITE_INTERRUPT:
142            printf("SQLITE_INTERRUPT");
143            break;
144        case SQLITE_IOERR:
145            printf("SQLITE_IOERR");
146            break;
147        case SQLITE_LOCKED:
148            printf("SQLITE_LOCKED");
149            break;
150        case SQLITE_MISMATCH:
151            printf("SQLITE_MISMATCH");
152            break;
153        case SQLITE_MISUSE:
154            printf("SQLITE_MISUSE");
155            break;
156        case SQLITE_NOLFS:
157            printf("SQLITE_NOLFS");
158            break;
159        case SQLITE_NOMEM:
160            printf("SQLITE_NOMEM");
161            break;
162        case SQLITE_NOTADB:
163            printf("SQLITE_NOTADB");
164            break;
165        case SQLITE_NOTFOUND:
166            printf("SQLITE_NOTFOUND");
167            break;
168        case SQLITE_NOTICE:
169            printf("SQLITE_NOTICE");
170            break;
171        case SQLITE_OK:
172            printf("SQLITE_OK");
173            break;
174        case SQLITE_PERM:
175            printf("SQLITE_PERM");
176            break;
177        case SQLITE_SCHEMA:
178            printf("SQLITE_SCHEMA");
179            break;
180        case SQLITE_TOOBIG:
181            printf("SQLITE_TOOBIG");
182            break;
183        case SQLITE_WARNING:
184            printf("SQLITE_WARNING");
185            break;
186    }
187}