📄 sqlrelay.c
字号:
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 + -