@@ -0,0 +1,2630 @@
+/*%0A// Licensed to Julian Hyde under one or more contributor license%0A// agreements. See the NOTICE file distributed with this work for%0A// additional information regarding copyright ownership.%0A//%0A// Julian Hyde licenses this file to you under the Apache License,%0A// Version 2.0 (the %22License%22); you may not use this file except in%0A// compliance with the License. You may obtain a copy of the License at:%0A//%0A// http://www.apache.org/licenses/LICENSE-2.0%0A//%0A// Unless required by applicable law or agreed to in writing, software%0A// distributed under the License is distributed on an %22AS IS%22 BASIS,%0A// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A// See the License for the specific language governing permissions and%0A// limitations under the License.%0A*/%0Apackage net.hydromatic.linq4j;%0A%0Aimport net.hydromatic.linq4j.expressions.Expression;%0A%0Aimport java.lang.reflect.Type;%0A%0A/**%0A * Partial implementation of %7B@link QueryProvider%7D.%0A *%0A * %3Cp%3EDerived class needs to implement %7B@link #executeQuery%7D.%3C/p%3E%0A *%0A * @author jhyde%0A */%0Apublic abstract class QueryProviderImpl implements QueryProvider %7B%0A    /**%0A     * Creates a QueryProviderImpl.%0A     */%0A    public QueryProviderImpl() %7B%0A        super();%0A    %7D%0A%0A    public %3CT%3E Queryable%3CT%3E createQuery(%0A        Expression expression,%0A        Class%3CT%3E rowType)%0A    %7B%0A        return new QueryableImpl%3CT%3E(this, rowType, expression);%0A    %7D%0A%0A    public %3CT%3E Queryable%3CT%3E createQuery(%0A        Expression expression,%0A        Type rowType)%0A    %7B%0A        return new QueryableImpl%3CT%3E(this, rowType, expression);%0A    %7D%0A%0A    public %3CT%3E T execute(Expression expression, Class%3CT%3E type) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    public %3CT%3E T execute(Expression expression, Type type) %7B%0A        throw new UnsupportedOperationException();%0A    %7D%0A%0A    /**%0A     * Executes a queryable, and returns an enumerator over the%0A     * rows that it yields.%0A     *%0A     * @param queryable Queryable%0A     * @param %3CT%3E Element type%0A     * @return Enumerator over rows%0A     */%0A    protected abstract %3CT%3E Enumerator%3CT%3E executeQuery(%0A        QueryableImpl%3CT%3E queryable);%0A%0A    /**%0A     * Binds an expression to this query provider.%0A     */%0A    public static class QueryableImpl%3CT%3E%0A        extends Extensions.AbstractQueryable2%3CT%3E%0A    %7B%0A        public QueryableImpl(%0A            QueryProviderImpl provider, Type elementType, Expression expression)%0A        %7B%0A            super(provider, elementType, expression);%0A        %7D%0A%0A        public Enumerator%3CT%3E enumerator() %7B%0A            return ((QueryProviderImpl) provider).executeQuery(this);%0A        %7D%0A    %7D%0A%7D%0A%0A// End QueryProviderImpl.java%0A

Add class QueryProviderImpl.