docs: Expression XreadBooleanPrimaryOrNull() {
  
          Expression e = null;
          int        position;
  
          switch (token.tokenType) {
  
              case Tokens.EXISTS :
              case Tokens.UNIQUE :
                  return XreadPredicate();
  
              case Tokens.ROW :
                  read();
                  readThis(Tokens.OPENBRACKET);
  
                  e = XreadRowElementList(true);
  
                  readThis(Tokens.CLOSEBRACKET);
                  break;
  
              default :
                  position = getPosition();
  
                  try {
                      e = XreadAllTypesCommonValueExpression(false);
                  } catch (HsqlException ex) {
                      ex.setLevel(compileContext.subQueryDepth);
  
                      if (lastError == null
                              || lastError.getLevel() < ex.getLevel()) {
                          lastError = ex;
                      }
  
                      rewind(position);
                  }
          }
  
          if (e == null && token.tokenType == Tokens.OPENBRACKET) {
              read();
  
              position = getPosition();
  
              try {
                  e = XreadRowElementList(true);
  
                  readThis(Tokens.CLOSEBRACKET);
              } catch (HsqlException ex) {
                  ex.setLevel(compileContext.subQueryDepth);
  
                  if (lastError == null
                          || lastError.getLevel() < ex.getLevel()) {
                      lastError = ex;
                  }
  
                  rewind(position);
  
                  e = XreadBooleanValueExpression();
  
                  readThis(Tokens.CLOSEBRACKET);
              }
          }
  
          if (e != null) {
              e = XreadPredicateRightPart(e);
          }
  
          return e;
      }