Skip to content

Commit 8f7ac48

Browse files
committed
Prepare release of version 2.2.4
- Update to SQLite 3.50.4
1 parent c93df9b commit 8f7ac48

File tree

9 files changed

+88
-27
lines changed

9 files changed

+88
-27
lines changed

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.2.4] - 2025-08-01
11+
12+
### Changed
13+
14+
- Based on SQLite version 3.50.4
15+
1016
## [2.2.3] - 2025-07-18
1117

1218
### Changed
@@ -666,7 +672,8 @@ The following ciphers are supported:
666672
- AES 256 Bit CBC - SHA1/SHA256/SHA512 HMAC ([SQLCipher](https://www.zetetic.net/sqlcipher/), database versions 1, 2, 3, and 4)
667673
- RC4 - No HMAC ([System.Data.SQLite](http://system.data.sqlite.org))
668674

669-
[Unreleased]: ../../compare/v2.2.3...HEAD
675+
[Unreleased]: ../../compare/v2.2.4...HEAD
676+
[2.2.4]: ../../compare/v2.2.3...v2.2.4
670677
[2.2.3]: ../../compare/v2.2.2...v2.2.3
671678
[2.2.2]: ../../compare/v2.2.1...v2.2.2
672679
[2.2.1]: ../../compare/v2.2.0...v2.2.1

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.24.0.0)
2-
project(sqlite3mc VERSION 2.2.3)
2+
project(sqlite3mc VERSION 2.2.4)
33

44
# Helper macro
55
macro(_Enable_MT _target)

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ dnl Copyright (C) 2019-2025 Ulrich Telle <[email protected]>
44
dnl
55
dnl This file is covered by the same licence as the entire SQLite3 Multiple Ciphers package.
66

7-
AC_INIT([sqlite3mc], [2.2.3], [[email protected]])
7+
AC_INIT([sqlite3mc], [2.2.4], [[email protected]])
88

99
dnl This is the version tested with, might work with earlier ones.
1010
AC_PREREQ([2.69])

readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ The code was mainly developed under Windows, but was tested under Linux as well.
1010

1111
## Version information
1212

13-
* 2.2.3 - *July 2025*
14-
- Based on SQLite version 3.50.3
13+
* 2.2.4 - *August 2025*
14+
- Based on SQLite version 3.50.4
1515

1616
For further version information please consult the [CHANGELOG](CHANGELOG.md).
1717

src/rekeyvacuum.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
** Change 4: Call sqlite3mcBtreeSetPageSize instead of sqlite3BtreeSetPageSize for main database
2828
** (sqlite3mcBtreeSetPageSize allows to reduce the number of reserved bytes)
2929
**
30-
** This code is generated by the script rekeyvacuum.sh from SQLite version 3.50.3 amalgamation.
30+
** This code is generated by the script rekeyvacuum.sh from SQLite version 3.50.4 amalgamation.
3131
*/
3232
SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3mcRunVacuumForRekey(
3333
char **pzErrMsg, /* Write error message here */

src/sqlite3.c

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************
22
** This file is an amalgamation of many separate C source files from SQLite
3-
** version 3.50.3. By combining all the individual C code files into this
3+
** version 3.50.4. By combining all the individual C code files into this
44
** single large file, the entire code can be compiled as a single translation
55
** unit. This allows many compilers to do optimizations that would not be
66
** possible if the files were compiled separately. Performance improvements
@@ -18,7 +18,7 @@
1818
** separate file. This file contains only code for the core SQLite library.
1919
**
2020
** The content in this amalgamation comes from Fossil check-in
21-
** 3ce993b8657d6d9deda380a93cdd6404a8c8 with changes in files:
21+
** 4d8adfb30e03f9cf27f800a2c1ba3c48fb4c with changes in files:
2222
**
2323
**
2424
*/
@@ -465,9 +465,9 @@ extern "C" {
465465
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
466466
** [sqlite_version()] and [sqlite_source_id()].
467467
*/
468-
#define SQLITE_VERSION "3.50.3"
469-
#define SQLITE_VERSION_NUMBER 3050003
470-
#define SQLITE_SOURCE_ID "2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543"
468+
#define SQLITE_VERSION "3.50.4"
469+
#define SQLITE_VERSION_NUMBER 3050004
470+
#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3"
471471

472472
/*
473473
** CAPI3REF: Run-Time Library Version Numbers
@@ -19440,6 +19440,7 @@ struct Expr {
1944019440
Table *pTab; /* TK_COLUMN: Table containing column. Can be NULL
1944119441
** for a column of an index on an expression */
1944219442
Window *pWin; /* EP_WinFunc: Window/Filter defn for a function */
19443+
int nReg; /* TK_NULLS: Number of registers to NULL out */
1944319444
struct { /* TK_IN, TK_SELECT, and TK_EXISTS */
1944419445
int iAddr; /* Subroutine entry address */
1944519446
int regReturn; /* Register used to hold return address */
@@ -21474,6 +21475,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn(Parse*, Table*, Column*, int)
2147421475
SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, Expr*, int);
2147521476
SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse*, Expr*, int);
2147621477
SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce(Parse*, Expr*, int);
21478+
SQLITE_PRIVATE void sqlite3ExprNullRegisterRange(Parse*, int, int);
2147721479
SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
2147821480
SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
2147921481
SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int, u8);
@@ -115241,6 +115243,12 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
115241115243
sqlite3VdbeLoadString(v, target, pExpr->u.zToken);
115242115244
return target;
115243115245
}
115246+
case TK_NULLS: {
115247+
/* Set a range of registers to NULL. pExpr->y.nReg registers starting
115248+
** with target */
115249+
sqlite3VdbeAddOp3(v, OP_Null, 0, target, target + pExpr->y.nReg - 1);
115250+
return target;
115251+
}
115244115252
default: {
115245115253
/* Make NULL the default case so that if a bug causes an illegal
115246115254
** Expr node to be passed into this function, it will be handled
@@ -115925,6 +115933,25 @@ SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce(
115925115933
return regDest;
115926115934
}
115927115935

115936+
/*
115937+
** Make arrangements to invoke OP_Null on a range of registers
115938+
** during initialization.
115939+
*/
115940+
SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3ExprNullRegisterRange(
115941+
Parse *pParse, /* Parsing context */
115942+
int iReg, /* First register to set to NULL */
115943+
int nReg /* Number of sequential registers to NULL out */
115944+
){
115945+
u8 okConstFactor = pParse->okConstFactor;
115946+
Expr t;
115947+
memset(&t, 0, sizeof(t));
115948+
t.op = TK_NULLS;
115949+
t.y.nReg = nReg;
115950+
pParse->okConstFactor = 1;
115951+
sqlite3ExprCodeRunJustOnce(pParse, &t, iReg);
115952+
pParse->okConstFactor = okConstFactor;
115953+
}
115954+
115928115955
/*
115929115956
** Generate code to evaluate an expression and store the results
115930115957
** into a register. Return the register number where the results
@@ -153175,6 +153202,7 @@ SQLITE_PRIVATE int sqlite3Select(
153175153202
sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
153176153203
VdbeComment((v, "clear abort flag"));
153177153204
sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
153205+
sqlite3ExprNullRegisterRange(pParse, iAMem, pGroupBy->nExpr);
153178153206

153179153207
/* Begin a loop that will extract all source rows in GROUP BY order.
153180153208
** This might involve two separate loops with an OP_Sort in between, or
@@ -168470,6 +168498,7 @@ static int whereLoopAddBtree(
168470168498
pNew->u.btree.nEq = 0;
168471168499
pNew->u.btree.nBtm = 0;
168472168500
pNew->u.btree.nTop = 0;
168501+
pNew->u.btree.nDistinctCol = 0;
168473168502
pNew->nSkip = 0;
168474168503
pNew->nLTerm = 0;
168475168504
pNew->iSortIdx = 0;
@@ -169538,8 +169567,6 @@ static i8 wherePathSatisfiesOrderBy(
169538169567
obSat = obDone;
169539169568
}
169540169569
break;
169541-
}else if( wctrlFlags & WHERE_DISTINCTBY ){
169542-
pLoop->u.btree.nDistinctCol = 0;
169543169570
}
169544169571
iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor;
169545169572

@@ -257280,7 +257307,7 @@ static void fts5SourceIdFunc(
257280257307
){
257281257308
assert( nArg==0 );
257282257309
UNUSED_PARAM2(nArg, apUnused);
257283-
sqlite3_result_text(pCtx, "fts5: 2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543", -1, SQLITE_TRANSIENT);
257310+
sqlite3_result_text(pCtx, "fts5: 2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3", -1, SQLITE_TRANSIENT);
257284257311
}
257285257312

257286257313
/*

src/sqlite3.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ extern "C" {
146146
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
147147
** [sqlite_version()] and [sqlite_source_id()].
148148
*/
149-
#define SQLITE_VERSION "3.50.3"
150-
#define SQLITE_VERSION_NUMBER 3050003
151-
#define SQLITE_SOURCE_ID "2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543"
149+
#define SQLITE_VERSION "3.50.4"
150+
#define SQLITE_VERSION_NUMBER 3050004
151+
#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3"
152152

153153
/*
154154
** CAPI3REF: Run-Time Library Version Numbers

src/sqlite3mc_version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
#define SQLITE3MC_VERSION_MAJOR 2
1616
#define SQLITE3MC_VERSION_MINOR 2
17-
#define SQLITE3MC_VERSION_RELEASE 3
17+
#define SQLITE3MC_VERSION_RELEASE 4
1818
#define SQLITE3MC_VERSION_SUBRELEASE 0
19-
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.2.3"
19+
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.2.4"
2020

2121
#endif /* SQLITE3MC_VERSION_H_ */

src/sqlite3patched.c

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/******************************************************************************
22
** This file is an amalgamation of many separate C source files from SQLite
3-
** version 3.50.3. By combining all the individual C code files into this
3+
** version 3.50.4. By combining all the individual C code files into this
44
** single large file, the entire code can be compiled as a single translation
55
** unit. This allows many compilers to do optimizations that would not be
66
** possible if the files were compiled separately. Performance improvements
@@ -18,7 +18,7 @@
1818
** separate file. This file contains only code for the core SQLite library.
1919
**
2020
** The content in this amalgamation comes from Fossil check-in
21-
** 3ce993b8657d6d9deda380a93cdd6404a8c8 with changes in files:
21+
** 4d8adfb30e03f9cf27f800a2c1ba3c48fb4c with changes in files:
2222
**
2323
**
2424
*/
@@ -465,9 +465,9 @@ extern "C" {
465465
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
466466
** [sqlite_version()] and [sqlite_source_id()].
467467
*/
468-
#define SQLITE_VERSION "3.50.3"
469-
#define SQLITE_VERSION_NUMBER 3050003
470-
#define SQLITE_SOURCE_ID "2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543"
468+
#define SQLITE_VERSION "3.50.4"
469+
#define SQLITE_VERSION_NUMBER 3050004
470+
#define SQLITE_SOURCE_ID "2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3"
471471

472472
/*
473473
** CAPI3REF: Run-Time Library Version Numbers
@@ -19454,6 +19454,7 @@ struct Expr {
1945419454
Table *pTab; /* TK_COLUMN: Table containing column. Can be NULL
1945519455
** for a column of an index on an expression */
1945619456
Window *pWin; /* EP_WinFunc: Window/Filter defn for a function */
19457+
int nReg; /* TK_NULLS: Number of registers to NULL out */
1945719458
struct { /* TK_IN, TK_SELECT, and TK_EXISTS */
1945819459
int iAddr; /* Subroutine entry address */
1945919460
int regReturn; /* Register used to hold return address */
@@ -21488,6 +21489,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn(Parse*, Table*, Column*, int)
2148821489
SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, Expr*, int);
2148921490
SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse*, Expr*, int);
2149021491
SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce(Parse*, Expr*, int);
21492+
SQLITE_PRIVATE void sqlite3ExprNullRegisterRange(Parse*, int, int);
2149121493
SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
2149221494
SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
2149321495
SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int, u8);
@@ -115272,6 +115274,12 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
115272115274
sqlite3VdbeLoadString(v, target, pExpr->u.zToken);
115273115275
return target;
115274115276
}
115277+
case TK_NULLS: {
115278+
/* Set a range of registers to NULL. pExpr->y.nReg registers starting
115279+
** with target */
115280+
sqlite3VdbeAddOp3(v, OP_Null, 0, target, target + pExpr->y.nReg - 1);
115281+
return target;
115282+
}
115275115283
default: {
115276115284
/* Make NULL the default case so that if a bug causes an illegal
115277115285
** Expr node to be passed into this function, it will be handled
@@ -115956,6 +115964,25 @@ SQLITE_PRIVATE int sqlite3ExprCodeRunJustOnce(
115956115964
return regDest;
115957115965
}
115958115966

115967+
/*
115968+
** Make arrangements to invoke OP_Null on a range of registers
115969+
** during initialization.
115970+
*/
115971+
SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3ExprNullRegisterRange(
115972+
Parse *pParse, /* Parsing context */
115973+
int iReg, /* First register to set to NULL */
115974+
int nReg /* Number of sequential registers to NULL out */
115975+
){
115976+
u8 okConstFactor = pParse->okConstFactor;
115977+
Expr t;
115978+
memset(&t, 0, sizeof(t));
115979+
t.op = TK_NULLS;
115980+
t.y.nReg = nReg;
115981+
pParse->okConstFactor = 1;
115982+
sqlite3ExprCodeRunJustOnce(pParse, &t, iReg);
115983+
pParse->okConstFactor = okConstFactor;
115984+
}
115985+
115959115986
/*
115960115987
** Generate code to evaluate an expression and store the results
115961115988
** into a register. Return the register number where the results
@@ -153211,6 +153238,7 @@ SQLITE_PRIVATE int sqlite3Select(
153211153238
sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
153212153239
VdbeComment((v, "clear abort flag"));
153213153240
sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
153241+
sqlite3ExprNullRegisterRange(pParse, iAMem, pGroupBy->nExpr);
153214153242

153215153243
/* Begin a loop that will extract all source rows in GROUP BY order.
153216153244
** This might involve two separate loops with an OP_Sort in between, or
@@ -168515,6 +168543,7 @@ static int whereLoopAddBtree(
168515168543
pNew->u.btree.nEq = 0;
168516168544
pNew->u.btree.nBtm = 0;
168517168545
pNew->u.btree.nTop = 0;
168546+
pNew->u.btree.nDistinctCol = 0;
168518168547
pNew->nSkip = 0;
168519168548
pNew->nLTerm = 0;
168520168549
pNew->iSortIdx = 0;
@@ -169583,8 +169612,6 @@ static i8 wherePathSatisfiesOrderBy(
169583169612
obSat = obDone;
169584169613
}
169585169614
break;
169586-
}else if( wctrlFlags & WHERE_DISTINCTBY ){
169587-
pLoop->u.btree.nDistinctCol = 0;
169588169615
}
169589169616
iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor;
169590169617

@@ -257338,7 +257365,7 @@ static void fts5SourceIdFunc(
257338257365
){
257339257366
assert( nArg==0 );
257340257367
UNUSED_PARAM2(nArg, apUnused);
257341-
sqlite3_result_text(pCtx, "fts5: 2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543", -1, SQLITE_TRANSIENT);
257368+
sqlite3_result_text(pCtx, "fts5: 2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3", -1, SQLITE_TRANSIENT);
257342257369
}
257343257370

257344257371
/*

0 commit comments

Comments
 (0)