private RexNode convertIdentifier(Blackboard bb,SqlIdentifier identifier){
  final SqlCall call=SqlUtil.makeCall(opTab,identifier);
  if (call != null) {
    return bb.convertExpression(call);
  }
  final SqlQualified qualified;
  if (bb.scope != null) {
    qualified=bb.scope.fullyQualify(identifier);
  }
 else {
    qualified=SqlQualified.create(null,1,null,identifier);
  }
  final Pair<RexNode,Map<String,Integer>> e0=bb.lookupExp(qualified);
  RexNode e=e0.left;
  for (  String name : qualified.suffixTranslated()) {
    if (e == e0.left && e0.right != null) {
      int i=e0.right.get(name);
      e=rexBuilder.makeFieldAccess(e,i);
    }
 else {
      final boolean caseSensitive=true;
      e=rexBuilder.makeFieldAccess(e,name,caseSensitive);
    }
  }
  if (e instanceof RexInputRef) {
    e=adjustInputRef(bb,(RexInputRef)e);
  }
  if (e0.left instanceof RexCorrelVariable) {
    assert e instanceof RexFieldAccess;
    final RexNode prev=bb.mapCorrelateToRex.put(((RexCorrelVariable)e0.left).id,(RexFieldAccess)e);
    assert prev == null;
  }
  return e;
}

private RexNode convertIdentifier ( Blackboard bb , SqlIdentifier identifier ) { final SqlCall call = SqlUtil . makeCall ( opTab , identifier ) ; if ( call != null ) { return bb . convertExpression ( call ) ; } final SqlQualified qualified ; if ( bb . scope != null ) { qualified = bb . scope . fullyQualify ( identifier ) ; } else { qualified = SqlQualified . create ( null , 1 , null , identifier ) ; } final Pair < RexNode , Map < String , Integer > > e0 = bb . lookupExp ( qualified ) ; RexNode e = e0 . left ; for ( String name : qualified . suffixTranslated ( ) ) { if ( e == e0 . left && e0 . right != null ) { int i = e0 . right . get ( name ) ; e = rexBuilder . makeFieldAccess ( e , i ) ; } else { final boolean caseSensitive = true ; e = rexBuilder . makeFieldAccess ( e , name , caseSensitive ) ; } } if ( e instanceof RexInputRef ) { e = adjustInputRef ( bb , ( RexInputRef ) e ) ; } if ( e0 . left instanceof RexCorrelVariable ) { assert e instanceof RexFieldAccess ; final RexNode prev = bb . mapCorrelateToRex . put ( ( ( RexCorrelVariable ) e0 . left ) . id , ( RexFieldAccess ) e ) ; assert prev == null ; } return e ; }
converts an identifier into an expression in a given scope . for example , the " empno " in " select empno from emp join dept " becomes " emp . empno " .
