Expression XreadAllTypesValueExpressionPrimary(boolean boole) {

        Expression e = null;

        switch (token.tokenType) {

            case Tokens.EXISTS :
            case Tokens.UNIQUE :
                if (boole) {
                    return XreadPredicate();
                }
                break;

            case Tokens.ROW :
                if (boole) {
                    break;
                }

                read();
                readThis(Tokens.OPENBRACKET);

                e = XreadRowElementList(true);

                readThis(Tokens.CLOSEBRACKET);
                break;

            default :
                e = XreadSimpleValueExpressionPrimary();
        }

        if (e == null && token.tokenType == Tokens.OPENBRACKET) {
            read();

            e = XreadRowElementList(true);

            readThis(Tokens.CLOSEBRACKET);
        }

        if (boole && e != null) {
            e = XreadPredicateRightPart(e);
        }

        return e;
    }
Expression XreadAllTypesValueExpressionPrimary ( boolean boole ) { Expression e = null ; switch ( token . tokenType ) { case Tokens . EXISTS : case Tokens . UNIQUE : if ( boole ) { return XreadPredicate ( ) ; } break ; case Tokens . ROW : if ( boole ) { break ; } read ( ) ; readThis ( Tokens . OPENBRACKET ) ; e = XreadRowElementList ( true ) ; readThis ( Tokens . CLOSEBRACKET ) ; break ; default : e = XreadSimpleValueExpressionPrimary ( ) ; } if ( e == null && token . tokenType == Tokens . OPENBRACKET ) { read ( ) ; e = XreadRowElementList ( true ) ; readThis ( Tokens . CLOSEBRACKET ) ; } if ( boole && e != null ) { e = XreadPredicateRightPart ( e ) ; } return e ; }
<explicit row value constructor> needed for predicate