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>
 
 [![Circle 
CI](https://circleci.com/gh/rqlite/rqlite/tree/master.svg?style=svg)](https://circleci.com/gh/rqlite/rqlite/tree/master)
+[![AppVeyor](https://img.shields.io/appveyor/ci/otoolep/rqlite/master?logo=appveyor)](https://ci.appveyor.com/project/otoolep/rqlite)
 
[![Docker](https://img.shields.io/docker/pulls/rqlite/rqlite?style=plastic)](https://hub.docker.com/r/rqlite/rqlite/)
 [![Office 
Hours](https://img.shields.io/badge/Office%20Hours--yellow.svg)](https://rqlite.io/office-hours)
 
[![Slack](https://img.shields.io/badge/Slack--purple.svg)](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

Reply via email to