Skip to content

Commit

Permalink
Add logic to nestedLoppIndex executor. (#3864)
Browse files Browse the repository at this point in the history
* Add logic to nestedLoppIndex executor.

* Add regressionsuite repro
  • Loading branch information
Yiqun Zhang authored and Christopher M. Wolff committed Aug 23, 2016
1 parent 48265ad commit c0ba9ab
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 5 deletions.
3 changes: 3 additions & 0 deletions src/ee/executors/nestloopindexexecutor.cpp
Expand Up @@ -477,6 +477,9 @@ bool NestLoopIndexExecutor::p_execute(const NValueArray &params)
index,
&indexCursor,
num_of_searchkeys)) {
if (inner_tuple.isPendingDelete()) {
continue;
}
VOLT_TRACE("inner_tuple:%s",
inner_tuple.debug(inner_table->name()).c_str());
pmp.countdownProgress();
Expand Down
9 changes: 4 additions & 5 deletions src/ee/storage/persistenttable.cpp
Expand Up @@ -812,13 +812,12 @@ void PersistentTable::updateTupleWithSpecificIndexes(TableTuple &targetTupleToUp
// then hide the tuple from the scan temporarily.
// (Cannot do in reversed order because the pending delete flag will also be copied)
insertTupleIntoDeltaTable(targetTupleToUpdate, fallible);
BOOST_FOREACH (auto viewHandler, m_viewHandlers) {
viewHandler->handleTupleDelete(this, fallible);
}

// This is for single table view.
{
SetAndRestorePendingDeleteFlag setPending(targetTupleToUpdate);
BOOST_FOREACH (auto viewHandler, m_viewHandlers) {
viewHandler->handleTupleDelete(this, fallible);
}
// This is for single table view.
for (int i = 0; i < m_views.size(); i++) {
m_views[i]->processTupleDelete(targetTupleToUpdate, fallible);
}
Expand Down
Expand Up @@ -1671,6 +1671,75 @@ public void testEng11024() throws Exception {
assertEquals(1, vt.asScalarLong());
}

public void testUpdateAndMinMax() throws Exception {
Client client = getClient();

// CREATE TABLE P2_ENG_11024 (
// ID INTEGER NOT NULL,
// VCHAR VARCHAR(300),
// NUM INTEGER,
// RATIO FLOAT,
// PRIMARY KEY (ID)
// );
// PARTITION TABLE P2_ENG_11024 ON COLUMN ID;
//
// CREATE TABLE P1_ENG_11024 (
// ID INTEGER NOT NULL,
// VCHAR VARCHAR(300),
// NUM INTEGER,
// RATIO FLOAT,
// PRIMARY KEY (ID)
// );
//
// CREATE VIEW V16_ENG_11042 (ID, COUNT_STAR, NUM) AS
// SELECT T2.NUM, COUNT(*), MAX(T1.NUM)
// FROM R1_ENG_11024 T1 JOIN R2_ENG_11024 T2 ON T1.ID = T2.ID
// GROUP BY T2.NUM;

client.callProcedure("R1_ENG_11024.Insert", 1, "", 20, 0.0);
client.callProcedure("R2_ENG_11024.Insert", 1, "", 100, 0.0);

client.callProcedure("R1_ENG_11024.Insert", 2, "", 1000, 0.0);
client.callProcedure("R2_ENG_11024.Insert", 2, "", 100, 0.0);

VoltTable vt;
vt = client.callProcedure("@AdHoc",
"select * from V16_ENG_11042").getResults()[0];
assertContentOfTable(new Object[][] {
{100, 2, 1000}}, vt);

vt = client.callProcedure("@AdHoc",
"update R1_ENG_11024 set num = 15 where id = 2;")
.getResults()[0];
assertContentOfTable(new Object[][] {{1}}, vt);
vt = client.callProcedure("@AdHoc",
"select * from V16_ENG_11042").getResults()[0];
assertContentOfTable(new Object[][] {
{100, 2, 20}}, vt);

// A second way of reproducing, slightly different
client.callProcedure("@AdHoc", "DELETE FROM R1_ENG_11024");
client.callProcedure("@AdHoc", "DELETE FROM R2_ENG_11024");

client.callProcedure("@AdHoc", "INSERT INTO R1_ENG_11024 VALUES(-13, 'mmm', -6, -13.0);");
client.callProcedure("@AdHoc", "INSERT INTO R2_ENG_11024 VALUES(-13, 'mmm', -4, -13.0);");

client.callProcedure("@AdHoc", "INSERT INTO R1_ENG_11024 VALUES(-12, 'mmm', -12, -12.0);");
client.callProcedure("@AdHoc", "INSERT INTO R2_ENG_11024 VALUES(-12, 'mmm', -4, -12.0);");

vt = client.callProcedure("@AdHoc",
"select * from V16_ENG_11042").getResults()[0];
assertContentOfTable(new Object[][] {
{-4, 2, -6}}, vt);

client.callProcedure("@AdHoc", "UPDATE R1_ENG_11024 A SET NUM = ID WHERE ID=-13;");

vt = client.callProcedure("@AdHoc",
"select * from V16_ENG_11042").getResults()[0];
assertContentOfTable(new Object[][] {
{-4, 2, -12}}, vt);
}

/**
* Build a list of the tests that will be run when TestTPCCSuite gets run by JUnit.
* Use helper classes that are part of the RegressionSuite framework.
Expand Down
Expand Up @@ -342,10 +342,25 @@ CREATE TABLE R1_ENG_11024 (
PRIMARY KEY (ID)
);

CREATE TABLE R2_ENG_11024 (
ID INTEGER NOT NULL,
VCHAR VARCHAR(300),
NUM INTEGER,
RATIO FLOAT,
PRIMARY KEY (ID)
);

CREATE VIEW V3_ENG_11024_JOIN (ID, RATIO) AS
SELECT COUNT(*), MIN(T2.RATIO)
FROM P1_ENG_11024 T1 JOIN P2_ENG_11024 T2 USING(ID);

CREATE VIEW V3_ENG_11024_1tbl (ID, RATIO) AS
SELECT COUNT(*), MIN(RATIO)
FROM P1_ENG_11024;

-- Repro for ENG-11042 uses same source tables as 11024
-- (both found by sqlcmd)
CREATE VIEW V16_ENG_11042 (ID, COUNT_STAR, NUM) AS
SELECT T2.NUM, COUNT(*), MAX(T1.NUM)
FROM R1_ENG_11024 T1 JOIN R2_ENG_11024 T2 ON T1.ID = T2.ID
GROUP BY T2.NUM;

0 comments on commit c0ba9ab

Please sign in to comment.