blob: 0d2a908201f526aa487dd4cad926d308f53a04ba [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.atlas.query
import com.thinkaurelius.titan.core.TitanGraph
import org.apache.atlas.query.Expressions._
import org.slf4j.{Logger, LoggerFactory}
object QueryProcessor {
val LOG : Logger = LoggerFactory.getLogger("org.apache.atlas.query.QueryProcessor")
def evaluate(e: Expression, g: TitanGraph, gP : GraphPersistenceStrategies = GraphPersistenceStrategy1):
GremlinQueryResult = {
val e1 = validate(e)
val q = new GremlinTranslator(e1, gP).translate()
LOG.debug("Query: " + e1)
LOG.debug("Expression Tree:\n" + e1.treeString)
LOG.debug("Gremlin Query: " + q.queryStr)
new GremlinEvaluator(q, gP, g).evaluate()
}
def validate(e: Expression): Expression = {
val e1 = e.transformUp(new Resolver())
e1.traverseUp {
case x: Expression if !x.resolved =>
throw new ExpressionException(x, s"Failed to resolved expression $x")
}
/*
* trigger computation of dataType of expression tree
*/
e1.dataType
/*
* ensure fieldReferences match the input expression's dataType
*/
val e2 = e1.transformUp(FieldValidator)
val e3 = e2.transformUp(new Resolver())
e3.dataType
e3
}
}