示例#1
0
        protected virtual void Insert(IEntityProxy entity, TableAttribute table, ColumnInfoCollection columns)
        {
            var values = new ValuesExpression();
            var insert = new InsertExpression(new TableExpression(table))
            {
                Values = values
            };
            var type          = entity.GetType().BaseType;
            var discriminator = columns.SingleOrDefault(c => c.IsDiscriminatorColumn);

            if (discriminator != null)
            {
                values.AddColumn(discriminator.ToColumnExpression());
                values.AddValue(Expression.Constant(type.FullName));
            }

            foreach (var pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                try
                {
                    var column = columns.SingleOrDefault(c => c.DescribesProperty(pi));
                    if (column == null)
                    {
                        continue;
                    }

                    var value = pi.GetValue(entity);

                    if (column.IsIdentity)
                    {
                        var defaultValue = Activator.CreateInstance(pi.PropertyType);
                        if (!value.Equals(defaultValue))
                        {
                            insert.IsIdentityInsertEnabled = true;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    values.AddColumn(column.ToColumnExpression());
                    values.AddValue(Expression.Constant(value));
                }
                catch (Exception ex)
                {
                    Debugger.Break();
                }
            }

            ExecuteNonQuery(insert);
        }
示例#2
0
        /*
         *      BNF:
         *      <insert statement> ::=
         *              insert into <table identifier>"("<column identifier commalist>")"
         *                      (<values clause> | <query expression>)
         *
         *      <values clause> ::=
         *              values"("<expression commalist>")"
         */
        protected Statement InsertStatement(Lexer lexer)
        {
            lexer.NextToken();
            lexer.NextToken().CheckSymbol(Keywords.Into);
            InsertStatement statement = new InsertStatement();

            statement.InsertClause = new InsertClause();
            statement.InsertClause.TableExpression = new TableExpression(QualifiedIdentifier(lexer));
            lexer.NextToken().CheckSymbol(Keywords.BeginGroup);
            do
            {
                statement.InsertClause.Columns.Add(new InsertFieldExpression(Identifier(lexer)));
                if (lexer.PeekTokenSymbol(1) == Keywords.ListSeparator)
                {
                    lexer.NextToken();
                }
                else
                {
                    break;
                }
            } while (true);
            lexer.NextToken().CheckSymbol(Keywords.EndGroup);
            if (lexer.PeekTokenSymbol(1) == Keywords.Values)
            {
                ValuesExpression values = new ValuesExpression();
                lexer.NextToken();
                lexer.NextToken().CheckSymbol(Keywords.BeginGroup);
                do
                {
                    values.Expressions.Add(Expression(lexer));
                    if (lexer.PeekTokenSymbol(1) == Keywords.ListSeparator)
                    {
                        lexer.NextToken();
                    }
                    else
                    {
                        break;
                    }
                } while (true);
                lexer.NextToken().CheckSymbol(Keywords.EndGroup);
                statement.Values = values;
            }
            else
            {
                lexer.NextToken();
                statement.Values = QueryExpression(lexer);
            }

            return(statement);
        }