You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tl...@apache.org on 2021/03/12 16:15:36 UTC
[ignite] branch sql-calcite updated: IGNITE-14176 Calcite. Register
system indexes
This is an automated email from the ASF dual-hosted git repository.
tledkov pushed a commit to branch sql-calcite
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/sql-calcite by this push:
new 7ca32d3 IGNITE-14176 Calcite. Register system indexes
7ca32d3 is described below
commit 7ca32d33c0b0073a87ef6591af3b6ee8c6ea9eda
Author: Stanilovsky Evgeny <st...@gmail.com>
AuthorDate: Fri Mar 12 19:15:12 2021 +0300
IGNITE-14176 Calcite. Register system indexes
---
.../query/calcite/prepare/QueryPlanCacheImpl.java | 7 +-
.../query/calcite/schema/SchemaHolderImpl.java | 3 +-
.../query/calcite/schema/TableDescriptorImpl.java | 1 -
.../query/calcite/AggregatesIntegrationTest.java | 2 -
.../CalciteBasicSecondaryIndexIntegrationTest.java | 126 +++++++++++++++++++--
.../CalciteErrorHandlilngIntegrationTest.java | 2 +-
.../query/calcite/CalciteQueryProcessorTest.java | 4 +-
.../query/QuerySysIndexDescriptorImpl.java | 69 +++++++++++
.../query/schema/SchemaChangeListener.java | 3 +-
.../processors/query/h2/SchemaManager.java | 54 ++++++++-
.../query/h2/database/H2PkHashIndex.java | 1 -
.../processors/query/h2/opt/GridH2Table.java | 7 +-
12 files changed, 250 insertions(+), 29 deletions(-)
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryPlanCacheImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryPlanCacheImpl.java
index d05c653..53dec31 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryPlanCacheImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/QueryPlanCacheImpl.java
@@ -122,8 +122,11 @@ public class QueryPlanCacheImpl extends AbstractService implements QueryPlanCach
}
/** {@inheritDoc} */
- @Override public void onSqlTypeCreate(String schemaName, GridQueryTypeDescriptor typeDescriptor,
- GridCacheContextInfo<?, ?> cacheInfo) {
+ @Override public void onSqlTypeCreate(
+ String schemaName,
+ GridQueryTypeDescriptor typeDesc,
+ GridCacheContextInfo<?, ?> cacheInfo
+ ) {
// No-op
}
}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/SchemaHolderImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/SchemaHolderImpl.java
index bac2f37..9cfd787 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/SchemaHolderImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/SchemaHolderImpl.java
@@ -168,7 +168,8 @@ public class SchemaHolderImpl extends AbstractService implements SchemaHolder, S
@Override public synchronized void onSqlTypeCreate(
String schemaName,
GridQueryTypeDescriptor typeDesc,
- GridCacheContextInfo<?, ?> cacheInfo) {
+ GridCacheContextInfo<?, ?> cacheInfo
+ ) {
IgniteSchema schema = igniteSchemas.computeIfAbsent(schemaName, IgniteSchema::new);
String tblName = typeDesc.tableName();
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/TableDescriptorImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/TableDescriptorImpl.java
index 08d895f..1949415 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/TableDescriptorImpl.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/schema/TableDescriptorImpl.java
@@ -73,7 +73,6 @@ import static java.util.Collections.singletonList;
/**
*
*/
-@SuppressWarnings({"AssignmentOrReturnOfFieldWithMutableType", "rawtypes"})
public class TableDescriptorImpl extends NullInitializerExpressionFactory
implements TableDescriptor {
/** */
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/AggregatesIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/AggregatesIntegrationTest.java
index 26cef02..5eb8649 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/AggregatesIntegrationTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/AggregatesIntegrationTest.java
@@ -17,8 +17,6 @@
package org.apache.ignite.internal.processors.query.calcite;
-import org.apache.ignite.IgniteCache;
-import org.hamcrest.Matcher;
import org.junit.Test;
/**
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteBasicSecondaryIndexIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteBasicSecondaryIndexIntegrationTest.java
index 0c9de8d..a947333 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteBasicSecondaryIndexIntegrationTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteBasicSecondaryIndexIntegrationTest.java
@@ -23,9 +23,14 @@ import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.QueryEntity;
import org.apache.ignite.cache.QueryIndex;
import org.apache.ignite.cache.QueryIndexType;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.processors.query.GridQueryProcessor;
import org.apache.ignite.internal.processors.query.QueryEngine;
import org.apache.ignite.internal.processors.query.calcite.util.Commons;
+import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Ignore;
import org.junit.Test;
@@ -38,6 +43,9 @@ import static org.apache.ignite.internal.processors.query.calcite.QueryChecker.c
import static org.apache.ignite.internal.processors.query.calcite.QueryChecker.containsSubPlan;
import static org.apache.ignite.internal.processors.query.calcite.QueryChecker.containsTableScan;
import static org.apache.ignite.internal.processors.query.calcite.QueryChecker.containsUnion;
+import static org.apache.ignite.internal.processors.query.h2.H2TableDescriptor.AFFINITY_KEY_IDX_NAME;
+import static org.apache.ignite.internal.processors.query.h2.H2TableDescriptor.PK_IDX_NAME;
+import static org.apache.ignite.internal.processors.query.h2.opt.GridH2Table.generateProxyIdxName;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.not;
@@ -120,6 +128,46 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
devCache.put(22, new Developer("Prokofiev", 21, "", -1));
devCache.put(23, new Developer("Musorgskii", 22, "", -1));
+ IgniteCache<CalciteQueryProcessorTest.Key, CalciteQueryProcessorTest.Developer> tblWithAff =
+ grid.getOrCreateCache(new CacheConfiguration<CalciteQueryProcessorTest.Key, CalciteQueryProcessorTest.Developer>()
+ .setName("TBL_WITH_AFF_KEY")
+ .setSqlSchema("PUBLIC")
+ .setBackups(1)
+ .setQueryEntities(F.asList(new QueryEntity(CalciteQueryProcessorTest.Key.class, CalciteQueryProcessorTest.Developer.class)
+ .setTableName("TBL_WITH_AFF_KEY")))
+ );
+
+ tblWithAff.put(new CalciteQueryProcessorTest.Key(1, 2), new CalciteQueryProcessorTest.Developer("Petr", 10));
+ tblWithAff.put(new CalciteQueryProcessorTest.Key(2, 3), new CalciteQueryProcessorTest.Developer("Ivan", 11));
+
+ IgniteCache<Integer, CalciteQueryProcessorTest.Developer> tblConstrPk =
+ grid.getOrCreateCache(new CacheConfiguration<Integer, CalciteQueryProcessorTest.Developer>()
+ .setName("TBL_CONSTR_PK")
+ .setSqlSchema("PUBLIC")
+ .setBackups(0)
+ .setQueryEntities(F.asList(new QueryEntity(Integer.class, CalciteQueryProcessorTest.Developer.class)
+ .setTableName("TBL_CONSTR_PK")
+ .setKeyFieldName("id")
+ .addQueryField("id", Integer.class.getName(), null)))
+ );
+
+ tblConstrPk.put(1, new CalciteQueryProcessorTest.Developer("Petr", 10));
+ tblConstrPk.put(2, new CalciteQueryProcessorTest.Developer("Ivan", 11));
+
+ GridQueryProcessor qryProc = ((IgniteEx)grid).context().query();
+
+ qryProc.querySqlFields(new SqlFieldsQuery("CREATE TABLE PUBLIC.UNWRAP_PK" + " (F1 VARCHAR, F2 LONG, F3 LONG, F4 LONG, " +
+ "CONSTRAINT PK PRIMARY KEY (F2, F1)) WITH \"backups=0, affinity_key=F1\""), true).getAll();
+
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Petr', 1, 2, 3)"), true);
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan', 2, 2, 4)"), true);
+
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan1', 21, 2, 4)"), true);
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan2', 22, 2, 4)"), true);
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan3', 23, 2, 4)"), true);
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan4', 24, 2, 4)"), true);
+ qryProc.querySqlFields(new SqlFieldsQuery("INSERT INTO PUBLIC.UNWRAP_PK(F1, F2, F3, F4) values ('Ivan5', 25, 2, 4)"), true);
+
awaitPartitionMapExchange();
}
@@ -134,6 +182,23 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
/** */
@Test
+ public void testEqualsFilterWithUnwrpKey() {
+ assertQuery("SELECT F1 FROM UNWRAP_PK WHERE F2=2")
+ .matches(containsIndexScan("PUBLIC", "UNWRAP_PK", PK_IDX_NAME))
+ .returns("Ivan")
+ .check();
+ }
+
+ /** */
+ @Test
+ public void testEqualsFilterWithUnwrpKeyAndAff() {
+ assertQuery("SELECT F2 FROM UNWRAP_PK WHERE F1='Ivan'")
+ .matches(containsIndexScan("PUBLIC", "UNWRAP_PK", AFFINITY_KEY_IDX_NAME))
+ .check();
+ }
+
+ /** */
+ @Test
public void testIndexLoopJoin() {
assertQuery("" +
"SELECT /*+ DISABLE_RULE('MergeJoinConverter', 'NestedLoopJoinConverter') */ d1.name, d2.name FROM Developer d1, Developer d2 WHERE d1.id = d2.id")
@@ -237,16 +302,39 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
@Test
public void testKeyColumnEqualsFilter() {
assertQuery("SELECT * FROM Developer WHERE _key=1")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", PK_IDX_NAME))
+ .returns(1, "Mozart", 3, "Vienna", 33)
+ .check();
+
+ assertQuery("SELECT * FROM Developer WHERE id=1")
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(1, "Mozart", 3, "Vienna", 33)
.check();
}
/** */
@Test
+ public void testEqualsFilterWithAffIdx() {
+ assertQuery("SELECT * FROM TBL_WITH_AFF_KEY WHERE affinityKey=3")
+ .matches(containsIndexScan("PUBLIC", "TBL_WITH_AFF_KEY", AFFINITY_KEY_IDX_NAME))
+ .returns(2, 3, "Ivan", 11)
+ .check();
+ }
+
+ /** */
+ @Test
+ public void testEqualsFilterWithPkIdx1() {
+ assertQuery("SELECT * FROM TBL_CONSTR_PK WHERE id=2")
+ .matches(containsIndexScan("PUBLIC", "TBL_CONSTR_PK", generateProxyIdxName(PK_IDX_NAME)))
+ .returns("Ivan", 11, 2)
+ .check();
+ }
+
+ /** */
+ @Test
public void testKeyColumnGreaterThanFilter() {
assertQuery("SELECT * FROM Developer WHERE _key>3 and _key<12")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", PK_IDX_NAME))
.returns(4, "Strauss", 2, "Munich", 66)
.returns(5, "Vagner", 4, "Leipzig", 70)
.returns(6, "Chaikovsky", 5, "Votkinsk", 53)
@@ -263,7 +351,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
public void testKeyColumnGreaterThanOrEqualsFilter() {
assertQuery("SELECT * FROM Developer WHERE _key>=? and _key<=?")
.withParams(3, 11)
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", PK_IDX_NAME))
.returns(3, "Bach", 1, "Leipzig", 55)
.returns(4, "Strauss", 2, "Munich", 66)
.returns(5, "Vagner", 4, "Leipzig", 70)
@@ -303,7 +391,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
@Test
public void testKeyAliasEqualsFilter() {
assertQuery("SELECT * FROM Developer WHERE id=2")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(2, "Beethoven", 2, "Vienna", 44)
.check();
}
@@ -313,7 +401,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
public void testKeyAliasGreaterThanFilter() {
assertQuery("SELECT * FROM Developer WHERE id>? and id<?")
.withParams(3, 12)
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(4, "Strauss", 2, "Munich", 66)
.returns(5, "Vagner", 4, "Leipzig", 70)
.returns(6, "Chaikovsky", 5, "Votkinsk", 53)
@@ -329,7 +417,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
@Test
public void testKeyAliasGreaterThanOrEqualsFilter() {
assertQuery("SELECT * FROM Developer WHERE id>=3 and id<12")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(3, "Bach", 1, "Leipzig", 55)
.returns(4, "Strauss", 2, "Munich", 66)
.returns(5, "Vagner", 4, "Leipzig", 70)
@@ -346,7 +434,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
@Test
public void testKeyAliasLessThanFilter() {
assertQuery("SELECT * FROM Developer WHERE id<3")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(1, "Mozart", 3, "Vienna", 33)
.returns(2, "Beethoven", 2, "Vienna", 44)
.check();
@@ -356,7 +444,7 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
@Test
public void testKeyAliasLessThanOrEqualsFilter() {
assertQuery("SELECT * FROM Developer WHERE id<=2")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER", generateProxyIdxName(PK_IDX_NAME)))
.returns(1, "Mozart", 3, "Vienna", 33)
.returns(2, "Beethoven", 2, "Vienna", 44)
.check();
@@ -750,11 +838,10 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
}
/** */
- @Ignore("TODO")
@Test
public void testOrderByKeyAlias() {
- assertQuery("SELECT * FROM Developer ORDER BY id")
- .matches(containsTableScan("PUBLIC", "DEVELOPER"))
+ assertQuery("SELECT * FROM Developer WHERE id<=4 ORDER BY id")
+ .matches(containsIndexScan("PUBLIC", "DEVELOPER"))
.matches(not(containsSubPlan("IgniteSort")))
.returns(1, "Mozart", 3, "Vienna", 33)
.returns(2, "Beethoven", 2, "Vienna", 44)
@@ -956,4 +1043,21 @@ public class CalciteBasicSecondaryIndexIntegrationTest extends GridCommonAbstrac
'}';
}
}
+
+ /** */
+ public static class Key {
+ /** */
+ @QuerySqlField
+ public int id;
+
+ /** */
+ @QuerySqlField
+ public int id2;
+
+ /** */
+ public Key(int id, int id2) {
+ this.id = id;
+ this.id2 = id2;
+ }
+ }
}
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteErrorHandlilngIntegrationTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteErrorHandlilngIntegrationTest.java
index 43733f8..82e52a2 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteErrorHandlilngIntegrationTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteErrorHandlilngIntegrationTest.java
@@ -174,7 +174,7 @@ public class CalciteErrorHandlilngIntegrationTest extends GridCommonAbstractTest
BPlusTree.Result res =
delegate.run(cacheId, pageId, page, pageAddr, io, walPlc, arg, intArg, statHolder);
- if (shouldThrow.get() && tree instanceof H2Tree)
+ if (shouldThrow.get() && (tree instanceof H2Tree))
throw new RuntimeException("test exception");
return res;
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessorTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessorTest.java
index 50d77cd..ac1b6ca0 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessorTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/CalciteQueryProcessorTest.java
@@ -682,7 +682,7 @@ public class CalciteQueryProcessorTest extends GridCommonAbstractTest {
/** */
@Test
public void testInsertPrimitiveKey() throws Exception {
- IgniteCache<Integer, Developer> developer = grid(1).getOrCreateCache(new CacheConfiguration<Integer, Developer>()
+ grid(1).getOrCreateCache(new CacheConfiguration<Integer, Developer>()
.setName("developer")
.setSqlSchema("PUBLIC")
.setIndexedTypes(Integer.class, Developer.class)
@@ -719,7 +719,7 @@ public class CalciteQueryProcessorTest extends GridCommonAbstractTest {
/** */
@Test
public void testInsertUpdateDeleteNonPrimitiveKey() throws Exception {
- IgniteCache<Key, Developer> developer = client.getOrCreateCache(new CacheConfiguration<Key, Developer>()
+ client.getOrCreateCache(new CacheConfiguration<Key, Developer>()
.setName("developer")
.setSqlSchema("PUBLIC")
.setIndexedTypes(Key.class, Developer.class)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySysIndexDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySysIndexDescriptorImpl.java
new file mode 100644
index 0000000..b7e9b0d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QuerySysIndexDescriptorImpl.java
@@ -0,0 +1,69 @@
+/*
+ * 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.processors.query;
+
+import java.util.Collection;
+import org.apache.ignite.cache.QueryIndexType;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+/**
+ * Sys Indexes descriptor.
+ */
+public class QuerySysIndexDescriptorImpl implements GridQueryIndexDescriptor {
+ /** Index name. */
+ private final String name;
+
+ /** Index fields. */
+ private final Collection<String> fields;
+
+ /**
+ * Constructor.
+ *
+ * @param name Index name.
+ * @param fields Index fields.
+ */
+ public QuerySysIndexDescriptorImpl(String name, Collection<String> fields) {
+ this.name = name;
+ this.fields = fields;
+ }
+
+ /** {@inheritDoc} */
+ @Override public String name() {
+ return name;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Collection<String> fields() {
+ return fields;
+ }
+
+ /** {@inheritDoc} */
+ @Override public boolean descending(String field) {
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override public QueryIndexType type() {
+ throw new NotImplementedException();
+ }
+
+ /** {@inheritDoc} */
+ @Override public int inlineSize() {
+ throw new NotImplementedException();
+ }
+}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaChangeListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaChangeListener.java
index adc6112..78f03aa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaChangeListener.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/SchemaChangeListener.java
@@ -47,8 +47,7 @@ public interface SchemaChangeListener {
* @param typeDesc type descriptor.
* @param cacheInfo Cache info.
*/
- void onSqlTypeCreate(String schemaName, GridQueryTypeDescriptor typeDesc,
- GridCacheContextInfo<?, ?> cacheInfo);
+ void onSqlTypeCreate(String schemaName, GridQueryTypeDescriptor typeDesc, GridCacheContextInfo<?, ?> cacheInfo);
/**
* Callback method.
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
index 1d269e5..4c1f432 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/SchemaManager.java
@@ -31,6 +31,9 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteException;
import org.apache.ignite.IgniteLogger;
@@ -52,8 +55,11 @@ import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
import org.apache.ignite.internal.processors.query.IgniteSQLException;
import org.apache.ignite.internal.processors.query.QueryField;
import org.apache.ignite.internal.processors.query.QueryIndexDescriptorImpl;
+import org.apache.ignite.internal.processors.query.QuerySysIndexDescriptorImpl;
import org.apache.ignite.internal.processors.query.QueryUtils;
+import org.apache.ignite.internal.processors.query.h2.database.H2TreeIndexBase;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2ProxyIndex;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor;
import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
import org.apache.ignite.internal.processors.query.h2.sys.SqlSystemTableEngine;
@@ -74,6 +80,7 @@ import org.apache.ignite.spi.systemview.view.SqlTableView;
import org.apache.ignite.spi.systemview.view.SqlViewColumnView;
import org.apache.ignite.spi.systemview.view.SqlViewView;
import org.h2.index.Index;
+import org.h2.table.Column;
import org.jetbrains.annotations.Nullable;
import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
@@ -555,6 +562,8 @@ public class SchemaManager {
lsnr.onSqlTypeCreate(schemaName, tbl.type(), tbl.cacheInfo());
+ registerSystemIndexes(h2Tbl, schemaName, tbl);
+
for (GridH2IndexBase usrIdx : tbl.createUserIndexes())
createInitialUserIndex(schemaName, tbl, usrIdx);
@@ -562,6 +571,35 @@ public class SchemaManager {
}
/**
+ * Registers all available indexes.
+ *
+ * @param h2Tbl Table representation.
+ * @param schemaName Current schema.
+ * @param tbl Table descriptor.
+ */
+ private void registerSystemIndexes(GridH2Table h2Tbl, String schemaName, H2TableDescriptor tbl) {
+ Collection<Index> sysIdxs = h2Tbl.getIndexes().stream()
+ .filter(idx -> (idx instanceof H2TreeIndexBase) || ((idx instanceof GridH2ProxyIndex)
+ && ((GridH2ProxyIndex)idx).underlyingIndex() instanceof H2TreeIndexBase))
+ .collect(Collectors.toList());
+
+ for (Index idx : sysIdxs) {
+ Collection<String> idxCols = Stream.of(idx.getColumns())
+ .map(Column::getName)
+ .collect(Collectors.toList());
+
+ String idxName = idx.getName();
+
+ if (idx instanceof GridH2ProxyIndex)
+ idx = ((GridH2ProxyIndex)idx).underlyingIndex();
+
+ QuerySysIndexDescriptorImpl desc = new QuerySysIndexDescriptorImpl(idxName, idxCols);
+
+ lsnr.onIndexCreate(schemaName, tbl.tableName(), idxName, desc, (GridIndex<?>)idx);
+ }
+ }
+
+ /**
* Drops table form h2 database and clear all related indexes (h2 text, lucene).
*
* @param tbl Table to unregister.
@@ -880,8 +918,11 @@ public class SchemaManager {
@Override public void onIndexDrop(String schemaName, String tblName, String idxName) {}
/** {@inheritDoc} */
- @Override public void onSqlTypeCreate(String schemaName, GridQueryTypeDescriptor typeDescriptor,
- GridCacheContextInfo<?,?> cacheInfo) {}
+ @Override public void onSqlTypeCreate(
+ String schemaName,
+ GridQueryTypeDescriptor typeDesc,
+ GridCacheContextInfo<?, ?> cacheInfo
+ ) {}
/** {@inheritDoc} */
@Override public void onSqlTypeDrop(String schemaName, GridQueryTypeDescriptor typeDescriptor) {}
@@ -907,9 +948,12 @@ public class SchemaManager {
}
/** {@inheritDoc} */
- @Override public void onSqlTypeCreate(String schemaName, GridQueryTypeDescriptor typeDescriptor,
- GridCacheContextInfo<?,?> cacheInfo) {
- lsnrs.forEach(lsnr -> lsnr.onSqlTypeCreate(schemaName, typeDescriptor, cacheInfo));
+ @Override public void onSqlTypeCreate(
+ String schemaName,
+ GridQueryTypeDescriptor typeDesc,
+ GridCacheContextInfo<?, ?> cacheInfo
+ ) {
+ lsnrs.forEach(lsnr -> lsnr.onSqlTypeCreate(schemaName, typeDesc, cacheInfo));
}
/** {@inheritDoc} */
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
index c56194e..73aef73 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
@@ -69,7 +69,6 @@ public class H2PkHashIndex extends GridH2IndexBase {
* @param colsList Index columns.
* @param segments Segments.
*/
- @SuppressWarnings("ZeroLengthArrayAllocation")
public H2PkHashIndex(
GridCacheContext<?, ?> cctx,
GridH2Table tbl,
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
index 39e1735..39b6e6f 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
@@ -1424,7 +1424,7 @@ public class GridH2Table extends TableBase {
}
if (modified) {
- String proxyName = target.getName() + "_proxy";
+ String proxyName = generateProxyIdxName(target.getName());
if (target.getIndexType().isSpatial())
return new GridH2ProxySpatialIndex(this, proxyName, proxyCols, target);
@@ -1435,6 +1435,11 @@ public class GridH2Table extends TableBase {
return null;
}
+ /** */
+ public static String generateProxyIdxName(String idxName) {
+ return idxName + "_proxy";
+ }
+
/**
* Add new columns to this table.
*