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

📄 sqlrelay.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 3 页
字号:
// Copyright (c) 2001  David Muse// See the file COPYING for more information.#include <ruby.h>#include "../c++/include/sqlrelay/sqlrclient.h"#include "rubyincludes.h"extern "C" {// sqlrconnection methodsstatic void sqlrcon_free(void *sqlrcon) {	delete (sqlrconnection *)sqlrcon;}static VALUE sqlrcon_new(VALUE self, VALUE host, VALUE port, VALUE socket,				VALUE user, VALUE password, 				VALUE retrytime, VALUE tries) {	const char	*socketstr;	if (socket==Qnil) {		socketstr="";	} else {		socketstr=STR2CSTR(socket);	}	sqlrconnection	*sqlrcon=new sqlrconnection(STR2CSTR(host),							NUM2INT(port),							socketstr,							STR2CSTR(user),							STR2CSTR(password),							NUM2INT(retrytime),							NUM2INT(tries));	sqlrcon->copyReferences();	return Data_Wrap_Struct(self,0,sqlrcon_free,(void *)sqlrcon);}static VALUE sqlrcon_endSession(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	sqlrcon->endSession();	return Qnil;}static VALUE sqlrcon_suspendSession(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->suspendSession());}static VALUE sqlrcon_getConnectionPort(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->getConnectionPort());}static VALUE sqlrcon_getConnectionSocket(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	const char	*result=sqlrcon->getConnectionSocket();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcon_resumeSession(VALUE self, VALUE port, VALUE socket) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->resumeSession(NUM2INT(port), 							STR2CSTR(socket)));}static VALUE sqlrcon_ping(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->ping());}static VALUE sqlrcon_identify(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	const char	*result=sqlrcon->identify();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcon_dbVersion(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	const char	*result=sqlrcon->dbVersion();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcon_bindFormat(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	const char	*result=sqlrcon->bindFormat();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcon_autoCommitOn(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->autoCommitOn());}static VALUE sqlrcon_autoCommitOff(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->autoCommitOff());}static VALUE sqlrcon_commit(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->commit());}static VALUE sqlrcon_rollback(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->rollback());}static VALUE sqlrcon_debugOn(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	sqlrcon->debugOn();	return Qnil;}static VALUE sqlrcon_debugOff(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	sqlrcon->debugOff();	return Qnil;}static VALUE sqlrcon_getDebug(VALUE self) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(self,sqlrconnection,sqlrcon);	return INT2NUM(sqlrcon->getDebug());}VALUE csqlrconnection;void Init_SQLRConnection() {	csqlrconnection=rb_define_class("SQLRConnection", rb_cObject);	rb_define_singleton_method(csqlrconnection,"new",				(CAST)sqlrcon_new,7);	rb_define_method(csqlrconnection,"endSession",				(CAST)sqlrcon_endSession,0);	rb_define_method(csqlrconnection,"suspendSession",				(CAST)sqlrcon_suspendSession,0);	rb_define_method(csqlrconnection,"getConnectionPort",				(CAST)sqlrcon_getConnectionPort,0);	rb_define_method(csqlrconnection,"getConnectionSocket",				(CAST)sqlrcon_getConnectionSocket,0);	rb_define_method(csqlrconnection,"resumeSession",				(CAST)sqlrcon_resumeSession,2);	rb_define_method(csqlrconnection,"ping",				(CAST)sqlrcon_ping,0);	rb_define_method(csqlrconnection,"identify",				(CAST)sqlrcon_identify,0);	rb_define_method(csqlrconnection,"dbVersion",				(CAST)sqlrcon_dbVersion,0);	rb_define_method(csqlrconnection,"bindFormat",				(CAST)sqlrcon_bindFormat,0);	rb_define_method(csqlrconnection,"autoCommitOn",				(CAST)sqlrcon_autoCommitOn,0);	rb_define_method(csqlrconnection,"autoCommitOff",				(CAST)sqlrcon_autoCommitOff,0);	rb_define_method(csqlrconnection,"commit",				(CAST)sqlrcon_commit,0);	rb_define_method(csqlrconnection,"rollback",				(CAST)sqlrcon_rollback,0);	rb_define_method(csqlrconnection,"debugOn",				(CAST)sqlrcon_debugOn,0);	rb_define_method(csqlrconnection,"debugOff",				(CAST)sqlrcon_debugOff,0);	rb_define_method(csqlrconnection,"getDebug",				(CAST)sqlrcon_getDebug,0);}// sqlrcursor methodsVALUE csqlrcursor;static void sqlrcur_free(void *sqlrcur) {	delete (sqlrcursor *)sqlrcur;}static VALUE sqlrcur_new(VALUE self, VALUE connection) {	sqlrconnection	*sqlrcon;	Data_Get_Struct(connection,sqlrconnection,sqlrcon);	sqlrcursor	*sqlrcur=new sqlrcursor(sqlrcon);	sqlrcur->copyReferences();	return Data_Wrap_Struct(self,0,sqlrcur_free,(void *)sqlrcur);}static VALUE sqlrcur_setResultSetBufferSize(VALUE self, VALUE rows) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->setResultSetBufferSize(NUM2INT(rows));	return Qnil;}static VALUE sqlrcur_getResultSetBufferSize(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->getResultSetBufferSize());}static VALUE sqlrcur_dontGetColumnInfo(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->dontGetColumnInfo();	return Qnil;}static VALUE sqlrcur_getColumnInfo(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->getColumnInfo();	return Qnil;}static VALUE sqlrcur_mixedCaseColumnNames(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->mixedCaseColumnNames();	return Qnil;}static VALUE sqlrcur_upperCaseColumnNames(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->upperCaseColumnNames();	return Qnil;}static VALUE sqlrcur_lowerCaseColumnNames(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->lowerCaseColumnNames();	return Qnil;}static VALUE sqlrcur_cacheToFile(VALUE self, VALUE filename) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->cacheToFile(STR2CSTR(filename));	return Qnil;}static VALUE sqlrcur_setCacheTtl(VALUE self, VALUE ttl) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->setCacheTtl(NUM2INT(ttl));	return Qnil;}static VALUE sqlrcur_getCacheFileName(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*result=sqlrcur->getCacheFileName();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcur_cacheOff(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->cacheOff();	return Qnil;}static VALUE sqlrcur_sendQuery(VALUE self, VALUE query) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->sendQuery(STR2CSTR(query)));}static VALUE sqlrcur_sendQueryWithLength(VALUE self,					VALUE query, VALUE length) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->sendQuery(STR2CSTR(query),NUM2INT(length)));}static VALUE sqlrcur_sendFileQuery(VALUE self, VALUE path, VALUE filename) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->sendFileQuery(STR2CSTR(path),						STR2CSTR(filename))); }static VALUE sqlrcur_prepareQuery(VALUE self, VALUE query) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->prepareQuery(STR2CSTR(query));	return Qnil;}static VALUE sqlrcur_prepareQueryWithLength(VALUE self,					VALUE query, VALUE length) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->prepareQuery(STR2CSTR(query),NUM2INT(length));	return Qnil;}static VALUE sqlrcur_prepareFileQuery(VALUE self, VALUE path, VALUE filename) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->prepareFileQuery(STR2CSTR(path),						STR2CSTR(filename)));}static VALUE sqlrcur_clearBinds(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->clearBinds();	return Qnil;}static VALUE sqlrcur_countBindVariables(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->countBindVariables());}static VALUE sqlrcur_substitution(int argc, VALUE *argv, VALUE self) {	sqlrcursor	*sqlrcur;	VALUE	variable;	VALUE	value;	VALUE	precision;	VALUE	scale;	bool	result=true;	rb_scan_args(argc,argv,"22",&variable,&value,&precision,&scale);	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(value,rb_cString)==Qtrue) {		sqlrcur->substitution(STR2CSTR(variable),STR2CSTR(value));	} else if (rb_obj_is_instance_of(value,rb_cBignum)==Qtrue ||			rb_obj_is_instance_of(value,rb_cFixnum)==Qtrue ||			rb_obj_is_instance_of(value,rb_cInteger)==Qtrue ||			rb_obj_is_instance_of(value,rb_cNumeric)==Qtrue) {		sqlrcur->substitution(STR2CSTR(variable),NUM2INT(value));	} else if (rb_obj_is_instance_of(value,rb_cFloat)==Qtrue) {		sqlrcur->substitution(STR2CSTR(variable),NUM2DBL(value), 					(unsigned short)NUM2INT(precision),					(unsigned short)NUM2INT(scale));	} else if (rb_obj_is_instance_of(value,rb_cNilClass)==Qtrue) {		sqlrcur->substitution(STR2CSTR(variable),(const char *)NULL);	} else {		result=false;	}	return INT2NUM(result);}static VALUE sqlrcur_inputBind(int argc, VALUE *argv, VALUE self) {	sqlrcursor	*sqlrcur;	VALUE	variable;	VALUE	value;	VALUE	precision;	VALUE	scale;	bool	success=true;	rb_scan_args(argc,argv,"22",&variable,&value,&precision,&scale);	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(value,rb_cString)==Qtrue) {		sqlrcur->inputBind(STR2CSTR(variable),STR2CSTR(value));	} else if (rb_obj_is_instance_of(value,rb_cBignum)==Qtrue ||			rb_obj_is_instance_of(value,rb_cFixnum)==Qtrue ||			rb_obj_is_instance_of(value,rb_cInteger)==Qtrue ||			rb_obj_is_instance_of(value,rb_cNumeric)==Qtrue) {		sqlrcur->inputBind(STR2CSTR(variable),NUM2INT(value));	} else if (rb_obj_is_instance_of(value,rb_cFloat)==Qtrue) {		sqlrcur->inputBind(STR2CSTR(variable),NUM2DBL(value), 					(unsigned short)NUM2INT(precision),					(unsigned short)NUM2INT(scale));	} else if (rb_obj_is_instance_of(value,rb_cNilClass)==Qtrue) {		sqlrcur->inputBind(STR2CSTR(variable),(const char *)NULL);	} else {		success=false;	}	return INT2NUM(success);}static VALUE sqlrcur_inputBindBlob(VALUE self, VALUE variable,					VALUE value, VALUE size) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);

⌨️ 快捷键说明

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