SQLite User Forum

Query results change after adding index to UTF-16le database
Login

Query results change after adding index to UTF-16le database

(1) By Rashad Sookram (rsookram) on 2024-08-20 02:18:03 [link] [source]

PRAGMA encoding = 'UTF-16le';

CREATE TABLE Example(word TEXT NOT NULL);
CREATE INDEX Example_word on Example(word);

INSERT INTO Example VALUES('あ');
INSERT INTO Example VALUES('時');

SELECT * FROM Example WHERE word GLOB 'あ*';

In this example, both rows are returned by the query, even though only the 'あ' row should be returned. This only happens when using UTF-16le and having an index on the column being searched. If either a different encoding is used for the database, or the index isn't added, the correct result is returned.

I saw this bug which mentioned the quirk around how UTF-16le is handled in SQLite, but it seemed a little different from what's happening here.

This happened in SQLite version 3.46.0 on Linux. Running on an Intel CPU, if that matters.

(2) By Rashad Sookram (rsookram) on 2024-08-20 03:16:56 in reply to 1 [link] [source]

Hmm... Maybe the comment on that bug about the sort order is relevant here if the GLOB is just being converted to a range query. The following query behaves the same way regardless of whether there's an index:

SELECT * FROM Example WHERE word >= 'あ' AND word < 'ぃ';

I'll probably just stick with UTF-16be for my use case. But it would be nice if the sort order behavior was mentioned somewhere in the docs if it isn't already (I couldn't find anything on it).

(3) By Richard Hipp (drh) on 2024-08-20 14:19:34 in reply to 1 [link] [source]

Thanks for the bug report. I think the problem has now been resolved in the latest trunk check-in and in the latest check-in on branch-3.46. The complete fix is spread across two check-ins. You can see the diff here: https://sqlite.org/src/vdiff?from=70f4973078ffc72f&to=3399698376761ab8.

Please try out the latest code and report back if you find any other anomalies when using UTF-16LE.

(4) By jose isaias cabrera (jicman) on 2024-08-20 16:02:08 in reply to 3 [link] [source]

I replicated this issue with cygwin, but it's now fixed on this version:

$ sqlite3
-- Loading resources from /home/jic/.sqliterc
SQLite version 3.47.0 2024-08-20 14:12:16
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> PRAGMA encoding = 'UTF-16le';

CREATE TABLE Example(word TEXT NOT NULL);
VM-steps: 4
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> sqlite> CREATE INDEX Example_word on Example(word);
VM-steps: 31
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>
VM-steps: 26
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> sqlite> INSERT INTO Example VALUES('あ');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> INSERT INTO Example VALUES('時');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
┌──────┐
│ word │
├──────┤
│ 'あ'  │
└──────┘
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000

(5.1) By Aask (AAsk1902) on 2024-08-20 17:18:01 edited from 5.0 in reply to 3 [link] [source]

Tried to compile on Windows and get this error

Microsoft (R) Program Maintenance Utility Version 14.16.27051.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        tclsh .\tool\mkopcodec.tcl opcodes.h > opcodes.c
'tclsh' is not recognized as an internal or external command,
operable program or batch file.
NMAKE : fatal error U1077: 'tclsh' : return code '0x1'
Stop.

(6) By Richard Hipp (drh) on 2024-08-20 17:29:10 in reply to 5.1 [link] [source]

(7) By Aask (AAsk1902) on 2024-08-20 18:41:55 in reply to 6 [link] [source]

Thanks.

However, when I compiled 3.46 initially, and then again I did not have to execute steps 3 - 5 : these requirements must be new.

So be it; I'll re-try the steps in your link.

PS: I have not acted on steps 3-5 and retried compiling 346 as was i.e. Source code tarball as of 2024-05-08 17:57Z

E:\SQLite_Builds\Build_SQLite3\V346>"D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86\nmake.exe" /f Makefile.msc

Microsoft (R) Program Maintenance Utility Version 14.16.27051.0
Copyright (C) Microsoft Corporation.  All rights reserved.


E:\SQLite_Builds\Build_SQLite3\V346>(echo VERSION = ^#define SQLITE_VERSION        "3.46.0"  1>>rcver.vc )
        echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h
        echo #define SQLITE_RESOURCE_VERSION          3,46,0 >> sqlite3rc.h
        echo #endif >> sqlite3rc.h
        rc -DSQLITE_OS_WIN=1 -I. -I.   -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -r -fo sqlite3res.lo -DRC_VERONLY .\sqlite3.rc
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.

        link.exe /DEBUG  /NOLOGO /MACHINE:x86  /DLL /DEF:sqlite3.def /OUT:sqlite3.dll sqlite3.lo sqlite3res.lo
LINK : sqlite3.dll not found or not built by the last incremental link; performing full link
   Creating library sqlite3.lib and object sqlite3.exp
        cl -nologo -W4 -DINCLUDE_MSVC_H=1   -DSQLITE_OS_WIN=1 -I. -I. -fp:precise -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -O2 -Zi -Fesqlite3.exe  -DSQLITE_DQS=0 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 -DSQLITE_ENABLE_STMT_SCANSTATUS=1 -DSQLITE_STRICT_SUBTYPE=1 -DHAVE_READLINE=0 shell.c sqlite3.c  /link /pdb:sqlite3sh.pdb /DEBUG  /NOLOGO /MACHINE:x86   sqlite3res.lo
shell.c
sqlite3.c
Generating Code...
LINK : sqlite3.exe not found or not built by the last incremental link; performing full link

E:\SQLite_Builds\Build_SQLite3\V346>where sqlite3.exe
E:\SQLite_Builds\Build_SQLite3\V346\sqlite3.exe

I still can compile 3.46 (I had renamed sqlite3.exe in that directory to make sure) but not 3.47. I guess steps 3-5 are no longer an option for v3.47.

(8) By Larry Brasfield (larrybr) on 2024-08-20 19:01:28 in reply to 7 [link] [source]

For the targets you specified to NMAKE, the TCL library linkage was not needed.

The "Notes On Compiling SQLite On Windows 11" pertain to more targets than you specified. In particular, the test-related targets will require the TCL library and steps 3-5 (at least once) in the "Notes".

(9) By Aask (AAsk1902) on 2024-08-20 19:39:12 in reply to 8 [link] [source]

I am out of my depth.

For the targets you specified to NMAKE, the TCL library linkage was not needed.

  1. I specified nmake.exe /f makefile.msc: were the targets specified in makefile.msc? (I never edited this file).
  2. Is there a way to not need the TCL linkage (and still be able to create sqlite3.dll and sqlite3.exe)?If yes, how?

(10) By Larry Brasfield (larrybr) on 2024-08-20 20:07:33 in reply to 9 [link] [source]

I specified nmake.exe /f makefile.msc: were the targets specified in makefile.msc? (I never edited this file).

The "make" convention is that the first target/recipe construct in a makefile is the default target. When you elected to name no target, you specified that the default target be built.

Is there a way to not need the TCL linkage (and still be able to create sqlite3.dll and sqlite3.exe)?If yes, how?

Yes. For those targets, only tclsh.exe need be used to build the amalgamation. The target named "core", which is the default, devolves into the sqlite3.dll and sqlite3.exe targets. So, your no-target invocation is how.

(11) By Rashad Sookram (rsookram) on 2024-08-20 22:20:21 in reply to 3 [link] [source]

I tried out the latest code too, and I get the results that I expect now that the query seems to perform a table scan. Thanks for the quick fix!

(12) By Aask (AAsk1902) on 2024-08-21 02:43:34 in reply to 10 [link] [source]

This is still beyond my understanding.

  1. amalgamation: is this shell.c or sqlite3.c or both?

  2. as sqlite3.c is missing from the download/check-in cited, I'd still need the TCL linkage?

So, your no-target invocation is how.

If that translates into nmake.exe *, perhaps you can tell me the full specification of * ?

(13) By Larry Brasfield (larrybr) on 2024-08-21 03:07:26 in reply to 12 [link] [source]

amalgamation: is this shell.c or sqlite3.c or both?

See "Amalgamtion".

as sqlite3.c is missing from the download/check-in cited, I'd still need the TCL linkage?

There are two principle ways that TCL is used within the SQLite project: (1) A TCL interpreter, known as tclsh (or tclsh.exe on Windows), is used to construct the amalgamation and other artifacts; and (2) The TCL library is linked to certain executable images so that a TCL-based test suite can be run. To build the amalgamation and compile it, you need only the TCL interpreter.

If that translates into nmake.exe *, perhaps you can tell me the full specification of * ?

See note #1 here.

(14) By Aask (AAsk1902) on 2024-08-21 04:24:43 in reply to 13 [source]

I'm still out of my comfort zone due to lack of knowledge.

However, I've overcome the tclsh.exe hurdle, running

nmake.exe /f makefile.msc

has created sqlite3.c BUT I am getting a series of errors:

sqlite3.c(1456): error C2061: syntax error: identifier 'i64'
sqlite3.c(1456): error C2059: syntax error: ';'
sqlite3.c(1457): error C2061: syntax error: identifier 'u64'
sqlite3.c(1457): error C2059: syntax error: ';'
sqlite3.c(1476): error C2061: syntax error: identifier 'tRowcnt'
sqlite3.c(1476): error C2059: syntax error: ';'
sqlite3.c(1985): error C2061: syntax error: identifier 'Bitmask'
sqlite3.c(1985): error C2059: syntax error: ';'

....

sqlite3.c(2320): error C2059: syntax error: ','
sqlite3.c(2320): error C2059: syntax error: ')'
sqlite3.c(2320): fatal error C1003: error count exceeds 100; stopping compilation
NMAKE : fatal error U1077: '"D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.EXE"' : return code '0x2'
Stop.

  1. Why the errors? How do I overcome these?
  2. Given that I have shell.c and sqlite3.c I tried using cl.exe which encounters the same errors.

(15) By Dan Kennedy (dan) on 2024-08-21 20:49:41 in reply to 14 [link] [source]

Try running:

  nmake.exe /f makefile.msc clean

then starting over. The failed builds you did earlier might have left files in the build directory that are causing this build to fail.

Dan.

(16.1) By Aask (AAsk1902) on 2024-08-21 22:14:40 edited from 16.0 in reply to 15 [link] [source]

Thank you for the tip.

That worked - the errors evaporated.

Something puzzles me. In this post the version number is reported as 3.47.0 2024-08-20 14:12:16. The SQLite3.exe I have reports the version as 3.46.1 2024-08-20 14:16:26.

Why? Has the code at the link been changed?

I have got the right source (I think) since the result I get reflects the fix.

sqlite> .header on
sqlite> PRAGMA encoding = 'UTF-16le';
sqlite>
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
sqlite> CREATE INDEX Example_word on Example(word);
sqlite>
sqlite> INSERT INTO Example VALUES('あ');
sqlite> INSERT INTO Example VALUES('時');
sqlite>
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
word
あ

(17) By jose isaias cabrera (jicman) on 2024-08-22 12:59:08 in reply to 16.1 [link] [source]

The SQLite3.exe I have reports the version as 3.46.1 2024-08-20 14:16:26.

Can you show the full run of the script, including the step where you run sqlite3.exe? For example:

$ sqlite3
-- Loading resources from /home/E608313/.sqliterc
SQLite version 3.47.0 2024-08-20 14:12:16
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> PRAGMA encoding = 'UTF-16le';
VM-steps: 4
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
VM-steps: 31
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> CREATE INDEX Example_word on Example(word);
VM-steps: 26
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> INSERT INTO Example VALUES('あ');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> INSERT INTO Example VALUES('時');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
┌──────┐
│ word │
├──────┤
│ 'あ'  │
└──────┘
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>

and also run the .ver command after

sqlite> .ver
SQLite 3.47.0 2024-08-20 14:12:16 3399698376761ab8c422f8ea02bfa2759afb606f08bedbd1cf7eee834229a9aa
zlib version 1.3.1
gcc-11.5.0 (64-bit)
sqlite>

I believe your build script may be omitting the SQLite version change on your system somehow. But, this is the correct version where this fix was inserted.

(18) By Aask (AAsk1902) on 2024-08-22 13:40:11 in reply to 17 [link] [source]

The full run of the script is rather lengthy, see below.

Can you show the full run of the script, including the step where you run sqlite3.exe

E:\SQLite_Builds\Build_SQLite3\V347>sqlite3
SQLite version 3.46.1 2024-08-20 14:16:26 (UTF-16 console I/O)
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .ver
SQLite 3.46.1 2024-08-20 14:16:26 db917d50fda6eb7ba50dfebbf56ffdc7a97411e35f19733166ecd97a62573054
msvc-1929 (32-bit)
sqlite> PRAGMA encoding = 'UTF-16le';
sqlite>
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
sqlite> CREATE INDEX Example_word on Example(word);
sqlite>
sqlite> INSERT INTO Example VALUES('あ');
sqlite> INSERT INTO Example VALUES('時');
sqlite>
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
あ

Can you show the full run of the script, including the step where you run sqlite3.exe

	copy /Y .\tool\lempar.c .
        1 file(s) copied.
	copy /B lempar.c +,,
        1 file(s) copied.
	cl -nologo -W4 -Fdlemon.pdb   -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -O2 -Zi -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206 -wd4210 -wd4232 -wd4244 -wd4305 -wd4306 -wd4702 -wd4706 -Daccess=_access  -Felemon.exe .\tool\lemon.c /link /DEBUG   
lemon.c
	del /Q parse.y parse.h parse.h.temp 2>NUL
	copy /Y .\src\parse.y .
        1 file(s) copied.
	copy /B parse.y +,,
        1 file(s) copied.
	.\lemon.exe  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -S parse.y
	type parse.h .\src\vdbe.c | tclsh .\tool\mkopcodeh.tcl > opcodes.h
	tclsh .\tool\mkopcodec.tcl opcodes.h > opcodes.c
	cl -nologo -W4 -Fdmkkeywordhash.pdb   -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -O2 -Zi -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206 -wd4210 -wd4232 -wd4244 -wd4305 -wd4306 -wd4702 -wd4706 -Femkkeywordhash.exe  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS    .\tool\mkkeywordhash.c /link /DEBUG   
mkkeywordhash.c
	.\mkkeywordhash.exe > keywordhash.h
	tclsh .\tool\mkshellc.tcl > shell.c
	cl -nologo -W4 -Fdmksourceid.pdb   -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -O2 -Zi -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206 -wd4210 -wd4232 -wd4244 -wd4305 -wd4306 -wd4702 -wd4706 -Femksourceid.exe .\tool\mksourceid.c /link /DEBUG   
mksourceid.c
	tclsh .\tool\mksqlite3h.tcl . > sqlite3.h 
	copy /Y .\ext\fts5\fts5parse.y .
        1 file(s) copied.
	copy /B fts5parse.y +,,
        1 file(s) copied.
	del /Q fts5parse.h 2>NUL
	.\lemon.exe  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -S fts5parse.y
	tclsh .\ext\fts5\tool\mkfts5c.tcl
	copy /Y .\ext\fts5\fts5.h .
        1 file(s) copied.
	copy /B fts5.h +,,
        1 file(s) copied.
	rmdir /Q/S tsrc 2>NUL
	mkdir tsrc
	for %i in (.\src\alter.c  .\src\analyze.c  .\src\attach.c  .\src\auth.c  .\src\backup.c  .\src\bitvec.c  .\src\btmutex.c  .\src\btree.c  .\src\build.c  .\src\callback.c  .\src\complete.c  .\src\ctime.c  .\src\date.c  .\src\dbpage.c  .\src\dbstat.c  .\src\delete.c  .\src\expr.c  .\src\fault.c  .\src\fkey.c  .\src\func.c  .\src\global.c  .\src\hash.c  .\src\insert.c  .\src\json.c  .\src\legacy.c  .\src\loadext.c  .\src\main.c  .\src\malloc.c  .\src\mem0.c  .\src\mem1.c  .\src\mem2.c  .\src\mem3.c  .\src\mem5.c  .\src\memdb.c  .\src\memjournal.c  .\src\mutex.c  .\src\mutex_noop.c  .\src\mutex_unix.c  .\src\mutex_w32.c  .\src\notify.c  .\src\os.c  .\src\os_kv.c  .\src\os_unix.c  .\src\os_win.c) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\alter.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\analyze.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\attach.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\auth.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\backup.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\bitvec.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\btmutex.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\btree.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\build.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\callback.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\complete.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\ctime.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\date.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\dbpage.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\dbstat.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\delete.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\expr.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\fault.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\fkey.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\func.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\global.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\hash.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\insert.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\json.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\legacy.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\loadext.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\main.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\malloc.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mem0.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mem1.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mem2.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mem3.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mem5.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\memdb.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\memjournal.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mutex.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mutex_noop.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mutex_unix.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mutex_w32.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\notify.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_kv.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_unix.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_win.c tsrc 
        1 file(s) copied.
	for %i in (.\src\pager.c  .\src\pcache.c  .\src\pcache1.c  .\src\pragma.c  .\src\prepare.c  .\src\printf.c  .\src\random.c  .\src\resolve.c  .\src\rowset.c  .\src\select.c  .\src\status.c  .\src\table.c  .\src\threads.c  .\src\tclsqlite.c  .\src\tokenize.c  .\src\treeview.c  .\src\trigger.c  .\src\utf.c  .\src\update.c  .\src\upsert.c  .\src\util.c  .\src\vacuum.c  .\src\vdbe.c  .\src\vdbeapi.c  .\src\vdbeaux.c  .\src\vdbeblob.c  .\src\vdbemem.c  .\src\vdbesort.c  .\src\vdbetrace.c  .\src\vdbevtab.c  .\src\vtab.c  .\src\wal.c  .\src\walker.c  .\src\where.c  .\src\wherecode.c  .\src\whereexpr.c  .\src\window.c) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pager.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pcache.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pcache1.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pragma.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\prepare.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\printf.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\random.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\resolve.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\rowset.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\select.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\status.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\table.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\threads.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\tclsqlite.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\tokenize.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\treeview.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\trigger.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\utf.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\update.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\upsert.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\util.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vacuum.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbe.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbeapi.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbeaux.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbeblob.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbemem.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbesort.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbetrace.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbevtab.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vtab.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\wal.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\walker.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\where.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\wherecode.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\whereexpr.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\window.c tsrc 
        1 file(s) copied.
	for %i in (.\src\parse.y) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\parse.y tsrc 
        1 file(s) copied.
	for %i in (.\src\btree.h  .\src\btreeInt.h  .\src\hash.h  .\src\hwtime.h  .\src\msvc.h  .\src\mutex.h  .\src\os.h  .\src\os_common.h  .\src\os_setup.h  .\src\os_win.h) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\btree.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\btreeInt.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\hash.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\hwtime.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\msvc.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\mutex.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_common.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_setup.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\os_win.h tsrc 
        1 file(s) copied.
	for %i in (.\src\pager.h  .\src\pcache.h  .\src\pragma.h  .\src\sqlite.h.in  .\src\sqlite3ext.h  .\src\sqliteInt.h  .\src\sqliteLimit.h  .\src\vdbe.h  .\src\vdbeInt.h  .\src\vxworks.h  .\src\wal.h  .\src\whereInt.h) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pager.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pcache.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\pragma.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\sqlite.h.in tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\sqlite3ext.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\sqliteInt.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\sqliteLimit.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbe.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vdbeInt.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\vxworks.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\wal.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\src\whereInt.h tsrc 
        1 file(s) copied.
	for %i in (.\ext\fts3\fts3.c  .\ext\fts3\fts3_aux.c  .\ext\fts3\fts3_expr.c  .\ext\fts3\fts3_hash.c  .\ext\fts3\fts3_icu.c  .\ext\fts3\fts3_porter.c  .\ext\fts3\fts3_snippet.c  .\ext\fts3\fts3_tokenizer.c  .\ext\fts3\fts3_tokenizer1.c  .\ext\fts3\fts3_tokenize_vtab.c  .\ext\fts3\fts3_unicode.c  .\ext\fts3\fts3_unicode2.c  .\ext\fts3\fts3_write.c  .\ext\icu\icu.c  .\ext\rtree\rtree.c  .\ext\session\sqlite3session.c  .\ext\rbu\sqlite3rbu.c  .\ext\misc\stmt.c) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_aux.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_expr.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_hash.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_icu.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_porter.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_snippet.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_tokenizer.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_tokenizer1.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_tokenize_vtab.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_unicode.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_unicode2.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_write.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\icu\icu.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\rtree\rtree.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\session\sqlite3session.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\rbu\sqlite3rbu.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\misc\stmt.c tsrc 
        1 file(s) copied.
	for %i in (.\ext\fts3\fts3.h  .\ext\fts3\fts3Int.h  .\ext\fts3\fts3_hash.h  .\ext\fts3\fts3_tokenizer.h  .\ext\icu\sqliteicu.h  .\ext\rtree\rtree.h  .\ext\rtree\geopoly.c  .\ext\rbu\sqlite3rbu.h  .\ext\session\sqlite3session.h) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3Int.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_hash.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\fts3\fts3_tokenizer.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\icu\sqliteicu.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\rtree\rtree.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\rtree\geopoly.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\rbu\sqlite3rbu.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y .\ext\session\sqlite3session.h tsrc 
        1 file(s) copied.
	for %i in (opcodes.c  parse.c) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y opcodes.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y parse.c tsrc 
        1 file(s) copied.
	for %i in (keywordhash.h  opcodes.h  parse.h  shell.c  sqlite3.h) do copy /Y %i tsrc

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y keywordhash.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y opcodes.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y parse.h tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y shell.c tsrc 
        1 file(s) copied.

E:\SQLite_Builds\Build_SQLite3\V347>copy /Y sqlite3.h tsrc 
        1 file(s) copied.
	for %i in () do copy /Y %i tsrc
	copy /Y fts5.c tsrc
        1 file(s) copied.
	copy /B tsrc\fts5.c +,,
        1 file(s) copied.
	copy /Y fts5.h tsrc
        1 file(s) copied.
	copy /B tsrc\fts5.h +,,
        1 file(s) copied.
	del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
	tclsh .\tool\vdbe-compress.tcl  < tsrc\vdbe.c > vdbe.new
	move vdbe.new tsrc\vdbe.c
        1 file(s) moved.
	echo > .target_source
	copy /Y tsrc\sqlite3ext.h sqlite3ext.h
        1 file(s) copied.
	copy /B sqlite3ext.h +,,
        1 file(s) copied.
	copy /Y .\ext\session\sqlite3session.h .
        1 file(s) copied.
	copy /B sqlite3session.h +,,
        1 file(s) copied.
	cl -nologo -W4 -DINCLUDE_MSVC_H=1   -DSQLITE_OS_WIN=1 -I. -I. -I.\src -fp:precise -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -O2 -Zi -Fesrc-verify.exe -wd4054 -wd4055 -wd4100 -wd4127 -wd4130 -wd4152 -wd4189 -wd4206 -wd4210 -wd4232 -wd4244 -wd4305 -wd4306 -wd4702 -wd4706 .\tool\src-verify.c
src-verify.c
	tclsh .\tool\mksqlite3c.tcl --linemacros=0 
	cl -nologo -W4 -DINCLUDE_MSVC_H=1   -DSQLITE_OS_WIN=1 -I. -I. -I.\src -fp:precise -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -O2 -Zi -Fosqlite3.lo -Fdsqlite3.pdb  -c sqlite3.c
sqlite3.c
	echo #ifndef SQLITE_RESOURCE_VERSION > sqlite3rc.h
	for /F %V in ('type ".\VERSION"') do (  echo #define SQLITE_RESOURCE_VERSION %V  | tclsh .\tool\replace.tcl exact . ^, >> sqlite3rc.h  )

E:\SQLite_Builds\Build_SQLite3\V347>(echo #define SQLITE_RESOURCE_VERSION 3.46.1   | tclsh .\tool\replace.tcl exact . ,   1>>sqlite3rc.h ) 
	echo #endif >> sqlite3rc.h
	rc -DSQLITE_OS_WIN=1 -I. -I. -I.\src   -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -r -fo sqlite3res.lo .\src\sqlite3.rc
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.

	lib.exe /NOLOGO /MACHINE:x86 /OUT:libsqlite3.lib sqlite3.lo 
	echo EXPORTS > sqlite3.def
	dumpbin /all libsqlite3.lib  | tclsh .\tool\replace.tcl include "^\s+1 _?(sqlite3(?:session|changeset|changegroup|rebaser|rbu)?_[^@]*)(?:@\d+)?$" \1  | sort >> sqlite3.def
	link.exe /DEBUG  /NOLOGO /MACHINE:x86  /DLL /DEF:sqlite3.def /OUT:sqlite3.dll sqlite3.lo sqlite3res.lo  
   Creating library sqlite3.lib and object sqlite3.exp
	cl -nologo -W4 -DINCLUDE_MSVC_H=1   -DSQLITE_OS_WIN=1 -I. -I. -I.\src -fp:precise -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1 -DSQLITE_TEMP_STORE=1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS   -O2 -Zi -Fesqlite3.exe  -DSQLITE_DQS=0 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION=1 -DSQLITE_ENABLE_STMT_SCANSTATUS=1 -DSQLITE_STRICT_SUBTYPE=1 -DHAVE_READLINE=0 shell.c sqlite3.c  /link /pdb:sqlite3sh.pdb /DEBUG  /NOLOGO /MACHINE:x86   sqlite3res.lo   
shell.c
sqlite3.c
Generating Code...
LINK : sqlite3.exe not found or not built by the last incremental link; performing full link

(19) By jose isaias cabrera (jicman) on 2024-08-22 14:47:04 in reply to 18 [link] [source]

Hmmmm... I know that 3.46.1 does not have the fix we're referring to, but you do have that "3.46.1" version that has it, which is not correct. So, the fix was pushed to your system, somehow, but the version was not changed. How that happened? I do not know, but perhaps the step that changes the version number failed, somehow.

I build my Windows DLLs and SQLite3.exe using cygwin, which is a "linux" like system on top of windows. Perhaps one of the developers can explain better what went wrong that the version didn't take, but the fix did take.

(20) By jose isaias cabrera (jicman) on 2024-08-22 14:56:10 in reply to 19 [link] [source]

Just so make sure, I downloaded v3.46.1 and reinstalled it on my windows 10 system and ran the same script in question:

10:52:18.91>sqlite3
-- Loading resources from C:\Users\e608313/.sqliterc
SQLite version 3.46.1 2024-08-13 09:16:08 (UTF-16 console I/O)
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> PRAGMA encoding = 'UTF-16le';
VM-steps: 4
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
VM-steps: 31
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> CREATE INDEX Example_word on Example(word);
VM-steps: 26
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>
sqlite> INSERT INTO Example VALUES('あ');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite> INSERT INTO Example VALUES('時');
VM-steps: 17
Run Time: real 0.000 user 0.000000 sys 0.000000
sqlite>
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
┌──────┐
│ word │
├──────┤
│ 'あ'  │
│ '時'  │
└──────┘
VM-steps: 21
Run Time: real 0.015 user 0.015625 sys 0.000000

As you can see, my expectations of v3.46.1 are correct.

(21.2) By Aask (AAsk1902) on 2024-08-23 02:22:04 edited from 21.1 in reply to 19 [link] [source]

With your compilation

.ver
SQLite 3.47.0 2024-08-20 14:12:16 3399698376761ab8c422f8ea02bfa2759afb606f08bedbd1cf7eee834229a9aa

With my (original) compilation

.ver 
SQLite 3.46.1 2024-08-20 14:16:26 db917d50fda6eb7ba50dfebbf56ffdc7a97411e35f19733166ecd97a62573054

While both versions have the fix, I think my download source - given here - does not update the version whereas your download source has the version updated.

It is not the compilation process (your are using cygwin and I am using nmake) or my false start that is causing the discrepancy but the code in the two difference sources. I downloaded from here and recompiled and have the same version as you. (running executable in E:\SQLite_Builds\Build_SQLite3\V347_New)

SQLite version 3.47.0 2024-08-20 14:12:16 (UTF-16 console I/O)
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .header on
sqlite> .ver
SQLite 3.47.0 2024-08-20 14:12:16 3399698376761ab8c422f8ea02bfa2759afb606f08bedbd1cf7eee834229a9aa
msvc-1929 (32-bit)
sqlite> .shell chdir
E:\SQLite_Builds\Build_SQLite3\V347_New
sqlite> PRAGMA encoding = 'UTF-16le';
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
sqlite> CREATE INDEX Example_word on Example(word);
sqlite> INSERT INTO Example VALUES('あ');
sqlite> INSERT INTO Example VALUES('時');
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
word
あ
sqlite>

In my first (original) attempt, the corresponfing result is: (running executable in E:\SQLite_Builds\Build_SQLite3\V347)

SQLite version 3.46.1 2024-08-20 14:16:26 (UTF-16 console I/O)
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .header on
sqlite> .ver
SQLite 3.46.1 2024-08-20 14:16:26 db917d50fda6eb7ba50dfebbf56ffdc7a97411e35f19733166ecd97a62573054
msvc-1929 (32-bit)
sqlite> .shell chdir
E:\SQLite_Builds\Build_SQLite3\V347
sqlite> PRAGMA encoding = 'UTF-16le';
sqlite> CREATE TABLE Example(word TEXT NOT NULL);
sqlite> CREATE INDEX Example_word on Example(word);
sqlite> INSERT INTO Example VALUES('あ');
sqlite> INSERT INTO Example VALUES('時');
sqlite> SELECT * FROM Example WHERE word GLOB 'あ*';
word
あ

Both download locations have the fix.

(22) By jose isaias cabrera (jicman) on 2024-08-23 12:31:16 in reply to 21.2 [link] [source]

Interesting.