blob: 3936356bffb0a7cd11fc817b3d4b9161efaca3fb [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Mike Norman - from Proof-of-concept, become production code
package dbws.testing.shadowddlgeneration.oldjpub;
//javase imports
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
//EclipseLink imports
import dbws.testing.shadowddlgeneration.oldjpub.SqlReflector;
public class ParamInfo {
public String paramName;
public String paramMode;
public int paramNo;
public String paramTypeName;
public String paramTypeSubname;
public boolean ncharFormOfUse;
public String paramTypeOwner;
public String paramTypeMod;
public String methodName;
public String methodNo;
public int sequence;
public int dataLength;
public int dataPrecision;
public int dataScale;
public int objectId;
public ParamInfo(AllMethodParams r) throws SQLException {
paramName = r.paramName;
paramMode = r.paramMode;
paramTypeMod = r.paramTypeMod;
paramTypeOwner = r.paramTypeOwner;
paramTypeName = r.paramTypeName;
if ("PL/SQL BINARY INTEGER".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "BINARY_INTEGER";
}
else if ("PL/SQL BOOLEAN".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "BOOLEAN";
}
else if ("PL/SQL PLS INTEGER".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "PLS_INTEGER";
}
else if ("PL/SQL LONG".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "LONG";
}
else if ("PL/SQL LONG RAW".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "LONG RAW";
}
else if ("PL/SQL RAWID".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "RAWID";
}
else if ("PL/SQL URAWID".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "URAWID";
}
paramTypeSubname = null;
ncharFormOfUse = false;
if (SqlReflector.NCHAR_CS.equals(r.characterSetName)) {
ncharFormOfUse = true;
}
methodName = r.methodName;
methodNo = r.methodNo;
sequence = -1;
dataLength = 0;
dataPrecision = 0;
dataScale = 0;
}
public ParamInfo(UserArguments r) throws SQLException {
paramName = r.ARGUMENT_NAME;
paramNo = r.POSITION;
paramMode = r.IN_OUT;
if ("IN/OUT".equalsIgnoreCase(paramMode)) {
paramMode = "IN OUT";
}
paramTypeMod = ""; // null in SqlPackageType
if ("REF".equalsIgnoreCase(r.DATA_TYPE) || "PL/SQL RECORD".equalsIgnoreCase(r.DATA_TYPE)
|| "PL/SQL TABLE".equalsIgnoreCase(r.DATA_TYPE)
|| "VARRAY".equalsIgnoreCase(r.DATA_TYPE) || "TABLE".equalsIgnoreCase(r.DATA_TYPE)) {
paramTypeMod = r.DATA_TYPE;
}
paramTypeOwner = r.TYPE_OWNER;
if ("PUBLIC".equalsIgnoreCase(paramTypeOwner)) {
paramTypeOwner = "SYS";
}
paramTypeName = r.TYPE_NAME;
if (SqlReflector.isNull(paramTypeName)) {
paramTypeName = r.PLS_TYPE;
}
if (SqlReflector.isNull(paramTypeName)) {
paramTypeName = r.DATA_TYPE;
}
if ("PL/SQL BOOLEAN".equalsIgnoreCase(paramTypeName)) {
paramTypeName = "BOOLEAN";
}
paramTypeSubname = r.TYPE_SUBNAME;
ncharFormOfUse = false;
if (SqlReflector.NCHAR_CS.equals(r.CHARACTER_SET_NAME)) {
ncharFormOfUse = true;
}
methodName = r.OBJECT_NAME;
methodNo = r.OVERLOAD;
sequence = r.sequence;
dataLength = r.DATA_LENGTH;
dataPrecision = r.DATA_PRECISION;
dataScale = r.DATA_SCALE;
objectId = r.OBJECT_ID;
}
public static ParamInfo[] getParamInfo(Iterator<ViewRow> iter) throws SQLException {
ArrayList<ViewRow> a = new ArrayList<ViewRow>();
while (iter.hasNext()) {
a.add(iter.next());
}
return getParamInfo(a);
}
public static ParamInfo[] getParamInfo(ArrayList<ViewRow> v) throws SQLException {
ArrayList<ParamInfo> a = new ArrayList<ParamInfo>();
for (int i = 0; i < v.size(); i++) {
ViewRow vr = v.get(i);
if (vr.isAllMethodParams()) {
a.add(new ParamInfo((AllMethodParams)vr));
}
else if (vr.isUserArguments() || vr.isAllArguments()) {
a.add(new ParamInfo((UserArguments)vr));
}
}
return a.toArray(new ParamInfo[a.size()]);
}
}