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

📄 sqlrelay.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 3 页
字号:
	bool	success=true;	if (value==Qnil) {		sqlrcur->inputBindBlob(STR2CSTR(variable),NULL,NUM2INT(size));	} else if (rb_obj_is_instance_of(value,rb_cString)==Qtrue) {		sqlrcur->inputBindBlob(STR2CSTR(variable),				STR2CSTR(value),NUM2INT(size));	} else {		success=false;	}	return INT2NUM(success);}static VALUE sqlrcur_inputBindClob(VALUE self, VALUE variable,					VALUE value, VALUE size) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	bool	success=true;	if (value==Qnil) {		sqlrcur->inputBindClob(STR2CSTR(variable),NULL,NUM2INT(size));	} else if (rb_obj_is_instance_of(value,rb_cString)==Qtrue) {		sqlrcur->inputBindClob(STR2CSTR(variable),				STR2CSTR(value),NUM2INT(size));	} else {		success=false;	}	return INT2NUM(success);}static VALUE sqlrcur_defineOutputBindString(VALUE self, VALUE variable,							VALUE bufferlength) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindString(STR2CSTR(variable),NUM2INT(bufferlength));	return Qnil;}static VALUE sqlrcur_defineOutputBindInteger(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindInteger(STR2CSTR(variable));	return Qnil;}static VALUE sqlrcur_defineOutputBindDouble(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindDouble(STR2CSTR(variable));	return Qnil;}static VALUE sqlrcur_defineOutputBindBlob(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindBlob(STR2CSTR(variable));	return Qnil;}static VALUE sqlrcur_defineOutputBindClob(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindClob(STR2CSTR(variable));	return Qnil;}static VALUE sqlrcur_defineOutputBindCursor(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->defineOutputBindCursor(STR2CSTR(variable));	return Qnil;}static VALUE sqlrcur_substitutions(int argc, VALUE *argv, VALUE self) {	sqlrcursor	*sqlrcur;	VALUE	variables;	VALUE	values;	VALUE	precisions;	VALUE	scales;	int	argcount=rb_scan_args(argc,argv,"22",					&variables,&values,&precisions,&scales);	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (variables==Qnil || values==Qnil) {		return Qnil;	}	VALUE	variable;	VALUE	value;	VALUE	precision;	VALUE	scale;	bool	success=true;	for (;;) {		variable=rb_ary_shift(variables);		if (variable==Qnil) {			break;		}		value=rb_ary_shift(values);		if (argcount==4) {			precision=rb_ary_shift(precisions);			scale=rb_ary_shift(scales);		}		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 {			success=false;		}	}	return INT2NUM(success);}static VALUE sqlrcur_inputBinds(int argc, VALUE *argv, VALUE self) {	sqlrcursor	*sqlrcur;	VALUE	variables;	VALUE	values;	VALUE	precisions;	VALUE	scales;	int	argcount=rb_scan_args(argc,argv,"22",				&variables,&values,&precisions,&scales);	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (variables==Qnil || values==Qnil) {		return Qnil;	}	VALUE	variable;	VALUE	value;	VALUE	precision;	VALUE	scale;	bool	success=true;	for (;;) {		variable=rb_ary_shift(variables);		if (variable==Qnil) {			break;		}		value=rb_ary_shift(values);		if (argcount==4) {			precision=rb_ary_shift(precisions);			scale=rb_ary_shift(scales);		}		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_validateBinds(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->validateBinds();	return Qnil;}static VALUE sqlrcur_validBind(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->validBind(STR2CSTR(variable)));}static VALUE sqlrcur_executeQuery(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->executeQuery());}static VALUE sqlrcur_fetchFromBindCursor(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->fetchFromBindCursor());}static VALUE sqlrcur_getOutputBindString(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*varname=STR2CSTR(variable);	const char	*result=sqlrcur->getOutputBindString(varname);	long		length=sqlrcur->getOutputBindLength(varname);	if (result) {		return rb_str_new(result,length);	} else {		return Qnil;	}}static VALUE sqlrcur_getOutputBindBlob(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*varname=STR2CSTR(variable);	const char	*result=sqlrcur->getOutputBindBlob(varname);	long		length=sqlrcur->getOutputBindLength(varname);	if (result) {		return rb_str_new(result,length);	} else {		return Qnil;	}}static VALUE sqlrcur_getOutputBindClob(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*varname=STR2CSTR(variable);	const char	*result=sqlrcur->getOutputBindClob(varname);	long		length=sqlrcur->getOutputBindLength(varname);	if (result) {		return rb_str_new(result,length);	} else {		return Qnil;	}}static VALUE sqlrcur_getOutputBindInteger(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*varname=STR2CSTR(variable);	long		result=sqlrcur->getOutputBindInteger(varname);	return INT2NUM(result);}static VALUE sqlrcur_getOutputBindDouble(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*varname=STR2CSTR(variable);	double		result=sqlrcur->getOutputBindDouble(varname);	return rb_float_new(result);}static VALUE sqlrcur_getOutputBindLength(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->getOutputBindLength(STR2CSTR(variable)));}static VALUE sqlrcur_getOutputBindCursor(VALUE self, VALUE variable) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcursor	*returnsqlrcur=sqlrcur->getOutputBindCursor(							STR2CSTR(variable));	returnsqlrcur->copyReferences();	return Data_Wrap_Struct(csqlrcursor,0,sqlrcur_free,					(void *)returnsqlrcur);}static VALUE sqlrcur_openCachedResultSet(VALUE self, VALUE filename) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->openCachedResultSet(STR2CSTR(filename)));}static VALUE sqlrcur_colCount(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->colCount());}static VALUE sqlrcur_rowCount(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->rowCount());}static VALUE sqlrcur_totalRows(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->totalRows());}static VALUE sqlrcur_affectedRows(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->affectedRows());}static VALUE sqlrcur_firstRowIndex(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->firstRowIndex());}static VALUE sqlrcur_endOfResultSet(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->endOfResultSet());}static VALUE sqlrcur_errorMessage(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*result=sqlrcur->errorMessage();	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcur_getNullsAsEmptyStrings(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->getNullsAsEmptyStrings();	return Qnil;}static VALUE sqlrcur_getNullsAsNils(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->getNullsAsNulls();	return Qnil;}static VALUE sqlrcur_getField(VALUE self, VALUE row, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*result;	long		length;	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		result=sqlrcur->getField(NUM2INT(row),STR2CSTR(col));		length=sqlrcur->getFieldLength(NUM2INT(row),STR2CSTR(col));	} else {		result=sqlrcur->getField(NUM2INT(row),NUM2INT(col));		length=sqlrcur->getFieldLength(NUM2INT(row),NUM2INT(col));	}	if (result) {		return rb_str_new(result,length);	} else {		return Qnil;	}}static VALUE sqlrcur_getFieldAsInteger(VALUE self, VALUE row, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	long	result;	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		result=sqlrcur->getFieldAsInteger(NUM2INT(row),STR2CSTR(col));	} else {		result=sqlrcur->getFieldAsInteger(NUM2INT(row),NUM2INT(col));	}	return INT2NUM(result);}static VALUE sqlrcur_getFieldAsDouble(VALUE self, VALUE row, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	double	result;	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		result=sqlrcur->getFieldAsDouble(NUM2INT(row),STR2CSTR(col));	} else {		result=sqlrcur->getFieldAsDouble(NUM2INT(row),NUM2INT(col));	}	return rb_float_new(result);}static VALUE sqlrcur_getFieldLength(VALUE self, VALUE row, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM((int)sqlrcur->getFieldLength(NUM2INT(row),								STR2CSTR(col)));	} else {		return INT2NUM((int)sqlrcur->getFieldLength(NUM2INT(row),								NUM2INT(col)));	}}static VALUE sqlrcur_getRow(VALUE self, VALUE row) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char * const *fields=sqlrcur->getRow(NUM2INT(row));	uint32_t	*lengths=sqlrcur->getRowLengths(NUM2INT(row));	VALUE	fieldary=rb_ary_new2(sqlrcur->colCount());	for (uint32_t i=0; i<sqlrcur->colCount(); i++) {		if (fields[i]) {			rb_ary_store(fieldary,i,rb_str_new(fields[i],								lengths[i]));		} else {			rb_ary_store(fieldary,i,Qnil);		}	}	return fieldary;}static VALUE sqlrcur_getRowHash(VALUE self, VALUE row) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char * const *fields=sqlrcur->getRow(NUM2INT(row));

⌨️ 快捷键说明

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