/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html */ /** * The hibernate-semantic-query project (or SQM for short) aims to * define a reusable "black box" for HQL interpretation. HQL is a * super-set of JPA's JPQL language, therefore this project can also * interpret JPQL queries by definition. * <p/> * Main contact point for semantic query interpretation is * {@link org.hibernate.query.sqm.produce.spi.SemanticQueryProducer}. * <p/> * Once you have received a {@link org.hibernate.query.sqm.tree.SqmStatement} from * SemanticQueryInterpreter you can:<ul> * <li> * "Split" it (if it is a {@link org.hibernate.query.sqm.tree.SqmSelectStatement}) * using {@link org.hibernate.query.sqm.consume.spi.QuerySplitter} * </li> * <li> * Create a walker/visitor for it using {@link org.hibernate.query.sqm.consume.spi.BaseSemanticQueryWalker} * </li> * </ul> * <p/> * NOTE: the choice to prefix all SQM AST node class names with <b>Sqm</b> was * made to help make consumers easier to write - consumers are likely to * have classes with the same purpose in their tree (e.g. the notion of a * "from clause"). But if both projects define a class named {@code FromClause} * then the consumer would have to fully qualify one reference to distinguish. * That makes for overly long code. Prefixing the names of classes from this * project alleviates that problem. */ package org.hibernate.sqm;