| /* |
| * 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; |
| |
| import java.sql.SQLException; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| |
| public class MethodInfo { |
| |
| public String methodName; |
| public String methodNo; |
| public String methodType; |
| public int parameters; |
| public int results; |
| |
| public MethodInfo(UserArguments row) throws SQLException { |
| methodName = row.OBJECT_NAME; |
| methodNo = row.OVERLOAD; |
| methodType = "PUBLIC"; |
| if (row.sequence == 0) { |
| parameters = 0; |
| } |
| else { |
| parameters = row.POSITION; |
| } |
| if (parameters < 0) { |
| parameters = 0; |
| } |
| results = 1 - row.POSITION; |
| if (results < 0) { |
| results = 0; |
| } |
| } |
| |
| public MethodInfo(AllTypeMethods row) throws SQLException { |
| methodName = row.methodName; |
| methodNo = row.methodNo; |
| methodType = row.methodType; |
| parameters = row.parameters; |
| results = row.results; |
| } |
| |
| public static MethodInfo[] getMethodInfo(Iterator<ViewRow> iter) throws SQLException { |
| ArrayList<MethodInfo> a = new ArrayList<MethodInfo>(); |
| while (iter.hasNext()) { |
| ViewRow vr = iter.next(); |
| if (vr.isAllArguments() || vr.isUserArguments()) { |
| a.add(new MethodInfo((AllArguments)vr)); |
| } |
| else if (vr.isAllTypeMethods()) { |
| a.add(new MethodInfo((AllTypeMethods)vr)); |
| } |
| } |
| return a.toArray(new MethodInfo[a.size()]); |
| } |
| |
| // GROUP BY: METHOD_NAME, METHOD_NO: MAX(PARAMETERS). MAX(RESULTS) |
| public static MethodInfo[] groupBy(Iterator<ViewRow> iter) throws java.sql.SQLException { |
| MethodInfo[] minfo = getMethodInfo(iter); |
| Map<String,MethodInfo> miMap = new HashMap<String,MethodInfo>(); |
| for (int i = 0; i < minfo.length; i++) { |
| String key = minfo[i].methodName + "," + minfo[i].methodNo; |
| MethodInfo mi = miMap.get(key); |
| if (mi == null) { |
| miMap.put(key, minfo[i]); |
| } |
| if (mi != null && mi.parameters < minfo[i].parameters) { |
| mi.parameters = minfo[i].parameters; |
| } |
| if (mi != null && mi.results < minfo[i].results) { |
| mi.results = minfo[i].results; |
| } |
| } |
| return miMap.values().toArray(new MethodInfo[miMap.size()]); |
| } |
| } |