Skip to content

Commit 82c514e

Browse files
committed
Move all RemoveAsAliasesFromSql usages to CriterionUtil class
1 parent 697b6f7 commit 82c514e

18 files changed

+75
-63
lines changed

src/NHibernate/Criterion/AggregateProjection.cs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using NHibernate.SqlCommand;
33
using NHibernate.Engine;
44
using NHibernate.Type;
5-
using NHibernate.Util;
65

76
namespace NHibernate.Criterion
87
{
@@ -49,19 +48,12 @@ public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuer
4948

5049
public override SqlString ToSqlString(ICriteria criteria, int loc, ICriteriaQuery criteriaQuery)
5150
{
52-
if (projection == null)
53-
{
54-
return new SqlString(aggregate, "(", criteriaQuery.GetColumn(criteria, propertyName), ") as y", loc.ToString(), "_");
55-
}
51+
var column = CriterionUtil.GetColumnNameAsSqlStringPart(propertyName, projection, criteriaQuery, criteria);
5652

5753
return new SqlString(
5854
aggregate,
5955
"(",
60-
SqlStringHelper.RemoveAsAliasesFromSql(
61-
projection.ToSqlString(
62-
criteria,
63-
loc,
64-
criteriaQuery)),
56+
column,
6557
") as y",
6658
loc.ToString(),
6759
"_");

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.Add(SqlStringHelper.RemoveAsAliasesFromSql(projection.ToSqlString(criteria, loc, criteriaQuery)));
26+
sql.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria));
2727
}
2828
else
2929
{

src/NHibernate/Criterion/BetweenExpression.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,13 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
5353
var parametersTypes = GetTypedValues(criteria, criteriaQuery).ToArray();
5454
var lowType = parametersTypes[0];
5555
var highType = parametersTypes[1];
56-
SqlString[] columnNames =
57-
CriterionUtil.GetColumnNames(_propertyName, _projection, criteriaQuery, criteria);
56+
var columnNames =
57+
CriterionUtil.GetColumnNamesAsSqlStringParts(_propertyName, _projection, criteriaQuery, criteria);
5858

5959
if (columnNames.Length == 1)
6060
{
6161
sqlBuilder
62-
.Add(columnNames[0])
62+
.AddObject(columnNames[0])
6363
.Add(" between ")
6464
.Add(criteriaQuery.NewQueryParameter(lowType).Single())
6565
.Add(" and ")
@@ -78,7 +78,7 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
7878
}
7979
andNeeded = true;
8080

81-
sqlBuilder.Add(columnNames[i])
81+
sqlBuilder.AddObject(columnNames[i])
8282
.Add(" >= ")
8383
.Add(lowParameters[i]);
8484
}
@@ -87,7 +87,7 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
8787
for (int i = 0; i < columnNames.Length; i++)
8888
{
8989
sqlBuilder.Add(" AND ")
90-
.Add(columnNames[i])
90+
.AddObject(columnNames[i])
9191
.Add(" <= ")
9292
.Add(highParameters[i]);
9393
}

src/NHibernate/Criterion/CastProjection.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +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-
int loc = position*GetHashCode();
41-
SqlString val = projection.ToSqlString(criteria, loc, criteriaQuery);
42-
val = SqlStringHelper.RemoveAsAliasesFromSql(val);
40+
var val = CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria);
4341

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

src/NHibernate/Criterion/ConditionalProjection.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +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-
SqlString ifTrue = whenTrue.ToSqlString(criteria, position + GetHashCode() + 1, criteriaQuery);
49-
ifTrue = SqlStringHelper.RemoveAsAliasesFromSql(ifTrue);
50-
SqlString ifFalse = whenFalse.ToSqlString(criteria, position + GetHashCode() + 2, criteriaQuery);
51-
ifFalse = SqlStringHelper.RemoveAsAliasesFromSql(ifFalse);
48+
var ifTrue = CriterionUtil.GetColumnNameAsSqlStringPart(null, whenTrue, criteriaQuery, criteria);
49+
var ifFalse = CriterionUtil.GetColumnNameAsSqlStringPart(null, whenFalse, criteriaQuery, criteria);
5250
return new SqlString("(case when ", condition, " then ", ifTrue, " else ", ifFalse, " end) as ",
5351
GetColumnAliases(position, criteria, criteriaQuery)[0]);
5452
}

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.Add(SqlStringHelper.RemoveAsAliasesFromSql(projection.ToSqlString(criteria, position, criteriaQuery)));
38+
buf.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, projection, criteriaQuery, criteria));
3939
}
4040
else
4141
{

src/NHibernate/Criterion/CriterionUtil.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ namespace NHibernate.Criterion
55
using Engine;
66
using SqlCommand;
77
using Type;
8-
using Util;
98

109
public static class CriterionUtil
1110
{
@@ -51,7 +50,36 @@ internal static SqlString[] GetColumnNamesUsingProjection(IProjection projection
5150
return GetColumnNamesUsingPropertyName(criteriaQuery, criteria, propertyProjection.PropertyName);
5251
}
5352

54-
SqlString sqlString = projection.ToSqlString(criteria,
53+
return GetProjectionColumns(projection, criteriaQuery, criteria);
54+
}
55+
56+
internal static object[] GetColumnNamesAsSqlStringParts(string propertyName, IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
57+
{
58+
if (propertyName != null)
59+
return criteriaQuery.GetColumnsUsingProjection(criteria, propertyName);
60+
61+
if (projection is IPropertyProjection propertyProjection)
62+
{
63+
return criteriaQuery.GetColumnsUsingProjection(criteria, propertyProjection.PropertyName);
64+
}
65+
66+
return GetProjectionColumns(projection, criteriaQuery, criteria);
67+
}
68+
69+
internal static object GetColumnNameAsSqlStringPart(string propertyName, IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
70+
{
71+
var columnNames = GetColumnNamesAsSqlStringParts(propertyName, projection, criteriaQuery, criteria);
72+
if (columnNames.Length != 1)
73+
{
74+
throw new QueryException("property or projection does not map to a single column: " + (propertyName ?? projection.ToString()));
75+
}
76+
77+
return columnNames[0];
78+
}
79+
80+
private static SqlString[] GetProjectionColumns(IProjection projection, ICriteriaQuery criteriaQuery, ICriteria criteria)
81+
{
82+
SqlString sqlString = projection.ToSqlString(criteria,
5583
criteriaQuery.GetIndexForAlias(),
5684
criteriaQuery);
5785
return new SqlString[]

src/NHibernate/Criterion/GroupedProjection.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ namespace NHibernate.Criterion
99
public class GroupedProjection : IProjection
1010
{
1111
private readonly IProjection projection;
12-
private SqlString renderedProjection;
1312

1413
public GroupedProjection(IProjection projection)
1514
{
@@ -18,13 +17,12 @@ public GroupedProjection(IProjection projection)
1817

1918
public virtual SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery)
2019
{
21-
return renderedProjection = projection.ToSqlString(criteria, position, criteriaQuery);
20+
return projection.ToSqlString(criteria, position, criteriaQuery);
2221
}
2322

2423
public virtual SqlString ToGroupSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
2524
{
26-
//This is kind of a hack. The hack is based on the fact that ToGroupSqlString always called after ToSqlString.
27-
return SqlStringHelper.RemoveAsAliasesFromSql(renderedProjection);
25+
return SqlStringHelper.Join(new SqlString(","), CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria));
2826
}
2927

3028
public virtual IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery)

src/NHibernate/Criterion/IdentifierEqExpression.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ private void AddValueOrProjection(Parameter[] parameters, int paramIndex, ICrite
6969
}
7070
else
7171
{
72-
SqlString sql = _projection.ToSqlString(criteria, GetHashCode(), criteriaQuery);
73-
result.Add(SqlStringHelper.RemoveAsAliasesFromSql(sql));
72+
result.AddObject(CriterionUtil.GetColumnNameAsSqlStringPart(null, _projection, criteriaQuery, criteria));
7473
}
7574
}
7675

src/NHibernate/Criterion/InExpression.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,22 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
6464

6565
//TODO: add default capacity
6666
SqlStringBuilder result = new SqlStringBuilder();
67-
SqlString[] columnNames =
68-
CriterionUtil.GetColumnNames(_propertyName, _projection, criteriaQuery, criteria);
67+
var columnNames =
68+
CriterionUtil.GetColumnNamesAsSqlStringParts(_propertyName, _projection, criteriaQuery, criteria);
6969

7070
// Generate SqlString of the form:
7171
// columnName1 in (values) and columnName2 in (values) and ...
7272
Parameter[] parameters = GetParameterTypedValues(criteria, criteriaQuery).SelectMany(t => criteriaQuery.NewQueryParameter(t)).ToArray();
7373

7474
for (int columnIndex = 0; columnIndex < columnNames.Length; columnIndex++)
7575
{
76-
SqlString columnName = columnNames[columnIndex];
77-
7876
if (columnIndex > 0)
7977
{
8078
result.Add(" and ");
8179
}
8280

8381
result
84-
.Add(columnName)
82+
.AddObject(columnNames[columnIndex])
8583
.Add(" in (");
8684

8785
for (int i = 0; i < _values.Length; i++)

src/NHibernate/Criterion/InsensitiveLikeExpression.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
6363
{
6464
//TODO: add default capacity
6565
SqlStringBuilder sqlBuilder = new SqlStringBuilder();
66-
SqlString[] columnNames =
67-
CriterionUtil.GetColumnNames(propertyName, projection, criteriaQuery, criteria);
66+
var columnNames =
67+
CriterionUtil.GetColumnNamesAsSqlStringParts(propertyName, projection, criteriaQuery, criteria);
6868

6969
if (columnNames.Length != 1)
7070
{
@@ -73,14 +73,14 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
7373

7474
if (criteriaQuery.Factory.Dialect is PostgreSQLDialect)
7575
{
76-
sqlBuilder.Add(columnNames[0]);
76+
sqlBuilder.AddObject(columnNames[0]);
7777
sqlBuilder.Add(" ilike ");
7878
}
7979
else
8080
{
8181
sqlBuilder.Add(criteriaQuery.Factory.Dialect.LowercaseFunction)
8282
.Add("(")
83-
.Add(columnNames[0])
83+
.AddObject(columnNames[0])
8484
.Add(")")
8585
.Add(" like ");
8686
}
@@ -127,4 +127,4 @@ public override string ToString()
127127
return (projection ?? (object)propertyName) + " ilike " + value;
128128
}
129129
}
130-
}
130+
}

src/NHibernate/Criterion/LikeExpression.cs

Lines changed: 3 additions & 3 deletions
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-
SqlString[] columns = CriterionUtil.GetColumnNamesUsingProjection(projection, criteriaQuery, criteria);
62+
var columns = CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
6363
if (columns.Length != 1)
6464
throw new HibernateException("Like may only be used with single-column properties / projections.");
6565

@@ -70,11 +70,11 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
7070
Dialect.Dialect dialect = criteriaQuery.Factory.Dialect;
7171
lhs.Add(dialect.LowercaseFunction)
7272
.Add(StringHelper.OpenParen)
73-
.Add(columns[0])
73+
.AddObject(columns[0])
7474
.Add(StringHelper.ClosedParen);
7575
}
7676
else
77-
lhs.Add(columns[0]);
77+
lhs.AddObject(columns[0]);
7878

7979
if (ignoreCase)
8080
{

src/NHibernate/Criterion/NotNullExpression.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
3939
//TODO: add default capacity
4040
SqlStringBuilder sqlBuilder = new SqlStringBuilder();
4141

42-
SqlString[] columnNames =
43-
CriterionUtil.GetColumnNames(_propertyName, _projection, criteriaQuery, criteria);
42+
var columnNames =
43+
CriterionUtil.GetColumnNamesAsSqlStringParts(_propertyName, _projection, criteriaQuery, criteria);
4444

4545
bool opNeeded = false;
4646

@@ -52,7 +52,7 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
5252
}
5353
opNeeded = true;
5454

55-
sqlBuilder.Add(columnNames[i])
55+
sqlBuilder.AddObject(columnNames[i])
5656
.Add(" is not null");
5757
}
5858

src/NHibernate/Criterion/NullExpression.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
3838
//TODO: add default capacity
3939
SqlStringBuilder sqlBuilder = new SqlStringBuilder();
4040

41-
SqlString[] columnNames =
42-
CriterionUtil.GetColumnNames(_propertyName, _projection, criteriaQuery, criteria);
41+
var columnNames =
42+
CriterionUtil.GetColumnNamesAsSqlStringParts(_propertyName, _projection, criteriaQuery, criteria);
4343

4444
for (int i = 0; i < columnNames.Length; i++)
4545
{
@@ -48,7 +48,7 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
4848
sqlBuilder.Add(" and ");
4949
}
5050

51-
sqlBuilder.Add(columnNames[i])
51+
sqlBuilder.AddObject(columnNames[i])
5252
.Add(" is null");
5353
}
5454

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-
: (object[]) CriterionUtil.GetColumnNamesUsingProjection(projection, criteriaQuery, criteria);
78+
: CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
7979
}
8080

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

src/NHibernate/Criterion/PropertyExpression.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,25 @@ protected PropertyExpression(string lhsPropertyName, IProjection rhsProjection)
7070

7171
public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
7272
{
73-
SqlString[] columnNames =
74-
CriterionUtil.GetColumnNames(_lhsPropertyName, _lhsProjection, criteriaQuery, criteria);
75-
SqlString[] otherColumnNames =
76-
CriterionUtil.GetColumnNames(_rhsPropertyName, _rhsProjection, criteriaQuery, criteria);
73+
var columnNames =
74+
CriterionUtil.GetColumnNamesAsSqlStringParts(_lhsPropertyName, _lhsProjection, criteriaQuery, criteria);
75+
var otherColumnNames =
76+
CriterionUtil.GetColumnNamesAsSqlStringParts(_rhsPropertyName, _rhsProjection, criteriaQuery, criteria);
7777

7878
SqlStringBuilder sb = new SqlStringBuilder();
7979
if (columnNames.Length > 1)
8080
{
8181
sb.Add(StringHelper.OpenParen);
8282
}
8383
bool first = true;
84-
foreach (SqlString sqlString in SqlStringHelper.Add(columnNames, Op, otherColumnNames))
84+
for (var i = 0; i < columnNames.Length; i++)
8585
{
8686
if (first == false)
8787
{
8888
sb.Add(" and ");
8989
}
9090
first = false;
91-
sb.Add(sqlString);
91+
sb.AddObject(columnNames[i]).Add(Op).AddObject(otherColumnNames[i]);
9292
}
9393

9494
if (columnNames.Length > 1)

src/NHibernate/Criterion/SqlFunctionProjection.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public override SqlString ToSqlString(ICriteria criteria, int position, ICriteri
8282
var arguments = new List<object>();
8383
for (int i = 0; i < args.Length; i++)
8484
{
85-
SqlString projectArg = GetProjectionArgument(criteriaQuery, criteria, args[i], 0); // The loc parameter is unused.
86-
arguments.Add(projectArg);
85+
var projectArg = GetProjectionArguments(criteriaQuery, criteria, args[i]);
86+
arguments.AddRange(projectArg);
8787
}
8888

8989
return new SqlString(
@@ -107,10 +107,9 @@ private ISQLFunction GetFunction(ICriteriaQuery criteriaQuery)
107107
return dialectFunction;
108108
}
109109

110-
private static SqlString GetProjectionArgument(ICriteriaQuery criteriaQuery, ICriteria criteria, IProjection projection, int loc)
110+
private static object[] GetProjectionArguments(ICriteriaQuery criteriaQuery, ICriteria criteria, IProjection projection)
111111
{
112-
SqlString sql = projection.ToSqlString(criteria, loc, criteriaQuery);
113-
return SqlStringHelper.RemoveAsAliasesFromSql(sql);
112+
return CriterionUtil.GetColumnNamesAsSqlStringParts(null, projection, criteriaQuery, criteria);
114113
}
115114

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

src/NHibernate/SqlCommand/SqlStringHelper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public static SqlString[] Add(SqlString[] x, string sep, SqlString[] y)
4040
return result;
4141
}
4242

43+
44+
//Consider using CriterionUtil.GetColumn... methods instead
4345
public static SqlString RemoveAsAliasesFromSql(SqlString sql)
4446
{
4547
int index = sql.LastIndexOfCaseInsensitive(" as ");

0 commit comments

Comments
 (0)