/** INTERNAL: Answers the session to be used for the given query. */ protected AbstractSession getSessionForQuery(DatabaseQuery query) { if (query.hasSessionName()) { return getSessionForName(query.getSessionName()); } Class queryClass; if (query.getDescriptor() != null) { queryClass = query.getDescriptor().getJavaClass(); } else { queryClass = query.getReferenceClass(); if (queryClass == null) { throw QueryException.unnamedQueryOnSessionBroker(query); } } return getSessionForClass(queryClass); }
public void occurred(String operationName, DatabaseQuery query) { if (this.profileWeight < SessionProfiler.NORMAL) { return; } occurred(operationName); occurred( COUNTER + query.getMonitorName() + ":" + operationName.substring(COUNTER.length(), operationName.length())); }
/** INTERNAL: Start the operation timing. */ public void startOperationProfile(String operationName, DatabaseQuery query, int weight) { if (this.profileWeight < weight) { return; } startOperationProfile(operationName); startOperationProfile( TIMER + query.getMonitorName() + ":" + operationName.substring(TIMER.length(), operationName.length())); }
/** INTERNAL: Prepare the receiver for execution in a session. */ protected void prepare() throws QueryException { if (getObject() != null) { // Prepare can be called without the object set yet. checkDescriptor(getObject(), getSession()); setObject(getDescriptor().getObjectBuilder().unwrapObject(getObject(), getSession())); } super.prepare(); // It will only get to prepare if check database if required. getQueryMechanism().prepareDoesExist(getDoesExistField()); }
/** * INTERNAL: Prepare the query from the prepared query. This allows a dynamic query to prepare * itself directly from a prepared query instance. This is used in the JPQL parse cache to allow * preparsed queries to be used to prepare dynamic queries. This only copies over properties that * are configured through JPQL. */ public void prepareFromQuery(DatabaseQuery query) { super.prepareFromQuery(query); if (query.isReadAllQuery()) { ReadAllQuery readQuery = (ReadAllQuery) query; this.containerPolicy = readQuery.containerPolicy; if (readQuery.hasHierarchicalExpressions()) { this.orderSiblingsByExpressions = readQuery.getOrderSiblingsByExpressions(); this.connectByExpression = readQuery.getConnectByExpression(); this.startWithExpression = readQuery.getStartWithExpression(); } if (readQuery.hasBatchReadAttributes()) { this.batchReadAttributeExpressions = readQuery.batchReadAttributeExpressions; this.batchReadMappingQueries = readQuery.batchReadMappingQueries; this.batchReadAttributes = readQuery.batchReadAttributes; } } }
/** INTERNAL: Monitoring is done on the endOperation only. */ public Object profileExecutionOfQuery(DatabaseQuery query, Record row, AbstractSession session) { if (this.profileWeight < SessionProfiler.HEAVY) { return session.internalExecuteQuery(query, (AbstractRecord) row); } startOperationProfile(TIMER + query.getMonitorName()); startOperationProfile(TIMER + query.getClass().getSimpleName()); occurred(COUNTER + query.getClass().getSimpleName()); occurred(COUNTER + query.getMonitorName()); try { return session.internalExecuteQuery(query, (AbstractRecord) row); } finally { endOperationProfile(TIMER + query.getMonitorName()); endOperationProfile(TIMER + query.getClass().getSimpleName()); checkDumpTime(); } }
/** INTERNAL: Prepare the receiver for execution in a session. */ public void prepareForExecution() throws QueryException { super.prepareForExecution(); if (getObject() == null) { throw QueryException.objectToModifyNotSpecified(this); } setObject(this.descriptor.getObjectBuilder().unwrapObject(getObject(), getSession())); if (this.descriptor == null) { setDescriptor(getSession().getDescriptor(getObject().getClass())); } if (getPrimaryKey() == null) { setPrimaryKey( this.descriptor .getObjectBuilder() .extractPrimaryKeyFromObject(getObject(), getSession())); } if ((getTranslationRow() == null) || (getTranslationRow().isEmpty())) { setTranslationRow( this.descriptor.getObjectBuilder().buildRowForTranslation(getObject(), getSession())); } }