1*1da57d55SToomas Soome#
27c478bd9Sstevel@tonic-gate# 2001 September 15
37c478bd9Sstevel@tonic-gate#
47c478bd9Sstevel@tonic-gate# The author disclaims copyright to this source code.  In place of
57c478bd9Sstevel@tonic-gate# a legal notice, here is a blessing:
67c478bd9Sstevel@tonic-gate#
77c478bd9Sstevel@tonic-gate#    May you do good and not evil.
87c478bd9Sstevel@tonic-gate#    May you find forgiveness for yourself and forgive others.
97c478bd9Sstevel@tonic-gate#    May you share freely, never taking more than you give.
107c478bd9Sstevel@tonic-gate#
117c478bd9Sstevel@tonic-gate#***********************************************************************
127c478bd9Sstevel@tonic-gate# This file implements regression tests for SQLite library.  The
137c478bd9Sstevel@tonic-gate# focus of this file is testing built-in functions.
147c478bd9Sstevel@tonic-gate#
157c478bd9Sstevel@tonic-gate# $Id: func.test,v 1.16.2.2 2004/07/18 21:14:05 drh Exp $
167c478bd9Sstevel@tonic-gate
177c478bd9Sstevel@tonic-gateset testdir [file dirname $argv0]
187c478bd9Sstevel@tonic-gatesource $testdir/tester.tcl
197c478bd9Sstevel@tonic-gate
207c478bd9Sstevel@tonic-gate# Create a table to work with.
217c478bd9Sstevel@tonic-gate#
227c478bd9Sstevel@tonic-gatedo_test func-0.0 {
237c478bd9Sstevel@tonic-gate  execsql {CREATE TABLE tbl1(t1 text)}
247c478bd9Sstevel@tonic-gate  foreach word {this program is free software} {
257c478bd9Sstevel@tonic-gate    execsql "INSERT INTO tbl1 VALUES('$word')"
267c478bd9Sstevel@tonic-gate  }
277c478bd9Sstevel@tonic-gate  execsql {SELECT t1 FROM tbl1 ORDER BY t1}
287c478bd9Sstevel@tonic-gate} {free is program software this}
297c478bd9Sstevel@tonic-gatedo_test func-0.1 {
307c478bd9Sstevel@tonic-gate  execsql {
317c478bd9Sstevel@tonic-gate     CREATE TABLE t2(a);
327c478bd9Sstevel@tonic-gate     INSERT INTO t2 VALUES(1);
337c478bd9Sstevel@tonic-gate     INSERT INTO t2 VALUES(NULL);
347c478bd9Sstevel@tonic-gate     INSERT INTO t2 VALUES(345);
357c478bd9Sstevel@tonic-gate     INSERT INTO t2 VALUES(NULL);
367c478bd9Sstevel@tonic-gate     INSERT INTO t2 VALUES(67890);
377c478bd9Sstevel@tonic-gate     SELECT * FROM t2;
387c478bd9Sstevel@tonic-gate  }
397c478bd9Sstevel@tonic-gate} {1 {} 345 {} 67890}
407c478bd9Sstevel@tonic-gate
417c478bd9Sstevel@tonic-gate# Check out the length() function
427c478bd9Sstevel@tonic-gate#
437c478bd9Sstevel@tonic-gatedo_test func-1.0 {
447c478bd9Sstevel@tonic-gate  execsql {SELECT length(t1) FROM tbl1 ORDER BY t1}
457c478bd9Sstevel@tonic-gate} {4 2 7 8 4}
467c478bd9Sstevel@tonic-gatedo_test func-1.1 {
477c478bd9Sstevel@tonic-gate  set r [catch {execsql {SELECT length(*) FROM tbl1 ORDER BY t1}} msg]
487c478bd9Sstevel@tonic-gate  lappend r $msg
497c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function length()}}
507c478bd9Sstevel@tonic-gatedo_test func-1.2 {
517c478bd9Sstevel@tonic-gate  set r [catch {execsql {SELECT length(t1,5) FROM tbl1 ORDER BY t1}} msg]
527c478bd9Sstevel@tonic-gate  lappend r $msg
537c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function length()}}
547c478bd9Sstevel@tonic-gatedo_test func-1.3 {
557c478bd9Sstevel@tonic-gate  execsql {SELECT length(t1), count(*) FROM tbl1 GROUP BY length(t1)
567c478bd9Sstevel@tonic-gate           ORDER BY length(t1)}
577c478bd9Sstevel@tonic-gate} {2 1 4 2 7 1 8 1}
587c478bd9Sstevel@tonic-gatedo_test func-1.4 {
597c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(length(a),-1) FROM t2}
607c478bd9Sstevel@tonic-gate} {1 -1 3 -1 5}
617c478bd9Sstevel@tonic-gate
627c478bd9Sstevel@tonic-gate# Check out the substr() function
637c478bd9Sstevel@tonic-gate#
647c478bd9Sstevel@tonic-gatedo_test func-2.0 {
657c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,1,2) FROM tbl1 ORDER BY t1}
667c478bd9Sstevel@tonic-gate} {fr is pr so th}
677c478bd9Sstevel@tonic-gatedo_test func-2.1 {
687c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,2,1) FROM tbl1 ORDER BY t1}
697c478bd9Sstevel@tonic-gate} {r s r o h}
707c478bd9Sstevel@tonic-gatedo_test func-2.2 {
717c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,3,3) FROM tbl1 ORDER BY t1}
727c478bd9Sstevel@tonic-gate} {ee {} ogr ftw is}
737c478bd9Sstevel@tonic-gatedo_test func-2.3 {
747c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-1,1) FROM tbl1 ORDER BY t1}
757c478bd9Sstevel@tonic-gate} {e s m e s}
767c478bd9Sstevel@tonic-gatedo_test func-2.4 {
777c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-1,2) FROM tbl1 ORDER BY t1}
787c478bd9Sstevel@tonic-gate} {e s m e s}
797c478bd9Sstevel@tonic-gatedo_test func-2.5 {
807c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-2,1) FROM tbl1 ORDER BY t1}
817c478bd9Sstevel@tonic-gate} {e i a r i}
827c478bd9Sstevel@tonic-gatedo_test func-2.6 {
837c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-2,2) FROM tbl1 ORDER BY t1}
847c478bd9Sstevel@tonic-gate} {ee is am re is}
857c478bd9Sstevel@tonic-gatedo_test func-2.7 {
867c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-4,2) FROM tbl1 ORDER BY t1}
877c478bd9Sstevel@tonic-gate} {fr {} gr wa th}
887c478bd9Sstevel@tonic-gatedo_test func-2.8 {
897c478bd9Sstevel@tonic-gate  execsql {SELECT t1 FROM tbl1 ORDER BY substr(t1,2,20)}
907c478bd9Sstevel@tonic-gate} {this software free program is}
917c478bd9Sstevel@tonic-gatedo_test func-2.9 {
927c478bd9Sstevel@tonic-gate  execsql {SELECT substr(a,1,1) FROM t2}
937c478bd9Sstevel@tonic-gate} {1 {} 3 {} 6}
947c478bd9Sstevel@tonic-gatedo_test func-2.10 {
957c478bd9Sstevel@tonic-gate  execsql {SELECT substr(a,2,2) FROM t2}
967c478bd9Sstevel@tonic-gate} {{} {} 45 {} 78}
977c478bd9Sstevel@tonic-gate
987c478bd9Sstevel@tonic-gate# Only do the following tests if TCL has UTF-8 capabilities and
997c478bd9Sstevel@tonic-gate# the UTF-8 encoding is turned on in the SQLite library.
1007c478bd9Sstevel@tonic-gate#
1017c478bd9Sstevel@tonic-gateif {[sqlite -encoding]=="UTF-8" && "\u1234"!="u1234"} {
1027c478bd9Sstevel@tonic-gate
1037c478bd9Sstevel@tonic-gate# Put some UTF-8 characters in the database
1047c478bd9Sstevel@tonic-gate#
1057c478bd9Sstevel@tonic-gatedo_test func-3.0 {
1067c478bd9Sstevel@tonic-gate  execsql {DELETE FROM tbl1}
1077c478bd9Sstevel@tonic-gate  foreach word "contains UTF-8 characters hi\u1234ho" {
1087c478bd9Sstevel@tonic-gate    execsql "INSERT INTO tbl1 VALUES('$word')"
1097c478bd9Sstevel@tonic-gate  }
1107c478bd9Sstevel@tonic-gate  execsql {SELECT t1 FROM tbl1 ORDER BY t1}
1117c478bd9Sstevel@tonic-gate} "UTF-8 characters contains hi\u1234ho"
1127c478bd9Sstevel@tonic-gatedo_test func-3.1 {
1137c478bd9Sstevel@tonic-gate  execsql {SELECT length(t1) FROM tbl1 ORDER BY t1}
1147c478bd9Sstevel@tonic-gate} {5 10 8 5}
1157c478bd9Sstevel@tonic-gatedo_test func-3.2 {
1167c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,1,2) FROM tbl1 ORDER BY t1}
1177c478bd9Sstevel@tonic-gate} {UT ch co hi}
1187c478bd9Sstevel@tonic-gatedo_test func-3.3 {
1197c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,1,3) FROM tbl1 ORDER BY t1}
1207c478bd9Sstevel@tonic-gate} "UTF cha con hi\u1234"
1217c478bd9Sstevel@tonic-gatedo_test func-3.4 {
1227c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,2,2) FROM tbl1 ORDER BY t1}
1237c478bd9Sstevel@tonic-gate} "TF ha on i\u1234"
1247c478bd9Sstevel@tonic-gatedo_test func-3.5 {
1257c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,2,3) FROM tbl1 ORDER BY t1}
1267c478bd9Sstevel@tonic-gate} "TF- har ont i\u1234h"
1277c478bd9Sstevel@tonic-gatedo_test func-3.6 {
1287c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,3,2) FROM tbl1 ORDER BY t1}
1297c478bd9Sstevel@tonic-gate} "F- ar nt \u1234h"
1307c478bd9Sstevel@tonic-gatedo_test func-3.7 {
1317c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,4,2) FROM tbl1 ORDER BY t1}
1327c478bd9Sstevel@tonic-gate} "-8 ra ta ho"
1337c478bd9Sstevel@tonic-gatedo_test func-3.8 {
1347c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-1,1) FROM tbl1 ORDER BY t1}
1357c478bd9Sstevel@tonic-gate} "8 s s o"
1367c478bd9Sstevel@tonic-gatedo_test func-3.9 {
1377c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-3,2) FROM tbl1 ORDER BY t1}
1387c478bd9Sstevel@tonic-gate} "F- er in \u1234h"
1397c478bd9Sstevel@tonic-gatedo_test func-3.10 {
1407c478bd9Sstevel@tonic-gate  execsql {SELECT substr(t1,-4,3) FROM tbl1 ORDER BY t1}
1417c478bd9Sstevel@tonic-gate} "TF- ter ain i\u1234h"
1427c478bd9Sstevel@tonic-gatedo_test func-3.99 {
1437c478bd9Sstevel@tonic-gate  execsql {DELETE FROM tbl1}
1447c478bd9Sstevel@tonic-gate  foreach word {this program is free software} {
1457c478bd9Sstevel@tonic-gate    execsql "INSERT INTO tbl1 VALUES('$word')"
1467c478bd9Sstevel@tonic-gate  }
1477c478bd9Sstevel@tonic-gate  execsql {SELECT t1 FROM tbl1}
1487c478bd9Sstevel@tonic-gate} {this program is free software}
1497c478bd9Sstevel@tonic-gate
1507c478bd9Sstevel@tonic-gate} ;# End [sqlite -encoding]==UTF-8 and \u1234!=u1234
1517c478bd9Sstevel@tonic-gate
1527c478bd9Sstevel@tonic-gate# Test the abs() and round() functions.
1537c478bd9Sstevel@tonic-gate#
1547c478bd9Sstevel@tonic-gatedo_test func-4.1 {
1557c478bd9Sstevel@tonic-gate  execsql {
1567c478bd9Sstevel@tonic-gate    CREATE TABLE t1(a,b,c);
1577c478bd9Sstevel@tonic-gate    INSERT INTO t1 VALUES(1,2,3);
1587c478bd9Sstevel@tonic-gate    INSERT INTO t1 VALUES(2,1.2345678901234,-12345.67890);
1597c478bd9Sstevel@tonic-gate    INSERT INTO t1 VALUES(3,-2,-5);
1607c478bd9Sstevel@tonic-gate  }
1617c478bd9Sstevel@tonic-gate  catchsql {SELECT abs(a,b) FROM t1}
1627c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function abs()}}
1637c478bd9Sstevel@tonic-gatedo_test func-4.2 {
1647c478bd9Sstevel@tonic-gate  catchsql {SELECT abs() FROM t1}
1657c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function abs()}}
1667c478bd9Sstevel@tonic-gatedo_test func-4.3 {
1677c478bd9Sstevel@tonic-gate  catchsql {SELECT abs(b) FROM t1 ORDER BY a}
1687c478bd9Sstevel@tonic-gate} {0 {2 1.2345678901234 2}}
1697c478bd9Sstevel@tonic-gatedo_test func-4.4 {
1707c478bd9Sstevel@tonic-gate  catchsql {SELECT abs(c) FROM t1 ORDER BY a}
1717c478bd9Sstevel@tonic-gate} {0 {3 12345.67890 5}}
1727c478bd9Sstevel@tonic-gatedo_test func-4.4.1 {
1737c478bd9Sstevel@tonic-gate  execsql {SELECT abs(a) FROM t2}
1747c478bd9Sstevel@tonic-gate} {1 {} 345 {} 67890}
1757c478bd9Sstevel@tonic-gatedo_test func-4.4.2 {
1767c478bd9Sstevel@tonic-gate  execsql {SELECT abs(t1) FROM tbl1}
1777c478bd9Sstevel@tonic-gate} {this program is free software}
1787c478bd9Sstevel@tonic-gate
1797c478bd9Sstevel@tonic-gatedo_test func-4.5 {
1807c478bd9Sstevel@tonic-gate  catchsql {SELECT round(a,b,c) FROM t1}
1817c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function round()}}
1827c478bd9Sstevel@tonic-gatedo_test func-4.6 {
1837c478bd9Sstevel@tonic-gate  catchsql {SELECT round(b,2) FROM t1 ORDER BY b}
1847c478bd9Sstevel@tonic-gate} {0 {-2.00 1.23 2.00}}
1857c478bd9Sstevel@tonic-gatedo_test func-4.7 {
1867c478bd9Sstevel@tonic-gate  catchsql {SELECT round(b,0) FROM t1 ORDER BY a}
1877c478bd9Sstevel@tonic-gate} {0 {2 1 -2}}
1887c478bd9Sstevel@tonic-gatedo_test func-4.8 {
1897c478bd9Sstevel@tonic-gate  catchsql {SELECT round(c) FROM t1 ORDER BY a}
1907c478bd9Sstevel@tonic-gate} {0 {3 -12346 -5}}
1917c478bd9Sstevel@tonic-gatedo_test func-4.9 {
1927c478bd9Sstevel@tonic-gate  catchsql {SELECT round(c,a) FROM t1 ORDER BY a}
1937c478bd9Sstevel@tonic-gate} {0 {3.0 -12345.68 -5.000}}
1947c478bd9Sstevel@tonic-gatedo_test func-4.10 {
1957c478bd9Sstevel@tonic-gate  catchsql {SELECT 'x' || round(c,a) || 'y' FROM t1 ORDER BY a}
1967c478bd9Sstevel@tonic-gate} {0 {x3.0y x-12345.68y x-5.000y}}
1977c478bd9Sstevel@tonic-gatedo_test func-4.11 {
1987c478bd9Sstevel@tonic-gate  catchsql {SELECT round() FROM t1 ORDER BY a}
1997c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function round()}}
2007c478bd9Sstevel@tonic-gatedo_test func-4.12 {
2017c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(round(a,2),'nil') FROM t2}
2027c478bd9Sstevel@tonic-gate} {1.00 nil 345.00 nil 67890.00}
2037c478bd9Sstevel@tonic-gatedo_test func-4.13 {
2047c478bd9Sstevel@tonic-gate  execsql {SELECT round(t1,2) FROM tbl1}
2057c478bd9Sstevel@tonic-gate} {0.00 0.00 0.00 0.00 0.00}
2067c478bd9Sstevel@tonic-gate
2077c478bd9Sstevel@tonic-gate# Test the upper() and lower() functions
2087c478bd9Sstevel@tonic-gate#
2097c478bd9Sstevel@tonic-gatedo_test func-5.1 {
2107c478bd9Sstevel@tonic-gate  execsql {SELECT upper(t1) FROM tbl1}
2117c478bd9Sstevel@tonic-gate} {THIS PROGRAM IS FREE SOFTWARE}
2127c478bd9Sstevel@tonic-gatedo_test func-5.2 {
2137c478bd9Sstevel@tonic-gate  execsql {SELECT lower(upper(t1)) FROM tbl1}
2147c478bd9Sstevel@tonic-gate} {this program is free software}
2157c478bd9Sstevel@tonic-gatedo_test func-5.3 {
2167c478bd9Sstevel@tonic-gate  execsql {SELECT upper(a), lower(a) FROM t2}
2177c478bd9Sstevel@tonic-gate} {1 1 {} {} 345 345 {} {} 67890 67890}
2187c478bd9Sstevel@tonic-gatedo_test func-5.4 {
2197c478bd9Sstevel@tonic-gate  catchsql {SELECT upper(a,5) FROM t2}
2207c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function upper()}}
2217c478bd9Sstevel@tonic-gatedo_test func-5.5 {
2227c478bd9Sstevel@tonic-gate  catchsql {SELECT upper(*) FROM t2}
2237c478bd9Sstevel@tonic-gate} {1 {wrong number of arguments to function upper()}}
2247c478bd9Sstevel@tonic-gate
2257c478bd9Sstevel@tonic-gate# Test the coalesce() and nullif() functions
2267c478bd9Sstevel@tonic-gate#
2277c478bd9Sstevel@tonic-gatedo_test func-6.1 {
2287c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(a,'xyz') FROM t2}
2297c478bd9Sstevel@tonic-gate} {1 xyz 345 xyz 67890}
2307c478bd9Sstevel@tonic-gatedo_test func-6.2 {
2317c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(upper(a),'nil') FROM t2}
2327c478bd9Sstevel@tonic-gate} {1 nil 345 nil 67890}
2337c478bd9Sstevel@tonic-gatedo_test func-6.3 {
2347c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(nullif(1,1),'nil')}
2357c478bd9Sstevel@tonic-gate} {nil}
2367c478bd9Sstevel@tonic-gatedo_test func-6.4 {
2377c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(nullif(1,2),'nil')}
2387c478bd9Sstevel@tonic-gate} {1}
2397c478bd9Sstevel@tonic-gatedo_test func-6.5 {
2407c478bd9Sstevel@tonic-gate  execsql {SELECT coalesce(nullif(1,NULL),'nil')}
2417c478bd9Sstevel@tonic-gate} {1}
2427c478bd9Sstevel@tonic-gate
2437c478bd9Sstevel@tonic-gate
2447c478bd9Sstevel@tonic-gate# Test the last_insert_rowid() function
2457c478bd9Sstevel@tonic-gate#
2467c478bd9Sstevel@tonic-gatedo_test func-7.1 {
2477c478bd9Sstevel@tonic-gate  execsql {SELECT last_insert_rowid()}
2487c478bd9Sstevel@tonic-gate} [db last_insert_rowid]
2497c478bd9Sstevel@tonic-gate
2507c478bd9Sstevel@tonic-gate# Tests for aggregate functions and how they handle NULLs.
2517c478bd9Sstevel@tonic-gate#
2527c478bd9Sstevel@tonic-gatedo_test func-8.1 {
2537c478bd9Sstevel@tonic-gate  execsql {
2547c478bd9Sstevel@tonic-gate    SELECT sum(a), count(a), round(avg(a),2), min(a), max(a), count(*) FROM t2;
2557c478bd9Sstevel@tonic-gate  }
2567c478bd9Sstevel@tonic-gate} {68236 3 22745.33 1 67890 5}
2577c478bd9Sstevel@tonic-gatedo_test func-8.2 {
2587c478bd9Sstevel@tonic-gate  execsql {
2597c478bd9Sstevel@tonic-gate    SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t2;
2607c478bd9Sstevel@tonic-gate  }
2617c478bd9Sstevel@tonic-gate} {z+67890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP}
2627c478bd9Sstevel@tonic-gatedo_test func-8.3 {
2637c478bd9Sstevel@tonic-gate  execsql {
2647c478bd9Sstevel@tonic-gate    CREATE TEMP TABLE t3 AS SELECT a FROM t2 ORDER BY a DESC;
2657c478bd9Sstevel@tonic-gate    SELECT min('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3;
2667c478bd9Sstevel@tonic-gate  }
2677c478bd9Sstevel@tonic-gate} {z+1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP}
2687c478bd9Sstevel@tonic-gatedo_test func-8.4 {
2697c478bd9Sstevel@tonic-gate  execsql {
2707c478bd9Sstevel@tonic-gate    SELECT max('z+'||a||'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP') FROM t3;
2717c478bd9Sstevel@tonic-gate  }
2727c478bd9Sstevel@tonic-gate} {z+67890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP}
2737c478bd9Sstevel@tonic-gate
2747c478bd9Sstevel@tonic-gate# How do you test the random() function in a meaningful, deterministic way?
2757c478bd9Sstevel@tonic-gate#
2767c478bd9Sstevel@tonic-gatedo_test func-9.1 {
2777c478bd9Sstevel@tonic-gate  execsql {
2787c478bd9Sstevel@tonic-gate    SELECT random() is not null;
2797c478bd9Sstevel@tonic-gate  }
2807c478bd9Sstevel@tonic-gate} {1}
2817c478bd9Sstevel@tonic-gate
2827c478bd9Sstevel@tonic-gate# Use the "sqlite_register_test_function" TCL command which is part of
2837c478bd9Sstevel@tonic-gate# the text fixture in order to verify correct operation of some of
2847c478bd9Sstevel@tonic-gate# the user-defined SQL function APIs that are not used by the built-in
2857c478bd9Sstevel@tonic-gate# functions.
2867c478bd9Sstevel@tonic-gate#
2877c478bd9Sstevel@tonic-gatedb close
2887c478bd9Sstevel@tonic-gateset ::DB [sqlite db test.db]
2897c478bd9Sstevel@tonic-gatesqlite_register_test_function $::DB testfunc
2907c478bd9Sstevel@tonic-gatedo_test func-10.1 {
2917c478bd9Sstevel@tonic-gate  catchsql {
2927c478bd9Sstevel@tonic-gate    SELECT testfunc(NULL,NULL);
2937c478bd9Sstevel@tonic-gate  }
2947c478bd9Sstevel@tonic-gate} {1 {first argument to test function may not be NULL}}
2957c478bd9Sstevel@tonic-gatedo_test func-10.2 {
2967c478bd9Sstevel@tonic-gate  execsql {
2977c478bd9Sstevel@tonic-gate    SELECT testfunc(
2987c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
2997c478bd9Sstevel@tonic-gate     'int', 1234
3007c478bd9Sstevel@tonic-gate    );
3017c478bd9Sstevel@tonic-gate  }
3027c478bd9Sstevel@tonic-gate} {1234}
3037c478bd9Sstevel@tonic-gatedo_test func-10.3 {
3047c478bd9Sstevel@tonic-gate  execsql {
3057c478bd9Sstevel@tonic-gate    SELECT testfunc(
3067c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3077c478bd9Sstevel@tonic-gate     'string', NULL
3087c478bd9Sstevel@tonic-gate    );
3097c478bd9Sstevel@tonic-gate  }
3107c478bd9Sstevel@tonic-gate} {{}}
3117c478bd9Sstevel@tonic-gatedo_test func-10.4 {
3127c478bd9Sstevel@tonic-gate  execsql {
3137c478bd9Sstevel@tonic-gate    SELECT testfunc(
3147c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3157c478bd9Sstevel@tonic-gate     'double', 1.234
3167c478bd9Sstevel@tonic-gate    );
3177c478bd9Sstevel@tonic-gate  }
3187c478bd9Sstevel@tonic-gate} {1.234}
3197c478bd9Sstevel@tonic-gatedo_test func-10.5 {
3207c478bd9Sstevel@tonic-gate  execsql {
3217c478bd9Sstevel@tonic-gate    SELECT testfunc(
3227c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3237c478bd9Sstevel@tonic-gate     'int', 1234,
3247c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3257c478bd9Sstevel@tonic-gate     'string', NULL,
3267c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3277c478bd9Sstevel@tonic-gate     'double', 1.234,
3287c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3297c478bd9Sstevel@tonic-gate     'int', 1234,
3307c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3317c478bd9Sstevel@tonic-gate     'string', NULL,
3327c478bd9Sstevel@tonic-gate     'string', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
3337c478bd9Sstevel@tonic-gate     'double', 1.234
3347c478bd9Sstevel@tonic-gate    );
3357c478bd9Sstevel@tonic-gate  }
3367c478bd9Sstevel@tonic-gate} {1.234}
3377c478bd9Sstevel@tonic-gate
3387c478bd9Sstevel@tonic-gate# Test the built-in sqlite_version(*) SQL function.
3397c478bd9Sstevel@tonic-gate#
3407c478bd9Sstevel@tonic-gatedo_test func-11.1 {
3417c478bd9Sstevel@tonic-gate  execsql {
3427c478bd9Sstevel@tonic-gate    SELECT sqlite_version(*);
3437c478bd9Sstevel@tonic-gate  }
3447c478bd9Sstevel@tonic-gate} [sqlite -version]
3457c478bd9Sstevel@tonic-gate
3467c478bd9Sstevel@tonic-gatefinish_test
347