Package org.hibernate.ogm.datastore.mongodb.query.parsing.impl

Source Code of org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService

/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* 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>.
*/
package org.hibernate.ogm.datastore.mongodb.query.parsing.impl;

import java.util.Map;

import org.hibernate.SessionFactory;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.hql.QueryParser;
import org.hibernate.hql.ast.spi.EntityNamesResolver;
import org.hibernate.ogm.datastore.mongodb.logging.impl.Log;
import org.hibernate.ogm.datastore.mongodb.logging.impl.LoggerFactory;
import org.hibernate.ogm.query.spi.BaseQueryParserService;
import org.hibernate.ogm.query.spi.QueryParserService;
import org.hibernate.ogm.query.spi.QueryParsingResult;
import org.hibernate.ogm.service.impl.SessionFactoryEntityNamesResolver;

import com.mongodb.DBObject;

/**
* A {@link QueryParserService} implementation which creates MongoDB queries in form of {@link DBObject}s.
*
* @author Gunnar Morling
*/
public class MongoDBBasedQueryParserService extends BaseQueryParserService {

  private static final Log log = LoggerFactory.getLogger();

  private volatile SessionFactoryEntityNamesResolver entityNamesResolver;

  @Override
  public QueryParsingResult parseQuery(SessionFactoryImplementor sessionFactory, String queryString, Map<String, Object> namedParameters) {
    QueryParser queryParser = new QueryParser();
    MongoDBProcessingChain processingChain = createProcessingChain( sessionFactory, unwrap( namedParameters ) );

    MongoDBQueryParsingResult result = queryParser.parseQuery( queryString, processingChain );
    log.createdQuery( queryString, result );

    return result;
  }

  @Override
  public QueryParsingResult parseQuery(SessionFactoryImplementor sessionFactory, String queryString) {
    throw new UnsupportedOperationException( "MongoDB does not support parameterized queries. Parameter values " +
        "must be passed to the query parser." );
  }

  @Override
  public boolean supportsParameters() {
    return false;
  }

  private MongoDBProcessingChain createProcessingChain(SessionFactoryImplementor sessionFactory, Map<String, Object> namedParameters) {
    EntityNamesResolver entityNamesResolver = getDefinedEntityNames( sessionFactory );

    return new MongoDBProcessingChain(
        sessionFactory,
        entityNamesResolver,
        namedParameters );
  }

  private EntityNamesResolver getDefinedEntityNames(SessionFactory sessionFactory) {
    if ( entityNamesResolver == null ) {
      entityNamesResolver = new SessionFactoryEntityNamesResolver( sessionFactory );
    }
    return entityNamesResolver;
  }
}
TOP

Related Classes of org.hibernate.ogm.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.