void ElementAttList::Print() { // Selection du séparateur std::string agregat = " "; if (mTypeAgregat == ElementAttList::A_PIPE) { agregat = " | "; } else // COMMA { agregat = ", "; } // Affichage des éléments. std::cout << "("; for(std::list <ElementAttBase *>::iterator it = mElementAttBase.begin(); it != mElementAttBase.end(); it++) { if(it != mElementAttBase.begin()) //Il ne faut pas ajouter un séparateur à la fin de la chaine { std::cout << agregat; } (*it)->Print(); } std::cout << ")" + GetCardinality(); } //----- fin de ElementAttList::Print()
std::string ElementAttList::GetRe() { std::string agregat; if (mTypeAgregat == ElementAttList::A_PIPE) { agregat = "|"; } else { agregat = ""; } std::string re("("); for(std::list <ElementAttBase *>::iterator it=mElementAttBase.begin();it!=mElementAttBase.end();it++) { re += (*it)->GetRe(); if(it != --mElementAttBase.end()) re += agregat; } re += ")"; re += GetCardinality(); return re; }
HRESULT CSRTablesInfo::Execute(LONG* pcRowsAffected, ULONG cRestrictions, const VARIANT *rgRestrictions) { ATLTRACE2(atlTraceDBProvider, 2, "CSRTablesInfo::Execute\n"); ClearError(); int hConn = -1; HRESULT hr = CCUBRIDSession::GetSessionPtr(this)->GetConnectionHandle(&hConn); if(FAILED(hr)) return hr; char table_name[256]; table_name[0] = 0; int table_type = -1; GetRestrictions(cRestrictions, rgRestrictions, table_name, &table_type); { T_CCI_ERROR err_buf; int hReq = cci_schema_info(hConn, CCI_SCH_CLASS, (table_name[0]?table_name:NULL), NULL, CCI_CLASS_NAME_PATTERN_MATCH, &err_buf); if(hReq<0) { ATLTRACE2("cci_schema_info fail\n"); return E_FAIL; } int res = cci_cursor(hReq, 1, CCI_CURSOR_FIRST, &err_buf); if(res==CCI_ER_NO_MORE_DATA) goto done; if(res<0) goto error; while(1) { CTablesInfoRow tirData; hr = FetchData(hReq, tirData, table_type); if(FAILED(hr)) { cci_close_req_handle(hReq); return hr; } HRESULT hrCard = GetCardinality(hConn, tirData.m_szTableName, &tirData.m_ulCardinality); if(FAILED(hrCard)) { cci_close_req_handle(hReq); return hrCard; }; if(hr==S_OK) // S_FALSE면 추가하지 않음 { _ATLTRY { // TABLE_TYPE, TABLE_NAME 순으로 정렬해야 한다. size_t nPos; for( nPos=0 ; nPos<m_rgRowData.GetCount() ; nPos++ ) { int res = CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH | SORT_STRINGSORT, m_rgRowData[nPos].m_szTableType, -1, tirData.m_szTableType, -1); if(res==CSTR_GREATER_THAN) break; if(res==CSTR_EQUAL) { res = CompareStringW(LOCALE_USER_DEFAULT, NORM_IGNOREKANATYPE | NORM_IGNOREWIDTH | SORT_STRINGSORT, m_rgRowData[nPos].m_szTableName, -1, tirData.m_szTableName, -1); if(res==CSTR_GREATER_THAN) break; } } m_rgRowData.InsertAt(nPos, tirData); } _ATLCATCHALL() { ATLTRACE2("out of memory\n"); cci_close_req_handle(hReq); return E_OUTOFMEMORY; } } res = cci_cursor(hReq, 1, CCI_CURSOR_CURRENT, &err_buf); if(res==CCI_ER_NO_MORE_DATA) goto done; if(res<0) goto error; } error: ATLTRACE2("fail to fetch data\n"); cci_close_req_handle(hReq); return RaiseError(E_FAIL, 1, __uuidof(IDBSchemaRowset), err_buf.err_msg); done: cci_close_req_handle(hReq); }