private QueryTree.InsertExpression Parse(object entity, ConstantExpressionCatcher ec) { var entityMapping = _session.Factory.Mappings.MappingsByType[entity.GetType()]; var insert = new QueryTree.InsertExpression(); var index = 0; insert.From = new QueryTree.ValueGroupExpression { Values = entityMapping.Maps.Select( x => (QueryTree.Expression) ec.Catch(new QueryTree.ConstantExpression { ParameterName = "p" + index++, Value = x.Property.GetValue(entity) })).ToList() }; insert.Columns = new List <QueryTree.UnAliasedColumnExpression>( entityMapping.Maps.Select(x => new QueryTree.UnAliasedColumnExpression { Column = x.ColumnName })); insert.Into = new QueryTree.UnAliasedTableExpression { Table = entityMapping.TableName }; return(insert); }
public ParsedQuery Update(object entity, List <Tuple <MapMapping, object> > updates) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var ec = new ConstantExpressionCatcher(); var ex = Parse(entity, updates, ec); return(new ParsedQuery { Expression = ex, Parameters = ec.Constants }); }
public ParsedQuery Insert(object entity) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } var ec = new ConstantExpressionCatcher(); var ex = Parse(entity, ec); return(new ParsedQuery { Expression = ex, Parameters = ec.Constants }); }
private QueryTree.UpdateExpression Parse(object entity, List <Tuple <MapMapping, object> > updates, ConstantExpressionCatcher ec) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (updates == null) { throw new ArgumentNullException(nameof(updates)); } var entityMapping = _session.Factory.Mappings.MappingsByType[entity.GetType()]; var update = new QueryTree.UpdateExpression(); var index = 0; update.Update = new QueryTree.UnAliasedTableExpression { Table = entityMapping.TableName }; update.Set = updates.ToDictionary( x => new QueryTree.UnAliasedColumnExpression { Column = x.Item1.ColumnName }, x => ec.Catch(new QueryTree.ConstantExpression { ParameterName = "p" + index++, Value = x.Item2 })); update.Where = entityMapping.Key.Keys.Select( x => new QueryTree.BinaryExpression { Left = new QueryTree.UnAliasedColumnExpression { Column = x.ColumnName }, Operator = QueryTree.BooleanOperator.Equal, Right = ec.Catch(new QueryTree.ConstantExpression { ParameterName = "p" + index++, Value = x.Property.GetValue(entity) }) }).ToList(); return(update); }