getLoadQueryInfluencers().getEnabledFilters() ); if ( queryPlan.getTranslators()[0].isManipulationStatement() ) { throw new IllegalArgumentException( "Update/delete queries cannot be typed" ); else if ( queryPlan.getTranslators()[0].getReturnTypes().length == 1 ) { final Type queryResultType = queryPlan.getTranslators()[0].getReturnTypes()[0]; if ( !resultClass.isAssignableFrom( queryResultType.getReturnedClass() ) ) { throw new IllegalArgumentException(
private void verifyImmutableEntityUpdate(HQLQueryPlan plan) { if ( plan.isUpdate() ) { List<String> primaryFromClauseTables = new ArrayList<>(); for ( QueryTranslator queryTranslator : plan.getTranslators() ) { primaryFromClauseTables.addAll( queryTranslator.getPrimaryFromClauseTables() );
private void testMultiJoinAddition(String hql) { final HQLQueryPlan plan = sessionFactory().getQueryPlanCache().getHQLQueryPlan( hql, false, Collections.EMPTY_MAP ); assertEquals( 1, plan.getTranslators().length ); final QueryTranslator translator = plan.getTranslators()[0]; final String generatedSql = translator.getSQLString(); int sub1JoinColumnIndex = generatedSql.indexOf( ".base_sub_1" ); assertNotEquals( "Generated SQL doesn't contain a join for 'base' with 'PolymorphicSub1' via 'base_sub_1':\n" + generatedSql, -1, sub1JoinColumnIndex ); int sub2JoinColumnIndex = generatedSql.indexOf( ".base_sub_2" ); assertNotEquals( "Generated SQL doesn't contain a join for 'base' with 'PolymorphicSub2' via 'base_sub_2':\n" + generatedSql, -1, sub2JoinColumnIndex ); }
@Test public void testNonDistinctCountOfEntityWithCompositeId() { // the check here is all based on whether we had commas in the expressions inside the count final HQLQueryPlan plan = sessionFactory().getQueryPlanCache().getHQLQueryPlan( "select count(o) from Order o", false, Collections.EMPTY_MAP ); assertEquals( 1, plan.getTranslators().length ); final QueryTranslator translator = plan.getTranslators()[0]; final String generatedSql = translator.getSQLString(); final int countExpressionListStart = generatedSql.indexOf( "count(" ); final int countExpressionListEnd = generatedSql.indexOf( ")", countExpressionListStart ); final String countExpressionFragment = generatedSql.substring( countExpressionListStart+6, countExpressionListEnd+1 ); final boolean hadCommas = countExpressionFragment.contains( "," ); // set up the expectation based on Dialect... final boolean expectCommas = sessionFactory().getDialect().supportsTupleCounts(); assertEquals( expectCommas, hadCommas ); }
Collections.EMPTY_MAP ); assertEquals( 1, plan.getTranslators().length ); final QueryTranslator translator = plan.getTranslators()[0]; final String generatedSql = translator.getSQLString(); System.out.println( "Generated SQL : " + generatedSql );
@Override public List<String> getCascadingDeleteSql(EntityManager em, Query query) { SessionImplementor session = em.unwrap(SessionImplementor.class); HQLQueryPlan queryPlan = getOriginalQueryPlan(session, query); if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); } // TODO: check if this is actually a delete statement QueryTranslator queryTranslator = queryPlan.getTranslators()[0]; StatementExecutor executor = getStatementExecutor(queryTranslator); if (executor == null || !(executor instanceof DeleteExecutor)) { return Collections.EMPTY_LIST; } List<String> deletes = getField(executor, "deletes"); if (deletes == null) { return Collections.EMPTY_LIST; } return deletes; }
@Override public String getSqlAlias(EntityManager em, Query query, String alias) { SessionImplementor session = em.unwrap(SessionImplementor.class); HQLQueryPlan plan = getOriginalQueryPlan(session, query); if (plan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); } QueryTranslator translator = plan.getTranslators()[0]; QueryNode queryNode = getField(translator, "sqlAst"); FromElement fromElement = queryNode.getFromClause().getFromElement(alias); if (fromElement == null) { throw new IllegalArgumentException("The alias " + alias + " could not be found in the query: " + query); } return fromElement.getTableAlias(); }
@Override public int getSqlSelectAliasPosition(EntityManager em, Query query, String alias) { SessionImplementor session = em.unwrap(SessionImplementor.class); HQLQueryPlan plan = getOriginalQueryPlan(session, query); if (plan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); } QueryTranslator translator = plan.getTranslators()[0]; try { QueryNode queryNode = getField(translator, "sqlAst"); String[] aliases = queryNode.getSelectClause().getQueryReturnAliases(); for (int i = 0; i < aliases.length; i++) { if (alias.equals(aliases[i])) { // the ordinal is 1 based return i + 1; } } return -1; } catch (Exception e1) { throw new RuntimeException(e1); } }
if (lastQueryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator lastQueryTranslator = lastQueryPlan.getTranslators()[0]; executor = (StatementExecutor) statementExectuor.get(lastQueryTranslator);
@Override public String getSql(EntityManager em, Query query) { SessionImplementor session = em.unwrap(SessionImplementor.class); HQLQueryPlan queryPlan = getOriginalQueryPlan(session, query); if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); } QueryTranslator queryTranslator = queryPlan.getTranslators()[0]; String[] sqls; if (queryTranslator.isManipulationStatement()) { StatementExecutor executor = getStatementExecutor(queryTranslator); if (!(executor instanceof BasicExecutor)) { throw new IllegalArgumentException("Using polymorphic deletes/updates with CTEs is not yet supported"); } sqls = executor.getSqlStatements(); } else { sqls = queryPlan.getSqlStrings(); } // TODO: have to handle multiple sql strings which happens when having e.g. a polymorphic UPDATE/DELETE for (int i = 0; i < sqls.length; i++) { if (sqls[i] != null) { return sqls[i]; } } return null; }
if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator queryTranslator = queryPlan.getTranslators()[0]; QueryParameters queryParameters; List<ParameterSpecification> specifications;
private void prepareQueryPlan(HQLQueryPlan queryPlan, List<ParameterSpecification> queryParameterSpecifications, String finalSql, SessionImplementor session, Query modificationBaseQuery, boolean isModification, DbmsDialect dbmsDialect) { try { if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator queryTranslator = queryPlan.getTranslators()[0]; if (lastQueryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator lastQueryTranslator = lastQueryPlan.getTranslators()[0]; executor = (StatementExecutor) statementExectuor.get(lastQueryTranslator);
if (plan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator translator = plan.getTranslators()[0];
if (queryPlan.getTranslators().length > 1) { throw new IllegalArgumentException("No support for multiple translators yet!"); QueryTranslator queryTranslator = queryPlan.getTranslators()[0];