/** * INTERNAL: * Certain key mappings favor different types of selection query. Return the appropriate * type of selectionQuery * @return */ public ReadQuery buildSelectionQueryForDirectCollectionKeyMapping(ContainerPolicy containerPolicy){ DataReadQuery query = new DataReadQuery(); query.setSQLStatement(new SQLSelectStatement()); query.setContainerPolicy(containerPolicy); return query; }
StoredProcedureCall storedProcedureCall = new StoredProcedureCall(); storedProcedureCall.setProcedureName("mypackage.myprocedure"); storedProcedureCall.addNamedArgument("i_input_1"); // Add input argument name. storedProcedureCall.addNamedOutputArgument("o_output_1"); // Add output parameter name. DataReadQuery query = new DataReadQuery(); query.setCall(storedProcedureCall); query.addArgument("i_input_1"); // Add input argument names (again); List<Object> argumentValues = new ArrayList<Object>(); argumentValues.add("valueOf_i_input_1"); // Add input argument values. JpaEntityManager jpaEntityManager = (JpaEntityManager) getEntityManager(); Session session = jpaEntityManager.getActiveSession(); List<?> results = (List<?>) session.executeQuery(query, argumentValues); DatabaseRecord record = (DatabaseRecord) results.get(0); String result = String.valueOf(record.get("o_output_1")); // Get output parameter
/** * INTERNAL: * Execute the query. * Perform the work to execute the SQL string. * @exception DatabaseException an error has occurred on the database * @return a collection or cursor of Records representing the result set */ public Object executeDatabaseQuery() throws DatabaseException { if (getContainerPolicy().overridesRead()) { return getContainerPolicy().execute(); } return executeNonCursor(); }
/** * Build a DataReadQuery from a sql string. */ public static DatabaseQuery buildSQLDatabaseQuery(String sqlString, Map<String, Object> hints, ClassLoader classLoader, AbstractSession session) { DataReadQuery query = new DataReadQuery(); query.setResultType(DataReadQuery.AUTO); query.setSQLString(sqlString); query.setIsUserDefined(true); // apply any query hints return applyHints(hints, query, classLoader, session); }
/** * INTERNAL: * Returns query to check whether given table exists. * Query execution returns a row when table exists or empty result otherwise. * @param table database table meta-data * @return query to check whether given table exists */ @Override protected DataReadQuery getTableExistsQuery(final TableDefinition table) { final DataReadQuery query = new DataReadQuery("SHOW TABLES LIKE '" + table.getFullName() + "'"); query.setMaxRows(1); return query; }
m_unmappedFieldsQuery = new DataReadQuery(); Expression expression = builder.getField(primaryKey).equal(builder.getParameter(primaryKey)); whereClause = expression.and(whereClause); m_unmappedFieldsQuery.addArgument(primaryKey.getQualifiedName()); m_unmappedFieldsQuery.setSQLStatement(statement); m_unmappedFieldsQuery.setSessionName(m_descriptor.getSessionName());
Vector rows = getQueryMechanism().executeSelect(); Object results = null; if (this.resultType == VALUE) { if (getValueConverter() != null) { results = getValueConverter().convertDataValueToObjectValue(results, this.session); ContainerPolicy containerPolicy = getContainerPolicy(); results = containerPolicy.containerInstance(size); if(containerPolicy.shouldAddAll()) { for (int index = 0; index < size; index++) { AbstractRecord row = (AbstractRecord)rows.get(index); Object value = buildObject(row); values.add(value); for (int index = 0; index < size; index++) { AbstractRecord row = (AbstractRecord)rows.get(index); Object value = buildObject(row); containerPolicy.addInto(value, results, this.session, row, this, null, true); cacheResult(results); return results;
/** * PUBLIC: * Execute the call on the database and return the result. * The call must return a value, if no value is return executeNonSelectCall must be used. * The call can be a stored procedure call, SQL call or other type of call. * A vector of database rows is returned, database row implements Java 2 Map which should be used to access the data. * <p>Example: * <p>session.executeSelectingCall(new SQLCall("Select * from Employee"); * * @see #executeNonSelectingCall(Call) */ @Override public Vector executeSelectingCall(Call call) throws DatabaseException { DataReadQuery query = new DataReadQuery(); query.setCall(call); query.setIsExecutionClone(true); return (Vector)executeQuery(query); }
/** * INTERNAL: * Execute the call on the database and return the result. Calling this * method will bypass a global setting to disallow native SQL queries. (set * by default when one Entity is marked as multitenant) * * The call must return a value, if no value is return executeNonSelectCall * must be used. * * The call can be a stored procedure call, SQL call or other type of call. * * A vector of database rows is returned, database row implements Java 2 Map * which should be used to access the data. * * <p>Example: * <p>session.executeSelectingCall(new SQLCall("Select * from Employee"); * * @see #priviledgedExecuteNonSelectingCall(Call) */ public Vector priviledgedExecuteSelectingCall(Call call) throws DatabaseException { DataReadQuery query = new DataReadQuery(); query.setAllowNativeSQLQuery(true); query.setCall(call); query.setIsExecutionClone(true); return (Vector)executeQuery(query); }
sqlStatement.normalize(session, null); DataReadQuery dataReadQuery = new DataReadQuery(); dataReadQuery.setSQLStatement(sqlStatement); dataReadQuery.setSessionName(this.descriptor.getSessionName());
/** * Build a DataReadQuery with the stored procedure call given. */ public static DatabaseQuery buildStoredProcedureQuery(StoredProcedureCall call, Map<String, Object> hints, ClassLoader classLoader, AbstractSession session) { DataReadQuery query = new DataReadQuery(); query.setResultType(DataReadQuery.AUTO); query.setCall(call); query.setIsUserDefined(true); // apply any query hints DatabaseQuery hintQuery = applyHints(hints, query, classLoader, session); // apply any query arguments applyArguments(call, hintQuery); return hintQuery; }
/** * DirectMapCollectionMapping constructor */ public DirectMapMapping() { super(); DataReadQuery query = new DataReadQuery(); this.selectionQuery = query; this.containerPolicy = new DirectMapContainerPolicy(ClassConstants.Hashtable_Class); this.isListOrderFieldSupported = false; }
descriptorToUse = this.descriptor; DataReadQuery batchQuery = new DataReadQuery(); batchQuery.setName(getAttributeName()); batchQuery.setSQLStatement(batchStatement); this.containerPolicy.addAdditionalFieldsToQuery(batchQuery, getAdditionalFieldsBaseExpression(batchQuery));
/** * INTERNAL: * Execute the query. If there are cached results return those. * This must override the super to support result caching. * * @param aSession - the session in which the receiver will be executed. * @return An object or vector, the result of executing the query. * @exception DatabaseException - an error has occurred on the database */ public Object execute(AbstractSession session, AbstractRecord row) throws DatabaseException { if (shouldCacheQueryResults()) { if (getContainerPolicy().overridesRead()) { throw QueryException.cannotCacheCursorResultsOnQuery(this); } if (isPrepared()) {// only prepared queries can have cached results. Object results = getQueryResults(session, row, true); // Bug6138532 - if results are "cached no results", return null immediately if (results == InvalidObject.instance) { return null; } if (results != null) { return results; } } } return super.execute(session, row); }
/** * INTERNAL: * Allow the selectionQuery to be modified when this MapComponentMapping is used as the value in a Map */ public void postInitializeMapValueSelectionQuery(ReadQuery selectionQuery, AbstractSession session){ ((SQLSelectStatement)((DataReadQuery)selectionQuery).getSQLStatement()).normalize(session, null); }
/** * Internal method to change the wrapped query to a DataReadQuery if * necessary. This should never occur, but could possibly if the same query * was executed as executeUpdate() then as getResultList(). Note that the * initial conversion to modify would loose any read settings that had been * set. */ protected void setAsSQLReadQuery() { if (getDatabaseQueryInternal().isDataModifyQuery()) { DataReadQuery query = new DataReadQuery(); query.setResultType(DataReadQuery.AUTO); query.setIsUserDefined(databaseQuery.isUserDefined()); query.copyFromQuery(this.databaseQuery); this.databaseQuery = 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 (!((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: * Get the container policy from the selection query for this mapping. */ @Override protected ContainerPolicy getSelectionQueryContainerPolicy() { return ((DataReadQuery) getSelectionQuery()).getContainerPolicy(); }