From 7b4cec575747f22fabba57886f7f968952c93e08 Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Fri, 11 Jan 2019 17:07:54 +0300 Subject: [PATCH 1/3] MCOL-1829 Subquery with limited order by could potentially return onordered set. There were two code mistakes: Eq::operator() always returned true for any pair and Hasher::operator() always returned 0 as a key. --- dbcon/joblist/limitedorderby.cpp | 20 ++++++-------------- utils/windowfunction/idborderby.cpp | 7 +++++-- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/dbcon/joblist/limitedorderby.cpp b/dbcon/joblist/limitedorderby.cpp index 4c19440ee..c78ed43fa 100644 --- a/dbcon/joblist/limitedorderby.cpp +++ b/dbcon/joblist/limitedorderby.cpp @@ -108,14 +108,12 @@ void LimitedOrderBy::processRow(const rowgroup::Row& row) if (fOrderByQueue.size() < fStart+fCount) { copyRow(row, &fRow0); - //memcpy(fRow0.getData(), row.getData(), row.getSize()); OrderByRow newRow(fRow0, fRule); fOrderByQueue.push(newRow); // add to the distinct map if (fDistinct) fDistinctMap->insert(fRow0.getPointer()); - //fDistinctMap->insert(make_pair((fRow0.getData()+2), fRow0.getData())); fRowGroup.incRowCount(); fRow0.nextRow(); @@ -142,21 +140,15 @@ void LimitedOrderBy::processRow(const rowgroup::Row& row) { OrderByRow swapRow = fOrderByQueue.top(); row1.setData(swapRow.fData); - fOrderByQueue.pop(); - if (!fDistinct) + copyRow(row, &row1); + + if (fDistinct) { - copyRow(row, &row1); - //memcpy(swapRow.fData, row.getData(), row.getSize()); - } - else - { - fDistinctMap->erase(row.getPointer()); - copyRow(row, &row1); + fDistinctMap->erase(fOrderByQueue.top().fData); fDistinctMap->insert(row1.getPointer()); - //fDistinctMap->erase(fDistinctMap->find(row.getData() + 2)); - //memcpy(swapRow.fData, row.getData(), row.getSize()); - //fDistinctMap->insert(make_pair((swapRow.fData+2), swapRow.fData)); } + + fOrderByQueue.pop(); fOrderByQueue.push(swapRow); } } diff --git a/utils/windowfunction/idborderby.cpp b/utils/windowfunction/idborderby.cpp index 1375af542..7e6d6acd5 100644 --- a/utils/windowfunction/idborderby.cpp +++ b/utils/windowfunction/idborderby.cpp @@ -443,7 +443,8 @@ uint64_t IdbOrderBy::Hasher::operator()(const Row::Pointer &p) const { Row &row = ts->row1; row.setPointer(p); - uint64_t ret = row.hash(colCount); + // MCOL-1829 Row::h uses colcount as an array idx down a callstack. + uint64_t ret = row.hash(); //cout << "hash(): returning " << ret << " for row: " << row.toString() << endl; return ret; } @@ -453,7 +454,9 @@ bool IdbOrderBy::Eq::operator()(const Row::Pointer &d1, const Row::Pointer &d2) Row &r1 = ts->row1, &r2 = ts->row2; r1.setPointer(d1); r2.setPointer(d2); - bool ret = r1.equals(r2, colCount); + // MCOL-1829 Row::equals uses 2nd argument as container size boundary + // so it must be column count - 1. + bool ret = r1.equals(r2, colCount - 1); //cout << "equals(): returning " << (int) ret << " for r1: " << r1.toString() << " r2: " << r2.toString() // << endl; From 771988dd1f95c4ebd2562d5b5847e9aefb49d309 Mon Sep 17 00:00:00 2001 From: Roman Nozdrin Date: Tue, 15 Jan 2019 10:13:04 +0300 Subject: [PATCH 2/3] MCOL-2052 IS.columnstore_files now prints correct number of records for any relation out. Return statement called in generate_result() returns too early. --- dbcon/mysql/is_columnstore_files.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbcon/mysql/is_columnstore_files.cpp b/dbcon/mysql/is_columnstore_files.cpp index 1a5fdad1e..b64c64151 100644 --- a/dbcon/mysql/is_columnstore_files.cpp +++ b/dbcon/mysql/is_columnstore_files.cpp @@ -110,7 +110,7 @@ static int generate_result(BRM::OID_t oid, BRM::DBRM *emp, TABLE *table, THD *th if (iter->blockOffset > 0) { iter++; - return 0; + continue; } try From 009f70b4d4466b6a5e192747dd217fd06fd78c05 Mon Sep 17 00:00:00 2001 From: Ben Thompson Date: Wed, 16 Jan 2019 12:58:18 -0600 Subject: [PATCH 3/3] MCOL-2009 MCOL-1702 : join() inside of joblist::abort caused threads to be blocked on an abort --- dbcon/joblist/joblist.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/dbcon/joblist/joblist.cpp b/dbcon/joblist/joblist.cpp index 934dae71d..e5eb86b26 100644 --- a/dbcon/joblist/joblist.cpp +++ b/dbcon/joblist/joblist.cpp @@ -1067,10 +1067,6 @@ void JobList::abort() fQuery[i]->abort(); for (i = 0; i < fProject.size(); i++) fProject[i]->abort(); - for (i = 0; i < fQuery.size(); i++) - fQuery[i]->join(); - for (i = 0; i < fProject.size(); i++) - fProject[i]->join(); } }