diff --git a/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.Queries.cs b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.Queries.cs new file mode 100644 index 0000000000..2c2ac871d0 --- /dev/null +++ b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.Queries.cs @@ -0,0 +1,75 @@ +// Copyright (C) 2021 Xtensive LLC. +// This code is distributed under MIT license terms. +// See the License.txt file in the project root for more information. + +namespace Xtensive.Sql.Drivers.Firebird.v4_0 +{ + internal partial class Extractor + { + protected override string GetExtractTableColumnsQuery() + { + return @" +select schema + ,table_name + ,ordinal_position + ,column_name + ,field_type + ,column_subtype + ,column_size + ,numeric_precision + ,-numeric_scale as numeric_scale + ,character_max_length + ,(1 - coalesce(column_nullable,0)) as column_nullable + ,column_default + ,relation_type +from (select cast(null as varchar(30)) as schema + ,trim(rfr.rdb$relation_name) as table_name + ,trim(rfr.rdb$field_name) as column_name + ,fld.rdb$field_sub_type as column_subtype + ,cast(fld.rdb$field_length as integer) as column_size + ,cast(fld.rdb$field_precision as integer) as numeric_precision + ,cast(fld.rdb$field_scale as integer) as numeric_scale + ,cast(fld.rdb$character_length as integer) as character_max_length + ,cast(fld.rdb$field_length as integer) as character_octet_length + ,rfr.rdb$field_position as ordinal_position + ,trim(rfr.rdb$field_source) as domain_name + ,trim(rfr.rdb$default_source) as column_default + ,trim(fld.rdb$computed_source) as computed_source + ,fld.rdb$dimensions as column_array + ,coalesce(fld.rdb$null_flag, rfr.rdb$null_flag) as column_nullable + ,0 as is_readonly + ,fld.rdb$field_type as field_type + ,trim(cs.rdb$character_set_name) as character_set_name + ,trim(coll.rdb$collation_name) as collation_name + ,trim(rfr.rdb$description) as description + ,cast(rr.rdb$relation_type as integer) as relation_type + from rdb$relations rr join rdb$relation_fields rfr on rfr.rdb$relation_name = rr.rdb$relation_name + left join rdb$fields fld on rfr.rdb$field_source = fld.rdb$field_name + left join rdb$character_sets cs + on cs.rdb$character_set_id = fld.rdb$character_set_id + left join rdb$collations coll + on (coll.rdb$collation_id = fld.rdb$collation_id + and coll.rdb$character_set_id = fld.rdb$character_set_id) + where rr.rdb$relation_type in (0, 4, 5) and rr.rdb$relation_name not starts with 'RDB$' and rr.rdb$relation_name not starts with 'MON$' + order by table_name, ordinal_position)"; + } + + protected override string GetExtractUniqueAndPrimaryKeyConstraintsQuery() + { + return @" +select cast(null as varchar(30)) as schema + ,trim(rel.rdb$relation_name) as table_name + ,trim(rel.rdb$constraint_name) as constraint_name + ,trim(rel.rdb$constraint_type) constraint_type + ,trim(seg.rdb$field_name) as column_name + ,seg.rdb$field_position as column_position +from rdb$relation_constraints rel +left join rdb$indices idx on rel.rdb$index_name = idx.rdb$index_name +left join rdb$index_segments seg on idx.rdb$index_name = seg.rdb$index_name +where rel.rdb$constraint_type in ('PRIMARY KEY', 'UNIQUE') + and rel.rdb$relation_name not starts with 'RDB$' + and rel.rdb$relation_name not starts with 'MON$' +order by rel.rdb$relation_name, rel.rdb$constraint_name, seg.rdb$field_position"; + } + } +} diff --git a/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.cs b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.cs index 42aa57f862..10e78ce94a 100644 --- a/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.cs +++ b/Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/v4_0/Extractor.cs @@ -701,179 +701,4 @@ public Extractor(SqlDriver driver) { } } - - internal partial class Extractor - { - protected virtual string GetExtractSchemasQuery() - { - return @"select " + Constants.DefaultSchemaName + @"from rdb$database"; - } - - protected virtual string GetExtractTablesQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(rdb$relation_name) as table_name - ,rdb$relation_type as table_type -from rdb$relations -where rdb$relation_type in (0, 5, 4) and rdb$relation_name not starts with 'RDB$' and rdb$relation_name not starts with 'MON$'"; - } - - protected virtual string GetExtractTableColumnsQuery() - { - return @" -select schema - ,table_name - ,ordinal_position - ,column_name - ,field_type - ,column_subtype - ,column_size - ,numeric_precision - ,-numeric_scale as numeric_scale - ,character_max_length - ,(1 - coalesce(column_nullable,0)) as column_nullable - ,column_default - ,relation_type -from (select cast(null as varchar(30)) as schema - ,trim(rfr.rdb$relation_name) as table_name - ,trim(rfr.rdb$field_name) as column_name - ,fld.rdb$field_sub_type as column_subtype - ,cast(fld.rdb$field_length as integer) as column_size - ,cast(fld.rdb$field_precision as integer) as numeric_precision - ,cast(fld.rdb$field_scale as integer) as numeric_scale - ,cast(fld.rdb$character_length as integer) as character_max_length - ,cast(fld.rdb$field_length as integer) as character_octet_length - ,rfr.rdb$field_position as ordinal_position - ,trim(rfr.rdb$field_source) as domain_name - ,trim(rfr.rdb$default_source) as column_default - ,trim(fld.rdb$computed_source) as computed_source - ,fld.rdb$dimensions as column_array - ,coalesce(fld.rdb$null_flag, rfr.rdb$null_flag) as column_nullable - ,0 as is_readonly - ,fld.rdb$field_type as field_type - ,trim(cs.rdb$character_set_name) as character_set_name - ,trim(coll.rdb$collation_name) as collation_name - ,trim(rfr.rdb$description) as description - ,cast(rr.rdb$relation_type as integer) as relation_type - from rdb$relations rr join rdb$relation_fields rfr on rfr.rdb$relation_name = rr.rdb$relation_name - left join rdb$fields fld on rfr.rdb$field_source = fld.rdb$field_name - left join rdb$character_sets cs - on cs.rdb$character_set_id = fld.rdb$character_set_id - left join rdb$collations coll - on (coll.rdb$collation_id = fld.rdb$collation_id - and coll.rdb$character_set_id = fld.rdb$character_set_id) - where rr.rdb$relation_type in (0, 4, 5) and rr.rdb$relation_name not starts with 'RDB$' and rr.rdb$relation_name not starts with 'MON$' - order by table_name, ordinal_position)"; - } - - protected virtual string GetExtractViewsQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(rdb$relation_name) as table_name - ,rdb$view_source as view_source -from rdb$relations -where rdb$relation_type = 1"; - } - - protected virtual string GetExtractViewColumnsQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(rfr.rdb$relation_name) as table_name - ,trim(rfr.rdb$field_name) as column_name - ,rfr.rdb$field_position as ordinal_position -from rdb$relations rr join rdb$relation_fields rfr on rfr.rdb$relation_name = rr.rdb$relation_name -where rr.rdb$relation_type = 1 -order by rfr.rdb$relation_name, rfr.rdb$field_position"; - } - - protected virtual string GetExtractIndexesQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(ri.rdb$relation_name) as table_name - ,trim(ri.rdb$index_name) as index_name - ,ri.rdb$index_id as index_seq - ,ri.rdb$index_type as descend - ,ri.rdb$unique_flag as unique_flag - ,trim(ris.rdb$field_name) as column_name - ,ris.rdb$field_position as column_position - ,ri.rdb$expression_source as expression_source -from rdb$indices ri left join rdb$index_segments ris on ris.rdb$index_name = ri.rdb$index_name -where ri.rdb$system_flag = 0 - and not exists - (select 1 - from rdb$relation_constraints rc - where rc.rdb$constraint_type in ('PRIMARY KEY', 'FOREIGN KEY') - and rc.rdb$relation_name = ri.rdb$relation_name - and rc.rdb$index_name = ri.rdb$index_name) -order by ri.rdb$relation_name, ri.rdb$index_id, ris.rdb$field_position"; - } - - protected virtual string GetExtractForeignKeysQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(co.rdb$relation_name) as table_name - ,trim(co.rdb$constraint_name) as constraint_name - ,trim(co.rdb$deferrable) as is_deferrable - ,trim(co.rdb$initially_deferred) as deferred - ,trim(ref.rdb$delete_rule) as delete_rule - ,trim(coidxseg.rdb$field_name) as column_name - ,coidxseg.rdb$field_position as column_position - ,cast(null as varchar(30)) as referenced_schema - ,trim(refidx.rdb$relation_name) as referenced_table_name - ,trim(refidxseg.rdb$field_name) as referenced_column_name - ,trim(ref.rdb$match_option) as match_option - ,trim(ref.rdb$update_rule) as update_rule -from rdb$relation_constraints co join rdb$ref_constraints ref on co.rdb$constraint_name = ref.rdb$constraint_name - join rdb$indices tempidx - on co.rdb$index_name = tempidx.rdb$index_name - join rdb$index_segments coidxseg - on co.rdb$index_name = coidxseg.rdb$index_name - join rdb$relation_constraints unqc - on ref.rdb$const_name_uq = unqc.rdb$constraint_name and unqc.rdb$constraint_type in ('UNIQUE', 'PRIMARY KEY') - join rdb$indices refidx - on refidx.rdb$index_name = unqc.rdb$index_name and refidx.rdb$relation_name not starts with 'RDB$' - join rdb$index_segments refidxseg - on refidx.rdb$index_name = refidxseg.rdb$index_name - and coidxseg.rdb$field_position = refidxseg.rdb$field_position -where co.rdb$constraint_type = 'FOREIGN KEY' -order by co.rdb$relation_name, co.rdb$constraint_name, coidxseg.rdb$field_position"; - } - - protected override string GetExtractUniqueAndPrimaryKeyConstraintsQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(rel.rdb$relation_name) as table_name - ,trim(rel.rdb$constraint_name) as constraint_name - ,trim(rel.rdb$constraint_type) constraint_type - ,trim(seg.rdb$field_name) as column_name - ,seg.rdb$field_position as column_position -from rdb$relation_constraints rel -left join rdb$indices idx on rel.rdb$index_name = idx.rdb$index_name -left join rdb$index_segments seg on idx.rdb$index_name = seg.rdb$index_name -where rel.rdb$constraint_type in ('PRIMARY KEY', 'UNIQUE') - and rel.rdb$relation_name not starts with 'RDB$' - and rel.rdb$relation_name not starts with 'MON$' -order by rel.rdb$relation_name, rel.rdb$constraint_name, seg.rdb$field_position"; - } - - protected virtual string GetExtractCheckConstraintsQuery() - { - return @" -select cast(null as varchar(30)) as schema - ,trim(chktb.rdb$relation_name) as table_name - ,trim(chktb.rdb$constraint_name) as constraint_name - ,trim(trig.rdb$trigger_source) as check_clausule -from rdb$relation_constraints chktb inner join rdb$check_constraints chk - on (chktb.rdb$constraint_name = chk.rdb$constraint_name and chktb.rdb$constraint_type = 'CHECK') - inner join rdb$triggers trig - on chk.rdb$trigger_name = trig.rdb$trigger_name and trig.rdb$trigger_type = 1 -order by chktb.rdb$relation_name, chktb.rdb$constraint_name"; - } - } } diff --git a/Orm/Xtensive.Orm.Tests/Linq/InTest.cs b/Orm/Xtensive.Orm.Tests/Linq/InTest.cs index 5518671e31..05a57056c1 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/InTest.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/InTest.cs @@ -52,10 +52,10 @@ public async Task StringContainsAsyncTest() var list = new List { "Michelle", "Jack" }; var query1 = (await (from c in Session.Query.All() where !c.FirstName.In(list) - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var query2 = (await (from c in Session.Query.All() where !c.FirstName.In("Michelle", "Jack") - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var expected1 = from c in Customers where !list.Contains(c.FirstName) select c.Invoices; @@ -115,10 +115,10 @@ public async Task LongSequenceIntAsyncTest() list2.AddRange(list1); var query1 = (await (from invoice in Session.Query.All() where (invoice.Commission).In(list1) - select invoice).AsAsync()).ToList(); + select invoice).ExecuteAsync()).ToList(); var query2 = (await (from invoice in Session.Query.All() where (invoice.Commission).In(list2) - select invoice).AsAsync()).ToList(); + select invoice).ExecuteAsync()).ToList(); var expected = from invoice in Invoices where (invoice.Commission).In(list1) select invoice; @@ -151,7 +151,7 @@ public async Task IntAndDecimalContains1AsyncTest() var list = new List { 5, 18, 41 }; var query = (await (from invoice in Session.Query.All() where !((int) invoice.Commission).In(list) - select invoice).AsAsync()).ToList(); + select invoice).ExecuteAsync()).ToList(); var expected = from invoice in Invoices where !((int) invoice.Commission).In(list) select invoice; @@ -181,7 +181,7 @@ public async Task SimpleIntContainsAsyncTest() var list = new List { 276192, 349492, 232463 }; var query = (await (from track in Session.Query.All() where track.Milliseconds.In(list) - select track).AsAsync()).ToList(); + select track).ExecuteAsync()).ToList(); var expected = from track in Tracks where track.Milliseconds.In(list) select track; @@ -236,7 +236,7 @@ public async Task IntAndDecimalContains2AsyncTest() var list = new List { 7, 22, 46 }; var query = (await (from invoice in Session.Query.All() where !((decimal) invoice.InvoiceId).In(list) - select invoice).AsAsync()).ToList(); + select invoice).ExecuteAsync()).ToList(); var expected = from invoice in Invoices where !((decimal) invoice.InvoiceId).In(list) select invoice; @@ -266,7 +266,7 @@ public async Task EntityContainsAsyncTest() var list = Session.Query.All().Take(5).ToList(); var query = (await (from c in Session.Query.All() where !c.In(list) - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var expected = from c in Customers where !c.In(list) select c.Invoices; @@ -296,7 +296,7 @@ public async Task StructContainsAsyncTest() var list = Session.Query.All().Take(5).Select(c => c.Address).ToList(); var query = (await (from c in Session.Query.All() where !c.Address.In(list) - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var expected = from c in Customers where !c.Address.In(list) select c.Invoices; @@ -316,7 +316,7 @@ public void StructSimpleContainsTest() [Test] public async Task StructSimpleContainsAsyncTest() { - var list = (await Session.Query.All().Take(5).Select(c => c.Address).AsAsync()).ToList(); + var list = (await Session.Query.All().Take(5).Select(c => c.Address).ExecuteAsync()).ToList(); var query = Session.Query.All().Select(c => c.Address).Where(c => c.In(list)); QueryDumper.Dump(query); } @@ -339,7 +339,7 @@ public async Task AnonimousContainsAsyncTest() var query = (await Session.Query.All() .Where(c => new { c.FirstName }.In(list)) .Select(c => c.Invoices) - .AsAsync()).ToList(); + .ExecuteAsync()).ToList(); var expected = Customers.Where(c => new { c.FirstName }.In(list)).Select(c => c.Invoices); Assert.That(query, Is.Not.Empty); Assert.AreEqual(0, expected.Except(query).Count()); @@ -364,7 +364,7 @@ public async Task AnonimousContains2AsyncTest() var query = (await Session.Query.All() .Where(c => new { Id1 = c.FirstName, Id2 = c.FirstName }.In(list)) .Select(c => c.Invoices) - .AsAsync()).ToList(); + .ExecuteAsync()).ToList(); var expected = Customers.Where(c => new { Id1 = c.FirstName, Id2 = c.FirstName }.In(list)).Select(c => c.Invoices); Assert.That(query, Is.Not.Empty); Assert.AreEqual(0, expected.Except(query).Count()); @@ -398,7 +398,7 @@ public async Task QueryableDoubleContainsAsyncTest() .Take(10); var query = (await (from invoice in Session.Query.All() where !invoice.Commission.In(list) - select invoice).AsAsync()).ToList(); + select invoice).ExecuteAsync()).ToList(); var expected = from invoice in Invoices where !invoice.Commission.In(list) select invoice; @@ -428,7 +428,7 @@ public async Task QueryableEntityContainsAsyncTest() var list = Session.Query.All().Take(5); var query = (await (from c in Session.Query.All() where !c.In(list) - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var expected = from c in Customers where !c.In(list) select c.Invoices; @@ -462,7 +462,7 @@ public async Task QueryableStructContainsAsyncTest() .Select(c => c.Address); var query = (await (from c in Session.Query.All() where !c.Address.In(list) - select c.Invoices).AsAsync()).ToList(); + select c.Invoices).ExecuteAsync()).ToList(); var expected = from c in Customers where !c.Address.In(list) select c.Invoices; @@ -489,7 +489,7 @@ public async Task QueryableAnonimousContainsAsyncTest() var query = (await Session.Query.All() .Where(c => new { c.FirstName }.In(list)) .Select(c => c.Invoices) - .AsAsync()).ToList(); + .ExecuteAsync()).ToList(); var expected = Customers.Where(c => new { c.FirstName }.In(list)).Select(c => c.Invoices); Assert.That(query, Is.Not.Empty); Assert.AreEqual(0, expected.Except(query).Count()); @@ -527,7 +527,7 @@ public async Task ComplexCondition1AsyncTest() var list = new List { 276192, 349492, 232463 }; var query = (await (from track in Session.Query.All() where track.Milliseconds.In(includeAlgorithm, list) - select track).AsAsync()).ToList(); + select track).ExecuteAsync()).ToList(); var expected = from track in Tracks where track.Milliseconds.In(includeAlgorithm, list) select track; @@ -557,7 +557,7 @@ public async Task ComplexCondition2AsyncTest() var includeAlgorithm = IncludeAlgorithm.TemporaryTable; var query = (await (from track in Session.Query.All() where track.Milliseconds.In(includeAlgorithm, 276192, 349492, 232463) - select track).AsAsync()).ToList(); + select track).ExecuteAsync()).ToList(); var expected = from track in Tracks where track.Milliseconds.In(includeAlgorithm, 276192, 349492, 232463) select track; diff --git a/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs b/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs index 9f2849c62e..31c5d02f58 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/LocalCollectionsTest.cs @@ -889,7 +889,7 @@ public async Task Aggregate2AsyncTest() var localItems = GetLocalItems(100); var queryable = Session.Query.Store(localItems); var result = (await Session.Query.All() - .Where(invoice => invoice.Commission > queryable.Max(poco => poco.Value2)).AsAsync()).ToList(); + .Where(invoice => invoice.Commission > queryable.Max(poco => poco.Value2)).ExecuteAsync()).ToList(); var expected = Invoices .Where(invoice => invoice.Commission > localItems.Max(poco => poco.Value2)); diff --git a/Orm/Xtensive.Orm.Tests/Linq/QueryMethodTests.cs b/Orm/Xtensive.Orm.Tests/Linq/QueryMethodTests.cs index 1e34899e38..a1ad7ff5af 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/QueryMethodTests.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/QueryMethodTests.cs @@ -131,7 +131,7 @@ public async Task Store1AsyncTest() Session.Query.Store(localCustomers), customer => customer, localCustomer => localCustomer, - (customer, localCustomer) => new { customer, localCustomer }).AsAsync()).ToList(); + (customer, localCustomer) => new { customer, localCustomer }).ExecuteAsync()).ToList(); var expected = Session.Query.All().AsEnumerable() .Join( Session.Query.Store(localCustomers), @@ -175,7 +175,7 @@ public async Task Store2AsyncTest() Session.Query.Store(Session.Query.All().Take(10)), customer => customer, localCustomer => localCustomer, - (customer, localCustomer) => new { customer, localCustomer }).AsAsync()).ToList(); + (customer, localCustomer) => new { customer, localCustomer }).ExecuteAsync()).ToList(); var expected = Session.Query.All().AsEnumerable() .Join( Session.Query.Store(Session.Query.All().Take(10)), diff --git a/Orm/Xtensive.Orm.Tests/Upgrade/ConflictsByTable/TestBase.cs b/Orm/Xtensive.Orm.Tests/Upgrade/ConflictsByTable/TestBase.cs index 2d253e3218..f5744c280e 100644 --- a/Orm/Xtensive.Orm.Tests/Upgrade/ConflictsByTable/TestBase.cs +++ b/Orm/Xtensive.Orm.Tests/Upgrade/ConflictsByTable/TestBase.cs @@ -34,9 +34,9 @@ public async ValueTask PerformSafelyTest(InheritanceSchema inheritanceSchema, bo BuildAndPopulateDomain(initDomainTypes, DomainUpgradeMode.Recreate); var upgradeDomainTypes = GetTypes(inheritanceSchema, true); - var ex = (asyncBuild) - ? Assert.ThrowsAsync(async () => { using (await BuildDomainAsync(DomainUpgradeMode.PerformSafely, upgradeDomainTypes)) ; }) - : Assert.Throws(() => { using (BuildDomain(DomainUpgradeMode.PerformSafely, upgradeDomainTypes)) ; }); + var ex = asyncBuild + ? Assert.ThrowsAsync(async () => { using (await BuildDomainAsync(DomainUpgradeMode.PerformSafely, upgradeDomainTypes)) { } }) + : Assert.Throws(() => { using (BuildDomain(DomainUpgradeMode.PerformSafely, upgradeDomainTypes)) { } }); CheckComparisonResult(inheritanceSchema, ex.ComparisonResult); diff --git a/Orm/Xtensive.Orm/Sql/Compiler/SqlCompiler.cs b/Orm/Xtensive.Orm/Sql/Compiler/SqlCompiler.cs index d336c1d48f..5d0208cf91 100644 --- a/Orm/Xtensive.Orm/Sql/Compiler/SqlCompiler.cs +++ b/Orm/Xtensive.Orm/Sql/Compiler/SqlCompiler.cs @@ -827,6 +827,7 @@ public virtual void Visit(SqlCreateTable node) /// /// The constrains belong to /// List of constraints. + /// Flag indicating that constraint list should start with /// Flag that tells whether there were constraints. protected virtual bool VisitCreateTableConstraints(SqlCreateTable node, IEnumerable constraints, bool hasItems) { @@ -849,6 +850,7 @@ protected virtual bool VisitCreateTableConstraints(SqlCreateTable node, IEnumera /// /// The the columns belong to. /// List of columns. + /// Flag indicating that constraint list should start with /// Flag that tells whether there were columns. protected virtual bool VisitCreateTableColumns(SqlCreateTable node, IEnumerable columns, bool hasItems) { diff --git a/Orm/Xtensive.Orm/Sql/Compiler/SqlTranslator.cs b/Orm/Xtensive.Orm/Sql/Compiler/SqlTranslator.cs index f57fe08b7c..8f78e6e232 100644 --- a/Orm/Xtensive.Orm/Sql/Compiler/SqlTranslator.cs +++ b/Orm/Xtensive.Orm/Sql/Compiler/SqlTranslator.cs @@ -2546,8 +2546,8 @@ private void Translate(IOutput output, PartitionDescriptor partitionDescriptor, _ = output.Append(" VALUES ("); var firstValue = true; foreach (var v in p.Values) { - if (first) - first = false; + if (firstValue) + firstValue = false; else _ = output.Append(RowItemDelimiter);