📄 sql_relay.c
字号:
/* 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 + -