private void normalizeSorts(SchemaContext pc) { if (!EngineConstant.ORDERBY.has(this) && !EngineConstant.GROUPBY.has(this)) return; Map<RewriteKey, ExpressionNode> projMap = ExpressionUtils.buildRewriteMap(getProjection()); if (EngineConstant.ORDERBY.has(this)) normalizeSorts(pc, projMap, EngineConstant.ORDERBY.getEdge(this)); if (EngineConstant.GROUPBY.has(this)) normalizeSorts(pc, projMap, EngineConstant.GROUPBY.getEdge(this)); }
@Override public void normalize(SchemaContext pc) { // we've already resolved everything. now we: // [1] expand all wildcards and table wildcards (except for count(*)) // this is easy for the projection - walk down the list and look for naked wildcards or // table wildcards List<ExpressionNode> proj = getProjection(); proj = expandWildcards(pc, proj); if (projectionMetadata == null || projectionMetadata.getWidth() != proj.size()) projectionMetadata = buildProjectionMetadata(pc, proj); // [2] assign aliases for everything that does not already use an alias // for the projection, this is easy - just walk down the list and anything that is // not a DerivedColumn must need an alias proj = assignProjectionAliases(pc, proj, getAliases()); setProjection(proj); // for order by, group by, etc. now that the projection aliases are set, use them in any clauses normalizeSorts(pc); }