changeset 11:176ee28e7464

switched from mysql to sqlite; (+ some cleanups)
author meillo@marmaro.de
date Wed, 23 Jul 2008 11:41:38 +0200
parents 13c6828bd4a5
children 8db6497d6065
files clock.c db.h environment.c game.h growth.c weather.c
diffstat 6 files changed, 96 insertions(+), 96 deletions(-) [+]
line wrap: on
line diff
--- 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 <stdio.h>
 #include <stdlib.h>
-#include <mysql.h>
 
 #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 <game>\n", argv[0]);
 		exit(1);
 	}
-	gamename = argv[1];
+	database = argv[1];
 
 	db_connect();
-	check_game();
+	read_time();
 
 	inc_time();
 
--- 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 <sqlite3.h>
 
-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));
 	}
 }
--- 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 <stdio.h>
 #include <stdlib.h>
-#include <mysql.h>
 
 #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 <game>\n", argv[0]);
+		printf("usage: %s <database>\n", argv[0]);
 		exit(1);
 	}
-	gamename = argv[1];
+	database = argv[1];
 
 	db_connect();
-	check_game();
+	read_time();
 
 	set_environment();
 
--- 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;
 }
 
--- 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 <stdio.h>
 #include <stdlib.h>
-#include <mysql.h>
 
 #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 <game>\n", argv[0]);
+		printf("usage: %s <database>\n", argv[0]);
 		exit(1);
 	}
-	gamename = argv[1];
+	database = argv[1];
 
 	db_connect();
-	check_game();
+	read_time();
 
 	grow_plants();
 
--- 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 <stdio.h>
 #include <stdlib.h>
-#include <mysql.h>
 #include <time.h>
 
 #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 <game>\n", argv[0]);
+		printf("usage: %s <database>\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();