/** * INTERNAL: This method is used when computing the nested queries for batch read mappings. It * recurses computing the nested mapping queries. */ protected void computeNestedQueriesForBatchReadExpressions(Vector batchReadExpressions) { for (int index = 0; index < batchReadExpressions.size(); index++) { ObjectExpression objectExpression = (ObjectExpression) batchReadExpressions.get(index); // Expression may not have been initialized. ExpressionBuilder builder = objectExpression.getBuilder(); builder.setSession(getSession().getRootSession(null)); builder.setQueryClass(getReferenceClass()); // PERF: Cache join attribute names. ObjectExpression baseExpression = objectExpression; while (!baseExpression.getBaseExpression().isExpressionBuilder()) { baseExpression = (ObjectExpression) baseExpression.getBaseExpression(); } this.batchReadAttributes.add(baseExpression.getName()); // Ignore nested if (objectExpression.getBaseExpression().isExpressionBuilder()) { DatabaseMapping mapping = objectExpression.getMapping(); if ((mapping != null) && mapping.isForeignReferenceMapping()) { // A nested query must be built to pass to the descriptor that looks like the real query // execution would. ReadQuery nestedQuery = ((ForeignReferenceMapping) mapping).prepareNestedBatchQuery(this); // Register the nested query to be used by the mapping for all the objects. getBatchReadMappingQueries().put(mapping, nestedQuery); } } } }
/** * Return the first employee that has a long enough name for the test. If no match is found throw * a warning exception. See bug 223005 * * @param vectorOfEmployees * @param minFirstNameLength * @param testName * @return */ public Employee getEmployeeWithRequiredNameLength( Vector vectorOfEmployees, int minFirstNameLength, String testName) { Employee empMatch = null; Vector<Employee> employees = vectorOfEmployees; String firstName; StringBuffer partialFirstName; // Loop through the collection of employees to find one that matches our test requirements for (int i = 0; i < employees.size(); i++) { empMatch = employees.get(i); firstName = empMatch.getFirstName(); // Verify length criteria if (firstName.length() >= minFirstNameLength) { // exit the for loop - return the last empMatch i = employees.size(); } } // If we could not find a proper employee for testing - throw a warning if (null == empMatch) { throw new RuntimeException( testName + " Setup Failed: unable to find an Employee with firstName size of at least " + minFirstNameLength); } else { return empMatch; } }
/** INTERNAL: Return if the attribute is specified for batch reading. */ public boolean isAttributeBatchRead(String attributeName) { if (!hasBatchReadAttributes()) { return false; } Vector batchReadAttributeExpressions = getBatchReadAttributeExpressions(); int size = batchReadAttributeExpressions.size(); for (int index = 0; index < size; index++) { QueryKeyExpression expression = (QueryKeyExpression) batchReadAttributeExpressions.get(index); while (!expression.getBaseExpression().isExpressionBuilder()) { expression = (QueryKeyExpression) expression.getBaseExpression(); } if (expression.getName().equals(attributeName)) { return true; } } return false; }