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;
}
示例#3
0
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);
	}