Index: src/parse.y ================================================================== --- src/parse.y +++ src/parse.y @@ -1177,16 +1177,12 @@ ** 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); - } + 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) Index: test/altertab3.test ================================================================== --- test/altertab3.test +++ test/altertab3.test @@ -77,11 +77,11 @@ ALTER TABLE t1 RENAME b TO bbb; } do_execsql_test 3.2 { SELECT sql FROM sqlite_master WHERE name = 'v1' -} {{CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (bbb IN ())}} +} {{CREATE VIEW v1 AS SELECT * FROM t1 WHERE a=1 OR (b IN ())}} #------------------------------------------------------------------------- reset_db do_execsql_test 4.0 { CREATE TABLE t1(a, b); @@ -186,10 +186,28 @@ SELECT sql FROM sqlite_master; } { {CREATE TABLE "t1"(c0)} {CREATE INDEX i0 ON "t1"('1' IN ())} } + +do_execsql_test 8.2.1 { + CREATE TABLE t2 (c0); + CREATE INDEX i2 ON t2((LIKELIHOOD(c0, 100) IN ())); + ALTER TABLE t2 RENAME COLUMN c0 TO c1; +} +do_execsql_test 8.2.2 { + SELECT sql FROM sqlite_master WHERE tbl_name = 't2'; +} { + {CREATE TABLE t2 (c1)} + {CREATE INDEX i2 ON t2((LIKELIHOOD(c0, 100) IN ()))} +} +do_test 8.2.3 { + sqlite3 db2 test.db + db2 eval { INSERT INTO t2 VALUES (1), (2), (3) } + db close +} {} + finish_test