Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Handle renaming a column or table when the schema contains a (meaningless) index on the constant expression ('text' IN ()) or ('text' NOT IN()). Fix for [fd76310a]. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
567b13093956185b5d5e971b81ba4788 |
User & Date: | dan 2019-06-10 15:34:16 |
Original Comment: | Handle renaming a column or table when the schema contains a (meaningless) index on the constant expression ('text' IN ()) or ('text' NOT IN()). |
Context
2019-06-10
| ||
18:33 | Make sure a CAST to "NUMERIC" results in an integer if the value can be losslessly expressed as an integer, as the documentation requires. Ticket [dd6bffbfb6e61db9]. (check-in: c0c90961 user: drh tags: trunk) | |
15:34 | Handle renaming a column or table when the schema contains a (meaningless) index on the constant expression ('text' IN ()) or ('text' NOT IN()). Fix for [fd76310a]. (check-in: 567b1309 user: dan tags: trunk) | |
13:46 | Do not attempt the LIKE optimization on a column with numeric affinity if the rhs of the operator begins with whitespace. Fix for ticket [fd76310a5e]. (check-in: 94b58ab0 user: dan tags: trunk) | |
Changes
Changes to src/parse.y.
︙ | ︙ | |||
1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 | /* Expressions of the form ** ** expr1 IN () ** expr1 NOT IN () ** ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ if( IN_RENAME_OBJECT==0 ){ sqlite3ExprDelete(pParse->db, A); A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1); } }else if( Y->nExpr==1 ){ /* Expressions of the form: ** ** expr1 IN (?1) ** expr1 NOT IN (?2) ** | > > > > > > > > | 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 | /* Expressions of the form ** ** expr1 IN () ** expr1 NOT IN () ** ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. ** ** Or, if this is part of an ALTER TABLE RENAME command, instead ** change the expression to "+(expr1)". The unary + is required to ** workaround the obscure case where expr1 is a string literal, as ** SQLite treats simple string literals in CREATE INDEX statements ** as column names, not constant expressions. */ if( IN_RENAME_OBJECT==0 ){ sqlite3ExprDelete(pParse->db, A); A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1); }else{ A = sqlite3PExpr(pParse, TK_UPLUS, A, 0); } }else if( Y->nExpr==1 ){ /* Expressions of the form: ** ** expr1 IN (?1) ** expr1 NOT IN (?2) ** |
︙ | ︙ |
Changes to test/altertab3.test.
︙ | ︙ | |||
170 171 172 173 174 175 176 177 178 179 180 | WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1 ORDER BY d); END; } do_catchsql_test 7.2.2 { ALTER TABLE t1x RENAME TO t1; } {1 {error in trigger AFTER: no such column: d}} finish_test | > > > > > > > > > > > > > > > | 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | WINDOW w1 AS (PARTITION BY b, percent_rank() OVER w1 ORDER BY d); END; } do_catchsql_test 7.2.2 { ALTER TABLE t1x RENAME TO t1; } {1 {error in trigger AFTER: no such column: d}} #------------------------------------------------------------------------- reset_db do_execsql_test 8.0 { CREATE TABLE t0(c0); CREATE INDEX i0 ON t0('1' IN ()); } do_execsql_test 8.1 { ALTER TABLE t0 RENAME TO t1; SELECT sql FROM sqlite_master; } { {CREATE TABLE "t1"(c0)} {CREATE INDEX i0 ON "t1"('1' IN ())} } finish_test |