CoolFace
Modelpublic

AryaWu/sqlite

sourceHugging Faceupdated 9mo agoView on Hugging Face
0likes
orderby9.test63 linesDownload Raw Back to test
1# 2015-08-262#3# The author disclaims copyright to this source code.  In place of4# 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 seeks to verify that expressions (and especially functions)14# that are in both the ORDER BY clause and the result set are only15# evaluated once.16#17 18set testdir [file dirname $argv0]19source $testdir/tester.tcl20set ::testprefix orderby921 22 23do_execsql_test setup {24  -- create a table with many entries25  CREATE TABLE t1(x);26  WITH RECURSIVE27     c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x<100)28  INSERT INTO t1 SELECT x FROM c;29}30 31# Some versions of TCL are unable to [lsort -int] for32# 64-bit integers.  So we write our own comparison33# routine.34proc bigintcompare {a b} {35  set x [expr {$a-$b}]36  if {$x<0} {return -1}37  if {$x>0} {return +1}38  return 039}40do_test 1.0 {41  set l1 {}42  # If random() is only evaluated once and then reused for each row, then43  # the output should appear in sorted order.  If random() is evaluated 44  # separately for the result set and the ORDER BY clause, then the output45  # order will be random.46  db eval {SELECT random() AS y FROM t1 ORDER BY 1;} {lappend l1 $y}47  expr {$l1==[lsort -command bigintcompare $l1]}48} {1}49 50do_test 1.1 {51  set l1 {}52  db eval {SELECT random() AS y FROM t1 ORDER BY random();} {lappend l1 $y}53  expr {$l1==[lsort -command bigintcompare $l1]}54} {1}55 56do_test 1.2 {57  set l1 {}58  db eval {SELECT random() AS y FROM t1 ORDER BY +random();} {lappend l1 $y}59  expr {$l1==[lsort -command bigintcompare $l1]}60} {0}61 62finish_test63