Преглед изворни кода

SQLite driver: get real return codes

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@48350 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz пре 13 година
родитељ
комит
c139beaa14

+ 3 - 1
db/drivers/sqlite/create_table.c

@@ -130,12 +130,14 @@ int db__driver_create_table(dbTable * table)
 	}
 
 	ret = sqlite3_step(statement);
+	/* get real result code */
+	ret = sqlite3_reset(statement);
 
 	if (ret == SQLITE_SCHEMA) {
 	    sqlite3_finalize(statement);
 	    /* try again */
 	}
-	else if (ret != SQLITE_DONE) {
+	else if (ret != SQLITE_OK) {
 	    append_error("Error in sqlite3_step():\n");
 	    append_error((char *)sqlite3_errmsg(sqlite));
 	    report_error();

+ 26 - 15
db/drivers/sqlite/describe.c

@@ -65,20 +65,20 @@ int db__driver_describe_table(dbString * table_name, dbTable ** table)
 	    return DB_FAILED;
 	}
 
-	if (describe_table(statement, table, NULL) == DB_FAILED) {
-
-	    ret = sqlite3_errcode(sqlite);
-	    if (ret == SQLITE_SCHEMA) {
-		sqlite3_finalize(statement);
-		/* try again */
-	    }
-	    else {
-		append_error("Cannot describe table:\n");
-		append_error((char *)sqlite3_errmsg(sqlite));
-		report_error();
-		sqlite3_finalize(statement);
-		return DB_FAILED;
-	    }
+	ret = sqlite3_step(statement);
+	/* get real result code */
+	ret = sqlite3_reset(statement);
+
+	if (ret == SQLITE_SCHEMA) {
+	    sqlite3_finalize(statement);
+	    /* try again */
+	}
+	else if (ret != SQLITE_OK) {
+	    append_error("Error in sqlite3_step():\n");
+	    append_error((char *)sqlite3_errmsg(sqlite));
+	    report_error();
+	    sqlite3_finalize(statement);
+	    return DB_FAILED;
 	}
 	else
 	    break;
@@ -86,6 +86,14 @@ int db__driver_describe_table(dbString * table_name, dbTable ** table)
 
     db_free_string(&sql);
 
+    if (describe_table(statement, table, NULL) == DB_FAILED) {
+	append_error("Cannot describe table:\n");
+	append_error((char *)sqlite3_errmsg(sqlite));
+	report_error();
+	sqlite3_finalize(statement);
+	return DB_FAILED;
+    }
+
     sqlite3_finalize(statement);
 
     return DB_OK;
@@ -116,8 +124,11 @@ int describe_table(sqlite3_stmt * statement, dbTable ** table, cursor * c)
     /* Try to get first row */
     ret = sqlite3_step(statement);
     if (ret != SQLITE_DONE && ret != SQLITE_ROW) {
+	/* get real result code */
 	ret = sqlite3_reset(statement);
-	G_warning(_("SQLite driver: %s"), sqlite3_errmsg(sqlite));
+	append_error("Error in sqlite3_step():\n");
+	append_error((char *)sqlite3_errmsg(sqlite));
+	report_error();
 	return DB_FAILED;
     }
 

+ 4 - 2
db/drivers/sqlite/execute.c

@@ -55,16 +55,18 @@ int db__driver_execute_immediate(dbString * sql)
 	}
 
 	ret = sqlite3_step(stmt);
+	/* get real result code */
+	ret = sqlite3_reset(stmt);
 
 	if (ret == SQLITE_SCHEMA) {
 	    sqlite3_finalize(stmt);
 	    /* try again */
 	}
-	else if (ret != SQLITE_DONE) {
+	else if (ret != SQLITE_OK) {
 	    append_error("Error in sqlite3_step():\n");
 	    append_error((char *)sqlite3_errmsg(sqlite));
 	    report_error();
-	    ret = sqlite3_finalize(stmt);
+	    sqlite3_finalize(stmt);
 	    return DB_FAILED;
 	}
 	else

+ 7 - 6
db/drivers/sqlite/fetch.c

@@ -65,13 +65,14 @@ int db__driver_fetch(dbCursor * cn, int position, int *more)
 
 	ret = sqlite3_step(c->statement);
 	if (ret != SQLITE_ROW) {
-	    if (ret != SQLITE_DONE) {
+	    /* get real result code */
+	    ret = sqlite3_reset(c->statement);
+	    if (ret != SQLITE_OK) {
 		append_error("Cannot fetch:\n");
 		append_error((char *)sqlite3_errmsg(sqlite));
 		report_error();
 		return DB_FAILED;
 	    }
-	    sqlite3_reset(c->statement);
 	    *more = 0;
 	    return DB_OK;
 	}
@@ -272,16 +273,16 @@ int db__driver_get_num_rows(dbCursor * cn)
 	c->nrows++;
     }
 
-    if (ret != SQLITE_DONE) {
-	ret = sqlite3_reset(c->statement);
+    /* get real result code */
+    ret = sqlite3_reset(c->statement);
+
+    if (ret != SQLITE_OK) {
 	append_error("Cannot get number of rows\n");
 	append_error((char *)sqlite3_errmsg(sqlite));
 	report_error();
 	return DB_FAILED;
     }
 
-    sqlite3_reset(c->statement);
-
     /* Reset cursor position */
     row = -1;
     if (c->row > -1) {

+ 5 - 2
db/drivers/sqlite/index.c

@@ -83,22 +83,25 @@ int db__driver_create_index(dbIndex * index)
 	}
 
 	ret = sqlite3_step(statement);
+	/* get real result code */
+	ret = sqlite3_reset(statement);
 
 	if (ret == SQLITE_SCHEMA) {
 	    sqlite3_finalize(statement);
 	    /* try again */
 	}
-	else if (ret != SQLITE_DONE) {
+	else if (ret != SQLITE_OK) {
 	    append_error("Error in sqlite3_step():\n");
 	    append_error((char *)sqlite3_errmsg(sqlite));
 	    report_error();
+	    sqlite3_finalize(statement);
+	    db_free_string(&sql);
 	    return DB_FAILED;
 	}
 	else
 	    break;
     }
 
-    sqlite3_reset(statement);
     sqlite3_finalize(statement);
     db_free_string(&sql);
 

+ 11 - 1
db/drivers/sqlite/listtab.c

@@ -57,7 +57,16 @@ int db__driver_list_tables(dbString ** tlist, int *tcount, int system)
     while (sqlite3_step(statement) == SQLITE_ROW) {
 	nrows++;
     }
-    sqlite3_reset(statement);
+    /* get real result code */
+    ret = sqlite3_reset(statement);
+    
+    if (ret != SQLITE_OK) {
+	append_error("Cannot list tables\n");
+	append_error((char *)sqlite3_errmsg(sqlite));
+	report_error();
+	sqlite3_finalize(statement);
+	return DB_FAILED;
+    }
 
     G_debug(3, "nrows = %d", nrows);
 
@@ -66,6 +75,7 @@ int db__driver_list_tables(dbString ** tlist, int *tcount, int system)
     if (list == NULL) {
 	append_error("Cannot db_alloc_string_array()");
 	report_error();
+	sqlite3_finalize(statement);
 	return DB_FAILED;
     }
 

+ 21 - 12
db/drivers/sqlite/select.c

@@ -68,18 +68,20 @@ int db__driver_open_select_cursor(dbString * sel, dbCursor * dbc, int mode)
 	    return DB_FAILED;
 	}
 
-	if (describe_table(c->statement, &table, c) == DB_FAILED) {
-	    ret = sqlite3_errcode(sqlite);
-	    if (ret == SQLITE_SCHEMA) {
-		sqlite3_finalize(c->statement);
-		/* try again */
-	    }
-	    else {
-		append_error("Cannot describe table\n");
-		append_error((char *)sqlite3_errmsg(sqlite));
-		report_error();
-		return DB_FAILED;
-	    }
+	ret = sqlite3_step(c->statement);
+	/* get real result code */
+	ret = sqlite3_reset(c->statement);
+
+	if (ret == SQLITE_SCHEMA) {
+	    sqlite3_finalize(c->statement);
+	    /* try again */
+	}
+	else if (ret != SQLITE_OK) {
+	    append_error("Error in sqlite3_step():\n");
+	    append_error((char *)sqlite3_errmsg(sqlite));
+	    report_error();
+	    sqlite3_finalize(c->statement);
+	    return DB_FAILED;
 	}
 	else
 	    break;
@@ -88,6 +90,13 @@ int db__driver_open_select_cursor(dbString * sel, dbCursor * dbc, int mode)
     if (str)
 	G_free(str);
 
+    if (describe_table(c->statement, &table, c) == DB_FAILED) {
+	append_error("Cannot describe table\n");
+	append_error((char *)sqlite3_errmsg(sqlite));
+	report_error();
+	return DB_FAILED;
+    }
+
     c->nrows = -1;
     c->row = -1;