@@ -19,8 +19,6 @@ namespace Xtensive.Orm.Providers
1919 /// </summary>
2020 public class CommandFactory
2121 {
22- private const string ParameterNameFormat = "{0}{1}" ;
23- private const string RowFilterParameterNameFormat = "{0}_{1}_{2}" ;
2422 private const string DefaultParameterNamePrefix = "p0_" ;
2523 private const int LobBlockSize = ushort . MaxValue ;
2624
@@ -58,7 +56,7 @@ public virtual IEnumerable<CommandPart> CreatePersistParts(SqlPersistTask task,
5856 foreach ( var binding in request . ParameterBindings ) {
5957 var parameterValue = GetParameterValue ( task , binding ) ;
6058 if ( binding . BindingType == PersistParameterBindingType . VersionFilter && IsHandledLikeNull ( parameterValue ) ) {
61- configuration . AlternativeBranches . Add ( binding ) ;
59+ _ = configuration . AlternativeBranches . Add ( binding ) ;
6260 }
6361 else {
6462 var parameterName = GetParameterName ( parameterNamePrefix , ref parameterIndex ) ;
@@ -106,14 +104,14 @@ public virtual CommandPart CreateQueryPart(IQueryRequest request, string paramet
106104 case QueryParameterBindingType . SmartNull :
107105 // replacing "x = @p" with "x is null" when @p = null (or empty string in case of Oracle)
108106 if ( IsHandledLikeNull ( parameterValue ) ) {
109- configuration . AlternativeBranches . Add ( binding ) ;
107+ _ = configuration . AlternativeBranches . Add ( binding ) ;
110108 continue ;
111109 }
112110 break ;
113111 case QueryParameterBindingType . BooleanConstant :
114112 // expanding true/false parameters to constants to help query optimizer with branching
115113 if ( ( bool ) parameterValue )
116- configuration . AlternativeBranches . Add ( binding ) ;
114+ _ = configuration . AlternativeBranches . Add ( binding ) ;
117115 continue ;
118116 case QueryParameterBindingType . LimitOffset :
119117 // not parameter, just inlined constant
@@ -123,27 +121,28 @@ public virtual CommandPart CreateQueryPart(IQueryRequest request, string paramet
123121 // Like "LimitOffset" but we handle zero value specially
124122 // We replace value with 1 and activate special branch that evaluates "where" part to "false"
125123 var stringValue = parameterValue . ToString ( ) ;
126- if ( stringValue == "0" ) {
124+ if ( stringValue . Equals ( "0" , StringComparison . Ordinal ) ) {
127125 configuration . PlaceholderValues . Add ( binding , "1" ) ;
128- configuration . AlternativeBranches . Add ( binding ) ;
126+ _ = configuration . AlternativeBranches . Add ( binding ) ;
129127 }
130- else
128+ else {
131129 configuration . PlaceholderValues . Add ( binding , stringValue ) ;
130+ }
132131 continue ;
133132 case QueryParameterBindingType . RowFilter :
134133 var filterData = ( List < Tuple > ) parameterValue ;
135- var rowTypeMapping = ( ( QueryRowFilterParameterBinding ) binding ) . RowTypeMapping ;
136- if ( filterData == null ) {
137- configuration . AlternativeBranches . Add ( binding ) ;
134+ if ( filterData is null ) {
135+ _ = configuration . AlternativeBranches . Add ( binding ) ;
138136 continue ;
139137 }
138+ var rowTypeMapping = ( ( QueryRowFilterParameterBinding ) binding ) . RowTypeMapping ;
140139 var commonPrefix = GetParameterName ( parameterNamePrefix , ref parameterIndex ) ;
141- var filterValues = new List < string [ ] > ( ) ;
142- for ( int tupleIndex = 0 ; tupleIndex < filterData . Count ; tupleIndex ++ ) {
140+ var filterValues = new List < string [ ] > ( filterData . Count ) ;
141+ for ( int tupleIndex = 0 , overallCount = filterData . Count ; tupleIndex < overallCount ; tupleIndex ++ ) {
143142 var tuple = filterData [ tupleIndex ] ;
144143 var parameterReferences = new string [ tuple . Count ] ;
145- for ( int fieldIndex = 0 ; fieldIndex < tuple . Count ; fieldIndex ++ ) {
146- var name = string . Format ( RowFilterParameterNameFormat , commonPrefix , tupleIndex , fieldIndex ) ;
144+ for ( int fieldIndex = 0 , fieldCount = tuple . Count ; fieldIndex < fieldCount ; fieldIndex ++ ) {
145+ var name = $ " { commonPrefix } _ { tupleIndex . ToString ( "G" ) } _ { fieldIndex . ToString ( "G" ) } " ;
147146 var value = tuple . GetValueOrDefault ( fieldIndex ) ;
148147 parameterReferences [ fieldIndex ] = Driver . BuildParameterReference ( name ) ;
149148 AddRegularParameter ( result , rowTypeMapping [ fieldIndex ] , name , value ) ;
@@ -156,7 +155,7 @@ public virtual CommandPart CreateQueryPart(IQueryRequest request, string paramet
156155 throw new ArgumentOutOfRangeException ( "binding.BindingType" ) ;
157156 }
158157 // regular case -> just adding the parameter
159- string parameterName = GetParameterName ( parameterNamePrefix , ref parameterIndex ) ;
158+ var parameterName = GetParameterName ( parameterNamePrefix , ref parameterIndex ) ;
160159 configuration . PlaceholderValues . Add ( binding , Driver . BuildParameterReference ( parameterName ) ) ;
161160 AddParameter ( result , binding , parameterName , parameterValue ) ;
162161 }
@@ -183,12 +182,12 @@ private static object GetParameterValue(QueryParameterBinding binding, Parameter
183182 private object GetParameterValue ( SqlPersistTask task , PersistParameterBinding binding )
184183 {
185184 switch ( binding . BindingType ) {
186- case PersistParameterBindingType . Regular :
187- return task . Tuple . GetValueOrDefault ( binding . FieldIndex ) ;
188- case PersistParameterBindingType . VersionFilter :
189- return task . OriginalTuple . GetValueOrDefault ( binding . FieldIndex ) ;
190- default :
191- throw new ArgumentOutOfRangeException ( "binding.Source" ) ;
185+ case PersistParameterBindingType . Regular :
186+ return task . Tuple . GetValueOrDefault ( binding . FieldIndex ) ;
187+ case PersistParameterBindingType . VersionFilter :
188+ return task . OriginalTuple . GetValueOrDefault ( binding . FieldIndex ) ;
189+ default :
190+ throw new ArgumentOutOfRangeException ( "binding.Source" ) ;
192191 }
193192 }
194193
@@ -262,7 +261,7 @@ private void AddParameter(
262261
263262 private string GetParameterName ( string prefix , ref int index )
264263 {
265- var result = string . Format ( ParameterNameFormat , prefix , index ) ;
264+ var result = $ " { prefix } { index . ToString ( "G" ) } " ; //leave ToString(). it is faster
266265 index ++ ;
267266 return result ;
268267 }
0 commit comments