1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-04-18 21:24:05 +03:00

Merge trunk into cygwin-fixes branch. Add .fossil-settings/binary-glob to squelch warnings about *.db files on Cygwin.

FossilOrigin-Name: a8328b921c5504eceacade417e16e713999eff63978caf3418fd79501590b1cb
This commit is contained in:
stephan 2025-03-26 00:02:15 +00:00
commit 22d502e33a
22 changed files with 688 additions and 273 deletions

1
.fossil-settings/binary-glob Executable file
View File

@ -0,0 +1 @@
*.db

View File

@ -340,5 +340,4 @@ distclean: distclean-autosetup
version-info$(T.exe): $(TOP)/tool/version-info.c Makefile sqlite3.h
$(T.link) $(ST_OPT) -o $@ $(TOP)/tool/version-info.c
IS_CROSS_COMPILING = @IS_CROSS_COMPILING@
include $(TOP)/main.mk

View File

@ -12,7 +12,6 @@
#
# JimTCL: https://jim.tcl.tk
#
use sqlite-config
sqlite-configure canonical {
proj-if-opt-truthy dev {

View File

@ -72,11 +72,8 @@ LDFLAGS.rt = @LDFLAGS_RT@
LDFLAGS.icu = @LDFLAGS_ICU@
CFLAGS.icu = @CFLAGS_ICU@
# When cross-compiling, we need to avoid the -s flag because it only
# works on the build host's platform.
INSTALL.strip.1 = $(INSTALL)
INSTALL.strip.0 = $(INSTALL) -s
INSTALL.strip = $(INSTALL.strip.@IS_CROSS_COMPILING@)
# INSTALL reminder: we specifically do not strip binaries,
# as discussed in https://sqlite.org/forum/forumpost/9a67df63eda9925c.
INSTALL.noexec = $(INSTALL) -m 0644
install-dir.bin = $(DESTDIR)$(bindir)
@ -242,7 +239,7 @@ sqlite3$(T.exe)-0: sqlite3$(T.exe)
all: sqlite3$(T.exe)-$(HAVE_WASI_SDK)
install-shell-0: sqlite3$(T.exe) $(install-dir.bin)
$(INSTALL.strip) sqlite3$(T.exe) "$(install-dir.bin)"
$(INSTALL) sqlite3$(T.exe) "$(install-dir.bin)"
install-shell-1:
install: install-shell-$(HAVE_WASI_SDK)

View File

@ -8,4 +8,13 @@ sqlite-configure autoconf {
sqlite-check-common-bins ;# must come before [sqlite-handle-wasi-sdk]
sqlite-handle-wasi-sdk ;# must run relatively early, as it changes the environment
sqlite-check-common-system-deps
proj-define-for-opt static-shell ENABLE_STATIC_SHELL \
"Link library statically into the CLI shell?"
if {![opt-bool shared] && ![opt-bool static-shell]} {
proj-opt-set shared 1
proj-indented-notice {
NOTICE: ignoring --disable-shared because --disable-static-shell
was specified.
}
}
}

View File

@ -15,6 +15,8 @@ build infrastructure. It is not an [Autosetup][] reference.
- Do Not Update Global Shared State
- [Updating Autosetup](#updating)
- ***[Patching Autosetup for Project-local changes](#patching)***
- [Branch-specific Customization](#branch-customization)
------------------------------------------------------------------------
@ -385,6 +387,60 @@ If autosetup is upgraded and this patch is _not_ applied the invoking
`./configure` will fail loudly because of the declaration of the
`debug` flag in `auto.def` - duplicated flags are not permitted.
<a name="branch-customization"></a>
Branch-specific Customization
========================================================================
Certain vendor-specific branches require slight configure script
customization. Rather than editing `sqlite-config.tcl` for this,
which frequently leads to merge conflicts, the following approach
is recommended:
In the vendor-specific branch, create a file named
`autosetup/sqlite-custom.tcl`.
That file should contain the following content...
If flag customization is required, add:
>
```
proc sqlite-custom-flags {} {
# If any existing --flags require different default values
# then call:
options-defaults {
flag-name new-default-value
...
}
# ^^^ That will replace the default value but will not update
# the --help text, which may lead to some confusion:
# https://github.com/msteveb/autosetup/issues/77
return {
{*} {
new-flag-name => {Help text}
...
}
}; #see below
}
```
That function must return either an empty string or a list in the form
used internally by `sqlite-config.tcl:sqlite-configure`.
Next, define:
>
```
proc sqlite-custom-handle-flags {} {
... do any custom flag handling here ...
}
```
That function, if defined, will be called relatively late in the
configure process, before any filtered files are generated but after
all other significant processing.
[Autosetup]: https://msteveb.github.io/autosetup/
[auto.def]: /file/auto.def

View File

@ -64,6 +64,7 @@ proc proj-warn {msg} {
show-notices
puts stderr "WARNING: $msg"
}
########################################################################
# @proj-error msg
#
@ -75,22 +76,22 @@ proc proj-fatal {msg} {
}
########################################################################
# @proj-assert script
# @proj-assert script ?message?
#
# Kind of like a C assert: if uplevel (eval) of [expr {$script}] is
# false, a fatal error is triggered. The error message, by default,
# includes the body of the failed assertion, but if $descr is set then
# includes the body of the failed assertion, but if $msg is set then
# that is used instead.
proc proj-assert {script {descr ""}} {
proc proj-assert {script {msg ""}} {
if {1 == [get-env proj-assert 0]} {
msg-result [proj-bold "asserting: $script"]
}
set x "expr \{ $script \}"
if {![uplevel 1 $x]} {
if {"" eq $descr} {
set descr $script
if {"" eq $msg} {
set msg $script
}
proj-fatal "Assertion failed: $descr"
proj-fatal "Assertion failed: $msg"
}
}
@ -111,6 +112,7 @@ proc proj-bold {str} {
# @proj-indented-notice ?-error? ?-notice? msg
#
# Takes a multi-line message and emits it with consistent indentation.
# It does not perform any line-wrapping of its own.
#
# If the -notice flag it used then it emits using [user-notice], which
# means its rendering will (A) go to stderr and (B) be delayed until
@ -162,33 +164,14 @@ proc proj-is-cross-compiling {} {
return [expr {[get-define host] ne [get-define build]}]
}
########################################################################
# proj-lshift_ shifts $count elements from the list named $listVar
# and returns them as a new list. On empty input, returns "".
#
# Modified slightly from: https://wiki.tcl-lang.org/page/lshift
proc proj-lshift_ {listVar {count 1}} {
upvar 1 $listVar l
if {![info exists l]} {
# make the error message show the real variable name
error "can't read \"$listVar\": no such variable"
}
if {![llength $l]} {
# error Empty
return ""
}
set r [lrange $l 0 [incr count -1]]
set l [lreplace $l [set l 0] $count]
return $r
}
########################################################################
# @proj-strip-hash-comments value
#
# Expects to receive string input, which it splits on newlines, strips
# out any lines which begin with any number of whitespace followed by
# a '#', and returns a value containing the [append]ed results of each
# remaining line with a \n between each.
# remaining line with a \n between each. It does not strip out
# comments which appear after the first non-whitespace character.
proc proj-strip-hash-comments {val} {
set x {}
foreach line [split $val \n] {
@ -223,8 +206,8 @@ proc proj-cflags-without-werror {{var CFLAGS}} {
#
# - Does not make any global changes to the LIBS define.
#
# - Strips out -W... warning flags from CFLAGS before running the
# test, as these feature tests will often fail if -Werror is used.
# - Strips out the -Werror flag from CFLAGS before running the test,
# as these feature tests will often fail if -Werror is used.
#
# Returns the result of cc-check-function-in-lib (i.e. true or false).
# The resulting linker flags are stored in the [define] named
@ -478,16 +461,16 @@ proc proj-opt-define-bool {args} {
set invert 0
if {[lindex $args 0] eq "-v"} {
set invert 1
set args [lrange $args 1 end]
lassign $args - optName defName descr
} else {
lassign $args optName defName descr
}
set optName [proj-lshift_ args]
set defName [proj-lshift_ args]
set descr [proj-lshift_ args]
if {"" eq $descr} {
set descr $defName
}
puts "optName=$optName defName=$defName descr=$descr"
set rc 0
msg-checking "$descr ... "
msg-checking "[join $descr] ... "
if {[proj-opt-truthy $optName]} {
if {0 eq $invert} {
set rc 1
@ -593,7 +576,7 @@ proc proj-file-content {args} {
set trim 1
lassign $args - fname
}
set fp [open $fname r]
set fp [open $fname rb]
set rc [read $fp]
close $fp
if {$trim} { return [string trim $rc] }
@ -606,7 +589,7 @@ proc proj-file-content {args} {
# Returns the contents of the given file as an array of lines, with
# the EOL stripped from each input line.
proc proj-file-content-list {fname} {
set fp [open $fname r]
set fp [open $fname rb]
set rc {}
while { [gets $fp line] >= 0 } {
lappend rc $line
@ -615,6 +598,31 @@ proc proj-file-content-list {fname} {
return $rc
}
########################################################################
# @proj-file-write ?-ro? fname content
#
# Works like autosetup's [writefile] but explicitly uses binary mode
# to avoid EOL translation on Windows. If $fname already exists, it is
# overwritten, even if it's flagged as read-only.
proc proj-file-write {args} {
if {"-ro" eq [lindex $args 0]} {
lassign $args ro fname content
} else {
set ro ""
lassign $args fname content
}
file delete -force -- $fname; # in case it's read-only
set f [open $fname wb]
puts -nonewline $f $content
close $f
if {"" ne $ro} {
catch {
exec chmod -w $fname
#file attributes -w $fname; #jimtcl has no 'attributes'
}
}
}
########################################################################
# @proj-check-compile-commands ?configFlag?
#
@ -681,12 +689,17 @@ proc proj-make-from-dot-in {args} {
}
foreach f $filename {
set f [string trim $f]
catch { exec chmod u+w $f }
if {[file exists $f]} {
catch { exec chmod u+w $f }
}
make-template $f.in $f
if {$touch} {
proj-touch $f
}
catch { exec chmod -w $f }
catch {
exec chmod -w $f
#file attributes -w $f; #jimtcl has no 'attributes'
}
}
}
@ -1365,3 +1378,63 @@ proc proj-env-file {flag {dflt ""}} {
proc proj-get-env {var {dflt ""}} {
return [get-env $var [proj-env-file $var $dflt]]
}
########################################################################
# @proj-current-proc-name
#
# Returns the name of the _calling_ proc from ($lvl + 1) levels up the
# call stack (where the caller's level will be 1 up from _this_
# call). It is not legal to call this from the top scope.
proc proj-current-proc-name {{lvl 0}} {
#uplevel [expr {$lvl + 1}] {lindex [info level 0] 0}
lindex [info level [expr {-$lvl - 1}]] 0
}
########################################################################
# Converts parts of tclConfig.sh to autosetup [define]s.
#
# Expects to be passed the name of a value tclConfig.sh or an empty
# string. It converts certain parts of that file's contents to
# [define]s (see the code for the whole list). If $tclConfigSh is an
# empty string then it [define]s the various vars as empty strings.
proc proj-tclConfig-sh-to-autosetup {tclConfigSh} {
set shBody {}
set tclVars {
TCL_INCLUDE_SPEC
TCL_LIB_SPEC
TCL_STUB_LIB_SPEC
TCL_EXEC_PREFIX
TCL_PREFIX
TCL_VERSION
}
# Build a small shell script which proxies the $tclVars from
# $tclConfigSh into autosetup code...
lappend shBody "if test x = \"x${tclConfigSh}\"; then"
foreach v $tclVars {
lappend shBody "$v= ;"
}
lappend shBody "else . \"${tclConfigSh}\"; fi"
foreach v $tclVars {
lappend shBody "echo define $v {\$$v} ;"
}
lappend shBody "exit"
set shBody [join $shBody "\n"]
#puts "shBody=$shBody\n"; exit
if {0} {
# This doesn't work but would be preferable to using a temp file...
set fd [open "| sh" "rw"]
#puts "fd = $fd"; exit
puts $fd $shBody
flush $fd
set rd [read $fd]
close $fd
puts "rd=$rd"; exit 1
eval $rd
} else {
set shName ".tclConfigSh.tcl"
proj-file-write $shName $shBody
eval [exec sh $shName $tclConfigSh]
file delete -force $shName
}
}

View File

@ -11,11 +11,13 @@ if {[string first " " $autosetup(builddir)] != -1} {
user-error "The pathname of the build directory\
may not contain space characters"
}
#parray ::autosetup; exit 0
use proj
# We want this version info to be emitted up front, but we have to
# 'use system' for --prefix=... to work. Ergo, this bit is up here
# instead of in [sqlite-configure].
#
# We want the package version info to be emitted early on, but doing
# so requires a bit of juggling. We have to [use system] for
# --prefix=... to work and to emit the Host/Build system info, but we
# don't want those to interfere with --help output.
define PACKAGE_VERSION [proj-file-content -trim $::autosetup(srcdir)/VERSION]
if {"--help" ni $::argv} {
msg-result "Configuring SQLite version [get-define PACKAGE_VERSION]"
@ -28,15 +30,23 @@ if {"--help" ni $::argv} {
}
#
# Object for communicating config-time state across various
# Object for communicating certain config-time state across various
# auto.def-related pieces.
#
array set sqliteConfig [proj-strip-hash-comments {
array set sqliteConfig [subst [proj-strip-hash-comments {
#
# Gets set by [sqlite-configure] (the main configure script driver).
build-mode unknown
#
# Gets set to 1 when using jimsh for code generation. May affect
# later decisions.
use-jim-for-codegen 0
#
# Set to 1 when cross-compiling This value may be changed by certain
# build options, so it's important that config code which checks for
# cross-compilation uses this var instead of
# [proj-is-cross-compiling].
is-cross-compiling [proj-is-cross-compiling]
#
# Pass msg-debug=1 to configure to enable obnoxiously loud output
# from [msg-debug].
msg-debug-enabled 0
@ -49,34 +59,31 @@ array set sqliteConfig [proj-strip-hash-comments {
# (dump-defines-txt) but also a JSON file named after this option's
# value.
dump-defines-json ""
}]
#
# Set to 1 when cross-compiling This value may be changed by certain
# build options, so it's important that config code which checks for
# cross-compilation uses this var instead of
# [proj-is-cross-compiling].
#
set sqliteConfig(is-cross-compiling) [proj-is-cross-compiling]
}]]
########################################################################
# Processes all configure --flags for this build, run build-specific
# config checks, then finalize the configure process. $buildMode must
# be either "canonical" or "autoconf", and others may be added in the
# be one of (canonical, autoconf), and others may be added in the
# future. After bootstrapping, $configScript is eval'd in the caller's
# scope, then post-configuration finalization is run. $configScript is
# intended to hold configure code which is specific to the given
# $buildMode, with the caveat that _some_ build-specific code is
# encapsulated in the configuration finalization step.
#
# The intent is that all build-mode-specific configuration goes inside
# the $configScript argument to this function, and that an auto.def file
# contains only two commands:
# The intent is that all (or almost all) build-mode-specific
# configuration goes inside the $configScript argument to this
# function, and that an auto.def file contains only two commands:
#
# use sqlite-config
# sqlite-configure BUILD_NAME { build-specific configure script }
#
# There are snippets of build-mode-specific decision-making in
# [sqlite-configure-finalize]
proc sqlite-configure {buildMode configScript} {
set allBuildModes {canonical autoconf}
proj-assert {$::sqliteConfig(build-mode) eq "unknown"} \
"sqlite-configure must not be called more than once"
set allBuildModes {canonical autoconf tcl-extension}
if {$buildMode ni $allBuildModes} {
user-error "Invalid build mode: $buildMode. Expecting one of: $allBuildModes"
}
@ -158,7 +165,7 @@ proc sqlite-configure {buildMode configScript} {
# Options for how to build the library
build-modes {
{*} {
{canonical autoconf} {
shared=1 => {Disable build of shared library}
static=1 => {Disable build of static library}
}
@ -172,12 +179,9 @@ proc sqlite-configure {buildMode configScript} {
{*} {
threadsafe=1 => {Disable mutexing}
with-tempstore:=no => {Use an in-RAM database for temporary tables: never,no,yes,always}
largefile=1
=> {This legacy flag has no effect on the library but may influence
the contents of the generated sqlite_cfg.h}
# ^^^ It's not clear that LFS support actually does anything,
# as HAVE_LFS is not checked anywhere in the .c/.h/.in files.
load-extension=1 => {Disable loading of external extensions}
# ^^^ one of the downstream custom builds overrides the load-extension default to 0, which
# confuses the --help text generator. https://github.com/msteveb/autosetup/issues/77
math=1 => {Disable math functions}
json=1 => {Disable JSON functions}
memsys5 => {Enable MEMSYS5}
@ -190,12 +194,22 @@ proc sqlite-configure {buildMode configScript} {
rtree => {Enable the RTREE extension}
session => {Enable the SESSION extension}
all => {Enable FTS4, FTS5, Geopoly, RTree, Sessions}
largefile=1
=> {This legacy flag has no effect on the library but may influence
the generated sqlite_cfg.h by adding #define HAVE_LFS}
}
}
# Options for TCL support
tcl {
{canonical} {
tcl=1
=> {Disable components which require TCL, including all tests.
This tree requires TCL for code generation but can use the in-tree
copy of autosetup/jimsh0.c for that. The SQLite TCL extension and the
test code require a canonical tclsh.}
}
{canonical tcl-extension} {
with-tcl:DIR
=> {Directory containing tclConfig.sh or a directory one level up from
that, from which we can derive a directory containing tclConfig.sh.
@ -206,17 +220,12 @@ proc sqlite-configure {buildMode configScript} {
tclConfig.sh and (B) all TCL-based code generation. Warning: if
its containing dir has multiple tclsh versions, it may select the
wrong tclConfig.sh!}
tcl=1
=> {Disable components which require TCL, including all tests.
This tree requires TCL for code generation but can use the in-tree
copy of autosetup/jimsh0.c for that. The SQLite TCL extension and the
test code require a canonical tclsh.}
}
}
# Options for line-editing modes for the CLI shell
line-editing {
{*} {
{canonical autoconf} {
readline=1
=> {Disable readline support}
# --with-readline-lib is a backwards-compatible alias for
@ -258,12 +267,12 @@ proc sqlite-configure {buildMode configScript} {
# Options for exotic/alternative build modes
alternative-builds {
{*} {
{canonical autoconf} {
with-wasi-sdk:=/opt/wasi-sdk
=> {Top-most dir of the wasi-sdk for a WASI build}
}
{canonical} {
{canonical} {
with-emsdk:=auto
=> {Top-most dir of the Emscripten SDK installation.
Needed only by ext/wasm. Default=EMSDK env var.}
@ -281,7 +290,7 @@ proc sqlite-configure {buildMode configScript} {
static-shell=1
=> {Link the sqlite3 shell app against the DLL instead of embedding sqlite3.c}
}
{*} {
{canonical autoconf} {
# A potential TODO without a current use case:
#rpath=1 => {Disable use of the rpath linker flag}
# soname: https://sqlite.org/src/forumpost/5a3b44f510df8ded
@ -302,9 +311,9 @@ proc sqlite-configure {buildMode configScript} {
# out-implib: https://sqlite.org/forum/forumpost/0c7fc097b2
out-implib:=auto
=> {Enable use of --out-implib linker flag to generate an
"import library" for the DLL. The output's base name name is
specified by the value, with "auto" meaning to figure out a
name automatically. On some platforms this flag gets
"import library" for the DLL. The output's base name is
specified by this flag's value, with "auto" meaning to figure
out a name automatically. On some platforms this flag gets
automatically enabled if it is not provided. Use "none" to
explicitly disable this feature on such platforms.}
}
@ -348,9 +357,31 @@ proc sqlite-configure {buildMode configScript} {
(for build debugging)}
}
}
}; # $allOpts
}; # $allFlags
# Filter allOpts to create the set of [options] legal for this build
set allFlags [proj-strip-hash-comments $allFlags]
# ^^^ lappend of [sqlite-custom-flags] introduces weirdness if
# we delay [proj-strip-hash-comments] until after that.
########################################################################
# sqlite-custom.tcl is intended only for vendor-branch-specific
# customization. See autosetup/README.md#branch-customization for
# details.
if {[file exists $::autosetup(libdir)/sqlite-custom.tcl]} {
uplevel 1 {source $::autosetup(libdir)/sqlite-custom.tcl}
}
if {[llength [info proc sqlite-custom-flags]] > 0} {
# sqlite-custom-flags is assumed to be imported via
# autosetup/sqlite-custom.tcl.
set scf [sqlite-custom-flags]
if {"" ne $scf} {
lappend allFlags sqlite-custom-flags $scf
}
}
# Filter allFlags to create the set of [options] legal for this build
set opts {}
foreach {group XY} [subst -nobackslashes -nocommands \
[proj-strip-hash-comments $allFlags]] {
@ -370,84 +401,16 @@ proc sqlite-configure {buildMode configScript} {
dict incr xopts -level
return {*}$xopts $msg
}
sqlite-post-options-init
sqlite-configure-phase1 $buildMode
uplevel 1 $configScript
sqlite-configure-finalize
}; # sqlite-configure
########################################################################
# Performs late-stage config steps common to all supported
# $::sqliteConfig(build-mode) values.
proc sqlite-configure-finalize {} {
set buildMode $::sqliteConfig(build-mode)
set isCanonical [expr {$buildMode eq "canonical"}]
set isAutoconf [expr {$buildMode eq "autoconf"}]
proj-assert {$isCanonical || $isAutoconf} "Unknown build mode: $buildMode"
define HAVE_LFS 0
if {[opt-bool largefile]} {
#
# Insofar as we can determine HAVE_LFS has no effect on the
# library. Perhaps it did back in the early 2000's. The
# --enable/disable-largefile flag is retained because it's
# harmless, but it doesn't do anything useful. It does have
# visible side-effects, though: the generated sqlite_cfg.h may (or
# may not) define HAVE_LFS.
#
cc-check-lfs
}
if {$isCanonical} {
if {![opt-bool static]} {
proj-indented-notice {
NOTICE: static lib build may be implicitly re-activated by
other components, e.g. some test apps.
}
}
} else {
proj-assert { $isAutoconf } "Invalid build mode"
proj-define-for-opt static-shell ENABLE_STATIC_SHELL \
"Link library statically into the CLI shell?"
if {![opt-bool shared] && ![opt-bool static-shell]} {
proj-opt-set shared 1
proj-indented-notice {
NOTICE: ignoring --disable-shared because --disable-static-shell
was specified.
}
}
}
proj-define-for-opt shared ENABLE_LIB_SHARED "Build shared library?"
proj-define-for-opt static ENABLE_LIB_STATIC "Build static library?"
sqlite-handle-debug
sqlite-handle-rpath
sqlite-handle-soname
sqlite-handle-threadsafe
sqlite-handle-tempstore
sqlite-handle-line-editing
sqlite-handle-load-extension
sqlite-handle-math
sqlite-handle-icu
sqlite-handle-env-quirks
sqlite-handle-common-feature-flags
sqlite-finalize-feature-flags
########################################################################
# When cross-compiling, we have to avoid using the -s flag to
# /usr/bin/install:
# https://sqlite.org/forum/forumpost/9a67df63eda9925c
define IS_CROSS_COMPILING $::sqliteConfig(is-cross-compiling)
sqlite-process-dot-in-files
sqlite-post-config-validation
sqlite-dump-defines
}; # sqlite-configure-finalize
########################################################################
# Runs some common initialization which must happen immediately after
# autosetup's [options] function is called. This is also a convenient
# place to put some generic pieces common to both the canonical
# top-level build and the "autoconf" build, but it's not intended to
# be a catch-all dumping ground for such.
proc sqlite-post-options-init {} {
# Runs "phase 1" of the configure process: after initial --flags
# handling but before the build-specific parts are run. $buildMode
# must be the mode which was passed to [sqlite-configure].
proc sqlite-configure-phase1 {buildMode} {
define PACKAGE_NAME sqlite
define PACKAGE_URL {https://sqlite.org}
define PACKAGE_BUGREPORT [get-define PACKAGE_URL]/forum
@ -460,6 +423,8 @@ proc sqlite-post-options-init {} {
with-readline-lib => with-readline-ldflags
with-debug => debug
}
set ::sqliteConfig(msg-debug-enabled) [proj-val-truthy [get-env msg-debug 0]]
proc-debug "msg-debug is enabled"
sqlite-autoreconfig
proj-file-extensions
if {".exe" eq [get-define TARGET_EXEEXT]} {
@ -469,8 +434,53 @@ proc sqlite-post-options-init {} {
define SQLITE_OS_UNIX 1
define SQLITE_OS_WIN 0
}
set ::sqliteConfig(msg-debug-enabled) [proj-val-truthy [get-env msg-debug 0]]
sqlite-setup-default-cflags
sqlite-handle-debug
define HAVE_LFS 0
if {[opt-bool largefile]} {
#
# Insofar as we can determine HAVE_LFS has no effect on the
# library. Perhaps it did back in the early 2000's. The
# --enable/disable-largefile flag is retained because it's
# harmless, but it doesn't do anything useful. It does have
# visible side-effects, though: the generated sqlite_cfg.h may (or
# may not) define HAVE_LFS.
cc-check-lfs
}
}; # sqlite-configure-phase1
########################################################################
# Performs late-stage config steps common to all supported
# $::sqliteConfig(build-mode) values.
proc sqlite-configure-finalize {} {
sqlite-handle-rpath
sqlite-handle-soname
sqlite-handle-threadsafe
sqlite-handle-tempstore
sqlite-handle-load-extension
sqlite-handle-math
sqlite-handle-icu
if {[proj-opt-exists readline]} {
sqlite-handle-line-editing
}
if {[proj-opt-exists shared]} {
proj-define-for-opt shared ENABLE_LIB_SHARED "Build shared library?"
}
if {[proj-opt-exists static]} {
if {![proj-define-for-opt static ENABLE_LIB_STATIC "Build static library?"]} {
# This notice really only applies to the canonical build...
proj-indented-notice {
NOTICE: static lib build may be implicitly re-activated by
other components, e.g. some test apps.
}
}
}
sqlite-handle-env-quirks
sqlite-handle-common-feature-flags
sqlite-finalize-feature-flags
sqlite-process-dot-in-files; # do not [define] anything after this
sqlite-post-config-validation
sqlite-dump-defines
}
########################################################################
@ -481,6 +491,13 @@ proc msg-debug {msg} {
puts stderr [proj-bold "** DEBUG: $msg"]
}
}
########################################################################
# A [msg-debug] proxy which prepends the name of the current proc to
# the debug message. It is not legal to call this from the global
# scope.
proc proc-debug {msg} {
msg-debug "\[[proj-current-proc-name 1]\]: $msg"
}
########################################################################
# Sets up the SQLITE_AUTORECONFIG define.
@ -561,6 +578,10 @@ proc sqlite-check-common-bins {} {
########################################################################
# Run checks for system-level includes and libs which are common to
# both the canonical build and the "autoconf" bundle.
#
# For the canonical build this must come after
# [sqlite-handle-wasi-sdk], as that function may change the
# environment in ways which affect this.
proc sqlite-check-common-system-deps {} {
# Check for needed/wanted data types
cc-with {-includes stdint.h} \
@ -671,7 +692,7 @@ proc sqlite-setup-default-cflags {} {
}
########################################################################
# Handle various SQLITE_ENABLE_... feature flags.
# Handle various SQLITE_ENABLE/OMIT_... feature flags.
proc sqlite-handle-common-feature-flags {} {
msg-result "Feature flags..."
foreach {boolFlag featureFlag ifSetEvalThis} {
@ -731,7 +752,6 @@ proc sqlite-handle-common-feature-flags {} {
msg-result " - $boolFlag"
}
}
}
#########################################################################
@ -755,13 +775,12 @@ proc sqlite-finalize-feature-flags {} {
}
########################################################################
# Checks for the --debug flag, defining SQLITE_DEBUG to 1 if it is
# true. TARGET_DEBUG gets defined either way, with content depending
# on whether --debug is true or false.
# Checks for the --debug flag and [define]s TARGET_DEBUG based on
# that. TARGET_DEBUG is unused in the autoconf build but that is
# arguably a bug.
proc sqlite-handle-debug {} {
msg-checking "SQLITE_DEBUG build? "
proj-if-opt-truthy debug {
define SQLITE_DEBUG 1
define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall}
proj-opt-set memsys5
msg-result yes
@ -797,7 +816,7 @@ proc sqlite-handle-soname {} {
}
}
}
msg-debug "soname=$soname"
proc-debug "soname=$soname"
if {[proj-check-soname $soname]} {
define LDFLAGS_LIBSQLITE3_SONAME [get-define LDFLAGS_SONAME_PREFIX]$soname
msg-result "Setting SONAME using: [get-define LDFLAGS_LIBSQLITE3_SONAME]"
@ -928,6 +947,11 @@ proc sqlite-handle-emsdk {} {
########################################################################
# Internal helper for [sqlite-check-line-editing]. Returns a list of
# potential locations under which readline.h might be found.
#
# On some environments this function may perform extra work to help
# sqlite-check-line-editing figure out how to find libreadline and
# friends. It will communicate those results via means other than the
# result value, e.g. by modifying configure --flags.
proc sqlite-get-readline-dir-list {} {
# Historical note: the dirs list, except for the inclusion of
# $prefix and some platform-specific dirs, originates from the
@ -944,13 +968,24 @@ proc sqlite-get-readline-dir-list {} {
*-mingw64 {
lappend dirs /mingw64 /mingw
}
*-haiku {
lappend dirs /boot/system/develop/headers
if {[opt-val with-readline-ldflags] in {auto ""}} {
# If the user did not supply their own --with-readline-ldflags
# value, hijack that flag to inject options which are known to
# work on a default Haiku installation.
if {"" ne [glob -nocomplain /boot/system/lib/libreadline*]} {
proj-opt-set with-readline-ldflags {-L/boot/system/lib -lreadline}
}
}
}
}
lappend dirs /usr /usr/local /usr/local/readline /usr/contrib
set rv {}
foreach d $dirs {
if {[file isdir $d]} {lappend rv $d}
}
#msg-debug "sqlite-get-readline-dir-list dirs=$rv"
#proc-debug "dirs=$rv"
return $rv
}
@ -1091,7 +1126,9 @@ proc sqlite-check-line-editing {} {
proj-warn "Skipping check for readline.h because we're cross-compiling."
} else {
set dirs [sqlite-get-readline-dir-list]
set subdirs "include/$editLibName"
set subdirs [list \
include/$editLibName \
readline]
if {"editline" eq $editLibName} {
lappend subdirs include/readline
# ^^^ editline, on some systems, does not have its own header,
@ -1099,7 +1136,8 @@ proc sqlite-check-line-editing {} {
}
lappend subdirs include
set rlInc [proj-search-for-header-dir readline.h \
-dirs $dirs -subdirs $subdirs]
-dirs $dirs -subdirs $subdirs]
#proc-debug "rlInc=$rlInc"
if {"" ne $rlInc} {
if {[string match */readline $rlInc]} {
set rlInc [file dirname $rlInc]; # CLI shell: #include <readline/readline.h>
@ -1124,7 +1162,8 @@ proc sqlite-check-line-editing {} {
set rlLib ""
if {"" ne $rlInc} {
set rlLib [opt-val with-readline-ldflags]
if {$rlLib eq "auto" || $rlLib eq ""} {
#proc-debug "rlLib=$rlLib"
if {$rlLib in {auto ""}} {
set rlLib ""
set libTerm ""
if {[proj-check-function-in-lib tgetent "$editLibName ncurses curses termcap"]} {
@ -1192,9 +1231,10 @@ proc sqlite-check-line-editing {} {
}; # sqlite-check-line-editing
########################################################################
# Runs sqlite-check-line-editing and adds a message around it In the
# Runs sqlite-check-line-editing and adds a message around it. In the
# canonical build this must not be called before
# sqlite-determine-codegen-tcl.
# sqlite-determine-codegen-tcl for reasons now lost to history (and
# might not still be applicable).
proc sqlite-handle-line-editing {} {
msg-result "Line-editing support for the sqlite3 shell: [sqlite-check-line-editing]"
}
@ -1234,7 +1274,7 @@ proc sqlite-handle-icu {} {
msg-result "Checking for ICU support..."
set icuConfigBin [opt-val with-icu-config]
set tryIcuConfigBin 1; # set to 0 if we end up using pkg-config
if {"auto" eq $icuConfigBin || "pkg-config" eq $icuConfigBin} {
if {$icuConfigBin in {auto pkg-config}} {
if {[pkg-config-init 0] && [pkg-config icu-io]} {
# Maintenance reminder: historical docs say to use both of
# (icu-io, icu-uc). icu-uc lacks a required lib and icu-io has
@ -1344,7 +1384,7 @@ proc sqlite-handle-load-extension {} {
if {$found} {
msg-result "Loadable extension support enabled."
} else {
msg-result "Disabling loadable extension support. Use --enable-load-extensions to enable them."
msg-result "Disabling loadable extension support. Use --enable-load-extension to enable them."
sqlite-add-feature-flag {-DSQLITE_OMIT_LOAD_EXTENSION=1}
}
return $found
@ -1360,7 +1400,7 @@ proc sqlite-handle-math {} {
define LDFLAGS_MATH [get-define lib_ceil]
undefine lib_ceil
sqlite-add-feature-flag {-DSQLITE_ENABLE_MATH_FUNCTIONS}
msg-result "Enabling math SQL functions [get-define LDFLAGS_MATH]"
msg-result "Enabling math SQL functions"
} {
define LDFLAGS_MATH ""
msg-result "Disabling math SQL functions"
@ -1570,6 +1610,11 @@ proc sqlite-handle-env-quirks {} {
sqlite-handle-dll-basename
sqlite-handle-out-implib
sqlite-handle-mac-cversion
if {[llength [info proc sqlite-custom-handle-flags]] > 0} {
# sqlite-custom-handle-flags is assumed to be imported via a
# client-specific import: autosetup/sqlite-custom.tcl.
sqlite-custom-handle-flags
}
}
########################################################################
@ -1587,7 +1632,15 @@ proc sqlite-process-dot-in-files {} {
# (e.g. [proj-check-rpath]) may do so before we "mangle" them here.
proj-remap-autoconf-dir-vars
proj-make-from-dot-in -touch Makefile sqlite3.pc
set srcdir $::autosetup(srcdir)/
foreach f {Makefile sqlite3.pc} {
if {[file exists $srcdir/$f.in]} {
# ^^^ we do this only so that this block can be made to work for
# multiple builds. e.g. the tea build (under construction) does
# not hae sqlite3.pc.in.
proj-make-from-dot-in -touch $f
}
}
make-config-header sqlite_cfg.h \
-bare {SIZEOF_* HAVE_DECL_*} \
-none {HAVE_CFLAG_* LDFLAGS_* SH_* SQLITE_AUTORECONFIG
@ -1657,7 +1710,7 @@ proc sqlite-handle-wasi-sdk {} {
threadsafe
} {
if {[proj-opt-exists $opt] && [opt-bool $opt]} {
# -^^^^ distinguish between canonical and autoconf builds
# -^^^^ not all builds define all of these flags
msg-result " --disable-$opt"
proj-opt-set $opt 0
}
@ -1734,12 +1787,10 @@ proc sqlite-check-tcl {} {
define TCLLIBDIR "" ; # Installation dir for TCL extension lib
define TCL_CONFIG_SH ""; # full path to tclConfig.sh
# Clear out all vars which would be set by tclConfigToAutoDef.sh, so
# that the late-config validation of @VARS@ works even if
# --disable-tcl is used.
foreach k {TCL_INCLUDE_SPEC TCL_LIB_SPEC TCL_STUB_LIB_SPEC TCL_EXEC_PREFIX TCL_VERSION} {
define $k ""
}
# Clear out all vars which would harvest from tclConfig.sh so that
# the late-config validation of @VARS@ works even if --disable-tcl
# is used.
proj-tclConfig-sh-to-autosetup ""
file delete -force ".tclenv.sh"; # ensure no stale state from previous configures.
if {![opt-bool tcl]} {
@ -1760,14 +1811,14 @@ proc sqlite-check-tcl {} {
if {"prefix" eq $with_tcl} {
set with_tcl [get-define prefix]
}
msg-debug "sqlite-check-tcl: use_tcl ${use_tcl}"
msg-debug "sqlite-check-tcl: with_tclsh=${with_tclsh}"
msg-debug "sqlite-check-tcl: with_tcl=$with_tcl"
proc-debug "use_tcl ${use_tcl}"
proc-debug "with_tclsh=${with_tclsh}"
proc-debug "with_tcl=$with_tcl"
if {"" eq $with_tclsh && "" eq $with_tcl} {
# If neither --with-tclsh nor --with-tcl are provided, try to find
# a workable tclsh.
set with_tclsh [proj-first-bin-of tclsh9.0 tclsh8.6 tclsh]
msg-debug "sqlite-check-tcl: with_tclsh=${with_tclsh}"
set with_tclsh [proj-first-bin-of tclsh9.1 tclsh9.0 tclsh8.6 tclsh]
proc-debug "with_tclsh=${with_tclsh}"
}
set doConfigLookup 1 ; # set to 0 to test the tclConfig.sh-not-found cases
@ -1781,7 +1832,7 @@ proc sqlite-check-tcl {} {
#msg-result "Using tclsh: $with_tclsh"
}
if {$doConfigLookup &&
[catch {exec $with_tclsh $srcdir/tool/find_tclconfig.tcl} result] == 0} {
[catch {exec $with_tclsh $::autosetup(libdir)/find_tclconfig.tcl} result] == 0} {
set with_tcl $result
}
if {"" ne $with_tcl && [file isdir $with_tcl]} {
@ -1792,7 +1843,7 @@ proc sqlite-check-tcl {} {
}
}
set cfg ""
set tclSubdirs {tcl9.0 tcl8.6 lib}
set tclSubdirs {tcl9.1 tcl9.0 tcl8.6 lib}
while {$use_tcl} {
if {"" ne $with_tcl} {
# Ensure that we can find tclConfig.sh under ${with_tcl}/...
@ -1838,9 +1889,7 @@ proc sqlite-check-tcl {} {
# Export a subset of tclConfig.sh to the current TCL-space. If $cfg
# is an empty string, this emits empty-string entries for the
# various options we're interested in.
eval [exec sh "$srcdir/tool/tclConfigShToAutoDef.sh" "$cfg"]
# ---------^^ a Windows/msys workaround, without which it cannot
# exec a .sh file: https://sqlite.org/forum/forumpost/befb352a42a7cd6d
proj-tclConfig-sh-to-autosetup $cfg
if {"" eq $with_tclsh && $cfg ne ""} {
# We have tclConfig.sh but no tclsh. Attempt to locate a tclsh
@ -2009,10 +2058,14 @@ proc sqlite-determine-codegen-tcl {} {
}; # sqlite-determine-codegen-tcl
########################################################################
# Runs sqlite-check-tcl and sqlite-determine-codegen-tcl.
proc sqlite-handle-tcl {} {
# Runs sqlite-check-tcl and, if $alsoCheckCodeGen is true,
# sqlite-determine-codegen-tcl (intended only for the canonical
# build).
proc sqlite-handle-tcl {{alsoCheckCodeGen 1}} {
sqlite-check-tcl
msg-result "TCL for code generation: [sqlite-determine-codegen-tcl]"
if {$alsoCheckCodeGen} {
msg-result "TCL for code generation: [sqlite-determine-codegen-tcl]"
}
}
########################################################################

View File

@ -115,6 +115,7 @@ SQLITE_EXTENSION_INIT1
#include <assert.h>
#include <string.h>
#include <limits.h>
#include <math.h>
#ifndef SQLITE_OMIT_VIRTUALTABLE
/*
@ -480,25 +481,52 @@ static int seriesFilter(
** constraints on the "value" column.
*/
if( idxNum & 0x0080 ){
iMin = iMax = sqlite3_value_int64(argv[i++]);
if( sqlite3_value_numeric_type(argv[i])==SQLITE_FLOAT ){
double r = sqlite3_value_double(argv[i++]);
if( r==ceil(r) ){
iMin = iMax = (sqlite3_int64)r;
}else{
returnNoRows = 1;
}
}else{
iMin = iMax = sqlite3_value_int64(argv[i++]);
}
}else{
if( idxNum & 0x0300 ){
iMin = sqlite3_value_int64(argv[i++]);
if( idxNum & 0x0200 ){
if( iMin==LARGEST_INT64 ){
returnNoRows = 1;
if( sqlite3_value_numeric_type(argv[i])==SQLITE_FLOAT ){
double r = sqlite3_value_double(argv[i++]);
if( idxNum & 0x0200 && r==ceil(r) ){
iMin = (sqlite3_int64)ceil(r+1.0);
}else{
iMin++;
iMin = (sqlite3_int64)ceil(r);
}
}else{
iMin = sqlite3_value_int64(argv[i++]);
if( idxNum & 0x0200 ){
if( iMin==LARGEST_INT64 ){
returnNoRows = 1;
}else{
iMin++;
}
}
}
}
if( idxNum & 0x3000 ){
iMax = sqlite3_value_int64(argv[i++]);
if( idxNum & 0x2000 ){
if( iMax==SMALLEST_INT64 ){
returnNoRows = 1;
if( sqlite3_value_numeric_type(argv[i])==SQLITE_FLOAT ){
double r = sqlite3_value_double(argv[i++]);
if( (idxNum & 0x2000)!=0 && r==floor(r) ){
iMax = (sqlite3_int64)(r-1.0);
}else{
iMax--;
iMax = (sqlite3_int64)floor(r);
}
}else{
iMax = sqlite3_value_int64(argv[i++]);
if( idxNum & 0x2000 ){
if( iMax==SMALLEST_INT64 ){
returnNoRows = 1;
}else{
iMax--;
}
}
}
}

View File

@ -684,6 +684,122 @@ do_test $tn.14.4 {
list [catch {sqlite3session_config invalid 123} msg] $msg
} {1 SQLITE_MISUSE}
#-------------------------------------------------------------------------
reset_db
do_execsql_test $tn.15.0 {
CREATE TABLE records(
idx INTEGER PRIMARY KEY AUTOINCREMENT,
tbl TEXT NOT NULL,
pk TEXT NOT NULL,
value TEXT,
UNIQUE(tbl, pk)
);
CREATE TABLE changes(
idx INTEGER PRIMARY KEY AUTOINCREMENT,
tbl TEXT NOT NULL,
pk TEXT NOT NULL,
op TEXT DEFAULT ('='),
path TEXT DEFAULT ('$'),
value TEXT,
UNIQUE(tbl, pk)
);
CREATE TRIGGER changes_after_insert
AFTER INSERT ON changes
FOR EACH ROW
BEGIN
INSERT INTO records(tbl, pk, value)
VALUES (NEW.tbl, NEW.pk, NEW.value)
ON CONFLICT(tbl, pk) DO UPDATE SET value = NEW.value;
END;
CREATE VIEW data_view AS
SELECT *, '=' AS op, '$' AS path FROM records
WHERE tbl = 'data';
CREATE TRIGGER data_insert
INSTEAD OF INSERT ON data_view
BEGIN
INSERT INTO changes(tbl, pk, op, path, value)
VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
END;
CREATE TRIGGER data_update
INSTEAD OF UPDATE ON data_view
BEGIN
INSERT INTO changes(tbl, pk, op, path, value)
VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
END;
CREATE TRIGGER data_delete
INSTEAD OF DELETE ON data_view
BEGIN
INSERT INTO changes(tbl, pk, op, path, value)
VALUES (NEW.tbl, NEW.pk, NEW.op, NEW.path, NEW.value);
END;
}
do_test $tn.15.1 {
set C [changeset_from_sql {
INSERT INTO data_view (tbl, pk, value) VALUES
('data', '1', 'First'),
('data', '2', 'Second');
}]
changeset_to_list $C
} [list \
{INSERT changes 1 X..... {} {i 1 t data t 1 n {} n {} t First}} \
{INSERT changes 1 X..... {} {i 2 t data t 2 n {} n {} t Second}} \
{INSERT records 1 X... {} {i 1 t data t 1 t First}} \
{INSERT records 1 X... {} {i 2 t data t 2 t Second}} \
]
forcedelete test.db2
sqlite3 db2 test.db2
do_test $tn.15.2 {
db2 eval {
CREATE TABLE records(
idx INTEGER PRIMARY KEY AUTOINCREMENT,
tbl TEXT NOT NULL,
pk TEXT NOT NULL,
value TEXT,
UNIQUE(tbl, pk)
);
CREATE TABLE changes(
idx INTEGER PRIMARY KEY AUTOINCREMENT,
tbl TEXT NOT NULL,
pk TEXT NOT NULL,
op TEXT DEFAULT ('='),
path TEXT DEFAULT ('$'),
value TEXT,
UNIQUE(tbl, pk)
);
CREATE TRIGGER changes_after_insert
AFTER INSERT ON changes
FOR EACH ROW
BEGIN
INSERT INTO records(tbl, pk, value)
VALUES (NEW.tbl, NEW.pk, NEW.value)
ON CONFLICT(tbl, pk) DO UPDATE SET value = NEW.value;
END;
}
sqlite3changeset_apply db2 $C ""
db2 eval {
SELECT * FROM records;
}
} [list 1 data 1 First 2 data 2 Second]
do_test $tn.15.3 {
db2 eval {
SELECT * FROM changes;
}
} {1 data 1 {} {} First 2 data 2 {} {} Second}
}]
}

View File

@ -187,6 +187,9 @@ CFLAGS.readline ?= -I$(prefix)/include
# during installation, which may break the build of targets which are
# built after others are installed.
#
# Maintenance reminder: we specifically do not strip binaries, as
# discussed in https://sqlite.org/forum/forumpost/9a67df63eda9925c.
#
INSTALL ?= install
#
# $(ENABLE_LIB_SHARED) =

View File

@ -1,9 +1,10 @@
C Correct\spart\sof\s[505d9e49f7]\sand\s[7126a51ed8]\sto\sget\ssessioninvert\stests\sworking\son\scygwin.
D 2025-03-19T15:21:21.407
C Merge\strunk\sinto\scygwin-fixes\sbranch.\sAdd\s.fossil-settings/binary-glob\sto\ssquelch\swarnings\sabout\s*.db\sfiles\son\sCygwin.
D 2025-03-26T00:02:15.069
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F Makefile.in 2c4d3c20e42ddd7596432c8d45feeaf709f93b37279e274ea413034912a4f840
F Makefile.in 86cc5297495fd5ce632cd7ec298c562900f874eef42c44d5890bd22397bb3820
F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0
F Makefile.msc bb2cc6f75bbcb2d690fbdd1489914a2febd5e99bad9c77538cb3330d304694c6
F README.md a953c0cffd6e4f2501a306c00ee2b6e1e6630c25031e094629307fe99dd003d1
@ -14,13 +15,13 @@ F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
F art/sqlite370.svg 40b7e2fe8aac3add5d56dd86ab8d427a4eca5bcb3fe4f8946cb3794e1821d531
F auto.def 23f0e7eb5eff4cf922963e667ed630793ed60300df59ef9d93c87a23e31c7232
F auto.def f769bf3111089ee9471a2a872c47651c4e29e81d104a52867ab544fde5ef6bad
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
F autoconf/Makefile.in b499f790938d5334a5e22fa9a91af603661e714dea40cd5fb60d03f500b3ae4f
F autoconf/Makefile.in 1fe497c0df20102f7824ec8a3423cc13c26505655456ecd06a7a8ab02f606586
F autoconf/Makefile.msc 5bc67d3912444c40c6f96d003e5c90663e51abb83d204a520110b1b2038dcd8b
F autoconf/README.first f1d3876e9a7852c22f275a6f06814e64934cecbc0b5b9617d64849094c1fd136
F autoconf/README.txt 1a32296d8bbdd67110c79d224c92c05545a0b5bd0c272950025fe3c7c7b49580
F autoconf/auto.def 42d239bda4feffe1cf8a431dae35f83d100f2c17ed4b189edeb12f067bd4fa90
F autoconf/auto.def 4cb3c39042039bb852034dc1a9d42717d42eef759a687a664ad283db8e6b816e
F autoconf/tea/Makefile.in ba0556fee8da09c066bad85a4457904e46ee2c2eabaa309c0e83a78f2f151a8e
F autoconf/tea/README.txt 6c396709b45eb2b3be0ae6dc7e40a140d231962e3a2354da6c4dd48b1d9999bc
F autoconf/tea/aclocal.m4 52c47aac44ce0ddb1f918b6993e8beb8eee88f43
@ -37,7 +38,7 @@ F autoconf/tea/win/rules.vc 94a18c3e453535459b4a643983acca52fb8756e79055bd2ad4b0
F autoconf/tea/win/targets.vc 96a25a1fa6e9e9cfb348fd3760a5395b4ce8acafc8ed10f0412937ec200d5dbd
F autosetup/LICENSE 41a26aebdd2cd185d1e2b210f71b7ce234496979f6b35aef2cbf6b80cbed4ce4
F autosetup/README.autosetup a78ff8c4a3d2636a4268736672a74bf14a82f42687fcf0631a70c516075c031e
F autosetup/README.md f98cc827a162a1da4877e9656d749d414ba3f408d457d30e029afc66590c00c3
F autosetup/README.md f324bb9f9bf1cc787122034df53fbfdfed28ee2657e6652b763d992ab0d04829
F autosetup/autosetup 74a9782b68d07934510190fbd03fc6ad92e63f0ea3b5cbffa5f0bd271ad60f01 x
F autosetup/autosetup-config.guess dfa101c5e8220e864d5e9c72a85e87110df60260d36cb951ad0a85d6d9eaa463 x
F autosetup/autosetup-config.sub a38fb074d0dece01cf919e9fb534a26011608aa8fa606490864295328526cd73 x
@ -47,10 +48,11 @@ F autosetup/cc-db.tcl 6e0ed90146197a5a05b245e649975c07c548e30926b218ca3e1d4dc034
F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795facf7360
F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78
F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f
F autosetup/find_tclconfig.tcl e64886ffe3b982d4df42cd28ed91fe0b5940c2c5785e126c1821baf61bc86a7e w tool/find_tclconfig.tcl
F autosetup/jimsh0.c a57c16e65dcffc9c76e496757cb3f7fb47e01ecbd1631a0a5e01751fc856f049
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
F autosetup/proj.tcl bdf0489d4ce8110fc1d4a09b1e2e274e50dd51711637b55c7c63a6a7ecec2aa5
F autosetup/sqlite-config.tcl a2eb8234de355233787ad7bc926d8a622ef9f97594749374c4360b63c37fc223
F autosetup/proj.tcl 8bf99398c20a440d197182f85aaa60a41f07248af779fea68c41df30e6da8546
F autosetup/sqlite-config.tcl 85490e59fb374cf091765308eae96bb96cc85169af46d78e034f3766bdbd0523
F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9
F configure 9a00b21dfd13757bbfb8d89b30660a89ec1f8f3a79402b8f9f9b6fc475c3303a x
F contrib/sqlitecon.tcl eb4c6578e08dd353263958da0dc620f8400b869a50d06e271ab0be85a51a08d3
@ -436,7 +438,7 @@ F ext/misc/regexp.c 388e7f237307c7dfbfb8dde44e097946f6c437801d63f0d7ad63f3320d4e
F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c
F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c
F ext/misc/scrub.c 2a44b0d44c69584c0580ad2553f6290a307a49df4668941d2812135bfb96a946
F ext/misc/series.c 076a4c85dde2ae543d040f1080cdab74ebf3da7f3febfe38e0cd45a2217498bf
F ext/misc/series.c 0c285a21821e71b473e701cb52f6cbd708f76aa1adeb30644909a718ba4f0ba5
F ext/misc/sha1.c cb5002148c2661b5946f34561701e9105e9d339b713ec8ac057fd888b196dcb9
F ext/misc/shathree.c fd22d70620f86a0467acfdd3acd8435d5cb54eb1e2d9ff36ae44e389826993df
F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52
@ -576,7 +578,7 @@ F ext/rtree/visual01.txt e9c2564083bcd30ec51b07f881bffbf0e12b50a3f6fced0c222c5c1
F ext/session/changeset.c 7a1e6a14c7e92d36ca177e92e88b5281acd709f3b726298dc34ec0fb58869cb5
F ext/session/changesetfuzz.c 227076ab0ae4447d742c01ee88a564da6478bbf26b65108bf8fac9cd8b0b24aa
F ext/session/changesetfuzz1.test 15b629004e58d5ffcc852e6842a603775bb64b1ce51254831f3d12b113b616cd
F ext/session/session1.test cc7e58976c2cc6263fb7ef0c5125a98eafc2f213c75929f986768d2dbc224725
F ext/session/session1.test 57cb77a816af7760bf4e321d315603ab517e46abd853e75620cfb07eb409c6f8
F ext/session/session2.test ee83bb973b9ce17ccce4db931cdcdae65eb40bbb22089b2fe6aa4f6be3b9303f
F ext/session/session3.test 2cc1629cfb880243aec1a7251145e07b78411d851b39b2aa1390704550db8e6a
F ext/session/session4.test 823f6f018fcbb8dacf61e2960f8b3b848d492b094f8b495eae1d9407d9ab7219
@ -707,7 +709,7 @@ F ext/wasm/tests/opfs/sahpool/sahpool-pausing.js f264925cfc82155de38cecb3d204c36
F ext/wasm/tests/opfs/sahpool/sahpool-worker.js bd25a43fc2ab2d1bafd8f2854ad3943ef673f7c3be03e95ecf1612ff6e8e2a61
F ext/wasm/wasmfs.make 68999f5bd8c489239592d59a420f8c627c99169bbd6fa16a404751f757b9f702
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
F main.mk 7006135b902177f7c8bca2733a6820b72a0c6f5a47412b2a7c86668f0398f1fd
F main.mk a8930b3338afa3065f89735c6e5f9a9d64d90bd3154fe4580696502a7c2a99ad
F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@ -731,7 +733,7 @@ F src/build.c 3fe9b9d0f411cc2139a2d5ffa1c9b555417f89332f4dbf7f8e311c2e69e40c81
F src/callback.c acae8c8dddda41ee85cfdf19b926eefe830f371069f8aadca3aa39adf5b1c859
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
F src/date.c 9db4d604e699a73e10b8e85a44db074a1f04c0591a77e2abfd77703f50dce1e9
F src/dbpage.c 2e677acb658a29965e55398bbc61161cb7819da538057c8032adac7ab8e4a8c0
F src/dbpage.c fcb1aafe00872a8aff9a7aa0ef7ff1b01e5817ec7bbd521f8f3e1e674ac8d609
F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
F src/expr.c 61c3baab38f1b50eb4696e1f37c8f7ae1d1ecbfc1a35d446cfd1886624784131
@ -784,7 +786,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c
F src/resolve.c 20e1fbe8f840ffc0cd835e33f68a802a22e34faa918d7a269f3de242fda02f99
F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
F src/select.c bfe14cdfceba54744b1c6c29099313f5173a0793dfaff0cd484774e9d05dbeab
F src/shell.c.in 248050551cad788f8bb4b4728e00d8e36a10130d2d101e55cd51cfee03df91ff
F src/shell.c.in 9d1b46e09c1b933b0c7afaf4ae27030dc356ee19ae4f95ce8bf3647035b9635b
F src/sqlite.h.in fd70afd92948cf7cc93f687ac960bad1b0b6fbc436752419eff2fd65a1809380
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54
@ -864,7 +866,7 @@ F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf8
F src/vdbevtab.c fc46b9cbd759dc013f0b3724549cc0d71379183c667df3a5988f7e2f1bd485f3
F src/vtab.c 828221bdbeaaa6d62126ee6d07fd4ec0d09dcaea846f87ad01944d8b7e548859
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
F src/wal.c 554a6b1afaaecb98cb47bb598bccf1374c9d3b624e5c4c3c4eb2ad364cc579f8
F src/wal.c bcf40795a09b699ad7e42624dd6282b13335164fbabcd5a98a717758cebef451
F src/wal.h ba252daaa94f889f4b2c17c027e823d9be47ce39da1d3799886bbd51f0490452
F src/walker.c d5006d6b005e4ea7302ad390957a8d41ed83faa177e412f89bc5600a7462a014
F src/where.c e80177e452b4e436abc6ece0cb0249631000434f2a7425cc1df709015fce74ad
@ -1288,7 +1290,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
F test/fuzzdata6.db b8725a5f5cf7a3b7241a9038e57ca7e7cc8c3f4d86b44bd770617bda245ab2b0
F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2
F test/fuzzdata8.db c6f9cb7d2b808fb10894afe53ef00f51e73e43baa7aabdba7e9af4713fc5b186
F test/fuzzdata8.db 8f34ae00d8d5d4747dd80983cf46161065e4f78324dcff3c893506ff8db3a4a6
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc
@ -1719,7 +1721,7 @@ F test/sync.test a619e407ede58a7b6e3e44375328628559fc9695a9c24c47cb5690a866b0031
F test/sync2.test 06152269ed73128782c450c355988fe8dd794d305833af75e1a5e79edd4dae47
F test/syscall.test a067468b43b8cb2305e9f9fe414e5f40c875bb5d2cba5f00b8154396e95fcf37
F test/sysfault.test c9f2b0d8d677558f74de750c75e12a5454719d04
F test/tabfunc01.test 76da0509b01b9d12f4e71f8af28ee702d38166a5306bd77a955fb1a370dcd8b5
F test/tabfunc01.test e85679a3800aa632dee787966b8482fce0bd47629dad82f102fd52f319d2c281
F test/table.test 7862a00b58b5541511a26757ea9c5c7c3f8298766e98aa099deec703d9c0a8e0
F test/tableapi.test e37c33e6be2276e3a96bb54b00eea7f321277115d10e5b30fdb52a112b432750
F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
@ -1972,6 +1974,7 @@ F test/view.test 3c23d7a068e9e4a0c4e6907498042772adea725f0630c3d9638ffd4e5a08b92
F test/view2.test db32c8138b5b556f610b35dfddd38c5a58a292f07fda5281eedb0851b2672679
F test/view3.test ad8a8290ee2b55ff6ce66c9ef1ce3f1e47926273a3814e1c425293e128a95456
F test/vt02.c 5b44ac67b1a283fedecf2d6e2ceda61e7a157f01d44dcb4490dcb1e87d057060
F test/vt100-a.sql 631eeab18c5adb531bab79aecf64eee3934b42c75a309ee395c814717a6a7651
F test/vtab1.test 09a72330d0f31eda2ffaa828b06a6b917fb86250ee72de0301570af725774c07
F test/vtab2.test 14d4ab26cee13ba6cf5c5601b158e4f57552d3b055cdd9406cf7f711e9c84082
F test/vtab3.test b45f47d20f225ccc9c28dc915d92740c2dee311e
@ -2134,7 +2137,6 @@ F tool/enlargedb.c 3e8b2612b985cfa7e3e8800031ee191b43ae80de96abb5abbd5eada62651e
F tool/extract-sqlite3h.tcl 069ceab0cee26cba99952bfa08c0b23e35941c837acabe143f0c355d96c9e2eb x
F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2
F tool/fast_vacuum.c c129ae2924a48310c7b766810391da9e8fda532b9f6bd3f9a9e3a799a1b42af9
F tool/find_tclconfig.tcl e64886ffe3b982d4df42cd28ed91fe0b5940c2c5785e126c1821baf61bc86a7e
F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
F tool/fuzzershell.c 41480c8a1e4749351f381431ecfdfceba645396c5d836f8d26b51a33c4a21b33
F tool/genfkey.README e550911fa984c8255ebed2ef97824125d83806eb5232582700de949edf836eb1
@ -2150,7 +2152,7 @@ F tool/logest.c c34e5944318415de513d29a6098df247a9618c96d83c38d4abd88641fe46e669
F tool/max-limits.c cbb635fbb37ae4d05f240bfb5b5270bb63c54439
F tool/merge-test.tcl de76b62f2de2a92d4c1ca4f976bce0aea6899e0229e250479b229b2a1914b176
F tool/mkamalzip.tcl 8aa5ebe7973c8b8774062d34e15fea9815c4cc2ceea3a9b184695f005910876a
F tool/mkautoconfamal.sh c5e65fa1c922f2e3b3e4f6cd0331ec7d84bdef085f32cb1c46673cdf95ec8090
F tool/mkautoconfamal.sh 401f6378a99bb045b63abe8c2dad6bd6fd5a1c2b9c8cded9d7ac5848ea578994
F tool/mkccode.tcl c42a8f8cf78f92e83795d5447460dbce7aaf78a3bbf9082f1507dc71a3665f3c x
F tool/mkctimec.tcl f76dbfc74cefad8d126384ba3263677939f077bd184fcdf8c592a1daf64f50c3 x
F tool/mkkeywordhash.c 6b0be901c47f9ad42215fc995eb2f4384ac49213b1fba395102ec3e999acf559
@ -2206,7 +2208,6 @@ F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
F tool/stripccomments.c 68d2aa8cb504439f541ce66b8f128067612bdd16f5fb7bfe540f3fcb67c9c197
F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
F tool/symbols.sh 1612bd947750e21e7b47befad5f6b3825b06cce0705441f903bf35ced65ae9b9
F tool/tclConfigShToAutoDef.sh 44ec55046d86a3febb2cb3e099399b41794e80e9cd138eee7b9b016f819e882b x
F tool/tclConfigShToMake.sh 7c065d81c2d178e15e45a77372c6e5a38b5a1b08755301cd6f20a3a862db7312 x
F tool/varint.c 5d94cb5003db9dbbcbcc5df08d66f16071aee003
F tool/vdbe-compress.tcl fa2f37ab39b2a0087fafb6a7f3ce19503e25e624ffa8ed9951717ab72920c088
@ -2215,8 +2216,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 505d9e49f7af619eda9e46e7ed19c4446c64628233528e1ab3f70264e1640ace
R 08c1a7493121908afbb1dcd042c1e7a8
P 83c34decbe336c76062e6b1bfe4c2e8f786841a4b6efa001747e786e872c8c71 1f98fc07fdf06d699ffbf1521b0b5e937a582017e4325bd994b488e06becbecc
R de2202eb83cd3308bb9095ebe2525c12
U stephan
Z 7f697af593c155277b9e5f1e31c153ef
Z 7d9ccaf76dafc30f1ae03a1dfceab1ce
# Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
83c34decbe336c76062e6b1bfe4c2e8f786841a4b6efa001747e786e872c8c71
a8328b921c5504eceacade417e16e713999eff63978caf3418fd79501590b1cb

View File

@ -395,8 +395,8 @@ static int dbpageUpdate(
/* "INSERT INTO dbpage($PGNO,NULL)" causes page number $PGNO and
** all subsequent pages to be deleted. */
pTab->iDbTrunc = iDb;
pgno--;
pTab->pgnoTrunc = pgno;
pTab->pgnoTrunc = pgno-1;
pgno = 1;
}else{
zErr = "bad page value";
goto update_fail;

View File

@ -784,6 +784,23 @@ int cli_wcswidth(const char *z){
}
#endif
/*
** Check to see if z[] is a valid VT100 escape. If it is, then
** return the number of bytes in the escape sequence. Return 0 if
** z[] is not a VT100 escape.
**
** This routine assumes that z[0] is \033 (ESC).
*/
static int isVt100(const unsigned char *z){
int i;
if( z[1]!='[' ) return 0;
i = 2;
while( z[i]>=0x30 && z[i]<=0x3f ){ i++; }
while( z[i]>=0x20 && z[i]<=0x2f ){ i++; }
if( z[i]<0x40 || z[i]>0x7e ) return 0;
return i+1;
}
/*
** Output string zUtf to stdout as w characters. If w is negative,
** then right-justify the text. W is the width in UTF-8 characters, not
@ -799,6 +816,7 @@ static void utf8_width_print(FILE *out, int w, const char *zUtf){
unsigned char c;
int i = 0;
int n = 0;
int k;
int aw = w<0 ? -w : w;
if( zUtf==0 ) zUtf = "";
while( (c = a[i])!=0 ){
@ -811,6 +829,8 @@ static void utf8_width_print(FILE *out, int w, const char *zUtf){
}
i += len;
n += x;
}else if( c==0x1b && (k = isVt100(&a[i]))>0 ){
i += k;
}else if( n>=aw ){
break;
}else{
@ -3998,9 +4018,14 @@ static char *translateForDisplayAndDup(
i++;
continue;
}
n++;
j += 3;
i++;
if( c==0x1b && p->eEscMode==SHELL_ESC_OFF && (k = isVt100(&z[i]))>0 ){
i += k;
j += k;
}else{
n++;
j += 3;
i++;
}
}
if( n>=mxWidth && bWordWrap ){
/* Perhaps try to back up to a better place to break the line */
@ -4066,9 +4091,17 @@ static char *translateForDisplayAndDup(
zOut[j++] = '^';
zOut[j++] = 0x40 + c;
break;
case SHELL_ESC_OFF:
zOut[j++] = c;
case SHELL_ESC_OFF: {
int nn;
if( c==0x1b && (nn = isVt100(&z[i]))>0 ){
memcpy(&zOut[j], &z[i], nn);
j += nn;
i += nn - 1;
}else{
zOut[j++] = c;
}
break;
}
}
i++;
}

View File

@ -871,10 +871,8 @@ static void walChecksumBytes(
s1 = s2 = 0;
}
assert( nByte>=8 );
assert( (nByte&0x00000007)==0 );
assert( nByte<=65536 );
assert( nByte%4==0 );
/* nByte is a multiple of 8 between 8 and 65536 */
assert( nByte>=8 && (nByte&7)==0 && nByte<=65536 );
if( !nativeCksum ){
do {

Binary file not shown.

View File

@ -194,6 +194,63 @@ do_execsql_test tabfunc01-5.2 {
WHERE value=67;
} 67
# 2025-03-22 forum post 0d5d63257e3ff4f6
#
do_execsql_test tabfunc01-6.1 {
SELECT value FROM generate_series(1,10) WHERE value<5.5;
} {1 2 3 4 5}
do_execsql_test tabfunc01-6.2 {
SELECT value FROM generate_series(1,10) WHERE value<5.0;
} {1 2 3 4}
do_execsql_test tabfunc01-6.3 {
SELECT value FROM generate_series(1,10) WHERE value<=5.5;
} {1 2 3 4 5}
do_execsql_test tabfunc01-6.4 {
SELECT value FROM generate_series(1,10) WHERE value<=5.0;
} {1 2 3 4 5}
do_execsql_test tabfunc01-6.5 {
SELECT value FROM generate_series(1,10) WHERE value>5.5;
} {6 7 8 9 10}
do_execsql_test tabfunc01-6.6 {
SELECT value FROM generate_series(1,10) WHERE value>5.0;
} {6 7 8 9 10}
do_execsql_test tabfunc01-6.7 {
SELECT value FROM generate_series(1,10) WHERE value>=5.5;
} {6 7 8 9 10}
do_execsql_test tabfunc01-6.8 {
SELECT value FROM generate_series(1,10) WHERE value>=5.0;
} {5 6 7 8 9 10}
do_execsql_test tabfunc01-6.9 {
SELECT value FROM generate_series(10,1,-1) WHERE value<5.5;
} {5 4 3 2 1}
do_execsql_test tabfunc01-6.10 {
SELECT value FROM generate_series(10,1,-1) WHERE value<5.0;
} {4 3 2 1}
do_execsql_test tabfunc01-6.11 {
SELECT value FROM generate_series(10,1,-1) WHERE value<=5.5;
} {5 4 3 2 1}
do_execsql_test tabfunc01-6.12 {
SELECT value FROM generate_series(10,1,-1) WHERE value<=5.0;
} {5 4 3 2 1}
do_execsql_test tabfunc01-6.13 {
SELECT value FROM generate_series(10,1,-1) WHERE value>5.5;
} {10 9 8 7 6}
do_execsql_test tabfunc01-6.14 {
SELECT value FROM generate_series(10,1,-1) WHERE value>5.0;
} {10 9 8 7 6}
do_execsql_test tabfunc01-6.15 {
SELECT value FROM generate_series(10,1,-1) WHERE value>=5.5;
} {10 9 8 7 6}
do_execsql_test tabfunc01-6.16 {
SELECT value FROM generate_series(10,1,-1) WHERE value>=5.0;
} {10 9 8 7 6 5}
do_execsql_test tabfunc01-6.17 {
SELECT value FROM generate_series(1,10) WHERE value==5.5;
} {}
do_execsql_test tabfunc01-6.18 {
SELECT value FROM generate_series(1,10) WHERE value==5.0;
} {5}
# The next series of tests is verifying that virtual table are able
# to optimize the IN operator, even on terms that are not marked "omit".
# When the generate_series virtual table is compiled for the testfixture,

19
test/vt100-a.sql Normal file
View File

@ -0,0 +1,19 @@
/*
** Run this script using the "sqlite3" command-line shell
** test test formatting of output text that contains
** vt100 escape sequences.
*/
.mode box -escape off
CREATE TEMP TABLE t1(a,b,c);
INSERT INTO t1 VALUES
('one','twotwotwo','thirty-three'),
(unistr('\u001b[91mRED\u001b[0m'),'fourfour','fifty-five'),
('six','seven','eighty-eight');
.print With -escape off
SELECT * FROM t1;
.mode box -escape ascii
.print With -escape ascii
SELECT * FROM t1;
.mode box -escape symbol
.print With -escape symbol
SELECT * FROM t1;

View File

@ -37,6 +37,8 @@ then echo "TEA version number ok"
else echo "TEA version number mismatch. Should be $VERSION"; exit 1
fi
# If this script is given an argument of --snapshot, then generate a
# snapshot tarball named for the current checkout SHA hash, rather than
# the version number.

View File

@ -1,29 +0,0 @@
#!/bin/sh
#
# A level of indirection for use soley by the configure script
# (auto.def).
#
# Expects to be passed a full path to a tclConfig.sh. It sources it
# and emits TCL code which sets some vars which are exported by
# tclConfig.sh.
#
# This script expects that the caller has already validated that the
# file exists, is not a directory, and is readable.
#
# If passed no filename, or an empty one, then it emits config code
# suitable for the "config not found" case.
if test x = "x$1"; then
TCL_INCLUDE_SPEC=
TCL_LIB_SPEC=
TCL_STUB_LIB_SPEC=
TCL_EXEC_PREFIX=
TCL_VERSION=
else
. "$1"
fi
echo "define TCL_INCLUDE_SPEC {$TCL_INCLUDE_SPEC} ;"
echo "define TCL_LIB_SPEC {$TCL_LIB_SPEC} ;"
echo "define TCL_STUB_LIB_SPEC {$TCL_STUB_LIB_SPEC} ;"
echo "define TCL_EXEC_PREFIX {$TCL_EXEC_PREFIX} ;"
echo "define TCL_VERSION {$TCL_VERSION} ;"