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

📄 sqlrelay.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 3 页
字号:
	uint32_t	*lengths=sqlrcur->getRowLengths(NUM2INT(row));	VALUE	fieldhash=rb_hash_new();	for (uint32_t i=0; i<sqlrcur->colCount(); i++) {		if (fields[i]) {			rb_hash_aset(fieldhash,					rb_str_new2(sqlrcur->getColumnName(i)),					rb_str_new(fields[i],lengths[i]));		} else {			rb_hash_aset(fieldhash,					rb_str_new2(sqlrcur->getColumnName(i)),					Qnil);		}	}	return fieldhash;}static VALUE sqlrcur_getRowLengths(VALUE self, VALUE row) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	uint32_t	*lengths=sqlrcur->getRowLengths(NUM2INT(row));	if (!lengths) {		return Qnil;	}	VALUE	lengthary=rb_ary_new2(sqlrcur->colCount());	for (uint32_t i=0; i<sqlrcur->colCount(); i++) {		rb_ary_store(lengthary,i,INT2NUM(lengths[i]));	}	return lengthary;}static VALUE sqlrcur_getRowLengthsHash(VALUE self, VALUE row) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	uint32_t	*lengths=sqlrcur->getRowLengths(NUM2INT(row));	VALUE	lengthhash=rb_hash_new();	for (uint32_t i=0; i<sqlrcur->colCount(); i++) {		rb_hash_aset(lengthhash,				rb_str_new2(sqlrcur->getColumnName(i)),				INT2NUM(lengths[i]));	}	return lengthhash;}static VALUE sqlrcur_getColumnNames(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char * const *names=sqlrcur->getColumnNames();	if (!names) {		return Qnil;	}	VALUE	nameary=rb_ary_new2(sqlrcur->colCount());	for (uint32_t i=0; i<sqlrcur->colCount(); i++) {		if (names[i]) {			rb_ary_store(nameary,i,rb_str_new2(names[i]));		} else {			rb_ary_store(nameary,i,Qnil);		}	}	return nameary;}static VALUE sqlrcur_getColumnName(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*result=sqlrcur->getColumnName(NUM2INT(col));	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcur_getColumnType(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	const char	*result;	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		result=sqlrcur->getColumnType(STR2CSTR(col));	} else {		result=sqlrcur->getColumnType(NUM2INT(col));	}	if (result) {		return rb_str_new2(result);	} else {		return Qnil;	}}static VALUE sqlrcur_getColumnLength(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnLength(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnLength(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnPrecision(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnPrecision(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnPrecision(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnScale(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnScale(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnScale(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsNullable(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsNullable(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsNullable(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsPrimaryKey(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsPrimaryKey(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsPrimaryKey(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsUnique(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsUnique(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsUnique(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsPartOfKey(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsPartOfKey(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsPartOfKey(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsUnsigned(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsUnsigned(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsUnsigned(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsZeroFilled(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsZeroFilled(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsZeroFilled(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsBinary(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getColumnIsBinary(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getColumnIsBinary(NUM2INT(col)));	}}static VALUE sqlrcur_getColumnIsAutoIncrement(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(			sqlrcur->getColumnIsAutoIncrement(STR2CSTR(col)));	} else {		return INT2NUM(			sqlrcur->getColumnIsAutoIncrement(NUM2INT(col)));	}}static VALUE sqlrcur_getLongest(VALUE self, VALUE col) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	if (rb_obj_is_instance_of(col,rb_cString)==Qtrue) {		return INT2NUM(sqlrcur->getLongest(STR2CSTR(col)));	} else {		return INT2NUM(sqlrcur->getLongest(NUM2INT(col)));	}}static VALUE sqlrcur_getResultSetId(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->getResultSetId());}static VALUE sqlrcur_suspendResultSet(VALUE self) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	sqlrcur->suspendResultSet();	return Qnil;}static VALUE sqlrcur_resumeResultSet(VALUE self, VALUE id) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->resumeResultSet(NUM2INT(id)));}static VALUE sqlrcur_resumeCachedResultSet(VALUE self, 						VALUE id, VALUE filename) {	sqlrcursor	*sqlrcur;	Data_Get_Struct(self,sqlrcursor,sqlrcur);	return INT2NUM(sqlrcur->resumeCachedResultSet(NUM2INT(id),							STR2CSTR(filename)));}void Init_SQLRCursor() {	csqlrcursor=rb_define_class("SQLRCursor", rb_cObject);	rb_define_singleton_method(csqlrcursor,"new",				(CAST)sqlrcur_new,1);	rb_define_method(csqlrcursor,"setResultSetBufferSize",				(CAST)sqlrcur_setResultSetBufferSize,1);	rb_define_method(csqlrcursor,"getResultSetBufferSize",				(CAST)sqlrcur_getResultSetBufferSize,0);	rb_define_method(csqlrcursor,"dontGetColumnInfo",				(CAST)sqlrcur_dontGetColumnInfo,0);	rb_define_method(csqlrcursor,"getColumnInfo",				(CAST)sqlrcur_getColumnInfo,0);	rb_define_method(csqlrcursor,"mixedCaseColumnNames",				(CAST)sqlrcur_mixedCaseColumnNames,0);	rb_define_method(csqlrcursor,"upperCaseColumnNames",				(CAST)sqlrcur_upperCaseColumnNames,0);	rb_define_method(csqlrcursor,"lowerCaseColumnNames",				(CAST)sqlrcur_lowerCaseColumnNames,0);	rb_define_method(csqlrcursor,"cacheToFile",				(CAST)sqlrcur_cacheToFile,1);	rb_define_method(csqlrcursor,"setCacheTtl",				(CAST)sqlrcur_setCacheTtl,1);	rb_define_method(csqlrcursor,"getCacheFileName",				(CAST)sqlrcur_getCacheFileName,0);	rb_define_method(csqlrcursor,"cacheOff",				(CAST)sqlrcur_cacheOff,0);	rb_define_method(csqlrcursor,"sendQuery",				(CAST)sqlrcur_sendQuery,1);	rb_define_method(csqlrcursor,"sendQueryWithLength",				(CAST)sqlrcur_sendQueryWithLength,2);	rb_define_method(csqlrcursor,"sendFileQuery",				(CAST)sqlrcur_sendFileQuery,2);	rb_define_method(csqlrcursor,"prepareQuery",				(CAST)sqlrcur_prepareQuery,1);	rb_define_method(csqlrcursor,"prepareQueryWithLength",				(CAST)sqlrcur_prepareQueryWithLength,2);	rb_define_method(csqlrcursor,"prepareFileQuery",				(CAST)sqlrcur_prepareFileQuery,2);	rb_define_method(csqlrcursor,"clearBinds",				(CAST)sqlrcur_clearBinds,0);	rb_define_method(csqlrcursor,"countBindVariables",				(CAST)sqlrcur_countBindVariables,0);	rb_define_method(csqlrcursor,"substitution",				(CAST)sqlrcur_substitution,-1);	rb_define_method(csqlrcursor,"inputBind",				(CAST)sqlrcur_inputBind,-1);	rb_define_method(csqlrcursor,"inputBindBlob",				(CAST)sqlrcur_inputBindBlob,3);	rb_define_method(csqlrcursor,"inputBindClob",				(CAST)sqlrcur_inputBindClob,3);	rb_define_method(csqlrcursor,"defineOutputBindString",				(CAST)sqlrcur_defineOutputBindString,2);	rb_define_method(csqlrcursor,"defineOutputBindInteger",				(CAST)sqlrcur_defineOutputBindInteger,1);	rb_define_method(csqlrcursor,"defineOutputBindDouble",				(CAST)sqlrcur_defineOutputBindDouble,1);	rb_define_method(csqlrcursor,"defineOutputBindBlob",				(CAST)sqlrcur_defineOutputBindBlob,1);	rb_define_method(csqlrcursor,"defineOutputBindClob",				(CAST)sqlrcur_defineOutputBindClob,1);	rb_define_method(csqlrcursor,"defineOutputBindCursor",				(CAST)sqlrcur_defineOutputBindCursor,1);	rb_define_method(csqlrcursor,"substitutions",				(CAST)sqlrcur_substitutions,-1);	rb_define_method(csqlrcursor,"inputBinds",				(CAST)sqlrcur_inputBinds,-1);	rb_define_method(csqlrcursor,"validateBinds",				(CAST)sqlrcur_validateBinds,0);	rb_define_method(csqlrcursor,"validBind",				(CAST)sqlrcur_validBind,0);	rb_define_method(csqlrcursor,"executeQuery",				(CAST)sqlrcur_executeQuery,0);	rb_define_method(csqlrcursor,"fetchFromBindCursor",				(CAST)sqlrcur_fetchFromBindCursor,0);	rb_define_method(csqlrcursor,"getOutputBindString",				(CAST)sqlrcur_getOutputBindString,1);	rb_define_method(csqlrcursor,"getOutputBindBlob",				(CAST)sqlrcur_getOutputBindBlob,1);	rb_define_method(csqlrcursor,"getOutputBindClob",				(CAST)sqlrcur_getOutputBindClob,1);	rb_define_method(csqlrcursor,"getOutputBindInteger",				(CAST)sqlrcur_getOutputBindInteger,1);	rb_define_method(csqlrcursor,"getOutputBindDouble",				(CAST)sqlrcur_getOutputBindDouble,1);	rb_define_method(csqlrcursor,"getOutputBindLength",				(CAST)sqlrcur_getOutputBindLength,1);	rb_define_method(csqlrcursor,"getOutputBindCursor",				(CAST)sqlrcur_getOutputBindCursor,1);	rb_define_method(csqlrcursor,"openCachedResultSet",				(CAST)sqlrcur_openCachedResultSet,1);	rb_define_method(csqlrcursor,"colCount",				(CAST)sqlrcur_colCount,0);	rb_define_method(csqlrcursor,"rowCount",				(CAST)sqlrcur_rowCount,0);	rb_define_method(csqlrcursor,"totalRows",				(CAST)sqlrcur_totalRows,0);	rb_define_method(csqlrcursor,"affectedRows",				(CAST)sqlrcur_affectedRows,0);	rb_define_method(csqlrcursor,"firstRowIndex",				(CAST)sqlrcur_firstRowIndex,0);	rb_define_method(csqlrcursor,"endOfResultSet",				(CAST)sqlrcur_endOfResultSet,0);	rb_define_method(csqlrcursor,"errorMessage",				(CAST)sqlrcur_errorMessage,0);	rb_define_method(csqlrcursor,"getNullsAsEmptyStrings",				(CAST)sqlrcur_getNullsAsEmptyStrings,0);	rb_define_method(csqlrcursor,"getNullsAsNils",				(CAST)sqlrcur_getNullsAsNils,0);	rb_define_method(csqlrcursor,"getField",				(CAST)sqlrcur_getField,2);	rb_define_method(csqlrcursor,"getFieldAsInteger",				(CAST)sqlrcur_getFieldAsInteger,2);	rb_define_method(csqlrcursor,"getFieldAsDouble",				(CAST)sqlrcur_getFieldAsDouble,2);	rb_define_method(csqlrcursor,"getFieldLength",				(CAST)sqlrcur_getFieldLength,2);	rb_define_method(csqlrcursor,"getRow",				(CAST)sqlrcur_getRow,1);	rb_define_method(csqlrcursor,"getRowHash",				(CAST)sqlrcur_getRowHash,1);	rb_define_method(csqlrcursor,"getRowLengths",				(CAST)sqlrcur_getRowLengths,1);	rb_define_method(csqlrcursor,"getRowLengthsHash",				(CAST)sqlrcur_getRowLengthsHash,1);	rb_define_method(csqlrcursor,"getColumnNames",				(CAST)sqlrcur_getColumnNames,0);	rb_define_method(csqlrcursor,"getColumnName",				(CAST)sqlrcur_getColumnName,1);	rb_define_method(csqlrcursor,"getColumnType",				(CAST)sqlrcur_getColumnType,1);	rb_define_method(csqlrcursor,"getColumnLength",				(CAST)sqlrcur_getColumnLength,1);	rb_define_method(csqlrcursor,"getColumnPrecision",				(CAST)sqlrcur_getColumnPrecision,1);	rb_define_method(csqlrcursor,"getColumnScale",				(CAST)sqlrcur_getColumnScale,1);	rb_define_method(csqlrcursor,"getColumnIsNullable",				(CAST)sqlrcur_getColumnIsNullable,1);	rb_define_method(csqlrcursor,"getColumnIsPrimaryKey",				(CAST)sqlrcur_getColumnIsPrimaryKey,1);	rb_define_method(csqlrcursor,"getColumnIsUnique",				(CAST)sqlrcur_getColumnIsUnique,1);	rb_define_method(csqlrcursor,"getColumnIsPartOfKey",				(CAST)sqlrcur_getColumnIsPartOfKey,1);	rb_define_method(csqlrcursor,"getColumnIsUnsigned",				(CAST)sqlrcur_getColumnIsUnsigned,1);	rb_define_method(csqlrcursor,"getColumnIsZeroFilled",				(CAST)sqlrcur_getColumnIsZeroFilled,1);	rb_define_method(csqlrcursor,"getColumnIsBinary",				(CAST)sqlrcur_getColumnIsBinary,1);	rb_define_method(csqlrcursor,"getColumnIsAutoIncrement",				(CAST)sqlrcur_getColumnIsAutoIncrement,1);	rb_define_method(csqlrcursor,"getLongest",				(CAST)sqlrcur_getLongest,1);	rb_define_method(csqlrcursor,"getResultSetId",				(CAST)sqlrcur_getResultSetId,0);	rb_define_method(csqlrcursor,"suspendResultSet",				(CAST)sqlrcur_suspendResultSet,0);	rb_define_method(csqlrcursor,"resumeResultSet",				(CAST)sqlrcur_resumeResultSet,1);	rb_define_method(csqlrcursor,"resumeCachedResultSet",				(CAST)sqlrcur_resumeCachedResultSet,2);}void Init_sqlrelay() {	Init_SQLRConnection();	Init_SQLRCursor();}}

⌨️ 快捷键说明

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