internal string CreateN1QlQuery(IBucket bucket, Expression expression, ClusterVersion clusterVersion,
                                        bool selectDocumentMetadata, out ScalarResultBehavior resultBehavior)
        {
            var serializer = new Core.Serialization.DefaultSerializer();

            var bucketContext = new Mock <IBucketContext>();

            bucketContext.SetupGet(p => p.Bucket).Returns(bucket);
            bucketContext.SetupGet(p => p.Configuration).Returns(new ClientConfiguration
            {
                Serializer = () => serializer
            });

            var queryModel = QueryParserHelper.CreateQueryParser(bucketContext.Object).GetParsedQuery(expression);

            var queryGenerationContext = new N1QlQueryGenerationContext()
            {
                MemberNameResolver           = MemberNameResolver,
                MethodCallTranslatorProvider = new DefaultMethodCallTranslatorProvider(),
                Serializer             = serializer,
                SelectDocumentMetadata = selectDocumentMetadata,
                ClusterVersion         = clusterVersion
            };

            var visitor = new N1QlQueryModelVisitor(queryGenerationContext);

            visitor.VisitQueryModel(queryModel);

            resultBehavior = visitor.ScalarResultBehavior;
            return(visitor.GetQuery());
        }
Esempio n. 2
0
        internal string CreateN1QlQuery(IBucket bucket, Expression expression, ClusterVersion clusterVersion,
                                        bool selectDocumentMetadata, out ScalarResultBehavior resultBehavior)
        {
            var mockCluster = new Mock <ICluster>();

            mockCluster
            .Setup(p => p.ClusterServices)
            .Returns(ServiceProvider);

            var queryModel = QueryParserHelper.CreateQueryParser(mockCluster.Object).GetParsedQuery(expression);

            var queryGenerationContext = new N1QlQueryGenerationContext()
            {
                MemberNameResolver           = MemberNameResolver,
                MethodCallTranslatorProvider = new DefaultMethodCallTranslatorProvider(),
                Serializer             = ServiceProvider.GetRequiredService <ITypeSerializer>(),
                SelectDocumentMetadata = selectDocumentMetadata,
                ClusterVersion         = clusterVersion,
                LoggerFactory          = LoggerFactory
            };

            var visitor = new N1QlQueryModelVisitor(queryGenerationContext);

            visitor.VisitQueryModel(queryModel);

            resultBehavior = visitor.ScalarResultBehavior;
            return(visitor.GetQuery());
        }
Esempio n. 3
0
        public void ctor_BuildLessThanZeroAndSuffix_AlwaysNegativeOne()
        {
            // Act

            var version = new ClusterVersion(new System.Version(1, 0, 0), -2, "suffix");

            // Assert

            Assert.Equal(-1, version.Build);
        }
Esempio n. 4
0
        public void Parse_GoodVersion_ReturnsVersion()
        {
            // Act

            var version = ClusterVersion.Parse("1.0.0");

            // Assert

            Assert.Equal(new ClusterVersion(new System.Version(1, 0, 0)), version);
        }
Esempio n. 5
0
        public BucketQueryExecutorEmulator(N1QLTestBase test, ClusterVersion clusterVersion)
        {
            if (test == null)
            {
                throw new ArgumentNullException("test");
            }

            _test           = test;
            _clusterVersion = clusterVersion;
        }
        /// <summary>
        /// Serializes the object to JSON.
        /// </summary>
        /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param>
        /// <param name="obj">The object to serialize to JSON.</param>
        internal static void Serialize(JsonWriter writer, ClusterVersion obj)
        {
            // Required properties are always serialized, optional properties are serialized when not null.
            writer.WriteStartObject();
            if (obj.Version != null)
            {
                writer.WriteProperty(obj.Version, "Version", JsonWriterExtensions.WriteStringValue);
            }

            writer.WriteEndObject();
        }
Esempio n. 7
0
        public void TryParse_BadVesion_ReturnsFalse()
        {
            // Act

            ClusterVersion version;
            var            result = ClusterVersion.TryParse("abcd", out version);

            // Assert

            Assert.False(result);
        }
Esempio n. 8
0
        public void TryParse_GoodVersion_ReturnsTrueAndVersion()
        {
            // Act

            ClusterVersion version;
            var            result = ClusterVersion.TryParse("1.0.0", out version);

            // Assert

            Assert.True(result);
            Assert.Equal(new ClusterVersion(new System.Version(1, 0, 0)), version);
        }
Esempio n. 9
0
        public void TryParse_WithBuildAndSuffix_ReturnsTrueAndVersion()
        {
            // Act

            ClusterVersion version;
            var            result = ClusterVersion.TryParse("1.0.0-100-suffix", out version);

            // Assert

            Assert.True(result);
            Assert.Equal(new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix"), version);
        }
Esempio n. 10
0
        public void TryParse_WithSegmentedSuffix_ReturnsTrueAndVersion()
        {
            // Act

            ClusterVersion version;
            var            result = ClusterVersion.TryParse("1.0.0-suffix-suffix2", out version);

            // Assert

            Assert.True(result);
            Assert.Equal(new ClusterVersion(new System.Version(1, 0, 0), -1, "suffix-suffix2"), version);
        }
Esempio n. 11
0
        public void Equals_DifferentBuild_ReturnsFalse()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0), 100);

            // Act

            var result = version.Equals(new ClusterVersion(new System.Version(1, 0, 0), 101));

            // Assert

            Assert.False(result);
        }
Esempio n. 12
0
        public void Equals_DifferentVersion_ReturnsTrue()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0));

            // Act

            var result = version.Equals(new ClusterVersion(new System.Version(1, 1, 0)));

            // Assert

            Assert.False(result);
        }
Esempio n. 13
0
        public void Equals_NotClusterVersion_ReturnsFalse()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0));

            // Act

            var result = version.Equals(new object());

            // Assert

            Assert.False(result);
        }
Esempio n. 14
0
        public void Equals_DifferentSuffix_ReturnsFalse()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix");

            // Act

            var result = version.Equals(new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix2"));

            // Assert

            Assert.False(result);
        }
Esempio n. 15
0
        public void ToString_VersionOnly_ReturnsVersion()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0));

            // Act

            var result = version.ToString();

            // Assert

            Assert.Equal("1.0.0", result);
        }
Esempio n. 16
0
        public void Equals_SameSuffix_ReturnsTrue()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix");

            // Act

            var result = version.Equals(new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix"));

            // Assert

            Assert.True(result);
        }
Esempio n. 17
0
        public void ToString_NoBuild_ReturnsVersionAndSuffix()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0), -1, "suffix");

            // Act

            var result = version.ToString();

            // Assert

            Assert.Equal("1.0.0-suffix", result);
        }
Esempio n. 18
0
        public void ToString_NullSuffix_ReturnsVersionAndBuild()
        {
            // Arrange

            var version = new ClusterVersion(new System.Version(1, 0, 0), 100, null);

            // Act

            var result = version.ToString();

            // Assert

            Assert.Equal("1.0.0-100", result);
        }
Esempio n. 19
0
        public void Deconstruct_Double_GetsValue()
        {
            // Arrange

            var clusterVersion = new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix");

            // Act

            var(version, build) = clusterVersion;

            // Assert

            Assert.Equal(new System.Version(1, 0, 0), version);
            Assert.Equal(100, build);
        }
Esempio n. 20
0
        public void ComparisonOperators_GreaterSuffix()
        {
            // Arrange

            var leftVersion  = new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix2");
            var rightVersion = new ClusterVersion(new System.Version(1, 0, 0), 100, "suffix");

            // Assert

            Assert.False(leftVersion < rightVersion);
            Assert.False(leftVersion <= rightVersion);
            Assert.False(leftVersion == rightVersion);
            Assert.True(leftVersion != rightVersion);
            Assert.True(leftVersion >= rightVersion);
            Assert.True(leftVersion > rightVersion);
        }
Esempio n. 21
0
        public void ComparisonOperators_EqualBuild()
        {
            // Arrange

            var leftVersion  = new ClusterVersion(new System.Version(1, 0, 0), 100);
            var rightVersion = new ClusterVersion(new System.Version(1, 0, 0), 100);

            // Assert

            Assert.False(leftVersion < rightVersion);
            Assert.True(leftVersion <= rightVersion);
            Assert.True(leftVersion == rightVersion);
            Assert.False(leftVersion != rightVersion);
            Assert.True(leftVersion >= rightVersion);
            Assert.False(leftVersion > rightVersion);
        }
        public async Task InitializeMembershipTable(bool tryInitTableVersion)
        {
            try
            {
                var cassandraCluster =
                    Cluster.Builder()
                    .AddContactPoints(_cassandraClusteringOptions.ContactPoints.Split(','))
                    .Build();

                var session = await cassandraCluster.ConnectAsync();

                await Task.Run(
                    () =>
                {
                    var keyspace = _cassandraClusteringOptions.Keyspace;
                    session.CreateKeyspaceIfNotExists(
                        keyspace,
                        new Dictionary <string, string>
                    {
                        { "class", "SimpleStrategy" },
                        { "replication_factor", _cassandraClusteringOptions.ReplicationFactor.ToString() }
                    });

                    session.ChangeKeyspace(keyspace);
                });

                var mappingConfiguration = new MappingConfiguration().Define(new EntityMappings(_cassandraClusteringOptions.TableName));

                _dataTable = new Table <ClusterMembership>(session, mappingConfiguration);
                await Task.Run(() => _dataTable.CreateIfNotExists());

                _mapper = new Mapper(session, mappingConfiguration);

                if (tryInitTableVersion)
                {
                    await _mapper.InsertAsync(
                        ClusterVersion.New(_clusterId),
                        CqlQueryOptions.New().SetConsistencyLevel(DefaultConsistencyLevel));
                }
            }
            catch (DriverException)
            {
                _logger.LogWarning("Cassandra driver error occured while initializing membership data table for cluster {clusterId}.", _clusterId);
                throw;
            }
        }
Esempio n. 23
0
 protected string CreateN1QlQuery(IBucket bucket, Expression expression, ClusterVersion clusterVersion,
                                  bool selectDocumentMetadata)
 {
     return(CreateN1QlQuery(bucket, expression, clusterVersion, selectDocumentMetadata, out var _));
 }
        /// <summary>
        /// Gets the version of the cluster hosting a bucket.
        /// </summary>
        /// <param name="bucket">Couchbase bucket.</param>
        /// <exception cref="ArgumentNullException"><paramref name="bucket"/> is null.</exception>
        /// <returns>The version of the cluster hosting this bucket, or 4.0.0 if unable to determine the version.</returns>
        public ClusterVersion GetVersion(IBucket bucket)
        {
            if (bucket == null)
            {
                throw new ArgumentNullException("bucket");
            }

            var cluster = bucket.Cluster;

            // First check for an existing result
            var version = CacheLookup(cluster);

            if (version != null)
            {
                return(version.Value);
            }

            var contextCache = SynchronizationContext.Current;

            SynchronizationContext.SetSynchronizationContext(null);

            try
            {
                // Only check one cluster at a time, this prevents multiple lookups during bootstrap
                lock (_lock)
                {
                    // In case the version was received while we were waiting for the lock, check for it again
                    version = CacheLookup(cluster);
                    if (version != null)
                    {
                        return(version.Value);
                    }

                    try
                    {
                        // Use the bucket to get the cluster version, in case we're using old-style bucket passwords
                        version = bucket.GetClusterVersionAsync().Result;

                        if (version != null)
                        {
                            CacheStore(cluster, version.Value);
                            return(version.Value);
                        }
                    }
                    catch (Exception ex)
                    {
                        _log.Error("Unhandled error getting cluster version", ex);

                        // Don't cache on exception, but assume 4.0 for now
                        return(new ClusterVersion(new Version(4, 0, 0)));
                    }

                    // No version information could be loaded from any node
                    var fallbackVersion = new ClusterVersion(new Version(4, 0, 0));
                    CacheStore(cluster, fallbackVersion);
                    return(fallbackVersion);
                }
            }
            finally
            {
                if (contextCache != null)
                {
                    SynchronizationContext.SetSynchronizationContext(contextCache);
                }
            }
        }
Esempio n. 25
0
 protected string CreateN1QlQuery(IBucket bucket, Expression expression, ClusterVersion clusterVersion)
 {
     return(CreateN1QlQuery(bucket, expression, clusterVersion, false));
 }
Esempio n. 26
0
 public ClusterQueryExecutorEmulator(N1QLTestBase test, ClusterVersion clusterVersion)
 {
     Test            = test ?? throw new ArgumentNullException(nameof(test));
     _clusterVersion = clusterVersion;
 }
Esempio n. 27
0
        public void Parse_BadVersion_ThrowsFormatException()
        {
            // Act/Assert

            Assert.Throws <FormatException>(() => ClusterVersion.Parse("abcd"));
        }
 internal virtual void CacheStore(ICluster cluster, ClusterVersion version)
 {
     _versionsByUri.AddOrUpdate(cluster, version, (key, oldValue) => version);
 }