From 046db62914711f6969fdeca13e587c6f5ebfb408 Mon Sep 17 00:00:00 2001 From: Dmitry Werner Date: Mon, 25 May 2026 11:30:43 +0500 Subject: [PATCH 1/2] first --- .../org/apache/ignite/cache/QueryEntity.java | 2 +- .../ignite/internal/CoreMessagesProvider.java | 2 + .../processors/cache/StoredCacheData.java | 28 ++-- .../processors/query/QueryEntityMessage.java | 147 ++++++++++++++++++ .../SchemaAddQueryEntityOperation.java | 33 +--- 5 files changed, 165 insertions(+), 47 deletions(-) create mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java diff --git a/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java b/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java index 567b8f1b15ff6..4bb25686e9b58 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/QueryEntity.java @@ -97,7 +97,7 @@ public class QueryEntity implements Serializable { /** Fields default values. */ private Map defaultFieldValues = new HashMap<>(); - /** Precision(Maximum length) for fields. */ + /** Precision (maximum length) for fields. */ private Map fieldsPrecision = new HashMap<>(); /** Scale for fields. */ diff --git a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java index b3666694a15dd..569ff874c7edd 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java @@ -206,6 +206,7 @@ import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateAckMessage; import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateMessage; import org.apache.ignite.internal.processors.query.InlineSizesData; +import org.apache.ignite.internal.processors.query.QueryEntityMessage; import org.apache.ignite.internal.processors.query.QueryField; import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest; import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse; @@ -578,6 +579,7 @@ public CoreMessagesProvider(Marshaller dfltMarsh, Marshaller schemaAwareMarsh, C withNoSchema(CacheContinuousQueryBatchAck.class); withSchema(CacheContinuousQueryEntry.class); withNoSchema(InlineSizesData.class); + withNoSchema(QueryEntityMessage.class); // [11200 - 11300]: Compute, distributed process messages. msgIdx = 11200; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java index dc94809a9446c..26fc18b94e5e8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java @@ -27,7 +27,9 @@ import org.apache.ignite.internal.Order; import org.apache.ignite.internal.managers.encryption.GroupKeyEncrypted; import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager; +import org.apache.ignite.internal.processors.query.QueryEntityMessage; import org.apache.ignite.internal.util.tostring.GridToStringInclude; +import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; @@ -57,13 +59,10 @@ public class StoredCacheData implements Serializable, CdcCacheEvent, Marshallabl @Order(0) transient byte[] ccfgBytes; - /** Query entities. */ - @GridToStringInclude - private Collection qryEntities; - - /** Serialized {@link #qryEntities}. */ + /** Query entity messages. */ @Order(1) - transient byte[] qryEntitiesBytes; + @GridToStringInclude + Collection entityMsgs; /** SQL flag - {@code true} if cache was created with {@code CREATE TABLE}. */ @Order(2) @@ -97,7 +96,7 @@ public StoredCacheData(CacheConfiguration ccfg) { A.notNull(ccfg, "ccfg"); this.ccfg = ccfg; - qryEntities = ccfg.getQueryEntities(); + entityMsgs = F.viewReadOnly(ccfg.getQueryEntities(), QueryEntityMessage::new); } /** @@ -105,7 +104,7 @@ public StoredCacheData(CacheConfiguration ccfg) { */ public StoredCacheData(StoredCacheData cacheData) { ccfg = cacheData.ccfg; - qryEntities = cacheData.qryEntities; + entityMsgs = cacheData.entityMsgs; sql = cacheData.sql; cacheConfigurationEnrichment = cacheData.cacheConfigurationEnrichment; grpKeyEncrypted = cacheData.grpKeyEncrypted; @@ -129,14 +128,14 @@ public void config(CacheConfiguration ccfg) { * @return Query entities. */ @Override public Collection queryEntities() { - return qryEntities; + return F.viewReadOnly(entityMsgs, QueryEntityMessage::queryEntity); } /** * @param qryEntities Query entities. */ public void queryEntities(Collection qryEntities) { - this.qryEntities = qryEntities; + entityMsgs = F.viewReadOnly(qryEntities, QueryEntityMessage::new); } /** @@ -228,9 +227,6 @@ public StoredCacheData withSplittedCacheConfig(CacheConfigurationSplitter splitt @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { if (ccfg != null) ccfgBytes = U.marshal(marsh, ccfg); - - if (qryEntities != null) - qryEntitiesBytes = U.marshal(marsh, qryEntities); } /** {@inheritDoc} */ @@ -240,11 +236,5 @@ public StoredCacheData withSplittedCacheConfig(CacheConfigurationSplitter splitt ccfgBytes = null; } - - if (qryEntitiesBytes != null) { - qryEntities = U.unmarshal(marsh, qryEntitiesBytes, clsLdr); - - qryEntitiesBytes = null; - } } } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java new file mode 100644 index 0000000000000..4bf4e92d94296 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java @@ -0,0 +1,147 @@ +/* + * 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.io.Serializable; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import org.apache.ignite.cache.QueryEntity; +import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.cache.query.QueryIndexMessage; +import org.apache.ignite.internal.util.tostring.GridToStringInclude; +import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.plugin.extensions.communication.MessageFactory; +import org.apache.ignite.spi.discovery.ObjectData; + +/** Message for {@link QueryEntity}. */ +public class QueryEntityMessage implements Serializable, Message { + /** */ + private static final long serialVersionUID = 0L; + + /** Key type. */ + @Order(0) + String keyType; + + /** Value type. */ + @Order(1) + String valType; + + /** Key name. */ + @Order(2) + String keyFieldName; + + /** Value name. */ + @Order(3) + String valFieldName; + + /** Fields available for query. A map from field name to type name. */ + @Order(4) + @GridToStringInclude + LinkedHashMap fields; + + /** Set of field names that belong to the key. */ + @Order(5) + @GridToStringInclude + Set keyFields; + + /** Aliases. */ + @Order(6) + @GridToStringInclude + Map aliases; + + /** Collection of query indexes. */ + @Order(7) + @GridToStringInclude + Collection idxs; + + /** Table name. */ + @Order(8) + String tableName; + + /** Fields that must have non-null value. NB: DO NOT remove underscore to avoid clashes with QueryEntityEx. */ + @Order(9) + Set notNullFields; + + /** Fields default values. */ + @Order(10) + Map dfltFieldValues; + + /** Precision (maximum length) for fields. */ + @Order(11) + Map fieldsPrecision; + + /** Scale for fields. */ + @Order(12) + Map fieldsScale; + + /** Empty constructor for {@link MessageFactory}. */ + public QueryEntityMessage() { + // No-op. + } + + /** Copies {@code qryEntity}. */ + public QueryEntityMessage(QueryEntity qryEntity) { + assert qryEntity != null; + + keyType = qryEntity.getKeyType(); + valType = qryEntity.getValueType(); + keyFieldName = qryEntity.getKeyFieldName(); + valFieldName = qryEntity.getValueFieldName(); + fields = qryEntity.getFields(); + keyFields = qryEntity.getKeyFields(); + aliases = qryEntity.getAliases(); + idxs = F.viewReadOnly(qryEntity.getIndexes(), QueryIndexMessage::new); + tableName = qryEntity.getTableName(); + notNullFields = qryEntity.getNotNullFields(); + dfltFieldValues = F.viewReadOnly(qryEntity.getDefaultFieldValues(), val -> new ObjectData((Serializable)val)); + fieldsPrecision = qryEntity.getFieldsPrecision(); + fieldsScale = qryEntity.getFieldsScale(); + } + + /** @return Copy of {@code msg} as {@link QueryEntity}. */ + public static QueryEntity queryEntity(QueryEntityMessage msg) { + assert msg != null; + + QueryEntity res = new QueryEntity(); + + res.setKeyType(msg.keyType); + res.setValueType(msg.valType); + res.setKeyFieldName(msg.keyFieldName); + res.setValueFieldName(msg.valFieldName); + res.setFields(msg.fields); + res.setKeyFields(msg.keyFields); + res.setAliases(msg.aliases); + res.setIndexes(F.viewReadOnly(msg.idxs, QueryIndexMessage::queryIndex)); + res.setTableName(msg.tableName); + res.setNotNullFields(msg.notNullFields); + res.setDefaultFieldValues(F.viewReadOnly(msg.dfltFieldValues, ObjectData::unwrap)); + res.setFieldsPrecision(msg.fieldsPrecision); + res.setFieldsScale(msg.fieldsScale); + + return res; + } + + /** {@inheritDoc} */ + @Override public String toString() { + return S.toString(QueryEntityMessage.class, this); + } +} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java index ebb23aff57ea9..ff75ab08b2fda 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java @@ -19,26 +19,21 @@ import java.util.Collection; import java.util.UUID; -import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.cache.QueryEntity; -import org.apache.ignite.internal.MarshallableMessage; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.marshaller.Marshaller; +import org.apache.ignite.internal.processors.query.QueryEntityMessage; +import org.apache.ignite.internal.util.typedef.F; /** * Enabling indexing on cache operation. */ -public class SchemaAddQueryEntityOperation extends SchemaAbstractOperation implements MarshallableMessage { +public class SchemaAddQueryEntityOperation extends SchemaAbstractOperation { /** */ private static final long serialVersionUID = 0L; /** */ - private Collection entities; - - /** Serialized form of query entities. */ @Order(0) - transient byte[] qryEntitiesBytes; + Collection entityMsgs; /** */ @Order(1) @@ -68,7 +63,7 @@ public SchemaAddQueryEntityOperation( boolean sqlEscape ) { super(opId, cacheName, schemaName); - this.entities = entities; + entityMsgs = F.viewReadOnly(entities, QueryEntityMessage::new); this.qryParallelism = qryParallelism; this.sqlEscape = sqlEscape; } @@ -77,7 +72,7 @@ public SchemaAddQueryEntityOperation( * @return Collection of query entities. */ public Collection entities() { - return entities; + return F.viewReadOnly(entityMsgs, QueryEntityMessage::queryEntity); } /** @@ -93,20 +88,4 @@ public int queryParallelism() { public boolean isSqlEscape() { return sqlEscape; } - - /** {@inheritDoc} */ - @Override public void prepareMarshal(Marshaller marsh) throws IgniteCheckedException { - if (entities != null) - qryEntitiesBytes = U.marshal(marsh, entities); - } - - /** {@inheritDoc} */ - @Override public void finishUnmarshal(Marshaller marsh, ClassLoader clsLdr) throws IgniteCheckedException { - if (qryEntitiesBytes != null) { - entities = U.unmarshal(marsh, qryEntitiesBytes, clsLdr); - - qryEntitiesBytes = null; - } - } - } From 2e2c908de4b863851a06cb4e079b8b43a4fa4baf Mon Sep 17 00:00:00 2001 From: Dmitry Werner Date: Mon, 25 May 2026 12:04:57 +0500 Subject: [PATCH 2/2] dto -> message --- .../ignite/internal/CoreMessagesProvider.java | 4 +- .../management/cache/QueryEntity.java | 50 ++++-- .../processors/cache/StoredCacheData.java | 20 ++- .../processors/query/QueryEntityMessage.java | 147 ------------------ .../SchemaAddQueryEntityOperation.java | 14 +- 5 files changed, 57 insertions(+), 178 deletions(-) delete mode 100644 modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java diff --git a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java index 569ff874c7edd..fb39ebe871ff9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/CoreMessagesProvider.java @@ -24,6 +24,7 @@ import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyDefinition; import org.apache.ignite.internal.cache.query.index.sorted.IndexKeyTypeSettings; import org.apache.ignite.internal.management.cache.PartitionKey; +import org.apache.ignite.internal.management.cache.QueryEntity; import org.apache.ignite.internal.managers.checkpoint.GridCheckpointRequest; import org.apache.ignite.internal.managers.communication.CompressedMessage; import org.apache.ignite.internal.managers.communication.ErrorMessage; @@ -206,7 +207,6 @@ import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateAckMessage; import org.apache.ignite.internal.processors.metastorage.persistence.DistributedMetaStorageUpdateMessage; import org.apache.ignite.internal.processors.query.InlineSizesData; -import org.apache.ignite.internal.processors.query.QueryEntityMessage; import org.apache.ignite.internal.processors.query.QueryField; import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest; import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse; @@ -579,7 +579,7 @@ public CoreMessagesProvider(Marshaller dfltMarsh, Marshaller schemaAwareMarsh, C withNoSchema(CacheContinuousQueryBatchAck.class); withSchema(CacheContinuousQueryEntry.class); withNoSchema(InlineSizesData.class); - withNoSchema(QueryEntityMessage.class); + withNoSchema(QueryEntity.class); // [11200 - 11300]: Compute, distributed process messages. msgIdx = 11200; diff --git a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/QueryEntity.java b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/QueryEntity.java index 63fce52f5e0e1..01b0dabe69c87 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/management/cache/QueryEntity.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/management/cache/QueryEntity.java @@ -17,21 +17,25 @@ package org.apache.ignite.internal.management.cache; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.dto.IgniteDataTransferObject; +import org.apache.ignite.internal.cache.query.QueryIndexMessage; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.internal.S; +import org.apache.ignite.plugin.extensions.communication.Message; +import org.apache.ignite.plugin.extensions.communication.MessageFactory; /** - * Data transfer object for {@link org.apache.ignite.cache.QueryEntity}. + * Message for {@link org.apache.ignite.cache.QueryEntity}. */ -public class QueryEntity extends IgniteDataTransferObject { +public class QueryEntity implements Message, Serializable { /** */ private static final long serialVersionUID = 0L; @@ -69,11 +73,11 @@ public class QueryEntity extends IgniteDataTransferObject { /** Fields to create group indexes for. */ @Order(8) - List grps; + List grps; /** * @param qryEntities Collection of query entities. - * @return Data transfer object for query entities. + * @return Messages for query entities. */ public static List list(Collection qryEntities) { List entities = new ArrayList<>(); @@ -87,14 +91,40 @@ public static List list(Collection unwrapList(Collection qryEntities) { + Collection entities = new ArrayList<>(); + + if (!F.isEmpty(qryEntities)) { + for (QueryEntity entityDto : qryEntities) { + org.apache.ignite.cache.QueryEntity entity = new org.apache.ignite.cache.QueryEntity(); + + entity.setKeyType(entityDto.keyType); + entity.setValueType(entityDto.valType); + entity.setFields((LinkedHashMap)entityDto.qryFlds); + entity.setKeyFields(new LinkedHashSet<>(entityDto.keyFields)); + entity.setAliases(entityDto.aliases); + entity.setTableName(entityDto.tblName); + entity.setKeyFieldName(entityDto.keyFieldName); + entity.setValueFieldName(entityDto.valFieldName); + entity.setIndexes(F.viewReadOnly(entityDto.grps, QueryIndexMessage::queryIndex)); + + entities.add(entity); + } + } + + return entities; + } + + /** Empty constructor for a {@link MessageFactory}. */ public QueryEntity() { // No-op. } /** - * Create data transfer object for given cache type metadata. + * Create message for given cache type metadata. * * @param q Actual cache query entities. */ @@ -104,7 +134,7 @@ private QueryEntity(org.apache.ignite.cache.QueryEntity q) { keyType = q.getKeyType(); valType = q.getValueType(); - keyFields = toList(q.getKeyFields()); + keyFields = q.getKeyFields() != null ? new ArrayList<>(q.getKeyFields()) : null; LinkedHashMap qryFields = q.getFields(); @@ -117,7 +147,7 @@ private QueryEntity(org.apache.ignite.cache.QueryEntity q) { grps = new ArrayList<>(qryIdxs.size()); for (org.apache.ignite.cache.QueryIndex qryIdx : qryIdxs) - grps.add(new QueryIndex(qryIdx)); + grps.add(new QueryIndexMessage(qryIdx)); tblName = q.getTableName(); keyFieldName = q.getKeyFieldName(); @@ -183,7 +213,7 @@ public String getValueFieldName() { /** * @return Fields to create group indexes for. */ - public List getGroups() { + public List getGroups() { return grps; } diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java index 26fc18b94e5e8..17ea8b707971e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/StoredCacheData.java @@ -20,16 +20,14 @@ import java.io.Serializable; import java.util.Collection; import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.cache.QueryEntity; import org.apache.ignite.cdc.CdcCacheEvent; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.internal.MarshallableMessage; import org.apache.ignite.internal.Order; +import org.apache.ignite.internal.management.cache.QueryEntity; import org.apache.ignite.internal.managers.encryption.GroupKeyEncrypted; import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager; -import org.apache.ignite.internal.processors.query.QueryEntityMessage; import org.apache.ignite.internal.util.tostring.GridToStringInclude; -import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.T2; import org.apache.ignite.internal.util.typedef.internal.A; import org.apache.ignite.internal.util.typedef.internal.CU; @@ -59,10 +57,10 @@ public class StoredCacheData implements Serializable, CdcCacheEvent, Marshallabl @Order(0) transient byte[] ccfgBytes; - /** Query entity messages. */ + /** Query entities. */ @Order(1) @GridToStringInclude - Collection entityMsgs; + Collection qryEntities; /** SQL flag - {@code true} if cache was created with {@code CREATE TABLE}. */ @Order(2) @@ -96,7 +94,7 @@ public StoredCacheData(CacheConfiguration ccfg) { A.notNull(ccfg, "ccfg"); this.ccfg = ccfg; - entityMsgs = F.viewReadOnly(ccfg.getQueryEntities(), QueryEntityMessage::new); + qryEntities = QueryEntity.list(ccfg.getQueryEntities()); } /** @@ -104,7 +102,7 @@ public StoredCacheData(CacheConfiguration ccfg) { */ public StoredCacheData(StoredCacheData cacheData) { ccfg = cacheData.ccfg; - entityMsgs = cacheData.entityMsgs; + qryEntities = cacheData.qryEntities; sql = cacheData.sql; cacheConfigurationEnrichment = cacheData.cacheConfigurationEnrichment; grpKeyEncrypted = cacheData.grpKeyEncrypted; @@ -127,15 +125,15 @@ public void config(CacheConfiguration ccfg) { /** * @return Query entities. */ - @Override public Collection queryEntities() { - return F.viewReadOnly(entityMsgs, QueryEntityMessage::queryEntity); + @Override public Collection queryEntities() { + return QueryEntity.unwrapList(qryEntities); } /** * @param qryEntities Query entities. */ - public void queryEntities(Collection qryEntities) { - entityMsgs = F.viewReadOnly(qryEntities, QueryEntityMessage::new); + public void queryEntities(Collection qryEntities) { + this.qryEntities = QueryEntity.list(qryEntities); } /** diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java deleted file mode 100644 index 4bf4e92d94296..0000000000000 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryEntityMessage.java +++ /dev/null @@ -1,147 +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.processors.query; - -import java.io.Serializable; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import org.apache.ignite.cache.QueryEntity; -import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.cache.query.QueryIndexMessage; -import org.apache.ignite.internal.util.tostring.GridToStringInclude; -import org.apache.ignite.internal.util.typedef.F; -import org.apache.ignite.internal.util.typedef.internal.S; -import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.plugin.extensions.communication.MessageFactory; -import org.apache.ignite.spi.discovery.ObjectData; - -/** Message for {@link QueryEntity}. */ -public class QueryEntityMessage implements Serializable, Message { - /** */ - private static final long serialVersionUID = 0L; - - /** Key type. */ - @Order(0) - String keyType; - - /** Value type. */ - @Order(1) - String valType; - - /** Key name. */ - @Order(2) - String keyFieldName; - - /** Value name. */ - @Order(3) - String valFieldName; - - /** Fields available for query. A map from field name to type name. */ - @Order(4) - @GridToStringInclude - LinkedHashMap fields; - - /** Set of field names that belong to the key. */ - @Order(5) - @GridToStringInclude - Set keyFields; - - /** Aliases. */ - @Order(6) - @GridToStringInclude - Map aliases; - - /** Collection of query indexes. */ - @Order(7) - @GridToStringInclude - Collection idxs; - - /** Table name. */ - @Order(8) - String tableName; - - /** Fields that must have non-null value. NB: DO NOT remove underscore to avoid clashes with QueryEntityEx. */ - @Order(9) - Set notNullFields; - - /** Fields default values. */ - @Order(10) - Map dfltFieldValues; - - /** Precision (maximum length) for fields. */ - @Order(11) - Map fieldsPrecision; - - /** Scale for fields. */ - @Order(12) - Map fieldsScale; - - /** Empty constructor for {@link MessageFactory}. */ - public QueryEntityMessage() { - // No-op. - } - - /** Copies {@code qryEntity}. */ - public QueryEntityMessage(QueryEntity qryEntity) { - assert qryEntity != null; - - keyType = qryEntity.getKeyType(); - valType = qryEntity.getValueType(); - keyFieldName = qryEntity.getKeyFieldName(); - valFieldName = qryEntity.getValueFieldName(); - fields = qryEntity.getFields(); - keyFields = qryEntity.getKeyFields(); - aliases = qryEntity.getAliases(); - idxs = F.viewReadOnly(qryEntity.getIndexes(), QueryIndexMessage::new); - tableName = qryEntity.getTableName(); - notNullFields = qryEntity.getNotNullFields(); - dfltFieldValues = F.viewReadOnly(qryEntity.getDefaultFieldValues(), val -> new ObjectData((Serializable)val)); - fieldsPrecision = qryEntity.getFieldsPrecision(); - fieldsScale = qryEntity.getFieldsScale(); - } - - /** @return Copy of {@code msg} as {@link QueryEntity}. */ - public static QueryEntity queryEntity(QueryEntityMessage msg) { - assert msg != null; - - QueryEntity res = new QueryEntity(); - - res.setKeyType(msg.keyType); - res.setValueType(msg.valType); - res.setKeyFieldName(msg.keyFieldName); - res.setValueFieldName(msg.valFieldName); - res.setFields(msg.fields); - res.setKeyFields(msg.keyFields); - res.setAliases(msg.aliases); - res.setIndexes(F.viewReadOnly(msg.idxs, QueryIndexMessage::queryIndex)); - res.setTableName(msg.tableName); - res.setNotNullFields(msg.notNullFields); - res.setDefaultFieldValues(F.viewReadOnly(msg.dfltFieldValues, ObjectData::unwrap)); - res.setFieldsPrecision(msg.fieldsPrecision); - res.setFieldsScale(msg.fieldsScale); - - return res; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(QueryEntityMessage.class, this); - } -} diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java index ff75ab08b2fda..d2668418efc9e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/schema/operation/SchemaAddQueryEntityOperation.java @@ -19,10 +19,8 @@ import java.util.Collection; import java.util.UUID; -import org.apache.ignite.cache.QueryEntity; import org.apache.ignite.internal.Order; -import org.apache.ignite.internal.processors.query.QueryEntityMessage; -import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.management.cache.QueryEntity; /** * Enabling indexing on cache operation. @@ -33,7 +31,7 @@ public class SchemaAddQueryEntityOperation extends SchemaAbstractOperation { /** */ @Order(0) - Collection entityMsgs; + Collection qryEntities; /** */ @Order(1) @@ -58,12 +56,12 @@ public SchemaAddQueryEntityOperation( UUID opId, String cacheName, String schemaName, - Collection entities, + Collection entities, int qryParallelism, boolean sqlEscape ) { super(opId, cacheName, schemaName); - entityMsgs = F.viewReadOnly(entities, QueryEntityMessage::new); + qryEntities = QueryEntity.list(entities); this.qryParallelism = qryParallelism; this.sqlEscape = sqlEscape; } @@ -71,8 +69,8 @@ public SchemaAddQueryEntityOperation( /** * @return Collection of query entities. */ - public Collection entities() { - return F.viewReadOnly(entityMsgs, QueryEntityMessage::queryEntity); + public Collection entities() { + return QueryEntity.unwrapList(qryEntities); } /**