public void Update_value_type_concurrency_token()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Person");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbUpdateCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"UPDATE [dbo].[People]
SET [BirthDate] = @BirthDate
WHERE (([Id] = @Id) AND ([BirthDate] = @BirthDate_Original))",
                functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Insert_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"insert [dbo].[Customers]([Name])
values (@Name)

declare @CustomerId int
select @CustomerId = [CustomerId]
from [dbo].[Customers]
where @@ROWCOUNT > 0 and [CustomerId] = scope_identity()

select t0.[CustomerId]
from [dbo].[Customers] as t0
where @@ROWCOUNT > 0 and t0.[CustomerId] = @CustomerId",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
        public void Insert_simple_tph_entity_derived()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Car");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbInsertCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"INSERT [dbo].[Vehicles]([Name], [Discriminator])
VALUES (@Name, N'Car')

DECLARE @Id int
SELECT @Id = [Id]
FROM [dbo].[Vehicles]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()

SELECT t0.[Id]
FROM [dbo].[Vehicles] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[Id] = @Id",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
        public string GenerateUpdate(
            ICollection <DbUpdateCommandTree> commandTrees,
            string rowsAffectedParameter)
        {
            if (!commandTrees.Any <DbUpdateCommandTree>())
            {
                return((string)null);
            }
            StringBuilder       sql = new StringBuilder();
            List <SqlParameter> parameters;

            sql.AppendLine(DmlSqlGenerator.GenerateUpdateSql(commandTrees.First <DbUpdateCommandTree>(), this._sqlGenerator, out parameters, false, true));
            foreach (DbUpdateCommandTree tree in commandTrees.Skip <DbUpdateCommandTree>(1))
            {
                sql.Append(DmlSqlGenerator.GenerateUpdateSql(tree, this._sqlGenerator, out parameters, false, true));
                sql.AppendLine("AND @@ROWCOUNT > 0");
                sql.AppendLine();
            }
            List <DbUpdateCommandTree> list = commandTrees.Where <DbUpdateCommandTree>((Func <DbUpdateCommandTree, bool>)(ct => ct.Returning != null)).ToList <DbUpdateCommandTree>();

            if (list.Any <DbUpdateCommandTree>())
            {
                DmlFunctionSqlGenerator.ReturningSelectSqlGenerator selectSqlGenerator = new DmlFunctionSqlGenerator.ReturningSelectSqlGenerator();
                foreach (DbUpdateCommandTree updateCommandTree in list)
                {
                    updateCommandTree.Target.Expression.Accept((DbExpressionVisitor)selectSqlGenerator);
                    updateCommandTree.Returning.Accept((DbExpressionVisitor)selectSqlGenerator);
                    updateCommandTree.Predicate.Accept((DbExpressionVisitor)selectSqlGenerator);
                }
                sql.AppendLine(selectSqlGenerator.Sql);
                sql.AppendLine();
            }
            DmlFunctionSqlGenerator.AppendSetRowsAffected(sql, rowsAffectedParameter);
            return(sql.ToString().TrimEnd());
        }
Beispiel #5
0
        public void Update_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbUpdateCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"UPDATE [dbo].[Customers]
SET [Name] = @Name
WHERE ([CustomerId] = @CustomerId)",
                functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Insert_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"insert [dbo].[Customers]([Name])
values (@Name)

declare @CustomerId int
select @CustomerId = [CustomerId]
from [dbo].[Customers]
where @@ROWCOUNT > 0 and [CustomerId] = scope_identity()

select t0.[CustomerId]
from [dbo].[Customers] as t0
where @@ROWCOUNT > 0 and t0.[CustomerId] = @CustomerId",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
Beispiel #7
0
        public void Delete_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbDeleteCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DELETE [dbo].[xspecial_orders]
WHERE (((([xid] = @xid) AND ([so_key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature))

DELETE [dbo].[special_orders]
WHERE ((((([order_id] = @xid) AND ([so_key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) OR ([OtherCustomer_CustomerId] IS NULL AND @OtherCustomer_CustomerId IS NULL)))
AND @@ROWCOUNT > 0

DELETE [dbo].[Orders]
WHERE ((((((([order_id] = @xid) AND ([Key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([Name] = @Name_Original) OR ([Name] IS NULL AND @Name_Original IS NULL))) AND (([RowVersion] = @RowVersion_Original) OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL))) AND (([Customer_CustomerId] = @Customer_CustomerId) OR ([Customer_CustomerId] IS NULL AND @Customer_CustomerId IS NULL)))
AND @@ROWCOUNT > 0

SET @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateDelete(convertedTrees, "rows_affected"));
        }
        public void Delete_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"delete [dbo].[xspecial_orders]
where (((([xid] = @xid) and ([so_key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature))

delete [dbo].[special_orders]
where ((((([order_id] = @xid) and ([so_key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) or ([OtherCustomer_CustomerId] is null and @OtherCustomer_CustomerId is null)))
and @@ROWCOUNT > 0

delete [dbo].[Orders]
where ((((((([order_id] = @xid) and ([Key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([Name] = @Name_Original) or ([Name] is null and @Name_Original is null))) and (([RowVersion] = @RowVersion_Original) or ([RowVersion] is null and @RowVersion_Original is null))) and (([Customer_CustomerId] = @Customer_CustomerId) or ([Customer_CustomerId] is null and @Customer_CustomerId is null)))
and @@ROWCOUNT > 0

set @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateDelete(convertedTrees, "rows_affected"));
        }
Beispiel #9
0
        public void Insert_simple_tph_entity_derived()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Car");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbInsertCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"INSERT [dbo].[Vehicles]([Name], [Discriminator])
VALUES (@Name, N'Car')

DECLARE @Id int
SELECT @Id = [Id]
FROM [dbo].[Vehicles]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()

SELECT t0.[Id]
FROM [dbo].[Vehicles] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[Id] = @Id",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
        public string GenerateDelete(
            ICollection <DbDeleteCommandTree> commandTrees,
            string rowsAffectedParameter)
        {
            StringBuilder       sql = new StringBuilder();
            List <SqlParameter> parameters;

            sql.AppendLine(DmlSqlGenerator.GenerateDeleteSql(commandTrees.First <DbDeleteCommandTree>(), this._sqlGenerator, out parameters, true, true));
            sql.AppendLine();
            foreach (DbDeleteCommandTree tree in commandTrees.Skip <DbDeleteCommandTree>(1))
            {
                sql.AppendLine(DmlSqlGenerator.GenerateDeleteSql(tree, this._sqlGenerator, out parameters, true, true));
                sql.AppendLine("AND @@ROWCOUNT > 0");
                sql.AppendLine();
            }
            DmlFunctionSqlGenerator.AppendSetRowsAffected(sql, rowsAffectedParameter);
            return(sql.ToString().TrimEnd());
        }
Beispiel #11
0
        public void Insert_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbInsertCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DECLARE @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128))
INSERT [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_Country_Name], [OrderGroupId], [Customer_CustomerId])
OUTPUT inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] INTO @generated_keys
VALUES (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_Country_Name, @OrderGroupId, @Customer_CustomerId)

DECLARE @order_id int, @Key uniqueidentifier
SELECT @order_id = t.[order_id], @Key = t.[Key]
FROM @generated_keys AS g JOIN [dbo].[Orders] AS t ON g.[order_id] = t.[order_id] AND g.[Key] = t.[Key] AND g.[Code] = t.[Code] AND g.[Signature] = t.[Signature]
WHERE @@ROWCOUNT > 0

INSERT [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_Country_Name])
VALUES (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_Country_Name)

INSERT [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist])
VALUES (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist)

SELECT t0.[order_id] AS xid, t0.[Key] AS key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
FROM [dbo].[Orders] AS t0
JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature]
JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature]
WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @order_id AND t0.[Key] = @Key AND t0.[Code] = @teh_codez AND t0.[Signature] = @Signature",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
Beispiel #12
0
        public void Update_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbUpdateCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"UPDATE [dbo].[Orders]
SET [Name] = @Name, [Address_Street] = @Address_Street, [Address_City] = @Address_City, [Address_Country_Name] = @Address_Country_Name, [OrderGroupId] = @OrderGroupId, [Customer_CustomerId] = @Customer_CustomerId
WHERE (((((([order_id] = @xid) AND ([Key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([Name] = @Name_Original) OR ([Name] IS NULL AND @Name_Original IS NULL))) AND (([RowVersion] = @RowVersion_Original) OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL)))

UPDATE [dbo].[special_orders]
SET [OtherCustomer_CustomerId] = @OtherCustomer_CustomerId, [OtherAddress_Street] = @OtherAddress_Street, [OtherAddress_City] = @OtherAddress_City, [OtherAddress_Country_Name] = @OtherAddress_Country_Name
WHERE (((([order_id] = @xid) AND ([so_key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature))
AND @@ROWCOUNT > 0

UPDATE [dbo].[xspecial_orders]
SET [TheSpecialist] = @TheSpecialist
WHERE (((([xid] = @xid) AND ([so_key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature))
AND @@ROWCOUNT > 0

SELECT t0.[OrderNo] AS order_fu, t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
FROM [dbo].[Orders] AS t0
JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature]
JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature]
WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @xid AND t0.[Key] = @key_for_update AND t0.[Code] = @Code AND t0.[Signature] = @Signature

SET @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateUpdate(convertedTrees, "rows_affected"));
        }
        public void Insert_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"declare @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128))
insert [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_Country_Name], [OrderGroupId], [Customer_CustomerId])
output inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] into @generated_keys
values (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_Country_Name, @OrderGroupId, @Customer_CustomerId)

declare @order_id int, @Key uniqueidentifier
select @order_id = t.[order_id], @Key = t.[Key]
from @generated_keys as g join [dbo].[Orders] as t on g.[order_id] = t.[order_id] and g.[Key] = t.[Key] and g.[Code] = t.[Code] and g.[Signature] = t.[Signature]
where @@ROWCOUNT > 0

insert [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_Country_Name])
values (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_Country_Name)

insert [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist])
values (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist)

select t0.[order_id] as xid, t0.[Key] as key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
from [dbo].[Orders] as t0
join [dbo].[special_orders] as t1 on t1.[order_id] = t0.[order_id] and t1.[so_key] = t0.[Key] and t1.[Code] = t0.[Code] and t1.[Signature] = t0.[Signature]
join [dbo].[xspecial_orders] as t2 on t2.[xid] = t0.[order_id] and t2.[so_key] = t0.[Key] and t2.[Code] = t0.[Code] and t2.[Signature] = t0.[Signature]
where @@ROWCOUNT > 0 and t0.[order_id] = @order_id and t0.[Key] = @Key and t0.[Code] = @teh_codez and t0.[Signature] = @Signature",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
        public void Update_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"update [dbo].[Orders]
set [Name] = @Name, [Address_Street] = @Address_Street, [Address_City] = @Address_City, [Address_Country_Name] = @Address_Country_Name, [OrderGroupId] = @OrderGroupId, [Customer_CustomerId] = @Customer_CustomerId
where ((((((([order_id] = @xid) and ([Key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([Name] = @Name_Original) or ([Name] is null and @Name_Original is null))) and (([RowVersion] = @RowVersion_Original) or ([RowVersion] is null and @RowVersion_Original is null))) and (([Customer_CustomerId] = @Customer_CustomerId) or ([Customer_CustomerId] is null and @Customer_CustomerId is null)))

update [dbo].[special_orders]
set [OtherCustomer_CustomerId] = @OtherCustomer_CustomerId, [OtherAddress_Street] = @OtherAddress_Street, [OtherAddress_City] = @OtherAddress_City, [OtherAddress_Country_Name] = @OtherAddress_Country_Name
where ((((([order_id] = @xid) and ([so_key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) or ([OtherCustomer_CustomerId] is null and @OtherCustomer_CustomerId is null)))
and @@ROWCOUNT > 0

update [dbo].[xspecial_orders]
set [TheSpecialist] = @TheSpecialist
where (((([xid] = @xid) and ([so_key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature))
and @@ROWCOUNT > 0

select t0.[OrderNo] as order_fu, t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
from [dbo].[Orders] as t0
join [dbo].[special_orders] as t1 on t1.[order_id] = t0.[order_id] and t1.[so_key] = t0.[Key] and t1.[Code] = t0.[Code] and t1.[Signature] = t0.[Signature]
join [dbo].[xspecial_orders] as t2 on t2.[xid] = t0.[order_id] and t2.[so_key] = t0.[Key] and t2.[Code] = t0.[Code] and t2.[Signature] = t0.[Signature]
where @@ROWCOUNT > 0 and t0.[order_id] = @xid and t0.[Key] = @key_for_update and t0.[Code] = @Code and t0.[Signature] = @Signature

set @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateUpdate(convertedTrees, "rows_affected"));
        }
        public void Insert_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"declare @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128))
insert [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_Country_Name], [OrderGroupId], [Customer_CustomerId])
output inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] into @generated_keys
values (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_Country_Name, @OrderGroupId, @Customer_CustomerId)

declare @order_id int, @Key uniqueidentifier
select @order_id = t.[order_id], @Key = t.[Key]
from @generated_keys as g join [dbo].[Orders] as t on g.[order_id] = t.[order_id] and g.[Key] = t.[Key] and g.[Code] = t.[Code] and g.[Signature] = t.[Signature]
where @@ROWCOUNT > 0

insert [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_Country_Name])
values (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_Country_Name)

insert [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist])
values (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist)

select t0.[order_id] as xid, t0.[Key] as key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
from [dbo].[Orders] as t0
join [dbo].[special_orders] as t1 on t1.[order_id] = t0.[order_id] and t1.[so_key] = t0.[Key] and t1.[Code] = t0.[Code] and t1.[Signature] = t0.[Signature]
join [dbo].[xspecial_orders] as t2 on t2.[xid] = t0.[order_id] and t2.[so_key] = t0.[Key] and t2.[Code] = t0.[Code] and t2.[Signature] = t0.[Signature]
where @@ROWCOUNT > 0 and t0.[order_id] = @order_id and t0.[Key] = @Key and t0.[Code] = @teh_codez and t0.[Signature] = @Signature",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }
Beispiel #16
0
        public void Update_simple_entity_with_tph_base()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Vehicle");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbUpdateCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Null(functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Delete_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"delete [dbo].[Customers]
where ([CustomerId] = @CustomerId)",
                functionSqlGenerator.GenerateDelete(convertedTrees, null));
        }
Beispiel #18
0
        public void Delete_simple_entity_with_tph_derived()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Car");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                  .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                      modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                  .Convert(commandTrees)
                  .OfType <DbDeleteCommandTree>()
                  .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DELETE [dbo].[Vehicles]
WHERE ([Id] = @Id)",
                functionSqlGenerator.GenerateDelete(convertedTrees, null));
        }
        public void Delete_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"delete [dbo].[xspecial_orders]
where (((([xid] = @xid) and ([so_key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature))

delete [dbo].[special_orders]
where ((((([order_id] = @xid) and ([so_key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) or ([OtherCustomer_CustomerId] is null and @OtherCustomer_CustomerId is null)))
and @@ROWCOUNT > 0

delete [dbo].[Orders]
where ((((((([order_id] = @xid) and ([Key] = @key_for_delete)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([Name] = @Name_Original) or ([Name] is null and @Name_Original is null))) and (([RowVersion] = @RowVersion_Original) or ([RowVersion] is null and @RowVersion_Original is null))) and (([Customer_CustomerId] = @Customer_CustomerId) or ([Customer_CustomerId] is null and @Customer_CustomerId is null)))
and @@ROWCOUNT > 0

set @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateDelete(convertedTrees, "rows_affected"));
        }
        public void Update_simple_entity_with_tph_base()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Vehicle");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbUpdateCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Null(functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Delete_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbDeleteCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DELETE [dbo].[xspecial_orders]
WHERE (((([xid] = @xid) AND ([so_key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature))

DELETE [dbo].[special_orders]
WHERE ((((([order_id] = @xid) AND ([so_key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) OR ([OtherCustomer_CustomerId] IS NULL AND @OtherCustomer_CustomerId IS NULL)))
AND @@ROWCOUNT > 0

DELETE [dbo].[Orders]
WHERE ((((((([order_id] = @xid) AND ([Key] = @key_for_delete)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([Name] = @Name_Original) OR ([Name] IS NULL AND @Name_Original IS NULL))) AND (([RowVersion] = @RowVersion_Original) OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL))) AND (([Customer_CustomerId] = @Customer_CustomerId) OR ([Customer_CustomerId] IS NULL AND @Customer_CustomerId IS NULL)))
AND @@ROWCOUNT > 0

SET @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateDelete(convertedTrees, "rows_affected"));
        }
        public void Delete_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbDeleteCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DELETE [dbo].[Customers]
WHERE ([CustomerId] = @CustomerId)",
                functionSqlGenerator.GenerateDelete(convertedTrees, null));
        }
        public void Update_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbUpdateCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"UPDATE [dbo].[Orders]
SET [Name] = @Name, [Address_Street] = @Address_Street, [Address_City] = @Address_City, [Address_CountryOrRegion_Name] = @Address_CountryOrRegion_Name, [OrderGroupId] = @OrderGroupId, [Customer_CustomerId] = @Customer_CustomerId
WHERE (((((([order_id] = @xid) AND ([Key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature)) AND (([Name] = @Name_Original) OR ([Name] IS NULL AND @Name_Original IS NULL))) AND (([RowVersion] = @RowVersion_Original) OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL)))

UPDATE [dbo].[special_orders]
SET [OtherCustomer_CustomerId] = @OtherCustomer_CustomerId, [OtherAddress_Street] = @OtherAddress_Street, [OtherAddress_City] = @OtherAddress_City, [OtherAddress_CountryOrRegion_Name] = @OtherAddress_CountryOrRegion_Name
WHERE (((([order_id] = @xid) AND ([so_key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature))
AND @@ROWCOUNT > 0

UPDATE [dbo].[xspecial_orders]
SET [TheSpecialist] = @TheSpecialist
WHERE (((([xid] = @xid) AND ([so_key] = @key_for_update)) AND ([Code] = @Code)) AND ([Signature] = @Signature))
AND @@ROWCOUNT > 0

SELECT t0.[OrderNo] AS order_fu, t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
FROM [dbo].[Orders] AS t0
JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature]
JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature]
WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @xid AND t0.[Key] = @key_for_update AND t0.[Code] = @Code AND t0.[Signature] = @Signature

SET @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateUpdate(convertedTrees, "rows_affected"));
        }
        public void Update_simple_entity()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Customer");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"update [dbo].[Customers]
set [Name] = @Name
where ([CustomerId] = @CustomerId)",
                functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Update_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(ProviderRegistry.Sql2008_ProviderManifest);

            Assert.Equal(
                @"update [dbo].[Orders]
set [Name] = @Name, [Address_Street] = @Address_Street, [Address_City] = @Address_City, [Address_Country_Name] = @Address_Country_Name, [OrderGroupId] = @OrderGroupId, [Customer_CustomerId] = @Customer_CustomerId
where ((((((([order_id] = @xid) and ([Key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([Name] = @Name_Original) or ([Name] is null and @Name_Original is null))) and (([RowVersion] = @RowVersion_Original) or ([RowVersion] is null and @RowVersion_Original is null))) and (([Customer_CustomerId] = @Customer_CustomerId) or ([Customer_CustomerId] is null and @Customer_CustomerId is null)))

update [dbo].[special_orders]
set [OtherCustomer_CustomerId] = @OtherCustomer_CustomerId, [OtherAddress_Street] = @OtherAddress_Street, [OtherAddress_City] = @OtherAddress_City, [OtherAddress_Country_Name] = @OtherAddress_Country_Name
where ((((([order_id] = @xid) and ([so_key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature)) and (([OtherCustomer_CustomerId] = @OtherCustomer_CustomerId) or ([OtherCustomer_CustomerId] is null and @OtherCustomer_CustomerId is null)))
and @@ROWCOUNT > 0

update [dbo].[xspecial_orders]
set [TheSpecialist] = @TheSpecialist
where (((([xid] = @xid) and ([so_key] = @key_for_update)) and ([Code] = @Code)) and ([Signature] = @Signature))
and @@ROWCOUNT > 0

select t0.[OrderNo] as order_fu, t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
from [dbo].[Orders] as t0
join [dbo].[special_orders] as t1 on t1.[order_id] = t0.[order_id] and t1.[so_key] = t0.[Key] and t1.[Code] = t0.[Code] and t1.[Signature] = t0.[Signature]
join [dbo].[xspecial_orders] as t2 on t2.[xid] = t0.[order_id] and t2.[so_key] = t0.[Key] and t2.[Code] = t0.[Code] and t2.[Signature] = t0.[Signature]
where @@ROWCOUNT > 0 and t0.[order_id] = @xid and t0.[Key] = @key_for_update and t0.[Code] = @Code and t0.[Signature] = @Signature

set @rows_affected = @@ROWCOUNT",
                functionSqlGenerator.GenerateUpdate(convertedTrees, "rows_affected"));
        }
        public void Update_simple_entity_with_tph_derived()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Car");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateUpdate(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbUpdateCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"UPDATE [dbo].[Vehicles]
SET [Name] = @Name
WHERE ([Id] = @Id)",
                functionSqlGenerator.GenerateUpdate(convertedTrees, null));
        }
        public void Delete_value_type_concurrency_token()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("Person");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateDelete(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbDeleteCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DELETE [dbo].[People]
WHERE (([Id] = @Id) AND ([BirthDate] = @BirthDate_Original))",
                functionSqlGenerator.GenerateDelete(convertedTrees, null));
        }
        private string GenerateFunctionSql(ICollection<DbModificationCommandTree> commandTrees, string rowsAffectedParameter)
        {
            DebugCheck.NotNull(commandTrees);
            Debug.Assert(commandTrees.Any());

            var functionSqlGenerator = new DmlFunctionSqlGenerator(_sqlGenerator);

            switch (commandTrees.First().CommandTreeKind)
            {
                case DbCommandTreeKind.Insert:
                    return functionSqlGenerator.GenerateInsert(commandTrees.Cast<DbInsertCommandTree>().ToList());
                case DbCommandTreeKind.Update:
                    return functionSqlGenerator.GenerateUpdate(commandTrees.Cast<DbUpdateCommandTree>().ToList(), rowsAffectedParameter);
                case DbCommandTreeKind.Delete:
                    return functionSqlGenerator.GenerateDelete(commandTrees.Cast<DbDeleteCommandTree>().ToList(), rowsAffectedParameter);
            }

            return null;
        }
        public void Insert_tpt_entity_with_concurrency_and_store_generated_values()
        {
            var modificationFunctionMapping
                = TestContext.GetModificationFunctionMapping("ExtraSpecialOrder");

            var commandTrees
                = new ModificationCommandTreeGenerator(TestContext.CreateDynamicUpdateModel())
                    .GenerateInsert(modificationFunctionMapping.Item1.EntityType.FullName);

            var convertedTrees
                = new DynamicToFunctionModificationCommandConverter(
                    modificationFunctionMapping.Item1, modificationFunctionMapping.Item2)
                    .Convert(commandTrees)
                    .OfType<DbInsertCommandTree>()
                    .ToList();

            var functionSqlGenerator
                = new DmlFunctionSqlGenerator(new SqlGenerator());

            Assert.Equal(
                @"DECLARE @generated_keys table([order_id] int, [Key] uniqueidentifier, [Code] nvarchar(128), [Signature] varbinary(128))
INSERT [dbo].[Orders]([Code], [Signature], [Name], [Address_Street], [Address_City], [Address_CountryOrRegion_Name], [OrderGroupId], [Customer_CustomerId])
OUTPUT inserted.[order_id], inserted.[Key], inserted.[Code], inserted.[Signature] INTO @generated_keys
VALUES (@teh_codez, @Signature, @the_name, @Address_Street, @Address_City, @Address_CountryOrRegion_Name, @OrderGroupId, @Customer_CustomerId)

DECLARE @order_id int, @Key uniqueidentifier
SELECT @order_id = t.[order_id], @Key = t.[Key]
FROM @generated_keys AS g JOIN [dbo].[Orders] AS t ON g.[order_id] = t.[order_id] AND g.[Key] = t.[Key] AND g.[Code] = t.[Code] AND g.[Signature] = t.[Signature]
WHERE @@ROWCOUNT > 0

INSERT [dbo].[special_orders]([order_id], [so_key], [Code], [Signature], [OtherCustomer_CustomerId], [OtherAddress_Street], [OtherAddress_City], [OtherAddress_CountryOrRegion_Name])
VALUES (@order_id, @Key, @teh_codez, @Signature, @OtherCustomer_CustomerId, @OtherAddress_Street, @OtherAddress_City, @OtherAddress_CountryOrRegion_Name)

INSERT [dbo].[xspecial_orders]([xid], [so_key], [Code], [Signature], [TheSpecialist])
VALUES (@order_id, @Key, @teh_codez, @Signature, @TheSpecialist)

SELECT t0.[order_id] AS xid, t0.[Key] AS key_result, t0.[OrderNo], t0.[RowVersion], t1.[MagicOrderToken], t2.[FairyDust]
FROM [dbo].[Orders] AS t0
JOIN [dbo].[special_orders] AS t1 ON t1.[order_id] = t0.[order_id] AND t1.[so_key] = t0.[Key] AND t1.[Code] = t0.[Code] AND t1.[Signature] = t0.[Signature]
JOIN [dbo].[xspecial_orders] AS t2 ON t2.[xid] = t0.[order_id] AND t2.[so_key] = t0.[Key] AND t2.[Code] = t0.[Code] AND t2.[Signature] = t0.[Signature]
WHERE @@ROWCOUNT > 0 AND t0.[order_id] = @order_id AND t0.[Key] = @Key AND t0.[Code] = @teh_codez AND t0.[Signature] = @Signature",
                functionSqlGenerator.GenerateInsert(convertedTrees));
        }