                 }
             }
             guard let first = branches.first else {
-                throw QueryPlanError.invalidChild
+                return TablePlan(columns: [], rows: [])
             }
             return branches.dropFirst().reduce(first) { UnionPlan(lhs: $0, rhs: $1) }
         case let .triple(t):

        self.dataset = dataset
        self.evaluator = ExpressionEvaluator(base: base)
        self.freshCounter = sequence(first: 1) { $0 + 1 }
    }
    
    public func freshVariable() -> Node {

    }

    public func plan(algebra: Algebra, activeGraph: Term) throws -> QueryPlan {
        if allowStoreOptimizedPlans {
            if let ps = store as? PlanningQuadStore {
                do {
                    if let p = try ps.plan(algebra: algebra, activeGraph: activeGraph, dataset: dataset) {
                        return p
                    }
                } catch {}
            }
        }
        
        switch algebra {
