[fix](Nereids) should do read lock on table being insert when analyze (#25619)

This commit is contained in:
morrySnow
2023-10-20 21:09:19 +08:00
committed by GitHub
parent 9fcee92a26
commit 3ffc6f0835
3 changed files with 124 additions and 42 deletions

View File

@ -17,14 +17,15 @@
package org.apache.doris.nereids.util;
import org.apache.doris.catalog.Table;
import org.apache.doris.common.jmockit.Deencapsulation;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.NereidsPlanner;
import org.apache.doris.nereids.StatementContext;
import org.apache.doris.nereids.datasets.ssb.SSBTestBase;
import org.apache.doris.nereids.parser.NereidsParser;
import org.apache.doris.nereids.properties.PhysicalProperties;
import org.apache.doris.nereids.trees.plans.commands.InsertIntoTableCommand;
import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@ -47,10 +48,10 @@ public class ReadLockTest extends SSBTestBase {
PhysicalProperties.ANY
);
CascadesContext cascadesContext = planner.getCascadesContext();
List<Table> f = (List<Table>) Deencapsulation.getField(cascadesContext, "tables");
Assertions.assertEquals(1, f.size());
Assertions.assertEquals("supplier", f.stream().map(Table::getName).findFirst().get());
List<TableIf> f = cascadesContext.getTables();
Assertions.assertEquals(1, f.size());
Assertions.assertEquals("supplier", f.stream().map(TableIf::getName).findFirst().get());
}
@Test
@ -69,9 +70,9 @@ public class ReadLockTest extends SSBTestBase {
PhysicalProperties.ANY
);
CascadesContext cascadesContext = planner.getCascadesContext();
List<Table> f = (List<Table>) Deencapsulation.getField(cascadesContext, "tables");
List<TableIf> f = cascadesContext.getTables();
Assertions.assertEquals(1, f.size());
Assertions.assertEquals("supplier", f.stream().map(Table::getName).findFirst().get());
Assertions.assertEquals("supplier", f.stream().map(TableIf::getName).findFirst().get());
}
@Test
@ -84,10 +85,9 @@ public class ReadLockTest extends SSBTestBase {
PhysicalProperties.ANY
);
CascadesContext cascadesContext = planner.getCascadesContext();
List<Table> f = (List<Table>) Deencapsulation.getField(cascadesContext, "tables");
List<TableIf> f = cascadesContext.getTables();
Assertions.assertEquals(1, f.size());
Assertions.assertEquals("supplier", f.stream().map(Table::getName).findFirst().get());
Assertions.assertEquals("supplier", f.stream().map(TableIf::getName).findFirst().get());
}
@Test
@ -100,11 +100,28 @@ public class ReadLockTest extends SSBTestBase {
PhysicalProperties.ANY
);
CascadesContext cascadesContext = planner.getCascadesContext();
List<Table> f = (List<Table>) Deencapsulation.getField(cascadesContext, "tables");
List<TableIf> f = cascadesContext.getTables();
Assertions.assertEquals(2, f.size());
Set<String> tableNames = f.stream().map(Table::getName).collect(Collectors.toSet());
Set<String> tableNames = f.stream().map(TableIf::getName).collect(Collectors.toSet());
Assertions.assertTrue(tableNames.contains("supplier"));
Assertions.assertTrue(tableNames.contains("lineorder"));
}
@Test
public void testInserInto() {
String sql = "INSERT INTO supplier(s_suppkey) SELECT lo_orderkey FROM lineorder";
StatementContext statementContext = MemoTestUtils.createStatementContext(connectContext, sql);
InsertIntoTableCommand insertIntoTableCommand = (InsertIntoTableCommand) parser.parseSingle(sql);
NereidsPlanner planner = new NereidsPlanner(statementContext);
planner.plan(
(LogicalPlan) insertIntoTableCommand.getExplainPlan(connectContext),
PhysicalProperties.ANY
);
CascadesContext cascadesContext = planner.getCascadesContext();
List<TableIf> f = cascadesContext.getTables();
Assertions.assertEquals(2, f.size());
Set<String> tableNames = f.stream().map(TableIf::getName).collect(Collectors.toSet());
Assertions.assertTrue(tableNames.contains("supplier"));
Assertions.assertTrue(tableNames.contains("lineorder"));
}
}