diff options
Diffstat (limited to 'lib/odbc/c_src/odbcserver.c')
-rw-r--r-- | lib/odbc/c_src/odbcserver.c | 89 |
1 files changed, 57 insertions, 32 deletions
diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c index ee5dc9cd0a..b22a6cb7af 100644 --- a/lib/odbc/c_src/odbcserver.c +++ b/lib/odbc/c_src/odbcserver.c @@ -178,7 +178,7 @@ static void encode_column_dyn(db_column column, int column_nr, db_state *state); static void encode_data_type(SQLSMALLINT sql_type, SQLINTEGER size, SQLSMALLINT decimal_digits, db_state *state); -static Boolean decode_params(db_state *state, byte *buffer, int *index, param_array **params, +static Boolean decode_params(db_state *state, char *buffer, int *index, param_array **params, int i, int j, int num_param_values); /*------------- Erlang port communication functions ----------------------*/ @@ -222,7 +222,7 @@ static SQLLEN* alloc_strlen_indptr(int n, int val); static void init_driver(int erl_auto_commit_mode, int erl_trace_driver, db_state *state); -static void init_param_column(param_array *params, byte *buffer, int *index, +static void init_param_column(param_array *params, char *buffer, int *index, int num_param_values, db_state* state); static void init_param_statement(int cols, @@ -235,7 +235,7 @@ static void map_dec_num_2_c_column(col_type *type, int precision, static db_result_msg map_sql_2_c_column(db_column* column, db_state *state); -static param_array * bind_parameter_arrays(byte *buffer, int *index, +static param_array * bind_parameter_arrays(char *buffer, int *index, int cols, int num_param_values, db_state *state); @@ -259,10 +259,10 @@ static void str_tolower(char *str, int len); /* ----------------------------- CODE ------------------------------------*/ #if defined(WIN32) -# define DO_EXIT(code) do { ExitProcess((code)); exit((code));} while (0) -/* exit() called only to avoid a warning */ +# define DO_EXIT(code) do { ExitProcess((code)); _exit((code));} while (0) +/* _exit() called only to avoid a warning */ #else -# define DO_EXIT(code) exit((code)) +# define DO_EXIT(code) _exit((code)) #endif /* ----------------- Main functions --------------------------------------*/ @@ -278,7 +278,7 @@ int main(void) msg = receive_erlang_port_msg(); - temp = strtok(msg, ";"); + temp = strtok((char*)msg, ";"); if (temp == NULL) DO_EXIT(EXIT_STDIN_BODY); length = strlen(temp); @@ -509,7 +509,9 @@ static db_result_msg db_connect(byte *args, db_state *state) diagnos = get_diagnos(SQL_HANDLE_DBC, connection_handle(state), extended_errors(state)); strcat((char *)diagnos.error_msg, " Connection to database failed."); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError ); + msg = encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError ); if(!sql_success(SQLFreeHandle(SQL_HANDLE_DBC, connection_handle(state)))) @@ -544,7 +546,9 @@ static db_result_msg db_connect(byte *args, db_state *state) diagnos = get_diagnos(SQL_HANDLE_DBC, connection_handle(state), extended_errors(state)); strcat((char *)diagnos.error_msg, " Set autocommit mode failed."); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char*)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); if(!sql_success(SQLFreeHandle(SQL_HANDLE_DBC, connection_handle(state)))) @@ -576,7 +580,9 @@ static db_result_msg db_close_connection(db_state *state) if (!sql_success(result)) { diagnos = get_diagnos(SQL_HANDLE_DBC, connection_handle(state), extended_errors(state)); - return encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + return encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); } if(!sql_success(SQLFreeHandle(SQL_HANDLE_DBC, @@ -603,7 +609,9 @@ static db_result_msg db_end_tran(byte compleationtype, db_state *state) if (!sql_success(result)) { diagnos = get_diagnos(SQL_HANDLE_DBC, connection_handle(state), extended_errors(state)); - return encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + return encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); } else { return encode_atom_message("ok"); } @@ -645,7 +653,7 @@ static db_result_msg db_query(byte *sql, db_state *state) it as we want a nice and clean Erlang API */ if((strcmp((char *)is_error, "error") == 0)) { - msg = encode_error_message((char *)diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char *)diagnos.error_msg,extended_error(state, diagnos.sqlState), diagnos.nativeError); clean_state(state); return msg; } @@ -686,7 +694,7 @@ static db_result_msg db_query(byte *sql, db_state *state) ei_x_free(&(dynamic_buffer(state))); return msg; } else { - msg.buffer = dynamic_buffer(state).buff; + msg.buffer = (byte*)dynamic_buffer(state).buff; msg.length = dynamic_buffer(state).index; msg.dyn_alloc = TRUE; return msg; @@ -722,7 +730,9 @@ static db_result_msg db_select_count(byte *sql, db_state *state) if(!sql_success(SQLExecDirect(statement_handle(state), (SQLCHAR *)sql, SQL_NTS))) { diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); clean_state(state); - return encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + return encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); } if(!sql_success(SQLNumResultCols(statement_handle(state), @@ -810,7 +820,7 @@ static db_result_msg db_select(byte *args, db_state *state) ei_x_free(&(dynamic_buffer(state))); return msg; } else { - msg.buffer = dynamic_buffer(state).buff; + msg.buffer = (byte*)dynamic_buffer(state).buff; msg.length = dynamic_buffer(state).index; msg.dyn_alloc = TRUE; return msg; @@ -819,9 +829,10 @@ static db_result_msg db_select(byte *args, db_state *state) /* Description: Handles parameterized queries ex: INSERT INTO FOO VALUES(?, ?) */ -static db_result_msg db_param_query(byte *buffer, db_state *state) +static db_result_msg db_param_query(byte *byte_buffer, db_state *state) { - byte *sql; + char *sql; + char *buffer = (char *)byte_buffer; db_result_msg msg; SQLLEN num_param_values; int i, ver = 0, @@ -847,7 +858,7 @@ static db_result_msg db_param_query(byte *buffer, db_state *state) ei_get_type(buffer, &index, &erl_type, &size); - sql = (byte*)safe_malloc((sizeof(byte) * (size + 1))); + sql = safe_malloc((sizeof(byte) * (size + 1))); ei_decode_string(buffer, &index, sql); ei_decode_long(buffer, &index, &long_num_param_values); @@ -871,7 +882,9 @@ static db_result_msg db_param_query(byte *buffer, db_state *state) updates/deletes that affect no rows */ if(!sql_success(result) && !(result == SQL_NO_DATA && !strcmp((char *)diagnos.sqlState, INFO))) { - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char*)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); } else { for (i = 0; i < param_status.params_processed; i++) { switch (param_status.param_status_array[i]) { @@ -886,7 +899,9 @@ static db_result_msg db_param_query(byte *buffer, db_state *state) default: diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char*)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); i = param_status.params_processed; break; } @@ -899,7 +914,7 @@ static db_result_msg db_param_query(byte *buffer, db_state *state) msg = encode_result(state); } if(msg.length == 0) { - msg.buffer = dynamic_buffer(state).buff; + msg.buffer = (byte *)dynamic_buffer(state).buff; msg.length = dynamic_buffer(state).index; msg.dyn_alloc = TRUE; } else { /* Error occurred */ @@ -956,7 +971,9 @@ static db_result_msg db_describe_table(byte *sql, db_state *state) if (!sql_success(SQLPrepare(statement_handle(state), (SQLCHAR *)sql, SQL_NTS))){ diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); clean_state(state); return msg; } @@ -964,7 +981,9 @@ static db_result_msg db_describe_table(byte *sql, db_state *state) if(!sql_success(SQLNumResultCols(statement_handle(state), &num_of_columns))) { diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); clean_state(state); return msg; } @@ -992,7 +1011,7 @@ static db_result_msg db_describe_table(byte *sql, db_state *state) ei_x_encode_empty_list(&dynamic_buffer(state)); clean_state(state); - msg.buffer = dynamic_buffer(state).buff; + msg.buffer = (byte *)dynamic_buffer(state).buff; msg.length = dynamic_buffer(state).index; msg.dyn_alloc = TRUE; return msg; @@ -1088,7 +1107,9 @@ static db_result_msg encode_result(db_state *state) if(!sql_success(SQLNumResultCols(statement_handle(state), &num_of_columns))) { diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); clean_state(state); return msg; } @@ -1105,7 +1126,9 @@ static db_result_msg encode_result(db_state *state) if(!sql_success(SQLRowCount(statement_handle(state), &RowCountPtr))) { diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char *)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); clean_state(state); return msg; } @@ -1652,7 +1675,7 @@ static void encode_data_type(SQLSMALLINT sql_type, SQLINTEGER size, } } -static Boolean decode_params(db_state *state, byte *buffer, int *index, param_array **params, +static Boolean decode_params(db_state *state, char *buffer, int *index, param_array **params, int i, int j, int num_param_values) { int erl_type, size; @@ -1688,7 +1711,7 @@ static Boolean decode_params(db_state *state, byte *buffer, int *index, param_ar if(erl_type != ERL_STRING_EXT) { return FALSE; } - ei_decode_string(buffer, index, &(param->values.string[param->offset])); + ei_decode_string(buffer, index, (char*)&(param->values.string[param->offset])); param->offset += param->type.len; } break; @@ -2197,7 +2220,7 @@ static void init_driver(int erl_auto_commit_mode, int erl_trace_driver, DO_EXIT(EXIT_CONNECTION); } -static void init_param_column(param_array *params, byte *buffer, int *index, +static void init_param_column(param_array *params, char *buffer, int *index, int num_param_values, db_state* state) { long user_type, precision, scale, length; @@ -2509,7 +2532,7 @@ static db_result_msg map_sql_2_c_column(db_column* column, db_state *state) return msg; } -static param_array * bind_parameter_arrays(byte *buffer, int *index, +static param_array * bind_parameter_arrays(char *buffer, int *index, int cols, int num_param_values, db_state *state) { @@ -2669,7 +2692,7 @@ static db_result_msg retrive_scrollable_cursor_support_info(db_state *state) ei_x_encode_atom(&dynamic_buffer(state), "false"); ei_x_encode_atom(&dynamic_buffer(state), "false"); } - msg.buffer = dynamic_buffer(state).buff; + msg.buffer = (byte *)dynamic_buffer(state).buff; msg.length = dynamic_buffer(state).index; msg.dyn_alloc = TRUE; return msg; @@ -2700,7 +2723,9 @@ static db_result_msg more_result_sets(db_state *state) diagnos = get_diagnos(SQL_HANDLE_STMT, statement_handle(state), extended_errors(state)); strcat((char *)diagnos.error_msg, "Failed to create on of the result sets"); - msg = encode_error_message(diagnos.error_msg, extended_error(state, diagnos.sqlState), diagnos.nativeError); + msg = encode_error_message((char*)diagnos.error_msg, + extended_error(state, diagnos.sqlState), + diagnos.nativeError); return msg; } } |