airlift / airbase

Base POM for Airlift
Apache License 2.0
48 stars 87 forks source link

MERGE failure when pre-computed hash optimization is turned off #381

Closed martint closed 1 year ago

martint commented 1 year ago
SET SESSION optimize_hash_generation = false;
CREATE TABLE t (x VARCHAR);

MERGE INTO t 
    USING (VALUES 'a') s(x) ON (t.x = s.x)
    WHEN MATCHED AND t.x = (SELECT x FROM (VALUES 'a') u(x) WHERE x = t.x)
        THEN DELETE

fails with

java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 0
    at io.trino.operator.join.DefaultPagesHash.getAddressIndex(DefaultPagesHash.java:182)
    at io.trino.operator.join.JoinHash.getJoinPosition(JoinHash.java:102)
    at io.trino.operator.join.unspilled.JoinProbe.fillCache(JoinProbe.java:183)
    at io.trino.operator.join.unspilled.JoinProbe.<init>(JoinProbe.java:73)
    at io.trino.operator.join.unspilled.JoinProbe$JoinProbeFactory.createJoinProbe(JoinProbe.java:55)
    at io.trino.operator.join.unspilled.PageJoiner.process(PageJoiner.java:111)
    at io.trino.operator.join.unspilled.PageJoiner.process(PageJoiner.java:45)
    at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:359)
    at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:412)
    at io.trino.operator.WorkProcessorUtils.lambda$flatten$6(WorkProcessorUtils.java:317)
    at io.trino.operator.WorkProcessorUtils$3.process(WorkProcessorUtils.java:359)
    at io.trino.operator.WorkProcessorUtils$ProcessWorkProcessor.process(WorkProcessorUtils.java:412)
    at io.trino.operator.WorkProcessorOperatorAdapter.getOutput(WorkProcessorOperatorAdapter.java:173)
    at io.trino.operator.Driver.processInternal(Driver.java:395)
    at io.trino.operator.Driver.lambda$process$8(Driver.java:298)
    at io.trino.operator.Driver.tryWithLock(Driver.java:694)
    at io.trino.operator.Driver.process(Driver.java:290)
    at io.trino.operator.Driver.processForDuration(Driver.java:261)
    at io.trino.execution.SqlTaskExecution$DriverSplitRunner.processFor(SqlTaskExecution.java:887)
    at io.trino.execution.executor.timesharing.PrioritizedSplitRunner.process(PrioritizedSplitRunner.java:187)
    at io.trino.execution.executor.timesharing.TimeSharingTaskExecutor$TaskRunner.run(TimeSharingTaskExecutor.java:565)
    at io.trino.$gen.Trino_testversion____20230920_215946_1.run(Unknown Source)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1623)