@@ -206,36 +206,24 @@ static Regex[] GetRegSqlWhereDateTimes(string columnName, string quoteParameterN
206206 {
207207 return _dicRegSqlWhereDateTimes . GetOrAdd ( $ "{ columnName } ,{ quoteParameterName } ", cn =>
208208 {
209- cn = columnName . Replace ( "[" , "\\ [" ) . Replace ( "]" , "\\ ]" ) . Replace ( "." , "\\ ." ) ;
209+ cn = columnName . Replace ( "[" , "\\ [" ) . Replace ( "]" , "\\ ]" ) . Replace ( "." , "\\ ." ) . Replace ( "?" , "\\ ?" ) ;
210+ var qpn = quoteParameterName . Replace ( "[" , "\\ [" ) . Replace ( "]" , "\\ ]" ) . Replace ( "." , "\\ ." ) . Replace ( "?" , "\\ ?" ) ;
210211 return new [ ]
211212 {
212- //new Regex($@"({cn}\s*(<|<=|>|>=|=|between)\s*)(datetime|cdate|to_date)\(('[^']+')\)", RegexOptions.IgnoreCase),
213- //new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))to_timestamp\(('[^']+')\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
214- //new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))cast\(('[^']+') as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
215- //new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))('[^']+')::(datetime|timestamp)", RegexOptions.IgnoreCase),
216- //new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and\s+)(datetime|cdate|to_date)\(('[^']+')\)", RegexOptions.IgnoreCase),
217- //new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))to_timestamp\(('[^']+')\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
218- //new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))cast\(('[^']+') as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
219- //new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))('[^']+')::(datetime|timestamp)", RegexOptions.IgnoreCase),
220-
221- new Regex ( $@ "({ cn } \s*(<|<=|>|>=|=)\s*)(datetime|cdate|to_date)\(({ quoteParameterName } [\w_]+)\)", RegexOptions . IgnoreCase ) ,
222- new Regex ( $@ "({ cn } \s*(<|<=|>|>=|=)(\s*))to_timestamp\(({ quoteParameterName } [\w_]+)\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions . IgnoreCase ) ,
223- new Regex ( $@ "({ cn } \s*(<|<=|>|>=|=)(\s*))cast\(({ quoteParameterName } [^w_]+) as (datetime|timestamp)\)", RegexOptions . IgnoreCase ) ,
224- new Regex ( $@ "({ cn } \s*(<|<=|>|>=|=)(\s*))({ quoteParameterName } [^w_]+)::(datetime|timestamp)", RegexOptions . IgnoreCase ) ,
225- new Regex ( $@ "({ cn } \s*(between)\s+{ quoteParameterName } [\w_]+\s+and\s+)(datetime|cdate|to_date)\(({ quoteParameterName } [\w_]+)\)", RegexOptions . IgnoreCase ) ,
226- new Regex ( $@ "({ cn } \s*(between)\s+{ quoteParameterName } [\w_]+\s+and(\s+))to_timestamp\(({ quoteParameterName } [\w_]+)\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions . IgnoreCase ) ,
227- new Regex ( $@ "({ cn } \s*(between)\s+{ quoteParameterName } [\w_]+\s+and(\s+))cast\(({ quoteParameterName } [^w_]+) as (datetime|timestamp)\)", RegexOptions . IgnoreCase ) ,
228- new Regex ( $@ "({ cn } \s*(between)\s+{ quoteParameterName } [\w_]+\s+and(\s+))({ quoteParameterName } [^w_]+)::(datetime|timestamp)", RegexOptions . IgnoreCase ) ,
229-
213+ new Regex ( $@ "(\s*)(datetime|cdate|to_date)(\s*)\(\s*({ qpn } [\w_]+)\s*\)", RegexOptions . IgnoreCase ) ,
214+ new Regex ( $@ "(\s*)(to_timestamp)(\s*)\(\s*({ qpn } [\w_]+)\s*,\s*{ qpn } [\w_]+\s*\)", RegexOptions . IgnoreCase ) ,
215+ new Regex ( $@ "(\s*)(cast)(\s*)\(\s*({ qpn } [^w_]+)\s+as\s+(datetime|timestamp)\s*\)", RegexOptions . IgnoreCase ) ,
216+ new Regex ( $@ "({ qpn } [^w_]+)(\s*)(::)(\s*)(datetime|timestamp)", RegexOptions . IgnoreCase ) ,
217+ new Regex ( $@ "(\s*)(timestamp)(\s*)({ qpn } [\w_]+)", RegexOptions . IgnoreCase ) , //firebird
230218
231219 new Regex ( $@ "{ cn } \s*between\s*'([^']+)'\s*and\s*'([^']+)'", RegexOptions . IgnoreCase ) , //预留暂时不用
232- new Regex ( $@ "{ cn } \s*between\s*{ quoteParameterName } ([\w_]+)\s*and\s*{ quoteParameterName } ([\w_]+)", RegexOptions . IgnoreCase ) ,
220+ new Regex ( $@ "{ cn } \s*between\s*{ qpn } ([\w_]+)\s*and\s*{ qpn } ([\w_]+)", RegexOptions . IgnoreCase ) ,
233221
234222 new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*'([^']+)'\s*and\s*{ cn } \s*(<|<=|>|>=)\s*'([^']+)'", RegexOptions . IgnoreCase ) , //预留暂时不用
235- new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*{ quoteParameterName } ([\w_]+)\s*and\s*{ cn } \s*(<|<=|>|>=)\s*{ quoteParameterName } ([\w_]+)", RegexOptions . IgnoreCase ) ,
223+ new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*{ qpn } ([\w_]+)\s*and\s*{ cn } \s*(<|<=|>|>=)\s*{ qpn } ([\w_]+)", RegexOptions . IgnoreCase ) ,
236224
237225 new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*'([^']+)'", RegexOptions . IgnoreCase ) , //预留暂时不用
238- new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*{ quoteParameterName } ([\w_]+)", RegexOptions . IgnoreCase ) ,
226+ new Regex ( $@ "{ cn } \s*(<|<=|>|>=)\s*{ qpn } ([\w_]+)", RegexOptions . IgnoreCase ) ,
239227 } ;
240228 } ) ;
241229 }
@@ -265,32 +253,32 @@ public string[] GetTableNamesBySqlWhere(string sqlWhere, List<DbParameter> dbPar
265253 //var tsqlWhere = Utils.ParseSqlWhereLevel1(sqlWhere);
266254
267255 var regs = GetRegSqlWhereDateTimes ( $ "{ ( string . IsNullOrWhiteSpace ( tb . Alias ) ? "" : $ "{ tb . Alias } .") } { commonUtils . QuoteSqlName ( tb . Table . AsTableColumn . Attribute . Name ) } ", quoteParameterName ) ;
268- for ( var a = 0 ; a < 8 ; a ++ ) newSqlWhere = regs [ a ] . Replace ( newSqlWhere , "$1$4" ) ;
256+ for ( var a = 0 ; a < 5 ; a ++ ) newSqlWhere = regs [ a ] . Replace ( newSqlWhere , "$1$4" ) ;
269257
270- //var m = regs[8 ].Match(newSqlWhere);
258+ //var m = regs[5 ].Match(newSqlWhere);
271259 //if (m.Success) return GetTableNamesByColumnValueRange(m.Groups[1].Value, m.Groups[2].Value);
272- //m = m = regs[10 ].Match(newSqlWhere);
260+ //m = m = regs[7 ].Match(newSqlWhere);
273261 //if (m.Success) return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(m.Groups[2].Value), ParseColumnValue(m.Groups[4].Value));
274- //m = regs[12 ].Match(newSqlWhere);
262+ //m = regs[9 ].Match(newSqlWhere);
275263 //if (m.Success) return LocalGetTables2(m.Groups[1].Value, ParseColumnValue(m.Groups[2].Value));
276264
277- var m = regs [ 9 ] . Match ( newSqlWhere ) ;
265+ var m = regs [ 6 ] . Match ( newSqlWhere ) ;
278266 if ( m . Success )
279267 {
280268 var val1 = LocalGetParamValue ( m . Groups [ 1 ] . Value ) ;
281269 var val2 = LocalGetParamValue ( m . Groups [ 2 ] . Value ) ;
282270 if ( val1 == null || val2 == null ) throw new Exception ( $ "未能解析分表字段值 { sqlWhere } ") ;
283271 return GetTableNamesByColumnValueRange ( val1 , val2 ) ;
284272 }
285- m = regs [ 11 ] . Match ( newSqlWhere ) ;
273+ m = regs [ 8 ] . Match ( newSqlWhere ) ;
286274 if ( m . Success )
287275 {
288276 var val1 = LocalGetParamValue ( m . Groups [ 2 ] . Value ) ;
289277 var val2 = LocalGetParamValue ( m . Groups [ 4 ] . Value ) ;
290278 if ( val1 == null || val2 == null ) throw new Exception ( $ "未能解析分表字段值 { sqlWhere } ") ;
291279 return LocalGetTables ( m . Groups [ 1 ] . Value , m . Groups [ 3 ] . Value , ParseColumnValue ( val1 ) , ParseColumnValue ( val2 ) ) ;
292280 }
293- m = regs [ 13 ] . Match ( newSqlWhere ) ;
281+ m = regs [ 10 ] . Match ( newSqlWhere ) ;
294282 if ( m . Success )
295283 {
296284 var val1 = LocalGetParamValue ( m . Groups [ 2 ] . Value ) ;
0 commit comments