107 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2014-04-25
 | |
| #
 | |
| # 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 ORDER BY optimizations on joins
 | |
| # that involve virtual tables.
 | |
| #
 | |
| 
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| set ::testprefix orderby7
 | |
| 
 | |
| ifcapable !fts3 {
 | |
|   finish_test
 | |
|   return
 | |
| }
 | |
| 
 | |
| do_execsql_test 1.0 {
 | |
|   CREATE VIRTUAL TABLE fts USING fts3(content TEXT);
 | |
|   INSERT INTO fts(rowid,content)
 | |
|      VALUES(1,'this is a test of the fts3 virtual'),
 | |
|            (2,'table used as part of a join together'),
 | |
|            (3,'with the DISTINCT keyword.  There was'),
 | |
|            (4,'a bug at one time (2013-06 through 2014-04)'),
 | |
|            (5,'that prevented this from working correctly.'),
 | |
|            (11,'a row that occurs twice'),
 | |
|            (12,'a row that occurs twice');
 | |
|  
 | |
|   CREATE TABLE t1(x TEXT PRIMARY KEY, y);
 | |
|   INSERT OR IGNORE INTO t1 SELECT content, rowid+100 FROM fts;
 | |
| } {}
 | |
| do_execsql_test 1.1 {
 | |
|   SELECT DISTINCT fts.rowid, t1.y
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x
 | |
|    ORDER BY y;
 | |
| } {11 111 12 111}
 | |
| do_execsql_test 1.2 {
 | |
|   SELECT DISTINCT fts.rowid, t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x
 | |
|    ORDER BY 1;
 | |
| } {11 {a row that occurs twice} 12 {a row that occurs twice}}
 | |
| do_execsql_test 1.3 {
 | |
|   SELECT DISTINCT t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x
 | |
|    ORDER BY 1;
 | |
| } {{a row that occurs twice}}
 | |
| do_execsql_test 1.4 {
 | |
|   SELECT t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x
 | |
|    ORDER BY 1;
 | |
| } {{a row that occurs twice} {a row that occurs twice}}
 | |
| do_execsql_test 1.5 {
 | |
|   SELECT DISTINCT t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x;
 | |
| } {{a row that occurs twice}}
 | |
| do_execsql_test 1.6 {
 | |
|   SELECT t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts MATCH 'that twice'
 | |
|      AND content=x;
 | |
| } {{a row that occurs twice} {a row that occurs twice}}
 | |
| 
 | |
| do_execsql_test 2.1 {
 | |
|   SELECT DISTINCT t1.x
 | |
|     FROM fts, t1
 | |
|    WHERE fts.rowid=11
 | |
|      AND content=x
 | |
|    ORDER BY fts.rowid;
 | |
| } {{a row that occurs twice}}
 | |
| do_execsql_test 2.2 {
 | |
|   SELECT DISTINCT t1.*
 | |
|     FROM fts, t1
 | |
|    WHERE fts.rowid=11
 | |
|      AND content=x
 | |
|    ORDER BY fts.rowid;
 | |
| } {{a row that occurs twice} 111}
 | |
| do_execsql_test 2.3 {
 | |
|   SELECT DISTINCT t1.*
 | |
|     FROM fts, t1
 | |
|    WHERE fts.rowid=11
 | |
|      AND content=x
 | |
|    ORDER BY t1.y
 | |
| } {{a row that occurs twice} 111}
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| finish_test
 | 
