From: drh <> Date: Wed, 5 Mar 2025 16:35:51 +0000 (+0000) Subject: Improvement output for ".schema --indent" in the CLI when the schema contains X-Git-Tag: major-release~211 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9f19ea83e75893875572f7cb3a1e89ecf4c1841f;p=thirdparty%2Fsqlite.git Improvement output for ".schema --indent" in the CLI when the schema contains partial indexes with long and complicated WHERE clauses. FossilOrigin-Name: defd7187ff8c4388f8b5467ed168462ec48215a1f4263bc4128b8e4d89a0bb2a --- diff --git a/manifest b/manifest index beffb56a46..43257eeafa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\sconfigure\sscript\scleanups\swhich\sstarted\sout\sas\scygwin-specific\sfixes\sbut\sended\sup\sjust\sbeing\sminor\splatform-agnostic\scleanups. -D 2025-03-04T21:37:40.854 +C Improvement\soutput\sfor\s".schema\s--indent"\sin\sthe\sCLI\swhen\sthe\sschema\scontains\npartial\sindexes\swith\slong\sand\scomplicated\sWHERE\sclauses. +D 2025-03-05T16:35:51.616 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d @@ -782,7 +782,7 @@ F src/random.c 606b00941a1d7dd09c381d3279a058d771f406c5213c9932bbd93d5587be4b9c F src/resolve.c 626c24b258b111f75c22107aa5614ad89810df3026f5ca071116d3fe75925c75 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c a076f7db3a0fcbd9f710d7746cfc07e0b3baadee45eb3136bedc29c598ef8f1c -F src/shell.c.in 6bb2abfb5cbeb5b017b8d0e94e39dd1efd101b22aca07a6734b155b6d4d03f62 +F src/shell.c.in 79f306cb3a2d3f949855dac6b5e7554df2717d5051c5fc4d951812e10060de38 F src/sqlite.h.in 3db05f6603c78d9e6fe035e9e12bed4ca8140135d05ff092becc2cf7d7d1fefb F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 3f046c04ea3595d6bfda99b781926b17e672fd6d27da2ba6d8d8fc39981dcb54 @@ -2213,9 +2213,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P ea1f7f8de4abb80fe41a115c9f601ff27cd728493640c6d47d868913feec28dc dc84976a7c0d0028b7c576d54e18d1b8e1fc2376bc7b0504f1c86e82c1f7c814 -R b5bab0327061922aba519b310eef7e6f -T +closed dc84976a7c0d0028b7c576d54e18d1b8e1fc2376bc7b0504f1c86e82c1f7c814 Closed\sby\sintegrate-merge. -U stephan -Z f9205b8831e481bb14c401cd973bda1f +P 2cda90410ac62843fa3cf5a9592b2b25564cf9d829e107c85854e8167d4fe46d +Q +94c6e8d97158fde5c8200206cf21e8acc9de8d1b4cbaf7db8d9c6a56ad6762e4 +R 29ebc562921d2cbf213ef2f2b5468565 +U drh +Z 89d1691ddf8bc059441cea6053edd55b # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index c9d2593ab0..c3fa5a30fb 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2cda90410ac62843fa3cf5a9592b2b25564cf9d829e107c85854e8167d4fe46d +defd7187ff8c4388f8b5467ed168462ec48215a1f4263bc4128b8e4d89a0bb2a diff --git a/src/shell.c.in b/src/shell.c.in index 586782f01f..1717f76d44 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -2741,6 +2741,8 @@ static int shell_callback( char cEnd = 0; char c; int nLine = 0; + int isIndex; + int isWhere = 0; assert( nArg==1 ); if( azArg[0]==0 ) break; if( sqlite3_strlike("CREATE VIEW%", azArg[0], 0)==0 @@ -2749,6 +2751,8 @@ static int shell_callback( sqlite3_fprintf(p->out, "%s;\n", azArg[0]); break; } + isIndex = sqlite3_strlike("CREATE INDEX%", azArg[0], 0)==0 + || sqlite3_strlike("CREATE UNIQUE INDEX%", azArg[0], 0)==0; z = sqlite3_mprintf("%s", azArg[0]); shell_check_oom(z); j = 0; @@ -2778,14 +2782,26 @@ static int shell_callback( nParen++; }else if( c==')' ){ nParen--; - if( nLine>0 && nParen==0 && j>0 ){ + if( nLine>0 && nParen==0 && j>0 && !isWhere ){ printSchemaLineN(p->out, z, j, "\n"); j = 0; } + }else if( (c=='w' || c=='W') + && nParen==0 && isIndex + && sqlite3_strnicmp("WHERE",&z[i],5)==0 + && !isalnum(z[i+5]) && z[i+5]!='_' ){ + isWhere = 1; + }else if( isWhere && (c=='A' || c=='a') + && nParen==0 + && sqlite3_strnicmp("AND",&z[i],3)==0 + && !isalnum(z[i+3]) && z[i+3]!='_' ){ + printSchemaLineN(p->out, z, j, "\n "); + j = 0; } z[j++] = c; if( nParen==1 && cEnd==0 && (c=='(' || c=='\n' || (c==',' && !wsToEol(z+i+1))) + && !isWhere ){ if( c=='\n' ) j--; printSchemaLineN(p->out, z, j, "\n ");