manager.setQueries(new LinkedHashMap(getQueries().size()));//bug5677655 Iterator iterator = queries.values().iterator(); while (iterator.hasNext()) { DatabaseQuery initialQuery = (DatabaseQuery)queriesForKey.next(); DatabaseQuery clonedQuery = (DatabaseQuery)initialQuery.clone(); clonedQuery.setDescriptor(manager.getDescriptor()); manager.addQuery(clonedQuery); manager.setDoesExistQuery((DoesExistQuery)getDoesExistQuery().clone()); if (getReadAllQuery() != null) { manager.setReadAllQuery((ReadAllQuery)getReadAllQuery().clone()); if (getReadObjectQuery() != null) { manager.setReadObjectQuery((ReadObjectQuery)getReadObjectQuery().clone()); if (getUpdateQuery() != null) { manager.setUpdateQuery((UpdateObjectQuery)getUpdateQuery().clone()); if (getInsertQuery() != null) { manager.setInsertQuery((InsertObjectQuery)getInsertQuery().clone()); if (getDeleteQuery() != null) { manager.setDeleteQuery((DeleteObjectQuery)getDeleteQuery().clone());
if (getInsertQuery() != null) { getInsertQuery().setDescriptor(descriptor); if (getUpdateQuery() != null) { getUpdateQuery().setDescriptor(descriptor); if (getReadObjectQuery() != null) { getReadObjectQuery().setReferenceClass(getDescriptor().getJavaClass()); getReadObjectQuery().setDescriptor(descriptor); if (getDeleteQuery() != null) { getDeleteQuery().setDescriptor(descriptor); if (getReadAllQuery() != null) { getReadAllQuery().setReferenceClass(getDescriptor().getJavaClass()); getReadAllQuery().setDescriptor(descriptor); for (Iterator it = getAllQueries().iterator(); it.hasNext();) { ((DatabaseQuery)it.next()).setDescriptor(descriptor);
/** * PUBLIC: * Return the query name from the set of pre-defined queries * If only one query exists with this name, it will be returned. * If there are multiple queries of this name, this method will search for a query * with no arguments and return the first one it finds. * * @see #getQuery(String, Vector) */ public DatabaseQuery getQuery(String queryName) { return getQuery(queryName, null); }
/** * INTERNAL: * This method is explicitly used by the Builder only. */ public void setExistenceCheck(String token) throws DescriptorException { if (token.equals("Check cache")) { checkCacheForDoesExist(); } else if (token.equals("Check database")) { checkDatabaseForDoesExist(); } else if (token.equals("Assume existence")) { assumeExistenceForDoesExist(); } else if (token.equals("Assume non-existence")) { assumeNonExistenceForDoesExist(); } else { throw DescriptorException.setExistenceCheckingNotUnderstood(token, getDescriptor()); } }
/** * INTERNAL: * Initialize the queryTimeout to: * * NoTimeout: If queryTimeout is DefaultTimeout, either directly or via inheritance. * Parent's Timeout: If queryTimeout is something other than DefaultTimeout via my parent. */ public void initializeQueryTimeout(AbstractSession session) { //if queryTimeout is DefaultTimeout, try to get my parent's queryTimeout if (getQueryTimeout() == DefaultTimeout) { if (getDescriptor().hasInheritance() && (this.getDescriptor().getInheritancePolicy().getParentDescriptor() != null)) { setQueryTimeout(this.getParentDescriptorQueryManager().getQueryTimeout()); } } //if I have DefaultTimeout (via parent or not), set to NoTimeout if (getQueryTimeout() == DefaultTimeout) { setQueryTimeout(NoTimeout); } }
/** * INTERNAL: * Initialize the queryTimeout to: * * NoTimeout: If queryTimeout is DefaultTimeout, either directly or via inheritance. * Parent's Timeout: If queryTimeout is something other than DefaultTimeout via my parent. */ public void initializeQueryTimeout(AbstractSession session) { //if queryTimeout is DefaultTimeout, try to get my parent's queryTimeout if (getQueryTimeout() == DefaultTimeout) { if (getDescriptor().hasInheritance() && (this.getDescriptor().getInheritancePolicy().getParentDescriptor() != null)) { setQueryTimeout(this.getParentDescriptorQueryManager().getQueryTimeout()); } } if (getQueryTimeoutUnit().equals(DefaultTimeoutUnit)) { if (getDescriptor().hasInheritance() && (this.getDescriptor().getInheritancePolicy().getParentDescriptor() != null)) { setQueryTimeoutUnit(this.getParentDescriptorQueryManager().getQueryTimeoutUnit()); } } //if I have DefaultTimeout (via parent or not), set to NoTimeout if (getQueryTimeout() == DefaultTimeout) { setQueryTimeout(NoTimeout); } }
if (getDescriptor().isAggregateDescriptor()) { return; if (getDescriptor().isChildDescriptor()) { DescriptorQueryManager parentQueryManager = getDescriptor().getInheritancePolicy().getParentDescriptor().getQueryManager(); if ((!hasInsertQuery()) && (parentQueryManager.hasInsertQuery())) { setInsertQuery((InsertObjectQuery)parentQueryManager.getInsertQuery().clone()); if ((!hasUpdateQuery()) && (parentQueryManager.hasUpdateQuery())) { setUpdateQuery((UpdateObjectQuery)parentQueryManager.getUpdateQuery().clone()); if ((!hasDeleteQuery()) && (parentQueryManager.hasDeleteQuery())) { setDeleteQuery((DeleteObjectQuery)parentQueryManager.getDeleteQuery().clone()); if ((!hasReadObjectQuery()) && (parentQueryManager.hasReadObjectQuery())) { setReadObjectQuery((ReadObjectQuery)parentQueryManager.getReadObjectQuery().clone()); if ((!hasReadAllQuery()) && (parentQueryManager.hasReadAllQuery())) { setReadAllQuery((ReadAllQuery)parentQueryManager.getReadAllQuery().clone()); if ((!getDoesExistQuery().isUserDefined()) && getDoesExistQuery().shouldCheckCacheForDoesExist()) { setDoesExistQuery(((DoesExistQuery)parentQueryManager.getDoesExistQuery().clone()));
if (descriptor.getQueryManager().getDoesExistQuery().shouldAssumeExistenceForDoesExist()) { method.addLine("descriptor.getQueryManager().assumeExistenceForDoesExist();"); } else if (descriptor.getQueryManager().getDoesExistQuery().shouldAssumeNonExistenceForDoesExist()) { method.addLine("descriptor.getQueryManager().assumeNonExistenceForDoesExist();"); } else if (descriptor.getQueryManager().getDoesExistQuery().shouldCheckCacheForDoesExist()) { method.addLine("descriptor.getQueryManager().checkCacheForDoesExist();"); } else if (descriptor.getQueryManager().getDoesExistQuery().shouldCheckDatabaseForDoesExist()) { method.addLine("descriptor.getQueryManager().checkDatabaseForDoesExist();"); if (descriptor.getQueryManager().getQueryTimeout() != DescriptorQueryManager.DefaultTimeout) { method.addLine("descriptor.getQueryManager().setQueryTimeout(" + descriptor.getQueryManager().getQueryTimeout() + ");"); if (!descriptor.getQueryManager().getQueryTimeoutUnit().equals(DescriptorQueryManager.DefaultTimeoutUnit)) { method.addLine("descriptor.getQueryManager().setQueryTimeoutUnit(" + descriptor.getQueryManager().getQueryTimeoutUnit() + ");"); if (descriptor.getQueryManager().hasReadObjectQuery() && descriptor.getQueryManager().getReadObjectQuery().isSQLCallQuery()) { method.addLine("descriptor.getQueryManager().setReadObjectSQLString(\"" + constructValidSQLorEJBQLLinesForJavaSource(descriptor.getQueryManager().getReadObjectQuery().getSQLString()) + "\");"); } else if (descriptor.getQueryManager().hasReadObjectQuery() && descriptor.getQueryManager().getReadObjectQuery().getDatasourceCall() instanceof XMLInteraction) { addXMLInteractionLines(method, (XMLInteraction)descriptor.getQueryManager().getReadObjectQuery().getDatasourceCall(), "readObjectCall"); method.addLine("descriptor.getQueryManager().setReadObjectCall(readObjectCall);"); if (descriptor.getQueryManager().hasReadAllQuery() && descriptor.getQueryManager().getReadAllQuery().isSQLCallQuery()) { method.addLine("descriptor.getQueryManager().setReadAllSQLString(\"" + constructValidSQLorEJBQLLinesForJavaSource(descriptor.getQueryManager().getReadAllQuery().getSQLString()) + "\");"); } else if (descriptor.getQueryManager().hasReadAllQuery() && descriptor.getQueryManager().getReadAllQuery().getDatasourceCall() instanceof XMLInteraction) { addXMLInteractionLines(method, (XMLInteraction)descriptor.getQueryManager().getReadAllQuery().getDatasourceCall(), "readAllCall"); method.addLine("descriptor.getQueryManager().setReadAllCall(readAllCall);");
this.initializeQueryTimeout(session); if (getDescriptor().isAggregateDescriptor()) { return; if (getMultipleTableJoinExpression() != null) { setAdditionalJoinExpression(getMultipleTableJoinExpression().and(getAdditionalJoinExpression())); if (getDescriptor().isAggregateCollectionDescriptor()) { return; if (!hasReadObjectQuery()) { readObjectQuery.setSelectionCriteria(getDescriptor().getObjectBuilder().getPrimaryKeyExpression()); setReadObjectQuery(readObjectQuery); if (!hasInsertQuery()) { setInsertQuery(new InsertObjectQuery()); getInsertQuery().setModifyRow(getDescriptor().getObjectBuilder().buildTemplateInsertRow(session)); if (!getDescriptor().usesFieldLocking()) { if (!hasDeleteQuery()) { setDeleteQuery(new DeleteObjectQuery());
if (!queryManager.hasReadObjectQuery()) { queryManager.setReadObjectQuery(readObjectQuery); queryManager.getReadObjectQuery().setName("read" + getJavaClass().getSimpleName()); if (!queryManager.hasInsertQuery()) { queryManager.setInsertQuery(new InsertObjectQuery()); queryManager.getInsertQuery().setModifyRow(getObjectBuilder().buildTemplateInsertRow(session)); if (!queryManager.hasDeleteQuery()) { queryManager.setDeleteQuery(new DeleteObjectQuery()); queryManager.getDeleteQuery().setModifyRow(new DatabaseRecord()); if (queryManager.hasUpdateQuery()) { queryManager.getUpdateQuery().setModifyRow(getObjectBuilder().buildTemplateUpdateRow(session));
if (!queryManager.hasInsertQuery()) { EISInteraction call = new MappedInteraction(); call.setProperty(MongoPlatform.OPERATION, MongoOperation.INSERT); call.setProperty(MongoPlatform.COLLECTION, ((EISDescriptor)queryManager.getDescriptor()).getDataTypeName()); queryManager.setInsertCall(call); if (!queryManager.hasUpdateQuery()) { EISInteraction call = new MappedInteraction(); call.setProperty(MongoPlatform.OPERATION, MongoOperation.UPDATE); call.setProperty(MongoPlatform.COLLECTION, ((EISDescriptor)queryManager.getDescriptor()).getDataTypeName()); queryManager.setUpdateCall(call); if (!queryManager.hasReadObjectQuery()) { MappedInteraction call = new MappedInteraction(); call.setProperty(MongoPlatform.OPERATION, MongoOperation.FIND); call.setProperty(MongoPlatform.COLLECTION, ((EISDescriptor)queryManager.getDescriptor()).getDataTypeName()); for (DatabaseField field : queryManager.getDescriptor().getPrimaryKeyFields()) { call.addArgument(field.getName()); queryManager.setReadObjectCall(call); if (!queryManager.hasDeleteQuery()) { MappedInteraction call = new MappedInteraction(); call.setProperty(MongoPlatform.OPERATION, MongoOperation.REMOVE); call.setProperty(MongoPlatform.COLLECTION, ((EISDescriptor)queryManager.getDescriptor()).getDataTypeName()); for (DatabaseField field : queryManager.getDescriptor().getPrimaryKeyFields()) { call.addArgument(field.getName()); queryManager.setDeleteCall(call);
&& queryManager.hasUpdateQuery()// there is a user-defined query queryManager.preUpdate(writeQuery); queryManager.postUpdate(writeQuery);
/** * PUBLIC: * Return the query from the set of pre-defined queries with the given name and argument types. * This allows for common queries to be pre-defined, reused and executed by name. * This method should be used if the Session has multiple queries with the same name but * different arguments. * If only one query exists, it will be returned regardless of the arguments. * If multiple queries exist, the first query that has corresponding argument types will be returned * * @see #getQuery(String) */ public DatabaseQuery getQuery(String name, Vector arguments) { DatabaseQuery query = getLocalQuery(name, arguments); // CR#3711: Check if a query with the same name exists for this descriptor. // If not, recursively check descriptors of parent classes. If nothing is // found in parents, return null. if (query == null) { DatabaseQuery parentQuery = getQueryFromParent(name, arguments); if ((parentQuery != null) && parentQuery.isReadQuery()) { parentQuery = (DatabaseQuery)parentQuery.clone(); ((ObjectLevelReadQuery)parentQuery).setReferenceClass(this.descriptor.getJavaClass()); addQuery(name, parentQuery); } return parentQuery; } return query; }
&& queryManager.hasInsertQuery()// there is a user-defined query queryManager.preInsert(writeQuery); queryManager.postInsert(writeQuery);
/** * ADVANCED: * Set the receiver's does exist query. * This should be an instance of a valid subclass of DoesExistQuery. * If specified this is used by the descriptor to query existence of an object in the database. * This gives the user the ability to define exactly how to query existence from the database, * or access data external from the database or from some other framework. */ public void setDoesExistQuery(DoesExistQuery query) { this.doesExistQuery = query; if (query == null) { return; } this.doesExistQuery.setIsUserDefined(true); this.doesExistQuery.setDescriptor(getDescriptor()); }
/** * INTERNAL: * Initialize the CMPPolicy settings. */ public void initialize(ClassDescriptor descriptor, AbstractSession session) throws DescriptorException { // updateAllFields is true so set custom query in DescriptorQueryManager // to force full SQL. Don't overwrite a user defined query if (this.getUpdateAllFields() && !descriptor.getQueryManager().hasUpdateQuery()) { descriptor.getQueryManager().setUpdateQuery(new UpdateObjectQuery()); } // make sure updateAllFields is set if forceUpdate is true if (this.getForceUpdate() && !this.getUpdateAllFields()) { throw DescriptorException.updateAllFieldsNotSet(descriptor); } }
/** * INTERNAL: * Check to see if a custom query should be used for this query. * This is done before the query is copied and prepared/executed. * null means there is none. */ protected DatabaseQuery checkForCustomQuery(AbstractSession session, AbstractRecord translationRow) { checkDescriptor(session); // check if user defined a custom query DescriptorQueryManager queryManager = this.descriptor.getQueryManager(); if ((!isCallQuery())// this is not a hand-coded (custom SQL, SDK etc.) call && (!isUserDefined())// and this is not a user-defined query (in the query manager) && queryManager.hasUpdateQuery()) {// and there is a user-defined query (in the query manager) return queryManager.getUpdateQuery(); } return null; }
/** * INTERNAL: * Check to see if a custom query should be used for this query. * This is done before the query is copied and prepared/executed. * null means there is none. */ protected DatabaseQuery checkForCustomQuery(AbstractSession session, AbstractRecord translationRow) { checkDescriptor(session); // check if user defined a custom query DescriptorQueryManager queryManager = this.descriptor.getQueryManager(); if ((!isCallQuery())// this is not a hand-coded (custom SQL, SDK etc.) call && (!isUserDefined())// and this is not a user-defined query (in the query manager) && queryManager.hasInsertQuery()) {// and there is a user-defined query (in the query manager) return queryManager.getInsertQuery(); } return null; }
/** * INTERNAL: * Check to see if a custom query should be used for this query. * This is done before the query is copied and prepared/executed. * null means there is none. */ protected DatabaseQuery checkForCustomQuery(AbstractSession session, AbstractRecord translationRow) { checkDescriptor(session); // check if user defined a custom query DescriptorQueryManager queryManager = this.descriptor.getQueryManager(); if ((!isCallQuery())// this is not a hand-coded (custom SQL, SDK etc.) call && (!isUserDefined())// and this is not a user-defined query (in the query manager) && queryManager.hasDeleteQuery()) {// and there is a user-defined query (in the query manager) return queryManager.getDeleteQuery(); } return null; }
/** * <p>INTERNAL: * * Legacy projects have 'findAll' and 'findByPrimaryKey' queries, whereas we now * expect these to have the descriptor alias appended (preceded with underscore), * + 'Type'. For example, if we have an Employee descriptor, the find queries * would be: 'findAll_employeeType' and 'findByPrimaryKey_employeeType'. * */ @SuppressWarnings("rawtypes") protected static void updateFindQueryNames(Project orProject) { for (ClassDescriptor orDesc : orProject.getDescriptors().values()) { Vector queries = orDesc.getQueryManager().getAllQueries(); for (int i=0; i<queries.size(); i++) { DatabaseQuery query = (DatabaseQuery) queries.get(i); String qName = query.getName(); String END_PART = UNDERSCORE_STR + query.getDescriptor().getAlias() + TYPE_STR; if ((PK_QUERYNAME.equals(qName) || ALL_QUERYNAME.equals(qName)) && !qName.endsWith(END_PART)) { orDesc.getQueryManager().addQuery(qName + END_PART, query); } } } }