http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/cpp/odbc/include/ignite/odbc/meta/column_meta.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/meta/column_meta.h b/modules/platforms/cpp/odbc/include/ignite/odbc/meta/column_meta.h index 6a94b04..d54fe3e 100644 --- a/modules/platforms/cpp/odbc/include/ignite/odbc/meta/column_meta.h +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/meta/column_meta.h @@ -23,6 +23,7 @@ #include "ignite/impl/binary/binary_reader_impl.h" +#include "ignite/odbc/protocol_version.h" #include "ignite/odbc/common_types.h" #include "ignite/odbc/utility.h" @@ -32,6 +33,8 @@ namespace ignite { namespace meta { + using namespace ignite::odbc; + /** * Column metadata. */ @@ -65,7 +68,8 @@ namespace ignite */ ColumnMeta(const std::string& schemaName, const std::string& tableName, const std::string& columnName, int8_t dataType) : - schemaName(schemaName), tableName(tableName), columnName(columnName), dataType(dataType) + schemaName(schemaName), tableName(tableName), columnName(columnName), dataType(dataType), + precision(-1), scale(-1) { // No-op. } @@ -85,7 +89,9 @@ namespace ignite schemaName(other.schemaName), tableName(other.tableName), columnName(other.columnName), - dataType(other.dataType) + dataType(other.dataType), + precision(other.precision), + scale(other.scale) { // No-op. } @@ -99,6 +105,8 @@ namespace ignite tableName = other.tableName; columnName = other.columnName; dataType = other.dataType; + precision = other.precision; + scale = other.scale; return *this; } @@ -106,8 +114,9 @@ namespace ignite /** * Read using reader. * @param reader Reader. + * @param ver Server version. */ - void Read(ignite::impl::binary::BinaryReaderImpl& reader); + void Read(ignite::impl::binary::BinaryReaderImpl& reader, const ProtocolVersion& ver); /** * Get schema name. @@ -140,12 +149,30 @@ namespace ignite * Get data type. * @return Data type. */ - int8_t GetDataType() const + int8_t GetDataType() const { return dataType; } /** + * Get column precision. + * @return Column precision. + */ + const int32_t GetPrecision() const + { + return precision; + } + + /** + * Get column scale. + * @return Column scale. + */ + const int32_t GetScale() const + { + return scale; + } + + /** * Try to get attribute of a string type. * * @param fieldId Field ID. @@ -175,6 +202,12 @@ namespace ignite /** Data type. */ int8_t dataType; + + /** Column precision. */ + int32_t precision; + + /** Column scale. */ + int32_t scale; }; /** Column metadata vector alias. */ @@ -184,10 +217,12 @@ namespace ignite * Read columns metadata collection. * @param reader Reader. * @param meta Collection. + * @param ver Server protocol version. */ - void ReadColumnMetaVector(ignite::impl::binary::BinaryReaderImpl& reader, ColumnMetaVector& meta); + void ReadColumnMetaVector(ignite::impl::binary::BinaryReaderImpl& reader, ColumnMetaVector& meta, + const ProtocolVersion& ver); } } } -#endif //_IGNITE_ODBC_META_COLUMN_META \ No newline at end of file +#endif //_IGNITE_ODBC_META_COLUMN_META
http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/cpp/odbc/include/ignite/odbc/protocol_version.h ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/include/ignite/odbc/protocol_version.h b/modules/platforms/cpp/odbc/include/ignite/odbc/protocol_version.h index 4833291..0b64536 100644 --- a/modules/platforms/cpp/odbc/include/ignite/odbc/protocol_version.h +++ b/modules/platforms/cpp/odbc/include/ignite/odbc/protocol_version.h @@ -46,6 +46,9 @@ namespace ignite /** Version 2.5.0: added multiple statements support. */ static const ProtocolVersion VERSION_2_5_0; + /** Version 2.7.0: added fields precision and scale. */ + static const ProtocolVersion VERSION_2_7_0; + typedef std::set<ProtocolVersion> VersionSet; /** @@ -198,4 +201,4 @@ namespace ignite } } -#endif //_IGNITE_ODBC_PROTOCOL_VERSION \ No newline at end of file +#endif //_IGNITE_ODBC_PROTOCOL_VERSION http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/cpp/odbc/src/message.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/src/message.cpp b/modules/platforms/cpp/odbc/src/message.cpp index 53d429b..5b909b8 100644 --- a/modules/platforms/cpp/odbc/src/message.cpp +++ b/modules/platforms/cpp/odbc/src/message.cpp @@ -343,7 +343,7 @@ namespace ignite { queryId = reader.ReadInt64(); - meta::ReadColumnMetaVector(reader, meta); + meta::ReadColumnMetaVector(reader, meta, ver); ReadAffectedRows(reader, ver, affectedRows); } @@ -390,7 +390,8 @@ namespace ignite // No-op. } - void QueryFetchResponse::ReadOnSuccess(impl::binary::BinaryReaderImpl& reader, const ProtocolVersion&) + void QueryFetchResponse::ReadOnSuccess(impl::binary::BinaryReaderImpl& reader, + const ProtocolVersion& ver) { queryId = reader.ReadInt64(); @@ -407,9 +408,10 @@ namespace ignite // No-op. } - void QueryGetColumnsMetaResponse::ReadOnSuccess(impl::binary::BinaryReaderImpl& reader, const ProtocolVersion&) + void QueryGetColumnsMetaResponse::ReadOnSuccess(impl::binary::BinaryReaderImpl& reader, + const ProtocolVersion& ver) { - meta::ReadColumnMetaVector(reader, meta); + meta::ReadColumnMetaVector(reader, meta, ver); } QueryGetTablesMetaResponse::QueryGetTablesMetaResponse() http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/cpp/odbc/src/meta/column_meta.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/src/meta/column_meta.cpp b/modules/platforms/cpp/odbc/src/meta/column_meta.cpp index b7f212a..476f6a6 100644 --- a/modules/platforms/cpp/odbc/src/meta/column_meta.cpp +++ b/modules/platforms/cpp/odbc/src/meta/column_meta.cpp @@ -15,6 +15,8 @@ * limitations under the License. */ +#include "ignite/common/utils.h" + #include "ignite/odbc/system/odbc_constants.h" #include "ignite/odbc/meta/column_meta.h" #include "ignite/odbc/type_traits.h" @@ -72,13 +74,19 @@ namespace ignite #undef DBG_STR_CASE - void ColumnMeta::Read(ignite::impl::binary::BinaryReaderImpl& reader) + void ColumnMeta::Read(ignite::impl::binary::BinaryReaderImpl& reader, const ProtocolVersion& ver) { utility::ReadString(reader, schemaName); utility::ReadString(reader, tableName); utility::ReadString(reader, columnName); dataType = reader.ReadInt8(); + + if (ver >= ProtocolVersion::VERSION_2_7_0) + { + precision = reader.ReadInt32(); + scale = reader.ReadInt32(); + } } bool ColumnMeta::GetAttribute(uint16_t fieldId, std::string& value) const @@ -137,6 +145,29 @@ namespace ignite return true; } + case SQL_DESC_PRECISION: + case SQL_COLUMN_LENGTH: + case SQL_COLUMN_PRECISION: + { + if (precision == -1) + return false; + + value = common::LexicalCast<std::string>(precision); + + return true; + } + + case SQL_DESC_SCALE: + case SQL_COLUMN_SCALE: + { + if (scale == -1) + return false; + + value = common::LexicalCast<std::string>(precision); + + return true; + } + default: return false; } @@ -149,6 +180,15 @@ namespace ignite switch (fieldId) { case SQL_DESC_FIXED_PREC_SCALE: + { + if (scale == -1) + value = SQL_FALSE; + else + value = SQL_TRUE; + + break; + } + case SQL_DESC_AUTO_UNIQUE_VALUE: { value = SQL_FALSE; @@ -185,7 +225,10 @@ namespace ignite case SQL_DESC_OCTET_LENGTH: case SQL_COLUMN_LENGTH: { - value = type_traits::BinaryTypeTransferLength(dataType); + if (precision == -1) + value = type_traits::BinaryTypeTransferLength(dataType); + else + value = precision; break; } @@ -207,7 +250,10 @@ namespace ignite case SQL_DESC_PRECISION: case SQL_COLUMN_PRECISION: { - value = type_traits::BinaryTypeColumnSize(dataType); + if (precision == -1) + value = type_traits::BinaryTypeColumnSize(dataType); + else + value = precision; break; } @@ -215,10 +261,15 @@ namespace ignite case SQL_DESC_SCALE: case SQL_COLUMN_SCALE: { - value = type_traits::BinaryTypeDecimalDigits(dataType); + if (scale == -1) + { + value = type_traits::BinaryTypeDecimalDigits(dataType); - if (value < 0) - value = 0; + if (value < 0) + value = 0; + } + else + value = scale; break; } @@ -260,7 +311,8 @@ namespace ignite return true; } - void ReadColumnMetaVector(ignite::impl::binary::BinaryReaderImpl& reader, ColumnMetaVector& meta) + void ReadColumnMetaVector(ignite::impl::binary::BinaryReaderImpl& reader, ColumnMetaVector& meta, + const ProtocolVersion& ver) { int32_t metaNum = reader.ReadInt32(); @@ -271,7 +323,7 @@ namespace ignite { meta.push_back(ColumnMeta()); - meta.back().Read(reader); + meta.back().Read(reader, ver); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/cpp/odbc/src/protocol_version.cpp ---------------------------------------------------------------------- diff --git a/modules/platforms/cpp/odbc/src/protocol_version.cpp b/modules/platforms/cpp/odbc/src/protocol_version.cpp index c345dd4..01937e2 100644 --- a/modules/platforms/cpp/odbc/src/protocol_version.cpp +++ b/modules/platforms/cpp/odbc/src/protocol_version.cpp @@ -31,6 +31,7 @@ namespace ignite const ProtocolVersion ProtocolVersion::VERSION_2_3_0(2, 3, 0); const ProtocolVersion ProtocolVersion::VERSION_2_3_2(2, 3, 2); const ProtocolVersion ProtocolVersion::VERSION_2_5_0(2, 5, 0); + const ProtocolVersion ProtocolVersion::VERSION_2_7_0(2, 7, 0); ProtocolVersion::VersionSet::value_type supportedArray[] = { ProtocolVersion::VERSION_2_1_0, @@ -38,6 +39,7 @@ namespace ignite ProtocolVersion::VERSION_2_3_0, ProtocolVersion::VERSION_2_3_2, ProtocolVersion::VERSION_2_5_0, + ProtocolVersion::VERSION_2_7_0 }; const ProtocolVersion::VersionSet ProtocolVersion::supported(supportedArray, @@ -66,7 +68,7 @@ namespace ignite const ProtocolVersion& ProtocolVersion::GetCurrent() { - return VERSION_2_5_0; + return VERSION_2_7_0; } void ThrowParseError() http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs index ba10cda..1171e16 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ApiParity/QueryEntityConfigurationParityTest.cs @@ -33,7 +33,8 @@ namespace Apache.Ignite.Core.Tests.ApiParity "KeyFields", "NotNullFields", "DefaultFieldValues", - "DecimalInfo" + "FieldsPrecision", + "FieldsScale" }; /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Cache/ClientCacheConfigurationTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Cache/ClientCacheConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Cache/ClientCacheConfigurationTest.cs index 04ad7dc..1481f24 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Cache/ClientCacheConfigurationTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/Cache/ClientCacheConfigurationTest.cs @@ -23,6 +23,7 @@ namespace Apache.Ignite.Core.Tests.Client.Cache using Apache.Ignite.Core.Cache.Configuration; using Apache.Ignite.Core.Client.Cache; using Apache.Ignite.Core.Impl.Binary.IO; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Client.Cache; using Apache.Ignite.Core.Tests.Cache; using NUnit.Framework; @@ -178,9 +179,9 @@ namespace Apache.Ignite.Core.Tests.Client.Cache { using (var stream = new BinaryHeapStream(128)) { - ClientCacheConfigurationSerializer.Write(stream, cfg, true); + ClientCacheConfigurationSerializer.Write(stream, cfg, ClientSocket.CurrentProtocolVersion, true); stream.Seek(0, SeekOrigin.Begin); - return new CacheClientConfiguration(stream); + return new CacheClientConfiguration(stream, ClientSocket.CurrentProtocolVersion); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs index 06a7d72..a8925ad 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs @@ -40,6 +40,7 @@ namespace Apache.Ignite.Core.Cache.Configuration using Apache.Ignite.Core.Impl.Binary; using Apache.Ignite.Core.Impl.Cache.Affinity; using Apache.Ignite.Core.Impl.Cache.Expiry; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Log; using Apache.Ignite.Core.Plugin.Cache; using BinaryReader = Apache.Ignite.Core.Impl.Binary.BinaryReader; @@ -48,7 +49,7 @@ namespace Apache.Ignite.Core.Cache.Configuration /// <summary> /// Defines grid cache configuration. /// </summary> - public class CacheConfiguration : IBinaryRawWriteAware<BinaryWriter> + public class CacheConfiguration : IBinaryRawWriteAwareEx<BinaryWriter> { /// <summary> Default size of rebalance thread pool. </summary> public const int DefaultRebalanceThreadPoolSize = 2; @@ -252,12 +253,12 @@ namespace Apache.Ignite.Core.Cache.Configuration { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { - other.Write(BinaryUtils.Marshaller.StartMarshal(stream)); + other.Write(BinaryUtils.Marshaller.StartMarshal(stream), ClientSocket.CurrentProtocolVersion); stream.SynchronizeOutput(); stream.Seek(0, SeekOrigin.Begin); - Read(BinaryUtils.Marshaller.StartUnmarshal(stream)); + Read(BinaryUtils.Marshaller.StartUnmarshal(stream), ClientSocket.CurrentProtocolVersion); } CopyLocalProperties(other); @@ -268,16 +269,18 @@ namespace Apache.Ignite.Core.Cache.Configuration /// Initializes a new instance of the <see cref="CacheConfiguration"/> class. /// </summary> /// <param name="reader">The reader.</param> - internal CacheConfiguration(BinaryReader reader) + /// <param name="srvVer">Server version.</param> + internal CacheConfiguration(BinaryReader reader, ClientProtocolVersion srvVer) { - Read(reader); + Read(reader, srvVer); } /// <summary> /// Reads data into this instance from the specified reader. /// </summary> /// <param name="reader">The reader.</param> - private void Read(BinaryReader reader) + /// <param name="srvVer">Server version.</param> + private void Read(BinaryReader reader, ClientProtocolVersion srvVer) { // Make sure system marshaller is used. Debug.Assert(reader.Marshaller == BinaryUtils.Marshaller); @@ -327,7 +330,7 @@ namespace Apache.Ignite.Core.Cache.Configuration QueryParallelism = reader.ReadInt(); SqlSchema = reader.ReadString(); - QueryEntities = reader.ReadCollectionRaw(r => new QueryEntity(r)); + QueryEntities = reader.ReadCollectionRaw(r => new QueryEntity(r, srvVer)); NearConfiguration = reader.ReadBoolean() ? new NearCacheConfiguration(reader) : null; @@ -364,16 +367,18 @@ namespace Apache.Ignite.Core.Cache.Configuration /// Writes this instance to the specified writer. /// </summary> /// <param name="writer">The writer.</param> - void IBinaryRawWriteAware<BinaryWriter>.Write(BinaryWriter writer) + /// <param name="srvVer">Server version.</param> + void IBinaryRawWriteAwareEx<BinaryWriter>.Write(BinaryWriter writer, ClientProtocolVersion srvVer) { - Write(writer); + Write(writer, srvVer); } /// <summary> /// Writes this instance to the specified writer. /// </summary> /// <param name="writer">The writer.</param> - internal void Write(BinaryWriter writer) + /// <param name="srvVer">Server version.</param> + internal void Write(BinaryWriter writer, ClientProtocolVersion srvVer) { // Make sure system marshaller is used. Debug.Assert(writer.Marshaller == BinaryUtils.Marshaller); @@ -423,7 +428,7 @@ namespace Apache.Ignite.Core.Cache.Configuration writer.WriteInt(QueryParallelism); writer.WriteString(SqlSchema); - writer.WriteCollectionRaw(QueryEntities); + writer.WriteCollectionRaw(QueryEntities, srvVer); if (NearConfiguration != null) { http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs index 32173ba..dc8be7f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryEntity.cs @@ -27,13 +27,14 @@ namespace Apache.Ignite.Core.Cache.Configuration using Apache.Ignite.Core.Binary; using Apache.Ignite.Core.Impl.Binary; using Apache.Ignite.Core.Impl.Cache; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Log; /// <summary> /// Query entity is a description of cache entry (composed of key and value) /// in a way of how it must be indexed and can be queried. /// </summary> - public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAware + public sealed class QueryEntity : IQueryEntityInternal, IBinaryRawWriteAwareEx { /** */ private Type _keyType; @@ -232,7 +233,8 @@ namespace Apache.Ignite.Core.Cache.Configuration /// Initializes a new instance of the <see cref="QueryEntity"/> class. /// </summary> /// <param name="reader">The reader.</param> - internal QueryEntity(IBinaryRawReader reader) + /// <param name="srvVer">Server version.</param> + internal QueryEntity(IBinaryRawReader reader, ClientProtocolVersion srvVer) { KeyTypeName = reader.ReadString(); ValueTypeName = reader.ReadString(); @@ -243,7 +245,7 @@ namespace Apache.Ignite.Core.Cache.Configuration var count = reader.ReadInt(); Fields = count == 0 ? null - : Enumerable.Range(0, count).Select(x => new QueryField(reader)).ToList(); + : Enumerable.Range(0, count).Select(x => new QueryField(reader, srvVer)).ToList(); count = reader.ReadInt(); Aliases = count == 0 ? null : Enumerable.Range(0, count) @@ -256,7 +258,7 @@ namespace Apache.Ignite.Core.Cache.Configuration /// <summary> /// Writes this instance. /// </summary> - void IBinaryRawWriteAware<IBinaryRawWriter>.Write(IBinaryRawWriter writer) + void IBinaryRawWriteAwareEx<IBinaryRawWriter>.Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer) { writer.WriteString(KeyTypeName); writer.WriteString(ValueTypeName); @@ -270,7 +272,7 @@ namespace Apache.Ignite.Core.Cache.Configuration foreach (var field in Fields) { - field.Write(writer); + field.Write(writer, srvVer); } } else http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs index 869ce7d..4142986 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QueryField.cs @@ -23,6 +23,7 @@ namespace Apache.Ignite.Core.Cache.Configuration using System.Diagnostics; using Apache.Ignite.Core.Binary; using Apache.Ignite.Core.Impl.Binary; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Log; @@ -42,7 +43,8 @@ namespace Apache.Ignite.Core.Cache.Configuration /// </summary> public QueryField() { - // No-op. + Precision = -1; + Scale = -1; } /// <summary> @@ -50,7 +52,7 @@ namespace Apache.Ignite.Core.Cache.Configuration /// </summary> /// <param name="name">Name.</param> /// <param name="javaFieldTypeName">Java type name.</param> - public QueryField(string name, string javaFieldTypeName) + public QueryField(string name, string javaFieldTypeName): this() { IgniteArgumentCheck.NotNullOrEmpty(name, "name"); IgniteArgumentCheck.NotNullOrEmpty(javaFieldTypeName, "typeName"); @@ -64,7 +66,7 @@ namespace Apache.Ignite.Core.Cache.Configuration /// </summary> /// <param name="name">Name.</param> /// <param name="fieldType">Type.</param> - public QueryField(string name, Type fieldType) + public QueryField(string name, Type fieldType): this() { IgniteArgumentCheck.NotNullOrEmpty(name, "name"); IgniteArgumentCheck.NotNull(fieldType, "type"); @@ -76,7 +78,7 @@ namespace Apache.Ignite.Core.Cache.Configuration /// <summary> /// Initializes a new instance of the <see cref="QueryField"/> class. /// </summary> - internal QueryField(IBinaryRawReader reader) + internal QueryField(IBinaryRawReader reader, ClientProtocolVersion srvVer) { Debug.Assert(reader != null); @@ -85,14 +87,18 @@ namespace Apache.Ignite.Core.Cache.Configuration IsKeyField = reader.ReadBoolean(); NotNull = reader.ReadBoolean(); DefaultValue = reader.ReadObject<object>(); - Precision = reader.ReadInt(); - Scale = reader.ReadInt(); + + if (srvVer.CompareTo(ClientSocket.Ver120) >= 0) + { + Precision = reader.ReadInt(); + Scale = reader.ReadInt(); + } } /// <summary> /// Writes this instance to the specified writer. /// </summary> - internal void Write(IBinaryRawWriter writer) + internal void Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer) { Debug.Assert(writer != null); @@ -101,8 +107,12 @@ namespace Apache.Ignite.Core.Cache.Configuration writer.WriteBoolean(IsKeyField); writer.WriteBoolean(NotNull); writer.WriteObject(DefaultValue); - writer.WriteInt(Precision); - writer.WriteInt(Scale); + + if (srvVer.CompareTo(ClientSocket.Ver120) >= 0) + { + writer.WriteInt(Precision); + writer.WriteInt(Scale); + } } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QuerySqlFieldAttribute.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QuerySqlFieldAttribute.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QuerySqlFieldAttribute.cs index bfd3575..2c1d566 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QuerySqlFieldAttribute.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/QuerySqlFieldAttribute.cs @@ -35,6 +35,8 @@ namespace Apache.Ignite.Core.Cache.Configuration public QuerySqlFieldAttribute() { IndexInlineSize = QueryIndex.DefaultInlineSize; + Precision = -1; + Scale = -1; } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Client/Cache/CacheClientConfiguration.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Client/Cache/CacheClientConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Client/Cache/CacheClientConfiguration.cs index fad6b58..c6cb112 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Client/Cache/CacheClientConfiguration.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Client/Cache/CacheClientConfiguration.cs @@ -29,6 +29,7 @@ namespace Apache.Ignite.Core.Client.Cache using Apache.Ignite.Core.Configuration; using Apache.Ignite.Core.Impl; using Apache.Ignite.Core.Impl.Binary.IO; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Client.Cache; using Apache.Ignite.Core.Impl.Common; @@ -115,12 +116,12 @@ namespace Apache.Ignite.Core.Client.Cache { using (var stream = IgniteManager.Memory.Allocate().GetStream()) { - ClientCacheConfigurationSerializer.Write(stream, other, true); + ClientCacheConfigurationSerializer.Write(stream, other, ClientSocket.CurrentProtocolVersion, true); stream.SynchronizeOutput(); stream.Seek(0, SeekOrigin.Begin); - ClientCacheConfigurationSerializer.Read(stream, this); + ClientCacheConfigurationSerializer.Read(stream, this, ClientSocket.CurrentProtocolVersion); } CopyLocalProperties(other); @@ -156,11 +157,11 @@ namespace Apache.Ignite.Core.Client.Cache /// <summary> /// Initializes a new instance of the <see cref="CacheClientConfiguration"/> class. /// </summary> - internal CacheClientConfiguration(IBinaryStream stream) + internal CacheClientConfiguration(IBinaryStream stream, ClientProtocolVersion srvVer) { Debug.Assert(stream != null); - ClientCacheConfigurationSerializer.Read(stream, this); + ClientCacheConfigurationSerializer.Read(stream, this, srvVer); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs index 9bcf763..0d66b9f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs @@ -43,6 +43,7 @@ namespace Apache.Ignite.Core using Apache.Ignite.Core.Failure; using Apache.Ignite.Core.Impl; using Apache.Ignite.Core.Impl.Binary; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Impl.Ssl; using Apache.Ignite.Core.Lifecycle; @@ -252,13 +253,13 @@ namespace Apache.Ignite.Core { var marsh = BinaryUtils.Marshaller; - configuration.Write(marsh.StartMarshal(stream)); + configuration.Write(marsh.StartMarshal(stream), ClientSocket.CurrentProtocolVersion); stream.SynchronizeOutput(); stream.Seek(0, SeekOrigin.Begin); - ReadCore(marsh.StartUnmarshal(stream)); + ReadCore(marsh.StartUnmarshal(stream), ClientSocket.CurrentProtocolVersion); } CopyLocalProperties(configuration); @@ -269,12 +270,14 @@ namespace Apache.Ignite.Core /// </summary> /// <param name="binaryReader">The binary reader.</param> /// <param name="baseConfig">The base configuration.</param> - internal IgniteConfiguration(BinaryReader binaryReader, IgniteConfiguration baseConfig) + /// <param name="srvVer">Server version.</param> + internal IgniteConfiguration(BinaryReader binaryReader, IgniteConfiguration baseConfig, + ClientProtocolVersion srvVer) { Debug.Assert(binaryReader != null); Debug.Assert(baseConfig != null); - Read(binaryReader); + Read(binaryReader, srvVer); CopyLocalProperties(baseConfig); } @@ -282,7 +285,8 @@ namespace Apache.Ignite.Core /// Writes this instance to a writer. /// </summary> /// <param name="writer">The writer.</param> - internal void Write(BinaryWriter writer) + /// <param name="srvVer">Server version.</param> + internal void Write(BinaryWriter writer, ClientProtocolVersion srvVer) { Debug.Assert(writer != null); @@ -332,7 +336,7 @@ namespace Apache.Ignite.Core writer.WriteIntNullable(_queryThreadPoolSize); // Cache config - writer.WriteCollectionRaw(CacheConfiguration); + writer.WriteCollectionRaw(CacheConfiguration, srvVer); // Discovery config var disco = DiscoverySpi; @@ -650,7 +654,8 @@ namespace Apache.Ignite.Core /// Reads data from specified reader into current instance. /// </summary> /// <param name="r">The binary reader.</param> - private void ReadCore(BinaryReader r) + /// <param name="srvVer">Server version.</param> + private void ReadCore(BinaryReader r, ClientProtocolVersion srvVer) { // Simple properties _clientMode = r.ReadBooleanNullable(); @@ -697,7 +702,7 @@ namespace Apache.Ignite.Core _queryThreadPoolSize = r.ReadIntNullable(); // Cache config - CacheConfiguration = r.ReadCollectionRaw(x => new CacheConfiguration(x)); + CacheConfiguration = r.ReadCollectionRaw(x => new CacheConfiguration(x, srvVer)); // Discovery config DiscoverySpi = r.ReadBoolean() ? new TcpDiscoverySpi(r) : null; @@ -838,9 +843,10 @@ namespace Apache.Ignite.Core /// Reads data from specified reader into current instance. /// </summary> /// <param name="binaryReader">The binary reader.</param> - private void Read(BinaryReader binaryReader) + /// <param name="srvVer">Server version.</param> + private void Read(BinaryReader binaryReader, ClientProtocolVersion srvVer) { - ReadCore(binaryReader); + ReadCore(binaryReader, srvVer); // Misc IgniteHome = binaryReader.ReadString(); http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs index 5b93609..fe80ba1 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Ignition.cs @@ -407,7 +407,8 @@ namespace Apache.Ignite.Core // 3. Send configuration details to Java cfg.Validate(log); - cfg.Write(BinaryUtils.Marshaller.StartMarshal(outStream)); // Use system marshaller. + // Use system marshaller. + cfg.Write(BinaryUtils.Marshaller.StartMarshal(outStream), ClientSocket.CurrentProtocolVersion); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs index d87d217..e504d75 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/BinaryWriterExtensions.cs @@ -22,6 +22,7 @@ namespace Apache.Ignite.Core.Impl.Binary using System.Diagnostics; using System.IO; using Apache.Ignite.Core.Binary; + using Apache.Ignite.Core.Impl.Client; /// <summary> /// Writer extensions. @@ -211,5 +212,33 @@ namespace Apache.Ignite.Core.Impl.Binary writer.WriteInt(0); } } + + /// <summary> + /// Writes the collection of write-aware-ex items. + /// </summary> + public static void WriteCollectionRaw<T, TWriter>(this TWriter writer, ICollection<T> collection, + ClientProtocolVersion srvVer) where T : IBinaryRawWriteAwareEx<TWriter> where TWriter: IBinaryRawWriter + { + Debug.Assert(writer != null); + + if (collection != null) + { + writer.WriteInt(collection.Count); + + foreach (var x in collection) + { + if (x == null) + { + throw new ArgumentNullException(string.Format("{0} can not be null", typeof(T).Name)); + } + + x.Write(writer, srvVer); + } + } + else + { + writer.WriteInt(0); + } + } } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/IBinaryRawWriteAware.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/IBinaryRawWriteAware.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/IBinaryRawWriteAware.cs index 9b191e4..737d3c9 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/IBinaryRawWriteAware.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/IBinaryRawWriteAware.cs @@ -18,6 +18,29 @@ namespace Apache.Ignite.Core.Impl.Binary { using Apache.Ignite.Core.Binary; + using Apache.Ignite.Core.Impl.Client; + + /// <summary> + /// Represents an object that can write itself to a raw binary writer using specific server version. + /// </summary> + internal interface IBinaryRawWriteAwareEx<in T> where T : IBinaryRawWriter + { + /// <summary> + /// Writes this object to the given writer. + /// </summary> + /// <param name="writer">Writer.</param> + /// <param name="srvVer">Server version.</param> + /// <exception cref="System.IO.IOException">If write failed.</exception> + void Write(T writer, ClientProtocolVersion srvVer); + } + + /// <summary> + /// Represents an object that can write itself to a raw binary writer. + /// </summary> + internal interface IBinaryRawWriteAwareEx : IBinaryRawWriteAwareEx<IBinaryRawWriter> + { + // No-op. + } /// <summary> /// Represents an object that can write itself to a raw binary writer. @@ -39,4 +62,4 @@ namespace Apache.Ignite.Core.Impl.Binary { // No-op. } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs index 71fbaee..9e99967 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/CacheImpl.cs @@ -34,6 +34,7 @@ namespace Apache.Ignite.Core.Impl.Cache using Apache.Ignite.Core.Impl.Cache.Expiry; using Apache.Ignite.Core.Impl.Cache.Query; using Apache.Ignite.Core.Impl.Cache.Query.Continuous; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Cluster; using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Impl.Transactions; @@ -161,7 +162,7 @@ namespace Apache.Ignite.Core.Impl.Cache public CacheConfiguration GetConfiguration() { return DoInOp((int) CacheOp.GetConfig, stream => new CacheConfiguration( - BinaryUtils.Marshaller.StartUnmarshal(stream))); + BinaryUtils.Marshaller.StartUnmarshal(stream), ClientSocket.CurrentProtocolVersion)); } /** <inheritDoc /> */ http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/CacheClient.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/CacheClient.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/CacheClient.cs index 8138b77..a5a9246 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/CacheClient.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/CacheClient.cs @@ -513,7 +513,8 @@ namespace Apache.Ignite.Core.Impl.Client.Cache /** <inheritDoc /> */ public CacheClientConfiguration GetConfiguration() { - return DoOutInOp(ClientOp.CacheGetConfiguration, null, s => new CacheClientConfiguration(s)); + return DoOutInOp(ClientOp.CacheGetConfiguration, null, + s => new CacheClientConfiguration(s, _ignite.ServerVersion())); } /** <inheritDoc /> */ http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/ClientCacheConfigurationSerializer.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/ClientCacheConfigurationSerializer.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/ClientCacheConfigurationSerializer.cs index 552c778..0cccdac 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/ClientCacheConfigurationSerializer.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/Cache/ClientCacheConfigurationSerializer.cs @@ -195,7 +195,8 @@ namespace Apache.Ignite.Core.Impl.Client.Cache /// <summary> /// Writes the specified config. /// </summary> - public static void Write(IBinaryStream stream, CacheClientConfiguration cfg, bool skipCodes = false) + public static void Write(IBinaryStream stream, CacheClientConfiguration cfg, ClientProtocolVersion srvVer, + bool skipCodes = false) { Debug.Assert(stream != null); Debug.Assert(cfg != null); @@ -302,7 +303,7 @@ namespace Apache.Ignite.Core.Impl.Client.Cache writer.WriteCollectionRaw(cfg.KeyConfiguration); code(Op.QueryEntities); - writer.WriteCollectionRaw(cfg.QueryEntities); + writer.WriteCollectionRaw(cfg.QueryEntities, srvVer); // Write length (so that part of the config can be skipped). var len = writer.Stream.Position - pos - 4; @@ -312,7 +313,7 @@ namespace Apache.Ignite.Core.Impl.Client.Cache /// <summary> /// Reads the config. /// </summary> - public static void Read(IBinaryStream stream, CacheClientConfiguration cfg) + public static void Read(IBinaryStream stream, CacheClientConfiguration cfg, ClientProtocolVersion srvVer) { Debug.Assert(stream != null); @@ -351,7 +352,7 @@ namespace Apache.Ignite.Core.Impl.Client.Cache cfg.SqlSchema = reader.ReadString(); cfg.WriteSynchronizationMode = (CacheWriteSynchronizationMode)reader.ReadInt(); cfg.KeyConfiguration = reader.ReadCollectionRaw(r => new CacheKeyConfiguration(r)); - cfg.QueryEntities = reader.ReadCollectionRaw(r => new QueryEntity(r)); + cfg.QueryEntities = reader.ReadCollectionRaw(r => new QueryEntity(r, srvVer)); Debug.Assert(len == reader.Stream.Position - pos); } http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs index 11d7942..8a8b53b 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs @@ -45,8 +45,11 @@ namespace Apache.Ignite.Core.Impl.Client /** Version 1.1.0. */ private static readonly ClientProtocolVersion Ver110 = new ClientProtocolVersion(1, 1, 0); + /** Version 1.2.0. */ + public static readonly ClientProtocolVersion Ver120 = new ClientProtocolVersion(1, 2, 0); + /** Current version. */ - private static readonly ClientProtocolVersion CurrentProtocolVersion = Ver110; + public static readonly ClientProtocolVersion CurrentProtocolVersion = Ver120; /** Handshake opcode. */ private const byte OpHandshake = 1; @@ -69,6 +72,9 @@ namespace Apache.Ignite.Core.Impl.Client /** Callback checker guard. */ private volatile bool _checkingTimeouts; + /** Server protocol version. */ + public ClientProtocolVersion ServerVersion { get; private set; } + /** Current async operations, map from request id. */ private readonly ConcurrentDictionary<long, Request> _requests = new ConcurrentDictionary<long, Request>(); @@ -105,9 +111,11 @@ namespace Apache.Ignite.Core.Impl.Client _socket = Connect(clientConfiguration); _stream = GetSocketStream(_socket, clientConfiguration); + ServerVersion = version ?? CurrentProtocolVersion; + Validate(clientConfiguration); - Handshake(clientConfiguration, version ?? CurrentProtocolVersion); + Handshake(clientConfiguration, ServerVersion); // Check periodically if any request has timed out. if (_timeout > TimeSpan.Zero) @@ -303,10 +311,12 @@ namespace Apache.Ignite.Core.Impl.Client if (success) { + ServerVersion = version; + return; } - var serverVersion = + ServerVersion = new ClientProtocolVersion(stream.ReadShort(), stream.ReadShort(), stream.ReadShort()); var errMsg = BinaryUtils.Marshaller.Unmarshal<string>(stream); @@ -325,17 +335,17 @@ namespace Apache.Ignite.Core.Impl.Client } // Re-try if possible. - bool retry = serverVersion.CompareTo(version) < 0 && serverVersion.Equals(Ver100); + bool retry = ServerVersion.CompareTo(version) < 0 && ServerVersion.Equals(Ver100); if (retry) { - Handshake(clientConfiguration, serverVersion); + Handshake(clientConfiguration, ServerVersion); } else { throw new IgniteClientException(string.Format( "Client handshake failed: '{0}'. Client version: {1}. Server version: {2}", - errMsg, version, serverVersion), null, errCode); + errMsg, version, ServerVersion), null, errCode); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/IgniteClient.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/IgniteClient.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/IgniteClient.cs index 1b1aa6f..61d0220 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/IgniteClient.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/IgniteClient.cs @@ -115,7 +115,7 @@ namespace Apache.Ignite.Core.Impl.Client IgniteArgumentCheck.NotNull(configuration, "configuration"); DoOutOp(ClientOp.CacheGetOrCreateWithConfiguration, - w => ClientCacheConfigurationSerializer.Write(w.Stream, configuration)); + w => ClientCacheConfigurationSerializer.Write(w.Stream, configuration, ServerVersion())); return GetCache<TK, TV>(configuration.Name); } @@ -136,7 +136,7 @@ namespace Apache.Ignite.Core.Impl.Client IgniteArgumentCheck.NotNull(configuration, "configuration"); DoOutOp(ClientOp.CacheCreateWithConfiguration, - w => ClientCacheConfigurationSerializer.Write(w.Stream, configuration)); + w => ClientCacheConfigurationSerializer.Write(w.Stream, configuration, ServerVersion())); return GetCache<TK, TV>(configuration.Name); } @@ -217,6 +217,13 @@ namespace Apache.Ignite.Core.Impl.Client } /// <summary> + /// Gets the protocol version supported by server. + /// </summary> + public ClientProtocolVersion ServerVersion() { + return _socket.ServerVersion; + } + + /// <summary> /// Gets the client not supported exception. /// </summary> public static NotSupportedException GetClientNotSupportedException(string info = null) http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs index ad9a185..42d9ed6 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Ignite.cs @@ -35,6 +35,7 @@ namespace Apache.Ignite.Core.Impl using Apache.Ignite.Core.Events; using Apache.Ignite.Core.Impl.Binary; using Apache.Ignite.Core.Impl.Cache; + using Apache.Ignite.Core.Impl.Client; using Apache.Ignite.Core.Impl.Cluster; using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Impl.Datastream; @@ -483,7 +484,7 @@ namespace Apache.Ignite.Core.Impl { var w = BinaryUtils.Marshaller.StartMarshal(s); - configuration.Write(w); + configuration.Write(w, ClientSocket.CurrentProtocolVersion); if (nearConfiguration != null) { @@ -683,7 +684,8 @@ namespace Apache.Ignite.Core.Impl public IgniteConfiguration GetConfiguration() { return DoInOp((int) Op.GetIgniteConfiguration, - s => new IgniteConfiguration(BinaryUtils.Marshaller.StartUnmarshal(s), _cfg)); + s => new IgniteConfiguration(BinaryUtils.Marshaller.StartUnmarshal(s), _cfg, + ClientSocket.CurrentProtocolVersion)); } /** <inheritdoc /> */ @@ -876,7 +878,7 @@ namespace Apache.Ignite.Core.Impl IgniteArgumentCheck.NotNull(configuration, "configuration"); DoOutOp((int) Op.AddCacheConfiguration, - s => configuration.Write(BinaryUtils.Marshaller.StartMarshal(s))); + s => configuration.Write(BinaryUtils.Marshaller.StartMarshal(s), ClientSocket.CurrentProtocolVersion)); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/baab0a6d/modules/platforms/nodejs/lib/internal/ClientSocket.js ---------------------------------------------------------------------- diff --git a/modules/platforms/nodejs/lib/internal/ClientSocket.js b/modules/platforms/nodejs/lib/internal/ClientSocket.js index ac7ccec..1d1a4dd 100644 --- a/modules/platforms/nodejs/lib/internal/ClientSocket.js +++ b/modules/platforms/nodejs/lib/internal/ClientSocket.js @@ -77,12 +77,16 @@ class ProtocolVersion { const PROTOCOL_VERSION_1_0_0 = new ProtocolVersion(1, 0, 0); const PROTOCOL_VERSION_1_1_0 = new ProtocolVersion(1, 1, 0); +const PROTOCOL_VERSION_1_2_0 = new ProtocolVersion(1, 2, 0); const SUPPORTED_VERSIONS = [ // PROTOCOL_VERSION_1_0_0, // Support for QueryField precision/scale fields breaks 1.0.0 compatibility - PROTOCOL_VERSION_1_1_0 + PROTOCOL_VERSION_1_1_0, + PROTOCOL_VERSION_1_2_0 ]; +const CURRENT_VERSION = PROTOCOL_VERSION_1_2_0; + const STATE = Object.freeze({ INITIAL : 0, HANDSHAKE : 1, @@ -111,7 +115,7 @@ class ClientSocket { async connect() { return new Promise((resolve, reject) => { this._connectSocket( - this._getHandshake(PROTOCOL_VERSION_1_1_0, resolve, reject)); + this._getHandshake(CURRENT_VERSION, resolve, reject)); }); } @@ -430,4 +434,4 @@ class Request { } } -module.exports = ClientSocket; \ No newline at end of file +module.exports = ClientSocket;