/******************************************************************************* | |
* Copyright (c) 1998, 2013 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 v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.customsqlstoredprocedures; | |
import org.eclipse.persistence.sessions.DatabaseSession; | |
import org.eclipse.persistence.tools.schemaframework.FieldDefinition; | |
import org.eclipse.persistence.tools.schemaframework.SchemaManager; | |
import org.eclipse.persistence.tools.schemaframework.StoredProcedureDefinition; | |
/* | |
* modeled after EmployeeCustomSQLSystem using the underlying ObjectRelational classes from | |
* InsuranceORSystem instead of the Employee model. | |
*/ | |
public class InsuranceORStoredProcedureSystem extends org.eclipse.persistence.testing.models.insurance.objectrelational.InsuranceORSystem{ | |
public InsuranceORStoredProcedureSystem() { | |
} | |
public void addDescriptors(DatabaseSession session) { | |
session.logout(); | |
super.addDescriptors(session); | |
// Force re-initialize. | |
session.login(); | |
} | |
public StoredProcedureDefinition buildOracleStoredProcedureInsertPolicyHolders() { | |
StoredProcedureDefinition proc = new StoredProcedureDefinition(); | |
proc.setName("SProc_Insert_PHolders"); | |
proc.addArgument("ssn", Long.class); | |
proc.addArgument("occupation", String.class, 20); | |
proc.addArgument("sex", Character.class); | |
proc.addArgument("firstName", String.class, 20); | |
proc.addArgument("birthDate", java.sql.Date.class); | |
proc.addArgument("lastName", String.class, 20); | |
proc.addArgument(new FieldDefinition("address", "Address_type")); | |
proc.addArgument(new FieldDefinition("childrenNames", "NameList_type")); | |
proc.addArgument("phones", "PhoneList_type"); | |
String statement = "INSERT INTO PolicyHolders "+ | |
"(SSN, OCCUPATION, SEX, FIRSTNAME, BIRTHDATE, LASTNAME, ADDRESS, PHONES, CHILDRENNAMES, POLICIES) "+ | |
"VALUES (ssn, occupation, sex, firstName, birthDate, lastName, address, phones, childrenNames, null)"; | |
proc.addStatement(statement); | |
return proc; | |
} | |
public StoredProcedureDefinition buildOracleStoredProcedureReadFromPolicyHolders() { | |
StoredProcedureDefinition proc = new StoredProcedureDefinition(); | |
proc.setName("SProc_Read_PHolders"); | |
proc.addInOutputArgument("ssn_v", Long.class); | |
proc.addOutputArgument("occupation_v", String.class, 20); | |
proc.addOutputArgument("sex_v", Character.class); | |
proc.addOutputArgument("firstName_v", String.class, 20); | |
proc.addOutputArgument("birthDate_v", java.sql.Date.class); | |
proc.addOutputArgument("lastName_v", String.class, 20); | |
proc.addOutputArgument("address_v", "Address_type"); | |
proc.addOutputArgument("childrenNames_v", "NameList_type"); | |
proc.addOutputArgument("phones_v", "PhoneList_type"); | |
String statement = "SELECT SSN, OCCUPATION, SEX, FIRSTNAME, BIRTHDATE, LASTNAME, ADDRESS, PHONES, CHILDRENNAMES "/*, POLICIES "*/+ | |
"into ssn_v, occupation_v, sex_v, firstName_v, birthDate_v, lastName_v, address_v, phones_v, childrenNames_v "/*, policies_v "*/+ | |
"from PolicyHolders where (SSN = ssn_v)"; | |
proc.addStatement(statement); | |
return proc; | |
} | |
public StoredProcedureDefinition buildOracleStoredProcedureDeletePolicyHolders() { | |
StoredProcedureDefinition proc = new StoredProcedureDefinition(); | |
proc.setName("SProc_Delete_PHolders"); | |
proc.addInOutputArgument("ssn_v", Long.class); | |
proc.addInOutputArgument(new FieldDefinition("occupation_v", String.class, 20)); | |
proc.addInOutputArgument("sex_v", Character.class); | |
proc.addInOutputArgument(new FieldDefinition("firstName_v", String.class, 20)); | |
proc.addInOutputArgument("birthDate_v", java.sql.Date.class); | |
proc.addInOutputArgument(new FieldDefinition("lastName_v", String.class, 20)); | |
proc.addInOutputArgument(new FieldDefinition("address_v", "Address_type")); | |
proc.addInOutputArgument(new FieldDefinition("childrenNames_v", "NameList_type")); | |
proc.addInOutputArgument(new FieldDefinition("phones_v", "PhoneList_type")); | |
String statement = "SELECT SSN, OCCUPATION, SEX, FIRSTNAME, BIRTHDATE, LASTNAME, ADDRESS, PHONES, CHILDRENNAMES "/*, POLICIES "*/+ | |
"into ssn_v, occupation_v, sex_v, firstName_v, birthDate_v, lastName_v, address_v, phones_v, childrenNames_v "/*, policies_v "*/+ | |
"from PolicyHolders where (SSN = ssn_v)"; | |
proc.addStatement(statement); | |
proc.addStatement("DELETE FROM PolicyHolders where (SSN = ssn)"); | |
return proc; | |
} | |
/** | |
* Also creates the procs. | |
*/ | |
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.isSQLServer()) { | |
} | |
if (platform.isSybase() || platform.isSQLAnywhere()) { | |
} | |
if (platform.isOracle()) { | |
schema.replaceObject(buildOracleStoredProcedureInsertPolicyHolders()); | |
schema.replaceObject(buildOracleStoredProcedureReadFromPolicyHolders()); | |
schema.replaceObject(buildOracleStoredProcedureDeletePolicyHolders()); | |
} | |
if (platform.isDB2()) { | |
} | |
} | |
} |