ignite-sql-tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/323af75a Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/323af75a Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/323af75a Branch: refs/heads/ignite-sql-tests Commit: 323af75a5ec1537b30fc8208b7d71de747011351 Parents: abfa555 Author: S.Vladykin <svlady...@gridgain.com> Authored: Tue Feb 24 02:06:21 2015 +0300 Committer: S.Vladykin <svlady...@gridgain.com> Committed: Tue Feb 24 02:06:21 2015 +0300 ---------------------------------------------------------------------- .../processors/query/GridQueryProcessor.java | 38 +++++++++------- .../processors/query/h2/IgniteH2Indexing.java | 48 ++++++++------------ .../query/h2/sql/GridQueryParsingTest.java | 6 ++- 3 files changed, 45 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/323af75a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java index b57ff27..3baba76 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java @@ -111,13 +111,9 @@ public class GridQueryProcessor extends GridProcessorAdapter { public void initializeCache(CacheConfiguration<?, ?> ccfg) throws IgniteCheckedException { Map<TypeName,CacheTypeMetadata> declaredTypes = new HashMap<>(); - boolean cacheRegistered = false; + idx.registerCache(ccfg); if (!F.isEmpty(ccfg.getTypeMetadata())) { - idx.registerCache(ccfg); - - cacheRegistered = true; - for (CacheTypeMetadata meta : ccfg.getTypeMetadata()) { declaredTypes.put(new TypeName(ccfg.getName(), meta.getValueType()), meta); @@ -125,7 +121,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { portableIds.put(valTypeId, meta.getValueType()); - TypeDescriptor desc = processPortableMeta(meta); + TypeDescriptor desc = processPortableMeta(ccfg, meta); desc.registered(idx.registerType(ccfg.getName(), desc)); @@ -135,11 +131,8 @@ public class GridQueryProcessor extends GridProcessorAdapter { } if (!F.isEmpty(ccfg.getIndexedTypes())) { - if (!cacheRegistered) - idx.registerCache(ccfg); - for (IgniteBiTuple<Class<?>,Class<?>> types : ccfg.getIndexedTypes()) { - TypeDescriptor desc = processKeyAndValue(ccfg.getName(), types.getKey(), types.getValue(), + TypeDescriptor desc = processKeyAndValue(ccfg, types.getKey(), types.getValue(), declaredTypes); desc.registered(idx.registerType(ccfg.getName(), desc)); @@ -150,22 +143,22 @@ public class GridQueryProcessor extends GridProcessorAdapter { } /** - * @param space Space. + * @param ccfg Cache configuration. * @param keyCls Key class. * @param valCls Value class. * @param declaredTypes Knows types. * @return Type descriptor. * @throws IgniteCheckedException If failed. */ - private TypeDescriptor processKeyAndValue(String space, Class<?> keyCls, Class<?> valCls, + private TypeDescriptor processKeyAndValue(CacheConfiguration<?,?> ccfg, Class<?> keyCls, Class<?> valCls, Map<TypeName,CacheTypeMetadata> declaredTypes) throws IgniteCheckedException { - TypeDescriptor d = new TypeDescriptor(); + TypeDescriptor d = new TypeDescriptor(ccfg); d.keyClass(keyCls); d.valueClass(valCls); - CacheTypeMetadata keyMeta = declaredTypes.get(new TypeName(space, keyCls.getName())); + CacheTypeMetadata keyMeta = declaredTypes.get(new TypeName(ccfg.getName(), keyCls.getName())); if (keyMeta == null) processAnnotationsInClass(true, d.keyCls, d, null); @@ -176,7 +169,7 @@ public class GridQueryProcessor extends GridProcessorAdapter { d.name(valTypeName); - CacheTypeMetadata typeMeta = declaredTypes.get(new TypeName(space, valCls.getName())); + CacheTypeMetadata typeMeta = declaredTypes.get(new TypeName(ccfg.getName(), valCls.getName())); if (typeMeta == null) processAnnotationsInClass(false, d.valCls, d, null); @@ -973,13 +966,14 @@ public class GridQueryProcessor extends GridProcessorAdapter { /** * Processes declarative metadata for portable object. * + * @param ccfg Cache configuration. * @param meta Declared metadata. * @return Type descriptor. * @throws IgniteCheckedException If failed. */ - private TypeDescriptor processPortableMeta(CacheTypeMetadata meta) + private TypeDescriptor processPortableMeta(CacheConfiguration<?,?> ccfg, CacheTypeMetadata meta) throws IgniteCheckedException { - TypeDescriptor d = new TypeDescriptor(); + TypeDescriptor d = new TypeDescriptor(ccfg); for (Map.Entry<String, Class<?>> entry : meta.getAscendingFields().entrySet()) { PortableProperty prop = buildPortableProperty(entry.getKey(), entry.getValue()); @@ -1386,6 +1380,9 @@ public class GridQueryProcessor extends GridProcessorAdapter { */ private static class TypeDescriptor implements GridQueryTypeDescriptor { /** */ + private CacheConfiguration<?,?> ccfg; + + /** */ private String name; /** Value field names and types with preserved order. */ @@ -1416,6 +1413,13 @@ public class GridQueryProcessor extends GridProcessorAdapter { private boolean registered; /** + * @param ccfg Cache configuration. + */ + private TypeDescriptor(CacheConfiguration<?,?> ccfg) { + this.ccfg = ccfg; + } + + /** * @return {@code True} if type registration in SPI was finished and type was not rejected. */ boolean registered() { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/323af75a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java index 0c4bfde..b45a2ef 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java @@ -249,7 +249,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { * @throws IgniteCheckedException If failed to create db schema. */ private void createSchema(String schema) throws IgniteCheckedException { - executeStatement(schema(null), "CREATE SCHEMA \"" + schema + '"'); + executeStatement("INFORMATION_SCHEMA", "CREATE SCHEMA IF NOT EXISTS \"" + schema + '"'); if (log.isDebugEnabled()) log.debug("Created H2 schema for index database: " + schema); @@ -855,10 +855,6 @@ public class IgniteH2Indexing implements GridQueryIndexing { throw new IgniteCheckedException(MessageFormat.format(ptrn, name)); } - Schema s = schemas.get(spaceName); - - - return true; } @@ -913,7 +909,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { assert schema != null; assert tbl != null; - boolean escapeAll = isEscapeAll(schema.spaceName); + boolean escapeAll = schema.escapeAll; String keyType = dbTypeFromClass(tbl.type().keyClass()); String valTypeStr = dbTypeFromClass(tbl.type().valueClass()); @@ -997,8 +993,8 @@ public class IgniteH2Indexing implements GridQueryIndexing { * @return Schema name. */ private static String schema(@Nullable String space) { - if (F.isEmpty(space)) - return "PUBLIC"; + if (space == null) + return ""; return space; } @@ -1007,12 +1003,12 @@ public class IgniteH2Indexing implements GridQueryIndexing { @Override public void rebuildIndexes(@Nullable String spaceName, GridQueryTypeDescriptor type) { TableDescriptor tbl = tableDescriptor(spaceName, type); - if (tbl.schema.offheap != null) - throw new UnsupportedOperationException("Index rebuilding is not supported when off-heap memory is used"); - if (tbl == null) return; + if (tbl.schema.offheap != null) + throw new UnsupportedOperationException("Index rebuilding is not supported when off-heap memory is used"); + tbl.tbl.rebuildIndexes(); } @@ -1068,12 +1064,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { dbUrl = "jdbc:h2:mem:" + dbName + DB_OPTIONS; - try { - Class.forName("org.h2.Driver"); - } - catch (ClassNotFoundException e) { - throw new IgniteCheckedException("Failed to find org.h2.Driver class", e); - } + org.h2.Driver.load(); try { if (getString(IGNITE_H2_DEBUG_CONSOLE) != null) { @@ -1267,19 +1258,14 @@ public class IgniteH2Indexing implements GridQueryIndexing { } /** {@inheritDoc} */ - public boolean isEscapeAll(String spaceName) { - return ctx.cache().cache(spaceName).configuration().isSqlEscapeAll(); - } - - /** {@inheritDoc} */ public void registerCache(CacheConfiguration<?,?> ccfg) throws IgniteCheckedException { String schema = schema(ccfg.getName()); - createSchema(schema); - - schemas.put(schema, new Schema(schema, ccfg.getOffHeapMaxMemory() >= 0 ? new GridUnsafeMemory(0) : null, - ccfg.getSqlOnheapRowCacheSize())); + if (schemas.putIfAbsent(schema, new Schema(ccfg.getName(), ccfg.getOffHeapMaxMemory() >= 0 ? + new GridUnsafeMemory(0) : null, ccfg.getSqlOnheapRowCacheSize(), ccfg.isSqlEscapeAll())) != null) + throw new IgniteCheckedException("Cache already registered: " + ccfg.getName()); + createSchema(schema); createSqlFunctions(schema, ccfg.getSqlFunctionClasses()); } @@ -1509,7 +1495,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { this.schema = schema; fullTblName = '\"' + IgniteH2Indexing.schema(schema.spaceName) + "\"." + - escapeName(type.name(), isEscapeAll(schema.spaceName)); + escapeName(type.name(), schema.escapeAll); } /** @@ -1579,7 +1565,7 @@ public class IgniteH2Indexing implements GridQueryIndexing { int i = 0; - boolean escapeAll = isEscapeAll(schema.spaceName); + boolean escapeAll = schema.escapeAll; for (String field : idx.fields()) { // H2 reserved keywords used as column name is case sensitive. @@ -1791,13 +1777,17 @@ public class IgniteH2Indexing implements GridQueryIndexing { /** Cache for deserialized offheap rows. */ private final CacheLongKeyLIRS<GridH2KeyValueRowOffheap> rowCache; + /** */ + private final boolean escapeAll; + /** * @param spaceName Space name. * @param offheap Offheap memory. */ - private Schema(@Nullable String spaceName, GridUnsafeMemory offheap, int onheapCacheSize) { + private Schema(@Nullable String spaceName, GridUnsafeMemory offheap, int onheapCacheSize, boolean escapeAll) { this.spaceName = spaceName; this.offheap = offheap; + this.escapeAll = escapeAll; if (offheap != null) rowCache = new CacheLongKeyLIRS<>(onheapCacheSize, 1, 128, 256); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/323af75a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java index 7748d6c..ffd23dd 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java @@ -24,6 +24,7 @@ import org.apache.ignite.configuration.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.processors.query.*; import org.apache.ignite.internal.processors.query.h2.*; +import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.optimized.*; import org.apache.ignite.spi.discovery.tcp.*; @@ -75,6 +76,9 @@ public class GridQueryParsingTest extends GridCommonAbstractTest { cc.setPreloadMode(SYNC); cc.setSwapEnabled(false); cc.setSqlFunctionClasses(GridQueryParsingTest.class); + cc.setIndexedTypes( + F.<Class<?>,Class<?>>t(String.class, Address.class), + F.<Class<?>,Class<?>>t(String.class, Person.class)); c.setCacheConfiguration(cc); @@ -198,7 +202,7 @@ public class GridQueryParsingTest extends GridCommonAbstractTest { checkQuery("select street from Person p, (select a.street from Address a where a.street is not null) "); checkQuery("select addr.street from Person p, (select a.street from Address a where a.street is not null) addr"); - checkQuery("select p.name n from PUBLIC.Person p order by p.old + 10"); + checkQuery("select p.name n from \"\".Person p order by p.old + 10"); } /**