Merge pull request 78

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

View File

@ -1300,6 +1300,8 @@ static SQLRETURN SQL_API _SQLFreeEnv(
return SQL_ERROR;
}
g_ptr_array_free(env->connections, TRUE);
mdb_sql_exit(env->sql);
g_free(env);
return SQL_SUCCESS;
}
@ -1797,7 +1799,7 @@ static SQLRETURN SQL_API _SQLGetData(
{
char *str = mdb_col_to_string(mdb, mdb->pg_buf,
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) {
free(str);
return SQL_NO_DATA;

View File

@ -457,9 +457,18 @@ void mdb_sql_dump(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)
mdb_close(sql->mdb);
/* Cleanup the SQL engine object */
g_free(sql);
}
void mdb_sql_reset(MdbSQL *sql)
{
@ -473,6 +482,13 @@ void mdb_sql_reset(MdbSQL *sql)
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 */
mdb_sql_free_columns(sql->columns);
sql->num_columns = 0;

View File

@ -205,14 +205,14 @@ run_query(FILE *out, MdbSQL *sql, char *mybuf, char *delimiter)
else
printf("Index scanning %s using %s\n", table->name, table->scan_idx->name);
}
if (noexec) {
mdb_sql_reset(sql);
return;
/* If noexec != on, dump results */
if (!noexec) {
if (pretty_print)
dump_results_pp(out, sql);
else
dump_results(out, sql, delimiter);
}
if (pretty_print)
dump_results_pp(out, sql);
else
dump_results(out, sql, delimiter);
mdb_sql_reset(sql);
}
}
@ -281,8 +281,6 @@ dump_results(FILE *out, MdbSQL *sql, char *delimiter)
if (footers) {
print_rows_retrieved(out, row_count);
}
mdb_sql_reset(sql);
}
void
@ -338,13 +336,6 @@ dump_results_pp(FILE *out, MdbSQL *sql)
if (footers) {
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