Package org.hibernate.persister.entity

Examples of org.hibernate.persister.entity.Queryable$Declarer


    return classAlias;
    //return classAlias == null ? className : classAlias;
  }

  private String getTableName() {
    Queryable queryable = getQueryable();
    return ( queryable != null ) ? queryable.getTableName() : "{none}";
  }
View Full Code Here


    if ( propertySource.isComponentType() ) {
      // property name is a sub-path of a component...
      return;
    }

    Queryable persister = getQueryable();
    if ( persister != null ) {
      try {
        Queryable.Declarer propertyDeclarer = persister.getSubclassPropertyDeclarer( propertyName );
        if ( log.isTraceEnabled() ) {
          log.trace( "handling property dereference [" + persister.getEntityName() + " (" + getClassAlias() + ") -> " + propertyName + " (" + propertyDeclarer + ")]" );
        }
        if ( propertyDeclarer == Queryable.Declarer.SUBCLASS ) {
          dereferencedBySubclassProperty = true;
          includeSubclasses = true;
        }
View Full Code Here

  private StatementExecutor buildAppropriateStatementExecutor(HqlSqlWalker walker) {
    Statement statement = ( Statement ) walker.getAST();
    if ( walker.getStatementType() == HqlSqlTokenTypes.DELETE ) {
      FromElement fromElement = walker.getFinalFromClause().getFromElement();
      Queryable persister = fromElement.getQueryable();
      if ( persister.isMultiTable() ) {
        return new MultiTableDeleteExecutor( walker );
      }
      else {
        return new BasicExecutor( walker, persister );
      }
    }
    else if ( walker.getStatementType() == HqlSqlTokenTypes.UPDATE ) {
      FromElement fromElement = walker.getFinalFromClause().getFromElement();
      Queryable persister = fromElement.getQueryable();
      if ( persister.isMultiTable() ) {
        // even here, if only properties mapped to the "base table" are referenced
        // in the set and where clauses, this could be handled by the BasicDelegate.
        // TODO : decide if it is better performance-wise to perform that check, or to simply use the MultiTableUpdateDelegate
        return new MultiTableUpdateExecutor( walker );
      }
View Full Code Here

  String continueFromManyToMany(String entityName, String[] joinColumns, QueryTranslatorImpl q) throws QueryException {
    start( q );
    continuation = true;
    currentName = q.createNameFor( entityName );
    q.addType( currentName, entityName );
    Queryable classPersister = q.getEntityPersister( entityName );
    //QueryJoinFragment join = q.createJoinFragment(useThetaStyleJoin);
    addJoin( currentName, TypeFactory.manyToOne( entityName ), joinColumns );
    currentPropertyMapping = classPersister;
    return currentName;
  }
View Full Code Here

    }

    if ( collectionElementType.isEntityType() ) {
      // an association
      QueryableCollection collectionPersister = q.getCollectionPersister( collectionRole );
      Queryable entityPersister = ( Queryable ) collectionPersister.getElementPersister();
      String clazz = entityPersister.getEntityName();

      final String elementName;
      if ( collectionPersister.isOneToMany() ) {
        elementName = collectionName;
        //allow index() function:
View Full Code Here

        if ( joinType != NONE ) throw new QueryException( "outer or full join must be followed by path expression" );

        if ( afterClass ) {
          // treat it as a classname
          Queryable p = q.getEntityPersisterUsingImports( token );
          if ( p == null ) throw new QueryException( "persister not found: " + token );
          q.addFromClass( alias, p );
        }
        else {
          // treat it as a path expression
          peParser.setJoinType( JoinFragment.INNER_JOIN );
          peParser.setUseThetaStyleJoin( true );
          ParserHelper.parse( peParser, q.unalias( token ), ParserHelper.PATH_SEPARATORS, q );
          if ( !peParser.isCollectionValued() ) throw new QueryException( "path expression did not resolve to collection: " + token );
          String nm = peParser.addFromCollection( q );
          q.setAliasName( alias, nm );
        }

        alias = null;
        afterIn = false;
        afterClass = false;
        expectingJoin = true;
      }
      else {

        // handle a path expression or class name that
        // appears at the start, in the "new" HQL
        // style or an alias that appears at the start
        // in the "old" HQL style

        Queryable p = q.getEntityPersisterUsingImports( token );
        if ( p != null ) {
          // starts with the name of a mapped class (new style)
          if ( joinType != NONE ) throw new QueryException( "outer or full join must be followed by path expression" );
          entityName = q.createNameFor( p.getEntityName() );
          q.addFromClass( entityName, p );
          expectingAs = true;
        }
        else if ( token.indexOf( '.' ) < 0 ) {
          // starts with an alias (old style)
View Full Code Here

  protected void postProcessDML(RestrictableStatement statement) throws SemanticException {
    statement.getFromClause().resolve();

    FromElement fromElement = ( FromElement ) statement.getFromClause().getFromElements().get( 0 );
    Queryable persister = fromElement.getQueryable();
    // Make #@%$^#^&# sure no alias is applied to the table name
    fromElement.setText( persister.getTableName() );

//    // append any filter fragments; the EMPTY_MAP is used under the assumption that
//    // currently enabled filters should not affect this process
//    if ( persister.getDiscriminatorType() != null ) {
//      new SyntheticAndFactory( getASTFactory() ).addDiscriminatorWhereFragment(
//              statement,
//              persister,
//              java.util.Collections.EMPTY_MAP,
//              fromElement.getTableAlias()
//      );
//    }
    if ( persister.getDiscriminatorType() != null || ! queryTranslatorImpl.getEnabledFilters().isEmpty() ) {
      new SyntheticAndFactory( this ).addDiscriminatorWhereFragment(
              statement,
              persister,
              queryTranslatorImpl.getEnabledFilters(),
              fromElement.getTableAlias()
View Full Code Here

  protected void postProcessInsert(AST insert) throws SemanticException, QueryException {
    InsertStatement insertStatement = ( InsertStatement ) insert;
    insertStatement.validate();

    SelectClause selectClause = insertStatement.getSelectClause();
    Queryable persister = insertStatement.getIntoClause().getQueryable();

    if ( !insertStatement.getIntoClause().isExplicitIdInsertion() ) {
      // We need to generate ids as part of this bulk insert.
      //
      // Note that this is only supported for sequence-style generators and
      // post-insert-style generators; basically, only in-db generators
      IdentifierGenerator generator = persister.getIdentifierGenerator();
      if ( !supportsIdGenWithBulkInsertion( generator ) ) {
        throw new QueryException( "can only generate ids as part of bulk insert with either sequence or post-insert style generators" );
      }

      AST idSelectExprNode = null;

      if ( SequenceGenerator.class.isAssignableFrom( generator.getClass() ) ) {
        String seqName = ( String ) ( ( SequenceGenerator ) generator ).generatorKey();
        String nextval = sessionFactoryHelper.getFactory().getDialect().getSelectSequenceNextValString( seqName );
        idSelectExprNode = getASTFactory().create( HqlSqlTokenTypes.SQL_TOKEN, nextval );
      }
      else {
        //Don't need this, because we should never ever be selecting no columns in an insert ... select...
        //and because it causes a bug on DB2
        /*String idInsertString = sessionFactoryHelper.getFactory().getDialect().getIdentityInsertString();
        if ( idInsertString != null ) {
          idSelectExprNode = getASTFactory().create( HqlSqlTokenTypes.SQL_TOKEN, idInsertString );
        }*/
      }

      if ( idSelectExprNode != null ) {
        AST currentFirstSelectExprNode = selectClause.getFirstChild();
        selectClause.setFirstChild( idSelectExprNode );
        idSelectExprNode.setNextSibling( currentFirstSelectExprNode );

        insertStatement.getIntoClause().prependIdColumnSpec();
      }
    }

    final boolean includeVersionProperty = persister.isVersioned() &&
        !insertStatement.getIntoClause().isExplicitVersionInsertion() &&
        persister.isVersionPropertyInsertable();
    if ( includeVersionProperty ) {
      // We need to seed the version value as part of this bulk insert
      VersionType versionType = persister.getVersionType();
      AST versionValueNode = null;

      if ( sessionFactoryHelper.getFactory().getDialect().supportsParametersInInsertSelect() ) {
        int sqlTypes[] = versionType.sqlTypes( sessionFactoryHelper.getFactory() );
        if ( sqlTypes == null || sqlTypes.length == 0 ) {
View Full Code Here

    return numberOfParametersInSetClause;
  }

  protected void evaluateAssignment(AST eq) throws SemanticException {
    prepareLogicOperator( eq );
    Queryable persister = getCurrentFromClause().getFromElement().getQueryable();
    evaluateAssignment( eq, persister, -1 );
  }
View Full Code Here

  public ArrayList getAssignmentSpecifications() {
    return assignmentSpecifications;
  }

  protected AST createIntoClause(String path, AST propertySpec) throws SemanticException {
    Queryable persister = ( Queryable ) getSessionFactoryHelper().requireClassPersister( path );

    IntoClause intoClause = ( IntoClause ) getASTFactory().create( INTO, persister.getEntityName() );
    intoClause.setFirstChild( propertySpec );
    intoClause.initialize( persister );

    addQuerySpaces( persister.getQuerySpaces() );

    return intoClause;
  }
View Full Code Here

TOP

Related Classes of org.hibernate.persister.entity.Queryable$Declarer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.