blob: d6cef6e17d4132fc448372913bf2e44748c1001f [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
public class ResultInfo {
public String resultTypeName;
public String resultTypeSubname;
public boolean ncharFormOfUse;
public String resultTypeOwner;
public String resultTypeMod;
public String methodName;
public String methodNo;
public int sequence;
public int dataLength;
public int dataPrecision;
public int dataScale;
public ResultInfo(AllMethodResults r) throws SQLException {
resultTypeMod = r.resultTypeMod;
resultTypeOwner = r.resultTypeOwner;
resultTypeName = r.resultTypeName;
if ("PL/SQL BINARY INTEGER".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "BINARY_INTEGER";
}
else if ("PL/SQL BOOLEAN".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "BOOLEAN";
}
else if ("PL/SQL PLS INTEGER".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "PLS_INTEGER";
}
else if ("PL/SQL LONG".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "LONG";
}
else if ("PL/SQL LONG RAW".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "LONG RAW";
}
else if ("PL/SQL RAWID".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "PL/SQL RAWID";
}
else if ("PL/SQL URAWID".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "PL/SQL URAWID";
}
resultTypeSubname = 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 ResultInfo(UserArguments r) throws SQLException {
resultTypeMod = ""; // 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)) {
resultTypeMod = r.DATA_TYPE;
}
resultTypeOwner = r.TYPE_OWNER;
if ("PUBLIC".equalsIgnoreCase(resultTypeOwner)) {
resultTypeOwner = "SYS";
}
resultTypeName = r.TYPE_NAME;
if (SqlReflector.isNull(resultTypeName)) {
resultTypeName = r.PLS_TYPE; // added fro SqlPackageType
}
if (SqlReflector.isNull(resultTypeName)) {
resultTypeName = r.DATA_TYPE;
}
if ("PL/SQL BOOLEAN".equalsIgnoreCase(resultTypeName)) {
resultTypeName = "BOOLEAN";
}
resultTypeSubname = 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;
}
public static ResultInfo getResultInfo(Iterator<ViewRow> iter) throws SQLException {
ArrayList<ResultInfo> a = new ArrayList<ResultInfo>();
while (iter.hasNext()) {
ViewRow vr = iter.next();
if (vr.isUserArguments() || vr.isAllArguments()) {
a.add(new ResultInfo((UserArguments)vr));
}
else if (vr.isAllMethodResults()) {
a.add(new ResultInfo((AllMethodResults)vr));
}
}
if (a.size() == 0) {
throw new SQLException("Exhausted ResultSet in ResultInfo");
}
return a.get(0);
}
}