Skip to content

Commit 4d905c5

Browse files
committed
Merge branch '6.0' into 6.0-node-stale-querycache
2 parents 384ed89 + bf7811d commit 4d905c5

File tree

6 files changed

+59
-8
lines changed

6 files changed

+59
-8
lines changed

ChangeLog/6.0.11_dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[postgresql] Dedicated exception when an extracting schema doesn't exist or it belongs to another user
2+
[weaver] Fixed ctor processing with try...catch where there was broken catch section leaving

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/Resources/Strings.Designer.cs

Lines changed: 10 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/Resources/Strings.resx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@
112112
<value>2.0</value>
113113
</resheader>
114114
<resheader name="reader">
115-
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116116
</resheader>
117117
<resheader name="writer">
118-
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120120
<data name="ExPostgreSqlBelow83IsNotSupported" xml:space="preserve">
121121
<value>PostgreSQL below 8.3 is not supported.</value>
@@ -132,4 +132,7 @@
132132
<data name="ExTheTypeOfGivenParameterCannotBeTreatedAsOffsetForDateTimeOffsetConstruction" xml:space="preserve">
133133
<value>The type of given parameter cannot be treated as offset for DateTimeOffset construction.</value>
134134
</data>
135+
<data name="ExSchemaXDoesNotExistOrBelongsToAnotherUser" xml:space="preserve">
136+
<value>Schema '{0}' either does not exist or belongs to another user.</value>
137+
</data>
135138
</root>

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/v8_0/Extractor.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,12 @@ protected virtual void ExtractSchemaContents(ExtractionContext context)
441441
&& SqlDml.In(relationsTable["relkind"], SqlDml.Row('r', 'v', 'S'));
442442

443443
if (targetSchemes!=null && targetSchemes.Count > 0) {
444-
var schemesIndexes = catalog.Schemas.Where(sch => targetSchemes.ContainsKey(sch.Name)).Select(sch => context.ReversedSchemaMap[sch]);
444+
var schemesIndexes = catalog.Schemas.Where(sch => targetSchemes.ContainsKey(sch.Name))
445+
.Select(sch =>
446+
context.ReversedSchemaMap.TryGetValue(sch, out var oid)
447+
? oid
448+
: throw new InvalidOperationException(string.Format(Resources.Strings.ExSchemaXDoesNotExistOrBelongsToAnotherUser, sch.Name))
449+
);
445450
select.Where &= SqlDml.In(relationsTable["relnamespace"], CreateOidRow(schemesIndexes));
446451
}
447452
select.Columns.Add(relationsTable["oid"], "reloid");

Orm/Xtensive.Orm.PostgreSql/Xtensive.Orm.PostgreSql.csproj

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<IsPackable>true</IsPackable>
44
<DocumentationFile>$(OutputPath)$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
@@ -32,4 +32,16 @@
3232
<Link>Properties\Visibility.cs</Link>
3333
</Compile>
3434
</ItemGroup>
35+
<ItemGroup>
36+
<None Include="Sql.Drivers.PostgreSql\Resources\Strings.resx">
37+
<Generator>ResXFileCodeGenerator</Generator>
38+
<SubType>Designer</SubType>
39+
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
40+
</None>
41+
<Compile Update="Sql.Drivers.PostgreSql\Resources\Strings.Designer.cs">
42+
<DesignTime>True</DesignTime>
43+
<AutoGen>True</AutoGen>
44+
<DependentUpon>Strings.resx</DependentUpon>
45+
</Compile>
46+
</ItemGroup>
3547
</Project>

Weaver/Xtensive.Orm.Weaver/Tasks/ImplementInitializablePatternTask.cs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (C) 2013 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2013-2022 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
55
// Created: 2013.08.19
66

@@ -20,6 +20,7 @@ public override ActionResult Execute(ProcessorContext context)
2020
{
2121
var body = constructor.Body;
2222
var il = body.GetILProcessor();
23+
var originalLastRet = body.Instructions.Reverse().FirstOrDefault(i => i != null && i.OpCode.Code == Code.Ret);
2324
var leavePlaceholder = il.Create(OpCodes.Nop);
2425

2526
var initializeCall = EmitInitializeCall(context, il);
@@ -36,6 +37,12 @@ public override ActionResult Execute(ProcessorContext context)
3637
var ret = il.Create(OpCodes.Ret);
3738
il.Append(ret);
3839
il.Replace(leavePlaceholder, il.Create(OpCodes.Leave, ret));
40+
if (body.ExceptionHandlers.Count != 0) {
41+
if (originalLastRet != null)
42+
foreach (var eHandler in body.ExceptionHandlers) {
43+
FixCatchLeave(eHandler.HandlerStart, eHandler.HandlerEnd, originalLastRet, initializeCall);
44+
}
45+
}
3946

4047
body.InitLocals = true;
4148
var handler = new ExceptionHandler(ExceptionHandlerType.Catch) {
@@ -61,6 +68,19 @@ private void ReplaceRetWithBr(ILProcessor il, Instruction start, Instruction end
6168
}
6269
}
6370

71+
private void FixCatchLeave(Instruction start, Instruction end, Instruction oldRetTarget, Instruction newTarget)
72+
{
73+
var current = start;
74+
while (current != end && current != null) {
75+
var next = current.Next;
76+
var code = current.OpCode.Code;
77+
if ((code == Code.Leave || code == Code.Leave_S) && current.Operand == oldRetTarget) {
78+
current.Operand = newTarget;
79+
}
80+
current = next;
81+
}
82+
}
83+
6484
private Instruction GetStartInstruction(ILProcessor il)
6585
{
6686
var instructions = constructor.Body.Instructions;

0 commit comments

Comments
 (0)