📄 tocidirpath.cpp
字号:
//allocate buff for input records m_uBufSize = m_uMaxRows*m_uRowSize+INDATA_SAVE_GUARD; m_inData = (void *)malloc(m_uBufSize); if(!m_inData) throw TOCIException("",ERR_GENERAL,"TOCIDirPath::prepare: malloc for indata FATAL"); memset(m_inData,0,m_uBufSize); m_iErrorNo = OCIDirPathColArrayReset(m_hDirPathCA,m_hError); checkError(); m_iErrorNo = OCIDirPathStreamReset(m_hDirPathStr,m_hError); checkError(); m_bPrepared = TRUE;}void TOCIDirPath::append(){ if(m_iRowOff>0) for(int i=0;i<m_uMaxCols;i++) if(!m_FieldAssigned[i]) setFieldNull(i); int m_iMaxRows = m_uMaxRows; if(m_iRowOff>=m_iMaxRows-1) { load(m_iRowOff); m_iRowOff = 0; } m_iRowOff++; for(int i=0;i<m_uMaxCols;i++) m_FieldAssigned[i] = FALSE;}int TOCIDirPath::load(unsigned uRows){ int iLoadCnt,iSaveOff; bool continue_flag=true; iSaveOff = 0; while (continue_flag){ m_iErrorNo = OCIDirPathColArrayToStream(m_hDirPathCA,m_hDirPathCtx,m_hDirPathStr,m_hError,m_iRowOff+1,iSaveOff+1); if ( m_iErrorNo == OCI_CONTINUE){ continue_flag = true; } else { checkError(); continue_flag = false; }; #ifdef _DEBUG_ m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_COLUMN_ARRAY, (dvoid *)&iLoadCnt,(ub4 *)0, OCI_ATTR_ROW_COUNT,m_hError); cout<<iLoadCnt<<" rows records have converted!"<<endl; m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_COLUMN_ARRAY, (dvoid *)&iLoadCnt,(ub4 *)0, OCI_ATTR_COL_COUNT,m_hError); cout<<iLoadCnt<<" cols records have converted!"<<endl;#endif /*_DEBUG */ m_iErrorNo =OCIDirPathLoadStream(m_hDirPathCtx,m_hDirPathStr,m_hError); checkError(); m_iErrorNo = OCIAttrGet((dvoid *)m_hDirPathStr,OCI_HTYPE_DIRPATH_STREAM, (dvoid *)&iLoadCnt,(ub4 *)0, OCI_ATTR_ROW_COUNT,m_hError); iSaveOff += iLoadCnt; m_lSaveCount += iLoadCnt; checkError(); //cout<<iLoadCnt<<" records have loaded!"<<endl; //save! m_iErrorNo = OCIDirPathDataSave(m_hDirPathCtx,m_hError,(ub4)OCI_DIRPATH_DATASAVE_SAVEONLY); checkError(); m_iErrorNo = OCIDirPathStreamReset(m_hDirPathStr,m_hError); checkError(); } m_iRowOff = 0; m_uBufCurPos = 0; m_iErrorNo = OCIDirPathColArrayReset(m_hDirPathCA,m_hError); checkError(); return 0;//add return load rows}void TOCIDirPath::save(){ if(m_iRowOff>0) load(m_iRowOff); //m_iErrorNo = OCIDirPathDataSave(m_hDirPathCtx,m_hError,(ub4)OCI_DIRPATH_DATASAVE_SAVEONLY); //checkError();}void TOCIDirPath::abort(){ OCIDirPathAbort(m_hDirPathCtx,m_hError);} void TOCIDirPath::finish(){ OCIDirPathFinish(m_hDirPathCtx,m_hError); checkError(); m_bPrepared = FALSE; } void TOCIDirPath::setField(char *strFieldName,char *fieldValue){ unsigned i = 0; for(;i<m_uMaxCols;i++) if(!strcasecmp(strFieldName,m_Query->field(i).name)) break; if(i==m_uMaxCols) throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName); setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,int fieldValue){ unsigned i = 0; for(;i<m_uMaxCols;i++) if(!strcasecmp(strFieldName,m_Query->field(i).name)) break; if(i==m_uMaxCols) throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName); setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,double fieldValue){ unsigned i = 0; for(;i<m_uMaxCols;i++) if(!strcasecmp(strFieldName,m_Query->field(i).name)) break; if(i==m_uMaxCols) throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName); setField(i,fieldValue);}void TOCIDirPath::setField(char *strFieldName,long fieldValue){ unsigned i = 0; for(;i<m_uMaxCols;i++) if(!strcasecmp(strFieldName,m_Query->field(i).name)) break; if(i==m_uMaxCols) throw (" ", ERR_FIELD_NOT_EXISTS, strFieldName); setField(i,fieldValue);}void TOCIDirPath::setField(unsigned uIndex,char *fieldValue){ ub1 cflg; unsigned clen; if(uIndex<0||uIndex>=m_uMaxCols) throw TOCIException(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField"); clen = strlen(fieldValue); if(clen>0) cflg = OCI_DIRPATH_COL_COMPLETE; else cflg = OCI_DIRPATH_COL_NULL; /*if ( m_Query->field(uIndex).type == DATE_TYPE){ OCIDate date; clen = 14; date = StrToOCIDate(fieldValue); memcpy((char *)m_inData+m_uBufCurPos,(unsigned char *)&date,clen); } else*/ memcpy((char *)m_inData+m_uBufCurPos,fieldValue,clen); m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError, m_iRowOff,uIndex, (unsigned char *)m_inData+m_uBufCurPos,(ub4)clen,cflg); checkError(); m_uBufCurPos += clen; m_FieldAssigned[uIndex] = TRUE; }void TOCIDirPath::setField(unsigned uIndex,int fieldValue){ if(uIndex<0||uIndex>=m_uMaxCols) throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField"); ub1 cflg; cflg = OCI_DIRPATH_COL_COMPLETE; char temp[12]; unsigned ulen; sprintf(temp,"%d",fieldValue); ulen = strlen(temp); memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)temp,ulen); m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError, m_iRowOff,uIndex, (unsigned char *)m_inData+m_uBufCurPos,(ub4)ulen,cflg); checkError(); m_uBufCurPos += ulen; m_FieldAssigned[uIndex] = TRUE; }void TOCIDirPath::setField(unsigned uIndex,double fieldValue){ if(uIndex<0||uIndex>=m_uMaxCols) throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField"); ub1 cflg; cflg = OCI_DIRPATH_COL_COMPLETE; memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)&fieldValue,sizeof(double)); m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError, m_iRowOff,uIndex, (unsigned char *)m_inData+m_uBufCurPos,(ub4)sizeof(double),cflg); checkError(); m_uBufCurPos += sizeof(double); m_FieldAssigned[uIndex] = TRUE; }void TOCIDirPath::setField(unsigned uIndex,long fieldValue){ if(uIndex<0||uIndex>=m_uMaxCols) throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField"); ub1 cflg; cflg = OCI_DIRPATH_COL_COMPLETE; char temp[12]; unsigned ulen; sprintf(temp,"%ld",fieldValue); ulen = strlen(temp); memcpy((void *)((char *)m_inData+m_uBufCurPos),(void *)temp,ulen); m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError, m_iRowOff,uIndex, (unsigned char *)m_inData+m_uBufCurPos,(ub4)ulen,cflg); checkError(); m_uBufCurPos += ulen; m_FieldAssigned[uIndex] = TRUE; }void TOCIDirPath::setFieldNull(unsigned uIndex){ if(uIndex<0||uIndex>=m_uMaxCols) throw(" ",ERR_INDEX_OUT_OF_BOUND,"TOCIDirPath::setField"); ub1 cflg; cflg = OCI_DIRPATH_COL_NULL; m_iErrorNo = OCIDirPathColArrayEntrySet(m_hDirPathCA,m_hError, m_iRowOff,uIndex, (unsigned char *)NULL,(ub4)sizeof(long),cflg); checkError(); }void TOCIDirPath::checkError(){ switch (m_iErrorNo) { case OCI_SUCCESS: break; case OCI_SUCCESS_WITH_INFO: (void) printf( "Error - OCI_SUCCESS_WITH_INFO\n"); errprint(m_hError, OCI_HTYPE_ERROR, &m_iErrorNo); break; case OCI_NEED_DATA: (void) printf( "Error - OCI_NEED_DATA\n"); break; case OCI_NO_DATA: (void) printf( "Error - OCI_NODATA\n"); break; case OCI_ERROR: errprint(m_hError, OCI_HTYPE_ERROR, &m_iErrorNo); break; case OCI_INVALID_HANDLE: (void) printf( "Error - OCI_INVALID_HANDLE\n"); break; case OCI_STILL_EXECUTING: (void) printf( "Error - OCI_STILL_EXECUTE\n"); break; case OCI_CONTINUE: (void) printf( "Error - OCI_CONTINUE\n"); break; default: break; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -