// public ASTNode visitDuplicateSpecification(final DuplicateSpecificationContext ctx) {
// return new BooleanLiteralValue(null != ctx.DISTINCT());
// }
//
// @Override
// public ASTNode visitProjections(final ProjectionsContext ctx) {
// Collection<ProjectionSegment> projections = new LinkedList<>();
// if (null != ctx.unqualifiedShorthand()) {
// projections.add(
// new ShorthandProjectionSegment(ctx.unqualifiedShorthand().getStart().getStartIndex(), ctx.unqualifiedShorthand().getStop().getStopIndex(), ctx.unqualifiedShorthand().getText()));
// }
// for (ProjectionContext each : ctx.projection()) {
// ShorthandProjectionSegment result = new ShorthandProjectionSegment(shorthand.getStart().getStartIndex(), shorthand.getStop().getStopIndex(), shorthand.getText());
// IdentifierValue identifier = new IdentifierValue(shorthand.identifier().getText());
// ExpressionProjectionSegment result = Strings.isNullOrEmpty(alias) ? new ExpressionProjectionSegment(column.getStartIndex(), column.getStopIndex(), String.valueOf(column.getLiterals()))
// : new ExpressionProjectionSegment(column.getStartIndex(), ctx.alias().stop.getStopIndex(), String.valueOf(column.getLiterals()));
// result.setAlias(alias);
// return result;
// }
//
// @Override
// public ASTNode visitFromClause(final FromClauseContext ctx) {
// return visit(ctx.tableReferences());
// }
//
// @SuppressWarnings("unchecked")
// @Override
// public ASTNode visitTableReferences(final TableReferencesContext ctx) {
// CollectionValue<TableSegment> result = new CollectionValue<>();
// for (TableReferenceContext each : ctx.tableReference()) {