public void Initialize() 
 {
     expression =
         new UpdateDataExpression() 
         {
             TableName = "ExampleTable",
             Set = new List<KeyValuePair<string, object>> 
             {
                 new KeyValuePair<string, object>("Column", "value")
             },
             IsAllRows = false
         };
 }
示例#2
0
 public abstract string Generate(UpdateDataExpression expression);
 public override string Generate(UpdateDataExpression expression)
 {
     throw new NotImplementedException();
 }
 public override string Generate(UpdateDataExpression expression)
 {
     return string.Format("UPDATE {0}.{1}", Quoter.QuoteSchemaName(expression.SchemaName), base.Generate(expression));
 }
 public void Truncate(UpdateDataExpression expression)
 {
     expression.TableName = Truncate(expression.TableName);
 }
        public override string Generate(UpdateDataExpression expression)
        {
            List<string> updateItems = new List<string>();
            List<string> whereClauses = new List<string>();

            foreach (var item in expression.Set)
            {
                updateItems.Add(string.Format("{0} = {1}", Quoter.QuoteColumnName(item.Key), Quoter.QuoteValue(item.Value)));
            }

            if(expression.IsAllRows)
            {
                whereClauses.Add("1 = 1");
            }
            else
            {
                foreach (var item in expression.Where)
                {
                    whereClauses.Add(string.Format("{0} {1} {2}", Quoter.QuoteColumnName(item.Key),
                                                   item.Value == null ? "IS" : "=", Quoter.QuoteValue(item.Value)));
                }
            }
            return String.Format(UpdateData, Quoter.QuoteTableName(expression.TableName), String.Join(", ", updateItems.ToArray()), String.Join(" AND ", whereClauses.ToArray()));
        }
        public static UpdateDataExpression GetUpdateDataExpression()
        {
            var expression = new UpdateDataExpression();
            expression.TableName = TestTableName1;

            expression.Set = new List<KeyValuePair<string, object>>
                                 {
                                     new KeyValuePair<string, object>("Name", "Just'in"),
                                     new KeyValuePair<string, object>("Age", 25)
                                 };

            expression.Where = new List<KeyValuePair<string, object>>
                                   {
                                       new KeyValuePair<string, object>("Id", 9),
                                       new KeyValuePair<string, object>("Homepage", null)
                                   };
            return expression;
        }
        public void IfMigrationHasAnInvalidExpressionDuringUpActionShouldThrowAnExceptionAndAnnounceTheError()
        {
            var invalidMigration = new Mock<IMigration>();
            var invalidExpression = new UpdateDataExpression {TableName = "Test"};
            invalidMigration.Setup(m => m.GetUpExpressions(It.IsAny<IMigrationContext>())).Callback((IMigrationContext mc) => mc.Expressions.Add(invalidExpression));

            Assert.Throws<InvalidMigrationException>(() => _runner.Up(invalidMigration.Object));

            _announcer.Verify(a => a.Error(It.Is<string>(s => s.Contains("UpdateDataExpression: Update statement is missing a condition. Specify one by calling .Where() or target all rows by calling .AllRows()."))));
        }
        public static UpdateDataExpression GetUpdateDataExpressionWithAllRows()
        {
            var expression = new UpdateDataExpression();
            expression.TableName = TestTableName1;

            expression.Set.AddRange(new[] { new ExplicitDataDefinition(new DataValue("Name", "Just'in"), new DataValue("Age", 25)) });
            expression.IsAllRows = true;

            return expression;
        }
        public static UpdateDataExpression GetUpdateDataExpression()
        {
            var expression = new UpdateDataExpression();
            expression.TableName = TestTableName1;

            expression.Set.AddRange(new []  { new ExplicitDataDefinition(new DataValue("Name", "Just'in"), new DataValue("Age", 25)) } );
            expression.Where.AddRange(new [] { new ExplicitDataDefinition(new DataValue("Id", 9), new DataValue("Homepage", null)) } );

            return expression;
        }
 public IUpdateSetOrInSchemaSyntax Table(string tableName)
 {
     var expression = new UpdateDataExpression { TableName = tableName };
     _context.Expressions.Add(expression);
     return new UpdateDataExpressionBuilder(expression, _context);
 }
 public override string Generate(UpdateDataExpression expression)
 {
     return string.Format("UPDATE {0}", base.Generate(expression));
 }
        public void CanUpdateTable()
        {
            CanInsertAndReadDataFromTestTable();

             var expression = new UpdateDataExpression { TableName = "Foo"
                                                     , Set = new List<KeyValuePair<string, object>> { new KeyValuePair<string, object>("Id", 2) }
                                                     , Where = new List<KeyValuePair<string, object>> { new KeyValuePair<string, object>("Id", 1) }
             };

             _processor.Process(expression);

             var table = _processor.ReadTableData(string.Empty, "Foo");

             1.ShouldBe(table.Tables[0].Rows.Count);
             2.ShouldBe(table.Tables[0].Rows[0]["Id"]);
        }
示例#14
0
        public override string Generate(UpdateDataExpression expression)
        {
            string setClause = EvaluateSet(expression.Set);
            string whereClause = expression.IsAllRows ? "1 = 1" : EvaluateWhere(expression.Where);

            return String.Format(UpdateData, Quoter.QuoteTableName(expression.TableName), setClause, whereClause, CommandDelimiter);
        }
 public void Truncate(UpdateDataExpression expression)
 {
     expression.TableName = Truncate(expression.TableName);
     List<KeyValuePair<string, object>> newSet = new List<KeyValuePair<string, object>>();
     foreach (var data in expression.Set)
     {
         newSet.Add(new KeyValuePair<string, object>(Truncate(data.Key), data.Value));
     }
     expression.Set.Clear();
     expression.Set.AddRange(newSet);
     if (!expression.IsAllRows)
     {
         List<KeyValuePair<string, object>> newWhere = new List<KeyValuePair<string, object>>();
         foreach (var data in expression.Where)
         {
             newWhere.Add(new KeyValuePair<string, object>(Truncate(data.Key), data.Value));
         }
         expression.Where.Clear();
         expression.Where.AddRange(newWhere);
     }
 }
示例#16
0
        public void CanUpdateData()
        {
            var expression = new UpdateDataExpression();
            expression.TableName = "Table1";

            expression.Set = new List<KeyValuePair<string, object>>
                                 {
                                     new KeyValuePair<string, object>("Name", "Just'in"),
                                     new KeyValuePair<string, object>("Age", 25)
                                 };

            expression.Where = new List<KeyValuePair<string, object>>
                                   {
                                       new KeyValuePair<string, object>("Id", 9),
                                       new KeyValuePair<string, object>("Homepage", null)
                                   };

            var sql = generator.Generate(expression);
            sql.ShouldBe("UPDATE [Table1] SET [Name] = 'Just''in', [Age] = 25 WHERE [Id] = 9 AND [Homepage] IS NULL");
        }
        public override string Generate(UpdateDataExpression expression)
        {
            var result = new StringBuilder();

            var set = String.Empty;
            var i = 0;
            foreach (var item in expression.Set)
            {
                if (i != 0)
                {
                    set += ", ";
                }

                set += String.Format("[{0}] = {1}", item.Key, Constant.Format(item.Value));
                i++;
            }

            var where = String.Empty;
            i = 0;
            foreach (var item in expression.Where)
            {
                if (i != 0)
                {
                    where += " AND ";
                }

                where += String.Format("[{0}] {1} {2}", item.Key, item.Value == null ? "IS" : "=", Constant.Format(item.Value));
                i++;
            }

            result.Append(String.Format("UPDATE [{0}] SET {1} WHERE {2};", expression.TableName, set, where));

            return result.ToString();
        }
示例#18
0
        public void CanUpdateBinaryData()
        {
            var expression = new UpdateDataExpression
            {
                TableName = "TestTable1"
            };

            var set = new { Name = "Just'in", Value = Encoding.ASCII.GetBytes("Just'in") };
            var where = new { Id = 1 };

            expression.Set.Add(new ReflectedDataDefinition(set));
            expression.Where.Add(new ReflectedDataDefinition(where));

            var sql = generator.Generate(expression);

            string expected = @"UPDATE `TestTable1` SET `Name` = 'Just''in', `Value` = UNHEX('4A75737427696E') WHERE `Id` = 1;";

            sql.ShouldBe(expected);
        }
        public void IfMigrationHasTwoInvalidExpressionsShouldAnnounceBothErrors()
        {
            var invalidMigration = new Mock<IMigration>();
            var invalidExpression = new UpdateDataExpression { TableName = "Test" };
            var secondInvalidExpression = new CreateColumnExpression();
            invalidMigration.Setup(m => m.GetUpExpressions(It.IsAny<IMigrationContext>()))
                .Callback((IMigrationContext mc) => { mc.Expressions.Add(invalidExpression); mc.Expressions.Add(secondInvalidExpression); });

            Assert.Throws<InvalidMigrationException>(() => _runner.Up(invalidMigration.Object));

            _announcer.Verify(a => a.Error(It.Is<string>(s => s.Contains("UpdateDataExpression: Update statement is missing a condition. Specify one by calling .Where() or target all rows by calling .AllRows()."))));
            _announcer.Verify(a => a.Error(It.Is<string>(s => s.Contains("CreateColumnExpression: The table's name cannot be null or an empty string. The column's name cannot be null or an empty string. The column does not have a type defined."))));
        }
 public UpdateDataExpressionBuilder(UpdateDataExpression expression, IMigrationContext context)
 {
     _context = context;
     _expression = expression;
 }
示例#21
0
 public void Process(UpdateDataExpression expression)
 {
     Process(Generator.Generate(expression));
 }
示例#22
0
        public static UpdateDataExpression GetUpdateDataExpressionWithAllRows()
        {
            var expression = new UpdateDataExpression();
            expression.TableName = TestTableName1;

            expression.Set = new List<KeyValuePair<string, object>>
                                 {
                                     new KeyValuePair<string, object>("Name", "Just'in"),
                                     new KeyValuePair<string, object>("Age", 25)
                                 };

            expression.IsAllRows = true;

            return expression;
        }
 public override string Generate(UpdateDataExpression expression)
 {
     truncator.Truncate(expression);
     return base.Generate(expression);
 }
 public IUpdateColumnFromSyntax Column(string columnName)
 {
     var expression = new UpdateDataExpression { ColumnName = columnName };
     _context.Expressions.Add(expression);
     return new UpdateDataExpressionBuilder(expression, _context);
 }