public void Build_update_statment_with_several_where()
        {
            string verify  = "UPDATE [faketable] SET [col1] = $col1, [col2] = $col2, [col3] = $col3 WHERE [col1] = $qPm0 AND [col2] >= $qPm1 OR [col3] = [col1]";
            var    columns = new List <string>()
            {
                "col1", "col2", "col3"
            };
            var parameters = new List <QueryParam>
            {
                new QueryParam("col1", null),
                new QueryParam("col2", null),
                new QueryParam("col3", null)
            };
            var builder = new UpdateSqlBuilder("faketable", session, columns, parameters);

            builder.Where("col1").EqualToValue(1)
            .And("col2").GreaterOrEqualToValue(10)
            .Or("col3").EqualTo("col1");

            var sqlBody = builder.Build();
            var res     = sqlBody.ToString(session.SessionFactory.DbSettings.SqlDialect);

            Console.WriteLine(res);
            Assert.AreEqual(verify, res);
        }
Esempio n. 2
0
        public void UpdateTableSetColumnValueWhereIsEqualToOrWhereIsEqualToWithSqlCharacters()
        {
            var sqlBuilder = new UpdateSqlBuilder(MsSqlCharacters.Instance);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Id").IsEqualTo(100122)
                           .OrWhere("Column1").IsEqualTo(11)
                           .ToSqlQuery();

            Assert.Equal("UPDATE [Table] SET [Column1] = @p0,[Column2] = @p1 WHERE ([Id] = @p2) OR ([Column1] = @p3)", sqlQuery.CommandText);

            Assert.Equal(4, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[2].DbType);
            Assert.Equal(100122, sqlQuery.Arguments[2].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType);
            Assert.Equal(11, sqlQuery.Arguments[3].Value);
        }
Esempio n. 3
0
        /// <summary>
        /// Updates the specified entity.
        /// </summary>
        /// <param name="entity">The entity.</param>
        /// <returns></returns>
        /// <exception cref="GoliathDataException"></exception>
        public int Update(TEntity entity)
        {
            if (entityMap.PrimaryKey == null)
            {
                throw new GoliathDataException($"Cannot update entity {entityMap.FullName} because no primary key has been defined for table {entityMap.TableName}");
            }
            try
            {
                INonQuerySqlBuilder <TEntity> updateBuilder = new UpdateSqlBuilder <TEntity>(session, entityMap, entity);
                var result = ExecuteUpdateOrDeleteEntity(updateBuilder, entity);

                //if it's a trackable entity let's reset it
                ResetTrackableEntity(entity as ITrackable);

                return(result);
            }
            catch (GoliathDataException)
            {
                throw;
            }
            catch (Exception exception)
            {
                throw new GoliathDataException($"Error while trying to update mapped entity {entityMap.FullName} of type {entity.GetType()}", exception);
            }
        }
Esempio n. 4
0
        public void UpdateTableSetColumnValueWhereNotBetween()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Id").NotBetween(1, 199)
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET Column1 = ?,Column2 = ? WHERE (Id NOT BETWEEN ? AND ?)", sqlQuery.CommandText);

            Assert.Equal(4, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[2].DbType);
            Assert.Equal(1, sqlQuery.Arguments[2].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType);
            Assert.Equal(199, sqlQuery.Arguments[3].Value);
        }
Esempio n. 5
0
        public void UpdateTableSetColumnValueWhereIsEqualToOrWhereIsEqualTo()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Id").IsEqualTo(100122)
                           .OrWhere("Column1").IsEqualTo(11)
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET Column1 = ?,Column2 = ? WHERE (Id = ?) OR (Column1 = ?)", sqlQuery.CommandText);

            Assert.Equal(4, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[2].DbType);
            Assert.Equal(100122, sqlQuery.Arguments[2].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType);
            Assert.Equal(11, sqlQuery.Arguments[3].Value);
        }
Esempio n. 6
0
        public void UpdateTableSetColumnValueWhereNotInArgs()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Column3").NotIn(1, 2, 3)
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET Column1 = ?,Column2 = ? WHERE (Column3 NOT IN (?,?,?))", sqlQuery.CommandText);

            Assert.Equal(5, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[2].DbType);
            Assert.Equal(1, sqlQuery.Arguments[2].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[3].DbType);
            Assert.Equal(2, sqlQuery.Arguments[3].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[4].DbType);
            Assert.Equal(3, sqlQuery.Arguments[4].Value);
        }
Esempio n. 7
0
        /// <summary>
        /// Builds the command text to update a database record for the specified <see cref="IObjectInfo"/>.
        /// </summary>
        /// <param name="objectInfo">The object information.</param>
        /// <returns>
        /// The created command text.
        /// </returns>
        protected virtual string BuildUpdateCommandText(IObjectInfo objectInfo)
        {
            if (objectInfo == null)
            {
                throw new ArgumentNullException("objectInfo");
            }

            var builder = new UpdateSqlBuilder(this.SqlCharacters)
                          .Table(objectInfo);

            for (int i = 0; i < objectInfo.TableInfo.Columns.Count; i++)
            {
                var columnInfo = objectInfo.TableInfo.Columns[i];

                if (columnInfo.AllowUpdate)
                {
                    builder.SetColumnValue(columnInfo.ColumnName, null);
                }
            }

            var updateSqlQuery = builder
                                 .Where(objectInfo.TableInfo.IdentifierColumn.ColumnName).IsEqualTo(0)
                                 .ToSqlQuery();

            return(updateSqlQuery.CommandText);
        }
Esempio n. 8
0
        public void UpdateTableSetColumnValueWhereNotInSqlQuery()
        {
            var subQuery = new SqlQuery("SELECT Id FROM Table WHERE Column = ?", 1024);

            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Column3").NotIn(subQuery)
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET Column1 = ?,Column2 = ? WHERE (Column3 NOT IN (SELECT Id FROM Table WHERE Column = ?))", sqlQuery.CommandText);

            Assert.Equal(3, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[2].DbType);
            Assert.Equal(1024, sqlQuery.Arguments[2].Value);
        }
Esempio n. 9
0
        /// <summary>
        /// Creates an SqlQuery to perform an update based upon the values in the object delta.
        /// </summary>
        /// <param name="objectDelta">The object delta to create the query for.</param>
        /// <returns>
        /// The created <see cref="SqlQuery" />.
        /// </returns>
        public SqlQuery BuildUpdateSqlQuery(ObjectDelta objectDelta)
        {
            if (objectDelta == null)
            {
                throw new ArgumentNullException("objectDelta");
            }

            if (log.IsDebug)
            {
                log.Debug(LogMessages.SqlDialect_CreatingSqlQuery, "UPDATE");
            }

            var objectInfo = ObjectInfo.For(objectDelta.ForType);

            var builder = new UpdateSqlBuilder(this.SqlCharacters)
                          .Table(objectInfo);

            foreach (var change in objectDelta.Changes)
            {
                builder.SetColumnValue(change.Key, change.Value);
            }

            var sqlQuery = builder
                           .Where(objectInfo.TableInfo.IdentifierColumn.ColumnName).IsEqualTo(objectDelta.Identifier)
                           .ToSqlQuery();

            return(sqlQuery);
        }
Esempio n. 10
0
        public void WhereThrowsArgumentExceptionForNullColumn()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var exception = Assert.Throws <ArgumentException>(
                () => sqlBuilder.Where(null));

            Assert.Equal(ExceptionMessages.ArgumentNullOrEmpty.FormatWith("column"), exception.Message);
        }
Esempio n. 11
0
        public UpdateSqlBuilder GetUpdateSqlBuilder()
        {
            if (updateBuilder == null)
            {
                updateBuilder = CreateUpdateSqlBuilder();
            }

            return(updateBuilder);
        }
Esempio n. 12
0
        public void TableThrowsArgumentExceptionForEmptyTableName()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var exception = Assert.Throws <ArgumentException>(
                () => sqlBuilder.Table(""));

            Assert.Equal(ExceptionMessages.ArgumentNullOrEmpty.FormatWith("tableName"), exception.Message);
        }
Esempio n. 13
0
        public void UpdateSpecifyingTableName()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET ", sqlQuery.CommandText);
            Assert.Empty(sqlQuery.Arguments);
        }
Esempio n. 14
0
        public void UpdateSpecifyingTypeWithSqlCharacters()
        {
            var sqlBuilder = new UpdateSqlBuilder(MsSqlCharacters.Instance);

            var sqlQuery = sqlBuilder
                           .Table(typeof(Customer))
                           .ToSqlQuery();

            Assert.Equal("UPDATE [Sales].[Customers] SET ", sqlQuery.CommandText);
            Assert.Empty(sqlQuery.Arguments);
        }
Esempio n. 15
0
        public void UpdateSpecifyingTableNameWithSqlCharacters()
        {
            var sqlBuilder = new UpdateSqlBuilder(MsSqlCharacters.Instance);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .ToSqlQuery();

            Assert.Equal("UPDATE [Table] SET ", sqlQuery.CommandText);
            Assert.Empty(sqlQuery.Arguments);
        }
Esempio n. 16
0
        public void UpdateSpecifyingType()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table(typeof(Customer))
                           .ToSqlQuery();

            Assert.Equal("UPDATE Sales.Customers SET ", sqlQuery.CommandText);
            Assert.Empty(sqlQuery.Arguments);
        }
Esempio n. 17
0
        protected override string GetUpdateSql(Dictionary <string, Field> values)
        {
            UpdateSqlBuilder updateBuilder = Program.Container.GetUpdateSqlBuilder();

            return(updateBuilder
                   .Update("Автомобиль", $"\"Номер_Госрегистрации\" = '{values["register_number"]}'")
                   .Set("Марка", values["mark"].Value)
                   .Set("Номер_Госрегистрации", values["new_register_number"].Value)
                   .Set("Год_Выпуска", values["year"].Value)
                   .Set("Изготовитель", values["creator"].Value)
                   .GetResult());

            ;
        }
Esempio n. 18
0
        public void Can_Generate_UpdateSql_ForCustomer()
        {
            const string expectedSql = @"
                UPDATE [dbo].[Customer]
                SET [dbo].[Customer].[CustomerTypeId] = @customertypeid,
                    [dbo].[Customer].[Code] = @code,
                    [dbo].[Customer].[Phone] = @phone,
                    [dbo].[Customer].[Email] = @email,
                    [dbo].[Customer].[FirstName] = @firstname,
                    [dbo].[Customer].[LastName] = @lastname,
                    [dbo].[Customer].[OtherName] = @othername,
                    [dbo].[Customer].[MobilePhone] = @mobilephone,
                    [dbo].[Customer].[Dob] = @dob,
                    [dbo].[Customer].[UtcUpdated] = @utcupdated
                WHERE (([dbo].[Customer].[OrganizationId] = @orgid) AND ([dbo].[Customer].[Id] = @id))";

            var customer = new Customer
            {
                Id             = 123,
                OrganizationId = 1000,
                Code           = "testcode",
                CustomerTypeId = null,
                Dob            = null,
                Email          = "*****@*****.**",
                FirstName      = "miao",
                LastName       = "huang",
                MobilePhone    = "123",
                OtherName      = "cang",
                Phone          = "321",
                Uid            = Guid.NewGuid(),
                UtcCreated     = DateTime.UtcNow,
                UtcUpdated     = DateTime.UtcNow,
                //Version = "version1"
            };

            var obj = new UpdateSqlBuilder <Customer>();

            obj.Analyze();
            obj.AddValueParameters(customer);

            var orgId = 1000;

            obj.AddConditions <Customer>(i => i.OrganizationId == orgId && i.Id == customer.Id);

            var sql = obj.GetSql();

            Assert.AreEqual(TestUtility.NeutralizeString(sql), TestUtility.NeutralizeString(expectedSql));
        }
Esempio n. 19
0
        public void Build_statement_with_no_where_should_throw()
        {
            var columns = new List <string>()
            {
                "col1", "col2", "col3"
            };
            var parameters = new List <QueryParam>
            {
                new QueryParam("col1", null),
                new QueryParam("col2", null),
                new QueryParam("col3", null)
            };
            var builder = new UpdateSqlBuilder("faketable", session, columns, parameters);

            Assert.Throws <DataAccessException>(() => builder.Build());
        }
Esempio n. 20
0
        public void Load_should_load_all_properties_even_parent_class()
        {
            Monkey monkey = new Monkey()
            {
                Id          = 1,
                Name        = "shaker",
                Age         = 2,
                Family      = "unknown",
                CanDoTricks = true,
                Location    = "XER3",
                ReceivedOn  = DateTime.Now
            };

            UpdateSqlBuilder <Monkey> builder = new UpdateSqlBuilder <Monkey>(session, monkey);
            var build = builder.Build();

            Assert.AreEqual(2, build.Statements.Count);
        }
Esempio n. 21
0
        public void UpdateTableSetColumnValueWhereIsNotNull()
        {
            var sqlBuilder = new UpdateSqlBuilder(SqlCharacters.Empty);

            var sqlQuery = sqlBuilder
                           .Table("Table")
                           .SetColumnValue("Column1", "Foo")
                           .SetColumnValue("Column2", 12)
                           .Where("Id").IsNotNull()
                           .ToSqlQuery();

            Assert.Equal("UPDATE Table SET Column1 = ?,Column2 = ? WHERE (Id IS NOT NULL)", sqlQuery.CommandText);

            Assert.Equal(2, sqlQuery.Arguments.Count);

            Assert.Equal(DbType.String, sqlQuery.Arguments[0].DbType);
            Assert.Equal("Foo", sqlQuery.Arguments[0].Value);

            Assert.Equal(DbType.Int32, sqlQuery.Arguments[1].DbType);
            Assert.Equal(12, sqlQuery.Arguments[1].Value);
        }
Esempio n. 22
0
        UpdateSqlBuilder <T> UpdateInternal <T>(EntityMap entityMap, T entity)
        {
            var builder = new UpdateSqlBuilder <T>(this, entityMap, entity);

            return(builder);
        }