blob: 43751f3e60980daba186bb9a50df475c44552fc8 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.workbenchintegration;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.queries.DataReadQuery;
import org.eclipse.persistence.queries.StoredFunctionCall;
import org.eclipse.persistence.queries.StoredProcedureCall;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.testing.models.employee.relational.EmployeeProject;
import org.eclipse.persistence.testing.tests.customsqlstoredprocedures.EmployeeCustomSQLSystem;
import org.eclipse.persistence.tools.schemaframework.SchemaManager;
import org.eclipse.persistence.tools.schemaframework.StoredProcedureDefinition;
import org.eclipse.persistence.sessions.factories.XMLProjectReader;
import org.eclipse.persistence.sessions.factories.XMLProjectWriter;
/**
* This test system uses the Employee Custom SQL test system to test the integration between the
* Mapping Workbench and the Foundation Library. in addition, it writes stored
* procedure calls into project XML on which stored procedure WM integration test model runs.
* @author Kyle Chen
*/
public class EmployeeCustomSQLMWIntegrationSystem extends EmployeeCustomSQLSystem {
public static String PROJECT_FILE = "MWIntegrationCustomSQLEmployeeProject";
public ClassDescriptor employeeDescriptor;
/**
* Override the constructor for employee system to allow us to read and write XML
*/
public EmployeeCustomSQLMWIntegrationSystem() {
this(PROJECT_FILE);
}
/**
* Override the constructor for employee system to allow us to read and write XML
*/
public EmployeeCustomSQLMWIntegrationSystem(String fileName) {
initializeProject(getInitialProject(), fileName);
}
/**
* This initial project will be written to a Project.xml.
*/
public org.eclipse.persistence.sessions.Project getInitialProject() {
org.eclipse.persistence.sessions.Project initialProject = new EmployeeProject();
employeeDescriptor =
initialProject.getDescriptors().get(org.eclipse.persistence.testing.models.employee.domain.Employee.class);
addQueries();
return initialProject;
}
/**
* Writes the initial project to a Project.xml, read project back from project.xml.
*/
public void initializeProject(org.eclipse.persistence.sessions.Project initialProject, String fileName) {
XMLProjectWriter.write(fileName + ".xml", initialProject);
project = XMLProjectReader.read(fileName + ".xml", getClass().getClassLoader());
}
//build your owner stored procedure rather than those inherited if necessary.
//schema.replaceObject(buildOracleStoredProcedureForProjectXML());
@Override
public void createTables(DatabaseSession session) {
super.createTables(session);
org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform = session.getLogin().getPlatform();
SchemaManager schema = new SchemaManager((session));
if (platform.isOracle()) {
}
}
public void addQueries() {
buildStoredProcedureCallInQueryIntoDescriptor();
buildUNamedStoredProcedureCallInQueryIntoDescriptor();
buildNamedQueryWithStoredFunctionIntoDescriptor();
}
//Add additional stored procedure call.
public StoredProcedureDefinition buildOracleStoredProcedureForProjectXML() {
StoredProcedureDefinition proc = new StoredProcedureDefinition();
return proc;
}
public void buildStoredProcedureCallInQueryIntoDescriptor() {
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("StoredProcedure_InOut_Out_In");
call.addNamedInOutputArgumentValue("P_INOUT", 100, "P_INOUT_FIELD_NAME", Integer.class);
call.addNamedOutputArgument("P_OUT", "P_OUT_FIELD_NAME", Integer.class);
call.addNamedArgumentValue("P_IN", 1000);
//Set stored procedure to Named query.
DataReadQuery dataReadQuery = new DataReadQuery();
dataReadQuery.setCall(call);
employeeDescriptor.getQueryManager().addQuery("StoredProcedureCallInDataReadQuery", dataReadQuery);
}
public void buildUNamedStoredProcedureCallInQueryIntoDescriptor() {
StoredProcedureCall unamedcall = new StoredProcedureCall();
unamedcall.setProcedureName("StoredProcedure_InOut_Out_In");
unamedcall.addUnamedInOutputArgumentValue(100, "P_INOUT_FIELD_NAME", Integer.class);
unamedcall.addUnamedOutputArgument("P_OUT_FIELD_NAME", Integer.class);
unamedcall.addUnamedArgumentValue(1000);
//Set stored procedure to Named query
DataReadQuery unameddataReadQuery = new DataReadQuery();
unameddataReadQuery.setCall(unamedcall);
employeeDescriptor.getQueryManager().addQuery("UNamedStoredProcedureCallInDataReadQuery", unameddataReadQuery);
}
public void buildNamedQueryWithStoredFunctionIntoDescriptor() {
/*
StoredFunctionDefinition func = new StoredFunctionDefinition();
func.setName("StoredFunction_InOut_Out_In");
func.addInOutputArgument("P_INOUT", Long.class);
func.addOutputArgument("P_OUT", Long.class);
func.addArgument("P_IN", Long.class);
func.setReturnType(Long.class);
func.addStatement("P_OUT := P_INOUT");
func.addStatement("P_INOUT := P_IN");
func.addStatement("RETURN P_OUT");
*/
DataReadQuery drq = new DataReadQuery();
drq.setName("StoredFunctionCallInNamedQuery");
drq.addArgument("P_INOUT", Long.class);
drq.addArgument("P_IN", Long.class);
StoredFunctionCall sfc = new StoredFunctionCall();
sfc.setProcedureName("StoredFunction_InOut_Out_In");
sfc.addNamedInOutputArgument("P_INOUT", "P_INOUT", Long.class);
sfc.addNamedOutputArgument("P_OUT", "P_OUT", Long.class);
sfc.addNamedArgument("P_IN", "P_IN", Long.class);
sfc.setResult("", Long.class);
drq.addCall(sfc);
employeeDescriptor.getQueryManager().addQuery("StoredFunctionCallInNamedQuery", drq);
}
}