/*
* 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.query.function;
import static org.junit.Assert.*;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;
import java.util.TimeZone;
import javax.sql.rowset.serial.SerialBlob;
import javax.sql.rowset.serial.SerialClob;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.teiid.api.exception.query.FunctionExecutionException;
import org.teiid.common.buffer.BufferManagerFactory;
import org.teiid.core.types.BlobType;
import org.teiid.core.types.ClobType;
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.types.NullType;
import org.teiid.core.types.XMLType;
import org.teiid.core.types.DataTypeManager.DefaultDataClasses;
import org.teiid.core.util.Base64;
import org.teiid.core.util.ObjectConverterUtil;
import org.teiid.core.util.TimestampWithTimezone;
import org.teiid.language.SQLConstants.NonReserved;
import org.teiid.metadata.FunctionMethod.PushDown;
import org.teiid.query.unittest.FakeMetadataFactory;
import org.teiid.query.unittest.TimestampUtil;
import org.teiid.query.util.CommandContext;
import org.teiid.translator.SourceSystemFunctions;
@SuppressWarnings("nls")
public class TestFunctionLibrary {
// These are just used as shorthand convenience to make unit tests more readable below
private static final Class<String> T_STRING = DataTypeManager.DefaultDataClasses.STRING;
private static final Class<Integer> T_INTEGER = DataTypeManager.DefaultDataClasses.INTEGER;
private static final Class<BigInteger> T_BIG_INTEGER = DataTypeManager.DefaultDataClasses.BIG_INTEGER;
private static final Class<? extends BigDecimal> T_BIG_DECIMAL = DataTypeManager.DefaultDataClasses.BIG_DECIMAL;
private static final Class<Long> T_LONG = DataTypeManager.DefaultDataClasses.LONG;
private static final Class<Float> T_FLOAT = DataTypeManager.DefaultDataClasses.FLOAT;
private static final Class<Double> T_DOUBLE = DataTypeManager.DefaultDataClasses.DOUBLE;
private static final Class<NullType> T_NULL = DataTypeManager.DefaultDataClasses.NULL;
private static final Class<Time> T_TIME = DataTypeManager.DefaultDataClasses.TIME;
private static final Class<Date> T_DATE = DataTypeManager.DefaultDataClasses.DATE;
private static final Class<Timestamp> T_TIMESTAMP = DataTypeManager.DefaultDataClasses.TIMESTAMP;
private FunctionLibrary library = new FunctionLibrary(FakeMetadataFactory.SFM.getSystemFunctions());
@Before public void setUp() {
TimestampWithTimezone.resetCalendar(TimeZone.getTimeZone("GMT-06:00")); //$NON-NLS-1$
}
@After public void tearDown() {
TimestampWithTimezone.resetCalendar(null);
}
// ################################## TEST HELPERS ################################
private FunctionDescriptor helpCreateDescriptor(String name, Class<?>[] types) {
final String fname = name;
final Class<?>[] ftypes = types;
return new FunctionDescriptor() {
public String getName() {
return fname;
}
public PushDown getPushdown() {
return PushDown.CAN_PUSHDOWN;
}
public Class<?>[] getTypes() {
return ftypes;
}
public Class<?> getReturnType() {
return null;
}
public String toString() {
StringBuffer str = new StringBuffer(fname);
str.append("("); //$NON-NLS-1$
for(int i=0; i<ftypes.length; i++) {
if(ftypes[i] != null) {
str.append(ftypes[i].getName());
} else {
str.append("null"); //$NON-NLS-1$
}
if(i<(ftypes.length-1)) {
str.append(", "); //$NON-NLS-1$
}
}
return str.toString();
}
public boolean requiresContext() {
return false;
}
public boolean isNullDependent() {
return true;
}
};
}
private void helpFindFunction(String fname, Class<?>[] types, FunctionDescriptor expected) {
FunctionDescriptor actual = library.findFunction(fname, types);
assertEquals("Function names do not match: ", expected.getName().toLowerCase(), actual.getName().toLowerCase()); //$NON-NLS-1$
assertEquals("Arg lengths do not match: ", expected.getTypes().length, actual.getTypes().length); //$NON-NLS-1$
}
private void helpFindFunctionFail(String fname, Class<?>[] types) {
FunctionDescriptor actual = library.findFunction(fname, types);
assertNull("Function was found but should not have been: " + actual, actual); //$NON-NLS-1$
}
private void helpFindConversions(String fname, Class<?>[] types, FunctionDescriptor[] expected) {
FunctionDescriptor[] actual = library.determineNecessaryConversions(fname, null, types, false);
if(expected == null) {
if(actual != null) {
fail("Expected to find no conversion for " + fname + Arrays.asList(types) + " but found: " + Arrays.asList(actual)); //$NON-NLS-1$ //$NON-NLS-2$
}
} else {
if(actual == null) {
fail("Expected to find conversion for " + fname + Arrays.asList(types) + " but found none"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
// Compare returned descriptors with expected descriptor
for(int i=0; i<expected.length; i++) {
if(expected[i] == null) {
if(actual[i] != null) {
fail("Expected no conversion at index " + i + ", but found: " + actual[i]); //$NON-NLS-1$ //$NON-NLS-2$
}
} else {
if(actual[i] == null) {
fail("Expected conversion at index " + i + ", but found none."); //$NON-NLS-1$ //$NON-NLS-2$
} else {
assertEquals("Expected conversion function names do not match: ", expected[i].getName(), actual[i].getName()); //$NON-NLS-1$
assertEquals("Expected conversion arg lengths do not match: ", expected[i].getTypes().length, actual[i].getTypes().length); //$NON-NLS-1$
}
}
}
}
}
}
private void helpFindForm(String fname, int numArgs) {
FunctionForm form = library.findFunctionForm(fname, numArgs);
assertNotNull("Failed to find function '" + fname + "' with " + numArgs + " args", form); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals("Function names do not match: ", fname.toUpperCase(), form.getName().toUpperCase()); //$NON-NLS-1$
assertEquals("Arg lengths do not match: ", numArgs, form.getArgNames().size()); //$NON-NLS-1$
}
private void helpInvokeMethod(String fname, Object[] inputs, Object expectedOutput) {
try {
helpInvokeMethod(fname, null, inputs, null, expectedOutput);
} catch (Exception err) {
throw new RuntimeException(err);
}
}
private void helpInvokeMethod(String fname, Class<?>[] types, Object[] inputs, CommandContext context, Object expectedOutput) throws FunctionExecutionException {
Object actualOutput = helpInvokeMethod(fname, types, inputs, context);
assertEquals("Actual function output not equal to expected: ", expectedOutput, actualOutput); //$NON-NLS-1$
}
private Object helpInvokeMethod(String fname, Class<?>[] types,
Object[] inputs, CommandContext context)
throws FunctionExecutionException {
if (types == null) {
// Build type signature
types = new Class<?>[inputs.length];
for(int i=0; i<inputs.length; i++) {
types[i] = DataTypeManager.determineDataTypeClass(inputs[i]);
}
}
if (context == null) {
context = new CommandContext();
}
Object actualOutput = null;
// Find function descriptor
FunctionDescriptor descriptor = library.findFunction(fname, types);
if (descriptor.requiresContext()) {
// Invoke function with inputs
Object[] in = new Object[inputs.length+1];
in[0] = context;
for (int i = 0; i < inputs.length; i++) {
in[i+1] = inputs[i];
}
actualOutput = descriptor.invokeFunction(in);
}
else {
// Invoke function with inputs
actualOutput = descriptor.invokeFunction(inputs);
}
return actualOutput;
}
private void helpInvokeMethodFail(String fname, Object[] inputs) {
helpInvokeMethodFail(fname, null, inputs);
}
private void helpInvokeMethodFail(String fname, Class<?> types[], Object[] inputs) {
try {
helpInvokeMethod(fname, types, inputs, null);
fail("expected exception"); //$NON-NLS-1$
} catch (FunctionExecutionException err) {
}
}
// ################################## ACTUAL TESTS ################################
@Test public void testFindFunction1() {
helpFindFunction("convert", new Class<?>[] { T_INTEGER, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING }) );
}
@Test public void testFindFunction2() {
helpFindFunction("cast", new Class<?>[] { T_INTEGER, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor(FunctionLibrary.CAST, new Class<?>[] { T_INTEGER, T_STRING }) );
}
@Test public void testFindFunction3() {
helpFindFunction("curdate", new Class<?>[0], //$NON-NLS-1$
helpCreateDescriptor("curdate", new Class<?>[0])); //$NON-NLS-1$
}
@Test public void testFindFunction4() {
helpFindFunctionFail("curdate", new Class<?>[] { T_INTEGER }); //$NON-NLS-1$
}
@Test public void testFindFunction5() {
helpFindFunction("+", new Class<?>[] { T_INTEGER, T_INTEGER }, //$NON-NLS-1$
helpCreateDescriptor("+", new Class<?>[] { T_INTEGER, T_INTEGER }) ); //$NON-NLS-1$
}
@Test public void testFindFunction6() {
helpFindFunctionFail("+", new Class<?>[] {T_INTEGER, T_FLOAT}); //$NON-NLS-1$
}
@Test public void testFindFunction7() {
helpFindFunctionFail("+", new Class<?>[] {T_INTEGER, T_FLOAT, T_INTEGER}); //$NON-NLS-1$
}
@Test public void testFindFunction8() {
helpFindFunctionFail("+", new Class<?>[] {T_INTEGER}); //$NON-NLS-1$
}
@Test public void testFindFunction9() {
helpFindFunctionFail("+", new Class<?>[] {T_INTEGER, T_NULL }); //$NON-NLS-1$
}
@Test public void testFindFunction10() {
helpFindFunction("substring", new Class<?>[] { T_STRING, T_INTEGER, T_INTEGER }, //$NON-NLS-1$
helpCreateDescriptor("substring", new Class<?>[] { T_STRING, T_INTEGER, T_INTEGER }) ); //$NON-NLS-1$
}
@Test public void testFindFunction11() {
helpFindFunction("substring", new Class<?>[] { T_STRING, T_INTEGER }, //$NON-NLS-1$
helpCreateDescriptor("substring", new Class<?>[] { T_STRING, T_INTEGER }) ); //$NON-NLS-1$
}
@Test public void testFindFunction12() {
helpFindFunction("context", new Class<?>[] { T_STRING, T_INTEGER }, //$NON-NLS-1$
helpCreateDescriptor("context", new Class<?>[] { T_STRING, T_INTEGER }) ); //$NON-NLS-1$
}
@Test public void testFindFunction12a() {
helpFindFunction("rowlimit", new Class<?>[] { T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("rowlimit", new Class<?>[] { T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction12b() {
helpFindFunction("rowlimitexception", new Class<?>[] { T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("rowlimitexception", new Class<?>[] { T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFind0ArgConversion1() {
helpFindConversions(
"curdate", new Class<?>[] {}, //$NON-NLS-1$
new FunctionDescriptor[0] );
}
@Test public void testFind0ArgConversion2() {
helpFindConversions(
"curdate", new Class<?>[] { T_INTEGER }, //$NON-NLS-1$
null );
}
@Test public void testFind1ArgConversion1() {
helpFindConversions(
"length", new Class<?>[] { T_STRING }, //$NON-NLS-1$
new FunctionDescriptor[1] );
}
@Test public void testFind1ArgConversion2() {
helpFindConversions(
"length", new Class<?>[] { T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING })
} );
}
@Test public void testFind1ArgConversion3() {
helpFindConversions(
"length", new Class<?>[] { DataTypeManager.DefaultDataClasses.TIMESTAMP }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.TIMESTAMP, T_STRING })
} );
}
@Test public void testFind2ArgConversion1() {
helpFindConversions(
"+", new Class<?>[] { T_INTEGER, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[2] );
}
@Test public void testFind2ArgConversion2() {
helpFindConversions(
"+", new Class<?>[] { T_INTEGER, T_FLOAT }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_FLOAT, T_STRING }) } );
}
@Test public void testFind2ArgConversion3() {
helpFindConversions(
"+", new Class<?>[] { T_FLOAT, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_FLOAT, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING }) } );
}
@Test public void testFind2ArgConversion4() {
helpFindConversions(
"+", new Class<?>[] { T_STRING, T_FLOAT }, //$NON-NLS-1$
null );
}
@Test public void testFind2ArgConversion5() {
helpFindConversions(
"+", new Class<?>[] { T_NULL, T_NULL }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }) } );
}
@Test public void testFind2ArgConversion6() {
helpFindConversions(
"+", new Class<?>[] { T_NULL, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
null } );
}
@Test public void testFind2ArgConversion7() {
helpFindConversions(
"+", new Class<?>[] { T_INTEGER, T_NULL }, //$NON-NLS-1$
new FunctionDescriptor[] {
null,
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }) } );
}
@Test public void testFind3ArgConversion1() {
helpFindConversions(
"substring", new Class<?>[] { T_STRING, T_INTEGER, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[3] );
}
@Test public void testFind3ArgConversion2() {
helpFindConversions(
"substring", new Class<?>[] { T_INTEGER, T_INTEGER, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING }),
null,
null
} );
}
@Test public void testFind3ArgConversion3() {
helpFindConversions(
"substring", new Class<?>[] { T_INTEGER, T_INTEGER, DataTypeManager.DefaultDataClasses.SHORT }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_INTEGER, T_STRING }),
null,
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.SHORT, T_STRING })
} );
}
@Test public void testFind3ArgConversion4() {
helpFindConversions(
"substring", new Class<?>[] { T_STRING, T_INTEGER, DataTypeManager.DefaultDataClasses.TIMESTAMP }, //$NON-NLS-1$
null );
}
@Test public void testFind3ArgConversion5() {
helpFindConversions(
"substring", new Class<?>[] { T_STRING, DataTypeManager.DefaultDataClasses.SHORT, DataTypeManager.DefaultDataClasses.SHORT }, //$NON-NLS-1$
new FunctionDescriptor[] {
null,
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.SHORT, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.SHORT, T_STRING })
} );
}
@Test public void testFind3ArgConversion6() {
helpFindConversions(
"substring", new Class<?>[] { T_INTEGER, DataTypeManager.DefaultDataClasses.SHORT, DataTypeManager.DefaultDataClasses.SHORT }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.INTEGER, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.SHORT, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { DataTypeManager.DefaultDataClasses.SHORT, T_STRING })
} );
}
@Test public void testFind3ArgConversion7() {
helpFindConversions(
"substring", new Class<?>[] { T_NULL, T_INTEGER, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
null,
null }
);
}
@Test public void testFind3ArgConversion8() {
helpFindConversions(
"substring", new Class<?>[] { T_NULL, T_NULL, T_INTEGER }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
null }
);
}
@Test public void testFind3ArgConversion9() {
helpFindConversions(
"substring", new Class<?>[] { T_NULL, T_NULL, T_NULL }, //$NON-NLS-1$
new FunctionDescriptor[] {
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }),
helpCreateDescriptor(FunctionLibrary.CONVERT, new Class<?>[] { T_NULL, T_STRING }) }
);
}
// Walk through all functions by metadata
@Test public void testEnumerateForms() {
Collection<String> categories = library.getFunctionCategories();
for (String category : categories) {
//System.out.println("Category: " + category);
Collection<FunctionForm> functions = library.getFunctionForms(category);
for (FunctionForm form : functions) {
//System.out.println("\tFunction: " + form.getDisplayString());
// Lookup this form
helpFindForm(form.getName(), form.getArgNames().size());
}
}
}
@Test public void testFindForm1() {
helpFindForm("convert", 2); //$NON-NLS-1$
}
@Test public void testFindForm2() {
helpFindForm("locate", 2); //$NON-NLS-1$
}
@Test public void testFindForm3() {
helpFindForm("locate", 3); //$NON-NLS-1$
}
@Test public void testFindForm4() {
helpFindForm("substring", 2); //$NON-NLS-1$
}
@Test public void testFindForm5() {
helpFindForm("substring", 3); //$NON-NLS-1$
}
@Test public void testFindForm6() {
helpFindForm("now", 0); //$NON-NLS-1$
}
@Test public void testInvokePlus1() {
helpInvokeMethod("+", new Object[] { new Integer(3), new Integer(2) }, new Integer(5)); //$NON-NLS-1$
}
@Test public void testInvokePlus2() {
helpInvokeMethod("+", new Object[] { new Long(3), new Long(2) }, new Long(5)); //$NON-NLS-1$
}
@Test public void testInvokePlus3() {
helpInvokeMethod("+", new Object[] { new Float(3), new Float(2) }, new Float(5)); //$NON-NLS-1$
}
@Test public void testInvokePlus4() {
helpInvokeMethod("+", new Object[] { new Double(3), new Double(2) }, new Double(5)); //$NON-NLS-1$
}
@Test public void testInvokePlus5() {
helpInvokeMethod("+", new Object[] { new BigInteger("3"), new BigInteger("2") }, new BigInteger("5")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokePlus6() {
helpInvokeMethod("+", new Object[] { new BigDecimal("3"), new BigDecimal("2") }, new BigDecimal("5")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeMinus1() {
helpInvokeMethod("-", new Object[] { new Integer(3), new Integer(2) }, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeMinus2() {
helpInvokeMethod("-", new Object[] { new Long(3), new Long(2) }, new Long(1)); //$NON-NLS-1$
}
@Test public void testInvokeMinus3() {
helpInvokeMethod("-", new Object[] { new Float(3), new Float(2) }, new Float(1)); //$NON-NLS-1$
}
@Test public void testInvokeMinus4() {
helpInvokeMethod("-", new Object[] { new Double(3), new Double(2) }, new Double(1)); //$NON-NLS-1$
}
@Test public void testInvokeMinus5() {
helpInvokeMethod("-", new Object[] { new BigInteger("3"), new BigInteger("2") }, new BigInteger("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeMinus6() {
helpInvokeMethod("-", new Object[] { new BigDecimal("3"), new BigDecimal("2") }, new BigDecimal("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeMultiply1() {
helpInvokeMethod("*", new Object[] { new Integer(3), new Integer(2) }, new Integer(6)); //$NON-NLS-1$
}
@Test public void testInvokeMultiply2() {
helpInvokeMethod("*", new Object[] { new Long(3), new Long(2) }, new Long(6)); //$NON-NLS-1$
}
@Test public void testInvokeMultiply3() {
helpInvokeMethod("*", new Object[] { new Float(3), new Float(2) }, new Float(6)); //$NON-NLS-1$
}
@Test public void testInvokeMultiply4() {
helpInvokeMethod("*", new Object[] { new Double(3), new Double(2) }, new Double(6)); //$NON-NLS-1$
}
@Test public void testInvokeMultiply5() {
helpInvokeMethod("*", new Object[] { new BigInteger("3"), new BigInteger("2") }, new BigInteger("6")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeMultiply6() {
helpInvokeMethod("*", new Object[] { new BigDecimal("3"), new BigDecimal("2") }, new BigDecimal("6")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeDivide1() {
helpInvokeMethod("/", new Object[] { new Integer(3), new Integer(2) }, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeDivide2() {
helpInvokeMethod("/", new Object[] { new Long(3), new Long(2) }, new Long(1)); //$NON-NLS-1$
}
@Test public void testInvokeDivide3() {
helpInvokeMethod("/", new Object[] { new Float(3), new Float(2) }, new Float(1.5)); //$NON-NLS-1$
}
@Test public void testInvokeDivide4() {
helpInvokeMethod("/", new Object[] { new Double(3), new Double(2) }, new Double(1.5)); //$NON-NLS-1$
}
@Test public void testInvokeDivide5() {
helpInvokeMethod("/", new Object[] { new BigInteger("3"), new BigInteger("2") }, new BigInteger("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
// one digit precision
@Test public void testInvokeDivide6() {
helpInvokeMethod("/", new Object[] { new BigDecimal("3"), new BigDecimal("2") }, new BigDecimal("1.5")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeDivide7() throws Exception {
helpInvokeMethodFail("/", new Object[] { new Float("3"), new Float("0") }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeDivideMod() {
helpInvokeMethod("mod", new Object[] { new BigDecimal("3.1"), new BigDecimal("2") }, new BigDecimal("1.1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeAbs1() {
helpInvokeMethod("abs", new Object[] { new Integer(-3) }, new Integer(3)); //$NON-NLS-1$
}
@Test public void testInvokeAbs2() {
helpInvokeMethod("abs", new Object[] { new Long(-3) }, new Long(3)); //$NON-NLS-1$
}
@Test public void testInvokeAbs3() {
helpInvokeMethod("abs", new Object[] { new Float(-3) }, new Float(3)); //$NON-NLS-1$
}
@Test public void testInvokeAbs4() {
helpInvokeMethod("abs", new Object[] { new Double(-3) }, new Double(3)); //$NON-NLS-1$
}
@Test public void testInvokeAbs5() {
helpInvokeMethod("abs", new Object[] { new BigInteger("-3") }, new BigInteger("3")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeAbs6() {
helpInvokeMethod("abs", new Object[] { new BigDecimal("-3") }, new BigDecimal("3")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeAcos() {
helpInvokeMethod("acos", new Object[] { new Double(0.05) }, new Double(1.5207754699891267)); //$NON-NLS-1$
}
@Test public void testInvokeAsin() {
helpInvokeMethod("asin", new Object[] { new Double(0.05) }, new Double(0.050020856805770016)); //$NON-NLS-1$
}
@Test public void testInvokeAtan() {
helpInvokeMethod("atan", new Object[] { new Double(0.05) }, new Double(0.049958395721942765)); //$NON-NLS-1$
}
@Test public void testInvokeAtan2() {
helpInvokeMethod("atan2", new Object[] { new Double(0.05), new Double(0.07) }, new Double(0.6202494859828215)); //$NON-NLS-1$
}
@Test public void testInvokeAtanBigDecimal() {
helpInvokeMethod("atan", new Object[] { new BigDecimal(0.05) }, new Double(0.049958395721942765)); //$NON-NLS-1$
}
@Test public void testInvokeAtan2BigDecimal() {
helpInvokeMethod("atan2", new Object[] { new BigDecimal(0.05), new BigDecimal(0.07) }, new Double(0.6202494859828215)); //$NON-NLS-1$
}
@Test public void testInvokeCos() {
helpInvokeMethod("cos", new Object[] { new Double(1.57) }, new Double(7.963267107332633E-4)); //$NON-NLS-1$
}
@Test public void testInvokeCot() {
helpInvokeMethod("cot", new Object[] { new Double(1.57) }, new Double(7.963269632231926E-4)); //$NON-NLS-1$
}
@Test public void testInvokeDegrees() {
helpInvokeMethod("degrees", new Object[] { new Double(1.57) }, new Double(89.95437383553926)); //$NON-NLS-1$
}
@Test public void testInvokePI() {
helpInvokeMethod("pi", new Object[] { }, new Double(3.141592653589793)); //$NON-NLS-1$
}
@Test public void testInvokeRadians() {
helpInvokeMethod("radians", new Object[] { new Double(89.95437383553926) }, new Double(1.57)); //$NON-NLS-1$
}
@Test public void testInvokeSin() {
helpInvokeMethod("sin", new Object[] { new Double(1.57) }, new Double(0.9999996829318346)); //$NON-NLS-1$
}
@Test public void testInvokeTan() {
helpInvokeMethod("tan", new Object[] { new Double(0.785) }, new Double(0.9992039901050427)); //$NON-NLS-1$
}
@Test public void testInvokeAscii() {
helpInvokeMethod("ascii", new Object[] { " " }, new Integer(32)); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testInvokeChr() {
helpInvokeMethod("chr", new Object[] { new Integer(32) }, new Character(' ')); //$NON-NLS-1$
}
@Test public void testInvokeNvl() {
helpInvokeMethod("nvl", new Object[] { new Integer(5), new Integer(10) }, new Integer(5) ); //$NON-NLS-1$
}
@Test public void testInvokeConcatOperator() {
helpInvokeMethod("||", new Object[] { "a", "b" }, "ab" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeInitcap() {
helpInvokeMethod("initcap", new Object[] { "my test\ndata" }, "My Test\nData" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeLpad1() {
helpInvokeMethod("lpad", new Object[] { "x", new Integer(3) }, " x" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeLpad2() {
helpInvokeMethod("lpad", new Object[] { "x", new Integer(3), "y" }, "yyx" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeRpad1() {
helpInvokeMethod("rpad", new Object[] { "x", new Integer(3) }, "x " ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeRpad2() {
helpInvokeMethod("rpad", new Object[] { "x", new Integer(3), "y" }, "xyy" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeTranslate() {
helpInvokeMethod("translate", new Object[] { "ababcd", "ad", "da" }, "dbdbca" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
}
@Test public void testFindFunction13() {
helpFindFunction("formatTime", new Class<?>[] { T_TIME, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatTime", new Class<?>[] { T_TIME, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction14() {
helpFindFunction("formatDate", new Class<?>[] { T_DATE, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatDate", new Class<?>[] { T_DATE, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction15() {
helpFindFunction("formatTimestamp", new Class<?>[] { T_TIMESTAMP, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatTimestamp", new Class<?>[] { T_TIMESTAMP, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction16() {
helpFindFunction("parseTime", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseTime", new Class<?>[] { T_STRING, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction17() {
helpFindFunction("parseDate", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseDate", new Class<?>[] { T_STRING, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction18() {
helpFindFunction("parseTimestamp", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseTimestamp", new Class<?>[] { T_STRING, T_STRING }) ); //$NON-NLS-1$
}
@Test public void testFindFunction19() {
helpFindFunction("env", new Class<?>[] {T_STRING}, //$NON-NLS-1$
helpCreateDescriptor("env", new Class<?>[] {T_STRING})); //$NON-NLS-1$
}
@Test public void testInvokeFormatTimestamp1() {
helpInvokeMethod("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("mm/dd/yy h:mm a") }, "04/05/03 3:04 AM"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatTimestamp2() {
helpInvokeMethod("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("yyyy-mm-dd k:mm a z") }, "2003-04-05 3:04 AM GMT-06:00"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatTimestamp3() {
helpInvokeMethod("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("yyyy-mm-dd hh:mm:ss.SSSS") }, "2003-04-05 03:04:12.0000"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatTimestampFail() throws Exception {
helpInvokeMethodFail("formatTimestamp", new Object[] {TimestampUtil.createTimestamp(103, 2, 5, 3, 4, 12, 255), new String("mm/dd/nn h:mm a") }); //$NON-NLS-1$
}
@Test public void testInvokeParseTimestamp1() {
helpInvokeMethod("parseTimestamp", new Object[] {new String("05 Mar 2003 03:12:23 CST"), new String("dd MMM yyyy HH:mm:ss z") }, TimestampUtil.createTimestamp(103, 2, 5, 3, 12, 23, 0)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeParseTimestamp2() {
helpInvokeMethod("parseTimestamp", new Object[] {new String("05 Mar 2003 03:12:23.333"), new String("dd MMM yyyy HH:mm:ss.SSS") }, TimestampUtil.createTimestamp(103, 2, 5, 3, 12, 23, 333*1000000)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testFindFormatInteger() {
helpFindFunction("formatInteger", new Class<?>[] { T_INTEGER, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatInteger", new Class<?>[] { T_INTEGER, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindFormatFloat() {
helpFindFunction("formatFloat", new Class<?>[] { T_FLOAT, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatFloat", new Class<?>[] { T_FLOAT, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindFormatDouble() {
helpFindFunction("formatDouble", new Class<?>[] { T_DOUBLE, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatDouble", new Class<?>[] { T_DOUBLE, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindFormatLong() {
helpFindFunction("formatLong", new Class<?>[] { T_LONG, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatLong", new Class<?>[] { T_LONG, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindFormatBigInteger() {
helpFindFunction("formatBigInteger", new Class<?>[] { T_BIG_INTEGER, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatBigInteger", new Class<?>[] { T_BIG_INTEGER, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindFormatBigDecimal() {
helpFindFunction("formatBigDecimal", new Class<?>[] { T_BIG_DECIMAL, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("formatBigDecimal", new Class<?>[] { T_BIG_DECIMAL, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseInteger() {
helpFindFunction("parseInteger", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseInteger", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseLong() {
helpFindFunction("parseLong", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseLong", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseDouble() {
helpFindFunction("parseDouble", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseDouble", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseFloat() {
helpFindFunction("parseFloat", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseFloat", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseBigInteger() {
helpFindFunction("parseBigInteger", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseBigInteger", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testFindParseBigDecimal() {
helpFindFunction("parseBigDecimal", new Class<?>[] { T_STRING, T_STRING }, //$NON-NLS-1$
helpCreateDescriptor("parseBigDecimal", new Class<?>[] { T_STRING, T_STRING}) ); //$NON-NLS-1$
}
@Test public void testInvokeParseInteger() {
helpInvokeMethod("parseInteger", new Object[] {new String("-1234"), new String("######")}, new Integer(-1234)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeParseLong() {
helpInvokeMethod("parseLong", new Object[] {new String("123456"), new String("######.##")}, new Long(123456)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeParseDouble() {
helpInvokeMethod("parseDouble", new Object[] {new String("123456.78"), new String("#####.#")}, new Double(123456.78)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeParseFloat() {
helpInvokeMethod("parseFloat", new Object[] {new String("1234.56"), new String("####.###")}, new Float(1234.56)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeParseBigInteger() {
helpInvokeMethod("parseBigInteger", new Object[] {new String("12345678"), new String("###,###")}, new BigInteger("12345678")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeParseBigDecimal() {
helpInvokeMethod("parseBigDecimal", new Object[] {new String("1234.56"), new String("#####")}, new BigDecimal("1234.56")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeFormatInteger() {
helpInvokeMethod("formatInteger", new Object[] {new Integer(-1234), new String("######")}, "-1234"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatLong() {
helpInvokeMethod("formatLong", new Object[] {new Long(123456788), new String("##,###,#")}, "1,2,3,4,5,6,7,8,8"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatDouble() {
helpInvokeMethod("formatDouble", new Object[] {new Double(1234.67), new String("####.##")}, "1234.67"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatFloat() {
helpInvokeMethod("formatFloat", new Object[] {new Float(1234.67), new String("###.###")}, "1234.67"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFormatBigInteger() {
helpInvokeMethod("formatBigInteger", new Object[] {new BigInteger("45"), new String("###.###")}, "45"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeFormatBigDecimal() {
helpInvokeMethod("formatBigDecimal", new Object[] {new BigDecimal("1234.56"), new String("###.###")}, "1234.56"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokeQuarter1() {
// 2003-5-15
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 4, 15)}, new Integer(2)); //$NON-NLS-1$
}
@Test public void testInvokeQuarter2() {
// 2003-5-1
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 3, 31)}, new Integer(2)); //$NON-NLS-1$
}
@Test public void testInvokeQuarter3() {
// 2003-1-31
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 0, 31)}, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeQuarter4() {
// 2003-9-30
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 8, 30)}, new Integer(3)); //$NON-NLS-1$
}
@Test public void testInvokeQuarter5() {
// 2003-12-31
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 11, 31)}, new Integer(4)); //$NON-NLS-1$
}
@Test public void testInvokeQuarter6() {
//bad date such as 2003-13-45
helpInvokeMethod("quarter", new Object[] {TimestampUtil.createDate(103, 12, 45)}, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeIfNull() {
helpInvokeMethod("ifnull", new Object[] {new Integer(5), new Integer(10)}, new Integer(5)); //$NON-NLS-1$
}
@Test public void testInvokeLower() {
helpInvokeMethod("lower", new Object[] {new String("LOWER")}, new String("lower")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeUpper() {
helpInvokeMethod("upper", new Object[] {new String("upper")}, new String("UPPER")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeRepeat() {
helpInvokeMethod("repeat", new Object[] {new String("cat"), new Integer(3)}, new String("catcatcat")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeChar() {
helpInvokeMethod("char", new Object[] {new Integer(32) }, new Character(' ')); //$NON-NLS-1$
}
/** normal input */
@Test public void testInvokeInsert1() {
helpInvokeMethod("insert", new Object[] {new String("Downtown"), new Integer(4), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(2), new String("cat")}, new String("Dowcatown")); //$NON-NLS-1$ //$NON-NLS-2$
}
/** empty string2 */
@Test public void testInvokeInsert2() {
helpInvokeMethod("insert", new Object[] {new String("Downtown"), new Integer(4), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(2), new String("")}, new String("Dowown")); //$NON-NLS-1$ //$NON-NLS-2$
}
/** empty string1 with start = 1 and length = 0, so result is just string2 */
@Test public void testInvokeInsert3() {
helpInvokeMethod("insert", new Object[] {new String(""), new Integer(1), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(0), new String("cat")}, new String("cat")); //$NON-NLS-1$ //$NON-NLS-2$
}
/** should fail, with start > string1.length() */
@Test public void testInvokeInsert4() throws Exception {
helpInvokeMethodFail("insert", new Object[] {new String(""), new Integer(2), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(0), new String("cat")}); //$NON-NLS-1$ //$NON-NLS-2$
}
/** should fail, with length > 0 and input string1.length() = 0 */
@Test public void testInvokeInsert5() throws Exception {
helpInvokeMethodFail("insert", new Object[] {new String(""), new Integer(1), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(1), new String("cat")}); //$NON-NLS-1$ //$NON-NLS-2$
}
/** (length + start) > string1.length(), then just append str2 starting at start position */
@Test public void testInvokeInsert6() {
helpInvokeMethod("insert", new Object[] {new String("Downtown"), new Integer(7), //$NON-NLS-1$ //$NON-NLS-2$
new Integer(5), new String("cat")}, new String("Downtocat")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testInvokeTimestampAddDate_ignore_case() {
helpInvokeMethod("timestampAdd", new Object[] {"sql_TSI_day", //$NON-NLS-1$ //$NON-NLS-2$
new Integer(28), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(103, 5, 12).getTime()));
}
/** date + month --> count=18, inteval=month, result should be 2004-11-15 */
@Test public void testInvokeTimestampAddDate2() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_MONTH, //$NON-NLS-1$
new Integer(18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 10, 15).getTime()));
}
/** date + month --> count=-18, inteval=month, result should be 2001-11-15 */
@Test public void testInvokeTimestampAddDate2a() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_MONTH, //$NON-NLS-1$
new Integer(-18), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(101, 10, 15).getTime()));
}
/** date + week --> count=6, inteval=week, result should be 2003-04-03 */
@Test public void testInvokeTimestampAddDate3() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_WEEK, //$NON-NLS-1$
new Integer(-6), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(103, 3, 3).getTime()));
}
/** date + quarter --> count=3, inteval=quarter, result should be 2004-2-15 */
@Test public void testInvokeTimestampAddDate4() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_QUARTER, //$NON-NLS-1$
new Integer(3), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(104, 1, 15).getTime()));
}
/** date + year --> count=-1, inteval=year, result should be 2002-5-15 */
@Test public void testInvokeTimestampAddDate5() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_YEAR, //$NON-NLS-1$
new Integer(-1), new Timestamp(TimestampUtil.createDate(103, 4, 15).getTime())}, new Timestamp(TimestampUtil.createDate(102, 4, 15).getTime()));
}
/** time + minute --> count=23, inteval=3, result should be 03:32:12 */
@Test public void testInvokeTimestampAddTime1() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_MINUTE, //$NON-NLS-1$
new Integer(23), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 32, 12).getTime()));
}
/** time + hour --> count=21, inteval=4, result should be 00:09:12 and overflow */
@Test public void testInvokeTimestampAddTime2() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_HOUR, //$NON-NLS-1$
new Integer(21), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 0, 9, 12, 0));
}
/** time + hour --> count=2, inteval=4, result should be 01:12:12*/
@Test public void testInvokeTimestampAddTime3() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_HOUR, //$NON-NLS-1$
new Integer(2), new Timestamp(TimestampUtil.createTime(23, 12, 12).getTime())}, TimestampUtil.createTimestamp(70, 0, 2, 1, 12, 12, 0));
}
/** time + second --> count=23, inteval=2, result should be 03:10:01 */
@Test public void testInvokeTimestampAddTime4() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_SECOND, //$NON-NLS-1$
new Integer(49), new Timestamp(TimestampUtil.createTime(3, 9, 12).getTime())}, new Timestamp(TimestampUtil.createTime(3, 10, 1).getTime()));
}
/** timestamp + second --> count=23, inteval=2, result should be 2003-05-15 03:09:35.100 */
@Test public void testInvokeTimestampAddTimestamp1() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_SECOND, //$NON-NLS-1$
new Integer(23), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 35, 100));
}
/** timestamp + nanos --> count=1, inteval=1, result should be 2003-05-15 03:09:12.000000101 */
@Test public void testInvokeTimestampAddTimestamp2() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
new Integer(1), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 100)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 12, 101));
}
/** timestamp + nanos --> count=2100000000, inteval=1, result should be 2003-05-15 03:10:01.100000003
* with increase in second and minutes, because second already at 59 sec originally
*/
@Test public void testInvokeTimestampAddTimestamp3() {
helpInvokeMethod("timestampAdd", new Object[] {NonReserved.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
new Integer(2100000000), TimestampUtil.createTimestamp(103, 4, 15, 3, 9, 59, 1)},
TimestampUtil.createTimestamp(103, 4, 15, 3, 10, 1, 100000003));
}
/** time --> interval=hour, time1 = 03:04:45, time2= 05:05:36 return = 2 */
@Test public void testInvokeTimestampDiffTime1() {
helpInvokeMethod("timestampDiff", new Object[] {NonReserved.SQL_TSI_HOUR, //$NON-NLS-1$
new Timestamp(TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(TimestampUtil.createTime(5, 5, 36).getTime()) },
new Long(2));
}
@Test public void testInvokeTimestampDiffTime1_ignorecase() {
helpInvokeMethod("timestampDiff", new Object[] {"SQL_tsi_HOUR", //$NON-NLS-1$ //$NON-NLS-2$
new Timestamp(TimestampUtil.createTime(3, 4, 45).getTime()), new Timestamp(TimestampUtil.createTime(5, 5, 36).getTime()) },
new Long(2));
}
/**
* timestamp --> interval=week, time1 = 2002-06-21 03:09:35.100,
* time2= 2003-05-02 05:19:35.500 return = 45
*/
@Test public void testInvokeTimestampDiffTimestamp1() {
helpInvokeMethod("timestampDiff", new Object[] {NonReserved.SQL_TSI_WEEK, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100), TimestampUtil.createTimestamp(103, 4, 2, 5, 19, 35, 500) },
new Long(45));
}
/**
* timestamp --> interval=frac_second, time1 = 2002-06-21 03:09:35.000000001,
* time2= 2002-06-21 03:09:35.100000000 return = 999999999
*/
@Test public void testInvokeTimestampDiffTimestamp2() {
helpInvokeMethod("timestampDiff", new Object[] {NonReserved.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 1), TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 100000000) },
new Long(99999999));
}
/**
* timestamp --> interval=frac_second, time1 = 2002-06-21 03:09:35.000000002,
* time2= 2002-06-22 03:09:35.000000001 return =
*/
@Test public void testInvokeTimestampDiffTimestamp3() {
helpInvokeMethod("timestampDiff", new Object[] {NonReserved.SQL_TSI_FRAC_SECOND, //$NON-NLS-1$
TimestampUtil.createTimestamp(102, 5, 21, 3, 9, 35, 2), TimestampUtil.createTimestamp(102, 5, 22, 3, 9, 35, 1) },
new Long(86399999999999L));
}
@Test public void testInvokeTimestampCreate1() {
helpInvokeMethod("timestampCreate", new Object[] {TimestampUtil.createDate(103, 4, 15), //$NON-NLS-1$
TimestampUtil.createTime(23, 59, 59)},
TimestampUtil.createTimestamp(103, 4, 15, 23, 59, 59, 0));
}
@Test public void testInvokeBitand() {
helpInvokeMethod("bitand", new Object[] {new Integer(0xFFF), new Integer(0x0F0)}, new Integer(0x0F0)); //$NON-NLS-1$
}
@Test public void testInvokeBitor() {
helpInvokeMethod("bitor", new Object[] {new Integer(0xFFF), new Integer(0x0F0)}, new Integer(0xFFF)); //$NON-NLS-1$
}
@Test public void testInvokeBitxor() {
helpInvokeMethod("bitxor", new Object[] {new Integer(0xFFF), new Integer(0x0F0)}, new Integer(0xF0F)); //$NON-NLS-1$
}
@Test public void testInvokeBitnot() {
helpInvokeMethod("bitnot", new Object[] {new Integer(0xF0F)}, new Integer(0xFFFFF0F0)); //$NON-NLS-1$
}
@Test public void testInvokeRound1() {
helpInvokeMethod("round", new Object[] {new Integer(123), new Integer(-1)}, new Integer(120)); //$NON-NLS-1$
}
@Test public void testInvokeRound2() {
helpInvokeMethod("round", new Object[] {new Float(123.456), new Integer(2)}, new Float(123.46)); //$NON-NLS-1$
}
@Test public void testInvokeRound3() {
helpInvokeMethod("round", new Object[] {new Double(123.456), new Integer(2)}, new Double(123.46)); //$NON-NLS-1$
}
@Test public void testInvokeRound4() {
helpInvokeMethod("round", new Object[] {new BigDecimal("123.456"), new Integer(2)}, new BigDecimal("123.460")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/** defect 10941 */
@Test public void testInvokeConvertTime() {
helpInvokeMethod("convert", new Object[] {"05:00:00", "time"}, TimestampUtil.createTime(5, 0, 0)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeXpath1() {
helpInvokeMethod("xpathValue", //$NON-NLS-1$
new Object[] {
"<?xml version=\"1.0\" encoding=\"utf-8\" ?><a><b><c>test</c></b></a>", //$NON-NLS-1$
"a/b/c"}, //$NON-NLS-1$
"test"); //$NON-NLS-1$
}
@Test public void testInvokeXpathWithNill() {
helpInvokeMethod("xpathValue", //$NON-NLS-1$
new Object[] {
"<?xml version=\"1.0\" encoding=\"utf-8\" ?><a xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><b xsi:nil=\"true\"/></a>", //$NON-NLS-1$
"//*[local-name()='b' and not(@*[local-name()='nil' and string()='true'])]"}, //$NON-NLS-1$
null);
}
@Test public void testInvokeXpathWithNill1() {
helpInvokeMethod("xpathValue", //$NON-NLS-1$
new Object[] {
"<?xml version=\"1.0\" encoding=\"utf-8\" ?><a><b>value</b></a>", //$NON-NLS-1$
"//*[local-name()='b' and not(@*[local-name()='nil' and string()='true'])]"}, //$NON-NLS-1$
"value"); //$NON-NLS-1$
}
@Test public void testInvokeModifyTimeZone() {
Timestamp ts = Timestamp.valueOf("2004-10-03 23:59:59.123"); //$NON-NLS-1$
Timestamp out = Timestamp.valueOf("2004-10-03 22:59:59.123"); //$NON-NLS-1$
helpInvokeMethod("modifyTimeZone", new Object[] {ts, "America/Chicago", "America/New_York" }, out); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
// TimestampWithTimezone has a static copy the default timezone object which makes this test not execute properly
public void defer_testInvokeModifyTimeZoneFromLocal() {
Timestamp ts = Timestamp.valueOf("2004-10-03 23:59:59.123"); //$NON-NLS-1$
Timestamp out = Timestamp.valueOf("2004-10-03 21:59:59.123"); //$NON-NLS-1$
helpInvokeMethod("modifyTimeZone", new Object[] {ts, "America/New_York" }, out); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testInvokeRand() throws Exception {
helpInvokeMethod("rand", new Object[] {new Integer(100)}, new Double(0.7220096548596434)); //$NON-NLS-1$
// this does not actually fail but returns a result
assertNotNull(helpInvokeMethod("rand", new Class<?>[] {Integer.class}, new Object[] {null}, null)); //$NON-NLS-1$
}
@Test public void testInvokeUser() throws Exception {
CommandContext c = new CommandContext();
c.setUserName("foodude"); //$NON-NLS-1$
helpInvokeMethod("user", new Class<?>[] {}, new Object[] {}, c, "foodude"); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test public void testInvokeEnv() throws Exception {
CommandContext c = new CommandContext();
Properties props = new Properties();
props.setProperty("env_test", "env_value"); //$NON-NLS-1$ //$NON-NLS-2$
c.setEnvironmentProperties(props);
helpInvokeMethod("env", new Class<?>[] {String.class}, new Object[] {"env_test"}, c, "env_value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
helpInvokeMethod("env", new Class<?>[] {String.class}, new Object[] {null}, c, null); //$NON-NLS-1$
}
@Test public void testInvokeCommandPayload() throws Exception {
CommandContext c = new CommandContext();
c.setCommandPayload("payload_too heavy"); //$NON-NLS-1$
helpInvokeMethod("commandpayload", new Class<?>[] {}, new Object[] {}, c, "payload_too heavy"); //$NON-NLS-1$ //$NON-NLS-2$
helpInvokeMethod("commandpayload", new Class<?>[] {String.class}, new Object[] {null}, c, null); //$NON-NLS-1$
Properties props = new Properties();
props.setProperty("payload", "payload_too heavy"); //$NON-NLS-1$ //$NON-NLS-2$
c.setCommandPayload(props);
helpInvokeMethod("commandpayload", new Class<?>[] {String.class}, new Object[] {"payload"}, c, "payload_too heavy"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testNullDependent() {
FunctionDescriptor actual = library.findFunction("concat2", new Class<?>[] {String.class, String.class}); //$NON-NLS-1$
assertTrue(actual.isNullDependent());
actual = library.findFunction("concat", new Class<?>[] {String.class, String.class}); //$NON-NLS-1$
assertFalse(actual.isNullDependent());
}
@Test public void testInvokeCeiling() {
helpInvokeMethod("ceiling", new Object[] { new Double("3.14") }, new Double("4")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeFloor() {
helpInvokeMethod("floor", new Object[] { new Double("3.14") }, new Double("3")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeExp() {
helpInvokeMethod("exp", new Object[] { new Double("0") }, new Double("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeLog() {
helpInvokeMethod("log", new Object[] { new Double("1") }, new Double("0")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeLog10() {
helpInvokeMethod("log10", new Object[] { new Double("10") }, new Double("1")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeLog10Error() throws Exception {
helpInvokeMethodFail("log10", new Object[] { new Double("0") }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokePower() {
helpInvokeMethod("power", new Object[] { new Double("10"), new Double("2") }, new Double("100")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
}
@Test public void testInvokePower1() {
helpInvokeMethod("power", new Object[] { new BigDecimal("10"), new Integer(2) }, new BigDecimal("100")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeSqrt() {
helpInvokeMethod("sqrt", new Object[] { new Double("4")}, new Double("2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
@Test public void testInvokeDayName() {
for (int i = 0; i < FunctionMethods.dayNames.length; i++) {
Date time = TimestampUtil.createDate(100, 0, i + 2);
helpInvokeMethod("dayName", new Object[] { time }, FunctionMethods.dayNames[i]); //$NON-NLS-1$
}
}
@Test public void testInvokeDayOfMonth() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("dayOfMonth", new Object[] { time }, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeDayOfWeek() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("dayOfWeek", new Object[] { time }, new Integer(7)); //$NON-NLS-1$
}
@Test public void testInvokeDayOfYear() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 2, 1, 2, 3, 4);
helpInvokeMethod("dayOfYear", new Object[] { time }, new Integer(2)); //$NON-NLS-1$
}
@Test public void testInvokeMonth() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("month", new Object[] { time }, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeMonthName() {
for (int i = 0; i < FunctionMethods.monthNames.length; i++) {
Date time = TimestampUtil.createDate(100, i, 1);
helpInvokeMethod("monthName", new Object[] { time }, FunctionMethods.monthNames[i]); //$NON-NLS-1$
}
}
@Test public void testInvokeMinute() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("minute", new Object[] { time }, new Integer(2)); //$NON-NLS-1$
}
@Test public void testInvokeSecond() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("second", new Object[] { time }, new Integer(3)); //$NON-NLS-1$
}
@Test public void testInvokeWeek() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("week", new Object[] { time }, new Integer(1)); //$NON-NLS-1$
}
@Test public void testInvokeYear() {
Timestamp time = TimestampUtil.createTimestamp(100, 0, 1, 1, 2, 3, 4);
helpInvokeMethod("year", new Object[] { time }, new Integer(2000)); //$NON-NLS-1$
}
@Test public void testInvokeCoalesce() {
helpInvokeMethod(FunctionLibrary.COALESCE, new Object[] { Integer.valueOf(0), Integer.valueOf(1), Integer.valueOf(2) }, Integer.valueOf(0));
}
@Test public void testInvokeCoalesce1() {
helpInvokeMethod(FunctionLibrary.COALESCE, new Object[] { null, null}, null);
}
@Test public void testInvokeNull() throws Exception {
helpInvokeMethod(SourceSystemFunctions.LTRIM, new Class<?>[] {DataTypeManager.DefaultDataClasses.STRING}, new Object[] { null }, null, null);
}
@Test public void testInvokeNull1() throws Exception {
helpInvokeMethod(SourceSystemFunctions.CONCAT, new Class<?>[] {DataTypeManager.DefaultDataClasses.STRING, DataTypeManager.DefaultDataClasses.STRING}, new Object[] { null, String.valueOf(1) }, null, null);
}
@Test public void testInvokeXslTransform() throws Exception {
CommandContext c = new CommandContext();
c.setBufferManager(BufferManagerFactory.getStandaloneBufferManager());
ClobType result = (ClobType)helpInvokeMethod("xsltransform", new Class<?>[] {DataTypeManager.DefaultDataClasses.XML, DataTypeManager.DefaultDataClasses.XML},
new Object[] {DataTypeManager.transformValue("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Catalogs xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Catalog><Items><Item ItemID=\"001\"><Name>Lamp</Name><Quantity>5</Quantity></Item></Items></Catalog></Catalogs>", DataTypeManager.DefaultDataClasses.XML),
DataTypeManager.transformValue("<?xml version=\"1.0\" encoding=\"UTF-8\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"@*|node()\"><xsl:copy><xsl:apply-templates select=\"@*|node()\"/></xsl:copy></xsl:template><xsl:template match=\"Quantity\"/></xsl:stylesheet>", DataTypeManager.DefaultDataClasses.XML)}, c);
String xml = ObjectConverterUtil.convertToString(result.getCharacterStream());
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Catalogs xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Catalog><Items><Item ItemID=\"001\"><Name>Lamp</Name></Item></Items></Catalog></Catalogs>", xml);
}
@Test public void testInvokeXmlConcat() throws Exception {
CommandContext c = new CommandContext();
c.setBufferManager(BufferManagerFactory.getStandaloneBufferManager());
XMLType result = (XMLType)helpInvokeMethod("xmlconcat", new Class<?>[] {DataTypeManager.DefaultDataClasses.XML, DataTypeManager.DefaultDataClasses.XML},
new Object[] {DataTypeManager.transformValue("<bar/>", DataTypeManager.DefaultDataClasses.XML), DataTypeManager.transformValue("<Catalogs xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Catalog><Items><Item ItemID=\"001\"><Name>Lamp</Name><Quantity>5</Quantity></Item></Items></Catalog></Catalogs>", DataTypeManager.DefaultDataClasses.XML)}, c);
String xml = ObjectConverterUtil.convertToString(result.getCharacterStream());
assertEquals("<bar/><Catalogs xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Catalog><Items><Item ItemID=\"001\"><Name>Lamp</Name><Quantity>5</Quantity></Item></Items></Catalog></Catalogs>", xml);
}
@Test public void testInvokeXmlComment() throws Exception {
CommandContext c = new CommandContext();
c.setBufferManager(BufferManagerFactory.getStandaloneBufferManager());
XMLType result = (XMLType)helpInvokeMethod("xmlcomment", new Class<?>[] {DataTypeManager.DefaultDataClasses.STRING},
new Object[] {"comment"}, c);
String xml = ObjectConverterUtil.convertToString(result.getCharacterStream());
assertEquals("<!--comment-->", xml);
}
@Test public void testToChars() throws Exception {
Clob result = (Clob)helpInvokeMethod("to_chars", new Class<?>[] {DefaultDataClasses.BLOB, DefaultDataClasses.STRING}, new Object[] { new BlobType(new SerialBlob("hello world".getBytes("ASCII"))), "ASCII" }, null); //$NON-NLS-1$
String string = result.getSubString(1, (int)result.length());
assertEquals("hello world", string);
}
@Test public void testToBytes() throws Exception {
Blob result = (Blob)helpInvokeMethod("to_bytes", new Class<?>[] {DefaultDataClasses.CLOB, DefaultDataClasses.STRING}, new Object[] { new ClobType(new SerialClob("hello world".toCharArray())), "UTF32" }, null); //$NON-NLS-1$
assertEquals(44, result.length()); //4 bytes / char
}
@Test public void testToChars1() throws Exception {
Clob result = (Clob)helpInvokeMethod("to_chars", new Class<?>[] {DefaultDataClasses.BLOB, DefaultDataClasses.STRING}, new Object[] { new BlobType(new SerialBlob("hello world".getBytes("ASCII"))), "BASE64" }, null); //$NON-NLS-1$
String string = result.getSubString(1, (int)result.length());
assertEquals("hello world", new String(Base64.decode(string), "ASCII"));
}
@Test public void testToChars2() throws Exception {
Clob result = (Clob)helpInvokeMethod("to_chars", new Class<?>[] {DefaultDataClasses.BLOB, DefaultDataClasses.STRING}, new Object[] { new BlobType(new SerialBlob("hello world".getBytes("ASCII"))), "HEX" }, null); //$NON-NLS-1$
String string = result.getSubString(1, (int)result.length());
assertEquals("68656C6C6F20776F726C64", string);
}
@Test public void testToBytes2() throws Exception {
Blob result = (Blob)helpInvokeMethod("to_bytes", new Class<?>[] {DefaultDataClasses.CLOB, DefaultDataClasses.STRING}, new Object[] { new ClobType(new SerialClob("68656C6C6F20776F726C64".toCharArray())), "HEX" }, null); //$NON-NLS-1$
assertEquals("hello world", new String(ObjectConverterUtil.convertToCharArray(result.getBinaryStream(), -1, "ASCII")));
}
@Test(expected=FunctionExecutionException.class) public void testToBytes3() throws Exception {
helpInvokeMethod("to_bytes", new Class<?>[] {DefaultDataClasses.CLOB, DefaultDataClasses.STRING}, new Object[] { new ClobType(new SerialClob("a".toCharArray())), "BASE64" }, null); //$NON-NLS-1$
}
@Test() public void testUnescape() throws Exception {
assertEquals("\r\t", helpInvokeMethod("unescape", new Class<?>[] {DefaultDataClasses.STRING}, new Object[] { "\r\\\t" }, null)); //$NON-NLS-1$
}
@Test() public void testUuid() throws Exception {
assertNotNull(helpInvokeMethod("uuid", new Class<?>[] {}, new Object[] {}, null)); //$NON-NLS-1$
}
@Test() public void testArrayGet() throws Exception {
assertEquals(1, helpInvokeMethod("array_get", new Class<?>[] {DefaultDataClasses.OBJECT, DefaultDataClasses.INTEGER}, new Object[] {new Object[] {1}, 1}, null)); //$NON-NLS-1$
}
}