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

📄 serverdb.c

📁 TUXEDO中间件重新改造和包装.在移动BOSS中正式运用.
💻 C
📖 第 1 页 / 共 3 页
字号:
    return(DBTYPE_UNKNOWN);  }}/********************************************************************//* 函数: LoadEntryRcItem                                            *//* 原型: int LoadEntryRc(char* pszItemID, char* pszItemValue);      *//* 参数: pszItemID   -- 项目标志号                                  *//*       pszItemValue-- 项目取值                                    *//* 返回: 0 = 提取成功                                               *//*       -9 = 提取出错                                              *//********************************************************************/int LoadEntryRcItem(char* pszItemID, char* pszItemValue){  FILE* fileRc;  char  pszLine[256];  char  *p,*q;  int   nFoundFlag;    if((fileRc=fopen(pszRcPath,"rt"))==NULL)    return(-9);  /* 读取配置 */  *pszItemValue='\0';  nFoundFlag=0;  while(fgets(pszLine,255,fileRc)!=NULL)  {    p=(char*)strchr(pszLine,'=');    if(p==NULL)      continue;    *(p++)='\0';    q=(char*)strchr(p,'\n');    if(q!=NULL)      *q='\0';    if(strcmp(pszLine,pszItemID)==0)    {      strcpy(pszItemValue,p);      nFoundFlag=1;      break;    }  }  fclose(fileRc);  return( (nFoundFlag==1)? 0 : -9);}/******************************************************//* 函数:ConnectSQLServer                             *//* 用途:注册到数据库服务器                           *//* 原型:sword ConnectSQLServer(text* username,       *//*                              text* password,       *//*                              text* servername);    *//* 参数:username -- 注册名                           *//*       password -- 密码                             *//*       servername--数据库连接名                     *//* 返回:0 -- 成功; -1 -- 失败。                     *//* 附注:                                             *//******************************************************/sword ConnectSQLServer(text *pszUsername, text* pszPassword, text* pszServerName){  if(olog(&lda, (ub1 *)hda, pszUsername, -1, pszPassword, -1,     (text *)pszServerName, -1, (ub4)OCI_LM_DEF))    return -1;  else    return 0;}/******************************************************//* 函数:describe_define                              *//* 用途:定义SELECT字段                               *//* 原型:sword describe_define(Cda_Def *cda);         *//* 参数:                                             *//* 返回:字段数目,-1表示出错                          *//******************************************************/sword describe_define(Cda_Def *cda){  sword col, deflen, deftyp;  static ub1 *defptr;  int i;  /* Describe the select-list items. */  for (col = 0; col < MAX_SELECT_LIST_SIZE; col++)  {    desc[col].buflen = MAX_ITEM_BUFFER_SIZE;    if (odescr(cda, col + 1, &desc[col].dbsize,               &desc[col].dbtype, &desc[col].buf[0],               &desc[col].buflen, &desc[col].dsize,               &desc[col].precision, &desc[col].scale,               &desc[col].nullok))    {      /* Break on end of select list. */      if (cda->rc == VAR_NOT_IN_LIST)        break;      else      {        oci_error(cda);        return -1;      }    }    /* adjust sizes and types for display */    /* Return string simply               */    /* switch (desc[col].dbtype) */    /* { */    /* case NUMBER_TYPE: */    /*   desc[col].dbsize = numwidth; */    /*    Handle NUMBER with scale as float. */    /*   if (desc[col].scale != 0) */    /*   { */    /*     defptr = (ub1 *) &def[col].flt_buf; */    /*     deflen = (sword) sizeof(float); */    /*     deftyp = FLOAT_TYPE; */    /*     desc[col].dbtype = FLOAT_TYPE; */    /*   } */    /*   else */    /*   { */    /*     defptr = (ub1 *) &def[col].int_buf; */    /*     deflen = (sword) sizeof(sword); */    /*     deftyp = INT_TYPE; */    /*     desc[col].dbtype = INT_TYPE; */    /*   } */    /*   break; */    /* default: */    /*   if(desc[col].dbtype == DATE_TYPE) */    /*     desc[col].dbsize = 9; */    /*   if (desc[col].dbtype == ROWID_TYPE) */    /*     desc[col].dbsize = 18; */    /*   defptr = def[col].buf; */    /*   deflen = desc[col].dbsize > MAX_ITEM_BUFFER_SIZE ? */    /*   MAX_ITEM_BUFFER_SIZE : desc[col].dbsize + 1; */    /*   deftyp = STRING_TYPE; */    /*   break; */    /* } */                                                             switch (desc[col].dbtype)    {    case NUMBER_TYPE:      desc[col].dbsize = numwidth;      /* Handle NUMBER with scale as float. */      if (desc[col].scale != 0)      {        /*defptr = (ub1 *) &def[col].flt_buf;*/        deflen = 40;        deftyp = STRING_TYPE;        desc[col].dbtype = FLOAT_TYPE;      }      else      {        /*defptr = (ub1 *) &def[col].int_buf;*/        deflen = 40;         deftyp = STRING_TYPE;        desc[col].dbtype = INT_TYPE;      }      break;    default:      if(desc[col].dbtype == DATE_TYPE)        desc[col].dbsize = 9;      if (desc[col].dbtype == ROWID_TYPE)        desc[col].dbsize = 18;      defptr = def[col].buf;      deflen = desc[col].dbsize > MAX_ITEM_BUFFER_SIZE ?      MAX_ITEM_BUFFER_SIZE : desc[col].dbsize + 1;      deftyp = STRING_TYPE;      break;    }    if(odefin(cda, col + 1,       def[col].buf, deflen, STRING_TYPE, /*deftyp,*/       -1, &def[col].indp, (text *) 0, -1, -1,       &def[col].col_retlen,       &def[col].col_retcode))    {      oci_error(cda);      return -1;    }  }  /* 去掉字段名称后多余的空白 */  for(i=0;i<col;i++)    TrimRight((char*)desc[i].buf);  return col;}/******************************************************//* 函数:do_prevbinds                                 *//* 用途:检查外部变量                                 *//* 原型:sword do_prevbinds(text* stmt_buf);          *//* 参数:                                             *//* 返回:参与绑定的变量个数                           *//* 附注:                                             *//******************************************************/sword do_prevbinds(text* stmt_buf){  text  sqlres[16192];  text  tname[MAX_SQL_IDENTIFIER+1];  sword in_literal, n;  text *cp, *ph;  sword i, found;  text *pres,*pval,*pname;  myuserlog("Before changing:",(char*)stmt_buf);  pres=sqlres;    for(nOCIOutNum=0,in_literal=FALSE,cp=stmt_buf;*cp&&nOCIOutNum<MAX_OUT_LIST_SIZE;cp++)  {    if(*cp=='\'')            /* 进入字符串 */      in_literal=~in_literal;    pname=tname;    if(*cp==':'&&!in_literal) /* 遇到一个外部变量 */    {      *(pname++)=*cp;      *(pres++)=*cp;      for(ph=++cp,n=0;*cp&&(isalnum(*cp)||*cp=='_');cp++,n++)      {        *(pres++)=*cp;        *(pname++)=*cp;      }      *pname='\0';      /* 保存一个输出变量名称 */       found=0;      for(i=0;i<nOCIOutNum;i++)      {        if(striequal((char*)tname,(char*)szOutNames[i]))        {           found=1;          break;        }      }      if(!found)      {        strcpy((char*)szOutNames[nOCIOutNum],(char*)tname);        strcpy((char*)szOutValues[nOCIOutNum],"");        ++nOCIOutNum;        i=nOCIOutNum-1;      }      /* 找到一个变量,看后续有无初始值 */      for(;isspace(*cp)&&*cp;cp++)  /* 跳过空白 */        ;      if(strncmp((char*)cp,":=",2)==0) /* 找到初始值 */      {        cp+=2;        /* 提取初始值 */        for(++cp;isspace(*cp)&&*cp;cp++) /* 跳过空白 */          ;        /* 提取值,两种可能:字符串和数值 */        pval=&(szOutValues[i][0]);        if(*cp=='\'') /* 字符串 */        {          for(++cp;(*cp!='\'')&&*cp;cp++)            *(pval++)=*cp;          ++cp;*pval='\0';        }        else if(isdigit(*cp))        {          for(;(isdigit(*cp)||(*cp=='.'))&&*cp;cp++)            *(pval++)=*cp;          *pval='\0';        }        else        {          nOCIErrNo=ERROR_SQL_FORMAT;          return(-1);        }      }      else --cp;          }    else      *(pres++)=*cp;  }  *pres='\0';  if(nOCIOutNum>0)    sprintf((char*)stmt_buf,"begin\n %s; end;",sqlres);  else    strcpy((char*)stmt_buf,(char*)sqlres);  myuserlog("After Changing :",(char*)stmt_buf);  for(i=0;i<nOCIOutNum;i++)  {    userlog("Variable %d: %s\n",i,szOutNames[i]);  }  return nOCIOutNum;}/******************************************************//* 函数:do_postbinds                                 *//* 用途:绑定变量                                     *//* 原型:sword do_binds(Cda_Def *cda);                *//* 参数:                                             *//* 返回:参与绑定的变量个数                           *//* 附注:                                             *//******************************************************/sword do_postbinds(Cda_Def *cda){  sword i;  for(i=0;i<nOCIOutNum;i++)  {    if(obndrv(cda,(text*)&(szOutNames[i][0]),-1,(ub1 *)&szOutValues[i][0],-1,        VARCHAR2_TYPE,-1,(sb2 *)&sbNullFlag[i],(text *)0,-1,-1))    {      oci_error(cda);      return -1;    }  }  return 0;}/******************************************************//* 函数:oci_error                                    *//* 用途:报告OCI操作错误                              *//* 原型:void oci_error(Cda_Def *cda);                *//* 参数:                                             *//* 返回:无                                           *//******************************************************/void oci_error(Cda_Def *cda){  text msg[512];  sword n;  nOCIErrNo=cda->rc;  n = oerhms(&lda,cda->rc,msg,(sword)sizeof(msg));  sprintf((char*)szOCIErrMsg,"%s:%.*s", oci_func_tab[cda->fc],n, msg);}int  striequal(char* s1, char* s2){  char *p,*q;  char c1,c2;  for(p=s1,q=s2;*p&&*q;++p,++q)  {    if(*p!=*q)    {      c1=*p;c2=*q;      if((c1>='a')&&(c1<='z')) c1-='a'-'A';      if((c2>='a')&&(c2<='z')) c2-='a'-'A';      if(c1!=c2) return(0);    }  }  return( (*q==*p)? 1:0);}/*int  isspace(char c){  return(((c==' ')||(c=='\t')||(c=='\n'))?1:0);}*/void TrimRight(char* p){  char *q=p;  while(*p==' ')p++;  while(*p)p++;  *p='\0';  while((p>q)&&(*(p-1)==' ')) --p;  *(p+1)='\0';}void SetStrByte4(char* pbyte, int n){  int i;  for(i=3;i>=0;i--)  {    pbyte[i]=(unsigned char)(n%256);    n=n/256;  }}int GetStrByte4(char* pbyte){  int i;  int n=0;  for(i=0;i<4;i++)    n=n*256+(unsigned char)pbyte[i];  return n;}void SetStrByte2(char* pbyte, int n){  pbyte[0]=(unsigned char)(n/256);  pbyte[1]=(unsigned char)(n%256);}int GetStrByte2(char* pbyte){  return((unsigned char)pbyte[0]*256+(unsigned char)pbyte[1]);}void DebugPrint(char * buf, long len){  char tmp[8192];  char *p;  size_t tlen=0,slen;  int i,j;  return;  tlen+=sprintf(tmp+tlen,"\n--------------Send buffer ----------------\n\n");  for(i=0;i<len;i++)    tlen+=sprintf(tmp+tlen,"[%0.2X]",(unsigned char)*(buf+i));  tlen+=sprintf(tmp+tlen,"\n------------------------------------------\n");  for(i=0;i<len;i++)  tlen+=sprintf(tmp+tlen,"[%c]",(unsigned char)*(buf+i));  tlen+=sprintf(tmp+tlen,"\n------------------------------------------\n");  userlog(tmp);}void DebugPrintHeader(PacketQR* hdr){  return;  userlog("Packet Header ==>\nPacketID=%4c\nPacketLen=%d\nUserID=%4c\n"         "TranID=%d\nNextFlag=%c\nRowLimits=%d\nSQLType=%c\nDataPart=%6c\n",         hdr->PacketID,GetStrByte4(hdr->PacketLen),         hdr->UserID,GetStrByte4(hdr->TranID),         hdr->NextFlag,GetStrByte4(hdr->RowLimits),         hdr->SQLType,hdr->DataPart);} void myuserlog(char *hdr, char *str){  char buf[81];  char *p=str;  int  len;    userlog("%s\n",hdr);  while(strlen(p)>80)  {    strncpy(buf,p,80);    buf[80]='\0';    userlog("%s\n",buf);    p+=80;  }  userlog("%s\n",p);}      void DoCommit(Lda_Def *lda){  if(tpgetlev()==0)  {    ocom(lda);  }}void DoRollback(Lda_Def *lda){  if(tpgetlev()==0)  {    orol(lda);  }}

⌨️ 快捷键说明

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