示例#1
0
        public void Insert_WithMapperInsert_TwoPartitionKeys_OnlyOne()
        {
            // Setup
            var mappingConfig = new MappingConfiguration().Define(new Map <ClassWithTwoPartitionKeys>()
                                                                  .TableName(typeof(ClassWithTwoPartitionKeys).Name).CaseSensitive()
                                                                  .PartitionKey(new string[] { "PartitionKey1", "PartitionKey2" }).CaseSensitive()
                                                                  );
            var table = new Table <ClassWithTwoPartitionKeys>(_session, mappingConfig);

            table.Create();

            // Insert the data
            ClassWithTwoPartitionKeys defaultInstance = new ClassWithTwoPartitionKeys();
            ClassWithTwoPartitionKeys instance        = new ClassWithTwoPartitionKeys();
            var mapper = new Mapper(_session, mappingConfig);

            mapper.Insert(instance);

            List <ClassWithTwoPartitionKeys> instancesRetrieved = new List <ClassWithTwoPartitionKeys>();
            DateTime futureDateTime = DateTime.Now.AddSeconds(5);

            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
            {
                instancesRetrieved = mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\"").ToList();
            }
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);
            instancesRetrieved.Clear();

            futureDateTime = DateTime.Now.AddSeconds(5);
            string cqlSelect = "SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "' and \"PartitionKey2\" = '" + instance.PartitionKey2 + "'";

            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
            {
                instancesRetrieved = mapper.Fetch <ClassWithTwoPartitionKeys>(cqlSelect).ToList();
            }
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);

            var    err            = Assert.Throws <InvalidQueryException>(() => mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "'"));
            string expectedErrMsg = "Partition key part(s:)? PartitionKey2 must be restricted (since preceding part is|as other parts are)";

            if (TestClusterManager.CheckCassandraVersion(false, Version.Parse("3.10"), Comparison.GreaterThanOrEqualsTo))
            {
                expectedErrMsg = "Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING";
            }
            StringAssert.IsMatch(expectedErrMsg, err.Message);

            Assert.Throws <InvalidQueryException>(() => mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey2\" = '" + instance.PartitionKey2 + "'"));
        }
示例#2
0
        public void Insert_WithMapperInsert_TwoPartitionKeys_OnlyOne()
        {
            // Setup
            var mappingConfig = new MappingConfiguration().Define(new Map <ClassWithTwoPartitionKeys>()
                                                                  .TableName(typeof(ClassWithTwoPartitionKeys).Name).CaseSensitive()
                                                                  .PartitionKey(new string[] { "PartitionKey1", "PartitionKey2" }).CaseSensitive()
                                                                  );
            var table = new Table <ClassWithTwoPartitionKeys>(_session, mappingConfig);

            table.Create();

            // Insert the data
            ClassWithTwoPartitionKeys defaultInstance = new ClassWithTwoPartitionKeys();
            ClassWithTwoPartitionKeys instance        = new ClassWithTwoPartitionKeys();
            var mapper = new Mapper(_session, mappingConfig);

            mapper.Insert(instance);

            List <ClassWithTwoPartitionKeys> instancesRetrieved = new List <ClassWithTwoPartitionKeys>();
            DateTime futureDateTime = DateTime.Now.AddSeconds(5);

            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
            {
                instancesRetrieved = mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\"").ToList();
            }
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);
            instancesRetrieved.Clear();

            futureDateTime = DateTime.Now.AddSeconds(5);
            string cqlSelect = "SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "' and \"PartitionKey2\" = '" + instance.PartitionKey2 + "'";

            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
            {
                instancesRetrieved = mapper.Fetch <ClassWithTwoPartitionKeys>(cqlSelect).ToList();
            }
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);

            var    err            = Assert.Throws <InvalidQueryException>(() => mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "'"));
            string expectedErrMsg = "Partition key part(s:)? PartitionKey2 must be restricted (since preceding part is|as other parts are)";

            StringAssert.IsMatch(expectedErrMsg, err.Message);

            Assert.Throws <InvalidQueryException>(() => mapper.Fetch <ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey2\" = '" + instance.PartitionKey2 + "'"));
        }
示例#3
0
        public void Insert_WithMapperInsert_TwoPartitionKeys_OnlyOne()
        {
            // Setup
            var mappingConfig = new MappingConfiguration().Define(new Map<ClassWithTwoPartitionKeys>()
                .TableName(typeof (ClassWithTwoPartitionKeys).Name).CaseSensitive()
                .PartitionKey(new string[] {"PartitionKey1", "PartitionKey2" }).CaseSensitive()
                );
            var table = new Table<ClassWithTwoPartitionKeys>(_session, mappingConfig);
            table.Create();

            // Insert the data
            ClassWithTwoPartitionKeys defaultInstance = new ClassWithTwoPartitionKeys();
            ClassWithTwoPartitionKeys instance = new ClassWithTwoPartitionKeys();
            var mapper = new Mapper(_session, mappingConfig);
            mapper.Insert(instance);

            List<ClassWithTwoPartitionKeys> instancesRetrieved = new List<ClassWithTwoPartitionKeys>();
            DateTime futureDateTime = DateTime.Now.AddSeconds(5);
            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
                instancesRetrieved = mapper.Fetch<ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\"").ToList();
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);
            instancesRetrieved.Clear();

            futureDateTime = DateTime.Now.AddSeconds(5);
            string cqlSelect = "SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "' and \"PartitionKey2\" = '" + instance.PartitionKey2 + "'";
            while (instancesRetrieved.Count < 1 && DateTime.Now < futureDateTime)
                instancesRetrieved = mapper.Fetch<ClassWithTwoPartitionKeys>(cqlSelect).ToList();
            Assert.AreEqual(1, instancesRetrieved.Count);
            Assert.AreEqual(defaultInstance.PartitionKey1, instancesRetrieved[0].PartitionKey1);
            Assert.AreEqual(defaultInstance.PartitionKey2, instancesRetrieved[0].PartitionKey2);

            var err = Assert.Throws<InvalidQueryException>(() => mapper.Fetch<ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey1\" = '" + instance.PartitionKey1 + "'"));
            string expectedErrMsg = "Partition key part(s:)? PartitionKey2 must be restricted (since preceding part is|as other parts are)";
            StringAssert.IsMatch(expectedErrMsg, err.Message);

            Assert.Throws<InvalidQueryException>(() => mapper.Fetch<ClassWithTwoPartitionKeys>("SELECT * from \"" + table.Name + "\" where \"PartitionKey2\" = '" + instance.PartitionKey2 + "'"));
        }