- sqllinq_src.zip
- sqllinq_src
- AssemblyFileProperties
- File.PropertyProvider
- FileDbProvider.UnitTests
- FileDbProvider
- FileSystemDatabase
- FileSystemDb.sln
- GoldParser.dll
- Kackman.Diagnostics
- Kackman.Factory
- Kackman.Framework.Forms
- Kackman.RuntimeTypeLoader.dll
- LocalTestRun.testrunconfig
- Media.PropertyProvider
- MusicLibrary.vsmdi
- SQL-ANSI-89.4.grm
- SqlLinq
- SynHightlight.dll
- SyntaxHighlightingTextBox.dll
|
using System;
using System.Linq;
using System.Reflection;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
namespace SqlLinq.SyntaxTree.Predicates.Comparison
{
[SyntaxNode(RuleConstants.RULE_PREDEXP_LIKE_STRINGLITERAL)]
public class LikeNode : PredicateNode
{
public LikeNode()
: base(typeof(string), typeof(bool))
{
}
protected override Expression CreateOperatorExpression(ParameterExpression param, Expression left)
{
MethodInfo match = typeof(LikeNode).GetMethod("IsSqlLikeMatch");
Expression pattern = Expression.Constant(GetTerminalText("StringLiteral").Trim('\''));
return Expression.Call(match, left, pattern);
}
public static bool IsSqlLikeMatch(string input, string pattern)
{
/* Turn "off" all regular expression related syntax in
* the pattern string. */
pattern = Regex.Escape(pattern);
/* Replace the SQL LIKE wildcard metacharacters with the
* equivalent regular expression metacharacters. */
pattern = pattern.Replace("%", ".*?").Replace("_", ".");
/* The previous call to Regex.Escape actually turned off
* too many metacharacters, i.e. those which are recognized by
* both the regular expression engine and the SQL LIKE
* statement ([...] and [^...]). Those metacharacters have
* to be manually unescaped here. */
pattern = pattern.Replace(@"\[", "[").Replace(@"\]", "]").Replace(@"\^", "^");
return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
The first computer program I ever wrote was in BASIC on a TRS-80 Model I and it looked something like:
10 PRINT "Don is cool"
20 GOTO 10
It only went downhill from there.
Hey look, I've got a blog