xref: /sqlite-3.40.0/test/windowC.test (revision 6e627c44)
1a92f9586Sdan# 2021-09-29
2a92f9586Sdan#
3a92f9586Sdan# The author disclaims copyright to this source code.  In place of
4a92f9586Sdan# a legal notice, here is a blessing:
5a92f9586Sdan#
6a92f9586Sdan#    May you do good and not evil.
7a92f9586Sdan#    May you find forgiveness for yourself and forgive others.
8a92f9586Sdan#    May you share freely, never taking more than you give.
9a92f9586Sdan#
10a92f9586Sdan#***********************************************************************
11a92f9586Sdan# Test cases for varying separator handling by group_concat().
12a92f9586Sdan#
13a92f9586Sdan
14a92f9586Sdanset testdir [file dirname $argv0]
15a92f9586Sdansource $testdir/tester.tcl
16a9173489Sdrhset testprefix windowC
17a92f9586Sdan
18a92f9586Sdanifcapable !windowfunc {
19a92f9586Sdan  finish_test
20a92f9586Sdan  return
21a92f9586Sdan}
22a92f9586Sdan
23a92f9586Sdando_execsql_test 1.0 {
24a92f9586Sdan  CREATE TABLE x1(i INTEGER PRIMARY KEY, x);
25a92f9586Sdan}
26a92f9586Sdan
27a92f9586Sdanforeach {tn bBlob seps} {
28a92f9586Sdan  1 0 {a b c def g}
29a92f9586Sdan  2 0 {abcdefg {} {} abcdefg}
30a92f9586Sdan  3 0 {a bc def ghij klmno pqrstu}
31a92f9586Sdan  4 1 {a bc def ghij klmno pqrstu}
32a92f9586Sdan  5 1 {, , , , , , , , , , , , ....... , ,}
33a92f9586Sdan} {
34a92f9586Sdan  foreach type {text blob} {
35a92f9586Sdan    do_test 1.$type.$tn.1 {
36a92f9586Sdan      execsql { DELETE FROM x1 }
37a92f9586Sdan      foreach s $seps {
38a92f9586Sdan        if {$type=="text"} {
39a92f9586Sdan          execsql {INSERT INTO x1 VALUES(NULL, $s)}
40a92f9586Sdan        } else {
41a92f9586Sdan          execsql {INSERT INTO x1 VALUES(NULL, CAST ($s AS blob))}
42a92f9586Sdan        }
43a92f9586Sdan      }
44a92f9586Sdan    } {}
45a92f9586Sdan
46a92f9586Sdan    foreach {tn2 win} {
47a92f9586Sdan      1     "ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING"
48a92f9586Sdan      2     "ROWS BETWEEN 2 PRECEDING AND CURRENT ROW"
49a92f9586Sdan      3     "ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING"
50a92f9586Sdan    } {
51a92f9586Sdan      do_test 1.$type.$tn.2.$tn2 {
52a92f9586Sdan        db eval "
53a92f9586Sdan          SELECT group_concat('val', x) OVER ( ORDER BY i $win ) AS val FROM x1
54a92f9586Sdan          " {
55a92f9586Sdan            if {[string range $val 0 2]!="val"
56a92f9586Sdan              || [string range $val end-2 end]!="val"
57a92f9586Sdan            } {
58a92f9586Sdan              error "unexpected return value: $val"
59a92f9586Sdan            }
60a92f9586Sdan          }
61a92f9586Sdan      } {}
62a92f9586Sdan    }
63a92f9586Sdan  }
64a92f9586Sdan}
65a92f9586Sdan
664fc80671Sdrh# 2021-10-12 dbsqlfuzz 6c31db077a14149a7b22a1069294bdb068be8a96
674fc80671Sdrh#
684fc80671Sdrhreset_db
694fc80671Sdrhdo_execsql_test 2.0 {
70*6e627c44Sdrh  PRAGMA encoding=UTF16le;
714fc80671Sdrh  WITH separator(x) AS (VALUES(',a,'),(',bc,')),
724fc80671Sdrh       value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a'))
734fc80671Sdrh  SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
744fc80671Sdrh  FROM separator, value;
754fc80671Sdrh} {{} 1 蕕郐䔓硑ᇍ䫎 1}
76*6e627c44Sdrhreset_db
77*6e627c44Sdrhdo_execsql_test 2.1 {
78*6e627c44Sdrh  PRAGMA encoding=UTF16be;
79*6e627c44Sdrh  WITH separator(x) AS (VALUES(',a,'),(',bc,')),
80*6e627c44Sdrh       value(y) AS (VALUES(1),(x'5585d09013455178cd11ce4a'))
81*6e627c44Sdrh  SELECT group_concat(y,x) OVER (ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
82*6e627c44Sdrh  FROM separator, value;
83*6e627c44Sdrh} {{} 1 喅킐ፅ典촑칊 1}
844fc80671Sdrh
85a92f9586Sdanfinish_test
86