Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rqlite for openSUSE:Factory checked in at 2026-01-17 21:42:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rqlite (Old) and /work/SRC/openSUSE:Factory/.rqlite.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rqlite" Sat Jan 17 21:42:44 2026 rev:41 rq:1327805 version:9.3.15 Changes: -------- --- /work/SRC/openSUSE:Factory/rqlite/rqlite.changes 2026-01-13 21:24:10.934232111 +0100 +++ /work/SRC/openSUSE:Factory/.rqlite.new.1928/rqlite.changes 2026-01-17 21:43:53.308720107 +0100 @@ -1,0 +2,6 @@ +Sat Jan 17 11:44:55 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to version 9.3.15: + * Upgrade rqlite-go-sqlite3 and SQL parser bundled dependencies + +------------------------------------------------------------------- Old: ---- rqlite-9.3.14.tar.xz New: ---- rqlite-9.3.15.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rqlite.spec ++++++ --- /var/tmp/diff_new_pack.N6Vv26/_old 2026-01-17 21:43:53.968747144 +0100 +++ /var/tmp/diff_new_pack.N6Vv26/_new 2026-01-17 21:43:53.968747144 +0100 @@ -17,7 +17,7 @@ Name: rqlite -Version: 9.3.14 +Version: 9.3.15 Release: 0 Summary: Distributed relational database built on SQLite License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.N6Vv26/_old 2026-01-17 21:43:54.028749602 +0100 +++ /var/tmp/diff_new_pack.N6Vv26/_new 2026-01-17 21:43:54.032749765 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/rqlite/rqlite.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v9.3.14</param> + <param name="revision">v9.3.15</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.N6Vv26/_old 2026-01-17 21:43:54.060750913 +0100 +++ /var/tmp/diff_new_pack.N6Vv26/_new 2026-01-17 21:43:54.064751077 +0100 @@ -1,7 +1,7 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/rqlite/rqlite.git</param> - <param name="changesrevision">369be06aee046ad4248b3d70f169ca8b37188b6a</param> + <param name="changesrevision">a86a145ca340376b32eb3a9a9c557dce38e7151f</param> </service> </servicedata> (No newline at EOF) ++++++ rqlite-9.3.14.tar.xz -> rqlite-9.3.15.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rqlite-9.3.14/CHANGELOG.md new/rqlite-9.3.15/CHANGELOG.md --- old/rqlite-9.3.14/CHANGELOG.md 2026-01-09 08:01:54.000000000 +0100 +++ new/rqlite-9.3.15/CHANGELOG.md 2026-01-17 01:01:32.000000000 +0100 @@ -1,4 +1,9 @@ -## v9.3.14 (January 9th 2025) +## v9.3.15 (January 16th 2026) +### Implementation changes and bug fixes +- [PR #2447](https://github.com/rqlite/rqlite/pull/2447): Upgrade SQL parser. +- [PR #2448](https://github.com/rqlite/rqlite/pull/2448): Upgrade SQLite to 3.51.2. + +## v9.3.14 (January 9th 2026) ### Implementation changes and bug fixes - [PR #2444](https://github.com/rqlite/rqlite/pull/2444): Increase WAL Checkpoint busy timeout to 250ms. - [PR #2445](https://github.com/rqlite/rqlite/pull/2445): Implement a must-checkpoint-WAL after multiple failures policy. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rqlite-9.3.14/README.md new/rqlite-9.3.15/README.md --- old/rqlite-9.3.14/README.md 2026-01-09 08:01:54.000000000 +0100 +++ new/rqlite-9.3.15/README.md 2026-01-17 01:01:32.000000000 +0100 @@ -5,6 +5,7 @@ </picture> [](https://circleci.com/gh/rqlite/rqlite/tree/master) +[](https://ci.appveyor.com/project/otoolep/rqlite) [](https://hub.docker.com/r/rqlite/rqlite/) [](https://rqlite.io/office-hours) [](https://www.rqlite.io/join-slack) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rqlite-9.3.14/go.mod new/rqlite-9.3.15/go.mod --- old/rqlite-9.3.14/go.mod 2026-01-09 08:01:54.000000000 +0100 +++ new/rqlite-9.3.15/go.mod 2026-01-17 01:01:32.000000000 +0100 @@ -16,7 +16,7 @@ github.com/peterh/liner v1.2.2 github.com/rqlite/raft-boltdb/v2 v2.0.0-20230523104317-c08e70f4de48 github.com/rqlite/rqlite-disco-clients v0.0.0-20250205044118-8ada2b350099 - github.com/rqlite/sql v0.0.0-20251204023435-65660522892e + github.com/rqlite/sql v0.0.0-20260116021722-655729ca2eff go.etcd.io/bbolt v1.4.3 golang.org/x/net v0.48.0 google.golang.org/protobuf v1.36.11 @@ -82,5 +82,5 @@ replace ( github.com/armon/go-metrics => github.com/hashicorp/go-metrics v0.5.1 - github.com/mattn/go-sqlite3 => github.com/rqlite/go-sqlite3 v1.43.0 + github.com/mattn/go-sqlite3 => github.com/rqlite/go-sqlite3 v1.44.0 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rqlite-9.3.14/go.sum new/rqlite-9.3.15/go.sum --- old/rqlite-9.3.14/go.sum 2026-01-09 08:01:54.000000000 +0100 +++ new/rqlite-9.3.15/go.sum 2026-01-17 01:01:32.000000000 +0100 @@ -237,14 +237,14 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rqlite/go-sqlite3 v1.43.0 h1:D1dno0cZ/ex99XME+R1r1MAp/XlvMWbFvx4KHO63S8Y= -github.com/rqlite/go-sqlite3 v1.43.0/go.mod h1:R9H7CatgYBt3c+fSV/5yo2vLh4ZjCB0aMHdkv69fP4A= +github.com/rqlite/go-sqlite3 v1.44.0 h1:XAwsGVSEite2L5MyqjD75Ce75Sg4x44hXPURGjlDdLQ= +github.com/rqlite/go-sqlite3 v1.44.0/go.mod h1:R9H7CatgYBt3c+fSV/5yo2vLh4ZjCB0aMHdkv69fP4A= github.com/rqlite/raft-boltdb/v2 v2.0.0-20230523104317-c08e70f4de48 h1:NZ62M+kT0JqhyFUMc8I4SMmfmD4NGJxhb2ePJQXjryc= github.com/rqlite/raft-boltdb/v2 v2.0.0-20230523104317-c08e70f4de48/go.mod h1:CRnsxgy5G8fAf5J+AM0yrsSdxXHKkIYOaq2sm+Q4DYc= github.com/rqlite/rqlite-disco-clients v0.0.0-20250205044118-8ada2b350099 h1:5cqkVLdl6sGJSY3kiF2dqaA3bD+8OS5FUdZqO0BxXLU= github.com/rqlite/rqlite-disco-clients v0.0.0-20250205044118-8ada2b350099/go.mod h1:6SVI8KegsW9Fyu2UQ+uvw0JI5CAILRYRyiQ/OFSJPrs= -github.com/rqlite/sql v0.0.0-20251204023435-65660522892e h1:ccOm5zC6YqJtBrMmtiNcLPjFyWzB+TDY+fDIlQNsIFw= -github.com/rqlite/sql v0.0.0-20251204023435-65660522892e/go.mod h1:ib9zVtNgRKiGuoMyUqqL5aNpk+r+++YlyiVIkclVqPg= +github.com/rqlite/sql v0.0.0-20260116021722-655729ca2eff h1:LUxzsaiuU1BzXdlYdgUP2LCin9HGHxaTxJaqB0C80pg= +github.com/rqlite/sql v0.0.0-20260116021722-655729ca2eff/go.mod h1:ib9zVtNgRKiGuoMyUqqL5aNpk+r+++YlyiVIkclVqPg= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= ++++++ vendor.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c new/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c --- old/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c 2026-01-09 08:01:54.000000000 +0100 +++ new/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c 2026-01-17 01:01:32.000000000 +0100 @@ -1,7 +1,7 @@ #ifndef USE_LIBSQLITE3 /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.51.1. By combining all the individual C code files into this +** version 3.51.2. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -19,7 +19,7 @@ ** separate file. This file contains only code for the core SQLite library. ** ** The content in this amalgamation comes from Fossil check-in -** 281fc0e9afc38674b9b0991943b9e9d1e64c with changes in files: +** b270f8339eb13b504d0b2ba154ebca966b7d with changes in files: ** ** */ @@ -468,12 +468,12 @@ ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.51.1" -#define SQLITE_VERSION_NUMBER 3051001 -#define SQLITE_SOURCE_ID "2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88" +#define SQLITE_VERSION "3.51.2" +#define SQLITE_VERSION_NUMBER 3051002 +#define SQLITE_SOURCE_ID "2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075" #define SQLITE_SCM_BRANCH "branch-3.51" -#define SQLITE_SCM_TAGS "release version-3.51.1" -#define SQLITE_SCM_DATETIME "2025-11-28T17:28:25.933Z" +#define SQLITE_SCM_TAGS "release version-3.51.2" +#define SQLITE_SCM_DATETIME "2026-01-09T17:27:48.405Z" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -41229,12 +41229,18 @@ pInode->nLock++; pInode->nShared = 1; } - }else if( (eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1) - || unixIsSharingShmNode(pFile) - ){ + }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){ /* We are trying for an exclusive lock but another thread in this ** same process is still holding a shared lock. */ rc = SQLITE_BUSY; + }else if( unixIsSharingShmNode(pFile) ){ + /* We are in WAL mode and attempting to delete the SHM and WAL + ** files due to closing the connection or changing out of WAL mode, + ** but another process still holds locks on the SHM file, thus + ** indicating that database locks have been broken, perhaps due + ** to a rogue close(open(dbFile)) or similar. + */ + rc = SQLITE_BUSY; }else{ /* The request was for a RESERVED or EXCLUSIVE lock. It is ** assumed that there is a SHARED or greater lock on the file @@ -43873,26 +43879,21 @@ ** still not a disaster. */ static int unixIsSharingShmNode(unixFile *pFile){ - int rc; unixShmNode *pShmNode; + struct flock lock; if( pFile->pShm==0 ) return 0; if( pFile->ctrlFlags & UNIXFILE_EXCL ) return 0; pShmNode = pFile->pShm->pShmNode; - rc = 1; - unixEnterMutex(); - if( ALWAYS(pShmNode->nRef==1) ){ - struct flock lock; - lock.l_whence = SEEK_SET; - lock.l_start = UNIX_SHM_DMS; - lock.l_len = 1; - lock.l_type = F_WRLCK; - osFcntl(pShmNode->hShm, F_GETLK, &lock); - if( lock.l_type==F_UNLCK ){ - rc = 0; - } - } - unixLeaveMutex(); - return rc; +#if SQLITE_ATOMIC_INTRINSICS + assert( AtomicLoad(&pShmNode->nRef)==1 ); +#endif + memset(&lock, 0, sizeof(lock)); + lock.l_whence = SEEK_SET; + lock.l_start = UNIX_SHM_DMS; + lock.l_len = 1; + lock.l_type = F_WRLCK; + osFcntl(pShmNode->hShm, F_GETLK, &lock); + return (lock.l_type!=F_UNLCK); } /* @@ -115317,9 +115318,22 @@ pParse->nMem += nReg; if( pExpr->op==TK_SELECT ){ dest.eDest = SRT_Mem; - dest.iSdst = dest.iSDParm; + if( (pSel->selFlags&SF_Distinct) && pSel->pLimit && pSel->pLimit->pRight ){ + /* If there is both a DISTINCT and an OFFSET clause, then allocate + ** a separate dest.iSdst array for sqlite3Select() and other + ** routines to populate. In this case results will be copied over + ** into the dest.iSDParm array only after OFFSET processing. This + ** ensures that in the case where OFFSET excludes all rows, the + ** dest.iSDParm array is not left populated with the contents of the + ** last row visited - it should be all NULLs if all rows were + ** excluded by OFFSET. */ + dest.iSdst = pParse->nMem+1; + pParse->nMem += nReg; + }else{ + dest.iSdst = dest.iSDParm; + } dest.nSdst = nReg; - sqlite3VdbeAddOp3(v, OP_Null, 0, dest.iSDParm, dest.iSDParm+nReg-1); + sqlite3VdbeAddOp3(v, OP_Null, 0, dest.iSDParm, pParse->nMem); VdbeComment((v, "Init subquery result")); }else{ dest.eDest = SRT_Exists; @@ -148187,9 +148201,14 @@ assert( nResultCol<=pDest->nSdst ); pushOntoSorter( pParse, pSort, p, regResult, regOrig, nResultCol, nPrefixReg); + pDest->iSDParm = regResult; }else{ assert( nResultCol==pDest->nSdst ); - assert( regResult==iParm ); + if( regResult!=iParm ){ + /* This occurs in cases where the SELECT had both a DISTINCT and + ** an OFFSET clause. */ + sqlite3VdbeAddOp3(v, OP_Copy, regResult, iParm, nResultCol-1); + } /* The LIMIT clause will jump out of the loop for us */ } break; @@ -154204,12 +154223,24 @@ && (pSub->selFlags & SF_Aggregate)==0 && !pSub->pSrc->a[0].fg.isSubquery && pSub->pLimit==0 + && pSub->pPrior==0 ){ + /* Before combining the sub-select with the parent, renumber the + ** cursor used by the subselect. This is because the EXISTS expression + ** might be a copy of another EXISTS expression from somewhere + ** else in the tree, and in this case it is important that it use + ** a unique cursor number. */ + sqlite3 *db = pParse->db; + int *aCsrMap = sqlite3DbMallocZero(db, (pParse->nTab+2)*sizeof(int)); + if( aCsrMap==0 ) return; + aCsrMap[0] = (pParse->nTab+1); + renumberCursors(pParse, pSub, -1, aCsrMap); + sqlite3DbFree(db, aCsrMap); + memset(pWhere, 0, sizeof(*pWhere)); pWhere->op = TK_INTEGER; pWhere->u.iValue = 1; ExprSetProperty(pWhere, EP_IntValue); - assert( p->pWhere!=0 ); pSub->pSrc->a[0].fg.fromExists = 1; pSub->pSrc->a[0].fg.jointype |= JT_CROSS; @@ -174002,6 +174033,9 @@ sqlite3 *db = pParse->db; int iEnd = sqlite3VdbeCurrentAddr(v); int nRJ = 0; +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + int addrSeek = 0; +#endif /* Generate loop termination code. */ @@ -174014,7 +174048,10 @@ ** the RIGHT JOIN table */ WhereRightJoin *pRJ = pLevel->pRJ; sqlite3VdbeResolveLabel(v, pLevel->addrCont); - pLevel->addrCont = 0; + /* Replace addrCont with a new label that will never be used, just so + ** the subsequent call to resolve pLevel->addrCont will have something + ** to resolve. */ + pLevel->addrCont = sqlite3VdbeMakeLabel(pParse); pRJ->endSubrtn = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Return, pRJ->regReturn, pRJ->addrSubrtn, 1); VdbeCoverage(v); @@ -174023,7 +174060,6 @@ pLoop = pLevel->pWLoop; if( pLevel->op!=OP_Noop ){ #ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT - int addrSeek = 0; Index *pIdx; int n; if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED @@ -174046,25 +174082,26 @@ sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2); } #endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */ - if( pTabList->a[pLevel->iFrom].fg.fromExists && i==pWInfo->nLevel-1 ){ - /* If the EXISTS-to-JOIN optimization was applied, then the EXISTS - ** loop(s) will be the inner-most loops of the join. There might be - ** multiple EXISTS loops, but they will all be nested, and the join - ** order will not have been changed by the query planner. If the - ** inner-most EXISTS loop sees a single successful row, it should - ** break out of *all* EXISTS loops. But only the inner-most of the - ** nested EXISTS loops should do this breakout. */ - int nOuter = 0; /* Nr of outer EXISTS that this one is nested within */ - while( nOuter<i ){ - if( !pTabList->a[pLevel[-nOuter-1].iFrom].fg.fromExists ) break; - nOuter++; - } - testcase( nOuter>0 ); - sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel[-nOuter].addrBrk); - VdbeComment((v, "EXISTS break")); - } - /* The common case: Advance to the next row */ - if( pLevel->addrCont ) sqlite3VdbeResolveLabel(v, pLevel->addrCont); + } + if( pTabList->a[pLevel->iFrom].fg.fromExists && i==pWInfo->nLevel-1 ){ + /* If the EXISTS-to-JOIN optimization was applied, then the EXISTS + ** loop(s) will be the inner-most loops of the join. There might be + ** multiple EXISTS loops, but they will all be nested, and the join + ** order will not have been changed by the query planner. If the + ** inner-most EXISTS loop sees a single successful row, it should + ** break out of *all* EXISTS loops. But only the inner-most of the + ** nested EXISTS loops should do this breakout. */ + int nOuter = 0; /* Nr of outer EXISTS that this one is nested within */ + while( nOuter<i ){ + if( !pTabList->a[pLevel[-nOuter-1].iFrom].fg.fromExists ) break; + nOuter++; + } + testcase( nOuter>0 ); + sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel[-nOuter].addrBrk); + VdbeComment((v, "EXISTS break")); + } + sqlite3VdbeResolveLabel(v, pLevel->addrCont); + if( pLevel->op!=OP_Noop ){ sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3); sqlite3VdbeChangeP5(v, pLevel->p5); VdbeCoverage(v); @@ -174077,10 +174114,11 @@ VdbeCoverage(v); } #ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT - if( addrSeek ) sqlite3VdbeJumpHere(v, addrSeek); + if( addrSeek ){ + sqlite3VdbeJumpHere(v, addrSeek); + addrSeek = 0; + } #endif - }else if( pLevel->addrCont ){ - sqlite3VdbeResolveLabel(v, pLevel->addrCont); } if( (pLoop->wsFlags & WHERE_IN_ABLE)!=0 && pLevel->u.in.nIn>0 ){ struct InLoop *pIn; @@ -219454,7 +219492,7 @@ if( node.zData==0 ) return; nData = sqlite3_value_bytes(apArg[1]); if( nData<4 ) return; - if( nData<NCELL(&node)*tree.nBytesPerCell ) return; + if( nData<4+NCELL(&node)*tree.nBytesPerCell ) return; pOut = sqlite3_str_new(0); for(ii=0; ii<NCELL(&node); ii++){ @@ -238535,7 +238573,13 @@ # define FLEXARRAY 1 #endif -#endif +#endif /* SQLITE_AMALGAMATION */ + +/* +** Constants for the largest and smallest possible 32-bit signed integers. +*/ +# define LARGEST_INT32 ((int)(0x7fffffff)) +# define SMALLEST_INT32 ((int)((-1) - LARGEST_INT32)) /* Truncate very long tokens to this many bytes. Hard limit is ** (65536-1-1-4-9)==65521 bytes. The limiting factor is the 16-bit offset @@ -253098,7 +253142,7 @@ fts5StructureRelease(pStruct); pStruct = pNew; nMin = 1; - nMerge = nMerge*-1; + nMerge = (nMerge==SMALLEST_INT32 ? LARGEST_INT32 : (nMerge*-1)); } if( pStruct && pStruct->nLevel ){ if( fts5IndexMerge(p, &pStruct, nMerge, nMin) ){ @@ -260305,7 +260349,7 @@ ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075", -1, SQLITE_TRANSIENT); } /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h new/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h --- old/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h 2026-01-09 08:01:54.000000000 +0100 +++ new/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h 2026-01-17 01:01:32.000000000 +0100 @@ -147,12 +147,12 @@ ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.51.1" -#define SQLITE_VERSION_NUMBER 3051001 -#define SQLITE_SOURCE_ID "2025-11-28 17:28:25 281fc0e9afc38674b9b0991943b9e9d1e64c6cbdb133d35f6f5c87ff6af38a88" +#define SQLITE_VERSION "3.51.2" +#define SQLITE_VERSION_NUMBER 3051002 +#define SQLITE_SOURCE_ID "2026-01-09 17:27:48 b270f8339eb13b504d0b2ba154ebca966b7dde08e40c3ed7d559749818cb2075" #define SQLITE_SCM_BRANCH "branch-3.51" -#define SQLITE_SCM_TAGS "release version-3.51.1" -#define SQLITE_SCM_DATETIME "2025-11-28T17:28:25.933Z" +#define SQLITE_SCM_TAGS "release version-3.51.2" +#define SQLITE_SCM_DATETIME "2026-01-09T17:27:48.405Z" /* ** CAPI3REF: Run-Time Library Version Numbers diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/rqlite/sql/ast.go new/vendor/github.com/rqlite/sql/ast.go --- old/vendor/github.com/rqlite/sql/ast.go 2026-01-09 08:01:54.000000000 +0100 +++ new/vendor/github.com/rqlite/sql/ast.go 2026-01-17 01:01:32.000000000 +0100 @@ -2576,6 +2576,7 @@ type CreateTriggerStatement struct { Create Pos // position of CREATE keyword + Temp Pos // position of TEMP keyword Trigger Pos // position of TRIGGER keyword If Pos // position of IF keyword IfNot Pos // position of NOT keyword after IF @@ -2624,7 +2625,11 @@ // String returns the string representation of the statement. func (s *CreateTriggerStatement) String() string { var buf bytes.Buffer - buf.WriteString("CREATE TRIGGER") + buf.WriteString("CREATE") + if s.Temp.IsValid() { + buf.WriteString(" TEMP") + } + buf.WriteString(" TRIGGER") if s.IfNotExists.IsValid() { buf.WriteString(" IF NOT EXISTS") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/rqlite/sql/parser.go new/vendor/github.com/rqlite/sql/parser.go --- old/vendor/github.com/rqlite/sql/parser.go 2026-01-09 08:01:54.000000000 +0100 +++ new/vendor/github.com/rqlite/sql/parser.go 2026-01-17 01:01:32.000000000 +0100 @@ -62,6 +62,31 @@ return stmt, nil } +func (p *Parser) ParseStatements() (stmts []Statement, err error) { + for { + switch tok := p.peek(); tok { + case EOF: + return stmts, nil + case EXPLAIN: + if stmt, err := p.parseExplainStatement(); err != nil { + return nil, err + } else { + stmts = append(stmts, stmt) + } + default: + if stmt, err := p.parseNonExplainStatement(); err != nil { + return nil, err + } else { + stmts = append(stmts, stmt) + } + } + if tok := p.peek(); tok != EOF && tok != SEMI { + return stmts, p.errorExpected(p.pos, p.tok, "semicolon or EOF") + } + p.scan() + } +} + // parseExplain parses EXPLAIN [QUERY PLAN] STMT. func (p *Parser) parseExplainStatement() (_ *ExplainStatement, err error) { var tok Token @@ -253,7 +278,7 @@ return p.parseCreateViewStatement(pos) case INDEX, UNIQUE: return p.parseCreateIndexStatement(pos) - case TRIGGER: + case TRIGGER, TEMP: return p.parseCreateTriggerStatement(pos) default: return nil, p.errorExpected(pos, tok, "TABLE, VIEW, INDEX, TRIGGER") @@ -1178,10 +1203,17 @@ } func (p *Parser) parseCreateTriggerStatement(createPos Pos) (_ *CreateTriggerStatement, err error) { - assert(p.peek() == TRIGGER) + assert(p.peek() == TRIGGER || p.peek() == TEMP) var stmt CreateTriggerStatement stmt.Create = createPos + if p.peek() == TEMP { + stmt.Temp, _, _ = p.scan() + } + if p.peek() != TRIGGER { + return &stmt, p.errorExpected(p.pos, p.tok, "TRIGGER") + } + stmt.Trigger, _, _ = p.scan() // Parse optional "IF NOT EXISTS". diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2026-01-09 08:01:54.000000000 +0100 +++ new/vendor/modules.txt 2026-01-17 01:01:32.000000000 +0100 @@ -220,7 +220,7 @@ # github.com/mattn/go-runewidth v0.0.19 ## explicit; go 1.20 github.com/mattn/go-runewidth -# github.com/mattn/go-sqlite3 v1.14.33 => github.com/rqlite/go-sqlite3 v1.43.0 +# github.com/mattn/go-sqlite3 v1.14.33 => github.com/rqlite/go-sqlite3 v1.44.0 ## explicit; go 1.19 github.com/mattn/go-sqlite3 # github.com/mitchellh/go-homedir v1.1.0 @@ -250,7 +250,7 @@ github.com/rqlite/rqlite-disco-clients/dnssrv github.com/rqlite/rqlite-disco-clients/etcd github.com/rqlite/rqlite-disco-clients/expand -# github.com/rqlite/sql v0.0.0-20251204023435-65660522892e +# github.com/rqlite/sql v0.0.0-20260116021722-655729ca2eff ## explicit; go 1.17 github.com/rqlite/sql # go.etcd.io/bbolt v1.4.3 @@ -438,4 +438,4 @@ google.golang.org/protobuf/types/known/structpb google.golang.org/protobuf/types/known/timestamppb # github.com/armon/go-metrics => github.com/hashicorp/go-metrics v0.5.1 -# github.com/mattn/go-sqlite3 => github.com/rqlite/go-sqlite3 v1.43.0 +# github.com/mattn/go-sqlite3 => github.com/rqlite/go-sqlite3 v1.44.0
