KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > smallsql > junit > TestFunctions


1 /* =============================================================
2  * SmallSQL : a free Java DBMS library for the Java(tm) platform
3  * =============================================================
4  *
5  * (C) Copyright 2004-2006, by Volker Berlin.
6  *
7  * Project Info: http://www.smallsql.de/
8  *
9  * This library is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22  * USA.
23  *
24  * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
25  * in the United States and other countries.]
26  *
27  * ---------------
28  * TestFunktions.java
29  * ---------------
30  * Author: Volker Berlin
31  *
32  */

33 package smallsql.junit;
34
35 import junit.framework.*;
36
37 import java.math.*;
38 import java.sql.*;
39
40 public class TestFunctions extends BasicTestCase{
41
42     private TestValue testValue;
43
44     private static final String JavaDoc table = "table_functions";
45
46     private static final TestValue[] TESTS = new TestValue[]{
47         a("$3" , new BigDecimal("3.0000")),
48         a("$-3.1" , new BigDecimal("-3.1000")),
49         a("-$3.2" , new BigDecimal("-3.2000")),
50         a("1 + 2" , new Integer JavaDoc(3)),
51         a("3 * 2" , new Integer JavaDoc(6)),
52         a("Top 1 4 / 2" , new Integer JavaDoc(2)),
53         a("7/3" , new Integer JavaDoc(2)),
54         a("5 - 2" , new Integer JavaDoc(3)),
55         a("- aint" , new Integer JavaDoc(120)),
56         a("5 - - 2" , new Integer JavaDoc(7)),
57         a("5 - - - 2" , new Integer JavaDoc(3)),
58         a("-.123E-1" , new Double JavaDoc("-0.0123")),
59         a(".123E-1" , new Double JavaDoc("0.0123")),
60         a("123e-1" , new Double JavaDoc("12.3")),
61         a("123E1" , new Double JavaDoc("1230")),
62         a("2*5+2" , new Integer JavaDoc("12")),
63         a("'a''b'" , "a'b"),
64         a("'a\"b'" , "a\"b"),
65         a("~1" , new Integer JavaDoc(-2)),
66         a("abs(-5)" , new Integer JavaDoc(5)),
67         a("abs(aint)" , new Integer JavaDoc(120)),
68         a("abs("+table+".aint)" , new Integer JavaDoc(120)),
69         a("abs(null)" , null),
70         a("abs(cast(5 as money))" , new BigDecimal("5.0000")),
71         a("abs(cast(-5 as money))" , new BigDecimal("5.0000")),
72         a("abs(cast(-5 as numeric(4,2)))" , new BigDecimal("5.00")),
73         a("abs(cast(5 as real))" , new Float JavaDoc(5)),
74         a("abs(cast(-5 as real))" , new Float JavaDoc(5)),
75         a("abs(cast(-5 as float))" , new Double JavaDoc(5)),
76         a("abs(cast(5 as double))" , new Double JavaDoc(5)),
77         a("abs(cast(5 as smallint))",new Integer JavaDoc(5)),
78         a("abs(cast(-5 as bigint))", new Long JavaDoc(5)),
79         a("abs(cast(5 as bigint))", new Long JavaDoc(5)),
80         a("convert(money, abs(-5))", new BigDecimal("5.0000")),
81         a("convert(varchar(30), 11)" , "11"),
82         a("convert(varchar(30), null)" , null),
83         a("convert(varchar(1), 12)" , "1"),
84         a("convert(char(5), 11)" , "11 "),
85         a("convert(longvarchar, {d '1999-10-12'})" , "1999-10-12"),
86         a("convert(binary(5), '11')" , new byte[]{'1','1',0,0,0}),
87         a("convert(binary(5), null)" , null),
88         a("convert(varbinary(5), 11)" , new byte[]{0,0,0,11}),
89         a("convert(longvarbinary, '11')", new byte[]{'1','1'}),
90         a("convert(bit, 1)" , Boolean.TRUE),
91         a("convert(bit, false)" , Boolean.FALSE),
92         a("convert(boolean, 0)" , Boolean.FALSE),
93         a("convert(varchar(30), convert(bit, false))" , "0"),
94         a("convert(varchar(30), convert(boolean, 0))" , "false"),
95         a("convert(bigint, 11)" , new Long JavaDoc(11)),
96         a("convert(int, 11)" , new Integer JavaDoc(11)),
97         a("{fn convert(11, Sql_integer)}" , new Integer JavaDoc(11)),
98         a("convert(integer, 11)" , new Integer JavaDoc(11)),
99         a("convert(smallint, 123456789)", new Integer JavaDoc((short)123456789)),
100         a("convert(tinyint, 123456789)" , new Integer JavaDoc(123456789 & 0xFF)),
101         a("convert(date, '1909-10-12')" , Date.valueOf("1909-10-12")),
102         a("convert(date, null)" , null),
103         a("convert(date, {ts '1999-10-12 15:14:13.123456'})" , Date.valueOf("1999-10-12")),
104         a("convert(date, now())" , Date.valueOf( new Date(System.currentTimeMillis()).toString()) ),
105         a("curdate()" , Date.valueOf( new Date(System.currentTimeMillis()).toString()) ),
106         a("hour(curtime())" , new Integer JavaDoc(new Time(System.currentTimeMillis()).getHours()) ),
107         a("minute({t '10:11:12'})" , new Integer JavaDoc(11) ),
108         a("month( {ts '1899-10-12 15:14:13.123456'})" , new Integer JavaDoc(10)),
109         a("convert(time, '15:14:13')" , Time.valueOf("15:14:13")),
110         a("convert(time, null)" , null),
111         a("convert(timestamp, '1999-10-12 15:14:13.123456')" , Timestamp.valueOf("1999-10-12 15:14:13.123")),
112         a("convert(varchar(30), {d '1399-10-12 3:14:13'}, -1)" , "1399-10-12"),
113         a("convert(varchar(30), {ts '1999-10-12 3:14:13.12'}, 99)" , "1999-10-12 03:14:13.12"),
114         a("convert(varchar(30), {ts '1999-10-12 0:14:13.123456'}, 0)" , "Okt 12 1999 12:14AM"),
115         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 1)" , "10/12/99"),
116         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 2)" , "99.10.12"),
117         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 3)" , "12/10/99"),
118         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 4)" , "12.10.99"),
119         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 5)" , "12-10-99"),
120         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 6)" , "12 Okt 99"),
121         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 7)" , "Okt 12, 99"),
122         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 8)" , "15:14:13"),
123         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 9)" , "Okt 12 1999 03:14:13:123PM"),
124         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 10)" , "10-12-99"),
125         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 11)" , "99/10/12"),
126         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 12)" , "991012"),
127         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 13)" , "12 Okt 1999 15:14:13:123"),
128         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 14)" , "15:14:13:123"),
129         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 20)" , "1999-10-12 15:14:13"),
130         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 21)" , "1999-10-12 15:14:13.123"),
131         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 100)" , "Okt 12 1999 03:14PM"),
132         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 101)" , "10/12/1999"),
133         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 102)" , "1999.10.12"),
134         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 103)" , "12/10/1999"),
135         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 104)" , "12.10.1999"),
136         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 105)" , "12-10-1999"),
137         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 106)" , "12 Okt 1999"),
138         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 107)" , "Okt 12, 1999"),
139         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 108)" , "15:14:13"),
140         a("convert(varchar(30), {ts '1999-10-12 3:14:13.123456'}, 109)" , "Okt 12 1999 03:14:13:123AM"),
141         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 109)" , "Okt 12 1999 03:14:13:123PM"),
142         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 110)" , "10-12-1999"),
143         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 111)" , "1999/10/12"),
144         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 112)" , "19991012"),
145         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 113)" , "12 Okt 1999 15:14:13:123"),
146         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 114)" , "15:14:13:123"),
147         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 120)" , "1999-10-12 15:14:13"),
148         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 121)" , "1999-10-12 15:14:13.123"),
149         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 126)" , "1999-10-12T15:14:13.123"),
150         a("convert(varchar(30), {ts '1999-10-12 3:14:13.123456'}, 130)" , "12 Okt 1999 03:14:13:123AM"),
151         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 130)" , "12 Okt 1999 03:14:13:123PM"),
152         a("convert(varchar(30), {ts '1999-10-12 15:14:13.123456'}, 131)" , "12/10/99 15:14:13:123"),
153         a("convert(timestamp, null)" , null),
154         a("convert(real, 11)" , new Float JavaDoc(11)),
155         a("convert(real, null)" , null),
156         a("convert(float, 11.0)" , new Double JavaDoc(11)),
157         a("convert(double, '11')" , new Double JavaDoc(11)),
158         a("-convert(decimal, '11.123456')" , new BigDecimal("-11")),
159         a("-convert(decimal(38,6), '11.123456')" , new BigDecimal("-11.123456")),
160         a("convert(decimal(38,6), '11.123456') + 1" , new BigDecimal("12.123456")),
161         a("convert(decimal(38,6), '11.123456') - 1" , new BigDecimal("10.123456")),
162         a("convert(decimal(12,2), '11.0000') * 1" , new BigDecimal("11.00")),
163         a("convert(decimal(12,2), '11.0000') * convert(decimal(12,2), 1)" , new BigDecimal("11.0000")),
164         a("convert(decimal(12,2), '11.0000') / 1" , new BigDecimal("11.0000000")), //scale = Max(left scale+5, right scale +4)
165
a("convert(decimal(12,0), 11) / convert(decimal(12,2), 1)" , new BigDecimal("11.000000")), //scale = Max(left scale+5, right scale +4)
166
a("convert(money, -10000 / 10000.0)" , new BigDecimal("-1.0000")), //scale = Max(left scale+5, right scale +4)
167
a("-convert(money, '11.123456')" , new BigDecimal("-11.1235")),
168         a("-convert(smallmoney, '11.123456')" , new BigDecimal("-11.1235")),
169         a("convert(uniqueidentifier, 0x12345678901234567890)" , "78563412-1290-5634-7890-000000000000"),
170         a("convert(uniqueidentifier, '78563412-1290-5634-7890-000000000000')" , "78563412-1290-5634-7890-000000000000"),
171         a("convert(binary(16), convert(uniqueidentifier, 0x12345678901234567890))" , new byte[]{0x12,0x34,0x56,0x78,(byte)0x90,0x12,0x34,0x56,0x78,(byte)0x90,0,0,0,0,0,0}),
172         a("Timestampdiff(day, {d '2004-10-12'}, {d '2004-10-14'})" , new Integer JavaDoc(2)),
173         a("Timestampdiff(SQL_TSI_DAY, {d '2004-10-12'}, {d '2004-10-15'})" , new Integer JavaDoc(3)),
174         a("Timestampdiff(d, {d '2004-10-12'}, {d '2004-10-16'})" , new Integer JavaDoc(4)),
175         a("Timestampdiff(dd, {d '2004-10-12'}, {d '2004-10-17'})" , new Integer JavaDoc(5)),
176         a("Timestampdiff(SQL_TSI_YEAR,{d '2000-10-12'}, {d '2005-10-17'})" , new Integer JavaDoc(5)),
177         a("Timestampdiff(year, {d '2000-10-12'}, {d '2005-10-17'})" , new Integer JavaDoc(5)),
178         a("Timestampdiff(SQL_TSI_QUARTER,{d '2000-10-12'}, {d '2005-10-17'})" , new Integer JavaDoc(20)),
179         a("Timestampdiff(quarter, {d '2000-10-12'}, {d '2005-10-17'})" , new Integer JavaDoc(20)),
180         a("Timestampdiff(SQL_TSI_MONTH, {d '2004-10-12'}, {d '2005-11-17'})" , new Integer JavaDoc(13)),
181         a("Timestampdiff(month, {d '2004-10-12'}, {d '2005-11-17'})" , new Integer JavaDoc(13)),
182         a("Timestampdiff(SQL_TSI_WEEK, {d '2004-10-09'}, {d '2004-10-12'})" , new Integer JavaDoc(1)),
183         a("Timestampdiff(week, {d '2004-10-09'}, {d '2004-10-12'})" , new Integer JavaDoc(1)),
184         a("Timestampdiff(SQL_TSI_HOUR, {d '2004-10-12'}, {d '2004-10-13'})" , new Integer JavaDoc(24)),
185         a("Timestampdiff(hour, {d '2004-10-12'}, {d '2004-10-13'})" , new Integer JavaDoc(24)),
186         a("Timestampdiff(SQL_TSI_MINUTE,{t '10:10:10'}, {t '11:11:11'})" , new Integer JavaDoc(61)),
187         a("Timestampdiff(minute, {t '10:10:10'}, {t '11:11:11'})" , new Integer JavaDoc(61)),
188         a("Timestampdiff(SQL_TSI_SECOND,{t '00:00:10'}, {t '00:10:11'})" , new Integer JavaDoc(601)),
189         a("Timestampdiff(second, {t '00:00:10'}, {t '00:10:11'})" , new Integer JavaDoc(601)),
190         a("Timestampdiff(SQL_TSI_FRAC_SECOND,{ts '2004-10-12 00:00:10.1'}, {ts '2004-10-12 00:00:10.2'})" , new Integer JavaDoc(100)),
191         a("Timestampdiff(millisecond,{ts '2004-10-12 00:00:10.1'}, {ts '2004-10-12 00:00:10.2'})" , new Integer JavaDoc(100)),
192         a("{fn TimestampAdd(SQL_TSI_YEAR, 1, {d '2004-10-17'})}" , Timestamp.valueOf("2005-10-17 00:00:00.0")),
193         a("{fn TimestampAdd(SQL_TSI_QUARTER, 1, {d '2004-10-17'})}" , Timestamp.valueOf("2005-01-17 00:00:00.0")),
194         a("{fn TimestampAdd(SQL_TSI_MONTH, 1, {d '2004-10-17'})}" , Timestamp.valueOf("2004-11-17 00:00:00.0")),
195         a("{fn TimestampAdd(SQL_TSI_WEEK, 1, {d '2004-10-17'})}" , Timestamp.valueOf("2004-10-24 00:00:00.0")),
196         a("{fn TimestampAdd(SQL_TSI_HOUR, 1, {d '2004-10-17'})}" , Timestamp.valueOf("2004-10-17 01:00:00.0")),
197         a("{fn TimestampAdd(SQL_TSI_MINUTE, 61, {d '2004-10-17'})}" , Timestamp.valueOf("2004-10-17 01:01:00.0")),
198         a("{fn TimestampAdd(SQL_TSI_SECOND, 61, {d '2004-10-17'})}" , Timestamp.valueOf("2004-10-17 00:01:01.0")),
199         a("{fn TimestampAdd(SQL_TSI_FRAC_SECOND,1,{d '2004-10-17'})}" , Timestamp.valueOf("2004-10-17 00:00:00.001")),
200         a("Timestampdiff(second, null, {t '00:10:11'})" , null),
201         a("Timestampdiff(second, {t '00:10:11'}, null)" , null),
202         a("TimestampAdd(year, 1, null)" , null),
203         a("DayOfWeek({d '2006-02-16'})" , new Integer JavaDoc(4)),
204         a("DayOfWeek({d '2006-02-19'})" , new Integer JavaDoc(7)),
205         a("DayOfYear({d '2004-01-01'})" , new Integer JavaDoc(1)),
206         a("DayOfYear({d '2004-02-29'})" , new Integer JavaDoc(60)),
207         a("DayOfYear({d '2004-03-01'})" , new Integer JavaDoc(61)),
208         a("DayOfYear({d '2004-12-31'})" , new Integer JavaDoc(366)),
209         a("DayOfMonth({d '1904-07-17'})" , new Integer JavaDoc(17)),
210         a("locate('ae', 'QWAERAE')" , new Integer JavaDoc(3)),
211         a("locate('ae', 'QWAERAE', 3)" , new Integer JavaDoc(3)),
212         a("locate('ae', 'QWAERAE', 4)" , new Integer JavaDoc(6)),
213         a("locate('ae', 'QWAERAE', null)" , new Integer JavaDoc(3)),
214         a("locate(null, 'QWAERAE', 4)" , null),
215         a("locate('ae', null, 4)" , null),
216         a("{d '2004-10-12'}" , java.sql.Date.valueOf("2004-10-12")),
217         a("{ts '1999-10-12 15:14:13.123'}" , Timestamp.valueOf("1999-10-12 15:14:13.123")),
218         a("{t '15:14:13'}" , Time.valueOf("15:14:13")),
219         a("{fn length('abc')}", new Integer JavaDoc(3)),
220         a("{fn length('abc ')}", new Integer JavaDoc(3)),
221         a("{fn length(null)}", null),
222         a("{fn Right('qwertzu', 3)}", "tzu"),
223         a("{fn Right('qwertzu', 13)}", "qwertzu"),
224         a("cast( Right('1234', 2) as real)", new Float JavaDoc(34)),
225         a("cast( Right('1234', 2) as smallint)",new Integer JavaDoc(34)),
226         a("cast( Right('1234', 2) as boolean)", Boolean.TRUE),
227         a("right(0x1234567890, 2)", new byte[]{0x78,(byte)0x90}),
228         a("right(null, 2)", null),
229         a("left(null, 2)", null),
230         a("left('abcd', 2)", "ab"),
231         a("left(0x1234567890, 2)", new byte[]{0x12,(byte)0x34}),
232         a("cast({fn SubString('ab2.3qw', 3, 3)} as double)", new Double JavaDoc(2.3)),
233         a("subString('qwert', 99, 2)", ""),
234         a("{fn SubString(0x1234567890, 0, 99)}",new byte[]{0x12,0x34,0x56,0x78,(byte)0x90}),
235         a("{fn SubString(0x1234567890, 2, 2)}", new byte[]{0x34, 0x56}),
236         a("{fn SubString(0x1234567890, 99, 2)}", new byte[]{}),
237         a("SubString(null, 99, 2)", null),
238         a("Insert('abcd', 2, 1, 'qw')", "aqwcd"),
239         a("Insert(0x1234, 2, 0, 0x56)", new byte[]{0x12,0x56,0x34}),
240         a("lcase('Abcd')", "abcd"),
241         a("ucase('Abcd')", "ABCD"),
242         a("lcase(null)", null),
243         a("ucase(null)", null),
244         a("cast(1 as money) + SubString('a12', 2, 2)",new BigDecimal("13.0000")),
245         a("cast(1 as numeric(5,2)) + SubString('a12', 2, 2)",new BigDecimal("13.00")),
246         a("cast(1 as BigInt) + SubString('a12', 2, 2)",new Long JavaDoc(13)),
247         a("cast(1 as real) + SubString('a12', 2, 2)",new Float JavaDoc(13)),
248         a("1 + SubString('a12', 2, 2)", new Integer JavaDoc(13)),
249         a("1.0 + SubString('a12', 2, 2)", new Double JavaDoc(13)),
250         a("concat('abc', 'def')", "abcdef"),
251         a("{fn IfNull(null, 'abc')}", "abc"),
252         a("{fn IfNull('asd', 'abc')}", "asd"),
253         a("iif(true, 1, 2)", new Integer JavaDoc(1)),
254         a("iif(false, 1, 2)", new Integer JavaDoc(2)),
255         a("CASE aVarchar WHEN 'qwert' THEN 25 WHEN 'asdfg' THEN 26 ELSE null END", new Integer JavaDoc(25)),
256         a("CASE WHEN aVarchar='qwert' THEN 'uu' WHEN aVarchar='bb' THEN 'gg' ELSE 'nn' END", "uu"),
257         a("{fn Ascii('')}", null),
258         a("{fn Ascii(null)}", null),
259         a("Ascii('abc')", new Integer JavaDoc(97)),
260         a("{fn Char(97)}", "a"),
261         a("Char(null)", null),
262         a("$1 + Char(49)", new BigDecimal("2.0000")),
263         a("Exp(null)", null),
264         a("exp(0)", new Double JavaDoc(1)),
265         a("log(exp(2.4))", new Double JavaDoc(2.4)),
266         a("log10(10)", new Double JavaDoc(1)),
267         a("cos(null)", null),
268         a("cos(0)", new Double JavaDoc(1)),
269         a("acos(1)", new Double JavaDoc(0)),
270         a("sin(0)", new Double JavaDoc(0)),
271         a("cos(pi())", new Double JavaDoc(-1)),
272         a("asin(0)", new Double JavaDoc(0)),
273         a("asin(sin(0.5))", new Double JavaDoc(0.5)),
274         a("tan(0)", new Double JavaDoc(0)),
275         a("atan(tan(0.5))", new Double JavaDoc(0.5)),
276         a("atan2(0,3)", new Double JavaDoc(0)),
277         a("atan2(0,-3)", new Double JavaDoc(Math.PI)),
278         a("atn2(0,null)", null),
279         a("cot(0)", new Double JavaDoc(Double.POSITIVE_INFINITY)),
280         a("tan(0)", new Double JavaDoc(0)),
281         a("degrees(pi())", new Double JavaDoc(180)),
282         a("degrees(radians(50))", new Double JavaDoc(50)),
283         a("ceiling(123.45)", new Double JavaDoc(124)),
284         a("ceiling(-123.45)", new Double JavaDoc(-123)),
285         a("power(2, 3)", new Double JavaDoc(8)),
286         a("5.0 % 2", new Double JavaDoc(1)),
287         a("5 % 2", new Integer JavaDoc(1)),
288         a("mod(5, 2)", new Integer JavaDoc(1)),
289         a("FLOOR(123.45)", new Double JavaDoc(123)),
290         a("FLOOR('123.45')", new Double JavaDoc(123)),
291         a("FLOOR(-123.45)", new Double JavaDoc(-124)),
292         a("FLOOR($123.45)", new BigDecimal("123.0000")),
293         a("Rand(0)", new Double JavaDoc(0.730967787376657)),
294         a("ROUND(748.58, -4)", new Double JavaDoc(0)),
295         a("ROUND(-748.58, -2)", new Double JavaDoc(-700)),
296         a("ROUND('748.5876', 2)", new Double JavaDoc(748.59)),
297         a("Sign('748.5876')", new Integer JavaDoc(1)),
298         a("Sign(-2)", new Integer JavaDoc(-1)),
299         a("Sign(2)", new Integer JavaDoc(1)),
300         a("Sign(0)", new Integer JavaDoc(0)),
301         a("Sign(-$2)", new Integer JavaDoc(-1)),
302         a("Sign($2)", new Integer JavaDoc(1)),
303         a("Sign($0)", new Integer JavaDoc(0)),
304         a("Sign(cast(-2 as bigint))", new Integer JavaDoc(-1)),
305         a("Sign(cast(2 as bigint))", new Integer JavaDoc(1)),
306         a("Sign(cast(0 as bigint))", new Integer JavaDoc(0)),
307         a("Sign(1.0)", new Integer JavaDoc(1)),
308         a("Sign(0.0)", new Integer JavaDoc(0)),
309         a("Sign(-.1)", new Integer JavaDoc(-1)),
310         a("Sign(cast(0 as numeric(5)))",new Integer JavaDoc(0)),
311         a("Sign(null)", null),
312         a("sqrt(9)", new Double JavaDoc(3)),
313         a("Truncate(748.58, -4)", new Double JavaDoc(0)),
314         a("Truncate(-748.58, -2)", new Double JavaDoc(-700)),
315         a("Truncate('748.5876', 2)", new Double JavaDoc(748.58)),
316         a("rtrim(null)", null),
317         a("rtrim(0x0012345600)", new byte[]{0x00,0x12,0x34,0x56}),
318         a("rtrim(' abc ')", " abc"),
319         a("ltrim(null)", null),
320         a("ltrim(0x0012345600)", new byte[]{0x12,0x34,0x56,0x00}),
321         a("ltrim(' abc ')", "abc "),
322         a("space(3)", " "),
323         a("space(null)", null),
324         a("space(-3)", null),
325         a("replace('abcabc','bc','4')", "a4a4"),
326         a("replace('abcabc','bc',null)",null),
327         a("replace('abcabc','','4')", "abcabc"),
328         a("replace(0x123456,0x3456,0x77)", new byte[]{0x12,0x77}),
329         a("repeat('ab',4)", "abababab"),
330         a("repeat(null,4)", null),
331         a("repeat(0x1234,3)", new byte[]{0x12,0x34,0x12,0x34,0x12,0x34}),
332         a("DIFFERENCE('Green','Greene')",new Integer JavaDoc(4)),
333         a("DIFFERENCE('Green',null)", null),
334         a("soundex('Wikipedia')", "W213"),
335     };
336
337
338     private static TestValue a(String JavaDoc function, Object JavaDoc result){
339         TestValue value = new TestValue();
340         value.function = function;
341         value.result = result;
342         return value;
343     }
344
345     TestFunctions(TestValue testValue){
346         super(testValue.function);
347         this.testValue = testValue;
348     }
349     
350
351     public void tearDown(){
352         try{
353             Connection con = AllTests.getConnection();
354             Statement st = con.createStatement();
355             st.execute("drop table " + table);
356             st.close();
357         }catch(Throwable JavaDoc e){
358             //e.printStackTrace();
359
}
360     }
361
362     public void setUp(){
363         tearDown();
364         try{
365             Connection con = AllTests.getConnection();
366             Statement st = con.createStatement();
367             st.execute("create table " + table + "(aInt int, aVarchar varchar(100))");
368             st.execute("Insert into " + table + "(aInt, aVarchar) Values(-120,'qwert')");
369             st.close();
370         }catch(Throwable JavaDoc e){
371             e.printStackTrace();
372         }
373     }
374
375     public void runTest() throws Exception JavaDoc{
376         assertEqualsRsValue( testValue.result, "Select " + testValue.function + ",5 from " + table);
377         if(!testValue.function.startsWith("Top")){
378             assertEqualsRsValue( testValue.result, "Select " + testValue.function + " from " + table + " Group By " + testValue.function);
379         }
380     }
381
382     public static Test suite() throws Exception JavaDoc{
383         TestSuite theSuite = new TestSuite("Functions");
384         for(int i=0; i<TESTS.length; i++){
385             theSuite.addTest(new TestFunctions( TESTS[i] ) );
386         }
387         return theSuite;
388     }
389
390     private static class TestValue{
391         String JavaDoc function;
392         Object JavaDoc result;
393     }
394 }
Popular Tags