/*
* 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.connector.metadata.runtime;
import java.sql.Timestamp;
import java.util.List;
import junit.framework.TestCase;
import org.teiid.cdk.api.TranslationUtility;
import org.teiid.core.util.UnitTestUtil;
import org.teiid.language.Argument;
import org.teiid.language.Call;
import org.teiid.language.Argument.Direction;
import org.teiid.metadata.ProcedureParameter;
import org.teiid.metadata.BaseColumn.NullType;
/**
* @since 4.3
*/
@SuppressWarnings("nls")
public class TestParams extends TestCase {
private static TranslationUtility CONNECTOR_METADATA_UTILITY = createTranslationUtility(getTestVDBName());
/**
* Constructor for TestParams.
* @param name
*/
public TestParams(String name) {
super(name);
}
private static String getTestVDBName() {
return UnitTestUtil.getTestDataPath() + "/sptest/spvdb.vdb"; //$NON-NLS-1$
}
public static TranslationUtility createTranslationUtility(String vdbName) {
return new TranslationUtility(vdbName);
}
public Call getProcedure(String procName, int inputArgs, TranslationUtility transUtil) throws Exception {
StringBuffer sql = new StringBuffer("EXEC " + procName + "("); //$NON-NLS-1$ //$NON-NLS-2$
if(inputArgs > 0) {
sql.append("null"); //$NON-NLS-1$
for(int i=1; i<inputArgs; i++) {
sql.append(", null"); //$NON-NLS-1$
}
}
sql.append(")"); //$NON-NLS-1$
Call proc = (Call) transUtil.parseCommand(sql.toString());
return proc;
}
private void checkParameter(Argument param,
String name,
String fullName,
Direction direction,
String nameInSource,
String defaultValue,
NullType nullability,
Class<?> javaType,
int length,
int precision,
int scale) throws Exception {
ProcedureParameter p = param.getMetadataObject();
assertEquals(name, p.getName());
assertEquals(fullName, p.getFullName());
assertEquals(direction, param.getDirection());
assertEquals(nameInSource, p.getNameInSource());
assertEquals(defaultValue, p.getDefaultValue());
assertEquals(nullability, p.getNullType());
assertEquals(javaType, p.getJavaType());
assertEquals(javaType, param.getType());
assertEquals(length, p.getLength());
assertEquals(precision, p.getPrecision());
assertEquals(scale, p.getScale());
assertEquals(null, param.getArgumentValue().getValue());
}
public void testProcedureWithResultSet() throws Exception {
Call proc = getProcedure("sptest.proc1", 4, CONNECTOR_METADATA_UTILITY); //$NON-NLS-1$
List params = proc.getArguments();
assertEquals(4, params.size());
checkParameter((Argument)params.get(0),
"in1", //$NON-NLS-1$
"sptest.proc1.in1", //$NON-NLS-1$
Direction.IN,
null,
"sample default",
NullType.No_Nulls, //$NON-NLS-1$
String.class,
20,
10,
5); //$NON-NLS-1$
checkParameter((Argument)params.get(1),
"in2", //$NON-NLS-1$
"sptest.proc1.in2", //$NON-NLS-1$
Direction.IN,
null,
"15",
NullType.Nullable, //$NON-NLS-1$
Integer.class,
0,
10,
0); //$NON-NLS-1$
checkParameter((Argument)params.get(2),
"in3", //$NON-NLS-1$
"sptest.proc1.in3", //$NON-NLS-1$
Direction.IN,
null,
"2003-04-23 09:30:00",
NullType.Unknown, //$NON-NLS-1$
Timestamp.class,
22,
10,
0); //$NON-NLS-1$
checkParameter((Argument)params.get(3),
"inOptional", //$NON-NLS-1$
"sptest.proc1.inOptional", //$NON-NLS-1$
Direction.IN,
"optionalName",
null, //$NON-NLS-1$
NullType.Nullable,
String.class,
0,
0,
0); //$NON-NLS-1$
}
}