You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2016/11/22 11:40:28 UTC
[39/50] [abbrv] ignite git commit: Merged ignite-1.6.11 into
ignite-1.7.4.
Merged ignite-1.6.11 into ignite-1.7.4.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f2dc1d71
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f2dc1d71
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f2dc1d71
Branch: refs/heads/master
Commit: f2dc1d71705b86428a04a69c4f2d4ee3a82ed1bd
Parents: 551f90d 6e36a79
Author: sboikov <sb...@gridgain.com>
Authored: Mon Nov 21 18:12:27 2016 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Mon Nov 21 18:12:27 2016 +0300
----------------------------------------------------------------------
bin/ignite.bat | 5 +
.../org/apache/ignite/IgniteDataStreamer.java | 2 +-
.../apache/ignite/IgniteSystemProperties.java | 13 +
.../internal/ComputeTaskInternalFuture.java | 11 +
.../internal/binary/BinaryClassDescriptor.java | 37 +-
.../ignite/internal/binary/BinaryContext.java | 13 +-
.../internal/binary/BinaryObjectExImpl.java | 57 +-
.../internal/binary/BinaryObjectImpl.java | 23 +
.../binary/BinaryObjectOffheapImpl.java | 24 +-
.../ignite/internal/binary/BinaryUtils.java | 4 +
.../binary/builder/BinaryObjectBuilderImpl.java | 6 +-
.../processors/affinity/AffinityAssignment.java | 88 +++
.../affinity/GridAffinityAssignment.java | 8 +-
.../affinity/GridAffinityAssignmentCache.java | 35 +-
.../affinity/GridAffinityProcessor.java | 89 ++-
.../processors/affinity/GridAffinityUtils.java | 8 +-
.../affinity/HistoryAffinityAssignment.java | 169 ++++++
.../cache/CacheAffinitySharedManager.java | 57 +-
.../cache/DynamicCacheChangeBatch.java | 7 +
.../cache/GridCacheAffinityManager.java | 6 +-
.../processors/cache/GridCacheContext.java | 8 +
.../processors/cache/GridCacheMapEntry.java | 5 +-
.../processors/cache/GridCacheMvccManager.java | 77 +++
.../GridCachePartitionExchangeManager.java | 299 +++++++--
.../processors/cache/GridCacheProcessor.java | 5 +-
.../cache/GridCacheSharedContext.java | 1 +
.../processors/cache/GridCacheUtils.java | 67 --
.../dht/GridClientPartitionTopology.java | 33 +-
.../dht/GridDhtPartitionTopology.java | 3 +-
.../dht/GridDhtPartitionTopologyImpl.java | 31 +-
.../dht/preloader/GridDhtPartitionFullMap.java | 18 +
.../dht/preloader/GridDhtPartitionMap2.java | 53 +-
.../GridDhtPartitionsAbstractMessage.java | 40 +-
.../GridDhtPartitionsExchangeFuture.java | 84 +--
.../preloader/GridDhtPartitionsFullMessage.java | 150 ++++-
.../GridDhtPartitionsSingleMessage.java | 132 +++-
.../GridDhtPartitionsSingleRequest.java | 4 +-
.../dht/preloader/GridDhtPreloader.java | 4 +-
.../query/GridCacheQueryMetricsAdapter.java | 2 +-
.../continuous/GridContinuousProcessor.java | 4 +-
.../datastreamer/DataStreamProcessor.java | 104 +++-
.../datastreamer/DataStreamerImpl.java | 607 ++++++++++++++-----
.../internal/processors/igfs/IgfsProcessor.java | 15 +
.../ignite/internal/util/GridLogThrottle.java | 29 +-
.../ignite/internal/util/IgniteUtils.java | 111 +++-
.../internal/util/future/GridFutureAdapter.java | 12 +-
.../util/offheap/unsafe/GridUnsafeMemory.java | 33 +-
.../visor/misc/VisorResolveHostNameTask.java | 4 +-
.../security/SecurityBasicPermissionSet.java | 107 ++++
.../security/SecurityPermissionSetBuilder.java | 222 +++++++
.../ignite/spi/discovery/tcp/ClientImpl.java | 38 +-
.../ignite/spi/discovery/tcp/ServerImpl.java | 510 +++++++++++++---
.../spi/discovery/tcp/TcpDiscoveryImpl.java | 59 +-
.../messages/TcpDiscoveryAbstractMessage.java | 7 +
.../messages/TcpDiscoveryClientAckResponse.java | 5 +
.../TcpDiscoveryClientHeartbeatMessage.java | 7 +-
.../TcpDiscoveryConnectionCheckMessage.java | 5 +
.../messages/TcpDiscoveryHeartbeatMessage.java | 5 +
.../TcpDiscoveryNodeAddFinishedMessage.java | 11 +
.../messages/TcpDiscoveryNodeAddedMessage.java | 33 +-
.../binary/BinaryMarshallerSelfTest.java | 343 ++++++++++-
...CacheExchangeMessageDuplicatedStateTest.java | 393 ++++++++++++
.../cache/IgniteCacheDynamicStopSelfTest.java | 48 +-
.../cache/IgniteCachePeekModesAbstractTest.java | 2 +-
...CacheLoadingConcurrentGridStartSelfTest.java | 251 +++++++-
...ncurrentGridStartSelfTestAllowOverwrite.java | 30 +
.../distributed/IgniteCacheGetRestartTest.java | 3 +
...cingDelayedPartitionMapExchangeSelfTest.java | 8 +-
.../GridCacheRebalancingSyncSelfTest.java | 18 +-
.../GridCacheSyncReplicatedPreloadSelfTest.java | 3 -
.../IgniteCacheSyncRebalanceModeSelfTest.java | 2 +-
...ContinuousQueryFailoverAbstractSelfTest.java | 2 +-
...ComputeJobExecutionErrorToLogManualTest.java | 88 +++
.../IgniteNoCustomEventsOnNodeStart.java | 7 +
.../DataStreamProcessorSelfTest.java | 4 +-
.../datastreamer/DataStreamerImplSelfTest.java | 170 ++++--
.../DataStreamerMultiThreadedSelfTest.java | 2 -
.../datastreamer/DataStreamerTimeoutTest.java | 92 ++-
.../igfs/IgfsProcessorValidationSelfTest.java | 30 +
...IpcEndpointRegistrationAbstractSelfTest.java | 76 ++-
...dpointRegistrationOnLinuxAndMacSelfTest.java | 11 +-
.../SecurityPermissionSetBuilderTest.java | 110 ++++
.../spi/discovery/tcp/TcpDiscoverySelfTest.java | 134 +++-
.../junits/common/GridCommonAbstractTest.java | 25 +-
.../ignite/testsuites/IgniteBasicTestSuite.java | 3 +
.../testsuites/IgniteCacheTestSuite2.java | 5 +
...opClientProtocolMultipleServersSelfTest.java | 102 ++--
.../query/h2/GridH2ResultSetIterator.java | 62 +-
.../processors/query/h2/IgniteH2Indexing.java | 4 +-
.../query/h2/opt/GridH2ValueCacheObject.java | 10 +-
.../query/h2/twostep/GridMapQueryExecutor.java | 34 +-
.../query/h2/twostep/GridMergeIndex.java | 49 +-
.../h2/twostep/GridReduceQueryExecutor.java | 2 +-
.../cache/CacheSqlQueryValueCopySelfTest.java | 226 +++++++
.../cache/IgniteCacheOffheapEvictQueryTest.java | 7 +
.../IgniteCacheQueryMultiThreadedSelfTest.java | 59 ++
...lientQueryReplicatedNodeRestartSelfTest.java | 7 +
...butedQueryStopOnCancelOrTimeoutSelfTest.java | 7 +
.../query/IgniteSqlSplitterSelfTest.java | 2 +
.../query/h2/sql/GridQueryParsingTest.java | 11 +-
.../IgniteCacheQuerySelfTestSuite2.java | 2 +
modules/platforms/cpp/DEVNOTES.txt | 22 +-
modules/platforms/cpp/README.txt | 10 +-
modules/platforms/cpp/binary/Makefile.am | 4 +-
.../cpp/binary/project/vs/binary.vcxproj | 2 -
.../cpp/common/project/vs/common.vcxproj | 1 -
modules/platforms/cpp/core/Makefile.am | 4 +-
.../platforms/cpp/core/project/vs/core.vcxproj | 2 -
modules/platforms/cpp/examples/README.txt | 9 +-
.../cpp/examples/odbc-example/Makefile.am | 4 +-
.../cpp/examples/putget-example/Makefile.am | 4 +-
.../cpp/examples/query-example/Makefile.am | 4 +-
modules/platforms/cpp/ignite/Makefile.am | 4 +-
.../cpp/ignite/project/vs/ignite.vcxproj | 4 +-
modules/platforms/cpp/jni/Makefile.am | 4 +-
.../platforms/cpp/jni/project/vs/jni.vcxproj | 1 -
.../platforms/cpp/odbc-test/include/test_type.h | 42 +-
.../cpp/odbc-test/src/api_robustness_test.cpp | 63 ++
.../cpp/odbc-test/src/queries_test.cpp | 153 ++++-
.../cpp/odbc-test/src/sql_outer_join_test.cpp | 2 +-
modules/platforms/cpp/odbc/Makefile.am | 4 +-
modules/platforms/cpp/odbc/README.txt | 23 +-
.../cpp/odbc/include/ignite/odbc/statement.h | 42 ++
.../cpp/odbc/install/ignite-odbc-amd64.wxs | 114 ++++
.../cpp/odbc/install/ignite-odbc-x86.wxs | 114 ++++
.../platforms/cpp/odbc/project/vs/odbc.vcxproj | 4 +-
.../odbc/src/app/application_data_buffer.cpp | 34 +-
modules/platforms/cpp/odbc/src/odbc.cpp | 116 +---
modules/platforms/cpp/odbc/src/statement.cpp | 151 +++++
.../Dataload/DataStreamerTestTopologyChange.cs | 27 +-
.../Apache.Ignite.Core/Impl/PlatformTarget.cs | 2 +-
.../src/test/config/incorrect-store-cache.xml | 2 +
.../src/test/config/jdbc-pojo-store-builtin.xml | 3 +
.../src/test/config/jdbc-pojo-store-obj.xml | 3 +
modules/spring/src/test/config/node.xml | 2 +
modules/spring/src/test/config/node1.xml | 2 +
.../test/config/pojo-incorrect-store-cache.xml | 2 +
modules/spring/src/test/config/store-cache.xml | 2 +
modules/spring/src/test/config/store-cache1.xml | 2 +
.../IgniteStartFromStreamConfigurationTest.java | 18 +-
pom.xml | 8 +
141 files changed, 5973 insertions(+), 1091 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopology.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index 558a654,f3751ac..ab573bd
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@@ -1475,10 -1507,25 +1478,25 @@@ class GridDhtPartitionTopologyImpl impl
lock.readLock().lock();
try {
- Map<Integer, Long> res = new HashMap<>(cntrMap);
+ Map<Integer, Long> res;
+
+ if (skipZeros) {
+ res = U.newHashMap(cntrMap.size());
+
+ for (Map.Entry<Integer, Long> e : cntrMap.entrySet()) {
+ Long cntr = e.getValue();
+
+ if (ZERO.equals(cntr))
+ continue;
+
+ res.put(e.getKey(), cntr);
+ }
+ }
+ else
+ res = new HashMap<>(cntrMap);
- for (int i = 0; i < locParts.length; i++) {
- GridDhtLocalPartition part = locParts[i];
+ for (int i = 0; i < locParts.length(); i++) {
+ GridDhtLocalPartition part = locParts.get(i);
if (part == null)
continue;
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPreloader.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryMetricsAdapter.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/client/HadoopClientProtocolMultipleServersSelfTest.java
----------------------------------------------------------------------
diff --cc modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/client/HadoopClientProtocolMultipleServersSelfTest.java
index cb83a73,d6e0743..0805be1
--- a/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/client/HadoopClientProtocolMultipleServersSelfTest.java
+++ b/modules/hadoop/src/test/java/org/apache/ignite/internal/processors/hadoop/impl/client/HadoopClientProtocolMultipleServersSelfTest.java
@@@ -86,14 -88,25 +86,27 @@@ public class HadoopClientProtocolMultip
}
/** {@inheritDoc} */
- @Override protected void beforeTest() throws Exception {
- super.beforeTest();
+ @Override protected void afterTest() throws Exception {
+ stopAllGrids();
- clearConnectionMap();
+ clearClients();
+
+ super.afterTest();
}
+ /**
+ * @throws IgniteCheckedException If failed.
+ */
+ private void clearConnectionMap() throws IgniteCheckedException {
+ ConcurrentHashMap<String, IgniteInternalFuture<GridClient>> cliMap =
+ GridTestUtils.getFieldValue(IgniteHadoopClientProtocolProvider.class, "cliMap");
+
+ for(IgniteInternalFuture<GridClient> fut : cliMap.values())
+ fut.get().close();
+
+ cliMap.clear();
+ }
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2ValueCacheObject.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
index 0314b3d,7e4d5b6..ac1a6a6
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMapQueryExecutor.java
@@@ -56,9 -52,7 +56,10 @@@ import org.apache.ignite.internal.proce
import org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery;
import org.apache.ignite.internal.processors.query.GridQueryCancel;
import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryContext;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2RetryException;
+import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
+ import org.apache.ignite.internal.processors.query.h2.opt.GridH2ValueCacheObject;
import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryCancelRequest;
import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryFailResponse;
import org.apache.ignite.internal.processors.query.h2.twostep.messages.GridQueryNextPageRequest;
@@@ -933,9 -757,12 +934,12 @@@ public class GridMapQueryExecutor
private int page;
/** */
- private final int rowCount;
+ private final int rowCnt;
/** */
+ private boolean cpNeeded;
+
+ /** */
private volatile boolean closed;
/**
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridMergeIndex.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/GridReduceQueryExecutor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedQueryStopOnCancelOrTimeoutSelfTest.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedQueryStopOnCancelOrTimeoutSelfTest.java
index a92bf2b,072a081..80c4a08
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedQueryStopOnCancelOrTimeoutSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/IgniteCacheDistributedQueryStopOnCancelOrTimeoutSelfTest.java
@@@ -96,9 -95,16 +96,16 @@@ public class IgniteCacheDistributedQuer
g.cache(null).removeAll();
}
+ /** {@inheritDoc} */
+ @Override protected void afterTestsStopped() throws Exception {
+ stopAllGrids();
+
+ super.afterTestsStopped();
+ }
+
/** */
public void testRemoteQueryExecutionTimeout() throws Exception {
- testQuery(CACHE_SIZE, VAL_SIZE, QUERY_1, 500, TimeUnit.MILLISECONDS, true);
+ testQueryCancel(CACHE_SIZE, VAL_SIZE, QRY_1, 500, TimeUnit.MILLISECONDS, true);
}
/** */
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
----------------------------------------------------------------------
diff --cc modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
index 50f2ef0,56658df..e72c9cb
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSplitterSelfTest.java
@@@ -30,12 -28,9 +30,14 @@@ import javax.cache.CacheException
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.CacheKeyConfiguration;
import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.CachePeekMode;
+import org.apache.ignite.cache.affinity.AffinityKeyMapped;
+import org.apache.ignite.cache.affinity.Affinity;
+import org.apache.ignite.cache.query.QueryCursor;
+ import org.apache.ignite.cache.affinity.Affinity;
+ import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.cluster.ClusterNode;
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/sql/GridQueryParsingTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite2.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/platforms/cpp/examples/README.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/platforms/cpp/odbc-test/src/queries_test.cpp
----------------------------------------------------------------------
diff --cc modules/platforms/cpp/odbc-test/src/queries_test.cpp
index 21edf4e,a7fc7a9..db9dafb
--- a/modules/platforms/cpp/odbc-test/src/queries_test.cpp
+++ b/modules/platforms/cpp/odbc-test/src/queries_test.cpp
@@@ -314,14 -294,9 +316,14 @@@ BOOST_AUTO_TEST_CASE(TestConnectionProt
Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache;PROTOCOL_VERSION=1.6.0");
}
+BOOST_AUTO_TEST_CASE(TestConnectionProtocolVersion_1_8_0)
+{
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache;PROTOCOL_VERSION=1.8.0");
+}
+
BOOST_AUTO_TEST_CASE(TestTwoRowsInt8)
{
- CheckTwoRowsInt<int8_t>(SQL_C_STINYINT);
+ CheckTwoRowsInt<signed char>(SQL_C_STINYINT);
}
BOOST_AUTO_TEST_CASE(TestTwoRowsUint8)
@@@ -693,131 -674,115 +701,242 @@@ BOOST_AUTO_TEST_CASE(TestDataAtExecutio
BOOST_CHECK(ret == SQL_NO_DATA);
}
+ BOOST_AUTO_TEST_CASE(TestNullFields)
+ {
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache");
+
+ SQLRETURN ret;
+
+ TestType in(1, 2, 3, 4, "5", 6.0f, 7.0, true, Guid(8, 9), BinaryUtils::MakeDateGmt(1987, 6, 5),
+ BinaryUtils::MakeTimestampGmt(1998, 12, 27, 1, 2, 3, 456));
+
+ TestType inNull;
+
+ inNull.allNulls = true;
+
+ testCache.Put(1, in);
+ testCache.Put(2, inNull);
+ testCache.Put(3, in);
+
+ const size_t columnsCnt = 10;
+
+ SQLLEN columnLens[columnsCnt] = { 0 };
+
+ int8_t i8Column;
+ int16_t i16Column;
+ int32_t i32Column;
+ int64_t i64Column;
+ char strColumn[ODBC_BUFFER_SIZE];
+ float floatColumn;
+ double doubleColumn;
+ bool boolColumn;
+ SQL_DATE_STRUCT dateColumn;
+ SQL_TIMESTAMP_STRUCT timestampColumn;
+
+ // Binding columns.
+ ret = SQLBindCol(stmt, 1, SQL_C_STINYINT, &i8Column, 0, &columnLens[0]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 2, SQL_C_SSHORT, &i16Column, 0, &columnLens[1]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 3, SQL_C_SLONG, &i32Column, 0, &columnLens[2]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 4, SQL_C_SBIGINT, &i64Column, 0, &columnLens[3]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 5, SQL_C_CHAR, &strColumn, ODBC_BUFFER_SIZE, &columnLens[4]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 6, SQL_C_FLOAT, &floatColumn, 0, &columnLens[5]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 7, SQL_C_DOUBLE, &doubleColumn, 0, &columnLens[6]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 8, SQL_C_BIT, &boolColumn, 0, &columnLens[7]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 9, SQL_C_DATE, &dateColumn, 0, &columnLens[8]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ ret = SQLBindCol(stmt, 10, SQL_C_TIMESTAMP, ×tampColumn, 0, &columnLens[9]);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ SQLCHAR request[] = "SELECT i8Field, i16Field, i32Field, i64Field, strField, "
+ "floatField, doubleField, boolField, dateField, timestampField FROM TestType ORDER BY _key";
+
+ ret = SQLExecDirect(stmt, request, SQL_NTS);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ // Fetching the first non-null row.
+ ret = SQLFetch(stmt);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ // Checking that columns are not null.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ BOOST_CHECK_NE(columnLens[i], SQL_NULL_DATA);
+
+ // Fetching null row.
+ ret = SQLFetch(stmt);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ // Checking that columns are null.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ BOOST_CHECK_EQUAL(columnLens[i], SQL_NULL_DATA);
+
+ // Fetching the last non-null row.
+ ret = SQLFetch(stmt);
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ // Checking that columns are not null.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ BOOST_CHECK_NE(columnLens[i], SQL_NULL_DATA);
+
+ ret = SQLFetch(stmt);
+ BOOST_CHECK(ret == SQL_NO_DATA);
+ }
+
++
+BOOST_AUTO_TEST_CASE(TestDistributedJoins)
+{
+ // Starting additional node.
+ Ignite node1 = StartAdditionalNode("Node1");
+ Ignite node2 = StartAdditionalNode("Node2");
+
+ const int entriesNum = 1000;
+
+ // Filling cache with data.
+ for (int i = 0; i < entriesNum; ++i)
+ {
+ TestType entry;
+
+ entry.i32Field = i;
+ entry.i64Field = entriesNum - i - 1;
+
+ testCache.Put(i, entry);
+ }
+
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache");
+
+ SQLRETURN ret;
+
+ const size_t columnsCnt = 2;
+
+ SQLBIGINT columns[columnsCnt] = { 0 };
+
+ // Binding colums.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ {
+ ret = SQLBindCol(stmt, i + 1, SQL_C_SLONG, &columns[i], 0, 0);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+ }
+
+ SQLCHAR request[] =
+ "SELECT T0.i32Field, T1.i64Field FROM TestType AS T0 "
+ "INNER JOIN TestType AS T1 "
+ "ON (T0.i32Field = T1.i64Field)";
+
+ ret = SQLExecDirect(stmt, request, SQL_NTS);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ int rowsNum = CountRows(stmt);
+
+ BOOST_CHECK_GT(rowsNum, 0);
+ BOOST_CHECK_LT(rowsNum, entriesNum);
+
+ Disconnect();
+
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache;DISTRIBUTED_JOINS=true;");
+
+ // Binding colums.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ {
+ ret = SQLBindCol(stmt, i + 1, SQL_C_SLONG, &columns[i], 0, 0);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+ }
+
+ ret = SQLExecDirect(stmt, request, SQL_NTS);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ rowsNum = CountRows(stmt);
+
+ BOOST_CHECK_EQUAL(rowsNum, entriesNum);
+}
+
+BOOST_AUTO_TEST_CASE(TestDistributedJoinsWithOldVersion)
+{
+ // Starting additional node.
+ Ignite node1 = StartAdditionalNode("Node1");
+ Ignite node2 = StartAdditionalNode("Node2");
+
+ const int entriesNum = 1000;
+
+ // Filling cache with data.
+ for (int i = 0; i < entriesNum; ++i)
+ {
+ TestType entry;
+
+ entry.i32Field = i;
+ entry.i64Field = entriesNum - i - 1;
+
+ testCache.Put(i, entry);
+ }
+
+ Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;CACHE=cache;DISTRIBUTED_JOINS=true;PROTOCOL_VERSION=1.6.0");
+
+ SQLRETURN ret;
+
+ const size_t columnsCnt = 2;
+
+ SQLBIGINT columns[columnsCnt] = { 0 };
+
+ // Binding colums.
+ for (SQLSMALLINT i = 0; i < columnsCnt; ++i)
+ {
+ ret = SQLBindCol(stmt, i + 1, SQL_C_SLONG, &columns[i], 0, 0);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+ }
+
+ SQLCHAR request[] =
+ "SELECT T0.i32Field, T1.i64Field FROM TestType AS T0 "
+ "INNER JOIN TestType AS T1 "
+ "ON (T0.i32Field = T1.i64Field)";
+
+ ret = SQLExecDirect(stmt, request, SQL_NTS);
+
+ if (!SQL_SUCCEEDED(ret))
+ BOOST_FAIL(GetOdbcErrorMessage(SQL_HANDLE_STMT, stmt));
+
+ int rowsNum = CountRows(stmt);
+
+ BOOST_CHECK_GT(rowsNum, 0);
+ BOOST_CHECK_LT(rowsNum, entriesNum);
+}
+
-
BOOST_AUTO_TEST_SUITE_END()
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/platforms/cpp/odbc/project/vs/odbc.vcxproj
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/platforms/cpp/odbc/src/odbc.cpp
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/modules/platforms/dotnet/Apache.Ignite.Core/Impl/PlatformTarget.cs
----------------------------------------------------------------------
diff --cc modules/platforms/dotnet/Apache.Ignite.Core/Impl/PlatformTarget.cs
index bafc759,f7906ff..f4a07f6
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/PlatformTarget.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/PlatformTarget.cs
@@@ -483,82 -483,7 +483,82 @@@ namespace Apache.Ignite.Core.Imp
}
}
}
-
+
+ /// <summary>
+ /// Perform out-in operation with a single stream.
+ /// </summary>
+ /// <typeparam name="TR">The type of the r.</typeparam>
+ /// <param name="type">Operation type.</param>
+ /// <param name="outAction">Out action.</param>
+ /// <param name="inAction">In action.</param>
+ /// <param name="inErrorAction">The action to read an error.</param>
+ /// <returns>
+ /// Result.
+ /// </returns>
+ protected TR DoOutInOpX<TR>(int type, Action<BinaryWriter> outAction, Func<IBinaryStream, long, TR> inAction,
+ Func<IBinaryStream, Exception> inErrorAction)
+ {
+ Debug.Assert(inErrorAction != null);
+
+ using (var stream = IgniteManager.Memory.Allocate().GetStream())
+ {
+ var writer = _marsh.StartMarshal(stream);
+
+ outAction(writer);
+
+ FinishMarshal(writer);
+
+ var res = UU.TargetInStreamOutLong(_target, type, stream.SynchronizeOutput());
+
+ if (res != Error && inAction == null)
+ return default(TR); // quick path for void operations
+
+ stream.SynchronizeInput();
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ if (res != Error)
+ return inAction != null ? inAction(stream, res) : default(TR);
+
+ throw inErrorAction(stream);
+ }
+ }
+
+ /// <summary>
+ /// Perform out-in operation with a single stream.
+ /// </summary>
+ /// <param name="type">Operation type.</param>
+ /// <param name="outAction">Out action.</param>
+ /// <param name="inErrorAction">The action to read an error.</param>
+ /// <returns>
+ /// Result.
+ /// </returns>
- protected bool DoOutInOpX(int type, Action<BinaryWriter> outAction,
++ protected bool DoOutInOpX(int type, Action<BinaryWriter> outAction,
+ Func<IBinaryStream, Exception> inErrorAction)
+ {
+ Debug.Assert(inErrorAction != null);
+
+ using (var stream = IgniteManager.Memory.Allocate().GetStream())
+ {
+ var writer = _marsh.StartMarshal(stream);
+
+ outAction(writer);
+
+ FinishMarshal(writer);
+
+ var res = UU.TargetInStreamOutLong(_target, type, stream.SynchronizeOutput());
+
+ if (res != Error)
+ return res == True;
+
+ stream.SynchronizeInput();
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ throw inErrorAction(stream);
+ }
+ }
+
/// <summary>
/// Perform out-in operation.
/// </summary>
http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dc1d71/pom.xml
----------------------------------------------------------------------