private Optional<DatabaseRelationDefinition> getDatabaseRelationByName(DBMetadata dbMetadata, AtomPredicate predicate) { RelationID relationId = Relation2Predicate.createRelationFromPredicateName(dbMetadata.getQuotedIDFactory(), predicate); return Optional.ofNullable(dbMetadata.getRelation(relationId)) /** * Here we only consider DB relations */ .filter(r -> r instanceof DatabaseRelationDefinition) .map(r -> (DatabaseRelationDefinition) r); } }
@Override public boolean isVariableNullable(IntermediateQuery query, Variable variable) { if (!getVariables().contains(variable)) throw new IllegalArgumentException("The variable " + variable + " is not projected by " + this); DBMetadata metadata = query.getDBMetadata(); DataAtom atom = getProjectionAtom(); RelationID relationId = Relation2Predicate.createRelationFromPredicateName( metadata.getQuotedIDFactory(), atom.getPredicate()); RelationDefinition relation = metadata.getRelation(relationId); if (relation == null) throw new MissingRelationForExtensionalDataNodeException("Bug: required relation for " + this + " not found"); ImmutableList<? extends VariableOrGroundTerm> arguments = atom.getArguments(); // NB: DB column indexes start at 1. return IntStream.range(1, arguments.size() + 1) .filter(i -> arguments.get(i - 1).equals(variable)) .mapToObj(relation::getAttribute) .allMatch(Attribute::canNull); }
Optional<RelationDefinition> td = Optional.ofNullable(metadata.getRelation(tableId));
Optional<RelationDefinition> td = Optional.ofNullable(metadata.getRelation(tableId));
Optional<RelationDefinition> td = Optional.ofNullable(metadata.getRelation(tableId));
RelationDefinition td = metadata.getRelation(tableId);
RelationDefinition td = metadata.getRelation(tableId);