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

📄 sql_relay.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 4 页
字号:
/* Copyright (c) 2000  Adam Kropielnicki   See the file COPYING for more information */#include "sqlrelay/sqlrclient.h"#include "phpincludes.h"extern "C" {#if WIN32|WINNT#include <windows.h>#define DLEXPORT __declspec(dllexport)#else#define DLEXPORT#endifstatic int sqlrelay_connection;static int sqlrelay_cursor;#ifdef ZEND_MODULE_STARTUP_Dstatic void sqlrcon_cleanup(zend_rsrc_list_entry *rsrc TSRMLS_DC) {	sqlrconnection	*connection=(sqlrconnection *)rsrc->ptr;	delete connection;}static void sqlrcur_cleanup(zend_rsrc_list_entry *rsrc TSRMLS_DC) {	sqlrcursor	*cursor=(sqlrcursor *)rsrc->ptr;	delete cursor;}ZEND_MODULE_STARTUP_D(sqlrelay) {	sqlrelay_connection=zend_register_list_destructors_ex(sqlrcon_cleanup,				NULL,"sqlrelay connection",module_number);	sqlrelay_cursor=zend_register_list_destructors_ex(sqlrcur_cleanup,				NULL,"sqlrelay cursor",module_number);	return SUCCESS;}#endifDLEXPORT ZEND_FUNCTION(sqlrcon_alloc) {	zval **server,**port,**socket,**user,**password,**retrytime,**tries;	sqlrconnection *connection=NULL;	if (ZEND_NUM_ARGS() != 7 || 		zend_get_parameters_ex(7,&server,&port,&socket,			&user,&password,&retrytime,&tries ) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(server);	convert_to_long_ex(port);	convert_to_string_ex(socket);	convert_to_string_ex(user);	convert_to_string_ex(password);	convert_to_long_ex(retrytime);	convert_to_long_ex(tries);	connection=new sqlrconnection((*server)->value.str.val,			(*port)->value.lval,(*socket)->value.str.val,			(*user)->value.str.val,(*password)->value.str.val,			(*retrytime)->value.lval,(*tries)->value.lval);	connection->copyReferences();	connection->debugPrintFunction(zend_printf);	ZEND_REGISTER_RESOURCE(return_value,connection,sqlrelay_connection);}DLEXPORT ZEND_FUNCTION(sqlrcon_free) {	zval **sqlrcon;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	zend_list_delete((*sqlrcon)->value.lval);}DLEXPORT ZEND_FUNCTION(sqlrcon_settimeout) {	zval **sqlrcur,**timeoutsec,**timeoutusec;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&timeoutsec,&timeoutusec) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(timeoutsec);	convert_to_long_ex(timeoutusec);	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcur,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		connection->setTimeout((*timeoutsec)->value.lval,(*timeoutusec)->value.lval);	}}DLEXPORT ZEND_FUNCTION(sqlrcon_endsession) {	zval **sqlrcon;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		connection->endSession();	}}DLEXPORT ZEND_FUNCTION(sqlrcon_suspendsession) {	zval **sqlrcon;	bool r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		r=connection->suspendSession();		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcon_getconnectionport) {	zval **sqlrcon;	uint16_t r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		r=connection->getConnectionPort();		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcon_getconnectionsocket) {	zval **sqlrcon;	const char *r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		r=connection->getConnectionSocket();		if (r) {			RETURN_STRING(const_cast<char *>(r),1);		}	}	RETURN_FALSE;}DLEXPORT ZEND_FUNCTION(sqlrcon_resumesession) {	zval **sqlrcon,**port,**socket;	bool r;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcon,&port,&socket) 					== FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(port);	convert_to_string_ex(socket);	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		r=connection->resumeSession((*port)->value.lval,(*socket)->value.str.val);		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcon_debugon) {	zval **sqlrcon;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		connection->debugOn();	}}DLEXPORT ZEND_FUNCTION(sqlrcon_debugoff) {	zval **sqlrcon;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		connection->debugOff();	}}DLEXPORT ZEND_FUNCTION(sqlrcon_getdebug) {	zval **sqlrcon;	bool r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (connection) {		r=connection->getDebug();		if (r) {			RETURN_TRUE;		}	}	RETURN_FALSE;}DLEXPORT ZEND_FUNCTION(sqlrcur_alloc) {	zval	**sqlrcon;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcon) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrconnection *connection=NULL;	ZEND_FETCH_RESOURCE(connection,sqlrconnection *,sqlrcon,-1,"sqlrelay connection",sqlrelay_connection);	if (!connection) {		RETURN_LONG(0);	}	sqlrcursor	*cursor=new sqlrcursor(connection);	cursor->copyReferences();	ZEND_REGISTER_RESOURCE(return_value,cursor,sqlrelay_cursor);}DLEXPORT ZEND_FUNCTION(sqlrcur_free) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	zend_list_delete((*sqlrcur)->value.lval);}DLEXPORT ZEND_FUNCTION(sqlrcur_setresultsetbuffersize) {	zval **sqlrcur,**rows;	if (ZEND_NUM_ARGS() != 2 || 		zend_get_parameters_ex(2,&sqlrcur,&rows) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(rows);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->setResultSetBufferSize((*rows)->value.lval);	}}DLEXPORT ZEND_FUNCTION(sqlrcur_getresultsetbuffersize) {	zval **sqlrcur;	uint64_t r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=cursor->getResultSetBufferSize();		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcur_dontgetcolumninfo) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->dontGetColumnInfo();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_getcolumninfo) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->getColumnInfo();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_mixedcasecolumnnames) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->mixedCaseColumnNames();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_uppercasecolumnnames) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->upperCaseColumnNames();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_lowercasecolumnnames) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->lowerCaseColumnNames();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_cachetofile) {	zval **sqlrcur,**filename;	if (ZEND_NUM_ARGS() != 2 || 		zend_get_parameters_ex(2,&sqlrcur,&filename) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(filename);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->cacheToFile((*filename)->value.str.val);	}}DLEXPORT ZEND_FUNCTION(sqlrcur_setcachettl) {	zval **sqlrcur,**ttl;	if (ZEND_NUM_ARGS() != 2 || 		zend_get_parameters_ex(2,&sqlrcur,&ttl) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(ttl);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->setCacheTtl((*ttl)->value.lval);	}}DLEXPORT ZEND_FUNCTION(sqlrcur_getcachefilename) {	zval **sqlrcur;	const char *r;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=cursor->getCacheFileName();		if (r) {			RETURN_STRING(const_cast<char *>(r),1);		}	}	RETURN_FALSE;}DLEXPORT ZEND_FUNCTION(sqlrcur_cacheoff) {	zval **sqlrcur;	if (ZEND_NUM_ARGS() != 1 || 		zend_get_parameters_ex(1,&sqlrcur) == FAILURE) {		WRONG_PARAM_COUNT;	}	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->cacheOff();	}}DLEXPORT ZEND_FUNCTION(sqlrcur_sendquery) {	zval **sqlrcur,**query;	bool r;	if (ZEND_NUM_ARGS() != 2 || 		zend_get_parameters_ex(2,&sqlrcur,&query) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(query);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=cursor->sendQuery((*query)->value.str.val);		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcur_sendquerywithlength) {	zval **sqlrcur,**query,**length;	bool r;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&query,&length) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(query);	convert_to_long_ex(length);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=cursor->sendQuery((*query)->value.str.val,(*length)->value.lval);		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcur_sendfilequery) {	zval **sqlrcur,**path,**filename;	bool r;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&path,&filename) 					== FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(path);	convert_to_string_ex(filename);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=((sqlrcursor *)(*sqlrcur)->value.lval)->sendFileQuery((*path)->value.str.val,(*filename)->value.str.val);		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcur_preparequery) {	zval **sqlrcur,**query;	if (ZEND_NUM_ARGS() != 2 || 		zend_get_parameters_ex(2,&sqlrcur,&query) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(query);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->prepareQuery((*query)->value.str.val);	}}DLEXPORT ZEND_FUNCTION(sqlrcur_preparequerywithlength) {	zval **sqlrcur,**query,**length;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&query,&length) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(query);	convert_to_long_ex(length);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		cursor->prepareQuery((*query)->value.str.val,(*length)->value.lval);	}}DLEXPORT ZEND_FUNCTION(sqlrcur_preparefilequery) {	zval **sqlrcur,**path,**filename;	bool r;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&path,&filename) 					== FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_string_ex(path);	convert_to_string_ex(filename);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {		r=cursor->prepareFileQuery((*path)->value.str.val,(*filename)->value.str.val);		RETURN_LONG(r);	}	RETURN_LONG(0);}DLEXPORT ZEND_FUNCTION(sqlrcur_substitution) {	zval **sqlrcur,**variable,**value,**precision,**scale;	if (ZEND_NUM_ARGS() != 3 || 		zend_get_parameters_ex(3,&sqlrcur,&variable,&value) 					== FAILURE) {		if (ZEND_NUM_ARGS() != 5 || 			zend_get_parameters_ex(5,&sqlrcur,				&variable,&value,&precision,&scale)== FAILURE) {			WRONG_PARAM_COUNT;		}	}	convert_to_string_ex(variable);	sqlrcursor *cursor=NULL;	ZEND_FETCH_RESOURCE(cursor,sqlrcursor *,sqlrcur,-1,"sqlrelay cursor",sqlrelay_cursor);	if (cursor) {

⌨️ 快捷键说明

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