001/* 002 * (C) Copyright 2006-2016 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Nuxeo - initial API and implementation 018 */ 019package org.nuxeo.ecm.core.query.sql; 020 021import java.io.Reader; 022import java.io.StringReader; 023 024import org.nuxeo.common.utils.ExceptionUtils; 025import org.nuxeo.ecm.core.query.QueryParseException; 026import org.nuxeo.ecm.core.query.sql.model.SQLQuery; 027import org.nuxeo.ecm.core.query.sql.parser.Scanner; 028import org.nuxeo.ecm.core.query.sql.parser.parser; 029 030/** 031 * @author <a href="mailto:[email protected]">Bogdan Stefanescu</a> 032 */ 033public final class SQLQueryParser { 034 035 // Utility class 036 private SQLQueryParser() { 037 } 038 039 public static SQLQuery parse(Reader reader) throws QueryParseException { 040 try { 041 Scanner scanner = new Scanner(reader); 042 parser parser = new parser(scanner); 043 return (SQLQuery) parser.parse().value; 044 } catch (QueryParseException e) { 045 throw e; 046 } catch (Exception e) { // stupid CUPS API throws Exception 047 throw new QueryParseException(ExceptionUtils.runtimeException(e)); 048 } 049 } 050 051 public static SQLQuery parse(String string) throws QueryParseException { 052 SQLQuery query = parse(new StringReader(string)); 053 query.setQueryString(string); 054 return query; 055 } 056 057}