diff --git a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
index fbe060fbb03..40248155c9a 100644
--- a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
+++ b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElement.cs
@@ -337,9 +337,10 @@ public string RenderIdentifierSelect(int size, int k)
/// the property select SQL fragment.
public string RenderPropertySelect(int size, int k)
{
- return IsAllPropertyFetch
- ? _elementType.RenderPropertySelect(size, k, IsAllPropertyFetch)
- : _elementType.RenderPropertySelect(size, k, _fetchLazyProperties);
+ return _elementType.RenderPropertySelect(
+ size,
+ k,
+ IsAllPropertyFetch || _fetchLazyProperties?.Contains(TableAlias) == true);
}
public override SqlString RenderText(Engine.ISessionFactoryImplementor sessionFactory)
diff --git a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementType.cs b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementType.cs
index d8328bfdbf8..ab2cbe4e955 100644
--- a/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementType.cs
+++ b/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementType.cs
@@ -195,31 +195,17 @@ public virtual string RenderScalarIdentifierSelect(int i)
///
/// The total number of returned types.
/// The sequence of the current returned type.
- ///
+ ///
/// the property select SQL fragment.
- public string RenderPropertySelect(int size, int k, bool allProperties)
- {
- return RenderPropertySelect(size, k, null, allProperties);
- }
-
- public string RenderPropertySelect(int size, int k, string[] fetchLazyProperties)
- {
- return RenderPropertySelect(size, k, fetchLazyProperties, false);
- }
-
- private string RenderPropertySelect(int size, int k, string[] fetchLazyProperties, bool allProperties)
+ public string RenderPropertySelect(int size, int k, bool fetch)
{
CheckInitialized();
var queryable = Queryable;
if (queryable == null)
- return "";
+ return string.Empty;
- // Use the old method when fetchProperties is null to prevent any breaking changes
- // 6.0 TODO: simplify condition by removing the fetchProperties part
- string fragment = fetchLazyProperties == null || allProperties
- ? queryable.PropertySelectFragment(TableAlias, GetSuffix(size, k), allProperties)
- : queryable.PropertySelectFragment(TableAlias, GetSuffix(size, k), fetchLazyProperties);
+ var fragment = queryable.PropertySelectFragment(TableAlias, GetSuffix(size, k), fetch);
return TrimLeadingCommaAndSpaces(fragment);
}
diff --git a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
index 31d85e9c88d..1719a1dbbc3 100644
--- a/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
+++ b/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
@@ -1636,54 +1636,19 @@ public virtual string IdentifierSelectFragment(string name, string suffix)
.ToSqlStringFragment(false);
}
- public string PropertySelectFragment(string name, string suffix, bool allProperties)
+ public string PropertySelectFragment(string name, string suffix, bool fetch)
{
- return PropertySelectFragment(name, suffix, null, allProperties);
- }
-
- public string PropertySelectFragment(string name, string suffix, string[] fetchProperties)
- {
- return PropertySelectFragment(name, suffix, fetchProperties, false);
- }
-
- private string PropertySelectFragment(string name, string suffix, string[] fetchProperties, bool allProperties)
- {
- SelectFragment select = new SelectFragment(Factory.Dialect)
+ var select = new SelectFragment(Factory.Dialect)
.SetSuffix(suffix)
.SetUsedAliases(IdentifierAliases);
int[] columnTableNumbers = SubclassColumnTableNumberClosure;
string[] columnAliases = SubclassColumnAliasClosure;
string[] columns = SubclassColumnClosure;
- HashSet fetchColumnsAndFormulas = null;
- if (fetchProperties != null)
- {
- fetchColumnsAndFormulas = new HashSet();
- foreach (var fetchProperty in fetchProperties)
- {
- var index = GetSubclassPropertyIndex(fetchProperty);
- if (index < 0)
- {
- throw new InvalidOperationException($"Property {fetchProperty} does not exist on entity {EntityName}");
- }
-
- var columnNames = SubclassPropertyColumnNameClosure[index];
- // Formulas will have all null values
- if (columnNames.All(o => o == null))
- {
- columnNames = SubclassPropertyFormulaTemplateClosure[index];
- }
-
- foreach (var columnName in columnNames)
- {
- fetchColumnsAndFormulas.Add(columnName);
- }
- }
- }
for (int i = 0; i < columns.Length; i++)
{
- bool selectable = (allProperties || !subclassColumnLazyClosure[i] || fetchColumnsAndFormulas?.Contains(columns[i]) == true) &&
+ bool selectable = (fetch || !subclassColumnLazyClosure[i]) &&
!IsSubclassTableSequentialSelect(columnTableNumbers[i]) &&
subclassColumnSelectableClosure[i];
if (selectable)
@@ -1698,7 +1663,7 @@ private string PropertySelectFragment(string name, string suffix, string[] fetch
string[] formulaAliases = SubclassFormulaAliasClosure;
for (int i = 0; i < formulaTemplates.Length; i++)
{
- bool selectable = (allProperties || !subclassFormulaLazyClosure[i] || fetchColumnsAndFormulas?.Contains(formulaTemplates[i]) == true) &&
+ bool selectable = (fetch || !subclassFormulaLazyClosure[i]) &&
!IsSubclassTableSequentialSelect(formulaTableNumbers[i]);
if (selectable)
{
diff --git a/src/NHibernate/Persister/Entity/IQueryable.cs b/src/NHibernate/Persister/Entity/IQueryable.cs
index a0fe5934e8d..03cde427534 100644
--- a/src/NHibernate/Persister/Entity/IQueryable.cs
+++ b/src/NHibernate/Persister/Entity/IQueryable.cs
@@ -10,19 +10,6 @@ public enum Declarer
SuperClass
}
- internal static class AbstractEntityPersisterExtensions
- {
- ///
- /// Given a query alias and an identifying suffix, render the property select fragment.
- ///
- //6.0 TODO: Merge into IQueryable
- public static string PropertySelectFragment(this IQueryable query, string alias, string suffix, string[] fetchProperties)
- {
- return ReflectHelper.CastOrThrow(query, "individual lazy property fetches")
- .PropertySelectFragment(alias, suffix, fetchProperties);
- }
- }
-
///
/// Extends the generic ILoadable contract to add operations required by HQL
///