@@ -64,51 +64,35 @@ protected Compiler()
6464
6565 } ;
6666
67- protected Dictionary < string , object > generateNamedBindings ( object [ ] bindings )
67+ protected ( string Name , object Variable ) [ ] generateNamedBindingsArray ( object [ ] bindings )
6868 {
69- return Helper . Flatten ( bindings ) . Select ( ( v , i ) => new { i , v } )
70- . ToDictionary ( x => parameterPrefix + x . i , x => x . v ) ;
71- }
72-
73- protected Dictionary < string , string > generateNamedParameterMapping ( Dictionary < string , object > namedBindings )
74- {
75- return namedBindings
76- . Where ( v => v . Value is NamedParameterVariable _)
77- . ToDictionary ( x => x . Key ,
78- x => ( ( NamedParameterVariable ) x . Value ) . Variable ) ;
79- }
80-
81- protected string remapNamedParameters ( string sql , Dictionary < string , string > mapping )
82- {
83- if ( mapping . Count == 0 ) return sql ;
84- var pattern = string . Join ( "|" , mapping . Keys . Select ( Regex . Escape ) ) ;
85- return Regex . Replace ( sql , pattern , match => mapping [ match . Value ] ) ;
69+ return Helper . Flatten ( bindings ) . Select ( ( v , i ) =>
70+ {
71+ if ( v is NamedParameterVariable param )
72+ {
73+ return ( param . Variable , param . Value ) ;
74+ }
75+ return ( parameterPrefix + i , v ) ;
76+ } ) . ToArray ( ) ;
8677 }
8778
88- protected Dictionary < string , object > cleanupNamedBindings ( Dictionary < string , object > namedBindings )
79+ protected Dictionary < string , object > generateNamedBindings ( ( string , object ) [ ] bindings )
8980 {
90- var result = new Dictionary < string , object > ( ) ;
91-
92- foreach ( var ( key , value ) in namedBindings )
81+ var dictionary = new Dictionary < string , object > ( ) ;
82+ foreach ( var ( name , variable ) in bindings )
9383 {
94- var actualKey = value is NamedParameterVariable k ? k . Variable : key ;
95- var actualValue = value is NamedParameterVariable v ? v . Value : value ;
96-
97- result . TryAdd ( actualKey , actualValue ) ;
84+ dictionary . TryAdd ( name , variable ) ;
9885 }
9986
100- return result ;
87+ return dictionary ;
10188 }
10289
10390
10491 protected SqlResult PrepareResult ( SqlResult ctx )
10592 {
106- ctx . NamedBindings = generateNamedBindings ( ctx . Bindings . ToArray ( ) ) ;
107- ctx . Sql = Helper . ReplaceAll ( ctx . RawSql , parameterPlaceholder , EscapeCharacter , i => parameterPrefix + i ) ;
108- var mapping = generateNamedParameterMapping ( ctx . NamedBindings ) ;
109- if ( mapping . Count == 0 ) return ctx ;
110- ctx . NamedBindings = cleanupNamedBindings ( ctx . NamedBindings ) ;
111- ctx . Sql = remapNamedParameters ( ctx . Sql , mapping ) ;
93+ var bindings = generateNamedBindingsArray ( ctx . Bindings . ToArray ( ) ) ;
94+ ctx . NamedBindings = generateNamedBindings ( bindings ) ;
95+ ctx . Sql = Helper . ReplaceAll ( ctx . RawSql , parameterPlaceholder , EscapeCharacter , i => bindings [ i ] . Name ) ;
11296 return ctx ;
11397 }
11498
0 commit comments