Package com.impetus.client.cassandra.query

Source Code of com.impetus.client.cassandra.query.JpaQueryTest

/*******************************************************************************
* * Copyright 2014 Impetus Infotech.
*  *
*  * Licensed 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 com.impetus.client.cassandra.query;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.metamodel.Metamodel;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.client.crud.PersonCassandra;
import com.impetus.kundera.client.Client;
import com.impetus.kundera.client.cassandra.persistence.CassandraCli;
import com.impetus.kundera.metadata.KunderaMetadataManager;
import com.impetus.kundera.metadata.model.EntityMetadata;
import com.impetus.kundera.metadata.model.MetamodelImpl;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;
import com.impetus.kundera.persistence.EntityManagerImpl;
import com.impetus.kundera.persistence.PersistenceDelegator;
import com.impetus.kundera.query.KunderaQuery;
import com.impetus.kundera.query.KunderaQueryParser;
import com.vividsolutions.jts.util.Assert;

/*
* @author shaheed hussain
* testcase to test the exception which is thrown if user uses any of the interclause or intraclause value in his data
*/
public class JpaQueryTest {

  /** The Constant logger. */
  private static final Logger logger = LoggerFactory
      .getLogger(JpaQueryTest.class);

  @Before
  public void setUp() throws Exception {
    CassandraCli.cassandraSetUp();
    CassandraCli.createKeySpace("KunderaExamples");
  }

  @After
  public void tearDown() throws Exception {
    CassandraCli.dropKeySpace("KunderaExamples");
   
  }

  /**
   * @throws Exception
   */
  @Test
  public void test() throws Exception {

    String pu = "secIdxCassandraTest";
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(pu);
    EntityManager em = emf.createEntityManager();

    String queryString = " select p from PersonCassandra p where p.age in ('in vivek','in kk','AND shaheed') OR p.personName in ('vivek','kk')";
    String cqlQuery = parseAndCreateCqlQuery(
        getQueryObject(queryString, emf), emf, em, pu,
        PersonCassandra.class, 200);
    String expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"AGE\" IN (in vivek, inkk, AND shaheed) AND \"PERSON_NAME\" IN ('vivek', 'kk') LIMIT 200  ALLOW FILTERING";
    // Assert.equals(cqlQuery,expectedQuery); //vivek is fixing for extra
    // quotes in 'in' clause

    queryString = "Select p from PersonCassandra p where p.personName='sam''s and joseph''s' and p.age=80 ";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);

    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'sam''s and joseph''s' AND \"AGE\" = 80 LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    queryString = "Select p from PersonCassandra p where p.personName = 'ram and wwe' and p.age='10'";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'ram and wwe' AND \"AGE\" = 10 LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    queryString = "Select p from PersonCassandra p where p.personName = 'Like-==' ";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'Like-==' LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    queryString = "Select p from PersonCassandra p where p.personName = '==1'";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = '==1' LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    queryString = "Select p from PersonCassandra p where p.personName = 'Like >= NOT IN'";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'Like >= NOT IN' LIMIT 200  ALLOW FILTERING";

    queryString = "Select p from PersonCassandra p where p.personName = 'in= NOT IN >=set >< <>'";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'in= NOT IN >=set >< <>' LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    queryString = "Select p from PersonCassandra p where p.personName = 'in= between. >=set anand >< or <>'";
    cqlQuery = parseAndCreateCqlQuery(getQueryObject(queryString, emf),
        emf, em, pu, PersonCassandra.class, 200);
    expectedQuery = "SELECT * FROM \"PERSONCASSANDRA\" WHERE \"PERSON_NAME\" = 'in= between. >=set anand >< or <>' LIMIT 200  ALLOW FILTERING";
    Assert.equals(cqlQuery, expectedQuery);

    em.close();
    emf.close();

  }

  /**
   * @param queryString
   * @param emf
   * @return
   */
  private KunderaQuery getQueryObject(String queryString,
      EntityManagerFactory emf) {
    Method getpostParsingInit = null;
    try {
      getpostParsingInit = KunderaQuery.class
          .getDeclaredMethod("postParsingInit");
    } catch (SecurityException e) {
      logger.warn(e.getMessage());
    } catch (NoSuchMethodException e) {
      logger.warn(e.getMessage());
    }
    getpostParsingInit.setAccessible(true);

    KunderaMetadata kunderaMetadata = ((EntityManagerFactoryImpl) emf)
        .getKunderaMetadataInstance();
    KunderaQuery kunderaQuery = new KunderaQuery(queryString,
        kunderaMetadata);
    KunderaQueryParser queryParser = new KunderaQueryParser(kunderaQuery);
    queryParser.parse();
    try {
      getpostParsingInit.invoke(kunderaQuery);
    } catch (IllegalArgumentException e) {
      logger.warn(e.getMessage());
    } catch (IllegalAccessException e) {
      logger.warn(e.getMessage());
    } catch (InvocationTargetException e) {
      logger.warn(e.getMessage());
    }

    return kunderaQuery;
  }

  /**
   * @param kunderaQuery
   * @param emf
   * @param em
   * @param puName
   * @param entityClass
   * @param maxResult
   * @return
   */
  private String parseAndCreateCqlQuery(KunderaQuery kunderaQuery,
      EntityManagerFactory emf, EntityManager em, String puName,
      Class entityClass, Integer maxResult) {
    Method getpd = null;
    try {
      getpd = EntityManagerImpl.class
          .getDeclaredMethod("getPersistenceDelegator");
    } catch (SecurityException e) {
      logger.warn(e.getMessage());
    } catch (NoSuchMethodException e) {
      logger.warn(e.getMessage());
    }
    getpd.setAccessible(true);
    PersistenceDelegator pd = null;
    try {
      pd = (PersistenceDelegator) getpd.invoke(em);
    } catch (IllegalArgumentException e) {
      logger.warn(e.getMessage());
    } catch (IllegalAccessException e) {
      logger.warn(e.getMessage());
    } catch (InvocationTargetException e) {
      logger.warn(e.getMessage());
    }

    KunderaMetadata kunderaMetadata = ((EntityManagerFactoryImpl) emf)
        .getKunderaMetadataInstance();

    CassQuery query = new CassQuery(kunderaQuery, pd, kunderaMetadata);
    query.setMaxResults(maxResult);

    EntityMetadata metadata = KunderaMetadataManager.getEntityMetadata(
        kunderaMetadata, entityClass);
    Metamodel metaModel = KunderaMetadataManager.getMetamodel(
        kunderaMetadata, puName);

    Client<CassQuery> client = pd.getClient(metadata);

    String cqlQuery = query.onQueryOverCQL3(metadata, client,
        (MetamodelImpl) metaModel, metadata.getRelationNames());
    return cqlQuery;

  }
}
TOP

Related Classes of com.impetus.client.cassandra.query.JpaQueryTest

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.