Updates sorting code to support decimals - need to test on MySql

This commit is contained in:
Shannon
2016-04-13 14:49:37 +02:00
parent 82b4b4e668
commit 10bb16316d
4 changed files with 10 additions and 5 deletions

View File

@@ -274,12 +274,14 @@ namespace Umbraco.Core.Persistence.Repositories
var sortedInt = string.Format(SqlSyntax.ConvertIntegerToOrderableString, "dataInt");
var sortedDate = string.Format(SqlSyntax.ConvertDateToOrderableString, "dataDate");
var sortedString = string.Format(SqlSyntax.IsNull, "dataNvarchar", "''");
var sortedDecimal = string.Format(SqlSyntax.ConvertDecimalToOrderableString, "dataInt");
var orderBySql = string.Format(@"ORDER BY (
SELECT CASE
WHEN dataInt Is Not Null THEN {0}
WHEN dataDate Is Not Null THEN {1}
ELSE {2}
WHEN dataInt Is Not Null THEN {0}
WHEN dataDecimal Is Not Null THEN {1}
WHEN dataDate Is Not Null THEN {2}
ELSE {3}
END
FROM cmsContent c
INNER JOIN cmsContentVersion cv ON cv.ContentId = c.nodeId AND VersionDate = (
@@ -290,7 +292,7 @@ namespace Umbraco.Core.Persistence.Repositories
INNER JOIN cmsPropertyData cpd ON cpd.contentNodeId = c.nodeId
AND cpd.versionId = cv.VersionId
INNER JOIN cmsPropertyType cpt ON cpt.Id = cpd.propertytypeId
WHERE c.nodeId = umbracoNode.Id and cpt.Alias = @0)", sortedInt, sortedDate, sortedString);
WHERE c.nodeId = umbracoNode.Id and cpt.Alias = @0)", sortedInt, sortedDecimal, sortedDate, sortedString);
sortedSql.Append(orderBySql, orderBy);
if (orderDirection == Direction.Descending)

View File

@@ -73,6 +73,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax
string IsNull { get; }
string ConvertIntegerToOrderableString { get; }
string ConvertDateToOrderableString { get; }
string ConvertDecimalToOrderableString { get; }
IEnumerable<string> GetTablesInSchema(Database db);
IEnumerable<ColumnInfo> GetColumnsInSchema(Database db);

View File

@@ -363,7 +363,8 @@ ORDER BY TABLE_NAME, INDEX_NAME",
public override string IsNull { get { return "IFNULL({0},{1})"; } }
public override string ConvertIntegerToOrderableString { get { return "LPAD({0}, 8, '0')"; } }
public override string ConvertDateToOrderableString { get { return "DATE_FORMAT({0}, '%Y%m%d')"; } }
public override string ConvertDecimalToOrderableString { get { return "LPAD({0}, 25, '0')"; } }
public override bool? SupportsCaseInsensitiveQueries(Database db)
{
bool? supportsCaseInsensitiveQueries = null;

View File

@@ -540,5 +540,6 @@ namespace Umbraco.Core.Persistence.SqlSyntax
public virtual string IsNull { get { return "ISNULL({0},{1})"; } }
public virtual string ConvertIntegerToOrderableString { get { return "RIGHT('00000000' + CAST({0} AS varchar(8)),8)"; } }
public virtual string ConvertDateToOrderableString { get { return "CONVERT(varchar, {0}, 102)"; } }
public virtual string ConvertDecimalToOrderableString { get { return "RIGHT('0000000000000000000000000' + CAST({0} AS varchar(25)),25)"; } }
}
}