Skip to content

Commit effc1db

Browse files
committed
Simplify handling of null propertyName
1 parent ea0f5ea commit effc1db

11 files changed

+46
-26
lines changed

src/NHibernate/Criterion/AvgProjection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public override SqlString ToSqlString(ICriteria criteria, int loc, ICriteriaQuer
2323
sql.Add("cast(");
2424
if (projection != null)
2525
{
26-
sql.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria));
26+
sql.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(projection, criteriaQuery, criteria));
2727
}
2828
else
2929
{

src/NHibernate/Criterion/CastProjection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public override SqlString ToSqlString(ICriteria criteria, int position, ICriteri
3737
throw new QueryException("invalid Hibernate type for CastProjection");
3838
}
3939
string sqlType = factory.Dialect.GetCastTypeName(sqlTypeCodes[0]);
40-
var val = CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria);
40+
var val = CriterionUtil.GetColumnNameAsSqlStringPart(projection, criteriaQuery, criteria);
4141

4242
return new SqlString("cast( ", val, " as ", sqlType, ") as ", GetColumnAliases(position, criteria, criteriaQuery)[0]);
4343
}

src/NHibernate/Criterion/ConditionalProjection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public override bool IsAggregate
4545
public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery)
4646
{
4747
SqlString condition = criterion.ToSqlString(criteria, criteriaQuery);
48-
var ifTrue = CriterionUtil.GetColumnNameAsSqlStringPart(null, whenTrue, criteriaQuery, criteria);
49-
var ifFalse = CriterionUtil.GetColumnNameAsSqlStringPart(null, whenFalse, criteriaQuery, criteria);
48+
var ifTrue = CriterionUtil.GetColumnNameAsSqlStringPart(whenTrue, criteriaQuery, criteria);
49+
var ifFalse = CriterionUtil.GetColumnNameAsSqlStringPart(whenFalse, criteriaQuery, criteria);
5050
return new SqlString("(case when ", condition, " then ", ifTrue, " else ", ifFalse, " end) as ",
5151
GetColumnAliases(position, criteria, criteriaQuery)[0]);
5252
}

src/NHibernate/Criterion/CountProjection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public override SqlString ToSqlString(ICriteria criteria, int position, ICriteri
3535
}
3636
if (projection != null)
3737
{
38-
buf.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria));
38+
buf.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(projection, criteriaQuery, criteria));
3939
}
4040
else
4141
{

src/NHibernate/Criterion/CriterionUtil.cs

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ internal static object[] GetColumnNamesAsSqlStringParts(string propertyName, IPr
5757
{
5858
if (propertyName != null)
5959
return criteriaQuery.GetColumnsUsingProjection(criteria, propertyName);
60+
61+
return GetColumnNamesAsSqlStringParts(projection, criteriaQuery, criteria);
62+
}
6063

64+
internal static object[] GetColumnNamesAsSqlStringParts(IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
65+
{
6166
if (projection is IPropertyProjection propertyProjection)
6267
{
6368
return criteriaQuery.GetColumnsUsingProjection(criteria, propertyProjection.PropertyName);
@@ -77,15 +82,21 @@ internal static object GetColumnNameAsSqlStringPart(string propertyName, IProjec
7782
return columnNames[0];
7883
}
7984

85+
internal static object GetColumnNameAsSqlStringPart(IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
86+
{
87+
var columnNames = GetColumnNamesAsSqlStringParts(projection, criteriaQuery, criteria);
88+
if (columnNames.Length != 1)
89+
{
90+
throw new QueryException("property or projection does not map to a single column: " + (projection.ToString()));
91+
}
92+
93+
return columnNames[0];
94+
}
95+
8096
private static SqlString[] GetProjectionColumns(IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
8197
{
82-
SqlString sqlString = projection.ToSqlString(criteria,
83-
criteriaQuery.GetIndexForAlias(),
84-
criteriaQuery);
85-
return new SqlString[]
86-
{
87-
SqlStringHelper.RemoveAsAliasesFromSql(sqlString)
88-
};
98+
var sqlString = projection.ToSqlString(criteria, criteriaQuery.GetIndexForAlias(), criteriaQuery);
99+
return new[] {SqlStringHelper.RemoveAsAliasesFromSql(sqlString)};
89100
}
90101

91102
private static SqlString[] GetColumnNamesUsingPropertyName(ICriteriaQuery criteriaQuery, ICriteria criteria, string propertyName)
@@ -149,5 +160,22 @@ public static TypedValue[] GetTypedValues(ICriteriaQuery criteriaQuery, ICriteri
149160
}
150161
return types.ToArray();
151162
}
163+
164+
public static TypedValue GetTypedValue(
165+
ICriteriaQuery criteriaQuery,
166+
ICriteria criteria,
167+
IProjection projection,
168+
string propertyName,
169+
object value)
170+
{
171+
var propertyProjection = projection as IPropertyProjection;
172+
if (projection == null || propertyProjection != null)
173+
{
174+
var pn = propertyProjection != null ? propertyProjection.PropertyName : propertyName;
175+
return criteriaQuery.GetTypedValue(criteria, pn, value);
176+
}
177+
178+
return new TypedValue(NHibernateUtil.GuessType(value), value);
179+
}
152180
}
153181
}

src/NHibernate/Criterion/IdentifierEqExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private void AddValueOrProjection(Parameter[] parameters, int paramIndex, ICrite
6969
}
7070
else
7171
{
72-
result.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, _projection, criteriaQuery, criteria));
72+
result.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(_projection, criteriaQuery, criteria));
7373
}
7474
}
7575

src/NHibernate/Criterion/InsensitiveLikeExpression.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,7 @@ public override TypedValue[] GetTypedValues(ICriteria criteria, ICriteriaQuery c
106106
public TypedValue GetParameterTypedValue(ICriteria criteria, ICriteriaQuery criteriaQuery)
107107
{
108108
var matchValue = value.ToString().ToLower();
109-
if (projection != null)
110-
{
111-
return CriterionUtil.GetTypedValues(criteriaQuery, criteria, projection, null, matchValue).Single();
112-
}
113-
return criteriaQuery.GetTypedValue(criteria, propertyName, matchValue);
109+
return CriterionUtil.GetTypedValue(criteriaQuery, criteria, projection, propertyName, matchValue);
114110
}
115111

116112
public override IProjection[] GetProjections()

src/NHibernate/Criterion/LikeExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public LikeExpression(string propertyName, string value, MatchMode matchMode, ch
5959

6060
public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
6161
{
62-
var columns = CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
62+
var columns = CriterionUtil.GetColumnNamesAsSqlStringParts(projection, criteriaQuery, criteria);
6363
if (columns.Length != 1)
6464
throw new HibernateException("Like may only be used with single-column properties / projections.");
6565

src/NHibernate/Criterion/Order.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private object[] GetColumnsOrAliases(ICriteria criteria, ICriteriaQuery criteria
7575
var propName = propertyName ?? (projection as IPropertyProjection)?.PropertyName;
7676
return propName != null
7777
? criteriaQuery.GetColumnAliasesUsingProjection(criteria, propName)
78-
: CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
78+
: CriterionUtil.GetColumnNamesAsSqlStringParts(projection, criteriaQuery, criteria);
7979
}
8080

8181
private SqlType[] SqlTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)

src/NHibernate/Criterion/SimpleExpression.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,11 +156,7 @@ public override TypedValue[] GetTypedValues(ICriteria criteria, ICriteriaQuery c
156156
public TypedValue GetParameterTypedValue(ICriteria criteria, ICriteriaQuery criteriaQuery)
157157
{
158158
object icvalue = ignoreCase ? value.ToString().ToLower() : value;
159-
if (_projection != null)
160-
{
161-
return CriterionUtil.GetTypedValues(criteriaQuery, criteria, _projection, null, icvalue).Single();
162-
}
163-
return criteriaQuery.GetTypedValue(criteria, propertyName, icvalue);
159+
return CriterionUtil.GetTypedValue(criteriaQuery, criteria, _projection, propertyName, icvalue);
164160
}
165161

166162
public override IProjection[] GetProjections()

src/NHibernate/Criterion/SqlFunctionProjection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private ISQLFunction GetFunction(ICriteriaQuery criteriaQuery)
109109

110110
private static object[] GetProjectionArguments(ICriteriaQuery criteriaQuery, ICriteria criteria, IProjection projection)
111111
{
112-
return CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
112+
return CriterionUtil.GetColumnNamesAsSqlStringParts(projection, criteriaQuery, criteria);
113113
}
114114

115115
public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)

0 commit comments

Comments
 (0)