private EntityJoinFromElement CreateEntityJoin( IQueryable entityPersister, IASTNode aliasNode, int joinType, IASTNode with) { if (log.IsDebugEnabled()) { log.Debug($"Creating entity-join FromElement [{aliasNode?.Text} -> {entityPersister.Name}]"); } EntityJoinFromElement join = new EntityJoinFromElement( CurrentFromClause, entityPersister, JoinProcessor.ToHibernateJoinType(joinType), aliasNode?.Text ); if (with != null) { HandleWithFragment(join, with); } return(join); }
private void PrepareGroupFetchingProcessSimple(FilterInterpritationResult filterCriteriaProcessingResult, SortInfoInterpritationResult groupSortInfoProcessingResult, PropertiesCollectionProcessingResult groupPropertiesProcessingResult, SummaryInterpritationResult groupSummaryProcessingResult) { var groupQueryJOINSection = JoinProcessor.PrepareSimpleJoinSection( filterCriteriaProcessingResult.UsedJOINS, groupSortInfoProcessingResult.UsedJOINS, groupPropertiesProcessingResult.UsedJOINS, groupSummaryProcessingResult.UsedJOINS ); var queryWHERESection = filterCriteriaProcessingResult.ResultString.IsNotEmpty() ? "WHERE " + filterCriteriaProcessingResult.ResultString : string.Empty; var groupQueryORDERBYSection = groupSortInfoProcessingResult.ResultString.IsNotEmpty() ? "ORDER BY " + groupSortInfoProcessingResult.ResultString : string.Empty; SetGROUPQueryInfo( FillTemplatePlaceholders( ("SELECT [PROPERTIES], [SUMMARIES] FROM [SOURCETYPE] [BASEALIAS] " + "[QUERY JOIN SECTION]" + "[QUERY WHERE SECTION]" + "GROUP BY [PROPERTIES] " + "[QUERY ORDERBY SECTION]") .Replace("[QUERY JOIN SECTION]", groupQueryJOINSection.Add(" ")) .Replace("[QUERY WHERE SECTION]", queryWHERESection.Add(" ")) .Replace("[QUERY ORDERBY SECTION]", groupQueryORDERBYSection.Add(" ")) .Replace("[PROPERTIES]", groupPropertiesProcessingResult.ResultString) .Replace("[SUMMARIES]", groupSummaryProcessingResult.ResultString) ), string.Empty, groupPropertiesProcessingResult.PropertyExpressions, groupSummaryProcessingResult.SummaryDescriptors ); }
private void PostProcessDML(IRestrictableStatement statement) { statement.FromClause.Resolve(); var fromElement = statement.FromClause.GetFromElementsTyped()[0]; IQueryable persister = fromElement.Queryable; // Make #@%$^#^&# sure no alias is applied to the table name fromElement.Text = persister.TableName; // Use the same logic as query does in order to support session filters var joinProcessor = new JoinProcessor(this); joinProcessor.ProcessJoins(statement); }
void SetImpliedJoinType(int joinType) { _impliedJoinType = JoinProcessor.ToHibernateJoinType(joinType); }
void ProcessQuery(IASTNode select, IASTNode query) { if (log.IsDebugEnabled()) { log.Debug("processQuery() : {0}", query.ToStringTree()); } try { QueryNode qn = ( QueryNode )query; // Was there an explicit select expression? bool explicitSelect = select != null && select.ChildCount > 0; if (!explicitSelect) { // No explicit select expression; render the id and properties // projection lists for every persister in the from clause into // a single 'token node'. //TODO: the only reason we need this stuff now is collection filters, // we should get rid of derived select clause completely! CreateSelectClauseFromFromClause(qn); } else { // Use the explicitly declared select expression; determine the // return types indicated by each select token UseSelectClause(select); } // After that, process the JOINs. // Invoke a delegate to do the work, as this is farily complex. JoinProcessor joinProcessor = new JoinProcessor(this); joinProcessor.ProcessJoins(qn); // Attach any mapping-defined "ORDER BY" fragments foreach (FromElement fromElement in qn.FromClause.GetProjectionList()) { if (fromElement.IsFetch && fromElement.QueryableCollection != null) { // Does the collection referenced by this FromElement // specify an order-by attribute? If so, attach it to // the query's order-by if (fromElement.QueryableCollection.HasOrdering) { string orderByFragment = fromElement .QueryableCollection .GetSQLOrderByString(fromElement.TableAlias); qn.GetOrderByClause().AddOrderFragment(orderByFragment); } if (fromElement.QueryableCollection.HasManyToManyOrdering) { string orderByFragment = fromElement.QueryableCollection .GetManyToManyOrderByString(fromElement.TableAlias); qn.GetOrderByClause().AddOrderFragment(orderByFragment); } } } } finally { PopFromClause(); } }
protected override void PrepareForFetchingProcess() { var filterCriteriaProcessingResult = JoinProcessor.Process(FilterCriteriaProcessor.Process(FilterCriteria)); var baseSortInfoProcessingResult = JoinProcessor.Process(SortInfoProcessor.Process(SortInfo)); var selectQueryJOINSection = JoinProcessor.PrepareJoinSection(filterCriteriaProcessingResult.UsedJOINS, baseSortInfoProcessingResult.UsedJOINS); var queryWHERESection = filterCriteriaProcessingResult.ResultString.IsNotEmpty() ? "WHERE " + filterCriteriaProcessingResult.ResultString : string.Empty; var queryORDERBYSection = baseSortInfoProcessingResult.ResultString.IsNotEmpty() ? "ORDER BY " + baseSortInfoProcessingResult.ResultString : string.Empty; var queryPARAMETERS = filterCriteriaProcessingResult.Parameters; SetSELECTQuery( FillTemplatePlaceholders( ("SELECT [BASEALIAS] FROM [SOURCETYPE] [BASEALIAS] " + "[QUERY JOIN SECTION]" + "[QUERY WHERE SECTION]" + "[QUERY ORDERBY SECTION]") .Replace("[QUERY JOIN SECTION]", selectQueryJOINSection.Add(" ")) .Replace("[QUERY WHERE SECTION]", queryWHERESection.Add(" ")) .Replace("[QUERY ORDERBY SECTION]", queryORDERBYSection.Add(" ")) ) ); if (GroupCount > 0) { var groupSortInfo = SortInfo.Take(GroupCount).ToList(); var groupSortInfoProcessingResult = JoinProcessor.Process(GroupSortInfoProcessor.Process(groupSortInfo)); var groupExpressions = groupSortInfo.Select(x => x.SortExpression).ToList(); var groupPropertiesProcessingResult = JoinProcessor.Process(GroupPropertiesProcessor.Process(groupExpressions)); var groupSummaryProcessingResult = JoinProcessor.Process(GroupSummaryProcessor.Process(GroupSummaryInfo)); if (SortInfoProcessor.HasSpecialMappingsFor(groupSortInfo)) { PrepareGroupFetchingProcessComplicated( filterCriteriaProcessingResult, groupSortInfoProcessingResult, groupPropertiesProcessingResult, groupSummaryProcessingResult ); } else { PrepareGroupFetchingProcessSimple( filterCriteriaProcessingResult, groupSortInfoProcessingResult, groupPropertiesProcessingResult, groupSummaryProcessingResult ); } } else { SetGROUPQueryInfo(null); } var totalSummaryProcessingResult = JoinProcessor.Process(TotalSummaryProcessor.Process(TotalSummaryInfo)); var totalQueryJOINSection = JoinProcessor.PrepareSimpleJoinSection( filterCriteriaProcessingResult.UsedJOINS, totalSummaryProcessingResult.UsedJOINS ); SetTOTALQueryInfo( FillTemplatePlaceholders( ("SELECT [SUMMARIES] FROM [SOURCETYPE] [BASEALIAS] " + "[QUERY JOIN SECTION]" + "[QUERY WHERE SECTION]") .Replace("[QUERY JOIN SECTION]", totalQueryJOINSection.Add(" ")) .Replace("[QUERY WHERE SECTION]", queryWHERESection.Add(" ")) .Replace("[SUMMARIES]", totalSummaryProcessingResult.ResultString) ), totalSummaryProcessingResult.SummaryDescriptors ); SetQueryPARAMETERS(queryPARAMETERS); }