📄 cursor.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 + -