public PocoData(Type pocoType, string tableName, string keyspaceName, LookupKeyedCollection<string, PocoColumn> columns, string[] partitionkeys, Tuple<string, SortOrder>[] clusteringKeys, bool caseSensitive, bool compact, bool allowFiltering) { if (pocoType == null) throw new ArgumentNullException("pocoType"); if (tableName == null) throw new ArgumentNullException("tableName"); if (columns == null) throw new ArgumentNullException("columns"); if (partitionkeys == null) throw new ArgumentNullException("partitionkeys"); if (clusteringKeys == null) throw new ArgumentNullException("clusteringKeys"); PocoType = pocoType; TableName = tableName; Columns = columns; CaseSensitive = caseSensitive; CompactStorage = compact; AllowFiltering = allowFiltering; KeyspaceName = keyspaceName; _columnsByMemberName = columns.ToDictionary(c => c.MemberInfo.Name, c => c); PartitionKeys = partitionkeys.Where(columns.Contains).Select(key => columns[key]).ToList(); ClusteringKeys = clusteringKeys.Where(c => columns.Contains(c.Item1)).Select(c => Tuple.Create(columns[c.Item1], c.Item2)).ToList(); _primaryKeys = new HashSet<string>(PartitionKeys.Select(p => p.ColumnName).Concat(ClusteringKeys.Select(c => c.Item1.ColumnName))); MissingPrimaryKeyColumns = new List<string>(); if (PartitionKeys.Count != partitionkeys.Length) { MissingPrimaryKeyColumns.AddRange(partitionkeys.Where(k => !columns.Contains(k))); } if (ClusteringKeys.Count != clusteringKeys.Length) { MissingPrimaryKeyColumns.AddRange(partitionkeys.Where(k => !columns.Contains(k))); } }
private PocoData CreatePocoData(Type pocoType, ITypeDefinition typeDefinition) { // Figure out the table name (if not specified, use the POCO class' name) string tableName = typeDefinition.TableName ?? pocoType.Name; // Figure out the primary key columns (if not specified, assume a column called "id" is used) var pkColumnNames = typeDefinition.PartitionKeys ?? new[] { "id" }; // Get column definitions for all mappable fields and properties IEnumerable <IColumnDefinition> fieldsAndProperties = GetMappableFields(typeDefinition.PocoType) .Select(typeDefinition.GetColumnDefinition) .Union(GetMappableProperties(typeDefinition.PocoType).Select(typeDefinition.GetColumnDefinition)) .OrderBy(col => col?.ColumnName ?? col?.MemberInfo.Name ?? string.Empty, StringComparer.OrdinalIgnoreCase); // If explicit columns, only get column definitions that are explicitly defined, otherwise get all columns that aren't marked as Ignored IEnumerable <IColumnDefinition> columnDefinitions = typeDefinition.ExplicitColumns ? fieldsAndProperties.Where(c => c.IsExplicitlyDefined) : fieldsAndProperties.Where(c => c.Ignore == false); // Create PocoColumn collection (where ordering is guaranteed to be consistent) LookupKeyedCollection <string, PocoColumn> columns = columnDefinitions .Select(PocoColumn.FromColumnDefinition) .ToLookupKeyedCollection(pc => pc.ColumnName, StringComparer.OrdinalIgnoreCase); var clusteringKeyNames = typeDefinition.ClusteringKeys ?? new Tuple <string, SortOrder> [0]; return(new PocoData(pocoType, tableName, typeDefinition.KeyspaceName, columns, pkColumnNames, clusteringKeyNames, typeDefinition.CaseSensitive, typeDefinition.CompactStorage, typeDefinition.AllowFiltering)); }
public PocoData(Type pocoType, string tableName, string keyspaceName, LookupKeyedCollection <string, PocoColumn> columns, string[] partitionkeys, Tuple <string, SortOrder>[] clusteringKeys, bool caseSensitive, bool compact, bool allowFiltering) { if (partitionkeys == null) { throw new ArgumentNullException("partitionkeys"); } if (clusteringKeys == null) { throw new ArgumentNullException("clusteringKeys"); } PocoType = pocoType ?? throw new ArgumentNullException("pocoType"); TableName = tableName ?? throw new ArgumentNullException("tableName"); Columns = columns ?? throw new ArgumentNullException("columns"); CaseSensitive = caseSensitive; CompactStorage = compact; AllowFiltering = allowFiltering; KeyspaceName = keyspaceName; _columnsByMemberName = columns.ToDictionary(c => c.MemberInfo.Name, c => c); PartitionKeys = partitionkeys.Where(columns.Contains).Select(key => columns[key]).ToList(); ClusteringKeys = clusteringKeys.Where(c => columns.Contains(c.Item1)).Select(c => Tuple.Create(columns[c.Item1], c.Item2)).ToList(); _primaryKeys = new HashSet <string>(PartitionKeys.Select(p => p.ColumnName).Concat(ClusteringKeys.Select(c => c.Item1.ColumnName))); MissingPrimaryKeyColumns = new List <string>(); if (PartitionKeys.Count != partitionkeys.Length) { MissingPrimaryKeyColumns.AddRange(partitionkeys.Where(k => !columns.Contains(k))); } if (ClusteringKeys.Count != clusteringKeys.Length) { MissingPrimaryKeyColumns.AddRange(partitionkeys.Where(k => !columns.Contains(k))); } }
/// <summary> /// Creates a new instance of MappingConfiguration to store the mapping definitions to be used by the Mapper or Linq components. /// </summary> public MappingConfiguration() { _typeConverter = new DefaultTypeConverter(); _typeDefinitions = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); MapperFactory = new MapperFactory(_typeConverter, new PocoDataFactory(_typeDefinitions)); StatementFactory = new StatementFactory(); }
public void GenerateUpdate_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId).Column(u => u.UserAge, cm => cm.WithName("AGE"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateUpdate<ExplicitColumnsUser>(); Assert.AreEqual("UPDATE users SET Name = ?, AGE = ? WHERE UserId = ?", cql); }
/// <summary> /// Creates a new factory responsible of PocoData instances. /// </summary> /// <param name="predefinedTypeDefinitions">Explicitly declared type definitions</param> public PocoDataFactory(LookupKeyedCollection <Type, ITypeDefinition> predefinedTypeDefinitions) { if (predefinedTypeDefinitions == null) { throw new ArgumentNullException("predefinedTypeDefinitions"); } _predefinedTypeDefinitions = predefinedTypeDefinitions; _cache = new ConcurrentDictionary <Type, PocoData>(); }
private CqlClientConfiguration(ISession session) { if (session == null) { throw new ArgumentNullException("session"); } _session = session; _typeConverter = new DefaultTypeConverter(); _typeDefinitions = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); }
public void AddSelect_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId).Column(u => u.UserAge, cm => cm.WithName("AGE"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = Cql.New("WHERE UserId = ?", Guid.Empty); cqlGenerator.AddSelect<ExplicitColumnsUser>(cql); Assert.AreEqual("SELECT UserId, Name, AGE FROM users WHERE UserId = ?", cql.Statement); }
public void PrependUpdate_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId)); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = Cql.New("SET Name = ? WHERE UserId = ?", "New name", Guid.Empty); cqlGenerator.PrependUpdate<ExplicitColumnsUser>(cql); Assert.AreEqual("UPDATE users SET Name = ? WHERE UserId = ?", cql.Statement); }
public void GenerateDelete_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>().TableName("USERS").PartitionKey(u => u.UserId)); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateDelete <ExplicitColumnsUser>(); Assert.AreEqual("DELETE FROM USERS WHERE UserId = ?", cql); }
public void GenerateUpdate_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId).Column(u => u.UserAge, cm => cm.WithName("AGE"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateUpdate <ExplicitColumnsUser>(); Assert.AreEqual("UPDATE users SET Name = ?, AGE = ? WHERE UserId = ?", cql); }
public void PrependUpdate_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId)); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = Cql.New("SET Name = ? WHERE UserId = ?", "New name", Guid.Empty); cqlGenerator.PrependUpdate <ExplicitColumnsUser>(cql); Assert.AreEqual("UPDATE users SET Name = ? WHERE UserId = ?", cql.Statement); }
public void AddSelect_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>().TableName("users").PartitionKey(u => u.UserId).Column(u => u.UserAge, cm => cm.WithName("AGE"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = Cql.New("WHERE UserId = ?", Guid.Empty); cqlGenerator.AddSelect <ExplicitColumnsUser>(cql); Assert.AreEqual("SELECT UserId, Name, AGE FROM users WHERE UserId = ?", cql.Statement); }
public void GenerateInsert_Without_Nulls_Should_Throw_When_Value_Length_Dont_Match_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); Assert.Throws <ArgumentException>(() => cqlGenerator.GenerateInsert <ExplicitColumnsUser>(false, new object[] { Guid.NewGuid() }, out object[] queryParameters)); }
public void GenerateInsert_CaseSensitive_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>() .TableName("USERS") .PartitionKey(u => u.UserId) .CaseSensitive()); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateInsert <ExplicitColumnsUser>(true, new object[0], out object[] queryParameters); Assert.AreEqual(@"INSERT INTO ""USERS"" (""Name"", ""UserAge"", ""UserId"") VALUES (?, ?, ?)", cql); }
public void GenerateInsert_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateInsert <ExplicitColumnsUser>(true, new object[0], out object[] queryParameters); Assert.AreEqual(@"INSERT INTO USERS (ID, Name, UserAge) VALUES (?, ?, ?)", cql); }
public void GenerateDelete_CaseSensitive_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID")) .CaseSensitive()); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateDelete <ExplicitColumnsUser>(); Assert.AreEqual(@"DELETE FROM ""USERS"" WHERE ""ID"" = ?", cql); }
public void GenerateInsert_Without_Nulls_First_Value_Null_Test() { var types = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map <ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var values = new object[] { null, "name", 100 }; var cql = cqlGenerator.GenerateInsert <ExplicitColumnsUser>(false, values, out object[] queryParameters); Assert.AreEqual(@"INSERT INTO USERS (Name, UserAge) VALUES (?, ?)", cql); CollectionAssert.AreEqual(values.Where(v => v != null), queryParameters); cql = cqlGenerator.GenerateInsert <ExplicitColumnsUser>(false, values, out queryParameters, true); Assert.AreEqual(@"INSERT INTO USERS (Name, UserAge) VALUES (?, ?) IF NOT EXISTS", cql); CollectionAssert.AreEqual(values.Where(v => v != null), queryParameters); }
public void GenerateInsert_CaseSensitive_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>() .TableName("USERS") .PartitionKey(u => u.UserId) .CaseSensitive()); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); object[] queryParameters; var cql = cqlGenerator.GenerateInsert<ExplicitColumnsUser>(true, new object[0], out queryParameters); Assert.AreEqual(@"INSERT INTO ""USERS"" (""UserId"", ""Name"", ""UserAge"") VALUES (?, ?, ?)", cql); }
public void GenerateInsert_Without_Nulls_Should_Throw_When_Value_Length_Dont_Match_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); object[] queryParameters; Assert.Throws<ArgumentException>(() => cqlGenerator.GenerateInsert<ExplicitColumnsUser>(false, new object[] { Guid.NewGuid()}, out queryParameters)); }
public void GenerateInsert_Without_Nulls_First_Value_Null_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var values = new object[] { null, "name", 100 }; object[] queryParameters; var cql = cqlGenerator.GenerateInsert<ExplicitColumnsUser>(false, values, out queryParameters); Assert.AreEqual(@"INSERT INTO USERS (Name, UserAge) VALUES (?, ?)", cql); CollectionAssert.AreEqual(values.Where(v => v != null), queryParameters); cql = cqlGenerator.GenerateInsert<ExplicitColumnsUser>(false, values, out queryParameters, true); Assert.AreEqual(@"INSERT INTO USERS (Name, UserAge) VALUES (?, ?) IF NOT EXISTS", cql); CollectionAssert.AreEqual(values.Where(v => v != null), queryParameters); }
public void GenerateInsert_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID"))); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); object[] queryParameters; var cql = cqlGenerator.GenerateInsert<ExplicitColumnsUser>(true, new object[0], out queryParameters); Assert.AreEqual(@"INSERT INTO USERS (ID, Name, UserAge) VALUES (?, ?, ?)", cql); }
public void GenerateDelete_CaseSensitive_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>() .TableName("USERS") .PartitionKey("ID") .Column(u => u.UserId, cm => cm.WithName("ID")) .CaseSensitive()); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateDelete<ExplicitColumnsUser>(); Assert.AreEqual(@"DELETE FROM ""USERS"" WHERE ""ID"" = ?", cql); }
/// <summary> /// Creates a new collection of mappings. Inheritors should define all their mappings in the constructor of the sub-class. /// </summary> public Mappings() { Definitions = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); }
public void GenerateDelete_Test() { var types = new LookupKeyedCollection<Type, ITypeDefinition>(td => td.PocoType); types.Add(new Map<ExplicitColumnsUser>().TableName("USERS").PartitionKey(u => u.UserId)); var pocoFactory = new PocoDataFactory(types); var cqlGenerator = new CqlGenerator(pocoFactory); var cql = cqlGenerator.GenerateDelete<ExplicitColumnsUser>(); Assert.AreEqual("DELETE FROM USERS WHERE UserId = ?", cql); }
/// <summary> /// Clears all the mapping defined for this instance /// </summary> internal void Clear() { _typeDefinitions = new LookupKeyedCollection <Type, ITypeDefinition>(td => td.PocoType); MapperFactory = new MapperFactory(_typeConverter, new PocoDataFactory(_typeDefinitions)); StatementFactory = new StatementFactory(); }