1
- // Copyright (C) 2009-2020 Xtensive LLC.
1
+ // Copyright (C) 2009-2021 Xtensive LLC.
2
2
// This code is distributed under MIT license terms.
3
3
// See the License.txt file in the project root for more information.
4
4
// Created by: Denis Krjuchkov
@@ -22,15 +22,16 @@ protected override SqlProvider VisitFreeText(FreeTextProvider provider)
22
22
{
23
23
var rankColumnName = provider . Header . Columns [ provider . Header . Columns . Count - 1 ] . Name ;
24
24
var stringTypeMapping = Driver . GetTypeMapping ( WellKnownTypes . StringType ) ;
25
- var binding = new QueryParameterBinding ( stringTypeMapping ,
25
+ var searchCriteriaBinding = new QueryParameterBinding ( stringTypeMapping ,
26
26
provider . SearchCriteria . Invoke , QueryParameterBindingType . Regular ) ;
27
27
28
28
var select = SqlDml . Select ( ) ;
29
29
var realPrimaryIndex = provider . PrimaryIndex . Resolve ( Handlers . Domain . Model ) ;
30
30
var index = realPrimaryIndex . ReflectedType . Indexes . PrimaryIndex ;
31
- var query = BuildProviderQuery ( index ) ;
31
+ var queryAndBindings = BuildProviderQuery ( index ) ;
32
+ var query = queryAndBindings . Query ;
32
33
var table = Mapping [ realPrimaryIndex . ReflectedType ] ;
33
- var fromTable = SqlDml . FreeTextTable ( table , binding . ParameterReference ,
34
+ var fromTable = SqlDml . FreeTextTable ( table , searchCriteriaBinding . ParameterReference ,
34
35
table . Columns . Select ( column => column . Name ) . Append ( rankColumnName ) . ToArray ( table . Columns . Count + 1 ) ) ;
35
36
var fromTableRef = SqlDml . QueryRef ( fromTable ) ;
36
37
foreach ( var column in query . Columns ) {
@@ -40,16 +41,15 @@ protected override SqlProvider VisitFreeText(FreeTextProvider provider)
40
41
select . Columns . Add ( SqlDml . Cast ( fromTableRef . Columns [ rankColumnName ] , SqlType . Double ) , rankColumnName ) ;
41
42
select . From = fromTableRef ;
42
43
if ( provider . TopN == null ) {
43
- return CreateProvider ( select , binding , provider ) ;
44
+ return CreateProvider ( select , queryAndBindings . Bindings . Append ( searchCriteriaBinding ) , provider ) ;
44
45
}
45
46
46
47
var intTypeMapping = Driver . GetTypeMapping ( typeof ( int ) ) ;
47
48
var topNBinding = new QueryParameterBinding (
48
49
intTypeMapping , context => provider . TopN . Invoke ( context ) , QueryParameterBindingType . Regular ) ;
49
50
select . Limit = topNBinding . ParameterReference ;
50
51
select . OrderBy . Add ( select . Columns [ rankColumnName ] , false ) ;
51
- return CreateProvider ( select , new [ ] { binding , topNBinding } , provider ) ;
52
-
52
+ return CreateProvider ( select , queryAndBindings . Bindings . Append ( topNBinding ) . Append ( searchCriteriaBinding ) , provider ) ;
53
53
}
54
54
55
55
protected override SqlExpression ProcessAggregate ( SqlProvider source , List < SqlExpression > sourceColumns , AggregateColumn aggregateColumn )
0 commit comments