/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.language; import java.util.List; import org.teiid.language.visitor.LanguageObjectVisitor; import org.teiid.metadata.Column; import org.teiid.metadata.ColumnSet; import org.teiid.metadata.Procedure; import org.teiid.metadata.ProcedureParameter; import org.teiid.metadata.ProcedureParameter.Type; /** * Represents a procedural execution (such as a stored procedure). */ public class Call extends BaseLanguageObject implements Command, MetadataReference<Procedure>, TableReference { private String name; private List<Argument> arguments; private Procedure metadataObject; private Class<?> returnType; private boolean tableReference; public Call(String name, List<Argument> parameters, Procedure metadataObject) { this.name = name; this.arguments = parameters; this.metadataObject = metadataObject; } /** * Get the return type * @return the return parameter type or null if not expecting a return value */ public Class<?> getReturnType() { return returnType; } public void setReturnType(Class<?> returnType) { this.returnType = returnType; } public String getProcedureName() { return this.name; } public List<Argument> getArguments() { return arguments; } public void acceptVisitor(LanguageObjectVisitor visitor) { visitor.visit(this); } public void setProcedureName(String name) { this.name = name; } public void setArguments(List<Argument> parameters) { this.arguments = parameters; } @Override public Procedure getMetadataObject() { return this.metadataObject; } public ProcedureParameter getReturnParameter() { for (ProcedureParameter param : this.metadataObject.getParameters()) { if (param.getType() == Type.ReturnValue) { return param; } } return null; } /** * @return the result set types or a zero length array if no result set is returned */ public Class<?>[] getResultSetColumnTypes() { ColumnSet<Procedure> resultSet = this.metadataObject.getResultSet(); if (resultSet == null) { return new Class[0]; } List<Column> columnMetadata = resultSet.getColumns(); int size = columnMetadata.size(); Class<?>[] coulmnDTs = new Class[size]; for(int i =0; i<size; i++ ){ coulmnDTs[i] = columnMetadata.get(i).getJavaType(); } return coulmnDTs; } public boolean isTableReference() { return tableReference; } public void setTableReference(boolean tableReference) { this.tableReference = tableReference; } }