Search in sources :

Example 11 with ColumnUnknownException

use of io.crate.exceptions.ColumnUnknownException in project crate by crate.

the class NameFieldProvider method resolveField.

@Override
public Symbol resolveField(QualifiedName qualifiedName, @Nullable List<String> path, Operation operation, boolean errorOnUnknownObjectKey) {
    List<String> parts = qualifiedName.getParts();
    ColumnIdent columnIdent = new ColumnIdent(parts.get(parts.size() - 1), path);
    if (parts.size() != 1) {
        throw new IllegalArgumentException(String.format(Locale.ENGLISH, "Column reference \"%s\" has too many parts. " + "A column must not have a schema or a table here.", qualifiedName));
    }
    Symbol field = relation.getField(columnIdent, operation, errorOnUnknownObjectKey);
    if (field == null) {
        throw new ColumnUnknownException(columnIdent.sqlFqn(), relation.relationName());
    }
    return field;
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) ColumnUnknownException(io.crate.exceptions.ColumnUnknownException) Symbol(io.crate.expression.symbol.Symbol)

Example 12 with ColumnUnknownException

use of io.crate.exceptions.ColumnUnknownException in project crate by crate.

the class DocTableInfo method getDynamic.

@Nullable
public DynamicReference getDynamic(ColumnIdent ident, boolean forWrite, boolean errorOnUnknownObjectKey) {
    boolean parentIsIgnored = false;
    ColumnPolicy parentPolicy = columnPolicy();
    int position = 0;
    if (!ident.isTopLevel()) {
        // see if parent is strict object
        ColumnIdent parentIdent = ident.getParent();
        Reference parentInfo = null;
        while (parentIdent != null) {
            parentInfo = getReference(parentIdent);
            if (parentInfo != null) {
                break;
            }
            parentIdent = parentIdent.getParent();
        }
        if (parentInfo != null) {
            parentPolicy = parentInfo.columnPolicy();
            position = parentInfo.position();
        }
    }
    switch(parentPolicy) {
        case DYNAMIC:
            if (!forWrite) {
                if (!errorOnUnknownObjectKey) {
                    return new VoidReference(new ReferenceIdent(ident(), ident), rowGranularity(), position);
                }
                return null;
            }
            break;
        case STRICT:
            if (forWrite) {
                throw new ColumnUnknownException(ident.sqlFqn(), ident());
            }
            return null;
        case IGNORED:
            parentIsIgnored = true;
            break;
        default:
            break;
    }
    if (parentIsIgnored) {
        return new DynamicReference(new ReferenceIdent(ident(), ident), rowGranularity(), ColumnPolicy.IGNORED, position);
    }
    return new DynamicReference(new ReferenceIdent(ident(), ident), rowGranularity(), position);
}
Also used : ColumnIdent(io.crate.metadata.ColumnIdent) ColumnPolicy(io.crate.sql.tree.ColumnPolicy) VoidReference(io.crate.expression.symbol.VoidReference) ColumnUnknownException(io.crate.exceptions.ColumnUnknownException) IndexReference(io.crate.metadata.IndexReference) DynamicReference(io.crate.expression.symbol.DynamicReference) GeneratedReference(io.crate.metadata.GeneratedReference) Reference(io.crate.metadata.Reference) VoidReference(io.crate.expression.symbol.VoidReference) DynamicReference(io.crate.expression.symbol.DynamicReference) CheckConstraint(io.crate.sql.tree.CheckConstraint) ReferenceIdent(io.crate.metadata.ReferenceIdent) Nullable(javax.annotation.Nullable)

Aggregations

ColumnUnknownException (io.crate.exceptions.ColumnUnknownException)12 ColumnIdent (io.crate.metadata.ColumnIdent)10 Reference (io.crate.metadata.Reference)5 DynamicReference (io.crate.expression.symbol.DynamicReference)3 Symbol (io.crate.expression.symbol.Symbol)3 GeneratedReference (io.crate.metadata.GeneratedReference)3 DataType (io.crate.types.DataType)3 Map (java.util.Map)3 DynamicReference (io.crate.analyze.symbol.DynamicReference)2 Field (io.crate.analyze.symbol.Field)2 AmbiguousColumnException (io.crate.exceptions.AmbiguousColumnException)2 ColumnValidationException (io.crate.exceptions.ColumnValidationException)2 DocTableInfo (io.crate.metadata.doc.DocTableInfo)2 QualifiedName (io.crate.sql.tree.QualifiedName)2 QualifiedNameReference (io.crate.sql.tree.QualifiedNameReference)2 ExpressionAnalysisContext (io.crate.analyze.expressions.ExpressionAnalysisContext)1 RelationUnknown (io.crate.exceptions.RelationUnknown)1 VoidReference (io.crate.expression.symbol.VoidReference)1 IndexReference (io.crate.metadata.IndexReference)1 ReferenceIdent (io.crate.metadata.ReferenceIdent)1