From 97cc2135f269531d51e2f284dd1bb289d288886a Mon Sep 17 00:00:00 2001 From: lananda Date: Wed, 29 Jun 2022 16:25:09 +0530 Subject: [PATCH 01/13] Fix for %TYPE operator parsing error --- .../tools/dbws/oracle/OracleHelper.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java index 78a5f6be102..52a76516ab0 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2022 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 @@ -459,6 +459,8 @@ protected Result buildResultForStoredFunction(ArgumentType returnArgument, Strin rargJdbcType = STRUCT; } else if (rargDataType.isVArrayType() || rargDataType.isObjectTableType()) { rargJdbcType = ARRAY; + } else { + rargJdbcType = Util.getJDBCTypeFromTypeName(returnArgument.getTypeName()); } } else { rargJdbcType = Util.getJDBCTypeFromTypeName(returnArgument.getTypeName()); @@ -1306,7 +1308,24 @@ protected void buildQueryForProcedureType(ProcedureType procType, Project orProj DatabaseType dataType = returnArg.getEnclosedType(); if (dataType.isVArrayType() || dataType.isObjectTableType()) { call = new StoredFunctionCall(Types.ARRAY, returnArg.getTypeName(), javaTypeName, buildFieldForNestedType(dataType)); - } else { + } else if (dataType.isTYPEType()) { + String javaType = dataType.getTypeName(); + int resultType = Util.getJDBCTypeFromTypeName(javaType); + call = new StoredFunctionCall(); + // need special handling for Date types + if (resultType == Types.DATE || resultType == Types.TIME || resultType == Types.TIMESTAMP) { + ((StoredFunctionCall) call).setResult(null, ClassConstants.TIMESTAMP); + } else if (returnArg.getEnclosedType() == ScalarDatabaseTypeEnum.XMLTYPE_TYPE) { + // special handling for XMLType types + ((StoredFunctionCall) call).setResult(getJDBCTypeForTypeName(XMLTYPE_STR), XMLTYPE_STR, + ClassConstants.OBJECT); + } else if (resultType == Types.OTHER || resultType == Types.CLOB) { + // default to OBJECT for OTHER, CLOB and LONG types + ((StoredFunctionCall) call).setResult(null, ClassConstants.OBJECT); + } else { + ((StoredFunctionCall) call).setResult(null, resultType); + } + } else { // assumes ObjectType call = new StoredFunctionCall(Types.STRUCT, returnArg.getTypeName(), javaTypeName); } @@ -1422,6 +1441,8 @@ protected void buildQueryForProcedureType(ProcedureType procType, Project orProj if (argType.isVArrayType() || argType.isObjectTableType()) { call.addNamedOutputArgument(arg.getArgumentName(), arg.getArgumentName(), Types.ARRAY, argType.getTypeName(), wrapperClass, buildFieldForNestedType(argType)); + } else if (argType.isTYPEType()) { + call.addNamedOutputArgument(arg.getArgumentName(), arg.getArgumentName(), Util.getJDBCTypeFromTypeName(argType.getTypeName())); } else { // assumes ObjectType call.addNamedOutputArgument(arg.getArgumentName(), arg.getArgumentName(), Types.STRUCT, argType.getTypeName(), wrapperClass); From 5a51de0948f8a67d1322bc311558eb4bc9bbedbc Mon Sep 17 00:00:00 2001 From: lananda Date: Wed, 29 Jun 2022 16:40:55 +0530 Subject: [PATCH 02/13] Fix for %TYPE operator parsing error --- .../tools/dbws/oracle/OracleHelper.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java index 52a76516ab0..ef2e60fb724 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java @@ -1308,24 +1308,24 @@ protected void buildQueryForProcedureType(ProcedureType procType, Project orProj DatabaseType dataType = returnArg.getEnclosedType(); if (dataType.isVArrayType() || dataType.isObjectTableType()) { call = new StoredFunctionCall(Types.ARRAY, returnArg.getTypeName(), javaTypeName, buildFieldForNestedType(dataType)); - } else if (dataType.isTYPEType()) { - String javaType = dataType.getTypeName(); - int resultType = Util.getJDBCTypeFromTypeName(javaType); - call = new StoredFunctionCall(); - // need special handling for Date types - if (resultType == Types.DATE || resultType == Types.TIME || resultType == Types.TIMESTAMP) { - ((StoredFunctionCall) call).setResult(null, ClassConstants.TIMESTAMP); - } else if (returnArg.getEnclosedType() == ScalarDatabaseTypeEnum.XMLTYPE_TYPE) { - // special handling for XMLType types - ((StoredFunctionCall) call).setResult(getJDBCTypeForTypeName(XMLTYPE_STR), XMLTYPE_STR, - ClassConstants.OBJECT); - } else if (resultType == Types.OTHER || resultType == Types.CLOB) { - // default to OBJECT for OTHER, CLOB and LONG types - ((StoredFunctionCall) call).setResult(null, ClassConstants.OBJECT); - } else { - ((StoredFunctionCall) call).setResult(null, resultType); - } - } else { + } else if (dataType.isTYPEType()) { + String javaType = dataType.getTypeName(); + int resultType = Util.getJDBCTypeFromTypeName(javaType); + call = new StoredFunctionCall(); + // need special handling for Date types + if (resultType == Types.DATE || resultType == Types.TIME || resultType == Types.TIMESTAMP) { + ((StoredFunctionCall) call).setResult(null, ClassConstants.TIMESTAMP); + } else if (returnArg.getEnclosedType() == ScalarDatabaseTypeEnum.XMLTYPE_TYPE) { + // special handling for XMLType types + ((StoredFunctionCall) call).setResult(getJDBCTypeForTypeName(XMLTYPE_STR), XMLTYPE_STR, + ClassConstants.OBJECT); + } else if (resultType == Types.OTHER || resultType == Types.CLOB) { + // default to OBJECT for OTHER, CLOB and LONG types + ((StoredFunctionCall) call).setResult(null, ClassConstants.OBJECT); + } else { + ((StoredFunctionCall) call).setResult(null, resultType); + } + } else { // assumes ObjectType call = new StoredFunctionCall(Types.STRUCT, returnArg.getTypeName(), javaTypeName); } From 61a34736b7a6479370da74b78f22f1524fd38ede Mon Sep 17 00:00:00 2001 From: lananda Date: Mon, 11 Jul 2022 09:26:55 +0530 Subject: [PATCH 03/13] Bug1562_%Type_operator_parsingerror --- .../org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java index ef2e60fb724..9aedc2e7436 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java @@ -459,7 +459,7 @@ protected Result buildResultForStoredFunction(ArgumentType returnArgument, Strin rargJdbcType = STRUCT; } else if (rargDataType.isVArrayType() || rargDataType.isObjectTableType()) { rargJdbcType = ARRAY; - } else { + } else if (rargDataType.isTYPEType() { rargJdbcType = Util.getJDBCTypeFromTypeName(returnArgument.getTypeName()); } } else { From 9592f774ec30dd2459b3a86a58f47118b6f4cfc9 Mon Sep 17 00:00:00 2001 From: lananda Date: Mon, 11 Jul 2022 10:17:42 +0530 Subject: [PATCH 04/13] Bug1562_%Type_operator_parsingerror --- .../org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java index 9aedc2e7436..d0b3aa357ec 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/oracle/OracleHelper.java @@ -459,7 +459,7 @@ protected Result buildResultForStoredFunction(ArgumentType returnArgument, Strin rargJdbcType = STRUCT; } else if (rargDataType.isVArrayType() || rargDataType.isObjectTableType()) { rargJdbcType = ARRAY; - } else if (rargDataType.isTYPEType() { + } else if (rargDataType.isTYPEType()) { rargJdbcType = Util.getJDBCTypeFromTypeName(returnArgument.getTypeName()); } } else { From 66ff042fec05b773843ca73574e2a7e697df39ed Mon Sep 17 00:00:00 2001 From: lananda Date: Mon, 25 Jul 2022 12:27:33 +0530 Subject: [PATCH 05/13] test case for Bug1562 --- .../plsqlrecord/PLSQLTypeReturnTest.java | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java new file mode 100644 index 00000000000..d79c9f63d3e --- /dev/null +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java @@ -0,0 +1,177 @@ +package dbws.testing.plsqlrecord; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.StringReader; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +//java eXtension imports +import javax.wsdl.WSDLException; + +//EclipseLink imports +import org.eclipse.persistence.internal.xr.Invocation; +import org.eclipse.persistence.internal.xr.Operation; +import org.eclipse.persistence.oxm.XMLMarshaller; +//JUnit4 imports +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.w3c.dom.Document; + +//test imports +import dbws.testing.DBWSTestSuite; + +public class PLSQLTypeReturnTest extends DBWSTestSuite { + static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; + + static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," + + "\nENAME VARCHAR(25)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; + static final String[] POPULATE_EMPTYPE_TABLE = new String[] { + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (69, 'Holly')", + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (70, 'Brooke')", + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (71, 'Patty')" }; + static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX"; + + static final String CREATE_EMP_RECORD_PACKAGE = "create or replace PACKAGE EMP_RECORD_PACKAGE IS \r\n" + + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE;\r\n" + + "END EMP_RECORD_PACKAGE;"; + static final String DROP_EMP_RECORD_PACKAGE = "DROP PACKAGE EMP_RECORD_PACKAGE"; + + static final String DROP_EMP_RECORD_PACKAGE_BODY = "DROP PACKAGE BODY EMP_RECORD_PACKAGE"; + + static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" + + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE\r\n" + "is\r\n" + + "ename_result EMPTYPEX.ENAME%TYPE;\r\n" + "BEGIN\r\n" + "SELECT ENAME into ename_result\r\n" + + "FROM EMPTYPEX\r\n" + "WHERE \r\n" + "EMPNO = l_empno;\r\n" + "return ename_result;\r\n" + "END;\r\n" + + "END EMP_RECORD_PACKAGE;"; + + static boolean ddlCreate = false; + static boolean ddlDrop = false; + static boolean ddlDebug = false; + + @BeforeClass + public static void setUp() throws WSDLException { + if (conn == null) { + try { + conn = buildConnection(); + } catch (Exception e) { + e.printStackTrace(); + } + } + String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE); + if ("true".equalsIgnoreCase(ddlCreateProp)) { + ddlCreate = true; + } + String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP); + if ("true".equalsIgnoreCase(ddlDropProp)) { + ddlDrop = true; + } + String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG); + if ("true".equalsIgnoreCase(ddlDebugProp)) { + ddlDebug = true; + } + if (ddlCreate) { + runDdl(conn, CREATE_EMPTYPE_TABLE, ddlDebug); + try { + Statement stmt = conn.createStatement(); + for (int i = 0; i < POPULATE_EMPTYPE_TABLE.length; i++) { + stmt.addBatch(POPULATE_EMPTYPE_TABLE[i]); + } + stmt.executeBatch(); + } catch (SQLException e) { + if (ddlDebug) { + e.printStackTrace(); + } + } + runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); + } + DBWS_BUILDER_XML_USERNAME = "" + + "" + "" + + "PLSQLRecord" + "off" + + ""; + DBWS_BUILDER_XML_PASSWORD = ""; + DBWS_BUILDER_XML_URL = ""; + DBWS_BUILDER_XML_DRIVER = ""; + DBWS_BUILDER_XML_PLATFORM = ""; + DBWS_BUILDER_XML_MAIN = "" + "" + "" + "" + + "" + "" + "" + "" + ""; + builder = null; + DBWSTestSuite.setUp("."); + + // execute shadow type ddl to generate JDBC equivalents of PL/SQL types + ArrayList ddls = new ArrayList(); + for (String ddl : builder.getTypeDDL()) { + ddls.add(ddl); + } + // execute the DDLs in order to avoid dependency issues + executeDDLForString(ddls, EMPREC_TYPE); + } + + /** + * Execute the DDL in the provided list containing the given DDL string. + * + */ + protected static void executeDDLForString(List ddls, String ddlString) { + for (int i = 0; i < ddls.size(); i++) { + String ddl = ddls.get(i); + if (ddl.contains(ddlString)) { + runDdl(conn, ddl, ddlDebug); + break; + } + } + } + + @AfterClass + public static void tearDown() { + if (ddlDrop) { + runDdl(conn, DROP_EMP_RECORD_PACKAGE_BODY, ddlDebug); + runDdl(conn, DROP_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, DROP_EMPTYPE_TABLE, ddlDebug); + + // drop shadow type ddl + for (String ddl : builder.getTypeDropDDL()) { + // may need to strip off trailing ';' + try { + int lastIdx = ddl.lastIndexOf(";"); + if (lastIdx == (ddl.length() - 1)) { + ddl = ddl.substring(0, ddl.length() - 1); + } + } catch (Exception xxx) { + } + runDdl(conn, ddl, ddlDebug); + } + } + } + + @Test + public void testRecordWithPercentTypeField() { + Invocation invocation = new Invocation("TestRecWithPercentTypeField"); + invocation.setParameter("EMPNO", 69); + Operation op = xrService.getOperation(invocation.getName()); + Object result = op.invoke(xrService, invocation); + assertNotNull("result is null", result); + Document doc = xmlPlatform.createDocument(); + XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); + marshaller.marshal(result, doc); + Document controlDoc = xmlParser.parse(new StringReader(EMPREC_XML)); + assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), + comparer.isNodeEqual(controlDoc, doc)); + } + + public static final String EMPREC_XML = "" + + "69" + "Holly" + ""; + +} From 815905a7edb6be006577fbfdecc054d40be3020d Mon Sep 17 00:00:00 2001 From: lananda Date: Wed, 27 Jul 2022 13:56:09 +0530 Subject: [PATCH 06/13] Bug1562 Updating test --- .../src/it/java/dbws/testing/AllTests.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java index 6d27b9777a1..dfacc7a6cb5 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java @@ -47,6 +47,7 @@ import dbws.testing.oxdescriptor.OXDescriptorTestSuite; import dbws.testing.plsqlcollection.PLSQLCollectionTestSuite; import dbws.testing.plsqlrecord.PLSQLRecordTestSuite; +import dbws.testing.plsqlrecord.PLSQLTypeReturnTest; import dbws.testing.plsqlrecord2.PLSQLRecord2TestSuite; import dbws.testing.prependedpackage.PrependedPackageTestSuite; import dbws.testing.prependedschema.PrependedSchemaTestSuite; @@ -89,6 +90,7 @@ OXDescriptorTestSuite.class, PLSQLCollectionTestSuite.class, PLSQLRecordTestSuite.class, + PLSQLTypeReturnTest.class PLSQLRecord2TestSuite.class, PrependedPackageTestSuite.class, PrependedSchemaTestSuite.class, From 019a694ba67b2892c98da56e4487f3857719859b Mon Sep 17 00:00:00 2001 From: lananda Date: Wed, 27 Jul 2022 14:36:13 +0530 Subject: [PATCH 07/13] Bug1562 Updating test --- .../src/it/java/dbws/testing/AllTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java index dfacc7a6cb5..d80bda8564e 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java @@ -90,7 +90,7 @@ OXDescriptorTestSuite.class, PLSQLCollectionTestSuite.class, PLSQLRecordTestSuite.class, - PLSQLTypeReturnTest.class + PLSQLTypeReturnTest.class, PLSQLRecord2TestSuite.class, PrependedPackageTestSuite.class, PrependedSchemaTestSuite.class, From d0c17b1a39aface036e5bdc72d7174bd6217c49c Mon Sep 17 00:00:00 2001 From: lananda Date: Tue, 9 Aug 2022 14:25:12 +0530 Subject: [PATCH 08/13] Bug1562: Modified test --- .../src/it/java/dbws/testing/AllTests.java | 4 +- .../plsqlrecord/PLSQLTypeReturnTest.java | 14 +- .../plsqlrecord/PLSQLTypeReturnTestSuite.java | 196 ++++++++++++++++++ 3 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java index d80bda8564e..6e00a0f2b1e 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2022 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 @@ -90,7 +90,7 @@ OXDescriptorTestSuite.class, PLSQLCollectionTestSuite.class, PLSQLRecordTestSuite.class, - PLSQLTypeReturnTest.class, + PLSQLTypeReturnTestSuite.class, PLSQLRecord2TestSuite.class, PrependedPackageTestSuite.class, PrependedSchemaTestSuite.class, diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java index d79c9f63d3e..ffcd88e8570 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java @@ -1,3 +1,15 @@ +/******************************************************************************* + * Copyright (c) 2022 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 implementation + ******************************************************************************/ package dbws.testing.plsqlrecord; import static org.junit.Assert.assertNotNull; @@ -25,7 +37,7 @@ //test imports import dbws.testing.DBWSTestSuite; -public class PLSQLTypeReturnTest extends DBWSTestSuite { +public class PLSQLTypeReturnTestSuite extends DBWSTestSuite { static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java new file mode 100644 index 00000000000..87d6c7f2bdc --- /dev/null +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java @@ -0,0 +1,196 @@ +/******************************************************************************* + * Copyright (c) 2022 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 implementation + ******************************************************************************/ +package dbws.testing.plsqlrecord; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.StringReader; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +//java eXtension imports +import javax.wsdl.WSDLException; + +//EclipseLink imports +import org.eclipse.persistence.internal.xr.Invocation; +import org.eclipse.persistence.internal.xr.Operation; +import org.eclipse.persistence.oxm.XMLMarshaller; +//JUnit4 imports +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.w3c.dom.Document; + +//test imports +import dbws.testing.DBWSTestSuite; + +public class PLSQLTypeReturnTestSuite extends DBWSTestSuite { + static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; + + static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," + + "\nENAME VARCHAR(25)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; + static final String[] POPULATE_EMPTYPE_TABLE = new String[] { + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (69, 'Holly')", + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (70, 'Brooke')", + "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (71, 'Patty')" }; + static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX"; + + static final String CREATE_EMP_RECORD_PACKAGE = "create or replace PACKAGE EMP_RECORD_PACKAGE IS \r\n" + + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE;\r\n" + + "END EMP_RECORD_PACKAGE;"; + static final String DROP_EMP_RECORD_PACKAGE = "DROP PACKAGE EMP_RECORD_PACKAGE"; + + static final String DROP_EMP_RECORD_PACKAGE_BODY = "DROP PACKAGE BODY EMP_RECORD_PACKAGE"; + + static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" + + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE\r\n" + "is\r\n" + + "ename_result EMPTYPEX.ENAME%TYPE;\r\n" + "BEGIN\r\n" + "SELECT ENAME into ename_result\r\n" + + "FROM EMPTYPEX\r\n" + "WHERE \r\n" + "EMPNO = l_empno;\r\n" + "return ename_result;\r\n" + "END;\r\n" + + "END EMP_RECORD_PACKAGE;"; + + static boolean ddlCreate = false; + static boolean ddlDrop = false; + static boolean ddlDebug = false; + + @BeforeClass + public static void setUp() throws WSDLException { + if (conn == null) { + try { + conn = buildConnection(); + } catch (Exception e) { + e.printStackTrace(); + } + } + String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE); + if ("true".equalsIgnoreCase(ddlCreateProp)) { + ddlCreate = true; + } + String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP); + if ("true".equalsIgnoreCase(ddlDropProp)) { + ddlDrop = true; + } + String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG); + if ("true".equalsIgnoreCase(ddlDebugProp)) { + ddlDebug = true; + } + if (ddlCreate) { + runDdl(conn, CREATE_EMPTYPE_TABLE, ddlDebug); + try { + Statement stmt = conn.createStatement(); + for (int i = 0; i < POPULATE_EMPTYPE_TABLE.length; i++) { + stmt.addBatch(POPULATE_EMPTYPE_TABLE[i]); + } + stmt.executeBatch(); + } catch (SQLException e) { + if (ddlDebug) { + e.printStackTrace(); + } + } + runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); + } + DBWS_BUILDER_XML_USERNAME = + "" + + "" + + "" + + "PLSQLRecord" + + "off" + + ""; + DBWS_BUILDER_XML_PASSWORD = + ""; + DBWS_BUILDER_XML_URL = + ""; + DBWS_BUILDER_XML_DRIVER = + ""; + DBWS_BUILDER_XML_PLATFORM = + ""; + DBWS_BUILDER_XML_MAIN = + "" + + "" + + "" + + ""; + + builder = null; + DBWSTestSuite.setUp("."); + + // execute shadow type ddl to generate JDBC equivalents of PL/SQL types + ArrayList ddls = new ArrayList(); + for (String ddl : builder.getTypeDDL()) { + ddls.add(ddl); + } + // execute the DDLs in order to avoid dependency issues + executeDDLForString(ddls, EMPREC_TYPE); + } + + /** + * Execute the DDL in the provided list containing the given DDL string. + * + */ + protected static void executeDDLForString(List ddls, String ddlString) { + for (int i = 0; i < ddls.size(); i++) { + String ddl = ddls.get(i); + if (ddl.contains(ddlString)) { + runDdl(conn, ddl, ddlDebug); + break; + } + } + } + + @AfterClass + public static void tearDown() { + if (ddlDrop) { + runDdl(conn, DROP_EMP_RECORD_PACKAGE_BODY, ddlDebug); + runDdl(conn, DROP_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, DROP_EMPTYPE_TABLE, ddlDebug); + + // drop shadow type ddl + for (String ddl : builder.getTypeDropDDL()) { + // may need to strip off trailing ';' + try { + int lastIdx = ddl.lastIndexOf(";"); + if (lastIdx == (ddl.length() - 1)) { + ddl = ddl.substring(0, ddl.length() - 1); + } + } catch (Exception xxx) { + } + runDdl(conn, ddl, ddlDebug); + } + } + } + + @Test + public void testRecordWithPercentTypeField() { + Invocation invocation = new Invocation("TestRecWithPercentTypeField"); + invocation.setParameter("EMPNO", 69); + Operation op = xrService.getOperation(invocation.getName()); + Object result = op.invoke(xrService, invocation); + assertNotNull("result is null", result); + Document doc = xmlPlatform.createDocument(); + XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); + marshaller.marshal(result, doc); + Document controlDoc = xmlParser.parse(new StringReader(EMPREC_XML)); + assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), + comparer.isNodeEqual(controlDoc, doc)); + } + + public static final String EMPREC_XML = "" + + "69" + "Holly" + ""; + +} From 99b982c6a7aceabc81ae0a7ee8f2f7339c75cc89 Mon Sep 17 00:00:00 2001 From: lananda Date: Tue, 9 Aug 2022 14:43:01 +0530 Subject: [PATCH 09/13] Bug1562: Modified test --- .../src/it/java/dbws/testing/AllTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java index 6e00a0f2b1e..544455d31d3 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/AllTests.java @@ -47,7 +47,7 @@ import dbws.testing.oxdescriptor.OXDescriptorTestSuite; import dbws.testing.plsqlcollection.PLSQLCollectionTestSuite; import dbws.testing.plsqlrecord.PLSQLRecordTestSuite; -import dbws.testing.plsqlrecord.PLSQLTypeReturnTest; +import dbws.testing.plsqlrecord.PLSQLTypeReturnTestSuite; import dbws.testing.plsqlrecord2.PLSQLRecord2TestSuite; import dbws.testing.prependedpackage.PrependedPackageTestSuite; import dbws.testing.prependedschema.PrependedSchemaTestSuite; From 6c214f98bf2dd7f160f26f78ecba8156dfaecdd8 Mon Sep 17 00:00:00 2001 From: lananda Date: Tue, 9 Aug 2022 14:46:41 +0530 Subject: [PATCH 10/13] Bug1562: deleted PLSQLTypeReturnTest.java --- .../plsqlrecord/PLSQLTypeReturnTest.java | 189 ------------------ 1 file changed, 189 deletions(-) delete mode 100644 utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java deleted file mode 100644 index ffcd88e8570..00000000000 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTest.java +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2022 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 implementation - ******************************************************************************/ -package dbws.testing.plsqlrecord; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.StringReader; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; - -//java eXtension imports -import javax.wsdl.WSDLException; - -//EclipseLink imports -import org.eclipse.persistence.internal.xr.Invocation; -import org.eclipse.persistence.internal.xr.Operation; -import org.eclipse.persistence.oxm.XMLMarshaller; -//JUnit4 imports -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.w3c.dom.Document; - -//test imports -import dbws.testing.DBWSTestSuite; - -public class PLSQLTypeReturnTestSuite extends DBWSTestSuite { - static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; - - static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," - + "\nENAME VARCHAR(25)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; - static final String[] POPULATE_EMPTYPE_TABLE = new String[] { - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (69, 'Holly')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (70, 'Brooke')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (71, 'Patty')" }; - static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX"; - - static final String CREATE_EMP_RECORD_PACKAGE = "create or replace PACKAGE EMP_RECORD_PACKAGE IS \r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE;\r\n" - + "END EMP_RECORD_PACKAGE;"; - static final String DROP_EMP_RECORD_PACKAGE = "DROP PACKAGE EMP_RECORD_PACKAGE"; - - static final String DROP_EMP_RECORD_PACKAGE_BODY = "DROP PACKAGE BODY EMP_RECORD_PACKAGE"; - - static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE\r\n" + "is\r\n" - + "ename_result EMPTYPEX.ENAME%TYPE;\r\n" + "BEGIN\r\n" + "SELECT ENAME into ename_result\r\n" - + "FROM EMPTYPEX\r\n" + "WHERE \r\n" + "EMPNO = l_empno;\r\n" + "return ename_result;\r\n" + "END;\r\n" - + "END EMP_RECORD_PACKAGE;"; - - static boolean ddlCreate = false; - static boolean ddlDrop = false; - static boolean ddlDebug = false; - - @BeforeClass - public static void setUp() throws WSDLException { - if (conn == null) { - try { - conn = buildConnection(); - } catch (Exception e) { - e.printStackTrace(); - } - } - String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE); - if ("true".equalsIgnoreCase(ddlCreateProp)) { - ddlCreate = true; - } - String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP); - if ("true".equalsIgnoreCase(ddlDropProp)) { - ddlDrop = true; - } - String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG); - if ("true".equalsIgnoreCase(ddlDebugProp)) { - ddlDebug = true; - } - if (ddlCreate) { - runDdl(conn, CREATE_EMPTYPE_TABLE, ddlDebug); - try { - Statement stmt = conn.createStatement(); - for (int i = 0; i < POPULATE_EMPTYPE_TABLE.length; i++) { - stmt.addBatch(POPULATE_EMPTYPE_TABLE[i]); - } - stmt.executeBatch(); - } catch (SQLException e) { - if (ddlDebug) { - e.printStackTrace(); - } - } - runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); - runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); - } - DBWS_BUILDER_XML_USERNAME = "" - + "" + "" - + "PLSQLRecord" + "off" - + ""; - DBWS_BUILDER_XML_PASSWORD = ""; - DBWS_BUILDER_XML_URL = ""; - DBWS_BUILDER_XML_DRIVER = ""; - DBWS_BUILDER_XML_PLATFORM = ""; - DBWS_BUILDER_XML_MAIN = "" + "" + "" + "" - + "" + "" + "" + "" + ""; - builder = null; - DBWSTestSuite.setUp("."); - - // execute shadow type ddl to generate JDBC equivalents of PL/SQL types - ArrayList ddls = new ArrayList(); - for (String ddl : builder.getTypeDDL()) { - ddls.add(ddl); - } - // execute the DDLs in order to avoid dependency issues - executeDDLForString(ddls, EMPREC_TYPE); - } - - /** - * Execute the DDL in the provided list containing the given DDL string. - * - */ - protected static void executeDDLForString(List ddls, String ddlString) { - for (int i = 0; i < ddls.size(); i++) { - String ddl = ddls.get(i); - if (ddl.contains(ddlString)) { - runDdl(conn, ddl, ddlDebug); - break; - } - } - } - - @AfterClass - public static void tearDown() { - if (ddlDrop) { - runDdl(conn, DROP_EMP_RECORD_PACKAGE_BODY, ddlDebug); - runDdl(conn, DROP_EMP_RECORD_PACKAGE, ddlDebug); - runDdl(conn, DROP_EMPTYPE_TABLE, ddlDebug); - - // drop shadow type ddl - for (String ddl : builder.getTypeDropDDL()) { - // may need to strip off trailing ';' - try { - int lastIdx = ddl.lastIndexOf(";"); - if (lastIdx == (ddl.length() - 1)) { - ddl = ddl.substring(0, ddl.length() - 1); - } - } catch (Exception xxx) { - } - runDdl(conn, ddl, ddlDebug); - } - } - } - - @Test - public void testRecordWithPercentTypeField() { - Invocation invocation = new Invocation("TestRecWithPercentTypeField"); - invocation.setParameter("EMPNO", 69); - Operation op = xrService.getOperation(invocation.getName()); - Object result = op.invoke(xrService, invocation); - assertNotNull("result is null", result); - Document doc = xmlPlatform.createDocument(); - XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); - marshaller.marshal(result, doc); - Document controlDoc = xmlParser.parse(new StringReader(EMPREC_XML)); - assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), - comparer.isNodeEqual(controlDoc, doc)); - } - - public static final String EMPREC_XML = "" - + "69" + "Holly" + ""; - -} From 59c8eb9f1a6a89fc8dbbe7d9ef68ea8eec522f64 Mon Sep 17 00:00:00 2001 From: lananda Date: Wed, 10 Aug 2022 14:12:13 +0530 Subject: [PATCH 11/13] Bug1562: Edit comment for PLSQLTypeReturnTestSuite.java --- .../dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java index 87d6c7f2bdc..3f9719ec75f 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java @@ -1,4 +1,4 @@ -/******************************************************************************* +/* * Copyright (c) 2022 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 @@ -9,7 +9,7 @@ * * Contributors: * Oracle - Initial implementation - ******************************************************************************/ + */ package dbws.testing.plsqlrecord; import static org.junit.Assert.assertNotNull; From a0744107fa8353b059cec0f3ff94a6db189fb7f6 Mon Sep 17 00:00:00 2001 From: lananda Date: Sat, 20 Aug 2022 14:29:23 +0530 Subject: [PATCH 12/13] Bug1562 - Fixing testcase --- .../plsqlrecord/PLSQLTypeReturnTestSuite.java | 56 +++++++++++-------- .../tools/dbws/BaseDBWSBuilderHelper.java | 12 +++- 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java index 3f9719ec75f..f87873910f3 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java @@ -40,30 +40,37 @@ public class PLSQLTypeReturnTestSuite extends DBWSTestSuite { static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; - static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," + static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX1 (" + "\nEMPNO NUMERIC(4) NOT NULL," + "\nENAME VARCHAR(25)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; static final String[] POPULATE_EMPTYPE_TABLE = new String[] { - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (69, 'Holly')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (70, 'Brooke')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (71, 'Patty')" }; - static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX"; - - static final String CREATE_EMP_RECORD_PACKAGE = "create or replace PACKAGE EMP_RECORD_PACKAGE IS \r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE;\r\n" - + "END EMP_RECORD_PACKAGE;"; + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (69, 'Holly')", + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (70, 'Brooke')", + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (71, 'Patty')" }; + static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX1"; + + static final String CREATE_EMP_RECORD_PACKAGE = "CREATE PACKAGE EMP_RECORD_PACKAGE IS\r\n" + + "FUNCTION get_emp_record(l_empno in number) return EMPTYPEX1.ENAME%TYPE;\r\n" + + "END EMP_RECORD_PACKAGE;"; static final String DROP_EMP_RECORD_PACKAGE = "DROP PACKAGE EMP_RECORD_PACKAGE"; static final String DROP_EMP_RECORD_PACKAGE_BODY = "DROP PACKAGE BODY EMP_RECORD_PACKAGE"; - static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE\r\n" + "is\r\n" - + "ename_result EMPTYPEX.ENAME%TYPE;\r\n" + "BEGIN\r\n" + "SELECT ENAME into ename_result\r\n" - + "FROM EMPTYPEX\r\n" + "WHERE \r\n" + "EMPNO = l_empno;\r\n" + "return ename_result;\r\n" + "END;\r\n" - + "END EMP_RECORD_PACKAGE;"; - - static boolean ddlCreate = false; - static boolean ddlDrop = false; - static boolean ddlDebug = false; + static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" + + "function get_emp_record(l_empno in number) return EMPTYPEX1.ENAME%TYPE\r\n" + + "is\r\n" + + "ename_result EMPTYPEX1.ENAME%TYPE;\r\n" + + "BEGIN\r\n" + + "SELECT ENAME into ename_result\r\n" + + "FROM EMPTYPEX1\r\n" + + "WHERE \r\n" + + "EMPNO = l_empno;\r\n" + + "return ename_result;\r\n" + + "END;\r\n" + + "END EMP_RECORD_PACKAGE;\r\n"; + + static boolean ddlCreate = true; + static boolean ddlDrop = true; + static boolean ddlDebug = true; @BeforeClass public static void setUp() throws WSDLException { @@ -87,6 +94,8 @@ public static void setUp() throws WSDLException { ddlDebug = true; } if (ddlCreate) { + runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); runDdl(conn, CREATE_EMPTYPE_TABLE, ddlDebug); try { Statement stmt = conn.createStatement(); @@ -99,15 +108,13 @@ public static void setUp() throws WSDLException { e.printStackTrace(); } } - runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); - runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); } DBWS_BUILDER_XML_USERNAME = "" + "" + "" + "PLSQLRecord" + - "off" + + "on" + ""; DBWS_BUILDER_XML_PASSWORD = ""; @@ -176,10 +183,13 @@ public static void tearDown() { } @Test - public void testRecordWithPercentTypeField() { + public void testRecWithPercentTypeField() { Invocation invocation = new Invocation("TestRecWithPercentTypeField"); - invocation.setParameter("EMPNO", 69); + invocation.setParameter("l_empno", 69); Operation op = xrService.getOperation(invocation.getName()); + System.out.println("XRSERVICE " + xrService); + System.out.println("invocation " + invocation.getName()); + System.out.println("op " + invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java index f42b1700057..5515f782b18 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java @@ -76,7 +76,7 @@ import static org.eclipse.persistence.tools.dbws.Util.isNullStream; import static org.eclipse.persistence.tools.dbws.Util.requiresSimpleXMLFormat; import static org.eclipse.persistence.tools.dbws.Util.sqlMatch; - +import org.eclipse.persistence.tools.oracleddl.metadata.DatabaseTypeCompositeTestable; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -1313,6 +1313,16 @@ protected org.eclipse.persistence.internal.helper.DatabaseType buildDatabaseType plsqlCollection.setNestedType(buildDatabaseTypeFromMetadataType(((PLSQLCollectionType) dType).getEnclosedType(), catalog)); return plsqlCollection; } + + if(dType.isTYPEType()) { + OracleArrayType typeType = new OracleArrayType(); + typeType.setTypeName(typeName); + typeType.setCompatibleType(compatibleType); + typeType.setJavaTypeName(getGeneratedWrapperClassName(javaTypeName, dbwsBuilder.getProjectName())); + typeType.setNestedType(buildDatabaseTypeFromMetadataType(((TYPEType) dType).getEnclosedType(), null)); + System.out.println(">>RETURNING >>>>>>>>>>>>>> " + typeType); + return typeType; + } // handle advanced Oracle types if (dType.isVArrayType()) { OracleArrayType varray = new OracleArrayType(); From 6f553657891bbc3b6ce4254416d8812f1d8ca395 Mon Sep 17 00:00:00 2001 From: lananda Date: Sat, 20 Aug 2022 14:33:07 +0530 Subject: [PATCH 13/13] Bug1562 - Fixing testcase --- .../eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java index 5515f782b18..33f5480a199 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java @@ -1320,7 +1320,6 @@ protected org.eclipse.persistence.internal.helper.DatabaseType buildDatabaseType typeType.setCompatibleType(compatibleType); typeType.setJavaTypeName(getGeneratedWrapperClassName(javaTypeName, dbwsBuilder.getProjectName())); typeType.setNestedType(buildDatabaseTypeFromMetadataType(((TYPEType) dType).getEnclosedType(), null)); - System.out.println(">>RETURNING >>>>>>>>>>>>>> " + typeType); return typeType; } // handle advanced Oracle types