Skip to content

Commit 2184775

Browse files
committed
Fix formatting and copyright comments + Use new language features
1 parent 32b9918 commit 2184775

File tree

1 file changed

+42
-69
lines changed

1 file changed

+42
-69
lines changed

Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Helpers.cs

Lines changed: 42 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2009-2020 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: 2009.11.13
66

77
using System;
88
using System.Collections.Generic;
99
using System.Linq;
1010
using System.Linq.Expressions;
11-
using Xtensive.Collections;
1211
using Xtensive.Core;
1312
using Xtensive.Orm.Rse;
1413
using Xtensive.Orm.Rse.Transformation;
@@ -22,31 +21,31 @@ namespace Xtensive.Orm.Providers
2221
partial class SqlCompiler
2322
{
2423
protected SqlProvider CreateProvider(SqlSelect statement,
25-
CompilableProvider origin, params ExecutableProvider[] sources)
26-
{
27-
return CreateProvider(statement, (IEnumerable<QueryParameterBinding>) null, origin, sources);
28-
}
24+
CompilableProvider origin, params ExecutableProvider[] sources) =>
25+
CreateProvider(statement, (IEnumerable<QueryParameterBinding>) null, origin, sources);
2926

3027
protected SqlProvider CreateProvider(SqlSelect statement, QueryParameterBinding extraBinding,
3128
CompilableProvider origin, params ExecutableProvider[] sources)
3229
{
33-
var extraBindings = extraBinding!=null ? EnumerableUtils.One(extraBinding) : null;
30+
var extraBindings = extraBinding!=null ? Enumerable.Repeat(extraBinding, 1) : null;
3431
return CreateProvider(statement, extraBindings, origin, sources);
3532
}
3633

3734
protected SqlProvider CreateProvider(SqlSelect statement, IEnumerable<QueryParameterBinding> extraBindings,
3835
CompilableProvider origin, params ExecutableProvider[] sources)
3936
{
40-
var sqlSources = sources.OfType<SqlProvider>();
37+
var allowBatching = true;
38+
var parameterBindings = Enumerable.Empty<QueryParameterBinding>();
39+
foreach (var provider in sources.OfType<SqlProvider>()) {
40+
var queryRequest = provider.Request;
41+
allowBatching &= queryRequest.CheckOptions(QueryRequestOptions.AllowOptimization);
42+
parameterBindings = parameterBindings.Concat(queryRequest.ParameterBindings);
43+
}
4144

42-
var parameterBindings = sqlSources.SelectMany(p => p.Request.ParameterBindings);
43-
if (extraBindings!=null) {
45+
if (extraBindings != null) {
4446
parameterBindings = parameterBindings.Concat(extraBindings);
4547
}
4648

47-
var allowBatching = sqlSources
48-
.Aggregate(true, (current, provider) =>
49-
current && provider.Request.CheckOptions(QueryRequestOptions.AllowOptimization));
5049
var tupleDescriptor = origin.Header.TupleDescriptor;
5150

5251
var options = QueryRequestOptions.Empty;
@@ -63,10 +62,7 @@ protected SqlProvider CreateProvider(SqlSelect statement, IEnumerable<QueryParam
6362
return new SqlProvider(Handlers, request, origin, sources);
6463
}
6564

66-
protected virtual string ProcessAliasedName(string name)
67-
{
68-
return name;
69-
}
65+
protected virtual string ProcessAliasedName(string name) => name;
7066

7167
protected Pair<SqlExpression, IEnumerable<QueryParameterBinding>> ProcessExpression(LambdaExpression le,
7268
params IReadOnlyList<SqlExpression>[] sourceColumns)
@@ -101,22 +97,13 @@ protected SqlExpression ExtractColumnExpression(SqlColumn column)
10197
SqlExpression expression;
10298
if (IsColumnStub(column)) {
10399
expression = stubColumnMap[ExtractColumnStub(column)];
104-
var subQuery = expression as SqlSubQuery;
105-
if (!subQuery.IsNullReference()) {
106-
var subSelect = subQuery.Query as SqlSelect;
107-
if (subSelect!=null) {
108-
if (subSelect.Columns.Count==1 && subSelect.From==null) {
109-
var userColumn = subSelect.Columns[0] as SqlUserColumn;
110-
if (!userColumn.IsNullReference()) {
111-
var cast = userColumn.Expression as SqlCast;
112-
if (!cast.IsNullReference() && cast.Type.Type==SqlType.Boolean) {
113-
var sqlCase = cast.Operand as SqlCase;
114-
if (!sqlCase.IsNullReference() && sqlCase.Count==1) {
115-
var pair = sqlCase.First();
116-
var key = pair.Key as SqlUnary;
117-
if (!key.IsNullReference() && pair.Value is SqlLiteral<int>)
118-
expression = cast;
119-
}
100+
if (expression is SqlSubQuery subQuery && subQuery.Query is SqlSelect subSelect && subSelect.From == null) {
101+
if (subSelect.Columns.Count == 1 && subSelect.Columns[0] is SqlUserColumn userColumn) {
102+
if (userColumn.Expression is SqlCast cast && cast.Type.Type == SqlType.Boolean) {
103+
if (cast.Operand is SqlCase sqlCase && sqlCase.Count == 1) {
104+
var pair = sqlCase.First();
105+
if (pair.Key is SqlUnary && pair.Value is SqlLiteral<int>) {
106+
expression = cast;
120107
}
121108
}
122109
}
@@ -127,8 +114,7 @@ protected SqlExpression ExtractColumnExpression(SqlColumn column)
127114
expression = column;
128115
}
129116

130-
var columnRef = expression as SqlColumnRef;
131-
if (!columnRef.IsNullReference()) {
117+
if (expression is SqlColumnRef columnRef) {
132118
expression = columnRef.SqlColumn;
133119
}
134120

@@ -150,12 +136,10 @@ protected void AddInlinableColumn(IInlinableProvider provider, Column column,
150136
}
151137
}
152138

153-
protected SqlExpression GetBooleanColumnExpression(SqlExpression originalExpression)
154-
{
155-
return providerInfo.Supports(ProviderFeatures.FullFeaturedBooleanExpressions)
139+
protected SqlExpression GetBooleanColumnExpression(SqlExpression originalExpression) =>
140+
providerInfo.Supports(ProviderFeatures.FullFeaturedBooleanExpressions)
156141
? originalExpression
157142
: booleanExpressionConverter.BooleanToInt(originalExpression);
158-
}
159143

160144
protected QueryRequest CreateQueryRequest(StorageDriver driver, SqlSelect statement,
161145
IEnumerable<QueryParameterBinding> parameterBindings,
@@ -173,8 +157,8 @@ private static bool IsCalculatedColumn(SqlColumn column)
173157
if (column is SqlUserColumn) {
174158
return true;
175159
}
176-
var cRef = column as SqlColumnRef;
177-
return cRef?.SqlColumn is SqlUserColumn;
160+
161+
return column is SqlColumnRef columnRef && columnRef.SqlColumn is SqlUserColumn;
178162
}
179163

180164
private static bool IsColumnStub(SqlColumn column)
@@ -183,38 +167,25 @@ private static bool IsColumnStub(SqlColumn column)
183167
return true;
184168
}
185169

186-
var cRef = column as SqlColumnRef;
187-
return cRef?.SqlColumn is SqlColumnStub;
170+
return column is SqlColumnRef columnRef && columnRef.SqlColumn is SqlColumnStub;
188171
}
189172

190-
private static SqlColumnStub ExtractColumnStub(SqlColumn column)
191-
{
192-
switch (column) {
193-
case SqlColumnStub columnStub:
194-
return columnStub;
195-
case SqlColumnRef columnRef:
196-
return (SqlColumnStub) columnRef.SqlColumn;
197-
default:
198-
return (SqlColumnStub) column;
199-
}
200-
}
173+
private static SqlColumnStub ExtractColumnStub(SqlColumn column) =>
174+
column switch {
175+
SqlColumnRef columnRef => (SqlColumnStub) columnRef.SqlColumn,
176+
_ => (SqlColumnStub) column
177+
};
201178

202-
private static SqlUserColumn ExtractUserColumn(SqlColumn column)
203-
{
204-
switch (column) {
205-
case SqlUserColumn userColumn:
206-
return userColumn;
207-
case SqlColumnRef columnRef:
208-
return (SqlUserColumn) columnRef.SqlColumn;
209-
default:
210-
return (SqlUserColumn) column;
211-
}
212-
}
179+
private static SqlUserColumn ExtractUserColumn(SqlColumn column) =>
180+
column switch {
181+
SqlColumnRef columnRef => (SqlUserColumn) columnRef.SqlColumn,
182+
_ => (SqlUserColumn) column
183+
};
213184

214185
private static bool ShouldUseQueryReference(CompilableProvider origin, SqlProvider compiledSource)
215186
{
216187
var sourceSelect = compiledSource.Request.Statement;
217-
if (sourceSelect.From==null) {
188+
if (sourceSelect.From == null) {
218189
return false;
219190
}
220191

@@ -226,8 +197,10 @@ private static bool ShouldUseQueryReference(CompilableProvider origin, SqlProvid
226197
calculatedColumnIndexes.Add(columnIndex);
227198
rowNumberIsUsed = rowNumberIsUsed || ExtractUserColumn(column).Expression is SqlRowNumber;
228199
}
200+
229201
columnIndex++;
230202
}
203+
231204
var containsCalculatedColumns = calculatedColumnIndexes.Count > 0;
232205
var pagingIsUsed = rowNumberIsUsed
233206
|| !sourceSelect.Limit.IsNullReference() || !sourceSelect.Offset.IsNullReference();
@@ -260,7 +233,7 @@ private static bool ShouldUseQueryReference(CompilableProvider origin, SqlProvid
260233
return usedColumnIndexes.Any(calculatedColumnIndexes.Contains);
261234
}
262235
case ProviderType.Aggregate: {
263-
var aggregateProvider = (AggregateProvider)origin;
236+
var aggregateProvider = (AggregateProvider) origin;
264237
var usedColumnIndexes = (aggregateProvider.AggregateColumns ?? Enumerable.Empty<AggregateColumn>())
265238
.Select(ac => ac.SourceIndex)
266239
.Concat(aggregateProvider.GroupColumnIndexes);

0 commit comments

Comments
 (0)