diff options
Diffstat (limited to 'src/interfaces/odbc/statement.h')
-rw-r--r-- | src/interfaces/odbc/statement.h | 265 |
1 files changed, 119 insertions, 146 deletions
diff --git a/src/interfaces/odbc/statement.h b/src/interfaces/odbc/statement.h index 3ef91e5d77a..ae2df856b25 100644 --- a/src/interfaces/odbc/statement.h +++ b/src/interfaces/odbc/statement.h @@ -1,9 +1,9 @@ -/* File: statement.h +/* File: statement.h * - * Description: See "statement.c" + * Description: See "statement.c" * - * Comments: See "notice.txt" for copyright and license information. + * Comments: See "notice.txt" for copyright and license information. * */ @@ -33,59 +33,51 @@ #define TRUE (BOOL)1 #endif -typedef enum -{ - STMT_ALLOCATED, /* The statement handle is allocated, but - * not used so far */ - STMT_READY, /* the statement is waiting to be executed */ - STMT_PREMATURE, /* ODBC states that it is legal to call - * e.g. SQLDescribeCol before a call to - * SQLExecute, but after SQLPrepare. To - * get all the necessary information in - * such a case, we simply execute the - * query _before_ the actual call to - * SQLExecute, so that statement is - * considered to be "premature". */ - STMT_FINISHED, /* statement execution has finished */ - STMT_EXECUTING /* statement execution is still going on */ +typedef enum { + STMT_ALLOCATED, /* The statement handle is allocated, but not used so far */ + STMT_READY, /* the statement is waiting to be executed */ + STMT_PREMATURE, /* ODBC states that it is legal to call e.g. SQLDescribeCol before + a call to SQLExecute, but after SQLPrepare. To get all the necessary + information in such a case, we simply execute the query _before_ the + actual call to SQLExecute, so that statement is considered to be "premature". + */ + STMT_FINISHED, /* statement execution has finished */ + STMT_EXECUTING /* statement execution is still going on */ } STMT_Status; -#define STMT_TRUNCATED (-2) -#define STMT_INFO_ONLY (-1) /* not an error message, just a - * notification to be returned by SQLError */ -#define STMT_OK 0 /* will be interpreted as "no error - * pending" */ -#define STMT_EXEC_ERROR 1 -#define STMT_STATUS_ERROR 2 -#define STMT_SEQUENCE_ERROR 3 -#define STMT_NO_MEMORY_ERROR 4 -#define STMT_COLNUM_ERROR 5 -#define STMT_NO_STMTSTRING 6 -#define STMT_ERROR_TAKEN_FROM_BACKEND 7 -#define STMT_INTERNAL_ERROR 8 -#define STMT_STILL_EXECUTING 9 -#define STMT_NOT_IMPLEMENTED_ERROR 10 -#define STMT_BAD_PARAMETER_NUMBER_ERROR 11 -#define STMT_OPTION_OUT_OF_RANGE_ERROR 12 -#define STMT_INVALID_COLUMN_NUMBER_ERROR 13 -#define STMT_RESTRICTED_DATA_TYPE_ERROR 14 -#define STMT_INVALID_CURSOR_STATE_ERROR 15 -#define STMT_OPTION_VALUE_CHANGED 16 -#define STMT_CREATE_TABLE_ERROR 17 -#define STMT_NO_CURSOR_NAME 18 -#define STMT_INVALID_CURSOR_NAME 19 -#define STMT_INVALID_ARGUMENT_NO 20 -#define STMT_ROW_OUT_OF_RANGE 21 -#define STMT_OPERATION_CANCELLED 22 -#define STMT_INVALID_CURSOR_POSITION 23 -#define STMT_VALUE_OUT_OF_RANGE 24 -#define STMT_OPERATION_INVALID 25 -#define STMT_PROGRAM_TYPE_OUT_OF_RANGE 26 -#define STMT_BAD_ERROR 27 +#define STMT_TRUNCATED -2 +#define STMT_INFO_ONLY -1 /* not an error message, just a notification to be returned by SQLError */ +#define STMT_OK 0 /* will be interpreted as "no error pending" */ +#define STMT_EXEC_ERROR 1 +#define STMT_STATUS_ERROR 2 +#define STMT_SEQUENCE_ERROR 3 +#define STMT_NO_MEMORY_ERROR 4 +#define STMT_COLNUM_ERROR 5 +#define STMT_NO_STMTSTRING 6 +#define STMT_ERROR_TAKEN_FROM_BACKEND 7 +#define STMT_INTERNAL_ERROR 8 +#define STMT_STILL_EXECUTING 9 +#define STMT_NOT_IMPLEMENTED_ERROR 10 +#define STMT_BAD_PARAMETER_NUMBER_ERROR 11 +#define STMT_OPTION_OUT_OF_RANGE_ERROR 12 +#define STMT_INVALID_COLUMN_NUMBER_ERROR 13 +#define STMT_RESTRICTED_DATA_TYPE_ERROR 14 +#define STMT_INVALID_CURSOR_STATE_ERROR 15 +#define STMT_OPTION_VALUE_CHANGED 16 +#define STMT_CREATE_TABLE_ERROR 17 +#define STMT_NO_CURSOR_NAME 18 +#define STMT_INVALID_CURSOR_NAME 19 +#define STMT_INVALID_ARGUMENT_NO 20 +#define STMT_ROW_OUT_OF_RANGE 21 +#define STMT_OPERATION_CANCELLED 22 +#define STMT_INVALID_CURSOR_POSITION 23 +#define STMT_VALUE_OUT_OF_RANGE 24 +#define STMT_OPERATION_INVALID 25 +#define STMT_PROGRAM_TYPE_OUT_OF_RANGE 26 +#define STMT_BAD_ERROR 27 /* statement types */ -enum -{ +enum { STMT_TYPE_UNKNOWN = -2, STMT_TYPE_OTHER = -1, STMT_TYPE_SELECT = 0, @@ -103,8 +95,7 @@ enum /* Parsing status */ -enum -{ +enum { STMT_PARSE_NONE = 0, STMT_PARSE_COMPLETE, STMT_PARSE_INCOMPLETE, @@ -112,110 +103,92 @@ enum }; /* Result style */ -enum -{ +enum { STMT_FETCH_NONE = 0, STMT_FETCH_NORMAL, STMT_FETCH_EXTENDED, }; -typedef struct -{ - COL_INFO *col_info; /* cached SQLColumns info for this table */ - char name[MAX_TABLE_LEN + 1]; - char alias[MAX_TABLE_LEN + 1]; +typedef struct { + COL_INFO *col_info; /* cached SQLColumns info for this table */ + char name[MAX_TABLE_LEN+1]; + char alias[MAX_TABLE_LEN+1]; } TABLE_INFO; -typedef struct -{ - TABLE_INFO *ti; /* resolve to explicit table names */ - int precision; - int display_size; - int length; - int type; - char nullable; - char func; - char expr; - char quote; - char dquote; - char numeric; - char dot[MAX_TABLE_LEN + 1]; - char name[MAX_COLUMN_LEN + 1]; - char alias[MAX_COLUMN_LEN + 1]; +typedef struct { + TABLE_INFO *ti; /* resolve to explicit table names */ + int precision; + int display_size; + int length; + int type; + char nullable; + char func; + char expr; + char quote; + char dquote; + char numeric; + char dot[MAX_TABLE_LEN+1]; + char name[MAX_COLUMN_LEN+1]; + char alias[MAX_COLUMN_LEN+1]; } FIELD_INFO; /******** Statement Handle ***********/ -struct StatementClass_ -{ - ConnectionClass *hdbc; /* pointer to ConnectionClass this - * statement belongs to */ - QResultClass *result; /* result of the current statement */ - HSTMT FAR *phstmt; +struct StatementClass_ { + ConnectionClass *hdbc; /* pointer to ConnectionClass this statement belongs to */ + QResultClass *result; /* result of the current statement */ + HSTMT FAR *phstmt; StatementOptions options; - STMT_Status status; - char *errormsg; - int errornumber; + STMT_Status status; + char *errormsg; + int errornumber; - /* information on bindings */ - BindInfoClass *bindings; /* array to store the binding information */ + /* information on bindings */ + BindInfoClass *bindings; /* array to store the binding information */ BindInfoClass bookmark; - int bindings_allocated; - - /* information on statement parameters */ - int parameters_allocated; - ParameterInfoClass *parameters; - - Int4 currTuple; /* current absolute row number (GetData, - * SetPos, SQLFetch) */ - int save_rowset_size; /* saved rowset size in case of - * change/FETCH_NEXT */ - int rowset_start; /* start of rowset (an absolute row - * number) */ - int bind_row; /* current offset for Multiple row/column - * binding */ - int last_fetch_count; /* number of rows retrieved in - * last fetch/extended fetch */ - int current_col; /* current column for GetData -- used to - * handle multiple calls */ - int lobj_fd; /* fd of the current large object */ - - char *statement; /* if non--null pointer to the SQL - * statement that has been executed */ - - TABLE_INFO **ti; - FIELD_INFO **fi; + int bindings_allocated; + + /* information on statement parameters */ + int parameters_allocated; + ParameterInfoClass *parameters; + + Int4 currTuple; /* current absolute row number (GetData, SetPos, SQLFetch) */ + int save_rowset_size; /* saved rowset size in case of change/FETCH_NEXT */ + int rowset_start; /* start of rowset (an absolute row number) */ + int bind_row; /* current offset for Multiple row/column binding */ + int last_fetch_count; /* number of rows retrieved in last fetch/extended fetch */ + int current_col; /* current column for GetData -- used to handle multiple calls */ + int lobj_fd; /* fd of the current large object */ + + char *statement; /* if non--null pointer to the SQL statement that has been executed */ + + TABLE_INFO **ti; + FIELD_INFO **fi; int nfld; int ntab; - int parse_status; + int parse_status; - int statement_type; /* According to the defines above */ - int data_at_exec; /* Number of params needing SQLPutData */ - int current_exec_param; /* The current parameter for - * SQLPutData */ + int statement_type; /* According to the defines above */ + int data_at_exec; /* Number of params needing SQLPutData */ + int current_exec_param; /* The current parameter for SQLPutData */ - char put_data; /* Has SQLPutData been called yet? */ + char put_data; /* Has SQLPutData been called yet? */ - char errormsg_created; /* has an informative error msg - * been created? */ - char manual_result; /* Is the statement result manually built? */ - char prepare; /* is this statement a prepared statement - * or direct */ + char errormsg_created; /* has an informative error msg been created? */ + char manual_result; /* Is the statement result manually built? */ + char prepare; /* is this statement a prepared statement or direct */ - char internal; /* Is this statement being called - * internally? */ + char internal; /* Is this statement being called internally? */ - char cursor_name[MAX_CURSOR_LEN + 1]; + char cursor_name[MAX_CURSOR_LEN+1]; - char stmt_with_params[STD_STATEMENT_LEN]; /* statement after - * parameter - * substitution */ + char stmt_with_params[STD_STATEMENT_LEN]; /* statement after parameter substitution */ }; -#define SC_get_conn(a) (a->hdbc) +#define SC_get_conn(a) (a->hdbc) #define SC_get_Result(a) (a->result); /* options for SC_free_params() */ @@ -224,21 +197,21 @@ struct StatementClass_ /* Statement prototypes */ StatementClass *SC_Constructor(void); -void InitializeStatementOptions(StatementOptions *opt); -char SC_Destructor(StatementClass *self); -int statement_type(char *statement); -char parse_statement(StatementClass *stmt); -void SC_pre_execute(StatementClass *self); -char SC_unbind_cols(StatementClass *self); -char SC_recycle_statement(StatementClass *self); - -void SC_clear_error(StatementClass *self); -char SC_get_error(StatementClass *self, int *number, char **message); -char *SC_create_errormsg(StatementClass *self); -RETCODE SC_execute(StatementClass *self); -RETCODE SC_fetch(StatementClass *self); -void SC_free_params(StatementClass *self, char option); -void SC_log_error(char *func, char *desc, StatementClass *self); +void InitializeStatementOptions(StatementOptions *opt); +char SC_Destructor(StatementClass *self); +int statement_type(char *statement); +char parse_statement(StatementClass *stmt); +void SC_pre_execute(StatementClass *self); +char SC_unbind_cols(StatementClass *self); +char SC_recycle_statement(StatementClass *self); + +void SC_clear_error(StatementClass *self); +char SC_get_error(StatementClass *self, int *number, char **message); +char *SC_create_errormsg(StatementClass *self); +RETCODE SC_execute(StatementClass *self); +RETCODE SC_fetch(StatementClass *self); +void SC_free_params(StatementClass *self, char option); +void SC_log_error(char *func, char *desc, StatementClass *self); unsigned long SC_get_bookmark(StatementClass *self); |