statement.h
来自「postgresql-odbc,跨平台应用」· C头文件 代码 · 共 517 行 · 第 1/2 页
H
517 行
StatementClass *execute_delegate; StatementClass *execute_parent; UInt2 allocated_callbacks; UInt2 num_callbacks; NeedDataCallback *callbacks;#if defined(WIN_MULTITHREAD_SUPPORT) CRITICAL_SECTION cs;#elif defined(POSIX_THREADMUTEX_SUPPORT) pthread_mutex_t cs;#endif /* WIN_MULTITHREAD_SUPPORT */};#define SC_get_conn(a) (a->hdbc)#define SC_init_Result(a) (a->result = a->curres = NULL, mylog("SC_init_Result(%x)", a))#define SC_set_Result(a, b) \do { \ if (b != a->result) \ { \ mylog("SC_set_Result(%x, %x)", a, b); \ QR_Destructor(a->result); \ a->result = a->curres = b; \ } \} while (0)#define SC_get_Result(a) (a->result)#define SC_set_Curres(a, b) (a->curres = b)#define SC_get_Curres(a) (a->curres)#define SC_get_ARD(a) (a->ard)#define SC_get_APD(a) (a->apd)#define SC_get_IRD(a) (a->ird)#define SC_get_IPD(a) (a->ipd)#define SC_get_ARDF(a) (&(SC_get_ARD(a)->ardopts))#define SC_get_APDF(a) (&(SC_get_APD(a)->apdopts))#define SC_get_IRDF(a) (&(SC_get_IRD(a)->irdopts))#define SC_get_IPDF(a) (&(SC_get_IPD(a)->ipdopts))#define SC_get_ARDi(a) (&(a->ardi))#define SC_get_APDi(a) (&(a->apdi))#define SC_get_IRDi(a) (&(a->irdi))#define SC_get_IPDi(a) (&(a->ipdi))#define SC_get_GDTI(a) (&(a->gdata_info))#define SC_get_PDTI(a) (&(a->pdata_info))#define SC_get_errornumber(a) (a->__error_number)#define SC_set_errornumber(a, n) (a->__error_number = n)#define SC_get_errormsg(a) (a->__error_message)#define SC_get_errormsg(a) (a->__error_message)#define SC_is_prepare_statement(a) (0 != (a->prepare & PREPARE_STATEMENT))#define SC_get_prepare_method(a) (a->prepare & (~PREPARE_STATEMENT))#define SC_parsed_status(a) (a->parse_status & STMT_PARSE_MASK)#define SC_set_parse_status(a, s) (a->parse_status |= s)#define SC_update_not_ready(a) (SC_parsed_status(a) == STMT_PARSE_NONE || 0 == (a->parse_status & STMT_PARSED_OIDS))#define SC_update_ready(a) (SC_parsed_status(a) == STMT_PARSE_COMPLETE && 0 != (a->parse_status & STMT_FOUND_KEY) && a->updatable)#define SC_set_checked_hasoids(a, b) (a->parse_status |= (STMT_PARSED_OIDS | (b ? STMT_FOUND_KEY : 0)))#define SC_checked_hasoids(a) (0 != (a->parse_status & STMT_PARSED_OIDS))#define SC_set_delegate(p, c) (p->execute_delegate = c, c->execute_parent = p)#define SC_clear_parse_method(s) ((s)->parse_method = 0)#define SC_is_parse_forced(s) (0 != ((s)->parse_method & 1L))#define SC_set_parse_forced(s) ((s)->parse_method |= 1L)#define SC_is_parse_tricky(s) (0 != ((s)->parse_method & 2L))#define SC_set_parse_tricky(s) ((s)->parse_method |= 2L)#define SC_no_parse_tricky(s) ((s)->parse_method &= ~2L)#define SC_cursor_is_valid(s) (NAME_IS_VALID(s->cursor_name))#define SC_cursor_name(s) (SAFE_NAME(s->cursor_name))void SC_reset_delegate(RETCODE, StatementClass *);StatementClass *SC_get_ancestor(StatementClass *);#if (ODBCVER >= 0x0300)#define SC_is_lower_case(a, b) (a->options.metadata_id || b->connInfo.lower_case_identifier)#else#define SC_is_lower_case(a, b) (b->connInfo.lower_case_identifier)#endif /* ODBCVER */#define SC_MALLOC_return_with_error(t, tp, s, a, m, r) \do { \ if (t = (tp *) malloc(s), NULL == t) \ { \ SC_set_error(a, STMT_NO_MEMORY_ERROR, m, "SC_MALLOC"); \ return r; \ } \} while (0)#define SC_REALLOC_return_with_error(t, tp, s, a, m, r) \do { \ tp *tmp; \ if (tmp = (tp *) realloc(t, s), NULL == tmp) \ { \ SC_set_error(a, STMT_NO_MEMORY_ERROR, m, "SC_REALLOC"); \ return r; \ } \ t = tmp; \} while (0)/* options for SC_free_params() */#define STMT_FREE_PARAMS_ALL 0#define STMT_FREE_PARAMS_DATA_AT_EXEC_ONLY 1/* prepare state */enum { NON_PREPARE_STATEMENT = 0 , PREPARE_STATEMENT = 1 , PREPARE_BY_THE_DRIVER = (1L << 1) , USING_PREPARE_COMMAND = (2L << 1) , NAMED_PARSE_REQUEST = (3L << 1) , PARSE_TO_EXEC_ONCE = (4L << 1) , PARSE_REQ_FOR_INFO = (5L << 1)};/* prepared state */enum{ NOT_YET_PREPARED = 0 ,PREPARED_PERMANENTLY ,PREPARED_TEMPORARILY ,ONCE_DESCRIBED};/* misc info */#define SC_set_pre_executable(a) (a->miscinfo |= 1L)#define SC_no_pre_executable(a) (a->miscinfo &= ~1L)#define SC_is_pre_executable(a) ((a->miscinfo & 1L) != 0)#define SC_set_fetchcursor(a) (a->miscinfo |= (1L << 1))#define SC_no_fetchcursor(a) (a->miscinfo &= ~(1L << 1))#define SC_is_fetchcursor(a) ((a->miscinfo & (1L << 1)) != 0)#define SC_set_concat_prepare_exec(a) (a->miscinfo |= (1L << 2))#define SC_no_concat_prepare_exec(a) (a->miscinfo &= ~(1L << 2))#define SC_is_concat_prepare_exec(a) ((a->miscinfo & (1L << 2)) != 0)#define SC_set_with_hold(a) (a->miscinfo |= (1L << 3))#define SC_set_without_hold(a) (a->miscinfo &= ~(1L << 3))#define SC_is_with_hold(a) ((a->miscinfo & (1L << 3)) != 0)#define SC_miscinfo_clear(a) (a->miscinfo &= (1L << 3))#define STMT_HAS_OUTER_JOIN 1L#define STMT_HAS_INNER_JOIN (1L << 1)#define SC_has_join(a) (0 != (a)->join_info)#define SC_has_outer_join(a) (0 != (STMT_HAS_OUTER_JOIN & (a)->join_info))#define SC_has_inner_join(a) (0 != (STMT_HAS_INNER_JOIN & (a)->join_info))#define SC_set_outer_join(a) ((a)->join_info |= STMT_HAS_OUTER_JOIN)#define SC_set_inner_join(a) ((a)->join_info |= STMT_HAS_INNER_JOIN)#define SC_start_stmt(a) (a->rbonerr = 0)#define SC_start_tc_stmt(a) (a->rbonerr = (1L << 1))#define SC_is_tc_stmt(a) ((a->rbonerr & (1L << 1)) != 0)#define SC_start_rb_stmt(a) (a->rbonerr = (1L << 2))#define SC_is_rb_stmt(a) ((a->rbonerr & (1L << 2)) != 0)#define SC_set_accessed_db(a) (a->rbonerr |= (1L << 3))#define SC_accessed_db(a) ((a->rbonerr & (1L << 3)) != 0)#define SC_start_rbpoint(a) (a->rbonerr |= (1L << 4))#define SC_started_rbpoint(a) ((a->rbonerr & (1L << 4)) != 0)#define SC_unref_CC_error(a) ((a->ref_CC_error) = FALSE)#define SC_ref_CC_error(a) ((a->ref_CC_error) = TRUE)#define SC_forget_unnamed(a) (PREPARED_TEMPORARILY == (a)->prepared ? SC_set_prepared(a, ONCE_DESCRIBED) : (void) 0)/* For Multi-thread */#if defined(WIN_MULTITHREAD_SUPPORT)#define INIT_STMT_CS(x) InitializeCriticalSection(&((x)->cs))#define ENTER_STMT_CS(x) EnterCriticalSection(&((x)->cs))#define TRY_ENTER_STMT_CS(x) TryEnterCriticalSection(&((x)->cs))#define LEAVE_STMT_CS(x) LeaveCriticalSection(&((x)->cs))#define DELETE_STMT_CS(x) DeleteCriticalSection(&((x)->cs))#elif defined(POSIX_THREADMUTEX_SUPPORT)#define INIT_STMT_CS(x) pthread_mutex_init(&((x)->cs),0)#define ENTER_STMT_CS(x) pthread_mutex_lock(&((x)->cs))#define TRY_ENTER_STMT_CS(x) (0 == pthread_mutex_trylock(&((x)->cs)))#define LEAVE_STMT_CS(x) pthread_mutex_unlock(&((x)->cs))#define DELETE_STMT_CS(x) pthread_mutex_destroy(&((x)->cs))#else#define INIT_STMT_CS(x)#define ENTER_STMT_CS(x)#define TRY_ENTER_STMT_CS(x) (1)#define LEAVE_STMT_CS(x)#define DELETE_STMT_CS(x)#endif /* WIN_MULTITHREAD_SUPPORT *//* Statement prototypes */StatementClass *SC_Constructor(ConnectionClass *);void InitializeStatementOptions(StatementOptions *opt);char SC_Destructor(StatementClass *self);BOOL SC_opencheck(StatementClass *self, const char *func);RETCODE SC_initialize_and_recycle(StatementClass *self);void SC_initialize_cols_info(StatementClass *self, BOOL DCdestroy, BOOL parseReset);int statement_type(const char *statement);char parse_statement(StatementClass *stmt, BOOL);SQLRETURN SC_set_SS_columnkey(StatementClass *stmt);Int4 SC_pre_execute(StatementClass *self);char SC_unbind_cols(StatementClass *self);char SC_recycle_statement(StatementClass *self);void SC_clear_error(StatementClass *self);void SC_set_error(StatementClass *self, int errnum, const char *msg, const char *func);void SC_set_errormsg(StatementClass *self, const char *msg);void SC_error_copy(StatementClass *self, const StatementClass *from, BOOL);void SC_full_error_copy(StatementClass *self, const StatementClass *from, BOOL);void SC_replace_error_with_res(StatementClass *self, int errnum, const char *msg, const QResultClass*, BOOL);void SC_set_prepared(StatementClass *self, BOOL);void SC_set_planname(StatementClass *self, const char *plan_name);void SC_set_rowset_start(StatementClass *self, SQLLEN, BOOL);void SC_inc_rowset_start(StatementClass *self, SQLLEN);RETCODE SC_initialize_stmts(StatementClass *self, BOOL);RETCODE SC_execute(StatementClass *self);RETCODE SC_fetch(StatementClass *self);void SC_free_params(StatementClass *self, char option);void SC_log_error(const char *func, const char *desc, const StatementClass *self);time_t SC_get_time(StatementClass *self);SQLULEN SC_get_bookmark(StatementClass *self);RETCODE SC_pos_reload(StatementClass *self, SQLULEN index, UInt2 *, Int4);RETCODE SC_pos_update(StatementClass *self, SQLSETPOSIROW irow, SQLULEN index);RETCODE SC_pos_delete(StatementClass *self, SQLSETPOSIROW irow, SQLULEN index);RETCODE SC_pos_refresh(StatementClass *self, SQLSETPOSIROW irow, SQLULEN index);RETCODE SC_pos_add(StatementClass *self, SQLSETPOSIROW irow);int SC_set_current_col(StatementClass *self, int col);void SC_setInsertedTable(StatementClass *, RETCODE);void SC_scanQueryAndCountParams(const char *, const ConnectionClass *, Int4 *next_cmd, SQLSMALLINT *num_params, char *multi, char *proc_return);BOOL SC_IsExecuting(const StatementClass *self);BOOL SC_SetExecuting(StatementClass *self, BOOL on);BOOL SC_SetCancelRequest(StatementClass *self);BOOL SC_AcceptedCancelRequest(const StatementClass *self);DescriptorClass *SC_set_ARD(StatementClass *stmt, DescriptorClass *desc);DescriptorClass *SC_set_APD(StatementClass *stmt, DescriptorClass *desc);int enqueueNeedDataCallback(StatementClass *self, NeedDataCallfunc, void *);RETCODE dequeueNeedDataCallback(RETCODE, StatementClass *self);void cancelNeedDataState(StatementClass *self);int StartRollbackState(StatementClass *self);RETCODE SetStatementSvp(StatementClass *self);RETCODE DiscardStatementSvp(StatementClass *self, RETCODE, BOOL errorOnly);BOOL SendParseRequest(StatementClass *self, const char *name, const char *query, Int4 qlen, Int2 num_params);BOOL SendDescribeRequest(StatementClass *self, const char *name);BOOL SendBindRequest(StatementClass *self, const char *name);BOOL BuildBindRequest(StatementClass *stmt, const char *name);BOOL SendExecuteRequest(StatementClass *stmt, const char *portal, UInt4 count);QResultClass *SendSyncAndReceive(StatementClass *stmt, QResultClass *res, const char *comment);/* * Macros to convert global index <-> relative index in resultset/rowset *//* a global index to the relative index in a rowset */#define SC_get_rowset_start(stmt) (stmt->rowset_start)#define GIdx2RowIdx(gidx, stmt) (gidx - stmt->rowset_start)/* a global index to the relative index in a resultset(not a rowset) */#define GIdx2CacheIdx(gidx, s, r) (gidx - (QR_has_valid_base(r) ? (s->rowset_start - r->base) : 0))#define GIdx2KResIdx(gidx, s, r) (gidx - (QR_has_valid_base(r) ? (s->rowset_start - r->key_base) : 0))/* a relative index in a rowset to the global index */#define RowIdx2GIdx(ridx, stmt) (ridx + stmt->rowset_start)/* a relative index in a resultset to the global index */#define CacheIdx2GIdx(ridx, stmt, res) (ridx - res->base + stmt->rowset_start)#define KResIdx2GIdx(ridx, stmt, res) (ridx - res->key_base + stmt->rowset_start)#define BOOKMARK_SHIFT 1#define SC_make_bookmark(b) ((b < 0) ? (b) : (b + BOOKMARK_SHIFT))#define SC_resolve_bookmark(b) ((b < 0) ? (b) : (b - BOOKMARK_SHIFT))#endif /* __STATEMENT_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?