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

📄 sqlrelaycmd.c

📁 适合于Unix/Linux下的一个持久数据库连接池
💻 C
📖 第 1 页 / 共 4 页
字号:
	  Tcl_WrongNumArgs(interp,3, objv, "query length");	  return TCL_ERROR;	}	Tcl_GetIntFromObj(interp, objv[3], &length);	if (!(result = cur->sendQuery(Tcl_GetString(objv[2]),length))) {	  Tcl_AppendResult(interp,cur->errorMessage(),(char *)NULL);	  return TCL_ERROR;	}	Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result));	break;      }    case SQLRCUR_sendFileQuery:      {	int result = 0;	if (objc != 4) {	  Tcl_WrongNumArgs(interp,2, objv, "path filename");	  return TCL_ERROR;	}	if (!(result = cur->sendFileQuery(Tcl_GetString(objv[2]),				   Tcl_GetString(objv[3])))) {	  Tcl_AppendResult(interp,cur->errorMessage(),(char *)NULL);	  return TCL_ERROR;	}	Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result));	break;      }    case SQLRCUR_prepareQuery:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp,2, objv, "query");	  return TCL_ERROR;	}	cur->prepareQuery(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_prepareQueryWithLength:      {	int length = 0;	if (objc != 4) {	  Tcl_WrongNumArgs(interp,3, objv, "query length");	  return TCL_ERROR;	}	Tcl_GetIntFromObj(interp, objv[3], &length);	cur->prepareQuery(Tcl_GetString(objv[2]),length);	break;      }    case SQLRCUR_prepareFileQuery:      {	if (objc != 4) {	  Tcl_WrongNumArgs(interp,2, objv, "path filename");	  return TCL_ERROR;	}	cur->prepareFileQuery(Tcl_GetString(objv[2]), Tcl_GetString(objv[3]));	break;      }    case SQLRCUR_substitution:      {	if (objc == 6) {	  double value;	  int precision, scale;	  if (Tcl_GetDoubleFromObj(interp, objv[3], &value) != TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[4], &precision) != TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[5], &scale) != TCL_OK) {	    return TCL_ERROR;	  }	  cur->substitution(Tcl_GetString(objv[2]), value, precision, scale);	} else if (objc == 4) {	  long value;	  if (Tcl_GetLongFromObj(interp, objv[3], &value) == TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[3], (int *)&value) == TCL_OK) {	    cur->substitution(Tcl_GetString(objv[2]), value);	  } else {	    cur->substitution(Tcl_GetString(objv[2]), Tcl_GetString(objv[3]));	  }	} else {	  Tcl_WrongNumArgs(interp, 2, objv, "variable value ?precision scale?");	  return TCL_ERROR;	}	break;      }    case SQLRCUR_clearBinds:      {	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	cur->clearBinds();	break;      }    case SQLRCUR_countBindVariables:      {	long count;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	count=cur->countBindVariables();	Tcl_SetObjResult(interp, Tcl_NewLongObj(count));	break;      }    case SQLRCUR_inputBind:      {	if (objc == 6) {	  double value;	  int precision, scale;	  if (Tcl_GetDoubleFromObj(interp, objv[3], &value) != TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[4], &precision) != TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[5], &scale) != TCL_OK) {	    return TCL_ERROR;	  }	  cur->inputBind(Tcl_GetString(objv[2]),			 value,			 (uint32_t)precision,			 (uint32_t)scale);	} else if (objc == 4) {	  long value;	  if (Tcl_GetLongFromObj(interp, objv[3], &value) == TCL_OK ||	      Tcl_GetIntFromObj(interp, objv[3], (int *)&value) == TCL_OK) {	    /* value is long object */	    cur->inputBind(Tcl_GetString(objv[2]), value);	  } else {	    /* value is not long object, so it might be string one */	    cur->inputBind(Tcl_GetString(objv[2]), Tcl_GetString(objv[3]));	  } 	} else {	  Tcl_WrongNumArgs(interp, 2, objv, "variable value ?precision scale?");	  return TCL_ERROR;	}	break;      }    case SQLRCUR_inputBindBlob:      {	long size;	if (objc != 5) {	  Tcl_WrongNumArgs(interp,2, objv, "variable value size");	  return TCL_ERROR;	}	if (Tcl_GetLongFromObj(interp, objv[4], &size) != TCL_OK) {	  return TCL_ERROR;	}	cur->inputBindBlob(Tcl_GetString(objv[2]),			      Tcl_GetString(objv[3]),			      (uint32_t)size);	break;      }    case SQLRCUR_inputBindClob:      {	long size;	if (objc != 5) {	  Tcl_WrongNumArgs(interp,2, objv, "variable value size");	  return TCL_ERROR;	}	if (Tcl_GetLongFromObj(interp, objv[4], &size) != TCL_OK) {	  return TCL_ERROR;	}	cur->inputBindClob(Tcl_GetString(objv[2]),			      Tcl_GetString(objv[3]),			      (uint32_t)size);	break;      }    case SQLRCUR_defineOutputBindString:      {	long length;	if (objc != 4) {	  Tcl_WrongNumArgs(interp,2, objv, "variable length");	  return TCL_ERROR;	}	if (Tcl_GetLongFromObj(interp, objv[3], &length) != TCL_OK) {	  return TCL_ERROR;	}	cur->defineOutputBindString(Tcl_GetString(objv[2]), length);	break;      }    case SQLRCUR_defineOutputBindInteger:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp,1, objv, "variable");	  return TCL_ERROR;	}	cur->defineOutputBindInteger(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_defineOutputBindDouble:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp,1, objv, "variable");	  return TCL_ERROR;	}	cur->defineOutputBindDouble(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_defineOutputBindBlob:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp,2, objv, "variable");	  return TCL_ERROR;	}	cur->defineOutputBindBlob(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_defineOutputBindClob:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp,2, objv, "variable");	  return TCL_ERROR;	}	cur->defineOutputBindClob(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_defineOutputBindCursor:      {	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	cur->defineOutputBindCursor(Tcl_GetString(objv[2]));	break;      }    case SQLRCUR_substitutions:      {	int num = 0, len = 0, i = 0;	Tcl_Obj **argList, *variableObj, *valueObj, *precisionObj, *scaleObj;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "{{variable value ?precision scale?}...}");	  return TCL_ERROR;	}	if (Tcl_ListObjGetElements(interp, objv[2], &num, &argList) != TCL_OK) {	  return TCL_ERROR;	}	for (i = 0; i < num; i++) {	  if (Tcl_ListObjLength(interp, argList[i], &len) != TCL_OK) {	    return TCL_ERROR;	  } else if (len == 4) {	    double value;	    int precision, scale;	    if (Tcl_ListObjIndex(interp, argList[i], 0, 				 &variableObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 1,				 &valueObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 2,				 &precisionObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 3,				 &scaleObj) != TCL_OK ||		Tcl_GetDoubleFromObj(interp, valueObj,				     &value) != TCL_OK ||		Tcl_GetIntFromObj(interp, precisionObj,				  &precision) != TCL_OK ||		Tcl_GetIntFromObj(interp, scaleObj,				  &scale) != TCL_OK) {	      return TCL_ERROR;	    }	    cur->substitution(Tcl_GetString(variableObj),			      value, precision, scale);	  } else if (len == 2) {	    long value;	    if (Tcl_ListObjIndex(interp, argList[i], 0,				 &variableObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 1,				 &valueObj) != TCL_OK) {	      return TCL_ERROR;	    }	    if ( Tcl_GetLongFromObj(interp, valueObj, &value) == TCL_OK ||		 Tcl_GetIntFromObj(interp, valueObj, (int *)&value) == TCL_OK ) {	      cur->substitution(Tcl_GetString(variableObj), value);	    } else {	      cur->substitution(Tcl_GetString(variableObj),				Tcl_GetString(valueObj));	    }	  } else {	    Tcl_WrongNumArgs(interp, 2, objv, "{{variable value ?precision scale?} ...}");	    return TCL_ERROR;	  }	}	break;      }    case SQLRCUR_inputBinds:      {	int num = 0, len = 0, i = 0;	Tcl_Obj **argList, *variableObj, *valueObj, *precisionObj, *scaleObj;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "{{variable value ?precision scale?}...}");	  return TCL_ERROR;	}	if (Tcl_ListObjGetElements(interp, objv[2], &num, &argList) != TCL_OK) {	  return TCL_ERROR;	}	for (i = 0; i < num; i++) {	  if (Tcl_ListObjLength(interp, argList[i], &len) != TCL_OK) {	    return TCL_ERROR;	  } else if (len == 4) {	    double value;	    int precision, scale;	    if (Tcl_ListObjIndex(interp, argList[i], 0, 				 &variableObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 1,				 &valueObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 2,				 &precisionObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 3,				 &scaleObj) != TCL_OK ||		Tcl_GetDoubleFromObj(interp, valueObj,				     &value) != TCL_OK ||		Tcl_GetIntFromObj(interp, precisionObj,				  &precision) != TCL_OK ||		Tcl_GetIntFromObj(interp, scaleObj,				  &scale) != TCL_OK) {	      return TCL_ERROR;	    }	    cur->inputBind(Tcl_GetString(variableObj),			   value, precision, scale);	  } else if (len == 2) {	    long value;	    if (Tcl_ListObjIndex(interp, argList[i], 0,				 &variableObj) != TCL_OK ||		Tcl_ListObjIndex(interp, argList[i], 1,				 &valueObj) != TCL_OK) {	      return TCL_ERROR;	    }	    if ( Tcl_GetLongFromObj(interp, valueObj, &value) == TCL_OK ||		 Tcl_GetIntFromObj(interp, valueObj, (int *)&value) == TCL_OK ) {	      cur->inputBind(Tcl_GetString(variableObj), value);	    } else {	      cur->inputBind(Tcl_GetString(variableObj),			     Tcl_GetString(valueObj));	    }	  } else {	    Tcl_WrongNumArgs(interp, 2, objv, "{{variable value ?precision scale?} ...}");	    return TCL_ERROR;	  }	}	break;      }    case SQLRCUR_validateBinds:      {	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	cur->validateBinds();	break;      }    case SQLRCUR_validBind:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewBooleanObj(cur->validBind(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_executeQuery:      {	int result = 0;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	if (!(result = cur->executeQuery())) {	  Tcl_AppendResult(interp,cur->errorMessage(),(char *)NULL);	  return TCL_ERROR;	}	Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result));	break;      }    case SQLRCUR_fetchFromBindCursor:      {	int result = 0;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	if (!(result = cur->fetchFromBindCursor())) {	  Tcl_AppendResult(interp,cur->errorMessage(),(char *)NULL);	  return TCL_ERROR;	}	Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result));	break;      }    case SQLRCUR_getOutputBindString:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewStringObj(cur->getOutputBindString(Tcl_GetString(objv[2])), cur->getOutputBindLength(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindBlob:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewStringObj(cur->getOutputBindBlob(Tcl_GetString(objv[2])), cur->getOutputBindLength(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindClob:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewStringObj(cur->getOutputBindClob(Tcl_GetString(objv[2])), cur->getOutputBindLength(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindInteger:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewLongObj(cur->getOutputBindInteger(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindDouble:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewDoubleObj(cur->getOutputBindDouble(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindLength:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewLongObj(cur->getOutputBindLength(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_getOutputBindCursor:      {	Tcl_Obj *id;	sqlrcursor *newcur = (sqlrcursor *)NULL;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	newcur = cur->getOutputBindCursor(Tcl_GetString(objv[2]));	newcur->copyReferences();	if (newcur != (sqlrcursor *)NULL) {	  id = getCursorID();	  Tcl_CreateObjCommand(interp,			       Tcl_GetString(id),			       sqlrcurObjCmd,			       (ClientData)newcur,			       (Tcl_CmdDeleteProc *)sqlrcurDelete);	  Tcl_SetObjResult(interp, id);	} else {	  return TCL_ERROR;	}	break;      }    case SQLRCUR_openCachedResultSet:      {	Tcl_Obj *result;	if (objc != 3) {	  Tcl_WrongNumArgs(interp, 2, objv, "variable");	  return TCL_ERROR;	}	result = Tcl_NewBooleanObj(cur->openCachedResultSet(Tcl_GetString(objv[2])));	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_colCount:      {	Tcl_Obj *result;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	result = Tcl_NewIntObj(cur->colCount());	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_rowCount:      {	Tcl_Obj *result;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	result = Tcl_NewIntObj(cur->rowCount());	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_totalRows:      {	Tcl_Obj *result;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	result = Tcl_NewIntObj(cur->totalRows());	Tcl_SetObjResult(interp, result);	break;      }    case SQLRCUR_affectedRows:      {	Tcl_Obj *result;	if (objc > 2) {	  Tcl_WrongNumArgs(interp, 2, objv, NULL);	  return TCL_ERROR;	}	result = Tcl_NewIntObj(cur->affectedRows());

⌨️ 快捷键说明

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