blob: e657f24825f4bb7574ec398c0e11eef935c48d45 [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;
import java.util.List;
//EclipseLink imports
import dbws.testing.shadowddlgeneration.oldjpub.SqlReflector;
public class FieldInfo {
public String fieldName;
public String fieldTypeName;
public String fieldTypeSubname;
public String fieldTypeOwner;
public String fieldTypeMod;
public String fieldMethodName;
public String fieldMethodNo;
public String fieldPackageName;
public String fieldCharacterSetName;
public int fieldSequence;
public int fieldDataLevel;
public int fieldDataLength;
public int fieldDataPrecision;
public int fieldDataScale;
public int fieldNo;
public FieldInfo(AllTypeAttrs r) throws SQLException {
fieldName = r.attrName;
fieldTypeName = r.attrTypeName;
fieldTypeSubname = null;
fieldTypeOwner = r.attrTypeOwner;
fieldTypeMod = r.attrTypeMod;
fieldMethodName = null;
fieldMethodNo = null;
fieldPackageName = null;
fieldSequence = -1;
fieldDataLevel = -1;
fieldDataLength = r.attrLength;
fieldDataPrecision = r.attrPrecision;
fieldDataScale = r.attrScale;
fieldNo = r.attrNo;
fieldCharacterSetName = r.characterSetName;
}
public FieldInfo(UserArguments r) throws SQLException {
fieldNo = r.POSITION;
fieldName = r.ARGUMENT_NAME;
fieldTypeOwner = r.TYPE_OWNER;
fieldTypeName = r.TYPE_NAME;
if (SqlReflector.isNull(fieldTypeName)) {
fieldTypeName = r.DATA_TYPE;
}
if ("PL/SQL BOOLEAN".equalsIgnoreCase(fieldTypeName)) {
fieldTypeName = "BOOLEAN";
}
fieldTypeSubname = r.TYPE_SUBNAME;
fieldTypeMod = "";
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)) {
fieldTypeMod = r.DATA_TYPE;
}
fieldPackageName = r.PACKAGE_NAME;
fieldMethodName = r.OBJECT_NAME;
fieldMethodNo = r.OVERLOAD;
fieldSequence = r.sequence;
fieldDataLevel = -1;
if ("PL/SQL RECORD".equalsIgnoreCase(r.DATA_TYPE)) {
fieldDataLength = 0;
}
else {
fieldDataLength = r.DATA_LENGTH;
}
fieldDataPrecision = r.DATA_PRECISION;
fieldDataScale = r.DATA_SCALE;
fieldCharacterSetName = r.CHARACTER_SET_NAME;
}
public static List<FieldInfo> getFieldInfo(Iterator<ViewRow> iter) throws SQLException {
ArrayList<ViewRow> v = new ArrayList<ViewRow>();
while (iter.hasNext()) {
v.add(iter.next());
}
return getFieldInfo(v);
}
public static List<FieldInfo> getFieldInfo(ArrayList<ViewRow> v) throws SQLException {
ArrayList<FieldInfo> a = new ArrayList<FieldInfo>();
for (int i = 0; i < v.size(); i++) {
ViewRow vr = v.get(i);
if (vr.isUserArguments() || vr.isAllArguments()) {
UserArguments userArguments = (UserArguments)vr;
a.add(new FieldInfo(userArguments));
}
else if (vr.isAllTypeAttrs()) {
AllTypeAttrs allTypeAttrs = (AllTypeAttrs)vr;
a.add(new FieldInfo(allTypeAttrs));
}
}
return a;
}
}