Merge pull request 78

This commit is contained in:
Nirgal Vourgère
2015-05-26 17:34:51 +02:00
3 changed files with 27 additions and 18 deletions

View File

@@ -1300,6 +1300,8 @@ static SQLRETURN SQL_API _SQLFreeEnv(
return SQL_ERROR; return SQL_ERROR;
} }
g_ptr_array_free(env->connections, TRUE); g_ptr_array_free(env->connections, TRUE);
mdb_sql_exit(env->sql);
g_free(env);
return SQL_SUCCESS; return SQL_SUCCESS;
} }
@@ -1797,7 +1799,7 @@ static SQLRETURN SQL_API _SQLGetData(
{ {
char *str = mdb_col_to_string(mdb, mdb->pg_buf, char *str = mdb_col_to_string(mdb, mdb->pg_buf,
col->cur_value_start, col->col_type, col->cur_value_len); col->cur_value_start, col->col_type, col->cur_value_len);
int len = strlen(str) + 1; // including \0 int len = strlen(str);
if (stmt->pos >= len) { if (stmt->pos >= len) {
free(str); free(str);
return SQL_NO_DATA; return SQL_NO_DATA;

View File

@@ -457,9 +457,18 @@ void mdb_sql_dump(MdbSQL *sql)
} }
void mdb_sql_exit(MdbSQL *sql) void mdb_sql_exit(MdbSQL *sql)
{ {
mdb_sql_reset(sql); // Free memory /* Free the memory associated with the SQL engine */
mdb_sql_reset(sql);
g_ptr_array_free(sql->columns, TRUE);
g_ptr_array_free(sql->tables, TRUE);
/* If libmdb has been initialized, terminate it */
if (sql->mdb) if (sql->mdb)
mdb_close(sql->mdb); mdb_close(sql->mdb);
/* Cleanup the SQL engine object */
g_free(sql);
} }
void mdb_sql_reset(MdbSQL *sql) void mdb_sql_reset(MdbSQL *sql)
{ {
@@ -473,6 +482,13 @@ void mdb_sql_reset(MdbSQL *sql)
sql->cur_table = NULL; sql->cur_table = NULL;
} }
/* Reset bound values */
unsigned int i;
for (i=0;i<sql->num_columns;i++) {
g_free(sql->bound_values[i]);
sql->bound_values[i] = NULL;
}
/* Reset columns */ /* Reset columns */
mdb_sql_free_columns(sql->columns); mdb_sql_free_columns(sql->columns);
sql->num_columns = 0; sql->num_columns = 0;

View File

@@ -205,14 +205,14 @@ run_query(FILE *out, MdbSQL *sql, char *mybuf, char *delimiter)
else else
printf("Index scanning %s using %s\n", table->name, table->scan_idx->name); printf("Index scanning %s using %s\n", table->name, table->scan_idx->name);
} }
if (noexec) { /* If noexec != on, dump results */
mdb_sql_reset(sql); if (!noexec) {
return; if (pretty_print)
dump_results_pp(out, sql);
else
dump_results(out, sql, delimiter);
} }
if (pretty_print) mdb_sql_reset(sql);
dump_results_pp(out, sql);
else
dump_results(out, sql, delimiter);
} }
} }
@@ -281,8 +281,6 @@ dump_results(FILE *out, MdbSQL *sql, char *delimiter)
if (footers) { if (footers) {
print_rows_retrieved(out, row_count); print_rows_retrieved(out, row_count);
} }
mdb_sql_reset(sql);
} }
void void
@@ -338,13 +336,6 @@ dump_results_pp(FILE *out, MdbSQL *sql)
if (footers) { if (footers) {
print_rows_retrieved(out, row_count); print_rows_retrieved(out, row_count);
} }
/* clean up */
for (j=0;j<sql->num_columns;j++) {
g_free(sql->bound_values[j]);
}
mdb_sql_reset(sql);
} }
int int