Search in sources :

Example 16 with DataModifyQuery

use of org.eclipse.persistence.queries.DataModifyQuery in project eclipselink by eclipse-ee4j.

the class AbstractSession method priviledgedExecuteNonSelectingCall.

/**
 * INTERNAL:
 * Execute the call on the database. Calling this method will bypass a
 * global setting to disallow native SQL queries. (set by default when
 * one Entity is marked as multitenant)
 *
 * The row count is returned.
 *
 * The call can be a stored procedure call, SQL call or other type of call.
 *
 * <p>Example:
 * <p>session.executeNonSelectingCall(new SQLCall("Delete from Employee"), true);
 *
 * @see #priviledgedExecuteSelectingCall(Call)
 */
public int priviledgedExecuteNonSelectingCall(Call call) throws DatabaseException {
    DataModifyQuery query = new DataModifyQuery();
    query.setAllowNativeSQLQuery(true);
    query.setIsExecutionClone(true);
    query.setCall(call);
    Integer value = (Integer) executeQuery(query);
    if (value == null) {
        return 0;
    } else {
        return value;
    }
}
Also used : DataModifyQuery(org.eclipse.persistence.queries.DataModifyQuery)

Example 17 with DataModifyQuery

use of org.eclipse.persistence.queries.DataModifyQuery in project eclipselink by eclipse-ee4j.

the class VeearrayTestSuite method setUp.

@BeforeClass
public static void setUp() {
    final String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE);
    if ("true".equalsIgnoreCase(ddlCreateProp)) {
        ddlCreate = true;
    }
    final String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);
    if ("true".equalsIgnoreCase(ddlDropProp)) {
        ddlDrop = true;
    }
    final String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG);
    if ("true".equalsIgnoreCase(ddlDebugProp)) {
        ddlDebug = true;
    }
    String username = System.getProperty(DATABASE_USERNAME_KEY);
    if (username == null) {
        fail("error retrieving database username");
    }
    String password = System.getProperty(DATABASE_PASSWORD_KEY);
    if (password == null) {
        fail("error retrieving database password");
    }
    String url = System.getProperty(DATABASE_URL_KEY);
    if (url == null) {
        fail("error retrieving database url");
    }
    String driver = System.getProperty(DATABASE_DRIVER_KEY);
    if (driver == null) {
        fail("error retrieving database driver");
    }
    Project orProject = new Project();
    orProject.setName("or-veearray");
    DatabaseLogin login = new DatabaseLogin();
    login.setUserName(username);
    login.setPassword(password);
    login.setConnectionString(url);
    login.setDriverClassName(driver);
    login.setDatasourcePlatform(new Oracle10Platform());
    login.bindAllParameters();
    orProject.setDatasourceLogin(login);
    ObjectRelationalDataTypeDescriptor phoneORDescriptor = new ObjectRelationalDataTypeDescriptor();
    phoneORDescriptor.setAlias("phone");
    phoneORDescriptor.useSoftCacheWeakIdentityMap();
    phoneORDescriptor.setJavaClass(Phone.class);
    phoneORDescriptor.descriptorIsAggregate();
    phoneORDescriptor.setStructureName("XR_VEE_ARRAY_PHONE");
    phoneORDescriptor.addFieldOrdering("AREACODE");
    phoneORDescriptor.addFieldOrdering("PHONENUMBER");
    phoneORDescriptor.addFieldOrdering("PHONETYPE");
    phoneORDescriptor.addDirectMapping("areaCode", "AREACODE");
    phoneORDescriptor.addDirectMapping("phonenumber", "PHONENUMBER");
    phoneORDescriptor.addDirectMapping("type", "PHONETYPE");
    orProject.addDescriptor(phoneORDescriptor);
    ObjectRelationalDataTypeDescriptor employeeORDescriptor = new ObjectRelationalDataTypeDescriptor();
    employeeORDescriptor.useSoftCacheWeakIdentityMap();
    employeeORDescriptor.getQueryManager().checkCacheForDoesExist();
    employeeORDescriptor.setAlias("employee");
    employeeORDescriptor.setJavaClass(Employee.class);
    employeeORDescriptor.addTableName("XR_VEE_ARRAY_EMP");
    employeeORDescriptor.addPrimaryKeyFieldName("XR_VEE_ARRAY_EMP.EMPNO");
    orProject.addDescriptor(employeeORDescriptor);
    DirectToFieldMapping idMapping = new DirectToFieldMapping();
    idMapping.setAttributeName("id");
    idMapping.setFieldName("XR_VEE_ARRAY_EMP.EMPNO");
    employeeORDescriptor.addMapping(idMapping);
    DirectToFieldMapping firstNameMapping = new DirectToFieldMapping();
    firstNameMapping.setAttributeName("firstName");
    firstNameMapping.setFieldName("XR_VEE_ARRAY_EMP.FNAME");
    employeeORDescriptor.addMapping(firstNameMapping);
    DirectToFieldMapping lastNameMapping = new DirectToFieldMapping();
    lastNameMapping.setAttributeName("lastName");
    lastNameMapping.setFieldName("XR_VEE_ARRAY_EMP.LNAME");
    employeeORDescriptor.addMapping(lastNameMapping);
    ObjectArrayMapping phonesMapping = new ObjectArrayMapping();
    phonesMapping.setAttributeName("phones");
    phonesMapping.setStructureName("XR_VEE_ARRAY_PHONES");
    phonesMapping.setReferenceClass(Phone.class);
    phonesMapping.setFieldName("PHONES");
    employeeORDescriptor.addMapping(phonesMapping);
    ReadAllQuery raq = new ReadAllQuery(Employee.class);
    raq.setName("getVeeArrayEmployees");
    raq.refreshIdentityMapResult();
    StoredProcedureCall spCall = new StoredProcedureCall();
    spCall.setProcedureName("GET_VEE_ARRAY_EMPS");
    spCall.useNamedCursorOutputAsResultSet("X");
    raq.setCall(spCall);
    employeeORDescriptor.getQueryManager().addQuery("getVeeArrayEmployees", raq);
    ReadObjectQuery roq = new ReadObjectQuery(Employee.class);
    roq.setName("getVeeArrayEmployee");
    roq.refreshIdentityMapResult();
    roq.addArgument("X");
    spCall = new StoredProcedureCall();
    spCall.setProcedureName("GET_VEE_ARRAY_EMP");
    spCall.addNamedArgument("X", "X", Types.INTEGER);
    spCall.useNamedCursorOutputAsResultSet("Y");
    roq.setCall(spCall);
    employeeORDescriptor.getQueryManager().addQuery("getVeeArrayEmployee", roq);
    ObjectRelationalDatabaseField ordf = new ObjectRelationalDatabaseField("");
    ordf.setSqlType(Types.STRUCT);
    ordf.setSqlTypeName("XR_VEE_ARRAY_PHONE");
    ordf.setType(Phone.class);
    DataModifyQuery dataModifyQuery = new DataModifyQuery();
    dataModifyQuery.setName("updateVeeArrayPhones");
    dataModifyQuery.addArgument("X");
    dataModifyQuery.addArgument("Y");
    spCall = new StoredProcedureCall();
    spCall.setProcedureName("UPDATE_VEE_ARRAY_PHS");
    spCall.addNamedArgument("X", "X", Types.INTEGER);
    spCall.addNamedArgument("Y", "Y", Types.ARRAY, "XR_VEE_ARRAY_PHONES", ordf);
    dataModifyQuery.setCall(spCall);
    employeeORDescriptor.getQueryManager().addQuery("updateVeeArrayPhones", dataModifyQuery);
    NamespaceResolver ns = new NamespaceResolver();
    ns.setDefaultNamespaceURI("urn:veearray");
    Project oxProject = new Project();
    oxProject.setName("ox-veearray");
    XMLLogin xmlLogin = new XMLLogin();
    xmlLogin.getProperties().remove("user");
    xmlLogin.getProperties().remove("password");
    oxProject.setLogin(xmlLogin);
    XMLDescriptor employeeOXDescriptor = new XMLDescriptor();
    employeeOXDescriptor.setAlias("employee");
    employeeOXDescriptor.setJavaClass(Employee.class);
    employeeOXDescriptor.setDefaultRootElement("employee");
    employeeOXDescriptor.setNamespaceResolver(ns);
    XMLSchemaURLReference schemaReference = new XMLSchemaURLReference();
    schemaReference.setSchemaContext("/employeeType");
    schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
    employeeOXDescriptor.setSchemaReference(schemaReference);
    XMLDirectMapping xmlIdMapping = new XMLDirectMapping();
    xmlIdMapping.setAttributeName("id");
    XMLField idField = new XMLField();
    idField.setName("@id/text()");
    idField.setSchemaType(INT_QNAME);
    xmlIdMapping.setField(idField);
    employeeOXDescriptor.addMapping(xmlIdMapping);
    XMLDirectMapping xmlFirstNameMapping = new XMLDirectMapping();
    xmlFirstNameMapping.setAttributeName("firstName");
    XMLField firstNameField = new XMLField();
    firstNameField.setName("first-name/text()");
    firstNameField.setSchemaType(STRING_QNAME);
    xmlFirstNameMapping.setField(firstNameField);
    employeeOXDescriptor.addMapping(xmlFirstNameMapping);
    XMLDirectMapping xmlLastNameMapping = new XMLDirectMapping();
    xmlLastNameMapping.setAttributeName("lastName");
    XMLField lastNameField = new XMLField();
    lastNameField.setName("last-name/text()");
    lastNameField.setSchemaType(STRING_QNAME);
    xmlLastNameMapping.setField(lastNameField);
    employeeOXDescriptor.addMapping(xmlLastNameMapping);
    XMLCompositeCollectionMapping xmlPhonesMapping = new XMLCompositeCollectionMapping();
    xmlPhonesMapping.setAttributeName("phones");
    xmlPhonesMapping.setReferenceClass(Phone.class);
    xmlPhonesMapping.setXPath("phones/phone");
    employeeOXDescriptor.addMapping(xmlPhonesMapping);
    oxProject.addDescriptor(employeeOXDescriptor);
    XMLDescriptor phoneOXDescriptor = new XMLDescriptor();
    phoneOXDescriptor.setAlias("phone");
    phoneOXDescriptor.setJavaClass(Phone.class);
    phoneOXDescriptor.setDefaultRootElement("phone");
    phoneOXDescriptor.setNamespaceResolver(ns);
    schemaReference = new XMLSchemaURLReference();
    schemaReference.setSchemaContext("/phoneType");
    schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
    phoneOXDescriptor.setSchemaReference(schemaReference);
    XMLDirectMapping areaCodeMapping = new XMLDirectMapping();
    areaCodeMapping.setAttributeName("areaCode");
    XMLField areaCodeField = new XMLField();
    areaCodeField.setName("area-code/text()");
    areaCodeField.setSchemaType(STRING_QNAME);
    areaCodeMapping.setField(areaCodeField);
    phoneOXDescriptor.addMapping(areaCodeMapping);
    XMLDirectMapping phonenumberMapping = new XMLDirectMapping();
    phonenumberMapping.setAttributeName("phonenumber");
    XMLField phonenumberField = new XMLField();
    phonenumberField.setName("phonenumber/text()");
    phonenumberField.setSchemaType(STRING_QNAME);
    phonenumberMapping.setField(phonenumberField);
    phoneOXDescriptor.addMapping(phonenumberMapping);
    XMLDirectMapping typeMapping = new XMLDirectMapping();
    typeMapping.setAttributeName("type");
    XMLField typeField = new XMLField();
    typeField.setName("type/text()");
    typeField.setSchemaType(STRING_QNAME);
    typeMapping.setField(typeField);
    phoneOXDescriptor.addMapping(typeMapping);
    oxProject.addDescriptor(phoneOXDescriptor);
    XRServiceFactory factory = new XRServiceFactory() {

        Project orProject;

        Project oxProject;

        XRServiceFactory setProject(Project orProject, Project oxProject) {
            this.orProject = orProject;
            this.oxProject = oxProject;
            parentClassLoader = ClassLoader.getSystemClassLoader();
            xrSchemaStream = new ByteArrayInputStream(VEEARRAY_SCHEMA.getBytes());
            return this;
        }

        @Override
        public void buildSessions() {
            DatabaseSession ds = orProject.createDatabaseSession();
            ds.dontLogMessages();
            xrService.setORSession(ds);
            xrService.setXMLContext(new XMLContext(oxProject));
            xrService.setOXSession(xrService.getXMLContext().getSession(0));
        }
    }.setProject(orProject, oxProject);
    XMLContext context = new XMLContext(new DBWSModelProject());
    XMLUnmarshaller unmarshaller = context.createUnmarshaller();
    DBWSModel model = (DBWSModel) unmarshaller.unmarshal(new StringReader(VEEARRAY_XRMODEL));
    xrService = factory.buildService(model);
    if (ddlCreate) {
        try {
            AllTests.runDdl(CREATE_DDL, ddlDebug);
        } catch (Exception e) {
        // e.printStackTrace();
        }
    }
}
Also used : Oracle10Platform(org.eclipse.persistence.platform.database.oracle.Oracle10Platform) DatabaseSession(org.eclipse.persistence.sessions.DatabaseSession) ReadAllQuery(org.eclipse.persistence.queries.ReadAllQuery) XMLLogin(org.eclipse.persistence.oxm.XMLLogin) DBWSModelProject(org.eclipse.persistence.dbws.DBWSModelProject) XMLDescriptor(org.eclipse.persistence.oxm.XMLDescriptor) XMLCompositeCollectionMapping(org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping) StringReader(java.io.StringReader) XMLUnmarshaller(org.eclipse.persistence.oxm.XMLUnmarshaller) ObjectRelationalDataTypeDescriptor(org.eclipse.persistence.mappings.structures.ObjectRelationalDataTypeDescriptor) DataModifyQuery(org.eclipse.persistence.queries.DataModifyQuery) DirectToFieldMapping(org.eclipse.persistence.mappings.DirectToFieldMapping) XMLField(org.eclipse.persistence.oxm.XMLField) ObjectRelationalDatabaseField(org.eclipse.persistence.mappings.structures.ObjectRelationalDatabaseField) DBWSModel(org.eclipse.persistence.dbws.DBWSModel) ReadObjectQuery(org.eclipse.persistence.queries.ReadObjectQuery) StoredProcedureCall(org.eclipse.persistence.queries.StoredProcedureCall) XMLContext(org.eclipse.persistence.oxm.XMLContext) XMLSchemaURLReference(org.eclipse.persistence.oxm.schema.XMLSchemaURLReference) SQLException(java.sql.SQLException) Project(org.eclipse.persistence.sessions.Project) DBWSModelProject(org.eclipse.persistence.dbws.DBWSModelProject) DatabaseLogin(org.eclipse.persistence.sessions.DatabaseLogin) XRServiceFactory(org.eclipse.persistence.internal.xr.XRServiceFactory) XMLDirectMapping(org.eclipse.persistence.oxm.mappings.XMLDirectMapping) ByteArrayInputStream(java.io.ByteArrayInputStream) NamespaceResolver(org.eclipse.persistence.oxm.NamespaceResolver) ObjectArrayMapping(org.eclipse.persistence.mappings.structures.ObjectArrayMapping) BeforeClass(org.junit.BeforeClass)

Example 18 with DataModifyQuery

use of org.eclipse.persistence.queries.DataModifyQuery in project eclipselink by eclipse-ee4j.

the class StoredProcedureObjectRelationalParameters method getInsertQuery.

public DatabaseQuery getInsertQuery() {
    DataModifyQuery query = new DataModifyQuery();
    query.setShouldBindAllParameters(true);
    query.bindAllParameters();
    query.setCall(getInsertCall());
    query.addArgument("ssn");
    query.addArgument("occupation");
    query.addArgument("sex");
    query.addArgument("firstName");
    query.addArgument("birthDate");
    query.addArgument("lastName");
    query.addArgument("address");
    query.addArgument("childrenNames");
    query.addArgument("phones");
    return query;
}
Also used : DataModifyQuery(org.eclipse.persistence.queries.DataModifyQuery)

Example 19 with DataModifyQuery

use of org.eclipse.persistence.queries.DataModifyQuery in project eclipselink by eclipse-ee4j.

the class OneToManyMapping method initializeChangeOrderTargetQuery.

/**
 * INTERNAL:
 * Initialize changeOrderTargetQuery.
 */
@Override
protected void initializeChangeOrderTargetQuery(AbstractSession session) {
    boolean hasChangeOrderTargetQuery = changeOrderTargetQuery != null;
    if (!hasChangeOrderTargetQuery) {
        changeOrderTargetQuery = new DataModifyQuery();
    }
    changeOrderTargetQuery = new DataModifyQuery();
    if (!changeOrderTargetQuery.hasSessionName()) {
        changeOrderTargetQuery.setSessionName(session.getName());
    }
    if (hasChangeOrderTargetQuery) {
        return;
    }
    DatabaseTable table = this.listOrderField.getTable();
    // Build where clause expression.
    Expression whereClause = null;
    Expression builder = new ExpressionBuilder();
    int size = targetPrimaryKeyFields.size();
    for (int index = 0; index < size; index++) {
        DatabaseField targetPrimaryKey = targetPrimaryKeyFields.get(index);
        Expression expression = builder.getField(targetPrimaryKey).equal(builder.getParameter(targetPrimaryKey));
        whereClause = expression.and(whereClause);
    }
    AbstractRecord modifyRow = new DatabaseRecord();
    modifyRow.add(this.listOrderField, null);
    SQLUpdateStatement statement = new SQLUpdateStatement();
    statement.setTable(table);
    statement.setWhereClause(whereClause);
    statement.setModifyRow(modifyRow);
    changeOrderTargetQuery.setSQLStatement(statement);
}
Also used : DatabaseRecord(org.eclipse.persistence.sessions.DatabaseRecord) FieldExpression(org.eclipse.persistence.internal.expressions.FieldExpression) ParameterExpression(org.eclipse.persistence.internal.expressions.ParameterExpression) Expression(org.eclipse.persistence.expressions.Expression) SQLUpdateStatement(org.eclipse.persistence.internal.expressions.SQLUpdateStatement) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) AbstractRecord(org.eclipse.persistence.internal.sessions.AbstractRecord) DatabaseTable(org.eclipse.persistence.internal.helper.DatabaseTable) ExpressionBuilder(org.eclipse.persistence.expressions.ExpressionBuilder) DataModifyQuery(org.eclipse.persistence.queries.DataModifyQuery)

Example 20 with DataModifyQuery

use of org.eclipse.persistence.queries.DataModifyQuery in project eclipselink by eclipse-ee4j.

the class OneToManyMapping method updateTargetRowPreDeleteSource.

/**
 * INTERNAL:
 * Update target foreign key after a target object was removed from the source. This follows following steps.
 * <p>- Extract primary key and its value from the source object.
 * <p>- Extract target key and its value from the target object.
 * <p>- Construct an update statement with above fields and values for target table.
 * <p>- execute the statement.
 */
public void updateTargetRowPreDeleteSource(ObjectLevelModifyQuery query) throws DatabaseException {
    if (this.isReadOnly) {
        return;
    }
    // Extract primary key and value from the source.
    int size = this.sourceKeyFields.size();
    AbstractRecord translationRow = new DatabaseRecord(size);
    AbstractRecord modifyRow = new DatabaseRecord(size);
    for (int index = 0; index < size; index++) {
        DatabaseField sourceKey = this.sourceKeyFields.get(index);
        DatabaseField targetForeignKey = this.targetForeignKeyFields.get(index);
        Object sourceKeyValue = query.getTranslationRow().get(sourceKey);
        translationRow.add(targetForeignKey, sourceKeyValue);
        // Need to set this value to null in the modify row.
        modifyRow.add(targetForeignKey, null);
    }
    if (listOrderField != null) {
        modifyRow.add(listOrderField, null);
    }
    // Need a different modify row than translation row, as the same field has different values in each.
    DataModifyQuery removeQuery = (DataModifyQuery) this.removeAllTargetsQuery.clone();
    removeQuery.setModifyRow(modifyRow);
    removeQuery.setHasModifyRow(true);
    removeQuery.setIsExecutionClone(true);
    query.getSession().executeQuery(removeQuery, translationRow);
}
Also used : DatabaseRecord(org.eclipse.persistence.sessions.DatabaseRecord) DatabaseField(org.eclipse.persistence.internal.helper.DatabaseField) AbstractRecord(org.eclipse.persistence.internal.sessions.AbstractRecord) DataModifyQuery(org.eclipse.persistence.queries.DataModifyQuery)

Aggregations

DataModifyQuery (org.eclipse.persistence.queries.DataModifyQuery)72 PLSQLStoredProcedureCall (org.eclipse.persistence.platform.database.oracle.plsql.PLSQLStoredProcedureCall)32 Test (org.junit.Test)24 StringReader (java.io.StringReader)23 Project (org.eclipse.persistence.sessions.Project)22 ObjectPersistenceWorkbenchXMLProject (org.eclipse.persistence.internal.sessions.factories.ObjectPersistenceWorkbenchXMLProject)21 XMLContext (org.eclipse.persistence.oxm.XMLContext)21 XMLMarshaller (org.eclipse.persistence.oxm.XMLMarshaller)21 Document (org.w3c.dom.Document)21 NonJDBCTestHelper.buildTestProject (org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.buildTestProject)17 NonJDBCTestHelper.buildWorkbenchXMLProject (org.eclipse.persistence.testing.tests.nonJDBC.NonJDBCTestHelper.buildWorkbenchXMLProject)17 AbstractRecord (org.eclipse.persistence.internal.sessions.AbstractRecord)12 DatabaseField (org.eclipse.persistence.internal.helper.DatabaseField)10 PLSQLrecord (org.eclipse.persistence.platform.database.oracle.plsql.PLSQLrecord)8 DatabaseRecord (org.eclipse.persistence.sessions.DatabaseRecord)7 Expression (org.eclipse.persistence.expressions.Expression)5 SQLUpdateStatement (org.eclipse.persistence.internal.expressions.SQLUpdateStatement)5 ExpressionBuilder (org.eclipse.persistence.expressions.ExpressionBuilder)4 DatabaseTable (org.eclipse.persistence.internal.helper.DatabaseTable)4 AbstractSession (org.eclipse.persistence.internal.sessions.AbstractSession)4