Package org.hibernate.hql.ast.tree

Examples of org.hibernate.hql.ast.tree.UpdateStatement


    }

  }

  protected void postProcessUpdate(AST update) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) update;

    postProcessDML( updateStatement );
  }
View Full Code Here


    return intoClause;
  }

  protected void prepareVersioned(AST updateNode, AST versioned) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) updateNode;
    FromClause fromClause = updateStatement.getFromClause();
    if ( versioned != null ) {
      // Make sure that the persister is versioned
      Queryable persister = fromClause.getFromElement().getQueryable();
      if ( !persister.isVersioned() ) {
        throw new SemanticException( "increment option specified for update of non-versioned entity" );
      }

      VersionType versionType = persister.getVersionType();
      if ( versionType instanceof UserVersionType ) {
        throw new SemanticException( "user-defined version types not supported for increment option" );
      }

      AST eq = getASTFactory().create( HqlSqlTokenTypes.EQ, "=" );
      AST versionPropertyNode = generateVersionPropertyNode( persister );

      eq.setFirstChild( versionPropertyNode );

      AST versionIncrementNode = null;
      if ( Date.class.isAssignableFrom( versionType.getReturnedClass() ) ) {
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PARAM, "?" );
        ParameterSpecification paramSpec = new VersionTypeSeedParameterSpecification( versionType );
        ( ( ParameterNode ) versionIncrementNode ).setHqlParameterSpecification( paramSpec );
        parameters.add( 0, paramSpec );
      }
      else {
        // Not possible to simply re-use the versionPropertyNode here as it causes
        // OOM errors due to circularity :(
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PLUS, "+" );
        versionIncrementNode.setFirstChild( generateVersionPropertyNode( persister ) );
        versionIncrementNode.addChild( getASTFactory().create( HqlSqlTokenTypes.IDENT, "1" ) );
      }

      eq.addChild( versionIncrementNode );

      evaluateAssignment( eq, persister, 0 );

      AST setClause = updateStatement.getSetClause();
      AST currentFirstSetElement = setClause.getFirstChild();
      setClause.setFirstChild( eq );
      eq.setNextSibling( currentFirstSetElement );
    }
  }
View Full Code Here

    if ( !walker.getSessionFactoryHelper().getFactory().getDialect().supportsTemporaryTables() ) {
      throw new HibernateException( "cannot perform multi-table updates using dialect not supporting temp tables" );
    }

    UpdateStatement updateStatement = ( UpdateStatement ) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause().getFromElement();
    String bulkTargetAlias = fromElement.getTableAlias();
    this.persister = fromElement.getQueryable();

    this.idInsertSelect = generateIdInsertSelect( persister, bulkTargetAlias, updateStatement.getWhereClause() );
    log.trace( "Generated ID-INSERT-SELECT SQL (multi-table update) : " +  idInsertSelect );

    String[] tableNames = persister.getConstraintOrderedTableNameClosure();
    String[][] columnNames = persister.getContraintOrderedTableKeyColumnClosure();
View Full Code Here

    }

  }

  protected void postProcessUpdate(AST update) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) update;

    postProcessDML( updateStatement );
  }
View Full Code Here

    return intoClause;
  }

  protected void prepareVersioned(AST updateNode, AST versioned) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) updateNode;
    FromClause fromClause = updateStatement.getFromClause();
    if ( versioned != null ) {
      // Make sure that the persister is versioned
      Queryable persister = fromClause.getFromElement().getQueryable();
      if ( !persister.isVersioned() ) {
        throw new SemanticException( "increment option specified for update of non-versioned entity" );
      }

      VersionType versionType = persister.getVersionType();
      if ( versionType instanceof UserVersionType ) {
        throw new SemanticException( "user-defined version types not supported for increment option" );
      }

      AST eq = getASTFactory().create( HqlSqlTokenTypes.EQ, "=" );
      AST versionPropertyNode = generateVersionPropertyNode( persister );

      eq.setFirstChild( versionPropertyNode );

      AST versionIncrementNode = null;
      if ( Date.class.isAssignableFrom( versionType.getReturnedClass() ) ) {
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PARAM, "?" );
        ParameterSpecification paramSpec = new VersionTypeSeedParameterSpecification( versionType );
        ( ( ParameterNode ) versionIncrementNode ).setHqlParameterSpecification( paramSpec );
        parameters.add( 0, paramSpec );
      }
      else {
        // Not possible to simply re-use the versionPropertyNode here as it causes
        // OOM errors due to circularity :(
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PLUS, "+" );
        versionIncrementNode.setFirstChild( generateVersionPropertyNode( persister ) );
        versionIncrementNode.addChild( getASTFactory().create( HqlSqlTokenTypes.IDENT, "1" ) );
      }

      eq.addChild( versionIncrementNode );

      evaluateAssignment( eq, persister, 0 );

      AST setClause = updateStatement.getSetClause();
      AST currentFirstSetElement = setClause.getFirstChild();
      setClause.setFirstChild( eq );
      eq.setNextSibling( currentFirstSetElement );
    }
  }
View Full Code Here

    }

  }

  protected void postProcessUpdate(AST update) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) update;

    postProcessDML( updateStatement );
  }
View Full Code Here

    return intoClause;
  }

  protected void prepareVersioned(AST updateNode, AST versioned) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) updateNode;
    FromClause fromClause = updateStatement.getFromClause();
    if ( versioned != null ) {
      // Make sure that the persister is versioned
      Queryable persister = fromClause.getFromElement().getQueryable();
      if ( !persister.isVersioned() ) {
        throw new SemanticException( "increment option specified for update of non-versioned entity" );
      }

      VersionType versionType = persister.getVersionType();
      if ( versionType instanceof UserVersionType ) {
        throw new SemanticException( "user-defined version types not supported for increment option" );
      }

      AST eq = getASTFactory().create( HqlSqlTokenTypes.EQ, "=" );
      AST versionPropertyNode = generateVersionPropertyNode( persister );

      eq.setFirstChild( versionPropertyNode );

      AST versionIncrementNode = null;
      if ( Date.class.isAssignableFrom( versionType.getReturnedClass() ) ) {
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PARAM, "?" );
        ParameterSpecification paramSpec = new VersionTypeSeedParameterSpecification( versionType );
        ( ( ParameterNode ) versionIncrementNode ).setHqlParameterSpecification( paramSpec );
        parameters.add( 0, paramSpec );
      }
      else {
        // Not possible to simply re-use the versionPropertyNode here as it causes
        // OOM errors due to circularity :(
        versionIncrementNode = getASTFactory().create( HqlSqlTokenTypes.PLUS, "+" );
        versionIncrementNode.setFirstChild( generateVersionPropertyNode( persister ) );
        versionIncrementNode.addChild( getASTFactory().create( HqlSqlTokenTypes.IDENT, "1" ) );
      }

      eq.addChild( versionIncrementNode );

      evaluateAssignment( eq, persister, 0 );

      AST setClause = updateStatement.getSetClause();
      AST currentFirstSetElement = setClause.getFirstChild();
      setClause.setFirstChild( eq );
      eq.setNextSibling( currentFirstSetElement );
    }
  }
View Full Code Here

    if ( !walker.getSessionFactoryHelper().getFactory().getDialect().supportsTemporaryTables() ) {
      throw new HibernateException( "cannot perform multi-table updates using dialect not supporting temp tables" );
    }

    UpdateStatement updateStatement = ( UpdateStatement ) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause().getFromElement();
    String bulkTargetAlias = fromElement.getTableAlias();
    this.persister = fromElement.getQueryable();

    this.idInsertSelect = generateIdInsertSelect( persister, bulkTargetAlias, updateStatement.getWhereClause() );
    log.trace( "Generated ID-INSERT-SELECT SQL (multi-table update) : " +  idInsertSelect );

    String[] tableNames = persister.getConstraintOrderedTableNameClosure();
    String[][] columnNames = persister.getContraintOrderedTableKeyColumnClosure();
View Full Code Here

    if ( !walker.getSessionFactoryHelper().getFactory().getDialect().supportsTemporaryTables() ) {
      throw new HibernateException( "cannot perform multi-table updates using dialect not supporting temp tables" );
    }

    UpdateStatement updateStatement = ( UpdateStatement ) walker.getAST();
    FromElement fromElement = updateStatement.getFromClause().getFromElement();
    String bulkTargetAlias = fromElement.getTableAlias();
    this.persister = fromElement.getQueryable();

    this.idInsertSelect = generateIdInsertSelect( persister, bulkTargetAlias, updateStatement.getWhereClause() );
    log.trace( "Generated ID-INSERT-SELECT SQL (multi-table update) : " +  idInsertSelect );

    String[] tableNames = persister.getConstraintOrderedTableNameClosure();
    String[][] columnNames = persister.getContraintOrderedTableKeyColumnClosure();
View Full Code Here

    }

  }

  protected void postProcessUpdate(AST update) throws SemanticException {
    UpdateStatement updateStatement = ( UpdateStatement ) update;

    postProcessDML( updateStatement );
  }
View Full Code Here

TOP

Related Classes of org.hibernate.hql.ast.tree.UpdateStatement

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.