os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/tkt2192.test
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 # 2007 January 26
     2 #
     3 # The author disclaims copyright to this source code.  In place of
     4 # a legal notice, here is a blessing:
     5 #
     6 #    May you do good and not evil.
     7 #    May you find forgiveness for yourself and forgive others.
     8 #    May you share freely, never taking more than you give.
     9 #
    10 #***********************************************************************
    11 # This file implements regression tests for SQLite library.
    12 #
    13 # This file implements tests to verify that ticket #2192 has been
    14 # fixed.  
    15 #
    16 #
    17 # $Id: tkt2192.test,v 1.3 2008/08/04 03:51:24 danielk1977 Exp $
    18 
    19 set testdir [file dirname $argv0]
    20 source $testdir/tester.tcl
    21 
    22 ifcapable !datetime||!compound {
    23   finish_test
    24   return
    25 }
    26 
    27 do_test tkt2192-1.1 {
    28   execsql {
    29     -- Raw data (RBS) --------
    30     
    31     create table records (
    32       date          real,
    33       type          text,
    34       description   text,
    35       value         integer,
    36       acc_name      text,
    37       acc_no        text
    38     );
    39     
    40     -- Direct Debits ----------------
    41     create view direct_debits as
    42       select * from records where type = 'D/D';
    43     
    44     create view monthly_direct_debits as
    45       select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
    46         from direct_debits
    47        group by strftime('%Y-%m', date);
    48     
    49     -- Expense Categories ---------------
    50     create view energy as
    51       select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
    52         from direct_debits
    53        where description like '%NPOWER%'
    54        group by strftime('%Y-%m', date);
    55     
    56     create view phone_internet as
    57       select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
    58         from direct_debits
    59        where description like '%BT DIRECT%'
    60           or description like '%SUPANET%'
    61           or description like '%ORANGE%'
    62        group by strftime('%Y-%m', date);
    63     
    64     create view credit_cards as
    65       select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
    66         from direct_debits where description like '%VISA%'
    67        group by strftime('%Y-%m', date);
    68     
    69     -- Overview ---------------------
    70     
    71     create view expense_overview as
    72       select 'Energy' as expense, date, value from energy
    73       union
    74       select 'Phone/Internet' as expense, date, value from phone_internet
    75       union
    76       select 'Credit Card' as expense, date, value from credit_cards;
    77     
    78     create view jan as
    79       select 'jan', expense, value from expense_overview
    80        where date like '%-01';
    81     
    82     create view nov as
    83       select 'nov', expense, value from expense_overview
    84        where date like '%-11';
    85     
    86     create view summary as
    87       select * from jan join nov on (jan.expense = nov.expense);
    88   }
    89 } {}
    90 do_test tkt2192-1.2 {
    91   # set ::sqlite_addop_trace 1
    92   execsql {
    93     select * from summary;
    94   }
    95 } {}
    96 do_test tkt2192-2.1 {
    97   execsql {
    98     CREATE TABLE t1(a,b);
    99     CREATE VIEW v1 AS
   100       SELECT * FROM t1 WHERE b%7=0 UNION SELECT * FROM t1 WHERE b%5=0;
   101     INSERT INTO t1 VALUES(1,7);
   102     INSERT INTO t1 VALUES(2,10);
   103     INSERT INTO t1 VALUES(3,14);
   104     INSERT INTO t1 VALUES(4,15);
   105     INSERT INTO t1 VALUES(1,16);
   106     INSERT INTO t1 VALUES(2,17);
   107     INSERT INTO t1 VALUES(3,20);
   108     INSERT INTO t1 VALUES(4,21);
   109     INSERT INTO t1 VALUES(1,22);
   110     INSERT INTO t1 VALUES(2,24);
   111     INSERT INTO t1 VALUES(3,25);
   112     INSERT INTO t1 VALUES(4,26);
   113     INSERT INTO t1 VALUES(1,27);
   114  
   115     SELECT b FROM v1 ORDER BY b;
   116   }
   117 } {7 10 14 15 20 21 25}
   118 do_test tkt2192-2.2 {
   119   execsql {
   120     SELECT * FROM v1 ORDER BY a, b;
   121   }
   122 } {1 7 2 10 3 14 3 20 3 25 4 15 4 21}
   123 do_test tkt2192-2.3 {
   124   execsql {
   125     SELECT x.a || '/' || x.b || '/' || y.b
   126       FROM v1 AS x JOIN v1 AS y ON x.a=y.a AND x.b<y.b
   127      ORDER BY x.a, x.b, y.b
   128   }
   129 } {3/14/20 3/14/25 3/20/25 4/15/21}
   130 do_test tkt2192-2.4 {
   131   execsql {
   132     CREATE VIEW v2 AS
   133     SELECT x.a || '/' || x.b || '/' || y.b AS z
   134       FROM v1 AS x JOIN v1 AS y ON x.a=y.a AND x.b<y.b
   135      ORDER BY x.a, x.b, y.b;
   136     SELECT * FROM v2;
   137   }
   138 } {3/14/20 3/14/25 3/20/25 4/15/21}
   139 
   140 finish_test