diff --git a/ext/misc/series.c b/ext/misc/series.c index 7f7573e6b3..f1ee7b5cf6 100644 --- a/ext/misc/series.c +++ b/ext/misc/series.c @@ -175,6 +175,7 @@ struct series_cursor { sqlite3_int64 iValue; /* Current value */ u8 bDesc; /* iStep is really negative */ u8 bDone; /* True if stepped past last element */ + u8 bLimit; /* There exists a limit clause */ }; /* @@ -286,10 +287,10 @@ static int seriesNext(sqlite3_vtab_cursor *cur){ pCur->bDone = 1; }else if( pCur->bDesc ){ pCur->iValue = sub64(pCur->iValue, pCur->iStep); - assert( pCur->iValue>=pCur->iTerm ); + assert( pCur->iValue>=pCur->iTerm || pCur->bLimit ); }else{ pCur->iValue = add64(pCur->iValue, pCur->iStep); - assert( pCur->iValue<=pCur->iTerm ); + assert( pCur->iValue<=pCur->iTerm || pCur->bLimit ); } return SQLITE_OK; } @@ -519,6 +520,7 @@ static int seriesFilter( if( idxNum & 0x40 ){ iOffset = sqlite3_value_int64(argv[iArg++]); } + if( iLimit>0 ) pCur->bLimit = 1; } /* Narrow the range of iMin and iMax (the minimum and maximum outputs) diff --git a/manifest b/manifest index 32dd2863db..1d58ac437e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\s".expert"\sin\sthe\sCLI\sso\sthat\swhen\sit\sis\sgenerating\sunique\sindex\nnames,\sthe\sprobability\sof\sbeing\sunable\sto\screate\sa\sunique\snames\sbecomes\nvanishingly\ssmall,\sessentially\szero.\s\sAnd\seven\sif\sthat\sdoes\shappen,\nbe\ssure\sto\sfree\sthe\slast\scandidate\sname\sbefore\sreturning\san\serror.\n[bugs:/info/2026-10-17T09:25:38Z|Bug\s2026-10-17T09:25:38Z] -D 2026-10-17T11:34:38.135 +C Fix\san\sincorrect\sassert()\sin\sgenerate_series().\s\sNo\simpact\son\snon-debug\nbuilds.\n[bugs:/info/2026-10-17T09:24:09Z|Bug\s2026-10-17T09:24:09Z] +D 2026-10-17T12:03:36.275 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -396,7 +396,7 @@ F ext/misc/randomjson.c ef835fc64289e76ac4873b85fe12f9463a036168d7683cf2b773e36e F ext/misc/regexp.c 378e6e84516952a4b9f3f4df88927f20e6538e2609f55b773ed78899dab8206e F ext/misc/remember.c add730f0f7e7436cd15ea3fd6a90fd83c3f706ab44169f7f048438b7d6baa69c F ext/misc/rot13.c 51ac5f51e9d5fd811db58a9c23c628ad5f333c173f1fc53c8491a3603d38556c -F ext/misc/series.c fd82b5c14849b861a299a316b0c63bfd69f7249601ee9bcc6fda2317fec0f821 +F ext/misc/series.c 3296d04bc84a64848c3abea7b9a152cb8dd198f23f71b6ee28c3fa22ca5f8746 F ext/misc/sha1.c c279eaae2d203be3443f9e3052401d15dc98bd43aa389d4e234ab0e295b4a04b F ext/misc/shathree.c e40d4239d522946f6c9821a2244907ae8288ae45a8c8ed979b62e83979666a6d F ext/misc/showauth.c 732578f0fe4ce42d577e1c86dc89dd14a006ab52 @@ -1786,7 +1786,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 173820a340c9fa6591c5fd8ae7e60e405e324bca6f2fd5ae746568fc955fe1b7 +F test/tabfunc01.test 9840707afb06ee6ab0fdcf45909cd1b5070e55354cd9b97e847068a46565fd91 F test/table.test e87294bf1c80bfd7792142b84ab32ea5beb4f3f71e535d7fb263a6b2068377bf F test/tableapi.test e37c33e6be2276e3a96bb54b00eea7f321277115d10e5b30fdb52a112b432750 F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930 @@ -2287,8 +2287,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P d3e004fe3daeb01085e969890beb56fe71839bcad0e7a19e1690a1b2d14b2775 -R 3077b19d0e70dbba6a59036154db532b +P d43611f653bad426df8dc4ac12d0fff1662245b0715f7e66a023bd1dd129faea +R 4860e4e720900d9865bb628f2bb5e16b U drh -Z 1911116dbdc0d7381d7fd295cb3b0087 +Z 1becf78a83ced1d37cf8fb84d4943e6b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 87c33e77c0..9cc8caea85 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d43611f653bad426df8dc4ac12d0fff1662245b0715f7e66a023bd1dd129faea +c5d67762df0507fe58e035b572623f36efb394d08d322bbdb313a2f0da49c734 diff --git a/test/tabfunc01.test b/test/tabfunc01.test index cd442afaf8..02f4a44d90 100644 --- a/test/tabfunc01.test +++ b/test/tabfunc01.test @@ -799,6 +799,12 @@ do_execsql_test 1523ck { LIMIT 3; } {9223372036854775805 9223372036854775806 9223372036854775807} +# Bug 2026-10-17T09:24:09Z +# +breakpoint +do_execsql_test 1530 { + SELECT value FROM generate_series(1,10) ORDER BY value DESC LIMIT 3; +} {10 9 8} #------------------------------------------------------------------------ #