-C Implement\sindices\sthat\soccur\sin\ssort\sorder\sand\sthe\sLIMIT...OFFSET\sclause\nof\sSELECT\sstatements.\s(CVS\s301)
-D 2001-11-06T04:00:18
+C Added\ssupport\sfor\sLIMIT.\s(CVS\s302)
+D 2001-11-06T14:10:42
F Makefile.in 6801df952cb1df64aa32e4de85fed24511d28efd
F Makefile.template 1fdb891f14083ee0b63cf7282f91529634438e7a
F README a4c0ba11354ef6ba0776b400d057c59da47a4cc0
-F VERSION b3711dc07b598efaec968538f5ed3069a5908f2d
+F VERSION f97b0f811f25906ab78f1aa58910db5757c64c58
F aclocal.m4 11faa843caa38fd451bc6aeb43e248d1723a269d
F config.guess f38b1e93d1e0fa6f5a6913e9e7b12774b9232588
F config.log 6a73d03433669b10a3f0c221198c3f26b9413914
F src/TODO af7f3cab0228e34149cf98e073aa83d45878e7e6
F src/btree.c 2789f704777d29b1b38e62e4798381ce602dc0fb
F src/btree.h 57d653ef5137b91f2a068aaf71a2905468dd2cb7
-F src/build.c 8857c16751a5e9c5ee845e1b3cf2da78935c8cb3
+F src/build.c 65438f92919d92c7974e995f2d654b6cb3280a50
F src/delete.c a4c13c444544f315703d5fbed6419c8786f66581
F src/expr.c 2dd0252ced345c1e64db015b94dc6b5d7a57eef3
F src/hash.c d0110e6da70a5962e21575fccf8206f7d9d75e00
F src/parse.y 5295f393f41ea89958287e5738e6c12c7cd67482
F src/printf.c 300a90554345751f26e1fc0c0333b90a66110a1d
F src/random.c 2a9cc2c9716d14815fd4c2accf89d87a1143e46b
-F src/select.c 008d79761a6025e4db490c8f732e32631c0c57c3
+F src/select.c da60dfdd449ef6a71225878aca130b86f298c76e
F src/shell.c 71597951753b56a97fea1c7a30908f31e635c00c
F src/shell.tcl 27ecbd63dd88396ad16d81ab44f73e6c0ea9d20e
F src/sqlite.h.in 934de9112747ad8d8e7d5fec44876246b24ca5a3
F test/insert.test a5c122aa726f1cef6f07d6767e8fd6f220994c11
F test/insert2.test d6901ca931e308fea7fca8c95ebe7dc957cc9fc2
F test/ioerr.test 57d9bffaca18b34f9e976f786eadc2591d6efc6a
+F test/limit.test a930f3eba2a7691c8397ccab33710b931589566a
F test/lock.test 19593689260c419efe7ced55b1418653a4b7bcd1
F test/main.test 1626345b5f630c5398eede500d9354813b76b0fd
F test/malloc.test 70fdd0812e2a57eb746aaf015350f58bb8eee0b1
F test/quick.test 6f023c7a73fc413e6d65b7a1879c79764038dc05
F test/quote.test 286db944717afa9a9bf829dd85e59185c65d5435
F test/rowid.test 427bfbbe9684fe7a2f851aa05badaae6d4972ce8
-F test/select1.test 75af194669ff9f4fe42c6fd070d9ec3b268354bb
+F test/select1.test 13aa0a5545209a73d1073cb9062a1b9075b734ae
F test/select2.test f91c903e2bab0e9d45274855a981eebf846d5e32
F test/select3.test 5e1fe8e5a4e63fb2827ab3b89527e0fd4ae35259
F test/select4.test 29a2ffb187f3d8b6ca42a0a6b619e9cabe12e228
F www/arch.png 82ef36db1143828a7abc88b1e308a5f55d4336f4
F www/arch.tcl 03b521d252575f93b9c52f7c8b0007011512fcfb
F www/c_interface.tcl d446234c1d3ed747fcefd30e972a19f2b2fc0e05
-F www/changes.tcl 797653d0d9988c716beb8a33e54b682fe53a4b93
+F www/changes.tcl 983aecfb6bdfdd2b44c32de59414029da80ca164
F www/crosscompile.tcl c99efacb3aefaa550c6e80d91b240f55eb9fd33e
F www/download.tcl 3e51c9ff1326b0a182846134987301310dff7d60
F www/dynload.tcl 02eb8273aa78cfa9070dd4501dca937fb22b466c
F www/index.tcl b9d166d09fa4237d31d78be49f2b8b205e6e7678
-F www/lang.tcl 1899ec4fb77cd69de335ebd998253de869f34d8e
+F www/lang.tcl f0e953bfeaaba4c33117ec4bca639dd71ba0e13e
F www/mingw.tcl fc5f4ba9d336b6e8c97347cc6496d6162461ef60
F www/opcode.tcl 7989ed328316454c7030dcdb60f09ae1e017286d
F www/speed.tcl 212a91d555384e01873160d6a189f1490c791bc2
F www/sqlite.tcl 6a21242a272e9c0939a04419a51c3d50cae33e3e
F www/tclsqlite.tcl 13d50723f583888fc80ae1a38247c0ab415066fa
F www/vdbe.tcl bb7d620995f0a987293e9d4fb6185a3b077e9b44
-P 7dd58fad398253608f55867cf1c7749eef005657
-R 6b4d638b3f341e525807c77329fb1dc1
+P eb07768ae93f14bf6c150c1c4329948857a9d01c
+R 69771165b17aa31e07d926b8467701a7
U drh
-Z e5f14755e0856f35fd2676a75ffdfa97
+Z 0d18c20a2f39388100a44f2bc527ed6b
-eb07768ae93f14bf6c150c1c4329948857a9d01c
\ No newline at end of file
+177012249ae93dbea4a11fb50faaae7912848bd0
\ No newline at end of file
** ROLLBACK
** PRAGMA
**
-** $Id: build.c,v 1.52 2001/10/22 02:58:10 drh Exp $
+** $Id: build.c,v 1.53 2001/11/06 14:10:42 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
}
pList->a = a;
}
- if( pExpr ){
+ if( pExpr || pName ){
i = pList->nExpr++;
pList->a[i].pExpr = pExpr;
pList->a[i].zName = 0;
** This file contains C code routines that are called by the parser
** to handle SELECT statements in SQLite.
**
-** $Id: select.c,v 1.46 2001/11/06 04:00:19 drh Exp $
+** $Id: select.c,v 1.47 2001/11/06 14:10:42 drh Exp $
*/
#include "sqliteInt.h"
if( pExpr==0 ) break;
pExpr->pLeft = sqliteExpr(TK_ID, 0, 0, 0);
if( pExpr->pLeft==0 ){ sqliteExprDelete(pExpr); break; }
- pExpr->pLeft->token.z = pTab->zName;
- pExpr->pLeft->token.n = strlen(pTab->zName);
+ if( pTabList->a[i].zAlias && pTabList->a[i].zAlias[0] ){
+ pExpr->pLeft->token.z = pTabList->a[i].zAlias;
+ pExpr->pLeft->token.n = strlen(pTabList->a[i].zAlias);
+ }else{
+ pExpr->pLeft->token.z = pTab->zName;
+ pExpr->pLeft->token.n = strlen(pTab->zName);
+ }
pExpr->pRight = sqliteExpr(TK_ID, 0, 0, 0);
if( pExpr->pRight==0 ){ sqliteExprDelete(pExpr); break; }
pExpr->pRight->token.z = pTab->aCol[j].zName;
--- /dev/null
+# 2001 November 6
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. The
+# focus of this file is testing the LIMIT ... OFFSET ... clause
+# of SELECT statements.
+#
+# $Id: limit.test,v 1.1 2001/11/06 14:10:42 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# Build some test data
+#
+set fd [open data1.txt w]
+for {set i 1} {$i<=32} {incr i} {
+ for {set j 0} {pow(2,$j)<$i} {incr j} {}
+ puts $fd "[expr {32-$i}]\t[expr {10-$j}]"
+}
+close $fd
+execsql {
+ CREATE TABLE t1(x int, y int);
+ COPY t1 FROM 'data1.txt'
+}
+file delete data1.txt
+
+do_test limit-1.0 {
+ execsql {SELECT count(*) FROM t1}
+} {32}
+do_test limit-1.1 {
+ execsql {SELECT count(*) FROM t1 LIMIT 5}
+} {32}
+do_test limit-1.2 {
+ execsql {SELECT x FROM t1 ORDER BY x LIMIT 5}
+} {0 1 2 3 4}
+do_test limit-1.3 {
+ execsql {SELECT x FROM t1 ORDER BY x LIMIT 5 OFFSET 5}
+} {5 6 7 8 9}
+do_test limit-1.4 {
+ execsql {SELECT x FROM t1 ORDER BY x LIMIT 50 OFFSET 30}
+} {30 31}
+do_test limit-1.5 {
+ execsql {SELECT x FROM t1 ORDER BY x LIMIT 50 OFFSET 50}
+} {}
+do_test limit-1.6 {
+ execsql {SELECT * FROM t1 a, t1 b ORDER BY a.x, b.x LIMIT 5}
+} {0 5 0 5 0 5 1 5 0 5 2 5 0 5 3 5 0 5 4 5}
+do_test limit-1.7 {
+ execsql {SELECT * FROM t1 a, t1 b ORDER BY a.x, b.x LIMIT 5 OFFSET 32}
+} {1 5 0 5 1 5 1 5 1 5 2 5 1 5 3 5 1 5 4 5}
+
+
+finish_test
# This file implements regression tests for SQLite library. The
# focus of this file is testing the SELECT statement.
#
-# $Id: select1.test,v 1.14 2001/10/19 16:44:58 drh Exp $
+# $Id: select1.test,v 1.15 2001/11/06 14:10:42 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
do_test select1-1.11 {
execsql {SELECT test1.f1, test2.r1 FROM test2, test1}
} {11 1.1}
+do_test select1-1.11.1 {
+ execsql {SELECT * FROM test2, test1}
+} {1.1 2.2 11 22}
+do_test select1-1.11.2 {
+ execsql {SELECT * FROM test1 AS a, test1 AS b}
+} {11 22 11 22}
do_test select1-1.12 {
execsql {SELECT max(test1.f1,test2.r1), min(test1.f2,test2.r2)
FROM test2, test1}
chng {2001 ??? ?? (2.1.0)} {
<li>Change the format of data records so that records up to 16MB in size
can be stored.</li>
+<li>Change the format of indices to allow for better query optimization.</li>
+<li>Implement the "LIMIT ... OFFSET ..." clause on SELECT statements.</li>
}
chng {2001 Nov 3 (2.0.8)} {
#
# Run this Tcl script to generate the sqlite.html file.
#
-set rcsid {$Id: lang.tcl,v 1.14 2001/10/19 16:44:58 drh Exp $}
+set rcsid {$Id: lang.tcl,v 1.15 2001/11/06 14:10:42 drh Exp $}
puts {<html>
<head>
[HAVING <expression>]
[<compound-op> <select>]*
[ORDER BY <sort-expr-list>]
+[LIMIT <integer> [OFFSET <integer>]]
} {result} {
STAR | <result-column> [, <result-column>]*
} {result-column} {
sort expression may be optionally followed by ASC or DESC to specify
the sort order.</p>
+<p>The LIMIT clause places an upper bound on the number of rows
+returned in the result. A LIMIT of 0 indicates no upper bound.
+The optional OFFSET following LIMIT specifies how many
+rows to skip at the beginning of the result set.</p>
+
<p>A compound SELECT is formed from two or more simple SELECTs connected
by one of the operators UNION, UNION ALL, INTERSECT, or EXCEPT. In
a compound SELECT, all the constituent SELECTs must specify the