Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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
            });
        }
Esempio n. 3
0
        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
            });
        }
Esempio n. 4
0
        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);
        }