private DereferenceExpression getNewDereferenceExpression( final DereferenceExpression dereferenceExpression, final Object context ) { return new DereferenceExpression( dereferenceExpression.getLocation(), (Expression) process(dereferenceExpression.getBase(), context), dereferenceExpression.getFieldName()); } }
/** * If this DereferenceExpression looks like a QualifiedName, return QualifiedName. * Otherwise return null */ public static QualifiedName getQualifiedName(final DereferenceExpression expression) { final List<String> parts = tryParseParts(expression.base, expression.fieldName); return parts == null ? null : QualifiedName.of(parts); }
@Override protected String visitDereferenceExpression( final DereferenceExpression node, final Boolean unmangleNames) { final String baseString = process(node.getBase(), unmangleNames); if (node.getBase() instanceof QualifiedNameReference) { return baseString + KsqlConstants.DOT + formatIdentifier(node.getFieldName()); } return baseString + KsqlConstants.STRUCT_FIELD_REF + formatIdentifier(node.getFieldName()); }
@Override public Node visitDereference(final SqlBaseParser.DereferenceContext context) { final String fieldName = getIdentifierText(context.identifier()); final Expression baseExpression = (Expression) visit(context.base); return new DereferenceExpression(getLocation(context), baseExpression, fieldName); }
} else if (selectItemExpression instanceof DereferenceExpression) { final DereferenceExpression dereferenceExp = (DereferenceExpression) selectItemExpression; final String dereferenceExpressionString = dereferenceExp.toString(); if ((dataSourceExtractor.getJoinLeftSchema() != null) && ( dataSourceExtractor .getCommonFieldNames() .contains( dereferenceExp.getFieldName() dereferenceExpressionString.indexOf(KsqlConstants.DOT) + 1))); } else { alias = Optional.of(dereferenceExp.getFieldName());
@Override protected R visitDereferenceExpression(final DereferenceExpression node, final C context) { process(node.getBase(), context); return null; }
private static List<String> tryParseParts(final Expression base, final String fieldName) { if (base instanceof QualifiedNameReference) { final List<String> newList = new ArrayList<>(((QualifiedNameReference) base).getName().getParts()); newList.add(fieldName); return newList; } else if (base instanceof DereferenceExpression) { final QualifiedName baseQualifiedName = getQualifiedName((DereferenceExpression) base); if (baseQualifiedName != null) { final List<String> newList = new ArrayList<>(baseQualifiedName.getParts()); newList.add(fieldName); return newList; } } return null; }
@Test public void shouldFormatDereferenceExpression() { assertThat(ExpressionFormatter.formatExpression(new DereferenceExpression(new StringLiteral("foo"), "name")), equalTo("'foo'->name")); }
private FunctionCall getNewFunctionCall( final DereferenceExpression dereferenceExpression, final Object context ) { final Expression createFunctionResult = (Expression) process(dereferenceExpression.getBase(), context); final String fieldName = dereferenceExpression.getFieldName(); return new FunctionCall( QualifiedName.of("FETCH_FIELD_FROM_STRUCT"), ImmutableList.of(createFunctionResult, new StringLiteral(fieldName))); }
@Override protected R visitDereferenceExpression(final DereferenceExpression node, final C context) { process(node.getBase(), context); return null; }
protected Node visitDereferenceExpression( final DereferenceExpression node, final Object context ) { // use an if/else block here (instead of isPresent.map(...).orElse(...)) so only one object // gets instantiated (issue #1784) if (node.getLocation().isPresent()) { return new DereferenceExpression(node.getLocation().get(), (Expression) process(node.getBase(), context), node.getFieldName() ); } else { return new DereferenceExpression((Expression) process(node.getBase(), context), node.getFieldName() ); } }
QualifiedName.of(prefixName) ); return new DereferenceExpression( getLocation(context), baseExpression, QualifiedName.of(dataSourceExtractor.getLeftAlias()) ); return new DereferenceExpression(getLocation(context), baseExpression, columnName); } else if (dataSourceExtractor.getRightFieldNames().contains(columnName)) { final Expression baseExpression = QualifiedName.of(dataSourceExtractor.getRightAlias()) ); return new DereferenceExpression(getLocation(context), baseExpression, columnName); } else { throw new InvalidColumnReferenceException("Field " + columnName + " is ambiguous."); QualifiedName.of(dataSourceExtractor.getFromAlias()) ); return new DereferenceExpression(getLocation(context), baseExpression, columnName);
private Expression createFetchFunctionNodeIfNeeded( final DereferenceExpression dereferenceExpression, final Object context ) { if (dereferenceExpression.getBase() instanceof QualifiedNameReference) { return getNewDereferenceExpression(dereferenceExpression, context); } return getNewFunctionCall(dereferenceExpression, context); }