xref: /sqlite-3.40.0/test/window2.tcl (revision c3a20c19)
1# 2018 May 19
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#
12
13package require sqlite3
14package require Pgtcl
15
16set db [pg_connect -conninfo "dbname=postgres user=postgres password=postgres"]
17sqlite3 sqlite ""
18
19proc execsql {sql} {
20
21  set lSql [list]
22  set frag ""
23  while {[string length $sql]>0} {
24    set i [string first ";" $sql]
25    if {$i>=0} {
26      append frag [string range $sql 0 $i]
27      set sql [string range $sql $i+1 end]
28      if {[sqlite complete $frag]} {
29        lappend lSql $frag
30        set frag ""
31      }
32    } else {
33      set frag $sql
34      set sql ""
35    }
36  }
37  if {$frag != ""} {
38    lappend lSql $frag
39  }
40  #puts $lSql
41
42  set ret ""
43  foreach stmt $lSql {
44    set res [pg_exec $::db $stmt]
45    set err [pg_result $res -error]
46    if {$err!=""} { error $err }
47    for {set i 0} {$i < [pg_result $res -numTuples]} {incr i} {
48      if {$i==0} {
49        set ret [pg_result $res -getTuple 0]
50      } else {
51        append ret "   [pg_result $res -getTuple $i]"
52      }
53      # lappend ret {*}[pg_result $res -getTuple $i]
54    }
55    pg_result $res -clear
56  }
57
58  set ret
59}
60
61proc execsql_test {tn sql} {
62  set res [execsql $sql]
63  puts $::fd "do_execsql_test $tn {"
64  puts $::fd "  [string trim $sql]"
65  puts $::fd "} {$res}"
66  puts $::fd ""
67}
68
69proc start_test {name date} {
70  set dir [file dirname $::argv0]
71  set output [file join $dir $name.test]
72  set ::fd [open $output w]
73puts $::fd [string trimleft "
74# $date
75#
76# The author disclaims copyright to this source code.  In place of
77# a legal notice, here is a blessing:
78#
79#    May you do good and not evil.
80#    May you find forgiveness for yourself and forgive others.
81#    May you share freely, never taking more than you give.
82#
83#***********************************************************************
84# This file implements regression tests for SQLite library.
85#
86
87####################################################
88# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED!
89####################################################
90"]
91  puts $::fd {set testdir [file dirname $argv0]}
92  puts $::fd {source $testdir/tester.tcl}
93  puts $::fd "set testprefix $name"
94  puts $::fd ""
95}
96
97proc -- {args} {
98  puts $::fd "# $args"
99}
100
101proc ========== {args} {
102  puts $::fd "#[string repeat = 74]"
103  puts $::fd ""
104}
105
106proc finish_test {} {
107  puts $::fd finish_test
108  close $::fd
109}
110
111#=========================================================================
112
113
114start_test window2 "2018 May 19"
115
116execsql_test 1.0 {
117  DROP TABLE IF EXISTS t1;
118  CREATE TABLE t1(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER);
119  INSERT INTO t1 VALUES(1, 'odd',  'one',   1);
120  INSERT INTO t1 VALUES(2, 'even', 'two',   2);
121  INSERT INTO t1 VALUES(3, 'odd',  'three', 3);
122  INSERT INTO t1 VALUES(4, 'even', 'four',  4);
123  INSERT INTO t1 VALUES(5, 'odd',  'five',  5);
124  INSERT INTO t1 VALUES(6, 'even', 'six',   6);
125}
126
127execsql_test 1.1 {
128  SELECT c, sum(d) OVER (PARTITION BY b ORDER BY c) FROM t1;
129}
130
131execsql_test 1.2 {
132  SELECT sum(d) OVER () FROM t1;
133}
134
135execsql_test 1.3 {
136  SELECT sum(d) OVER (PARTITION BY b) FROM t1;
137}
138
139==========
140execsql_test 2.1 {
141  SELECT a, sum(d) OVER (
142    ORDER BY d
143    ROWS BETWEEN 1000 PRECEDING AND 1 FOLLOWING
144  ) FROM t1
145}
146execsql_test 2.2 {
147  SELECT a, sum(d) OVER (
148    ORDER BY d
149    ROWS BETWEEN 1000 PRECEDING AND 1000 FOLLOWING
150  ) FROM t1
151}
152execsql_test 2.3 {
153  SELECT a, sum(d) OVER (
154    ORDER BY d
155    ROWS BETWEEN 1 PRECEDING AND 1000 FOLLOWING
156  ) FROM t1
157}
158execsql_test 2.4 {
159  SELECT a, sum(d) OVER (
160    ORDER BY d
161    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
162  ) FROM t1
163}
164execsql_test 2.5 {
165  SELECT a, sum(d) OVER (
166    ORDER BY d
167    ROWS BETWEEN 1 PRECEDING AND 0 FOLLOWING
168  ) FROM t1
169}
170
171execsql_test 2.6 {
172  SELECT a, sum(d) OVER (
173    PARTITION BY b
174    ORDER BY d
175    ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
176  ) FROM t1
177}
178
179execsql_test 2.7 {
180  SELECT a, sum(d) OVER (
181    PARTITION BY b
182    ORDER BY d
183    ROWS BETWEEN 0 PRECEDING AND 0 FOLLOWING
184  ) FROM t1
185}
186
187puts $::fd finish_test
188==========
189
190execsql_test 3.1 {
191  SELECT a, sum(d) OVER (
192    PARTITION BY b ORDER BY d
193    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
194  ) FROM t1
195}
196
197execsql_test 3.2 {
198  SELECT a, sum(d) OVER (
199    ORDER BY b
200    RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
201  ) FROM t1
202}
203
204execsql_test 3.3 {
205  SELECT a, sum(d) OVER (
206    ORDER BY d
207    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
208  ) FROM t1
209}
210
211finish_test
212
213
214