@Override public void applyCorrelation(CorrelationBuilder correlationBuilder, String correlationExpression) { String alias = correlationBuilder.getCorrelationAlias(); // Exercise the parser first to resolve the view root ExpressionFactory expressionFactory = correlationBuilder.getService(ExpressionFactory.class); String expressionString = AbstractAttribute.replaceThisFromMapping(this.correlationExpression, alias); Expression expression = expressionFactory.createBooleanExpression(expressionString, false); // Find out the view root alias MacroFunction viewRootFunction = expressionFactory.getDefaultMacroConfiguration().get("VIEW_ROOT"); ViewRootJpqlMacro viewRootMacro = (ViewRootJpqlMacro) viewRootFunction.getState()[0]; // Prefix all paths except view root alias based ones and substitute the key alias with the correlation expression String aliasToSkip; if (viewRootMacro.getViewRoot() == null) { EmbeddingViewJpqlMacro embeddingViewJpqlMacro = (EmbeddingViewJpqlMacro) expressionFactory.getDefaultMacroConfiguration().get("EMBEDDING_VIEW").getState()[0]; aliasToSkip = embeddingViewJpqlMacro.getEmbeddingViewPath(); } else { aliasToSkip = viewRootMacro.getViewRoot(); } PrefixingAndAliasReplacementQueryGenerator generator = new PrefixingAndAliasReplacementQueryGenerator(alias, correlationExpression, correlationKeyAlias, aliasToSkip, true); StringBuilder buffer = new StringBuilder(approximateExpressionSize); generator.setQueryBuffer(buffer); expression.accept(generator); correlationBuilder.correlate(correlated) .setOnExpression(buffer.toString()); } }
onBuilder.setOnExpression(expression); } else { MultipleSubqueryInitiator<?> initiator = onBuilder.setOnExpressionSubqueries(expression);
onBuilder.setOnExpression(expression); } else { MultipleSubqueryInitiator<?> initiator = onBuilder.setOnExpressionSubqueries(expression);