@@ -18,55 +18,30 @@ public class PrepareStatementMiddleware : AbstractMiddleware
1818 private readonly SqlParamAnalyzer _sqlParamAnalyzer ;
1919 private readonly DbProviderFactory _dbProviderFactory ;
2020 private readonly TypeHandlerFactory _typeHandlerFactory ;
21+
2122 public PrepareStatementMiddleware ( SmartSqlConfig smartSqlConfig )
2223 {
2324 _logger = smartSqlConfig . LoggerFactory . CreateLogger < PrepareStatementMiddleware > ( ) ;
2425 _sqlParamAnalyzer = smartSqlConfig . SqlParamAnalyzer ;
2526 _dbProviderFactory = smartSqlConfig . Database . DbProvider . Factory ;
2627 _typeHandlerFactory = smartSqlConfig . TypeHandlerFactory ;
2728 }
29+
2830 public override void Invoke < TResult > ( ExecutionContext executionContext )
2931 {
3032 InitParameters ( executionContext ) ;
3133 InvokeNext < TResult > ( executionContext ) ;
3234 }
35+
3336 #region Init Parameter
37+
3438 private void InitParameters ( ExecutionContext executionContext )
3539 {
3640 BuildSql ( executionContext . Request ) ;
3741 BuildDbParameters ( executionContext . Request ) ;
3842 if ( _logger . IsEnabled ( LogLevel . Debug ) )
3943 {
40- var sourceParameters = executionContext . Request . Parameters . DbParameters . Values ;
41- var cmdText = executionContext . Request . RealSql ;
42- string dbParameterStr = string . Join ( "," , sourceParameters . Select ( p => $ "{ p . ParameterName } ={ p . Value } ") ) ;
43- string realSql = _sqlParamAnalyzer . Replace ( cmdText , ( paramName , nameWithPrefix ) =>
44- {
45- var paramNameCompare = executionContext . SmartSqlConfig . Settings . IgnoreParameterCase ? StringComparison . CurrentCultureIgnoreCase : StringComparison . CurrentCulture ;
46- var dbParam = sourceParameters . FirstOrDefault ( m => String . Equals ( m . ParameterName , paramName , paramNameCompare ) ) ;
47- if ( dbParam == null ) { return nameWithPrefix ; }
48- if ( dbParam . Value == DBNull . Value ) { return "NULL" ; }
49- switch ( dbParam . DbType )
50- {
51- case DbType . AnsiString :
52- case DbType . AnsiStringFixedLength :
53- case DbType . DateTime :
54- case DbType . DateTime2 :
55- case DbType . DateTimeOffset :
56- case DbType . Guid :
57- case DbType . String :
58- case DbType . StringFixedLength :
59- case DbType . Time :
60- case DbType . Xml :
61- { return $ "'{ dbParam . Value } '"; }
62- case DbType . Boolean :
63- {
64- return ( ( bool ) dbParam . Value ) ? "1" : "0" ;
65- }
66- }
67- return dbParam . Value . ToString ( ) ;
68- } ) ;
69- _logger . LogDebug ( $ "Statement.Id:[{ executionContext . Request . FullSqlId } ],Sql:{ Environment . NewLine } { cmdText } { Environment . NewLine } Parameters:[{ dbParameterStr } ]{ Environment . NewLine } Sql with parameter value: { Environment . NewLine } { realSql } ") ;
44+ _logger . LogDebug ( executionContext . FormatSql ( true ) ) ;
7045 }
7146 }
7247
@@ -96,16 +71,19 @@ private void BuildDbParameters(AbstractRequestContext reqConetxt)
9671 propertyName = parameter . Property ;
9772 typeHandler = parameter . Handler ;
9873 }
74+
9975 if ( ! reqConetxt . Parameters . TryGetValue ( propertyName , out var sqlParameter ) )
10076 {
10177 continue ;
10278 }
79+
10380 var sourceParam = _dbProviderFactory . CreateParameter ( ) ;
10481 sourceParam . ParameterName = paramName ;
10582
10683 if ( typeHandler == null )
10784 {
108- typeHandler = sqlParameter . TypeHandler ?? _typeHandlerFactory . GetTypeHandler ( sqlParameter . ParameterType ) ;
85+ typeHandler = sqlParameter . TypeHandler ??
86+ _typeHandlerFactory . GetTypeHandler ( sqlParameter . ParameterType ) ;
10987 }
11088
11189 typeHandler . SetParameter ( sourceParam , sqlParameter . Value ) ;
@@ -121,18 +99,22 @@ private void InitSourceDbParameter(DbParameter sourceParam, SqlParameter sqlPara
12199 {
122100 sourceParam . DbType = sqlParameter . DbType . Value ;
123101 }
102+
124103 if ( sqlParameter . Direction . HasValue )
125104 {
126105 sourceParam . Direction = sqlParameter . Direction . Value ;
127106 }
107+
128108 if ( sqlParameter . Precision . HasValue )
129109 {
130110 sourceParam . Precision = sqlParameter . Precision . Value ;
131111 }
112+
132113 if ( sqlParameter . Scale . HasValue )
133114 {
134115 sourceParam . Scale = sqlParameter . Scale . Value ;
135116 }
117+
136118 if ( sqlParameter . Size . HasValue )
137119 {
138120 sourceParam . Size = sqlParameter . Size . Value ;
@@ -145,15 +127,18 @@ private void BuildSql(AbstractRequestContext requestContext)
145127 {
146128 return ;
147129 }
130+
148131 requestContext . SqlBuilder = new StringBuilder ( ) ;
149132 requestContext . Statement . BuildSql ( requestContext ) ;
150133 requestContext . RealSql = requestContext . SqlBuilder . ToString ( ) . Trim ( ) ;
151134 }
135+
152136 #endregion
137+
153138 public override async Task InvokeAsync < TResult > ( ExecutionContext executionContext )
154139 {
155140 InitParameters ( executionContext ) ;
156141 await InvokeNextAsync < TResult > ( executionContext ) ;
157142 }
158143 }
159- }
144+ }
0 commit comments