diff --git a/include/mdbsql.h b/include/mdbsql.h index 70493b3..47b098b 100644 --- a/include/mdbsql.h +++ b/include/mdbsql.h @@ -100,11 +100,11 @@ void mdb_sql_describe_table(MdbSQL *sql); MdbSQL* mdb_sql_run_query (MdbSQL*, const gchar*); void mdb_sql_set_maxrow(MdbSQL *sql, int maxrow); int mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2); -void mdb_sql_bind_all(MdbSQL *sql); +int mdb_sql_bind_all(MdbSQL *sql); void mdb_sql_unbind_all(MdbSQL *sql); int mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table); int mdb_sql_add_temp_col(MdbSQL *sql, MdbTableDef *ttable, int col_num, char *name, int col_type, int col_size, int is_fixed); -void mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr); +int mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr); int mdb_sql_add_limit(MdbSQL *sql, char *limit, int percent); int mdb_sql_get_limit(MdbSQL *sql); diff --git a/src/odbc/odbc.c b/src/odbc/odbc.c index 4802b74..2120f3d 100644 --- a/src/odbc/odbc.c +++ b/src/odbc/odbc.c @@ -1037,11 +1037,8 @@ bind_columns(struct _hstmt *stmt) if (stmt->rows_affected==0) { cur = stmt->bind_head; while (cur) { - if (cur->column_number>0 && - cur->column_number <= stmt->sql->num_columns) { - mdb_sql_bind_column(stmt->sql, cur->column_number, - cur->varaddr, cur->column_lenbind); - } else { + if (mdb_sql_bind_column(stmt->sql, cur->column_number, + cur->varaddr, cur->column_lenbind) == -1) { /* log error ? */ } cur = cur->next; diff --git a/src/sql/mdbsql.c b/src/sql/mdbsql.c index 17e3e47..f45e3d1 100644 --- a/src/sql/mdbsql.c +++ b/src/sql/mdbsql.c @@ -112,7 +112,10 @@ mdb_sql_run_query (MdbSQL* sql, const gchar* querystr) { return NULL; } - mdb_sql_bind_all (sql); + if (mdb_sql_bind_all(sql) == -1) { + mdb_sql_error (sql, _("Failed to bind columns for '%s' command"), querystr); + return NULL; + } return sql; } @@ -872,16 +875,20 @@ int found = 0; } } -void +int mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr) { MdbSQLColumn *sqlcol; + if (colnum <= 0 || colnum > sql->num_columns) + return -1; + /* sql columns are traditionally 1 based, so decrement colnum */ sqlcol = g_ptr_array_index(sql->columns,colnum - 1); - mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr, len_ptr); + return mdb_bind_column_by_name(sql->cur_table, sqlcol->name, varaddr, len_ptr); } -void + +int mdb_sql_bind_all(MdbSQL *sql) { unsigned int i; @@ -890,8 +897,12 @@ mdb_sql_bind_all(MdbSQL *sql) for (i=0;inum_columns;i++) { bound_value = g_malloc0(sql->mdb->bind_size); g_ptr_array_add(sql->bound_values, bound_value); - mdb_sql_bind_column(sql, i+1, bound_value, NULL); + if (mdb_sql_bind_column(sql, i+1, bound_value, NULL) == -1) { + mdb_sql_unbind_all(sql); + return -1; + } } + return sql->num_columns; } void mdb_sql_unbind_all(MdbSQL *sql)