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