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 + -
显示快捷键?