# HG changeset patch # User meillo@marmaro.de # Date 1216806098 -7200 # Node ID 176ee28e7464938ea94ec82d7488499c1a3da066 # Parent 13c6828bd4a5a451781ab646c4994a8c697f00ce switched from mysql to sqlite; (+ some cleanups) diff -r 13c6828bd4a5 -r 176ee28e7464 clock.c --- a/clock.c Wed Jul 23 11:40:45 2008 +0200 +++ b/clock.c Wed Jul 23 11:41:38 2008 +0200 @@ -1,6 +1,5 @@ #include #include -#include #include "db.h" #include "game.h" @@ -8,28 +7,27 @@ void inc_time() { - /* get current time */ - sprintf(query, "select time from game where name = '%s' ", gamename); + sprintf(query, "select time from game;"); db_query(query); - result = mysql_store_result(conn); - if (mysql_num_rows(result)) { - row = mysql_fetch_row(result); - gametime = atoi(row[0]); + if (sqlite3_step(stmt) == SQLITE_ROW) { + gametime = sqlite3_column_int(stmt, 0); + printf("gametime: %d\n", gametime); + } else { + fprintf(stderr, "error: %s\n", sqlite3_errmsg(db)); } - mysql_free_result(result); - + sqlite3_finalize(stmt); /* increment time */ - sprintf(query, " update game set time = '%d' where name = '%s' ", ++gametime, gamename); + sprintf(query, " update game set time = '%d';", ++gametime); db_query(query); - if (mysql_affected_rows(conn) > 0) { + if (sqlite3_step(stmt) == SQLITE_DONE) { printf("time update successful\n"); printf("virtual time: %d\n", gametime); } else { - printf("E: time update failed\n"); + printf("error: time update failed: %s\n", sqlite3_errmsg(db)); } - + sqlite3_finalize(stmt); } @@ -41,10 +39,10 @@ printf("usage: %s \n", argv[0]); exit(1); } - gamename = argv[1]; + database = argv[1]; db_connect(); - check_game(); + read_time(); inc_time(); diff -r 13c6828bd4a5 -r 176ee28e7464 db.h --- a/db.h Wed Jul 23 11:40:45 2008 +0200 +++ b/db.h Wed Jul 23 11:41:38 2008 +0200 @@ -2,39 +2,51 @@ * data for the database connection */ -char* server = "localhost"; -char* user = "garten"; -char* password = "gras"; -char* database = "garten"; +#include -MYSQL* conn; -MYSQL_RES* result; -MYSQL_ROW row; +char* database; +char query[1024]; +sqlite3* db; +sqlite3_stmt* stmt; + void db_connect() { - conn = mysql_init(NULL); - - /* Connect to database */ - if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { - fprintf(stderr, "%s\n", mysql_error(conn)); + if (sqlite3_open(database, &db) != SQLITE_OK) { + fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); exit(1); } } void db_close() { - /* close connection */ - mysql_close(conn); + sqlite3_close(db); } +/* +static int callback(void* NotUsed, int argc, char* argv[], char* azColName[]){ + NotUsed = NULL; + int i; + for (i = 0; i < argc; i++) { + printf("%s = %s\n", azColName[i], argv[i] ? argv[i]: "NULL"); + } + printf("\n"); + return 0; +} + +int rc; +char* zErrMsg = 0; +rc = sqlite3_exec(db, query, callback, 0, &zErrMsg); +*/ + + void db_query(char* query) { int error; - /* send SQL query */ - error = mysql_query(conn, query); - /*printf("query: %s\nerror: %d / %d\n", query, error, mysql_errno(conn));*/ - if (error != 0) { - fprintf(stderr, "E: %s\n", mysql_error(conn)); + + error = sqlite3_prepare(db, query, -1, &stmt, NULL); + if (error) { + fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); } } diff -r 13c6828bd4a5 -r 176ee28e7464 environment.c --- a/environment.c Wed Jul 23 11:40:45 2008 +0200 +++ b/environment.c Wed Jul 23 11:41:38 2008 +0200 @@ -1,6 +1,5 @@ #include #include -#include #include "db.h" #include "game.h" @@ -12,7 +11,7 @@ int groundwater, slugs, earthworms; /* get weather and last environments to calculate the next one * - sprintf(query, "select time from simulation where name = '%s' ", gamename); + sprintf(query, "select time from simulation"); db_query(query); result = mysql_store_result(conn); if (mysql_num_rows(result)) { @@ -29,14 +28,14 @@ /* set weather */ sprintf(query, " insert into environment \ - (tick, game_id, groundwater, slugs, earthworms) \ - values ('%d', '%d', '%d', '%d', '%d') ", - gametime, gameid, groundwater, slugs, earthworms); + (tick, groundwater, slugs, earthworms) \ + values ('%d', '%d', '%d', '%d') ", + gametime, groundwater, slugs, earthworms); db_query(query); - if (mysql_affected_rows(conn) > 0) { + if (sqlite3_step(stmt) == SQLITE_DONE) { printf("environment successful inserted\n"); } else { - printf("E: environment insertion failed\n"); + printf("error: environment insertion failed: %s\n", sqlite3_errmsg(db)); } } @@ -47,13 +46,13 @@ /* init */ if (argc != 2) { - printf("usage: %s \n", argv[0]); + printf("usage: %s \n", argv[0]); exit(1); } - gamename = argv[1]; + database = argv[1]; db_connect(); - check_game(); + read_time(); set_environment(); diff -r 13c6828bd4a5 -r 176ee28e7464 game.h --- a/game.h Wed Jul 23 11:40:45 2008 +0200 +++ b/game.h Wed Jul 23 11:41:38 2008 +0200 @@ -1,25 +1,15 @@ -char query[1024]; -char* gamename; -int gameid; int gametime; -void check_game() { - int rows; - MYSQL_ROW row; - - sprintf(query, "select id, time from game where name = '%s' ", gamename); +int read_time() { + sprintf(query, "select time from game;"); db_query(query); - result = mysql_store_result(conn); - rows = mysql_num_rows(result); - row = mysql_fetch_row(result); - gameid = atoi(row[0]); - gametime = atoi(row[1]); - mysql_free_result(result); - - if (rows != 1) { - printf("game '%s' does not exist\n", gamename); + if (sqlite3_step(stmt) != SQLITE_ROW) { + printf("error: %s\n", sqlite3_errmsg(db)); exit(1); } + gametime = sqlite3_column_int(stmt, 0); + sqlite3_finalize(stmt); + return gametime; } diff -r 13c6828bd4a5 -r 176ee28e7464 growth.c --- a/growth.c Wed Jul 23 11:40:45 2008 +0200 +++ b/growth.c Wed Jul 23 11:41:38 2008 +0200 @@ -1,6 +1,5 @@ #include #include -#include #include "db.h" #include "game.h" @@ -16,15 +15,12 @@ sprintf(query, "select\ f.id, f.size, f.age, p.size, p.growspeed, p.age\ from field f\ - join plant p on f.plant_id = p.id\ - where f.game_id = '%d' ", - gameid); + join plant p on f.plant_id = p.id "); db_query(query); - result = mysql_store_result(conn); - printf("number of plants to process: %d\n", (int)mysql_num_rows(result)); - while ((row = mysql_fetch_row(result)) != NULL) { + /* printf("number of plants to process: %d\n", (int)mysql_num_rows(result)); */ + while (sqlite3_step(stmt) == SQLITE_ROW) { for (i = 0; i < 6; i++) { - r[i] = atoi(row[i]); + r[i] = (char) sqlite3_column_int(stmt, i); } sprintf(query, "update field set \ @@ -32,15 +28,16 @@ where id = '%d' ", (r[1] + 1), r[2]+1, r[0]); db_query(query); + ; - if (mysql_affected_rows(conn) > 0) { + if (sqlite3_step(stmt) == SQLITE_DONE) { printf("update successful ++ %s\n", query); } else { - printf("E: update failed ++ %s\n", query); + printf("E: update failed ++ %s\n", sqlite3_errmsg(db)); } } - mysql_free_result(result); + sqlite3_finalize(stmt); @@ -53,13 +50,13 @@ /* init */ if (argc != 2) { - printf("usage: %s \n", argv[0]); + printf("usage: %s \n", argv[0]); exit(1); } - gamename = argv[1]; + database = argv[1]; db_connect(); - check_game(); + read_time(); grow_plants(); diff -r 13c6828bd4a5 -r 176ee28e7464 weather.c --- a/weather.c Wed Jul 23 11:40:45 2008 +0200 +++ b/weather.c Wed Jul 23 11:41:38 2008 +0200 @@ -1,6 +1,5 @@ #include #include -#include #include #include "db.h" @@ -45,11 +44,20 @@ sprintf(query, " select temp, sun, rain, wind, hum from weather " - " where game_id = '%d' " " order by tick desc " " limit %d " - , gameid, nlast); + , nlast); db_query(query); + for (i = 0; i < nlast && sqlite3_step(stmt) == SQLITE_ROW; i++) { + lastw[i].temp = sqlite3_column_double(stmt, 0); + lastw[i].sun = sqlite3_column_double(stmt, 1); + lastw[i].rain = sqlite3_column_double(stmt, 2); + lastw[i].wind = sqlite3_column_double(stmt, 3); + lastw[i].hum = sqlite3_column_double(stmt, 4); + } + sqlite3_finalize(stmt); + + /* result = mysql_store_result(conn); for (i = 0; i < nlast && (row = mysql_fetch_row(result)); i++) { lastw[i].temp = atof(row[0]); @@ -59,6 +67,7 @@ lastw[i].hum = atof(row[4]); } mysql_free_result(result); + */ } @@ -72,16 +81,20 @@ } -int setweather(struct weather* w) { +void setweather(struct weather* w) { char query[512]; sprintf(query, " insert into weather " - " (tick, game_id, temp, sun, rain, wind, hum) " - " values ('%d', '%d', '%f', '%f', '%f', '%f', '%f') " - , gametime, gameid, w->temp, w->sun, w->rain, w->wind, w->hum); + " (tick, temp, sun, rain, wind, hum) " + " values ('%d', '%f', '%f', '%f', '%f', '%f') " + , gametime, w->temp, w->sun, w->rain, w->wind, w->hum); db_query(query); puts(query); - return mysql_affected_rows(conn); + if (sqlite3_step(stmt) == SQLITE_DONE) { + printf("weather successful inserted\n"); + } else { + printf("error: weather insertion failed: %s\n", sqlite3_errmsg(db)); + } } @@ -90,13 +103,13 @@ /* init */ if (argc != 2) { - printf("usage: %s \n", argv[0]); + printf("usage: %s \n", argv[0]); exit(1); } - gamename = argv[1]; + database = argv[1]; db_connect(); - check_game(); + read_time(); srand((unsigned int) time(NULL)); @@ -105,17 +118,8 @@ struct weather lastn[Nlast]; getlastweather(lastn, Nlast); - genweather(&w, lastn, Nlast, May); - - if (setweather(&w) > 0) { - printf("weather successful inserted\n"); - } else { - printf("E: weather insertion failed\n"); - } - -/* set_weather(); */ - + setweather(&w); db_close();