@Override protected EntityReader getReader() { if (reader == null) { reader = new CassandraEntityReader(kunderaQuery, kunderaMetadata); } return reader; }
@Override public boolean hasNext() { if (checkOnFetchSize()) { onCheckRelation(); if (!checkOnEmptyResult()) { scrollComplete = true; return false; } return true; } return false; }
/** * Replace and append limit. * * @param parsedQuery * parsed cql3 query. * * @return cql3 query appended with limit clause. */ private String replaceAndAppendLimit(String parsedQuery) { StringBuilder builder = new StringBuilder(parsedQuery); onLimit(builder); parsedQuery = builder.toString(); return parsedQuery; }
(MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); String query = appMetadata.getQuery(getJPAQuery()); boolean isNative = kunderaQuery.isNative(); m.getRelationNames(), isNative, query != null ? query : getJPAQuery()); } else if (!isNative && ((CassandraClientBase) client).isCql3Enabled(m)) { ls = ((CassandraClientBase) client).executeQuery(m.getEntityClazz(), m.getRelationNames(), isNative, onQueryOverCQL3(m, client, metaModel, m.getRelationNames())); } else { ls = populateUsingLucene(m, client, null, getKunderaQuery().getResult()); Map<Boolean, List<IndexClause>> ixClause = MetadataUtils.useSecondryIndex(((ClientBase) client).getClientMetadata()) ? prepareIndexClause(m, useInvertedIndex) : null; if (useInvertedIndex && !getKunderaQuery().getFilterClauseQueue().isEmpty()) { ls = ((CassandraEntityReader) getReader()).readFromIndexTable(m, client, ixClause); } else { ((CassandraEntityReader) getReader()).setConditions(ixClause); ls = reader.populateRelation(m, client, isSingleResult ? 1 : this.maxResult); return setRelationEntities(ls, client, m);
protected List findUsingLucene(EntityMetadata m, Client client) { MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(m.getPersistenceUnit()); boolean useInvertedIndex = CassandraIndexHelper.isInvertedIndexingApplicable(m, MetadataUtils.useSecondryIndex(((ClientBase) client).getClientMetadata())); Map<Boolean, List<IndexClause>> ixClause = prepareIndexClause(m, useInvertedIndex); List<Object> result = new ArrayList<Object>(); if (((CassandraClientBase) client).isCql3Enabled(m)) { result = ((CassandraClientBase) client).executeQuery(m.getEntityClazz(), m.getRelationNames(), false, onQueryOverCQL3(m, client, metaModel, m.getRelationNames())); } else { result = ((CassandraEntityReader) getReader()).handleFindByRange(m, client, result, ixClause, true, getColumnList(m, metaModel, getKunderaQuery().getResult(), null), isSingleResult ? 1 : this.maxResult); } return result; }
EntityMetadata m = getEntityMetadata(); Client client = m != null ? persistenceDelegeator.getClient(m) : persistenceDelegeator.getClient(kunderaQuery.getPersistenceUnit()); ApplicationMetadata appMetadata = kunderaMetadata.getApplicationMetadata(); String query = appMetadata.getQuery(getJPAQuery()); query != null ? query : getJPAQuery()); } else if (kunderaQuery.isDeleteUpdate()) { if (!isQueryConvertibleToCQL(kunderaQuery)) { return onUpdateDeleteEvent(); } else { query = null; if (kunderaQuery.isUpdateClause()) { query = createUpdateQuery(kunderaQuery); } else { query = createDeleteQuery(kunderaQuery);
@Override public E next() { if (current != null && checkOnEmptyResult() && current.equals(results.get(results.size() - 1))) { hasNext(); } if (scrollComplete) { throw new NoSuchElementException("Nothing to scroll further for:" + entityMetadata.getEntityClazz()); } E lastFetchedEntity = getEntity(results.get(results.size() - 1)); start = lastFetchedEntity != null ? idValueInByteArr() : null; current = getEntity(results.get(results.size() - 1)); return current; }
@Override public Iterator iterate() { if (kunderaQuery.isNative()) { throw new UnsupportedOperationException("Iteration not supported over native queries"); } EntityMetadata m = getEntityMetadata(); Client client = persistenceDelegeator.getClient(m); externalProperties = ((CassandraClientBase) client).getExternalProperties(); if (!MetadataUtils.useSecondryIndex(((ClientBase) client).getClientMetadata())) { throw new UnsupportedOperationException("Scrolling over cassandra is unsupported for lucene queries"); } return new ResultIterator(this, m, persistenceDelegeator.getClient(m), this.getReader(), getFetchSize() != null ? getFetchSize() : this.maxResult, kunderaMetadata); }
final String tokenCondition = prepareNext(translator, queryWithoutLimit); if (query.getKunderaQuery().getFilterClauseQueue().isEmpty()) String replaceQuery = replaceAndAppendLimit(builder.toString()); builder.replace(0, builder.toString().length(), replaceQuery); translator.buildFilteringClause(builder); return checkOnEmptyResult() && tokenCondition == null ? null : builder.toString();
PersistenceDelegator pd = getPersistenceDelegator(em, getpd); KunderaMetadata kunderaMetadata = ((EntityManagerFactoryImpl) emf).getKunderaMetadataInstance(); CassQuery query = new CassQuery(kunderaQuery, pd, kunderaMetadata); query.setMaxResults(maxResult); if(ttl != null) query.applyTTL(ttl); String cqlQuery = query.createUpdateQuery(kunderaQuery); return cqlQuery;
/** * * @param kunderaQuery * @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 (Exception e) { log.error("Error during execution, Caused by : ",e.getMessage()); } getpd.setAccessible(true); PersistenceDelegator pd = getPersistenceDelegator(em, getpd); 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; }
/** * on check relation event, invokes populate entities and set relational * entities, in case relations are present. */ private void onCheckRelation() { try { results = populateEntities(entityMetadata, client); if (entityMetadata.isRelationViaJoinTable() || (entityMetadata.getRelationNames() != null && !(entityMetadata.getRelationNames().isEmpty()))) { query.setRelationalEntities(results, client, entityMetadata); } } catch (Exception e) { throw new PersistenceException("Error while scrolling over results, Caused by :.", e); } }
/** * Id value in byte arr. * * @return the byte[] */ private byte[] idValueInByteArr() { Object entity = results.get(results.size() - 1); Object id = PropertyAccessorHelper.getId(entity, entityMetadata); String idName = ((AbstractAttribute) entityMetadata.getIdAttribute()).getJPAColumnName(); Class idClazz = ((AbstractAttribute) entityMetadata.getIdAttribute()).getBindableJavaType(); MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel( entityMetadata.getPersistenceUnit()); EmbeddableType keyObj = null; ByteBuffer bytes = null; // if the key attribute is composite if (metaModel.isEmbeddable(entityMetadata.getIdAttribute().getBindableJavaType())) { keyObj = metaModel.embeddable(entityMetadata.getIdAttribute().getBindableJavaType()); Field embeddedField = getPartitionKeyField(); Attribute partitionKey = keyObj.getAttribute(embeddedField.getName()); Object partitionKeyValue = PropertyAccessorHelper.getObject(id, (Field) partitionKey.getJavaMember()); bytes = CassandraUtilities.toBytes(partitionKeyValue, (Field) partitionKey.getJavaMember()); } else { bytes = query.getBytesValue(idName, entityMetadata, id); } return bytes.array(); }
/** * Adds the where clause. * * @param builder * the builder */ void addWhereClause(StringBuilder builder) { if (!getKunderaQuery().getFilterClauseQueue().isEmpty()) { builder.append(CQLTranslator.ADD_WHERE_CLAUSE); } }
String columnName, boolean useToken) { if (value.isEmpty()) { isPresent = appendIn(builder, translator, columnName); builder.append("( )"); builder.append(" AND "); isPresent = appendInClause(builder, translator, value, idAttributeColumn.getBindableJavaType(), columnName, isPresent); } else {
/** * Parse and create update query. * * @param kunderaQuery kundera query. * @param emf entity manager factory. * @param em entity manager * @param puName persistence unit name. * @param entityClass entity class. * @param maxResult max result. * * @return parsed query. */ private String parseAndCreateUpdateQuery(KunderaQuery kunderaQuery, EntityManagerFactory emf, EntityManager em, String puName, Class entityClass, Integer maxResult) { return parseAndCreateUpdateQuery(kunderaQuery, emf, em, puName, entityClass, maxResult, null); } /**
/** * Append in clause. * * @param queryBuilder * the query builder * @param translator * the translator * @param value * the value * @param fieldClazz * the field clazz * @param columnName * the column name * @param isPresent * the is present * @return true, if successful */ private boolean appendInClause(StringBuilder queryBuilder, CQLTranslator translator, List<Object> value, Class fieldClazz, String columnName, boolean isPresent) { isPresent = appendIn(queryBuilder, translator, columnName); queryBuilder.append("("); for (Object objectvalue : value) { translator.appendValue(queryBuilder, fieldClazz, objectvalue, isPresent, false); queryBuilder.append(", "); } queryBuilder.deleteCharAt(queryBuilder.lastIndexOf(", ")); queryBuilder.append(") "); queryBuilder.append(" AND "); return isPresent; }
@Override public void initialize(Map<String, Object> externalProperty) { reader = new CassandraEntityReader(kunderaMetadata); initializePropertyReader(); setExternalProperties(externalProperty); configuration = new CassandraHostConfiguration(externalProperties, CassandraPropertyReader.csmd, getPersistenceUnit(), kunderaMetadata); // initialize timestamp generator. initializeTimestampGenerator(externalProperty); }
@Override public void initialize(Map<String, Object> externalProperty) { reader = new CassandraEntityReader(kunderaMetadata); initializePropertyReader(); // setExternalProperties(externalProperty); String loadBalancingPolicyName = CassandraPropertyReader.csmd != null ? CassandraPropertyReader.csmd .getConnectionProperties().getProperty(Constants.LOADBALANCING_POLICY) : null; initializeLoadBalancer(loadBalancingPolicyName); configuration = new CassandraHostConfiguration(externalProperties, CassandraPropertyReader.csmd, getPersistenceUnit(), kunderaMetadata); hostRetryService = new CassandraRetryService(configuration, this); // initialize timestamp generator. initializeTimestampGenerator(externalProperty); }
@Override public void initialize(Map<String, Object> externalProperty) { reader = new CassandraEntityReader(kunderaMetadata); initializePropertyReader(); setExternalProperties(externalProperty); String loadBalancingPolicyName = CassandraPropertyReader.csmd != null ? CassandraPropertyReader.csmd .getConnectionProperties().getProperty(Constants.LOADBALANCING_POLICY) : null; initializeLoadBalancer(loadBalancingPolicyName); configuration = new CassandraHostConfiguration(externalProperties, CassandraPropertyReader.csmd, getPersistenceUnit(), kunderaMetadata); hostRetryService = new CassandraRetryService(configuration, this); // initialize timestamp generator. initializeTimestampGenerator(externalProperty); }