mirror of
https://github.com/mdbtools/mdbtools.git
synced 2025-11-26 02:09:49 +08:00
Merge pull request 78
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user