This is an automated email from the ASF dual-hosted git repository.
amashenkov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 26d5344321 IGNITE-19299 Remove obsolete tests (#1965).
26d5344321 is described below
commit 26d5344321340cfab7d3d9bf6eaf445f6d25a776
Author: ygerzhedovich <[email protected]>
AuthorDate: Tue Apr 25 11:32:13 2023 +0300
IGNITE-19299 Remove obsolete tests (#1965).
---
.../Linq/LinqTests.Functions.cs | 2 +-
.../internal/sql/engine/ItSqlOperatorsTest.java | 2 +-
.../aggregates/test_aggregate_types.test_ignore | 2 +-
.../test_aggregate_types_scalar.test_ignored | 2 +-
.../test_distinct_string_agg.test_ignore | 2 +-
.../aggregates/test_perfect_ht.test_ignore | 2 +-
.../aggregates/test_scalar_aggr.test_ignore | 2 +-
.../aggregates/test_string_agg.test_ignore | 2 +-
.../aggregates/test_string_agg_big.test_ignore | 2 +-
.../test_string_agg_many_groups.test_ignore | 2 +-
.../sql/cast/test_boolean_cast.test | 2 +-
.../sql/cast/test_boolean_cast.test_ignore | 2 +-
.../sql/types/collections/array.test_ignore | 2 +-
.../sql/types/collections/array_agg.test_ignore | 2 +-
.../types/collections/array_agg.test_slow_ignore | 2 +-
.../sql/types/collections/map.test_ignore | 2 +-
.../sql/engine/sql/fun/IgniteSqlOperatorTable.java | 2 +-
.../internal/sql/engine/IgniteSqlApiTest.java | 673 ---------------------
18 files changed, 17 insertions(+), 690 deletions(-)
diff --git
a/modules/platforms/dotnet/Apache.Ignite.Tests/Linq/LinqTests.Functions.cs
b/modules/platforms/dotnet/Apache.Ignite.Tests/Linq/LinqTests.Functions.cs
index 1976c41f31..46efeeb6b8 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Tests/Linq/LinqTests.Functions.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Tests/Linq/LinqTests.Functions.cs
@@ -58,7 +58,7 @@ public partial class LinqTests
}
[Test]
- [Ignore("IGNITE-14589")]
+ [Ignore("IGNITE-19330")]
public void TestRemainder()
{
TestOpDouble(x => x.Key % 3d, 1.0d, "select (_T0.KEY % ?) from");
diff --git
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
index 6f7e464e9c..7d169630fe 100644
---
a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
+++
b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlOperatorsTest.java
@@ -256,7 +256,7 @@ public class ItSqlOperatorsTest extends
ClusterPerClassIntegrationTest {
}
@Test
- @Disabled("https://issues.apache.org/jira/browse/IGNITE-15550")
+ @Disabled("https://issues.apache.org/jira/browse/IGNITE-19332")
public void testQueryAsCollections() {
assertExpression("MAP(SELECT 'a', 1)").returns(Map.of("a", 1)).check();
assertExpression("ARRAY(SELECT 1)").returns(List.of(1)).check();
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types.test_ignore
index 97a68a23c9..6bb741960b 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_aggregate_types.test
# description: Test aggregates with many different types
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
statement ok
CREATE TABLE strings(s VARCHAR, g INTEGER)
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types_scalar.test_ignored
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types_scalar.test_ignored
index 4df3229cd5..3595684fc0 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types_scalar.test_ignored
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_aggregate_types_scalar.test_ignored
@@ -2,7 +2,7 @@
# description: Test scalar aggregates with many different types
# group: [aggregates]
# Ignored: https://issues.apache.org/jira/browse/IGNITE-18362
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
query IIIII
SELECT COUNT(1), COUNT(*), COUNT(NULL), COUNT('hello'), COUNT(DATE
'1992-02-02')
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_distinct_string_agg.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_distinct_string_agg.test_ignore
index b19e9750c7..a8cec49b50 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_distinct_string_agg.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_distinct_string_agg.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_distinct_string_agg.test
# description: Test distinct STRING_AGG operator
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
statement ok
CREATE TABLE strings(i INTEGER, s VARCHAR);
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_perfect_ht.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_perfect_ht.test_ignore
index 7d43624a29..9a5cac3f03 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_perfect_ht.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_perfect_ht.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_perfect_ht.test
# description: Test aggregates that can trigger a perfect HT
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
statement ok
PRAGMA enable_verification
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_scalar_aggr.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_scalar_aggr.test_ignore
index 9f2eb6b6bf..5d95698b39 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_scalar_aggr.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_scalar_aggr.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_scalar_aggr.test
# description: Test aggregates with scalar inputs
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
# Ignored: https://issues.apache.org/jira/browse/IGNITE-17437
# test aggregate on scalar values
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg.test_ignore
index b7c2ee6c8c..7e9bb34043 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_string_agg.test
# description: Test STRING_AGG operator
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
# test incorrect usage of STRING_AGG function
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_big.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_big.test_ignore
index a73cab112b..a3ea9746b3 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_big.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_big.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_string_agg_big.test
# description: STRING_AGG big
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
statement ok
CREATE TABLE strings AS SELECT c::VARCHAR g, (c*10+e)::INTEGER x FROM
table(system_range(0, 99, 1)) t1(c), table(system_range(0, 99, 1)) t2(e);
diff --git
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_many_groups.test_ignore
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_many_groups.test_ignore
index 62bef2270f..b3c9cca312 100644
---
a/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_many_groups.test_ignore
+++
b/modules/runner/src/integrationTest/sql/aggregate/aggregates/test_string_agg_many_groups.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/aggregate/aggregates/test_string_agg_many_groups.test
# description: Test STRING_AGG operator with many groups
# group: [aggregates]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
# generate a table
diff --git a/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test
b/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test
index d72fde4f14..a93a6f0abf 100644
--- a/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test
+++ b/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test
@@ -1,7 +1,7 @@
# name: test/sql/cast/test_boolean_cast.test
# description: Test boolean casts
# group: [cast]
-# Ignored with https://issues.apache.org/jira/browse/IGNITE-15559
+# Ignored with https://issues.apache.org/jira/browse/IGNITE-19331
statement ok
PRAGMA enable_verification
diff --git
a/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test_ignore
b/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test_ignore
index 79812020a6..9a90c2a5cb 100644
--- a/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test_ignore
+++ b/modules/runner/src/integrationTest/sql/cast/test_boolean_cast.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/cast/test_boolean_cast.test
# description: Test boolean casts
# group: [cast]
-# Ignored with https://issues.apache.org/jira/browse/IGNITE-15559
+# Ignored with https://issues.apache.org/jira/browse/IGNITE-19331
statement ok
PRAGMA enable_verification
diff --git
a/modules/runner/src/integrationTest/sql/types/collections/array.test_ignore
b/modules/runner/src/integrationTest/sql/types/collections/array.test_ignore
index d451dd23b0..b2318af710 100644
--- a/modules/runner/src/integrationTest/sql/types/collections/array.test_ignore
+++ b/modules/runner/src/integrationTest/sql/types/collections/array.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/types/collections/array.test
# description: Test ARRAY creation query
# group: [collections]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
query T
SELECT ARRAY(SELECT * FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3))
diff --git
a/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_ignore
b/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_ignore
index 2d99ada715..2e44f1798f 100644
---
a/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_ignore
+++
b/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/types/collections/array_agg.test
# description: Test ARRAY_AGG and ARRAY_CONCAT_AGG function
# group: [collections]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
# scalar ARRAY_AGG
query II
diff --git
a/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_slow_ignore
b/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_slow_ignore
index 771505bef2..6b1aaa7ad5 100644
---
a/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_slow_ignore
+++
b/modules/runner/src/integrationTest/sql/types/collections/array_agg.test_slow_ignore
@@ -1,7 +1,7 @@
# name: test/sql/types/collections/array_agg.test_slow
# description: Test ARRAY_AGG function, slow tests
# group: [collections]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
statement ok
CREATE TABLE films(film_id INTEGER, title VARCHAR)
diff --git
a/modules/runner/src/integrationTest/sql/types/collections/map.test_ignore
b/modules/runner/src/integrationTest/sql/types/collections/map.test_ignore
index 2374156f45..abc3f34a21 100644
--- a/modules/runner/src/integrationTest/sql/types/collections/map.test_ignore
+++ b/modules/runner/src/integrationTest/sql/types/collections/map.test_ignore
@@ -1,7 +1,7 @@
# name: test/sql/types/collections/map.test
# description: Test MAP query
# group: [collect]
-# Ignored: https://issues.apache.org/jira/browse/IGNITE-14636
+# Ignored: https://issues.apache.org/jira/browse/IGNITE-19333
query T
SELECT MAP(SELECT * FROM (SELECT 1, 'test1' UNION SELECT 2, 'test2' UNION
SELECT 3, 'test3'))
diff --git
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
index be5979a396..98573a38da 100644
---
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
+++
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/sql/fun/IgniteSqlOperatorTable.java
@@ -340,7 +340,7 @@ public class IgniteSqlOperatorTable extends
ReflectiveSqlOperatorTable {
register(SqlStdOperatorTable.IS_EMPTY);
register(SqlStdOperatorTable.IS_NOT_EMPTY);
- // TODO https://issues.apache.org/jira/browse/IGNITE-15550
+ // TODO https://issues.apache.org/jira/browse/IGNITE-19332
//register(SqlStdOperatorTable.MAP_QUERY);
//register(SqlStdOperatorTable.ARRAY_QUERY);
diff --git
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/IgniteSqlApiTest.java
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/IgniteSqlApiTest.java
deleted file mode 100644
index e90c05d938..0000000000
---
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/IgniteSqlApiTest.java
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- * 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.testframework.IgniteTestUtils.await;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import com.google.common.collect.Streams;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Flow;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import org.apache.ignite.internal.schema.Column;
-import org.apache.ignite.internal.schema.NativeTypes;
-import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.schema.SchemaRegistry;
-import org.apache.ignite.internal.util.Constants;
-import org.apache.ignite.sql.BatchedArguments;
-import org.apache.ignite.sql.IgniteSql;
-import org.apache.ignite.sql.ResultSet;
-import org.apache.ignite.sql.ResultSetMetadata;
-import org.apache.ignite.sql.Session;
-import org.apache.ignite.sql.Session.SessionBuilder;
-import org.apache.ignite.sql.SqlRow;
-import org.apache.ignite.sql.Statement;
-import org.apache.ignite.sql.Statement.StatementBuilder;
-import org.apache.ignite.sql.async.AsyncResultSet;
-import org.apache.ignite.sql.reactive.ReactiveResultSet;
-import org.apache.ignite.table.KeyValueView;
-import org.apache.ignite.table.Tuple;
-import org.apache.ignite.tx.IgniteTransactions;
-import org.apache.ignite.tx.Transaction;
-import org.apache.ignite.tx.TransactionException;
-import org.jetbrains.annotations.NotNull;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-
-/**
- * Tests IgniteSQL facade API.
- */
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-public class IgniteSqlApiTest {
- @Mock
- IgniteSql igniteSql;
-
- @Mock
- private IgniteTransactions igniteTx;
-
- private Transaction transaction;
-
- private Map<Integer, String> txState;
-
- private Map<Integer, String> globalState;
-
- @BeforeEach
- void setUp() {
- initMock();
- }
-
-
- @Test
- public void statementApi() {
- // Default session.
- Session session = igniteSql.createSession();
-
- // Simple statement.
- Statement simpleStatement = igniteSql.createStatement("SELECT id, val
FROM tbl WHERE id > ?");
-
- // Create session with params.
- Session sessionWithParams = igniteSql.sessionBuilder()
- .defaultQueryTimeout(10_000, TimeUnit.MILLISECONDS) // Set
default timeout.
- .property("memoryQuota", 10 * Constants.MiB) // Set default
quota.
- .build();
-
- // Statement with params.
- Statement statementWipParams = igniteSql.statementBuilder()
- .query("SELECT id, val FROM tbl WHERE id > ?")
- .defaultSchema("PUBLIC")
- .build();
-
- // Execute statement.
- session.execute(null, simpleStatement, /* args */ 1);
-
- // Execute same statement in different sessions is allowed.
- session.execute(null, statementWipParams, /* args */ 1);
- sessionWithParams.execute(null, statementWipParams, /* args */ 1);
-
- // Releasing session resources.
- session.close();
- }
-
- @Test
- public void syncSqlApi() {
- final Session sess = igniteSql.createSession();
-
- // Execute DDL.
- ResultSet<SqlRow> rs = sess.execute(null, "CREATE TABLE IF NOT EXITS
tbl (id INT PRIMARY KEY, val VARCHAR)");
-
- assertTrue(rs.wasApplied());
- assertFalse(rs.hasRowSet());
- assertEquals(-1L, rs.affectedRows());
-
- // Execute DML.
- rs = sess.execute(null, "INSERT INTO tbl VALUES (?, ?)", 1, "str1");
-
- assertEquals(1L, rs.affectedRows());
- assertFalse(rs.wasApplied());
- assertFalse(rs.hasRowSet());
-
- // Execute batched DML query.
- long[] res = sess.executeBatch(null, "INSERT INTO tbl VALUES (?, ?)",
- BatchedArguments.of(2, "str2").add(3, "str3").add(4, "str4"));
-
- assertEquals(3, res.length);
- assertTrue(Arrays.stream(res).allMatch(i -> i == 1));
-
- // Execute query.
- rs = sess.execute(null, "SELECT id, val FROM tbl WHERE id > ?", 0);
-
- assertTrue(rs.hasRowSet());
- assertFalse(rs.wasApplied());
- assertEquals(-1L, rs.affectedRows());
-
- assertTrue(rs.hasNext());
-
- Streams.stream(rs).forEach(r ->
- assertEquals("str" + r.intValue("id"), r.stringValue("val"))
- );
-
- // Execute DML.
- rs = sess.execute(null, "DELETE FROM tbl");
-
- assertEquals(4L, rs.affectedRows());
- assertFalse(rs.wasApplied());
- assertFalse(rs.hasRowSet());
- }
-
- @Test
- public void syncApiWithTx() {
- final Session sess = igniteSql.createSession();
-
- // Create table.
- sess.execute(null, "CREATE TABLE IF NOT EXITS tbl (id INT PRIMARY KEY,
val VARCHAR)");
-
- igniteTx.runInTransaction(tx -> {
- // Execute DML in tx.
- ResultSet<SqlRow> rs = sess.execute(tx, "INSERT INTO tbl VALUES
(?, ?)", 1, "str1");
-
- assertEquals(1, rs.affectedRows());
-
- // Execute batched DML query.
- long[] res = sess.executeBatch(tx, "INSERT INTO tbl VALUES (?, ?)",
- BatchedArguments.of(2, "str2").add(3, "str3").add(4,
"str4"));
-
- assertTrue(Arrays.stream(res).allMatch(i -> i == 1));
-
- // Execute query in TX.
- rs = sess.execute(tx, "SELECT id, val FROM tbl WHERE id > ?", 0);
-
- assertTrue(rs.hasNext());
-
- Streams.stream(rs).forEach(r ->
- assertEquals("str" + r.intValue("id"),
r.stringValue("val"))
- );
-
- // Execute query outside TX in the same session.
- rs = sess.execute(null, "SELECT id, val FROM tbl WHERE id > ?", 1);
-
- assertFalse(rs.hasNext()); // No data found before TX is commited.
-
- tx.commit();
-
- // Execute DML outside tx in same session after tx commit.
- rs = sess.execute(null, "DELETE FROM tbl");
-
- assertEquals(4L, rs.affectedRows());
- });
-
- Mockito.verify(transaction).commit();
- }
-
- @Test
- public void mixSqlAndTableApiInTx() {
- // Create table.
- Session sess = igniteSql.createSession();
- sess.execute(null, "CREATE TABLE IF NOT EXITS tbl (id INT PRIMARY KEY,
val VARCHAR)");
- sess.execute(null, "INSERT INTO tbl VALUES (?, ?)", 1, "str1");
-
- KeyValueView<Tuple, Tuple> tbl = getTable();
-
- await(igniteTx.beginAsync().thenAccept(tx -> {
- // Execute in TX.
- tbl.putAsync(tx, Tuple.create().set("id", 2),
Tuple.create().set("val", "str2"))
- .thenAccept(r -> tx.commit());
- }));
-
- ResultSet rs = sess.execute(null, "SELECT id, val FROM tbl WHERE id >
?", 1);
- assertTrue(rs.hasNext());
-
- await(igniteTx.beginAsync().thenAccept(tx -> {
- // Execute in TX.
- tbl.putAsync(tx, Tuple.create().set("id", 3),
Tuple.create().set("val", "NewValue"))
- .thenApply(f -> {
- ResultSet rs0 = sess.execute(tx, "SELECT id, val FROM
tbl WHERE id > ?", 2);
- assertTrue(rs0.hasNext());
-
- return f;
- })
- .thenAccept(r -> tx.rollback());
-
- Mockito.verify(tx, Mockito.times(1)).rollback();
- }));
-
- rs = sess.execute(null, "SELECT id, val FROM tbl WHERE id > ?", 2);
- assertFalse(rs.hasNext());
- }
-
- @Test
- public void multiStatementQuery() {
- Session sess = igniteSql.createSession();
-
- sess.executeScript(
- "CREATE TABLE tbl(id INTEGER PRIMARY KEY, val VARCHAR);"
- + "CREATE TABLE tbl2(id INTEGER PRIMARY KEY, val
VARCHAR);"
- + "INSERT INTO tbl VALUES (1, \"str1\"), (2,
\"str2\"), (3, \"str3\");"
- + "INSERT INTO tbl2 (SELECT id, val FROM tbl WHERE id
> ?);"
- + "DROP TABLE tbl", 1);
-
- ResultSet rs = sess.execute(null, "SELECT id, val FROM tbl2");
-
- int cnt = 0;
- for (; rs.hasNext(); rs.next()) {
- cnt++;
- }
-
- assertEquals(2, cnt);
- }
-
- @Test
- public void testAsyncSql() throws ExecutionException, InterruptedException
{
- { // Init table
- Session sess = igniteSql.createSession();
- sess.execute(null, "CREATE TABLE IF NOT EXITS tbl (id INT PRIMARY
KEY, val VARCHAR)");
- sess.executeBatch(null, "INSERT INTO tbl VALUES (?, ?)",
- BatchedArguments.of(1, "str1").add(2, "str2").add(3,
"str3").add(4, "str4").add(5, "str5"));
- }
-
- KeyValueView<Tuple, Tuple> table = getTable();
-
- class AsyncPageProcessor implements
- Function<AsyncResultSet<SqlRow>,
CompletionStage<AsyncResultSet<SqlRow>>> {
- private final Transaction tx0;
-
- public AsyncPageProcessor(Transaction tx0) {
- this.tx0 = tx0;
- }
-
- @Override
- public CompletionStage<AsyncResultSet<SqlRow>>
apply(AsyncResultSet<SqlRow> rs) {
- for (SqlRow row : rs.currentPage()) {
- table.getAsync(tx0, Tuple.create().set("id",
row.intValue(0)));
- }
-
- if (rs.hasMorePages()) {
- return rs.fetchNextPage().thenCompose(this);
- }
-
- return CompletableFuture.completedFuture(rs);
- }
- }
-
- await(igniteTx.beginAsync()
- .thenCompose(tx0 -> igniteSql.createSession()
- .executeAsync(tx0, "SELECT id, val FROM tbl WHERE id >
?", 1)
- .thenCompose(new AsyncPageProcessor(tx0))
- .thenCompose(ignore -> tx0.commitAsync())
- .thenApply(ignore -> tx0)));
-
- Mockito.verify(transaction).commitAsync();
- Mockito.verify(table, Mockito.times(4)).getAsync(Mockito.any(),
Mockito.any());
- }
-
- @Test
- public void testReactiveSql() {
- { // Init table
- Session sess = igniteSql.createSession();
- sess.execute(null, "CREATE TABLE IF NOT EXITS tbl (id INT PRIMARY
KEY, val VARCHAR)");
- sess.executeBatch(null, "INSERT INTO tbl VALUES (?, ?)",
- BatchedArguments.of(1, "str1").add(2, "str2").add(3,
"str3").add(4, "str4"));
- }
-
- SqlRowSubscriber subscriber = new SqlRowSubscriber(row -> {
- assertTrue(10 > row.intValue("id"));
- assertTrue(row.stringValue("val").startsWith("str"));
- });
-
- await(igniteTx.beginAsync().thenApply(tx -> {
- final Session session = igniteSql.createSession();
-
- session.executeReactive(tx, "SELECT id, val FROM tbl WHERE id >
?", 1)
- .subscribe(subscriber);
-
- return subscriber.exceptionally(th -> {
- tx.rollbackAsync();
-
- return null;
- }).thenApply(ignore -> tx.commitAsync());
- }));
-
- Mockito.verify(transaction).commitAsync();
- }
-
- @Disabled("https://issues.apache.org/jira/browse/IGNITE-19299")
- @Test
- public void testMetadata() {
- ResultSet<SqlRow> rs = igniteSql.createSession()
- .execute(null, "SELECT id, val FROM tbl");
-
- SqlRow row = rs.next();
-
- ResultSetMetadata meta = rs.metadata();
-
- assertEquals(rs.metadata().columns().size(), row.columnCount());
-
- assertEquals(0, meta.indexOf("id"));
- assertEquals(1, meta.indexOf("val"));
-
- assertEquals("id", meta.columns().get(0).name());
- assertEquals("val", meta.columns().get(1).name());
-
- assertEquals(Integer.class, meta.columns().get(0).valueClass());
- assertEquals(String.class, meta.columns().get(1).valueClass());
-
- assertFalse(meta.columns().get(0).nullable());
- assertTrue(meta.columns().get(1).nullable());
- }
-
- @NotNull
- private KeyValueView<Tuple, Tuple> getTable() {
- BatchedArguments of = BatchedArguments.of();
- BatchedArguments of2 = BatchedArguments.of((Object) null);
-
- SchemaDescriptor schema = new SchemaDescriptor(42,
- new Column[]{new Column("id", NativeTypes.INT32, false)},
- new Column[]{new Column("val", NativeTypes.STRING, true)}
- );
-
- SchemaRegistry schemaReg = Mockito.mock(SchemaRegistry.class);
- Mockito.when(schemaReg.schema()).thenReturn(schema);
-
- KeyValueView<Tuple, Tuple> tbl = (KeyValueView<Tuple, Tuple>)
Mockito.mock(KeyValueView.class);
- Mockito.when(tbl.putAsync(Mockito.nullable(Transaction.class),
Mockito.any(Tuple.class), Mockito.any(Tuple.class)))
- .then(ans -> {
- state(ans.getArgument(0)).put(
- ((Tuple) ans.getArgument(1)).intValue("id"),
- ((Tuple) ans.getArgument(2)).stringValue("val"));
- return CompletableFuture.completedFuture(null);
- });
-
- Mockito.when(tbl.getAsync(Mockito.any(Transaction.class),
Mockito.any(Tuple.class)))
- .thenAnswer(ans -> CompletableFuture.completedFuture(
- state(ans.getArgument(0))
- .get(((Tuple)
ans.getArgument(1)).intValue("id"))));
-
- return tbl;
- }
-
- private void initMock() {
- globalState = new HashMap<>();
- txState = new HashMap<>();
-
- Session session = Mockito.mock(Session.class);
- Statement statement = Mockito.mock(Statement.class);
-
- SessionBuilder sessionBuilder = Mockito.mock(SessionBuilder.class);
-
-
Mockito.when(sessionBuilder.defaultSchema(Mockito.anyString())).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(sessionBuilder.defaultQueryTimeout(Mockito.anyLong(),
Mockito.any(TimeUnit.class))).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(sessionBuilder.property(Mockito.anyString(),
Mockito.any())).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(sessionBuilder.build()).thenReturn(session);
-
- StatementBuilder stmtBuilder = Mockito.mock(StatementBuilder.class);
-
-
Mockito.when(stmtBuilder.query(Mockito.anyString())).thenAnswer(Answers.RETURNS_SELF);
-
Mockito.when(stmtBuilder.defaultSchema(Mockito.anyString())).thenAnswer(Answers.RETURNS_SELF);
-
Mockito.when(stmtBuilder.pageSize(Mockito.anyInt())).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(stmtBuilder.queryTimeout(Mockito.anyLong(),
Mockito.any(TimeUnit.class))).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(stmtBuilder.property(Mockito.anyString(),
Mockito.any())).thenAnswer(Answers.RETURNS_SELF);
- Mockito.when(stmtBuilder.build()).thenReturn(statement);
-
- Mockito.when(igniteSql.createSession()).thenReturn(session);
- Mockito.when(igniteSql.sessionBuilder()).thenReturn(sessionBuilder);
- Mockito.when(igniteSql.statementBuilder()).thenReturn(stmtBuilder);
-
Mockito.when(igniteSql.createStatement(Mockito.anyString())).thenReturn(statement);
-
- transaction = Mockito.spy(new DummyTx());
- Mockito.doCallRealMethod().when(transaction).commitAsync();
- Mockito.doCallRealMethod().when(transaction).rollback();
-
- Mockito.when(igniteTx.beginAsync()).then(ans -> {
- txState.clear();
- txState.putAll(globalState);
- return CompletableFuture.completedFuture(transaction);
- }
- );
-
- Mockito.doAnswer(invocation -> {
- Consumer<Transaction> argument = invocation.getArgument(0);
-
- argument.accept(transaction);
-
- return null;
- }).when(igniteTx).runInTransaction(Mockito.any(Consumer.class));
-
- Mockito.when(session.execute(Mockito.nullable(Transaction.class),
Mockito.eq("INSERT INTO tbl VALUES (?, ?)"),
- Mockito.anyInt(),
- Mockito.anyString()))
- .thenAnswer(ans -> {
- state(ans.getArgument(0)).put(ans.getArgument(2),
ans.getArgument(3));
-
- ResultSet res = Mockito.mock(ResultSet.class);
- Mockito.when(res).thenThrow(AssertionError.class);
- Mockito.when(res.wasApplied()).thenReturn(false);
- Mockito.when(res.hasRowSet()).thenReturn(false);
- Mockito.when(res.affectedRows()).thenReturn(1L);
-
- return res;
- });
-
- Mockito.when(session.executeBatch(Mockito.nullable(Transaction.class),
Mockito.eq("INSERT INTO tbl VALUES (?, ?)"),
- Mockito.any(BatchedArguments.class)))
- .then(ans -> {
- BatchedArguments args = ans.getArgument(2);
-
- args.forEach(a -> state(ans.getArgument(0)).put((Integer)
a.get(0), (String) a.get(1)));
-
- long[] res = new long[args.size()];
- Arrays.fill(res, 1L);
- return res;
- });
-
- Mockito.when(session.execute(Mockito.nullable(Transaction.class),
Mockito.eq("SELECT id, val FROM tbl WHERE id > ?"),
- Mockito.anyInt()))
- .thenAnswer(ans -> {
- ResultSet res = Mockito.mock(ResultSet.class);
- Mockito.when(res.wasApplied()).thenReturn(false);
- Mockito.when(res.hasRowSet()).thenReturn(true);
- Mockito.when(res.affectedRows()).thenReturn(-1L);
-
- Transaction txArg = ans.getArgument(0);
- Integer filterArg = ans.getArgument(2);
-
- final var it = stateAsRowSet(txArg, filterArg).iterator();
-
- Mockito.when(res.hasNext()).thenAnswer(ans0 ->
it.hasNext());
- Mockito.when(res.next()).thenAnswer(ans0 -> it.next());
- return res;
- });
-
- Mockito.when(session.execute(Mockito.nullable(Transaction.class),
Mockito.eq("DELETE FROM tbl")))
- .thenAnswer(ans ->
Mockito.when(Mockito.mock(ResultSet.class).affectedRows())
- .then(ans0 -> {
- Map<Integer, String> state =
state(ans.getArgument(0));
- HashMap<Integer, String> oldState = new
HashMap<>(state);
-
- oldState.forEach((k, v) -> state.put(k, null));
-
- return (long) oldState.size();
- })
- .getMock());
-
- Mockito.when(session.execute(Mockito.isNull(), Mockito.eq("SELECT id,
val FROM tbl2")))
- .thenAnswer(ans -> {
- ResultSet res = Mockito.mock(ResultSet.class);
-
- var tbl2iter = List.of(
- createRow(2, "str2").build(),
- createRow(3, "str3").build()
- ).iterator();
-
- Mockito.when(res.wasApplied()).thenReturn(false);
- Mockito.when(res.hasRowSet()).thenReturn(true);
- Mockito.when(res.affectedRows()).thenReturn(-1L);
- Mockito.when(res.hasNext()).thenAnswer(ans0 -> {
- System.out.println();
- return tbl2iter.hasNext();
- });
- Mockito.when(res.next()).thenAnswer(ans1 ->
tbl2iter.next());
- return res;
- });
-
- Mockito.when(session.execute(Mockito.isNull(), Mockito.eq("CREATE
TABLE IF NOT EXITS tbl (id INT PRIMARY KEY, val VARCHAR)")))
- .thenAnswer(ans -> {
- ResultSet res = Mockito.mock(ResultSet.class);
-
Mockito.when(res.hasNext()).thenThrow(AssertionError.class);
- Mockito.when(res.wasApplied()).thenReturn(true);
- Mockito.when(res.hasRowSet()).thenReturn(false);
- Mockito.when(res.affectedRows()).thenReturn(-1L);
- return res;
- });
-
- // Async API.
- Mockito.when(session.executeAsync(
- Mockito.nullable(Transaction.class),
- Mockito.eq("SELECT id, val FROM tbl WHERE id > ?"),
- Mockito.anyInt())
- ).thenAnswer(ans -> {
- AsyncResultSet page2 = Mockito.mock(AsyncResultSet.class);
-
- Transaction txArg = ans.getArgument(0);
- Integer filterArg = ans.getArgument(2);
-
- List<SqlRow> rows = stateAsRowSet(txArg, filterArg);
-
- assert rows.size() > 3 : "need more data";
-
- Mockito.when(page2.currentPage()).thenReturn(rows.subList(2,
rows.size()));
- Mockito.when(page2.hasMorePages()).thenReturn(false);
-
- AsyncResultSet page1 = Mockito.mock(AsyncResultSet.class);
- Mockito.when(page1.currentPage()).thenReturn(rows.subList(0, 2));
- Mockito.when(page1.hasMorePages()).thenReturn(true);
-
- //noinspection unchecked,rawtypes
- Mockito.when(page1.fetchNextPage()).thenReturn((CompletableFuture)
CompletableFuture.completedFuture(page2));
-
- return CompletableFuture.completedFuture(page1);
- });
-
- // Reactive API.
- Mockito.when(session.executeReactive(
- Mockito.nullable(Transaction.class),
- Mockito.eq("SELECT id, val FROM tbl WHERE id > ?"),
- Mockito.anyInt())
- ).thenAnswer(invocation -> {
- ReactiveResultSet mock = Mockito.mock(ReactiveResultSet.class);
-
- Transaction txArg = invocation.getArgument(0);
- Integer filterArg = invocation.getArgument(2);
-
- Mockito.doAnswer(ans -> {
- Flow.Subscriber<SqlRow> subscrber = ans.getArgument(0);
-
- subscrber.onSubscribe(Mockito.mock(Flow.Subscription.class));
-
- List<SqlRow> rows = stateAsRowSet(txArg, filterArg);
-
- rows.forEach(subscrber::onNext);
-
- subscrber.onComplete();
-
- return ans;
- }).when(mock).subscribe(Mockito.any(Flow.Subscriber.class));
-
- return mock;
- });
- }
-
- private List<SqlRow> stateAsRowSet(Transaction tx, Integer filterArg) {
- return state(tx).entrySet().stream()
- .filter(e -> e.getKey() > filterArg)
- .map(e -> createRow(e.getKey(), e.getValue()).build())
- .collect(Collectors.toList());
- }
-
- private TestRow createRow(Integer key, String value) {
- return new TestRow().set("id", key)
- .set("val", value);
- }
-
- private Map<Integer, String> state(Transaction tx) {
- return tx == null ? globalState : txState;
- }
-
- static class SqlRowSubscriber extends CompletableFuture<Void> implements
- Flow.Subscriber<SqlRow> {
- private Consumer<SqlRow> rowConsumer;
-
- SqlRowSubscriber(Consumer<SqlRow> rowConsumer) {
- this.rowConsumer = rowConsumer;
- }
-
- @Override
- public void onSubscribe(Flow.Subscription subscription) {
- whenCompleteAsync((res, th) -> {
- if (th != null) {
- subscription.cancel();
- }
- });
-
- subscription.request(Long.MAX_VALUE); // Unbounded.
- }
-
- @Override
- public void onNext(SqlRow row) {
- rowConsumer.accept(row);
- }
-
- @Override
- public void onError(Throwable throwable) {
- completeExceptionally(throwable);
- }
-
- @Override
- public void onComplete() {
- complete(null);
- }
- }
-
- class DummyTx implements Transaction {
- @Override
- public void commit() throws TransactionException {
- txState.forEach((k, v) -> globalState.put(k, v));
- txState.clear();
- }
-
- @Override
- public CompletableFuture<Void> commitAsync() {
- commit();
- return CompletableFuture.completedFuture(null);
- }
-
- @Override
- public void rollback() throws TransactionException {
- txState.clear();
- }
-
- @Override
- public CompletableFuture<Void> rollbackAsync() {
- rollback();
- return CompletableFuture.completedFuture(null);
- }
-
- @Override
- public boolean isReadOnly() {
- return false;
- }
- }
-}