private FromElement evaluateFromElementPath(String path, String classAlias) throws SemanticException { ASTFactory factory = fromClause.getASTFactory(); FromReferenceNode pathNode = (FromReferenceNode) PathHelper.parsePath(path, factory); pathNode.recursiveResolve( FromReferenceNode.ROOT_LEVEL, // This is the root level node. false, // Generate an explicit from clause at the root. classAlias, null); if (pathNode.getImpliedJoin() != null) { return pathNode.getImpliedJoin(); } else { return pathNode.getFromElement(); } }
private void validateLhs(FromReferenceNode lhs) { // make sure the lhs is "assignable"... if (!lhs.isResolved()) { throw new UnsupportedOperationException("cannot validate assignablity of unresolved node"); } if (lhs.getDataType().isCollectionType()) { throw new QueryException("collections not assignable in update statements"); } else if (lhs.getDataType().isComponentType()) { throw new QueryException("Components currently not assignable in update statements"); } else if (lhs.getDataType().isEntityType()) { // currently allowed... } // TODO : why aren't these the same? if (lhs.getImpliedJoin() != null || lhs.getFromElement().isImplied()) { throw new QueryException("Implied join paths are not assignable in update statements"); } }