blob: 7c8a206ad78b0fd6b6ee6dba8dc2f03969714c7a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.sql.engine;
import static org.apache.ignite.internal.catalog.CatalogService.DEFAULT_STORAGE_PROFILE;
import static org.apache.ignite.internal.sql.engine.util.Commons.IN_BUFFER_SIZE;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.List;
import java.util.stream.Stream;
import org.apache.ignite.internal.ClusterPerClassIntegrationTest;
import org.apache.ignite.internal.logger.IgniteLogger;
import org.apache.ignite.internal.logger.Loggers;
import org.apache.ignite.internal.sql.BaseSqlIntegrationTest;
import org.apache.ignite.table.Table;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
/**
* Index spool test.
*/
@Disabled("https://issues.apache.org/jira/browse/IGNITE-21286")
public class ItIndexSpoolTest extends BaseSqlIntegrationTest {
private static final IgniteLogger LOG = Loggers.forClass(ClusterPerClassIntegrationTest.class);
/**
* After each.
*/
@AfterEach
protected void cleanUp() {
if (LOG.isInfoEnabled()) {
LOG.info("Start cleanUp()");
}
for (Table table : CLUSTER.aliveNode().tables().tables()) {
sql("DROP TABLE " + table.name());
sql("DROP ZONE " + "ZONE_" + table.name().toUpperCase());
}
if (LOG.isInfoEnabled()) {
LOG.info("End cleanUp()");
}
}
private static Stream<Arguments> rowsWithPartitionsArgs() {
return Stream.of(
Arguments.of(1, 1),
Arguments.of(10, 1),
Arguments.of(IN_BUFFER_SIZE, 1),
Arguments.of(IN_BUFFER_SIZE + 1, 1),
Arguments.of(2000, 1),
Arguments.of(IN_BUFFER_SIZE, 2),
Arguments.of(IN_BUFFER_SIZE + 1, 2));
}
/**
* Test.
*/
@ParameterizedTest(name = "tableSize={0}, partitions={1}")
@MethodSource("rowsWithPartitionsArgs")
public void test(int rows, int partitions) throws InterruptedException {
prepareDataSet(rows, partitions);
var res = sql("SELECT /*+ DISABLE_RULE('NestedLoopJoinConverter', 'MergeJoinConverter', 'HashJoinConverter') */"
+ "T0.val, T1.val FROM TEST0 as T0 "
+ "JOIN TEST1 as T1 on T0.jid = T1.jid "
);
assertThat(res.size(), is(rows));
res.forEach(r -> assertThat(r.get(0), is(r.get(1))));
}
private void prepareDataSet(int rowsCount, int parts) {
Object[][] dataRows = new Object[rowsCount][];
for (int i = 0; i < rowsCount; i++) {
dataRows[i] = new Object[]{i, i + 1, "val_" + i};
}
for (String name : List.of("TEST0", "TEST1")) {
sql(String.format(
"CREATE ZONE %s with replicas=2, partitions=%d, storage_profiles='%s'",
"ZONE_" + name.toUpperCase(),
parts,
DEFAULT_STORAGE_PROFILE
));
sql(String.format("CREATE TABLE %s(id INT PRIMARY KEY, jid INT, val VARCHAR) WITH PRIMARY_ZONE='%s'",
name, "ZONE_" + name.toUpperCase()));
sql("CREATE INDEX " + name + "_jid_idx ON " + name + "(jid)");
insertData(name, List.of("ID", "JID", "VAL"), dataRows);
}
}
}