private void InitStatementString(OuterJoinableAssociation rootAssociation, SqlString projection, SqlString condition, SqlString orderBy, SqlString groupBy, SqlString having, LockMode lockMode) { SqlString selectClause = projection; if (selectClause == null) { int joins = CountEntityPersisters(associations); Suffixes = BasicLoader.GenerateSuffixes(joins + 1); var suffix = Suffixes[joins]; selectClause = new SqlString(rootAssociation.GetSelectFragment(suffix, null, null) + SelectString(associations)); } JoinFragment ojf = MergeOuterJoins(associations); SqlSelectBuilder select = new SqlSelectBuilder(Factory) .SetLockMode(lockMode, alias) .SetSelectClause(selectClause) .SetFromClause(Dialect.AppendLockHint(lockMode, persister.FromTableFragment(alias)) + persister.FromJoinFragment(alias, true, true)) .SetWhereClause(condition) .SetOuterJoins(ojf.ToFromFragmentString, ojf.ToWhereFragmentString + WhereFragment) .SetOrderByClause( projection == null ? OrderBy(associations, orderBy) : orderBy) .SetGroupByClause(groupBy) .SetHavingClause(having); if (Factory.Settings.IsCommentsEnabled) { select.SetComment(Comment); } SqlString = select.ToSqlString(); }
/// <summary> /// Generate a select list of columns containing all properties of the entity classes /// </summary> public string SelectString(IList <OuterJoinableAssociation> associations) { if (associations.Count == 0) { return(string.Empty); } else { SqlStringBuilder buf = new SqlStringBuilder(associations.Count * 3); int entityAliasCount = 0; int collectionAliasCount = 0; for (int i = 0; i < associations.Count; i++) { OuterJoinableAssociation join = associations[i]; OuterJoinableAssociation next = (i == associations.Count - 1) ? null : associations[i + 1]; IJoinable joinable = join.Joinable; string entitySuffix = (suffixes == null || entityAliasCount >= suffixes.Length) ? null : suffixes[entityAliasCount]; string collectionSuffix = (collectionSuffixes == null || collectionAliasCount >= collectionSuffixes.Length) ? null : collectionSuffixes[collectionAliasCount]; string selectFragment = join.GetSelectFragment(entitySuffix, collectionSuffix, next); if (!string.IsNullOrWhiteSpace(selectFragment)) { buf.Add(StringHelper.CommaSpace) .Add(selectFragment); } if (joinable.ConsumesEntityAlias() && join.SelectMode != SelectMode.JoinOnly) { entityAliasCount++; } if (joinable.ConsumesCollectionAlias() && join.ShouldFetchCollectionPersister()) { collectionAliasCount++; } } return(buf.ToSqlString().ToString()); } }
protected static string GetSelectFragment(OuterJoinableAssociation join, string entitySuffix, string collectionSuffix, OuterJoinableAssociation next = null) { return(join.GetSelectFragment(entitySuffix, collectionSuffix, next)); }