public static Pair<ExprTableAccessNode,ExprDotNode> checkTableNameGetExprForSubproperty(TableService tableService,String tableName,String subproperty){
  TableMetadata metadata=tableService.getTableMetadata(tableName);
  if (metadata == null) {
    return null;
  }
  int index=ASTUtil.unescapedIndexOfDot(subproperty);
  if (index == -1) {
    if (metadata.getKeyTypes().length > 0) {
      return null;
    }
    ExprTableAccessNodeSubprop tableNode=new ExprTableAccessNodeSubprop(tableName,subproperty);
    return new Pair<ExprTableAccessNode,ExprDotNode>(tableNode,null);
  }
  List<ExprChainedSpec> chainedSpecs=new ArrayList<ExprChainedSpec>(1);
  chainedSpecs.add(new ExprChainedSpec(subproperty.substring(index + 1),Collections.<ExprNode>emptyList(),true));
  ExprTableAccessNodeSubprop tableNode=new ExprTableAccessNodeSubprop(tableName,subproperty.substring(0,index));
  ExprDotNode dotNode=new ExprDotNode(chainedSpecs,false,false);
  dotNode.addChildNode(tableNode);
  return new Pair<ExprTableAccessNode,ExprDotNode>(tableNode,dotNode);
}

public static Pair < ExprTableAccessNode , ExprDotNode > checkTableNameGetExprForSubproperty ( TableService tableService , String tableName , String subproperty ) { TableMetadata metadata = tableService . getTableMetadata ( tableName ) ; if ( metadata == null ) { return null ; } int index = ASTUtil . unescapedIndexOfDot ( subproperty ) ; if ( index == - 1 ) { if ( metadata . getKeyTypes ( ) . length > 0 ) { return null ; } ExprTableAccessNodeSubprop tableNode = new ExprTableAccessNodeSubprop ( tableName , subproperty ) ; return new Pair < ExprTableAccessNode , ExprDotNode > ( tableNode , null ) ; } List < ExprChainedSpec > chainedSpecs = new ArrayList < ExprChainedSpec > ( 1 ) ; chainedSpecs . add ( new ExprChainedSpec ( subproperty . substring ( index + 1 ) , Collections . < ExprNode > emptyList ( ) , true ) ) ; ExprTableAccessNodeSubprop tableNode = new ExprTableAccessNodeSubprop ( tableName , subproperty . substring ( 0 , index ) ) ; ExprDotNode dotNode = new ExprDotNode ( chainedSpecs , false , false ) ; dotNode . addChildNode ( tableNode ) ; return new Pair < ExprTableAccessNode , ExprDotNode > ( tableNode , dotNode ) ; }
resolve " table . property " , not chainable
