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

📄 cursor.xs

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 XS
字号:
/* Copyright (c) 2001  David Muse   See the file COPYING for more information */#include <config.h>#include "perlincludes.h"#ifndef na	#define na PL_na#endif#ifndef sv_undef	#define sv_undef PL_sv_undef#endiftypedef class sqlrcursor sqlrcursor;MODULE = SQLRelay::Cursor		PACKAGE = SQLRelay::CursorREQUIRE: 1.925sqlrcursor *sqlrcursor::new(sqlrc)		sqlrconnection *sqlrc	CODE:		RETVAL=new sqlrcursor(sqlrc);		RETVAL->copyReferences();	OUTPUT:		RETVALvoidsqlrcursor::DESTROY()voidsqlrcursor::setResultSetBufferSize(rows)		uint64_t rowsuint64_tsqlrcursor::getResultSetBufferSize()voidsqlrcursor::dontGetColumnInfo()voidsqlrcursor::getColumnInfo()voidsqlrcursor::mixedCaseColumnNames()voidsqlrcursor::upperCaseColumnNames()voidsqlrcursor::lowerCaseColumnNames()voidsqlrcursor::cacheToFile(filename)		const char *filenamevoidsqlrcursor::setCacheTtl(ttl)		uint32_t ttlconst char *sqlrcursor::getCacheFileName()voidsqlrcursor::cacheOff()boolsqlrcursor::sendQuery(query)		const char *queryboolsqlrcursor::sendQueryWithLength(query,length)		const char *query		uint32_t length	CODE:		RETVAL=THIS->sendQuery(query,length);	OUTPUT:		RETVALboolsqlrcursor::sendFileQuery(path,file)		const char *path		const char *filevoidsqlrcursor::prepareQuery(query)		const char *queryvoidsqlrcursor::prepareQueryWithLength(query,length)		const char *query		uint32_t length	CODE:		THIS->prepareQuery(query,length);		boolsqlrcursor::prepareFileQuery(path,file)		const char *path		const char *fileboolsqlrcursor::substitution(variable,...)		const char *variable	CODE:		RETVAL=1;		if (SvIOK(ST(2))) {			THIS->substitution(variable,(int64_t)SvIV(ST(2)));		} else if (SvNOK(ST(2))) {			THIS->substitution(variable,(double)SvNV(ST(2)),						(uint32_t)SvIV(ST(3)),						(uint32_t)SvIV(ST(4)));		} else if (SvPOK(ST(2))) {			THIS->substitution(variable,SvPV(ST(2),na));		} else if (!SvOK(ST(2))) {			THIS->substitution(variable,(const char *)NULL);		} else {			RETVAL=0;		}	OUTPUT:		RETVALvoidsqlrcursor::clearBinds()uint16_tsqlrcursor::countBindVariables()boolsqlrcursor::inputBind(variable,...)		const char *variable	CODE:		RETVAL=1;		if (SvIOK(ST(2))) {			THIS->inputBind(variable,(int64_t)SvIV(ST(2)));		} else if (SvNOK(ST(2))) {			THIS->inputBind(variable,(double)SvNV(ST(2)),						(uint32_t)SvIV(ST(3)),						(uint32_t)SvIV(ST(4)));		} else if (SvPOK(ST(2))) {			THIS->inputBind(variable,SvPV(ST(2),na));		} else if (!SvOK(ST(2))) {			THIS->inputBind(variable,(const char *)NULL);		} else {			RETVAL=0;		}	OUTPUT:		RETVALboolsqlrcursor::inputBindBlob(variable,value,size)		const char *variable		const char *value		uint32_t size	CODE:		RETVAL=0;		if (SvPOK(ST(2))) {			THIS->inputBindBlob(variable,value,size);			RETVAL=1;		} else if (!SvOK(ST(2))) {			THIS->inputBindBlob(variable,NULL,0);		}	OUTPUT:		RETVALboolsqlrcursor::inputBindClob(variable,value,size)		const char *variable		const char *value		uint32_t size	CODE:		RETVAL=0;		if (SvPOK(ST(2))) {			THIS->inputBindClob(variable,value,size);			RETVAL=1;		} else if (!SvOK(ST(2))) {			THIS->inputBindClob(variable,NULL,0);		}	OUTPUT:		RETVALvoidsqlrcursor::validateBinds()boolsqlrcursor::validBind(variable)	const char	*variableboolsqlrcursor::executeQuery()boolsqlrcursor::fetchFromBindCursor()voidsqlrcursor::defineOutputBindString(variable,length)		const char *variable		uint32_t lengthvoidsqlrcursor::defineOutputBindInteger(variable)		const char *variablevoidsqlrcursor::defineOutputBindDouble(variable)		const char *variablevoidsqlrcursor::defineOutputBindBlob(variable)		const char *variablevoidsqlrcursor::defineOutputBindClob(variable)		const char *variablevoidsqlrcursor::defineOutputBindCursor(variable)		const char *variableconst char *sqlrcursor::getOutputBindString(variable)		const char *variable	CODE:		const char	*value=THIS->getOutputBindString(variable);		uint32_t	length=THIS->getOutputBindLength(variable);		ST(0)=sv_newmortal();		if (value) {			sv_setpvn(ST(0),value,length);		} else {			ST(0)=&sv_undef;		}const char *sqlrcursor::getOutputBindBlob(variable)		const char *variable	CODE:		const char	*value=THIS->getOutputBindBlob(variable);		uint32_t	length=THIS->getOutputBindLength(variable);		ST(0)=sv_newmortal();		if (value) {			sv_setpvn(ST(0),value,length);		} else {			ST(0)=&sv_undef;		}const char *sqlrcursor::getOutputBindClob(variable)		const char *variable	CODE:		const char	*value=THIS->getOutputBindClob(variable);		uint32_t	length=THIS->getOutputBindLength(variable);		ST(0)=sv_newmortal();		if (value) {			sv_setpvn(ST(0),value,length);		} else {			ST(0)=&sv_undef;		}int64_tsqlrcursor::getOutputBindInteger(variable)		const char *variable	CODE:		int64_t	value=THIS->getOutputBindInteger(variable);		ST(0)=sv_newmortal();		sv_setiv(ST(0),value);doublesqlrcursor::getOutputBindDouble(variable)		const char *variable	CODE:		double	value=THIS->getOutputBindDouble(variable);		ST(0)=sv_newmortal();		sv_setnv(ST(0),value);uint32_tsqlrcursor::getOutputBindLength(variable)		const char *variablesqlrcursor *sqlrcursor::getOutputBindCursor(variable)		const char *variable	PREINIT:		// on some platforms, this needs to be a		// char * rather than const char *		char *	CLASS = "SQLRelay::Cursor";	CODE:		RETVAL=THIS->getOutputBindCursor(variable);		RETVAL->copyReferences();	OUTPUT:		RETVALboolsqlrcursor::openCachedResultSet(filename)	const char	*filenameuint32_tsqlrcursor::colCount()uint64_tsqlrcursor::rowCount()uint64_tsqlrcursor::totalRows()uint64_tsqlrcursor::affectedRows()uint64_tsqlrcursor::firstRowIndex()boolsqlrcursor::endOfResultSet()const char *sqlrcursor::errorMessage()voidsqlrcursor::getNullsAsEmptyStrings()voidsqlrcursor::getNullsAsUndefined()	CODE:		THIS->getNullsAsNulls();boolsqlrcursor::validRow(row)		uint64_t	row	CODE:		RETVAL=1;		if (!THIS->getRow(row)) {			RETVAL=0;		}	OUTPUT:		RETVALconst char *sqlrcursor::getField(row,...)		uint64_t	row	CODE:		const char	*field=NULL;		uint32_t	length=0;		ST(0)=sv_newmortal();		if (SvIOK(ST(2)) || SvNOK(ST(2))) {			field=THIS->getField(row,(uint32_t)SvIV(ST(2)));			length=THIS->getFieldLength(row,(uint32_t)SvIV(ST(2)));		} else if (SvPOK(ST(2))) {			field=THIS->getField(row,SvPV(ST(2),na));			length=THIS->getFieldLength(row,SvPV(ST(2),na));		} 		if (field) {			sv_setpvn(ST(0),field,length);		} else {			ST(0)=&sv_undef;		}int64_tsqlrcursor::getFieldAsInteger(row,...)		uint64_t	row	CODE:		int64_t	field=0;		ST(0)=sv_newmortal();		if (SvIOK(ST(2)) || SvNOK(ST(2))) {			field=THIS->getFieldAsInteger(row,						(uint32_t)SvIV(ST(2)));		} else if (SvPOK(ST(2))) {			field=THIS->getFieldAsInteger(row,SvPV(ST(2),na));		} 		sv_setiv(ST(0),field);doublesqlrcursor::getFieldAsDouble(row,...)		uint64_t	row	CODE:		double	field=0.0;		ST(0)=sv_newmortal();		if (SvIOK(ST(2)) || SvNOK(ST(2))) {			field=THIS->getFieldAsDouble(row,(uint32_t)SvIV(ST(2)));		} else if (SvPOK(ST(2))) {			field=THIS->getFieldAsDouble(row,SvPV(ST(2),na));		} 		sv_setnv(ST(0),field);uint32_tsqlrcursor::getFieldLength(row,...)		uint64_t	row	CODE:		RETVAL=0;		if (SvIOK(ST(2)) || SvNOK(ST(2))) {			RETVAL=THIS->getFieldLength(row,(uint32_t)SvIV(ST(2)));		} else if (SvPOK(ST(2))) {			RETVAL=THIS->getFieldLength(row,SvPV(ST(2),na));		}	OUTPUT:		RETVALconst char * const *sqlrcursor::getColumnNames()	PPCODE:		uint32_t	index=0;		const char * const *namesptr=THIS->getColumnNames();		EXTEND(SP,THIS->colCount());		if (namesptr) {			for (index=0; index<THIS->colCount(); index++) {				// On some platforms newSVpv takes a char *				// argument rather than a const char *				// argument.				PUSHs(sv_2mortal(					newSVpv((char *)namesptr[index],0)));			}		}const char *sqlrcursor::getColumnName(col)		uint32_t colconst char *sqlrcursor::getColumnType(...)	CODE:		RETVAL=NULL;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnType((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnType(SvPV(ST(1),na));		}	OUTPUT:		RETVALuint32_tsqlrcursor::getColumnLength(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnLength((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnLength(SvPV(ST(1),na));		}	OUTPUT:		RETVALuint32_tsqlrcursor::getColumnPrecision(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnPrecision((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnPrecision(SvPV(ST(1),na));		}	OUTPUT:		RETVALuint32_tsqlrcursor::getColumnScale(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnScale((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnScale(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsNullable(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsNullable((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsNullable(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsPrimaryKey(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsPrimaryKey((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsPrimaryKey(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsUnique(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsUnique((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsUnique(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsPartOfKey(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsPartOfKey((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsPartOfKey(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsUnsigned(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsUnsigned((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsUnsigned(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsZeroFilled(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsZeroFilled((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsZeroFilled(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsBinary(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsBinary((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsBinary(SvPV(ST(1),na));		}	OUTPUT:		RETVALboolsqlrcursor::getColumnIsAutoIncrement(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getColumnIsAutoIncrement((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getColumnIsAutoIncrement(SvPV(ST(1),na));		}	OUTPUT:uint32_tsqlrcursor::getLongest(...)	CODE:		RETVAL=0;		if (SvIOK(ST(1)) || SvNOK(ST(1))) {			RETVAL=THIS->getLongest((uint32_t)SvIV(ST(1)));		} else if (SvPOK(ST(1))) {			RETVAL=THIS->getLongest(SvPV(ST(1),na));		}	OUTPUT:		RETVALuint16_tsqlrcursor::getResultSetId()voidsqlrcursor::suspendResultSet()boolsqlrcursor::resumeResultSet(id)		uint16_t idboolsqlrcursor::resumeCachedResultSet(id,filename)		uint16_t id		const char *filename

⌨️ 快捷键说明

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