Well I can reproduce the wrong answer. If I compile the amalgamation code:
with no config.h I get the same result as you,
but with the following config.h, the result is correct
(this is with the code from the head of trunk):
#ifndef _CONFIG_H
#define _CONFIG_H
// Values of WINVER and _WIN32_WINNT for various minimum levels of Win32
Compatability
//
// WIN10 0x0A00 WIN6 0x0600 W2K 0x0500 NT4 0x0400
// VISTA 0x0600 WXP 0x0501 W95 0x0400
// W2K8 0x0600 W2K3 0x0502 NT4E 0x0401
// WIN7 0x0601 W98 0x0410
// WIN8 0x0602 WME 0x0490
// WIN81 0x0603
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0600
#endif
#ifndef WINVER
#define WINVER _WIN32_WINNT
#endif
// General Platform Compilation Support Options
#define HAVE_MALLOC_USABLE_SIZE 1
#define HAVE_USLEEP 1
// *** SQLITE GENERAL CONFIGURATION OPTIONS ***
// #define SQLITE_DEFAULT_AUTOMATIC_INDEX 1 // default: 1
// #define SQLITE_DEFAULT_AUTOVACUUM 0 // default: 0
#define SQLITE_DEFAULT_CACHE_SIZE 65536 // 256 MB
// #define SQLITE_DEFAULT_FILE_FORMAT 4 // default: 4
// #define SQLITE_DEFAULT_FILE_PERMISSIONS 0644 // default: 0644
#define SQLITE_DEFAULT_FOREIGN_KEYS 1 // default: 0
// #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT 4194304 // default: -1
// #define SQLITE_DEFAULT_LOCKING_MODE 0 // default: 0
// #define SQLITE_DEFAULT_MEMSTATUS 1 // default: 1
#define SQLITE_DEFAULT_PAGE_SIZE 4096 // default: 4096
max: 65536
// #define SQLITE_DEFAULT_SYNCHRONOUS 2 // default: 2
// #define SQLITE_DEFAULT_WAL_SYNCHRONOUS 2 // default: same
as default synchronous
// #define SQLITE_DEFAULT_WORKER_THREADS 4 // default: 0
#define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT 256 // default: 1000
pages
#define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755 // default: 0755
#define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 1 // default: 0
#define SQLITE_DEFAULT_TEMP_CACHE_SIZE 65536 // default: 500
pages
#define SQLITE_DEFAULT_SHARED_CACHE 0 // default: 0
#define SQLITE_DEFAULT_MMAP_SIZE 0 // default: 0
// #define SQLITE_LIKE_DOESNT_MATCH_BLOBS 1 // default:
undefined
// #define SQLITE_SORTER_PMASZ 64 // default: 250
// #define SQLITE_EXTRA_DURABLE 1 // Extra
DirSync's default not defined
// *** SQLITE FEATURE CONFIGURATION OPTIONS ***
//#define SQLITE_ALLOW_COVERING_INDEX_SCAN 1
#define SQLITE_ENABLE_8_3_NAMES 1
// #define SQLITE_ENABLE_ATOMIC_WRITE 1
#define SQLITE_ENABLE_API_ARMOR 1 // Enable API Armour
#define SQLITE_ENABLE_COLUMN_METADATA 1
#define SQLITE_ENABLE_COSTMULT 1
#define SQLITE_ENABLE_CURSOR_HINTS 1
#define SQLITE_ENABLE_DBSTAT_VTAB 1
#define SQLITE_ENABLE_EXPLAIN_COMMENTS 1
#define SQLITE_ENABLE_FTS3 1
#define SQLITE_ENABLE_FTS3_PARENTHESIS 1
// #define SQLITE_DISABLE_FTS3_UNICODE 1
#define SQLITE_ENABLE_FTS4 1
#define SQLITE_ENABLE_FTS5 1
// #define SQLITE_ENABLE_ICU 1 // Set in BUILD
Command additional Libs required
#define SQLITE_ENABLE_JSON1 1 // Enable JSON1 --
when standard extension
#define SQLITE_ENABLE_LOAD_EXTENSION 1
#define SQLITE_ENABLE_LOCKING_STYLE 1
#define SQLITE_ENABLE_MEMORY_MANAGEMENT 1 // Enable Memory
Management (sqlite3_release_memory)
// #define SQLITE_ENABLE_MEMSYS3 1
// #define SQLITE_ENABLE_MEMSYS5 1
#define SQLITE_ENABLE_MODULE_COMMENTS 1
#define SQLITE_ENABLE_PREUPDATE_HOOK 1
// #define SQLITE_ENABLE_RBU 1 // Enable
Resumable Bulk Update
#define SQLITE_ENABLE_RTREE 1
// #define SQLITE_RTREE_INT_ONLY 1
// #define SQLITE_ENABLE_SESSION 1 // Enable the
SESSION feature
// #define SQLITE_ENABLE_SNAPSHOT 1 // Enable the
SNAPSHOT feature
#define SQLITE_ENABLE_STAT_VTAB 1 // Enable
dbstat_register called from shell
#define SQLITE_ENABLE_STAT1 1
#define SQLITE_ENABLE_STAT2 1
#define SQLITE_ENABLE_STAT3 1
#define SQLITE_ENABLE_STAT4 1
// #define SQLITE_ENABLE_VFSSTAT 1 // Enable
vftstat extension
// #define SQLITE_LIKE_DOESNT_MATCH_BLOBS 1 // default: 0
(undefined)
#define SQLITE_STAT4_SAMPLES 64 // default: 24
samples
// #define SQLITE_64BIT_STATS 1
// #define SQLITE_ENABLE_UNLOCK_NOTIFY 1 // See
Documentation before enabling
// #define SQLITE_ENABLE_UPDATE_DELETE_LIMIT 1 // Requires
Special Amalgamation / Parser Support
#define SQLITE_SOUNDEX 1
// #define SQLITE_DISABLE_LFS 1
// #define SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS 1
// #define SQLITE_DISABLE_DIRSYNC 1
// #define SQLITE_CASE_SENSITIVE_LIKE 1
// #define SQLITE_NOW_STABILITY_STEP 1 // Make 'now'
stable only within step, not entire statement
// #define SQLITE_SECURE_DELETE 1
#define SQLITE_TEMP_STORE 2 // 0 = Files
Always, 1 = Files, 2 = Memory, 3 Memory Always
#define SQLITE_USE_URI 1 // Enable URI
Filenames
#define SQLITE_ALLOW_URI_AUTHORITY 1 // Allow Authority
(Host) in URI
// #define SQLITE_MMAP_READWRITE 1 // mmaps are
writeable as well as readable
// *** SQLITE MAXIMUMS AND LIMITS CONFIGURATION ***
// #define SQLITE_FTS3_MAX_EXPR_DEPTH 15 // default: 12
#define SQLITE_MAX_ATTACHED 15 // default: 10
max: 62
// #define SQLITE_MAX_COLUMN 2000 // default: 2000
max: 32767
// #define SQLITE_MAX_COMPOUND_SELECT 500 // default: 500
// #define SQLITE_MAX_EXPR_DEPTH 1000 // default: 1000
// #define SQLITE_FTS3_MAX_EXPR_DEPTH 12 // default: 12
// #define SQLITE_MAX_FUNCTION_ARG 100 // default: 100
max: 127
// #define SQLITE_MAX_LENGTH 0x3fffffff // default:
1000000000 max: 2147483647 (2^31-1)
// #define SQLITE_MAX_LIKE_PATTERN_LENGTH 16384 // default: 50000
// #define SQLITE_MAX_MMAP_SIZE 0x7fff0000 // default:
0x7fff0000
// #define SQLITE_MAX_PAGE_COUNT 1073741823 // default:
1073741823 max: 2147483646 (2^31-2)
// #define SQLITE_MAX_SQL_LENGTH 131072 // default:
1000000 max: 2^30
// #define SQLITE_MAX_TRIGGER_DEPTH 1000 // default: 1000
// #define SQLITE_MAX_VARIABLE_NUMBER 999 // default: 999
// #define SQLITE_MAX_SCHEMA_RETRY 50 // default: 50
// #define SQLITE_MAX_WORKER_THREADS 8 // default: 11
// #define YYSTACKDEPTH 100 // defautl: 100
// *** SQLITE OPERATING SYSTEM AND INTERNALS CONFIGURATION ***
// #define SQLITE_OS_OTHER 0
#define SQLITE_OS_WIN 1
#define SQLITE_OS_WINNT 1
// #define SQLITE_OS_WINCE 1
// #define SQLITE_OS_WINRT 1
#define SQLITE_WIN32_MALLOC 1 // Use Win32 Heap
Allocator
#define SQLITE_WIN32_HEAP_CREATE 1 // Use Separate
Win32 Heap
// #define SQLITE_WIN32_MALLOC_VALIDATE 1 // Validate
Win32 Heap during SQLITE_DEBUG assert
#define SQLITE_WIN32_HEAP_INIT_SIZE 268435456 // Initial Win32
Heap Size = 256 MB
#define SQLITE_WIN32_HEAP_MAX_SIZE 0 // Max Win32 Heap
Size (No Limit)
// #define SQLITE_WIN32_HEAP_FLAGS 0
// #define SQLITE_WIN32_FILE_SEQUENTIAL 1 // Force Windows
SEQUENTIAL access cache behaviour
#define SQLITE_WIN32_FILE_RANDOM 1 // Force Windows
RANDOM access cache behaviour
// #define SQLITE_WIN32_FILE_WRITETHROUGH 1 // Force Windows
WRITE-THROUGH Behaviour
// #define SQLITE_DIRECT_OVERFLOW_READ 1 // Do Not
PageCache Overflow Pages
// #define SQLITE_SYSTEM_MALLOC 1 // Use Default
System Heap (default if no other specified)
// #define SQLITE_MALLOC_SOFT_LIMIT 1024
// #define SQLITE_POWERSAFE_OVERWRITE 0
// #define SQLITE_4_BYTE_ALIGNED_MALLOC 1
// #define SQLITE_USE_ALLOCA 1 // Use AllocA to
Allocate Parse object os Stack
#define SQLITE_USE_QUADMATH 1 // Use 128-bit
Floats if available
// *** SQLITE OMIT FEATURES ***
// #define SQLITE_OMIT_ALTERTABLE
// #define SQLITE_OMIT_ANALYZE
// #define SQLITE_OMIT_ATTACH
// #define SQLITE_OMIT_AUTHORIZATION
// #define SQLITE_OMIT_AUTOINCREMENT
// #define SQLITE_OMIT_AUTOINIT
// #define SQLITE_OMIT_AUTOMATIC_INDEX
// #define SQLITE_OMIT_AUTORESET
// #define SQLITE_OMIT_AUTOVACUUM
// #define SQLITE_OMIT_BETWEEN_OPTIMIZATION
// #define SQLITE_OMIT_BLOB_LITERAL
// #define SQLITE_OMIT_BTREECOUNT
// #define SQLITE_OMIT_BUILTIN_TEST
// #define SQLITE_OMIT_CAST
// #define SQLITE_OMIT_CHECK
// #define SQLITE_OMIT_COMPILEOPTION_DIAGS
// #define SQLITE_OMIT_COMPLETE
// #define SQLITE_OMIT_COMPOUND_SELECT
// #define SQLITE_OMIT_DATETIME_FUNCS
// #define SQLITE_OMIT_DECLTYPE
// #define SQLITE_OMIT_DEPRECATED
// #define SQLITE_OMIT_DISKIO
// #define SQLITE_OMIT_EXPLAIN
// #define SQLITE_OMIT_FLAG_PRAGMAS
// #define SQLITE_OMIT_FLOATING_POINT
// #define SQLITE_OMIT_FOREIGN_KEY
// #define SQLITE_OMIT_GET_TABLE
// #define SQLITE_OMIT_INCRBLOB
// #define SQLITE_OMIT_INTEGRITY_CHECK
// #define SQLITE_OMIT_LIKE_OPTIMIZATION
// #define SQLITE_OMIT_LOAD_EXTENSION
// #define SQLITE_OMIT_LOCALTIME
// #define SQLITE_OMIT_LOOKASIDE
// #define SQLITE_OMIT_MEMORYDB
// #define SQLITE_OMIT_MERGE_SORT
// #define SQLITE_OMIT_OR_OPTIMIZATION
// #define SQLITE_OMIT_PAGER_PRAGMAS
// #define SQLITE_OMIT_PRAGMA
// #define SQLITE_OMIT_PROGRESS_CALLBACK
// #define SQLITE_OMIT_QUICKBALANCE
// #define SQLITE_OMIT_REINDEX
// #define SQLITE_OMIT_SCHEMA_PRAGMAS
// #define SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
// #define SQLITE_OMIT_SHARED_CACHE
// #define SQLITE_OMIT_SHUTDOWN_DIRECTORIES
// #define SQLITE_OMIT_SUBQUERY
// #define SQLITE_OMIT_TCL_VARIABLE
// #define SQLITE_OMIT_TEMPDB
// #define SQLITE_OMIT_TRACE
// #define SQLITE_OMIT_TRIGGER
// #define SQLITE_OMIT_TRUNCATE_OPTIMIZATION
// #define SQLITE_OMIT_UTF16
// #define SQLITE_OMIT_VACUUM
// #define SQLITE_OMIT_VIEW
// #define SQLITE_OMIT_VIRTUALTABLE
// #define SQLITE_OMIT_WAL
// #define SQLITE_OMIT_WSD
// #define SQLITE_OMIT_XFER_OPT
// *** SQLITE DEBUGGING FEATURES ***
// #define SQLITE_DEBUG 1
// #define SQLITE_ENABLE_EXPENSIVE_ASSERT 1
// #define SQLITE_ENABLE_OVERSIZE_CELL_CHECK 1
// #define SQLITE_ENABLE_SELECTTRACE 1 // Enable Select
Trace (.selecttrace 0x100) needs SQLITE_DEBUG
// #define SQLITE_ENABLE_SQLLOG 1 // Enable
SQLITE_CONFIG_SQLLOG (see documentation)
// #define SQLITE_ENABLE_STMT_SCANSTATUS 1 // Enable
Collection of Statement Scan Status
// #define SQLITE_ENABLE_WHERETRACE 1
// #define SQLITE_IOTRACE 1
// #define SQLITE_MEMDEBUG 1
// #define SQLITE_REVERSE_UNORDERED_SELECTS 1
// #define SQLITE_USE_FCNTL_TRACE 1 // Enable extra
vfslog fcntrl trace
// #define SQLITE_YYTRACKMAXSTACKDEPTH 1
#if defined(_WIN32) && defined(__GNUC__)
#define UNICODE_STRING_MAX_BYTES ((WORD) 65534)
#define UNICODE_STRING_MAX_CHARS (32767)
#define HAVE_FDATASYNC 1
#define HAVE_GMTIME_R 1
#define HAVE_LOCALTIME_S 1
#define HAVE_ISNAN 1
#define HAVE_MALLOC_USABLE_SIZE 1
#define HAVE_USLEEP 1
#define HAVE_UTIME 1
#endif
#if defined(_MSC_VER)
#define HAVE_FDATASYNC 1
#define HAVE_GMTIME_R 1
#define HAVE_LOCALTIME_S 1
#define HAVE_MALLOC_USABLE_SIZE 1
#define HAVE_USLEEP 1
#define HAVE_UTIME 1
#endif
#if defined(__GNUC__) && defined(SQLITE_USE_QUADMATH)
#define LONGDOUBLE_TYPE __float128
#endif
#endif
> -----Original Message-----
> From: sqlite-users [mailto:[email protected]]
> On Behalf Of David Empson
> Sent: Tuesday, 11 October, 2016 18:41
> To: SQLite mailing list
> Subject: Re: [sqlite] LIMIT doesn't return expected rows
>
> Following up: same for the Mac distribution of 3.14.2 command line tool.
> Using the pre-release snapshot of 3.15.0 from the main download page to
> build the sqlite3 3.15.0 on the Mac, I get the same answer: 1,2,3.
>
> SQLite version 3.15.0 2016-10-10 14:34:00
> Enter ".help" for usage hints.
> Connected to a transient in-memory database.
> Use ".open FILENAME" to reopen on a persistent database.
> sqlite> .read test.sql
> select sqlite_source_id();
> 2016-10-10 14:34:00 aebe429e52ffef026cb0803fb164339d61bd2e88
> create table i (id integer primary key autoincrement, flags integer);
> insert into i values (1,1),(2,1),(3,1),(4,1),(5,5),(6,6),(7,4);
> create table m (id integer);
> insert into m values (1),(2),(3),(4),(5),(6),(7);
> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC;
> 6
> 5
> 7
> 1
> 2
> 3
> 4
> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC limit
> 3;
> 1
> 2
> 3
>
>
> > On 12/10/2016, at 1:23 PM, David Empson <[email protected]> wrote:
> >
> > Keith - using your example, I get the same result as Tobias: the second
> select produces 1,2,3. This is with the sqlite3.exe Windows command line
> tool for SQLite 3.14.2 downloaded from sqlite.org. Same sqlite_source_id()
> too. I’m not set up to build SQLite from source, so can’t easily test
> 3.15.0, but If I do the same with a copy of 3.8.11.1 I have handy I get
> the correct result: 6, 5, 7.
> >
> > SQLite version 3.14.2 2016-09-12 18:50:49
> > Enter ".help" for usage hints.
> > Connected to a transient in-memory database.
> > Use ".open FILENAME" to reopen on a persistent database.
> > sqlite> .read test.sql
> > select sqlite_source_id();
> > 2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6
> > create table i (id integer primary key autoincrement, flags integer);
> > insert into i values (1,1),(2,1),(3,1),(4,1),(5,5),(6,6),(7,4);
> > create table m (id integer);
> > insert into m values (1),(2),(3),(4),(5),(6),(7);
> > SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC;
> > 6
> > 5
> > 7
> > 1
> > 2
> > 3
> > 4
> > SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC
> limit 3;
> > 1
> > 2
> > 3
> >
> >> On 12/10/2016, at 12:59 PM, Keith Medcalf <[email protected]> wrote:
> >>
> >> SQLite version 3.14.2 2016-09-12 18:50:49
> >> Enter ".help" for usage hints.
> >> Connected to a transient in-memory database.
> >> Use ".open FILENAME" to reopen on a persistent database.
> >> sqlite> .read \\test.sql
> >> select sqlite_source_id();
> >> 2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6
> >> create table i (id integer primary key autoincrement, flags integer);
> >> insert into i values (1,1),(2,1),(3,1),(4,1),(5,5),(6,6),(7,4);
> >> create table m (id integer);
> >> insert into m values (1),(2),(3),(4),(5),(6),(7);
> >> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC;
> >> 6
> >> 5
> >> 7
> >> 1
> >> 2
> >> 3
> >> 4
> >> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY flags DESC
> limit 3;
> >> 6
> >> 5
> >> 7
> >>
> >> I just compiled 3.14.2 from my source repository and it works
> correctly.
> >>
> >> Can you check the result of "select sqlite_source_id();", which should
> be:
> >>
> >> 2016-09-12 18:50:49 29dbef4b8585f753861a36d6dd102ca634197bd6
> >>
> >> https://www.sqlite.org/src/info/29dbef4b8585f753
> >>
> >>> -----Original Message-----
> >>> From: sqlite-users [mailto:sqlite-users-
> [email protected]]
> >>> On Behalf Of Tobias Ellinghaus
> >>> Sent: Tuesday, 11 October, 2016 11:41
> >>> To: [email protected]
> >>> Subject: Re: [sqlite] LIMIT doesn't return expected rows
> >>>
> >>> Am Dienstag, 11. Oktober 2016, 06:50:01 CEST schrieb Keith Medcalf:
> >>>> This was fixed September 7. The fix appears in 3.14.2 and also on
> the
> >>>> current 3.15.0.
> >>>
> >>> Does that mean that 3.14.2 is supposed to give the "6, 5, 7" result in
> the
> >>> last query? I am asking as that's the version I am using (installed
> from
> >>> Debian/sid) and I get "1, 2, 3" here.
> >>>
> >>>> https://www.sqlite.org/releaselog/3_14_2.html
> >>>>
> >>>> The ORDER BY LIMIT optimization is not valid unless the inner-most IN
> >>>> operator loop is actually used by the query plan. Ticket
> >>>> https://sqlite.org/src/info/0c4df46116e90f92
> >>>>
> >>>>
> >>>> SQLite version 3.15.0 2016-10-10 14:48:36
> >>>> Enter ".help" for usage hints.
> >>>> Connected to a transient in-memory database.
> >>>> Use ".open FILENAME" to reopen on a persistent database.
> >>>> sqlite> create table i (id integer primary key, flags integer);
> >>>> sqlite> insert into i values
> (1,1),(2,1),(3,1),(4,1),(5,5),(6,6),(7,4);
> >>>> sqlite> create table m (id integer);
> >>>> sqlite> insert into m values (1),(2),(3),(4),(5),(6),(7);
> >>>> sqlite> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY
> flags
> >>> DESC;
> >>>> 6
> >>>> 5
> >>>> 7
> >>>> 1
> >>>> 2
> >>>> 3
> >>>> 4
> >>>> sqlite> SELECT id FROM i WHERE id IN (SELECT id FROM m) ORDER BY
> flags
> >>> DESC
> >>>> limit 3; 6
> >>>> 5
> >>>> 7
> >>>
> >>> Tobias
> >>>
> >>> [...]
> >>
> >>
> >>
> >> _______________________________________________
> >> sqlite-users mailing list
> >> [email protected]
> >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> >
> > _______________________________________________
> > sqlite-users mailing list
> > [email protected]
> > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
> --
> David Empson
> [email protected]
> Snail mail: P.O. Box 27-103, Wellington 6141, New Zealand
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users