⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oci8.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	case OCI_NEED_DATA:		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_NEED_DATA", what);		break;	case OCI_NO_DATA:		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_NO_DATA", what);		break;	case OCI_ERROR: {			CALL_OCI(OCIErrorGet(					err_p, 					(ub4)1, 					NULL, 					&errcode, 					errbuf,					(ub4)sizeof(errbuf), 					(ub4)OCI_HTYPE_ERROR));					php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: %s", what, errbuf);			break;		}	case OCI_INVALID_HANDLE:		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_INVALID_HANDLE", what);		break;	case OCI_STILL_EXECUTING:		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_STILL_EXECUTING", what);		break;	case OCI_CONTINUE:		php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: OCI_CONTINUE", what);		break;	default:		break;	}	return errcode;}/* }}} *//* {{{ oci_ping()  */static int oci_ping(oci_server *server){	char version[256];	TSRMLS_FETCH();		CALL_OCI_RETURN(OCI(error), OCIServerVersion(				server->pServer,			 	OCI(pError), 				(text*)version, 				sizeof(version),				OCI_HTYPE_SERVER));	if (OCI(error) == OCI_SUCCESS) {		return 1;	}	oci_error(OCI(pError), "oci_ping", OCI(error));	return 0;}/* }}} *//************************* INTERNAL FUNCTIONS *************************//* {{{ oci_debug() */static void oci_debug(const char *format, ...){	TSRMLS_FETCH();	if (OCI(debug_mode)) {		char buffer[1024];		va_list args;		va_start(args, format);		vsnprintf(buffer, sizeof(buffer)-1, format, args);		va_end(args);		buffer[sizeof(buffer)-1] = '\0';		php_printf("OCIDebug: %s<br />\n", buffer);	}}/* }}} *//* {{{ oci_get_conn() */static oci_connection *oci_get_conn(zval **conn TSRMLS_DC){	oci_connection *connection;	connection = (oci_connection *) zend_fetch_resource(conn TSRMLS_CC, -1, "OCI8-Connection", NULL, 1, le_conn);	if (connection && connection->is_open) {		return connection;	} else {		return (oci_connection *) NULL;	}}/* }}} *//* {{{ oci_get_stmt() */static oci_statement *oci_get_stmt(zval **stmt TSRMLS_DC){	oci_statement *statement;	statement = (oci_statement *) zend_fetch_resource(stmt TSRMLS_CC, -1, "OCI8-Statement", NULL, 1, le_stmt);	if (statement && statement->conn->is_open) {		return statement;	} else {		return (oci_statement *) NULL;	}}/* }}} *//* {{{ oci_get_desc() */static oci_descriptor *oci_get_desc(int ind TSRMLS_DC){	oci_descriptor *descriptor;	int actual_resource_type;	descriptor = (oci_descriptor *) zend_list_find(ind, &actual_resource_type);	if (descriptor && (actual_resource_type == le_desc)) {		return descriptor;	} else {		return (oci_descriptor *) NULL;	}}/* }}} *//* {{{ oci_get_col() */static oci_out_column *oci_get_col(oci_statement *statement, int col, zval **value){	oci_out_column *outcol = NULL;	int i;	TSRMLS_FETCH();	if (statement->columns == 0) { /* we release the columns at the end of a fetch */		return NULL;	}	if (value) {		if (Z_TYPE_PP(value) == IS_STRING) {			for (i = 0; i < statement->ncolumns; i++) {				outcol = oci_get_col(statement, i + 1, 0);				if (outcol == NULL) {					continue;				} else if (((int) outcol->name_len == Z_STRLEN_PP(value)) 						&& (! strncmp(outcol->name,Z_STRVAL_PP(value),Z_STRLEN_PP(value)))) {				return outcol;				}			}		} else {			convert_to_long_ex(value);			return oci_get_col(statement,Z_LVAL_PP(value),0);		}	} else if (col != -1) {		if (zend_hash_index_find(statement->columns, col, (void **)&outcol) == FAILURE) {			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid column %d", col);			return NULL;		}		return outcol;	}	return NULL;}/* }}} *//* {{{ oci_new_desc() */static oci_descriptor*oci_new_desc(int type,oci_connection *connection){	oci_descriptor *descr;	TSRMLS_FETCH();	descr = emalloc(sizeof(oci_descriptor));		Z_TYPE_P(descr) = type;	switch (Z_TYPE_P(descr)) {		case OCI_DTYPE_FILE:		case OCI_DTYPE_LOB:		case OCI_DTYPE_ROWID:			break;		default:			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown descriptor type %d.",Z_TYPE_P(descr));			return 0;	}		CALL_OCI_RETURN(OCI(error), OCIDescriptorAlloc(				connection->session->pEnv,				(dvoid*)&(descr->ocidescr), 				Z_TYPE_P(descr), 				(size_t) 0, 				(dvoid **) 0));		if (OCI(error)) {		ub4 error;		error = oci_error(OCI(pError),"OCIDescriptorAlloc %d",OCI(error));		oci_handle_error(connection, error);		return 0;	}	descr->id = zend_list_insert(descr,le_desc);	descr->conn = connection;	zend_list_addref(connection->id);	oci_debug("oci_new_desc %d",descr->id);	return descr;}#ifdef WITH_COLLECTIONS/* {{{ _oci_get_ocicoll() */static int_oci_get_ocicoll(zval *id,oci_collection **collection TSRMLS_DC){	zval **coll;		if (zend_hash_find(Z_OBJPROP_P(id), "collection", sizeof("collection"), (void **)&coll) == FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot find collection");		return 0;	}	if ((*collection = oci_get_coll(Z_LVAL_PP(coll) TSRMLS_CC)) == NULL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "collection not found");		return 0;	} 	return Z_LVAL_PP(coll);}/* }}} */#endif/* }}} *//* {{{ _oci_get_ocidesc() */static int_oci_get_ocidesc(zval *id,oci_descriptor **descriptor TSRMLS_DC){	zval **desc;		if (zend_hash_find(Z_OBJPROP_P(id), "descriptor", sizeof("descriptor"), (void **)&desc) == FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot find descriptor");		return 0;	}	if ((*descriptor = oci_get_desc(Z_LVAL_PP(desc) TSRMLS_CC)) == NULL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "descriptor not found");		return 0;	}		return Z_LVAL_PP(desc);}/* }}} *//* {{{ _oci_make_zval() */static int _oci_make_zval(zval *value,oci_statement *statement,oci_out_column *column, char *func, int mode TSRMLS_DC){	oci_descriptor *descr;	ub4 loblen;	int size;	char *buffer;		if (column->indicator || column->retcode)		if ((column->indicator != -1) && (column->retcode != 1405))			oci_debug("_oci_make_zval: %16s,retlen = %4d,retlen4 = %d,storage_size4 = %4d,indicator %4d, retcode = %4d",					  column->name,column->retlen,column->retlen4,column->storage_size4,column->indicator,column->retcode);		if ((! statement->has_data) || (column->indicator == -1)) { /* column is NULL or statment has no current data */		ZVAL_NULL(value); 		return 0;	}		if (column->is_cursor) { /* REFCURSOR -> simply return the statement id */		ZVAL_RESOURCE(value,column->stmtid);		zend_list_addref(column->stmtid);	} else if (column->is_descr) {		if ((column->data_type != SQLT_RDD) && (mode & OCI_RETURN_LOBS)) {			/* OCI_RETURN_LOBS means that we want the content of the LOB back instead of the locator */			descr = oci_get_desc(column->descid TSRMLS_CC);			if (! descr) {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to find my descriptor %p",column->data);				return -1;			}						if (oci_loadlob(statement->conn,descr,&buffer,&loblen)) {				ZVAL_FALSE(value);			} else {				if (loblen > 0) {					ZVAL_STRINGL(value,buffer,loblen,0);				}				else {					ZVAL_EMPTY_STRING(value);				}			} 		} else { 			/* return the locator */			object_init_ex(value, oci_lob_class_entry_ptr);			add_property_resource(value, "descriptor", column->descid);			zend_list_addref(column->descid);		}	} else {		switch (column->retcode) {		case 0: 			/* intact value */			if (column->piecewise) {				size = column->retlen4;			} else {				size = column->retlen;			}			break;					default:							/* XXX we SHOULD maybe have a different behaviour for unknown results! */			ZVAL_FALSE(value); 			return 0;		}				ZVAL_STRINGL(value,column->data,size,1);	}	return 0;}/* }}} *//* {{{ oci_setprefetch() */static intoci_setprefetch(oci_statement *statement,int size){ 	ub4   prefetch;	sword error;	TSRMLS_FETCH();	prefetch = size * 1024;	CALL_OCI_RETURN(error, OCIAttrSet(				statement->pStmt,				OCI_HTYPE_STMT,			  	&prefetch,				0, 				OCI_ATTR_PREFETCH_MEMORY,				statement->pError));	statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);	if (statement->error) {		oci_handle_error(statement->conn, statement->error);	}	prefetch = size;	CALL_OCI_RETURN(error, OCIAttrSet(				statement->pStmt,				OCI_HTYPE_STMT,				&prefetch,				0, 				OCI_ATTR_PREFETCH_ROWS,				statement->pError));	statement->error = oci_error(statement->pError, "OCIAttrSet OCI_ATTR_PREFETCH_MEMORY", error);	if (statement->error) {		oci_handle_error(statement->conn, statement->error);	}	return 1;}/* }}} *//* {{{ oci_parse() */static oci_statement *oci_parse(oci_connection *connection, char *query, int len){	oci_statement *statement;	sword error;	TSRMLS_FETCH();	statement = ecalloc(1,sizeof(oci_statement));	CALL_OCI(OCIHandleAlloc(				connection->session->pEnv,				(dvoid **)&statement->pStmt,				OCI_HTYPE_STMT, 				0, 				NULL));	CALL_OCI(OCIHandleAlloc(				connection->session->pEnv,				(dvoid **)&statement->pError,				OCI_HTYPE_ERROR,				0,				NULL));	if (len > 0) {		CALL_OCI_RETURN(error, OCIStmtPrepare(					statement->pStmt,					connection->pError,					(text*)query,					len,					OCI_NTV_SYNTAX,					OCI_DEFAULT));		connection->error = oci_error(connection->pError, "OCIParse", error);		if (connection->error) {			CALL_OCI(OCIHandleFree(						statement->pStmt, 						OCI_HTYPE_STMT));						CALL_OCI(OCIHandleFree(						statement->pError, 						OCI_HTYPE_ERROR));			efree(statement);			oci_handle_error(connection, connection->error);			return 0;		}	}	if (query) {		statement->last_query = estrdup(query);	}	statement->conn = connection;	statement->has_data = 0;	statement->id = zend_list_insert(statement,le_stmt);	oci_debug("oci_parse \"%s\" id=%d conn=%d",				SAFE_STRING(query),				statement->id,				statement->conn->id);	zend_list_addref(statement->conn->id);	return statement;}/* }}} *//* {{{ oci_execute() */static intoci_execute(oci_statement *statement, char *func,ub4 mode){	oci_out_column *outcol;	oci_out_column column;	OCIParam *param = 0;	text *colname;	ub4 counter;	ub2 define_type;	ub4 iters;	ub4 colcount;	ub2 dynamic;	int dtype;	dvoid *buf;	oci_descriptor *descr;	sword error;	TSRMLS_FETCH();	if (! statement->stmttype) {		CALL_OCI_RETURN(error, OCIAttrGet(					(dvoid *)statement->pStmt,					OCI_HTYPE_STMT,					(ub2 *)&statement->stmttype,					(ub4 *)0,					OCI_ATTR_STMT_TYPE,					statement->pError));		statement->error = oci_error(statement->pError, "OCIAttrGet OCI_HTYPE_STMT/OCI_ATTR_STMT_TYPE", error);		if (statement->error) {			oci_handle_error(statement->conn, statement->error);			return 0;		}	}	if (statement->stmttype == OCI_STMT_SELECT) {		iters = 0;	} else {		iters = 1;	}		if (statement->last_query) { 		/* if we execute refcursors we don't have a query and 		   we don't want to execute!!! */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -