Hello, We have a class which extends RelBuilder to add some extra functionality, but we are having issues with aliases being erased when popping the builder stack, and there isn’t much recourse since the Frame stack is all private.
For example, this is valid: ``` relBuilder.scan("T101").empty().field(1, "T101", "C0_7009") ``` Because the `RelBuilder.empty` implementation copies the alias in the Frame from the top of the Frame stack before the `empty` call, and uses it as the name in the frame created *by* the `empty` call. But people extending RelBuilder (us) cannot access or modify those private members. So we have no way to replace the node at the top of the stack without eliminating the alias, and making referencing that alias illegal. For example, lets say we overrode the `empty()` method do effectively replace the node that would be created by the base `empty()` implementation ``` @Override public RelBuilder empty(){ super.empty(); // pop result from stack to maintain proper stack arrangement RelNode oldEmptyNode = this.build(); // and make new node RelNode newEmptyNode = createNewEmptyNode( oldEmptyNode ); // push new node on the stack this.push(newEmptyNode); } ``` By popping the stack, we erase the alias information, so calling `field` with an alias after `empty`throws an exception, since after the empty call (specifically the `build` call) the alias in the Frame no longer exists. The only solution to this would be to call `.as` immediately after the `push` call to restore the alias: ``` @Override public RelBuilder empty(){ super.empty(); // get the current alias String currentAlias = ???; // pop result from stack to maintain proper stack arrangement RelNode oldEmptyNode = this.build(); // and make new node RelNode newEmptyNode = createNewEmptyNode( oldEmptyNode ); // push new node on the stack this.push(newEmptyNode); // re-use the alias that existed before popping the node this.alias(currentAlias); } ``` But there doesn’t seem to be an existing way to ask what the *current* alias is, so that it can be used in the `.as` call. As it stands, it appears that it is not possible to add extension to RelBuilder which either (a) cannot rely on an existing method to set-up the Frame or (b) would cause the frame to be popped. Is that correct? Or is there actually a way to see what the top Frame’s alias is without modifying the core RelBuilder code? Thanks! -Ian Bertolacci