From: David M. <ig...@us...> - 2006-01-18 09:13:36
|
Update of /cvsroot/myoledb/myoledb3 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15166 Modified Files: rowset.cpp rowset.h Log Message: Make m_SlotRef a dynamic variable, dependent for its size on the total number of possible rows Change from using the ACTIVE_ROWS_LIMIT constant to using the m_dwTotalRows member of the query Index: rowset.h =================================================================== RCS file: /cvsroot/myoledb/myoledb3/rowset.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- rowset.h 20 Sep 2005 14:44:48 -0000 1.1.1.1 +++ rowset.h 18 Jan 2006 09:13:27 -0000 1.2 @@ -244,7 +244,7 @@ //@cmember ULONG m_FirstFreeSlot; //@cmember - SLOTREF m_SlotRef[ACTIVE_ROWS_LIMIT]; + SLOTREF* m_SlotRef; //@cmember BOOL m_LastDirection; Index: rowset.cpp =================================================================== RCS file: /cvsroot/myoledb/myoledb3/rowset.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- rowset.cpp 20 Sep 2005 14:44:46 -0000 1.1.1.1 +++ rowset.cpp 18 Jan 2006 09:13:27 -0000 1.2 @@ -143,6 +143,13 @@ if (m_pCreator != NULL) m_pCreator->Release(); + // Delete m_SlotRef + if (m_SlotRef) + { + delete [] m_SlotRef; + m_SlotRef = NULL; + } + // Decrement global object count. OBJECT_DESTRUCTED(); @@ -185,6 +192,11 @@ // Establish pointer to CData m_pData = pData; + // allocate m_SlotRef object + m_SlotRef = new SLOTREF[pData->m_dwTotalRows]; + if (m_SlotRef == NULL) + return FALSE; + // allocate utility object that manages our properties if( m_pSession ) m_pUtilProp = new CUtilProp( m_pSession->m_pCDataSource, m_pSession->m_pUtilProp ); @@ -426,16 +438,16 @@ return E_FAIL; // Here we are allocating buffer for our rowset. - // It will will be static and its size will be ACTIVE_ROWS_LIMIT - if (FAILED( GetNextSlots(m_pIBuffer, ACTIVE_ROWS_LIMIT + 1, &m_irowMin) )) + // It will will be static and its size will be the number of rows in the query + if (FAILED( GetNextSlots(m_pIBuffer, m_pData->m_dwTotalRows + 1, &m_irowMin) )) return E_FAIL; - for ( ULONG i = 0; i < ACTIVE_ROWS_LIMIT; i++ ) + for ( ULONG i = 0; i < m_pData->m_dwTotalRows; i++ ) { m_SlotRef[ i ].hRow = m_irowMin + i + 1; m_SlotRef[ i ].NextSlot = i + 1; } - m_SlotRef[ACTIVE_ROWS_LIMIT - 1].NextSlot = 0xFFFFFFFF; + m_SlotRef[m_pData->m_dwTotalRows - 1].NextSlot = 0xFFFFFFFF; m_FirstFreeSlot = 0; return S_OK; @@ -1081,7 +1093,7 @@ ULONG CRowset::GetSlotNumber( HROW hRow) { TRACE( "CRowset::GetSlotNumber" ); - for ( ULONG i = 0; i < ACTIVE_ROWS_LIMIT; i++ ) + for ( ULONG i = 0; i < m_pData->m_dwTotalRows; i++ ) if ( hRow == m_SlotRef[ i ].hRow ) return i; return INVALID_SLOT_NUMBER; |