diff --git a/src/Umbraco.Core/Persistence/Querying/QueryHelper.cs b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs
similarity index 63%
rename from src/Umbraco.Core/Persistence/Querying/QueryHelper.cs
rename to src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs
index f69e106f57..70d89d7940 100644
--- a/src/Umbraco.Core/Persistence/Querying/QueryHelper.cs
+++ b/src/Umbraco.Core/Persistence/Querying/BaseExpressionHelper.cs
@@ -6,9 +6,9 @@ namespace Umbraco.Core.Persistence.Querying
///
/// Logic that is shared with the expression helpers
///
- internal class QueryHelper
+ internal class BaseExpressionHelper
{
- public static string GetQuotedValue(object value, Type fieldType, Func escapeCallback = null, Func shouldQuoteCallback = null)
+ public virtual string GetQuotedValue(object value, Type fieldType, Func escapeCallback = null, Func shouldQuoteCallback = null)
{
if (value == null) return "NULL";
@@ -57,14 +57,45 @@ namespace Umbraco.Core.Persistence.Querying
: value.ToString();
}
- public static string EscapeParam(object paramValue)
+ public virtual string EscapeParam(object paramValue)
{
return paramValue.ToString().Replace("'", "''");
}
- public static bool ShouldQuoteValue(Type fieldType)
+ public virtual string EscapeAtArgument(string exp)
+ {
+ if (exp.StartsWith("@"))
+ return string.Concat("@", exp);
+
+ return exp;
+ }
+
+ public virtual bool ShouldQuoteValue(Type fieldType)
{
return true;
}
+
+ protected virtual string RemoveQuote(string exp)
+ {
+ if (exp.StartsWith("'") && exp.EndsWith("'"))
+ {
+ exp = exp.Remove(0, 1);
+ exp = exp.Remove(exp.Length - 1, 1);
+ }
+ return exp;
+ }
+
+ protected virtual string RemoveQuoteFromAlias(string exp)
+ {
+
+ if ((exp.StartsWith("\"") || exp.StartsWith("`") || exp.StartsWith("'"))
+ &&
+ (exp.EndsWith("\"") || exp.EndsWith("`") || exp.EndsWith("'")))
+ {
+ exp = exp.Remove(0, 1);
+ exp = exp.Remove(exp.Length - 1, 1);
+ }
+ return exp;
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs
index 559b978721..3042510b05 100644
--- a/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs
+++ b/src/Umbraco.Core/Persistence/Querying/ModelToSqlExpressionHelper.cs
@@ -8,7 +8,7 @@ using Umbraco.Core.Persistence.Mappers;
namespace Umbraco.Core.Persistence.Querying
{
- internal class ModelToSqlExpressionHelper
+ internal class ModelToSqlExpressionHelper : BaseExpressionHelper
{
private string sep = " ";
private BaseMapper _mapper;
@@ -246,7 +246,7 @@ namespace Umbraco.Core.Persistence.Querying
case "ToLower":
return string.Format("lower({0})", r);
case "StartsWith":
- return string.Format("upper({0}) like '{1}%'", r, RemoveQuote(args[0].ToString().ToUpper()));
+ return string.Format("upper({0}) like '{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString().ToUpper())));
case "EndsWith":
return string.Format("upper({0}) like '%{1}'", r, RemoveQuote(args[0].ToString()).ToUpper());
case "Contains":
@@ -435,41 +435,7 @@ namespace Umbraco.Core.Persistence.Querying
public virtual string GetQuotedValue(object value, Type fieldType)
{
- return QueryHelper.GetQuotedValue(value, fieldType, EscapeParam, ShouldQuoteValue);
- }
-
- public virtual string EscapeParam(object paramValue)
- {
- return paramValue.ToString().Replace("'", "''");
- }
-
- public virtual bool ShouldQuoteValue(Type fieldType)
- {
- return true;
- }
-
- protected string RemoveQuote(string exp)
- {
-
- if (exp.StartsWith("'") && exp.EndsWith("'"))
- {
- exp = exp.Remove(0, 1);
- exp = exp.Remove(exp.Length - 1, 1);
- }
- return exp;
- }
-
- protected string RemoveQuoteFromAlias(string exp)
- {
-
- if ((exp.StartsWith("\"") || exp.StartsWith("`") || exp.StartsWith("'"))
- &&
- (exp.EndsWith("\"") || exp.EndsWith("`") || exp.EndsWith("'")))
- {
- exp = exp.Remove(0, 1);
- exp = exp.Remove(exp.Length - 1, 1);
- }
- return exp;
+ return GetQuotedValue(value, fieldType, EscapeParam, ShouldQuoteValue);
}
private string GetTrueExpression()
diff --git a/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs b/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs
index f84933b3e7..41057ed6c5 100644
--- a/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs
+++ b/src/Umbraco.Core/Persistence/Querying/PocoToSqlExpressionHelper.cs
@@ -8,7 +8,7 @@ using Umbraco.Core.Persistence.SqlSyntax;
namespace Umbraco.Core.Persistence.Querying
{
- internal class PocoToSqlExpressionHelper
+ internal class PocoToSqlExpressionHelper : BaseExpressionHelper
{
private string sep = " ";
private Database.PocoData pd;
@@ -250,7 +250,7 @@ namespace Umbraco.Core.Persistence.Querying
case "ToLower":
return string.Format("lower({0})", r);
case "StartsWith":
- return string.Format("upper({0}) like '{1}%'", r, RemoveQuote(args[0].ToString().ToUpper()));
+ return string.Format("upper({0}) like '{1}%'", r, EscapeAtArgument(RemoveQuote(args[0].ToString().ToUpper())));
case "EndsWith":
return string.Format("upper({0}) like '%{1}'", r, RemoveQuote(args[0].ToString()).ToUpper());
case "Contains":
@@ -439,17 +439,7 @@ namespace Umbraco.Core.Persistence.Querying
public virtual string GetQuotedValue(object value, Type fieldType)
{
- return QueryHelper.GetQuotedValue(value, fieldType, EscapeParam, ShouldQuoteValue);
- }
-
- public virtual string EscapeParam(object paramValue)
- {
- return paramValue.ToString().Replace("'", "''");
- }
-
- public virtual bool ShouldQuoteValue(Type fieldType)
- {
- return true;
+ return GetQuotedValue(value, fieldType, EscapeParam, ShouldQuoteValue);
}
protected virtual string GetFieldName(Database.PocoData pocoData, string name)
@@ -460,30 +450,6 @@ namespace Umbraco.Core.Persistence.Querying
SqlSyntaxContext.SqlSyntaxProvider.GetQuotedColumnName(column.Value.ColumnName));
}
- protected string RemoveQuote(string exp)
- {
-
- if (exp.StartsWith("'") && exp.EndsWith("'"))
- {
- exp = exp.Remove(0, 1);
- exp = exp.Remove(exp.Length - 1, 1);
- }
- return exp;
- }
-
- protected string RemoveQuoteFromAlias(string exp)
- {
-
- if ((exp.StartsWith("\"") || exp.StartsWith("`") || exp.StartsWith("'"))
- &&
- (exp.EndsWith("\"") || exp.EndsWith("`") || exp.EndsWith("'")))
- {
- exp = exp.Remove(0, 1);
- exp = exp.Remove(exp.Length - 1, 1);
- }
- return exp;
- }
-
private string GetTrueExpression()
{
object o = GetQuotedTrueValue();
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 9c37a3dd48..405cf23025 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -459,11 +459,11 @@
+
-