/** * Internal method to change the wrapped query to a DataModifyQuery if * necessary. When created, the query is created as a DataReadQuery as it is * unknown if it is a SELECT or UPDATE. Note that this prevents the original * named query from every being prepared. */ protected void setAsSQLModifyQuery() { if (getDatabaseQueryInternal().isDataReadQuery()) { setAsDataModifyQuery(); } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (query.isDataReadQuery()) { DataModifyQuery newQuery = new DataModifyQuery(); newQuery.copyFromQuery(query); newQuery.setIsBatchExecutionSupported(((Boolean)valueToApply).booleanValue()); return newQuery; } else if (query.isModifyQuery()) { ((ModifyQuery)query).setIsBatchExecutionSupported(((Boolean)valueToApply).booleanValue()); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
/** * Prepare and validate. * Allow subclasses to override. */ public void prepare(DatabaseQuery query, AbstractSession session) throws QueryException { if (query.isReadAllQuery() && (!query.isReportQuery()) && query.shouldUseWrapperPolicy()) { setElementDescriptor(query.getDescriptor()); //make sure DataReadQuery points to this container policy } else if (query.isDataReadQuery()) { ((DataReadQuery)query).setContainerPolicy(this); } }
/** * Prepare and validate. * Allow subclasses to override. */ public void prepare(DatabaseQuery query, AbstractSession session) throws QueryException { if (query.isReadAllQuery() && (!query.isReportQuery()) && query.shouldUseWrapperPolicy()) { setElementDescriptor(query.getDescriptor()); //make sure DataReadQuery points to this container policy } else if (query.isDataReadQuery()) { ((DataReadQuery)query).setContainerPolicy(this); } }
/** * Prepare and validate. * Allow subclasses to override. */ public void prepare(DatabaseQuery query, AbstractSession session) throws QueryException { if (query.isReadAllQuery() && (!query.isReportQuery()) && query.shouldUseWrapperPolicy()) { setElementDescriptor(query.getDescriptor()); //make sure DataReadQuery points to this container policy } else if (query.isDataReadQuery()) { ((DataReadQuery)query).setContainerPolicy(this); } }
/** * INTERNAL: Answers if this query is an isolated query and must be * executed locally. */ protected boolean isIsolatedQuery(DatabaseQuery query) { query.checkDescriptor(this); if (query.isDataModifyQuery() || query.isDataReadQuery() || ((query.getDescriptor() != null) && query.getDescriptor().isIsolated()) || (query.isObjectBuildingQuery() && ((ObjectBuildingQuery)query).shouldUseExclusiveConnection())) { // For CR#4334 if in transaction stay on client session. // That way client's write accessor will be used for all queries. // This is to preserve transaction isolation levels. // also if this is an isolated class and we are in an isolated session //load locally. return true; } return false; }
/** * INTERNAL: Answers if this query is an isolated query and must be * executed locally. */ protected boolean isIsolatedQuery(DatabaseQuery query) { query.checkDescriptor(this); ClassDescriptor descriptor = query.getDescriptor(); if (query.isDataModifyQuery() || query.isDataReadQuery() || (descriptor != null && descriptor.getCachePolicy().isIsolated()) || (query.isObjectBuildingQuery() && ((ObjectBuildingQuery)query).shouldUseExclusiveConnection())) { // For CR#4334 if in transaction stay on client session. // That way client's write accessor will be used for all queries. // This is to preserve transaction isolation levels. // also if this is an isolated class and we are in an isolated session //load locally. return true; } return false; }
/** * INTERNAL: Answers if this query is an isolated query and must be * executed locally. */ protected boolean isIsolatedQuery(DatabaseQuery query) { query.checkDescriptor(this); ClassDescriptor descriptor = query.getDescriptor(); if (query.isDataModifyQuery() || query.isDataReadQuery() || (descriptor != null && descriptor.getCachePolicy().isIsolated()) || (query.isObjectBuildingQuery() && ((ObjectBuildingQuery)query).shouldUseExclusiveConnection())) { // For CR#4334 if in transaction stay on client session. // That way client's write accessor will be used for all queries. // This is to preserve transaction isolation levels. // also if this is an isolated class and we are in an isolated session //load locally. return true; } return false; }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (!((Boolean)valueToApply).booleanValue()) { if (query.isReadAllQuery()) { if (((ReadAllQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((ReadAllQuery) query).setContainerPolicy(ContainerPolicy.buildDefaultPolicy()); } } else if (query.isDataReadQuery()) { if (((DataReadQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((DataReadQuery) query).setContainerPolicy(ContainerPolicy.buildDefaultPolicy()); } } } else { if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((ReadAllQuery) query).useCursoredStream(); } } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((DataReadQuery) query).useCursoredStream(); } } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (!((Boolean)valueToApply).booleanValue()) { if (query.isReadAllQuery()) { if (((ReadAllQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((ReadAllQuery) query).setContainerPolicy(ContainerPolicy.buildDefaultPolicy()); } } else if (query.isDataReadQuery()) { if (((DataReadQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((DataReadQuery) query).setContainerPolicy(ContainerPolicy.buildDefaultPolicy()); } } } else { if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((ReadAllQuery) query).useScrollableCursor(); } } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((DataReadQuery) query).useScrollableCursor(); } } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } } return query; } }
/** * INTERNAL: * Return the results from executing the database query. * the arguments should be a database row with raw data values. */ public Object executeQuery(DatabaseQuery query, AbstractRecord row) throws DatabaseException { if (hasBroker()) { if (!((query.isDataModifyQuery() || query.isDataReadQuery()) && (query.getSessionName() == null))) { return getBroker().executeQuery(query, row); } } if (query == null) { throw QueryException.queryNotDefined(); } //CR#2272 log(SessionLog.FINEST, SessionLog.QUERY, "execute_query", query); //Make a call to the internal method with a retry count of 0. This will //initiate a retry call stack if required and supported. The separation between the //calling stack and the target method is made because the target method may call itself //recursively. return this.executeQuery(query, row, 0); }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { int value = (Integer)valueToApply; if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((ReadAllQuery) query).useScrollableCursor(); } ((ScrollableCursorPolicy)((ReadAllQuery) query).getContainerPolicy()).setResultSetType(value); } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((DataReadQuery) query).useScrollableCursor(); } ((ScrollableCursorPolicy)((DataReadQuery) query).getContainerPolicy()).setResultSetType(value); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { int value = (Integer)valueToApply; if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((ReadAllQuery) query).useScrollableCursor(); } ((ScrollableCursorPolicy)((ReadAllQuery) query).getContainerPolicy()).setResultSetConcurrency(value); } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isScrollableCursorPolicy()) { ((DataReadQuery) query).useScrollableCursor(); } ((ScrollableCursorPolicy)((DataReadQuery) query).getContainerPolicy()).setResultSetConcurrency(value); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (query.isDataReadQuery()) { if (valueToApply == ResultType.Map) { ((DataReadQuery)query).setResultType(DataReadQuery.MAP); } else if (valueToApply == ResultType.Array) { ((DataReadQuery)query).setResultType(DataReadQuery.ARRAY); } else if (valueToApply == ResultType.Attribute) { ((DataReadQuery)query).setResultType(DataReadQuery.ATTRIBUTE); } else if (valueToApply == ResultType.Value) { ((DataReadQuery)query).setResultType(DataReadQuery.VALUE); } } else if (query.isReportQuery()) { if (valueToApply == ResultType.Map) { ((ReportQuery)query).setReturnType(ReportQuery.ShouldReturnReportResult); } else if (valueToApply == ResultType.Array) { ((ReportQuery)query).setReturnType(ReportQuery.ShouldReturnArray); } else if (valueToApply == ResultType.Attribute) { ((ReportQuery)query).setReturnType(ReportQuery.ShouldReturnSingleAttribute); } else if (valueToApply == ResultType.Value) { ((ReportQuery)query).setReturnType(ReportQuery.ShouldReturnSingleValue); } } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isCursorPolicy()) { ((ReadAllQuery) query).useCursoredStream(); } ((CursorPolicy)((ReadAllQuery) query).getContainerPolicy()).setPageSize(QueryHintsHandler.parseIntegerHint(valueToApply, QueryHints.CURSOR_PAGE_SIZE)); } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isCursorPolicy()) { ((DataReadQuery) query).useCursoredStream(); } ((CursorPolicy)((DataReadQuery) query).getContainerPolicy()).setPageSize(QueryHintsHandler.parseIntegerHint(valueToApply, QueryHints.CURSOR_PAGE_SIZE)); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((ReadAllQuery) query).useCursoredStream(); } ((CursoredStreamPolicy)((ReadAllQuery) query).getContainerPolicy()).setInitialReadSize(QueryHintsHandler.parseIntegerHint(valueToApply, QueryHints.CURSOR_INITIAL_SIZE)); } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((DataReadQuery) query).useCursoredStream(); } ((CursoredStreamPolicy)((DataReadQuery) query).getContainerPolicy()).setInitialReadSize(QueryHintsHandler.parseIntegerHint(valueToApply, QueryHints.CURSOR_INITIAL_SIZE)); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
DatabaseQuery applyToDatabaseQuery(Object valueToApply, DatabaseQuery query, ClassLoader loader, AbstractSession activeSession) { if (query.isReadAllQuery()) { if (!((ReadAllQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((ReadAllQuery) query).useCursoredStream(); } ((CursoredStreamPolicy)((ReadAllQuery) query).getContainerPolicy()).setSizeQuery(new ValueReadQuery((String)valueToApply)); } else if (query.isDataReadQuery()) { if (!((DataReadQuery) query).getContainerPolicy().isCursoredStreamPolicy()) { ((DataReadQuery) query).useCursoredStream(); } ((CursoredStreamPolicy)((ReadAllQuery) query).getContainerPolicy()).setSizeQuery(new ValueReadQuery((String)valueToApply)); } else { throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-wrong-type-for-query-hint",new Object[]{getQueryId(query), name, getPrintValue(valueToApply)})); } return query; } }
if (isSimpleXMLFormat() && query.isDataReadQuery()) { ((DataReadQuery) query).setResultType(DataReadQuery.MAP);
/** * INTERNAL: * Return the results from executing the database query. * the arguments should be a database row with raw data values. */ public Object executeQuery(DatabaseQuery query, AbstractRecord row) throws DatabaseException { if (hasBroker()) { if (!((query.isDataModifyQuery() || query.isDataReadQuery()) && (query.getSessionName() == null))) { return getBroker().executeQuery(query, row); } } if (query == null) { throw QueryException.queryNotDefined(); } // Check for disabled native queries. if (query.isUserDefinedSQLCall() && query.isSQLCallQuery() && ! query.isJPQLCallQuery()) { if (! query.shouldAllowNativeSQLQuery(getProject().allowNativeSQLQueries())) { // If the session/project says no to SQL queries and the database // query doesn't ask to bypass this decision then throw an exception. throw QueryException.nativeSQLQueriesAreDisabled(query); } } //CR#2272 log(SessionLog.FINEST, SessionLog.QUERY, "execute_query", query); //Make a call to the internal method with a retry count of 0. This will //initiate a retry call stack if required and supported. The separation between the //calling stack and the target method is made because the target method may call itself //recursively. return this.executeQuery(query, row, 0); }
if (!((query.isDataModifyQuery() || query.isDataReadQuery()) && (query.getSessionName() == null))) { return getBroker().executeQuery(query, row);