=== modified file 'storage/ndb/src/ndbapi/NdbScanOperation.cpp' --- storage/ndb/src/ndbapi/NdbScanOperation.cpp 2009-02-04 13:08:05 +0000 +++ storage/ndb/src/ndbapi/NdbScanOperation.cpp 2009-02-04 14:13:57 +0000 @@ -788,6 +788,8 @@ NdbIndexScanOperation::scanIndexImpl(con return -1; } + result_record->copyMask(m_read_mask, result_mask); + if (scan_flags & NdbScanOperation::SF_OrderBy) { /** @@ -798,15 +800,21 @@ NdbIndexScanOperation::scanIndexImpl(con */ for (i = 0; i < key_record->key_index_length; i++) { - const NdbRecord::Attr *key_col = - &key_record->columns[key_record->key_indexes[i]]; - if (key_col->attrId >= result_record->m_attrId_indexes_length || - result_record->m_attrId_indexes[key_col->attrId] < 0) + Uint32 attrId = key_record->columns[key_record->key_indexes[i]].attrId; + if (attrId >= result_record->m_attrId_indexes_length || + result_record->m_attrId_indexes[attrId] < 0) { setErrorCodeAbort(4292); return -1; } + + if (!BitmaskImpl::get((NDB_MAX_ATTRIBUTES_IN_TABLE+31)>>5, + m_read_mask, attrId)) + { + break; + } } + m_sort_columns = i; } if (!(key_record->flags & NdbRecord::RecIsIndex)) @@ -833,8 +841,6 @@ NdbIndexScanOperation::scanIndexImpl(con if (res==-1) return -1; - result_record->copyMask(m_read_mask, result_mask); - /* Fix theStatus as set in processIndexScanDefs(). */ theStatus= NdbOperation::UseNdbRecord; @@ -3067,8 +3073,6 @@ NdbIndexScanOperation::processIndexScanD } if (order_by) { m_ordered = true; - Uint32 cnt = m_accessTable->getNoOfColumns() - 1; - m_sort_columns = cnt; // -1 for NDB$NODE m_current_api_receiver = m_sent_receivers_count; m_api_receivers_count = m_sent_receivers_count; } @@ -3107,7 +3111,7 @@ NdbIndexScanOperation::compare_ndbrecord return (a_range_no < b_range_no ? -1 : 1); } - for (i= 0; ikey_index_length; i++) + for (i= 0; icolumns[key_record->key_indexes[i]];