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 + "'")); }
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 + "'")); }
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 + "'")); }