diff --git a/Makefile b/Makefile index f094a4b..cceb304 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: build run build: - gcc main.c -lsqlite3 -lreadline -o sorm + gcc main.c -Wextra -Wall -lsqlite3 -lreadline -o sorm gcc -shared -o sorm.so -fPIC main.c -lsqlite3 -lreadline run: diff --git a/cli.h b/cli.h index ebba7e3..cab9be3 100644 --- a/cli.h +++ b/cli.h @@ -14,6 +14,8 @@ const char *history_filename = ".sorm_history"; int _sorm_readline_accept_line(int count, int key) { + (void)count; + (void)key; if (strchr(rl_line_buffer, ';')) { rl_done = 1; @@ -42,6 +44,8 @@ char *_sorm_autocompletion_generator(const char *text, int state) { } char **_sorm_autocomplete(const char *text, int start, int end) { + (void)start; + (void)end; rl_attempted_completion_over = 1; return rl_completion_matches(text, _sorm_autocompletion_generator); } @@ -84,7 +88,7 @@ int sorm_cli_history_dump(const char *filename) { } input[file_size] = '\0'; - for (line_start = line_end = 0; line_end < file_size; line_end++) { + for (line_start = line_end = 0; (size_t)line_end < file_size; line_end++) { if (input[line_end] == '\n') { input[line_end] = '\0'; @@ -94,7 +98,7 @@ int sorm_cli_history_dump(const char *filename) { } } - if (line_start < file_size) + if ((size_t)line_start < file_size) printf("%s\n", input + line_start); free(input); @@ -139,9 +143,6 @@ bool sormrepl_handle_command(char *command) { return false; } void sormrepl(int sorm) { - sorm_t *db = sormg(sorm); - char sql[4097]; - sorm_cli_init(history_filename); char *query; while ((query = sorm_cli_readline("sql> "))) { @@ -150,7 +151,6 @@ void sormrepl(int sorm) { sorm_ptr res = sormq(sorm, query); if (res) { if (sormqt(query) == SORM_SELECT) { - int length = sormlv(res); sormfmtd(res); free(res); } else if (sormqt(query) == SORM_DELETE) { diff --git a/main.c b/main.c index 7c946e9..f1be87d 100644 --- a/main.c +++ b/main.c @@ -4,16 +4,13 @@ int main() { int db = sormc("db.sqlite3"); // sormq(db,"DROP TABLE IF EXISTS pony;"); - printf("%d\n", db); sormq(db, "CREATE TABLE IF NOT EXISTS pony (id INTEGER PRIMARY KEY AUTOINCREMENT,name,age);", NULL); - sorm_pk iid = sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Teenii", 19); - iid = sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Amber", 20); - iid = sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Feuerherz", 20); - - iid = sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Retoor", 34); - sorm_str csv = sormq(db, "SELECT * FROM pony WHERE id in (?i,?i,?i)", 1, 2, 3); - sorm_str csv2 = sormq(db, "SELECT * FROM pony WHERE id = %d and age = %d ", 1, 33); - sorm_str csv3 = sormq(db, "SELECT * FROM pony LIMIT 2"); + sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Teenii", 19); + sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Amber", 20); + sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Feuerherz", 20); + sormq(db, "INSERT INTO pony (id,name,age) VALUES (NULL,%s,%d);", "Retoor", 34); + sorm_str csv2 = (sorm_str)sormq(db, "SELECT * FROM pony WHERE id = %d and age = %d ", 1, 33); + sorm_str csv3 = (sorm_str)sormq(db, "SELECT * FROM pony LIMIT 2"); // free(csv3); // free(csv2); if (csv2) diff --git a/sorm b/sorm index 6bbe0f5..cc7c51e 100755 Binary files a/sorm and b/sorm differ diff --git a/sorm.h b/sorm.h index 4d4f899..4439e47 100644 --- a/sorm.h +++ b/sorm.h @@ -51,7 +51,6 @@ void sormd(int db); char *sormpt(char *sql, int number); unsigned int sormcq(char *sql, char *out); unsigned int sormpc(char *sql); -sqlite3_stmt *sormb(sorm_t *db, char *sql, ...); sorm_ptr sormq(int db, char *sql, ...); char *sorm_csvc(int db, sqlite3_stmt *stmt); char *sorm_csvd(int db, sqlite3_stmt *stmt); @@ -77,7 +76,7 @@ int sormc(char *path) { sorm_instance_count++; sorm_instances = realloc(sorm_instances, sorm_instance_count * sizeof(sorm_t *) + sorm_instance_count * sizeof(sorm_t)); - sorm_t *db = &sorm_instances[sorm_instance_count - 1]; + sorm_t *db = (sorm_t *)&sorm_instances[sorm_instance_count - 1]; db->conn = NULL; @@ -97,7 +96,7 @@ int sormc(char *path) { } return sorm_instance_count; } -sorm_t *sormg(int ptr) { return &sorm_instances[ptr - 1]; } +sorm_t *sormg(int ptr) { return (sorm_t *)&sorm_instances[ptr - 1]; } char *sormgcsv(int ptr) { /* sorm get csv*/ @@ -208,9 +207,10 @@ Execute 3.35s, Format: 36.77s Memory usage: 537 GB, 96.026 allocated, 96.024 freed, 2 in use. */ char *sorm_csvc(int db, sqlite3_stmt *stmt) { + (void)db; sormstr_t *str = sormstrn(512); unsigned int column_count = sqlite3_column_count(stmt); - for (int i = 0; i < column_count; i++) { + for (uint i = 0; i < column_count; i++) { const char *column_name = sqlite3_column_name(stmt, i); sormstra(str, column_name); sormstra(str, "("); @@ -225,7 +225,7 @@ char *sorm_csvc(int db, sqlite3_stmt *stmt) { return sormstrc(str); } char *sorm_csvd(int sorm, sqlite3_stmt *stmt) { - sorm_t *db = sormg(sorm); + (void)sorm; int rc = SQLITE_ROW; int column_count = sqlite3_column_count(stmt); /* @@ -252,7 +252,7 @@ char *sorm_csvd(int sorm, sqlite3_stmt *stmt) { sprintf(temp, "%f", sqlite3_column_double(stmt, field_index)); sormstra(str, temp); } else if (sqlite3_column_type(stmt, field_index) == SQLITE3_TEXT) { - const char *temp = sqlite3_column_text(stmt, field_index); + const char *temp = ( char *)sqlite3_column_text(stmt, field_index); sormstra(str, temp); } else { // exit(1); @@ -271,7 +271,6 @@ char *sorm_csvd(int sorm, sqlite3_stmt *stmt) { } char *sorm_csv(int sorm, sqlite3_stmt *stmt) { - sorm_t *db = sormg(sorm); sorm_row_count = 0; char *column_names = sorm_csvc(sorm, stmt); char *data = sorm_csvd(sorm, stmt); @@ -286,21 +285,10 @@ char *sorm_csv(int sorm, sqlite3_stmt *stmt) { return result; } -sqlite3_stmt *sormb(sorm_t *db, char *sql, ...) { - // Bind parameters to statement and return amount of parameters - int rc = 0; - sqlite3_stmt *stmt; - va_list args; - va_start(args, sql); - unsigned int number = 0; - char *clean_query = (char *)malloc(strlen(sql) + 1); - unsigned int parameter_count = sormcq(sql, clean_query); - free(clean_query); - return stmt; -} char *sormm(sorm_t *db) { + (void)db; /* sormmemory */ return rmalloc_stats(); } @@ -314,17 +302,16 @@ sorm_ptr sormq(int sorm, char *sql, ...) { sqlite3_stmt *stmt; sorm_ptr result = NULL; char *clean_query = malloc(strlen(sql) + 1); - unsigned int parameter_count = sormcq(sql, clean_query); + uint parameter_count = sormcq(sql, clean_query); int rc = sqlite3_prepare_v2(db->conn, clean_query, -1, &stmt, 0); if (rc != SQLITE_OK) { fprintf(stderr, "%s\n", sqlite3_errmsg(db->conn)); } free(clean_query); int number = 0; - for (int i = 0; i < parameter_count; i++) { + for (uint i = 0; i < parameter_count; i++) { number++; char *column_type = sormpt(sql, number); - int arg_index = number - 1; if (!strcmp(column_type, "int") || !strcmp(column_type, "integer") || !strcmp(column_type, "number")) { rc = sqlite3_bind_int(stmt, number, va_arg(args, int)); } else if (!strcmp(column_type, "int64")) { @@ -338,7 +325,7 @@ sorm_ptr sormq(int sorm, char *sql, ...) { rc = sqlite3_bind_blob(stmt, number, data, size, SQLITE_STATIC); } else if (!strcmp(column_type, "text") || !strcmp(column_type, "str") || !strcmp(column_type, "string")) { unsigned char *data = va_arg(args, unsigned char *); - rc = sqlite3_bind_text(stmt, number, data, -1, SQLITE_STATIC); + rc = sqlite3_bind_text(stmt, number, (char *)data, -1, SQLITE_STATIC); } if (rc != SQLITE_OK) { fprintf(stderr, "Failed to bind parameters: %s\n", sqlite3_errmsg(db->conn)); @@ -397,7 +384,7 @@ int sormlv(char *csv) { while (*csv) { char *found = strstr(csv, ";"); if (found) { - if (found - csv > longest) + if (found - csv > (long int)longest) longest = found - csv; csv = csv + (found - csv) + 1; } else { @@ -488,7 +475,7 @@ char *sormfmt(char *csv) { sormstr_t *str = sormstrn(longest + 2); while (*csv && (field = sormcsvn(csv))) { sormstra(str, field); - for (int i = 0; i < longest - strlen(field); i++) + for (size_t i = 0; i < longest - strlen(field); i++) sormstra(str, " "); csv += strlen(field); diff --git a/sorm.so b/sorm.so index f515e92..bedc6a1 100755 Binary files a/sorm.so and b/sorm.so differ