Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug introduced 4 days ago by [e95439119ac200cb]: do not set the Expr.affExpr field of a generated column expression if the expression is a RAISE() function, as affExpr has a different meaning for RAISE. Forum post b312e075b5. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
1096b5a7cc8104db01f8820ace47020b |
User & Date: | drh 2023-03-07 23:47:38 |
Context
2023-03-08
| ||
00:47 | Fix a problem in the count-of-view optimization that can lead to incorrect bytecode. dbsqlfuzz 23d782160b71c3f8f535ccb2da313dfc8eb8c631. (check-in: f4500953 user: drh tags: trunk) | |
00:04 | Fix an assertion fault added by [65ffee234787213c]. (check-in: d00e68ba user: drh tags: branch-3.41) | |
2023-03-07
| ||
23:47 | Fix a bug introduced 4 days ago by [e95439119ac200cb]: do not set the Expr.affExpr field of a generated column expression if the expression is a RAISE() function, as affExpr has a different meaning for RAISE. Forum post b312e075b5. (check-in: 1096b5a7 user: drh tags: trunk) | |
19:23 | Improve how sqlite3.initWorker1API() determines whether it's running in a Worker thread. Based on feedback in forum post ac7a94d4f77db235. (check-in: 2f712b83 user: stephan tags: trunk) | |
Changes
Changes to src/build.c.
︙ | ︙ | |||
2008 2009 2010 2011 2012 2013 2014 | if( ALWAYS(pExpr) && pExpr->op==TK_ID ){ /* The value of a generated column needs to be a real expression, not ** just a reference to another column, in order for covering index ** optimizations to work correctly. So if the value is not an expression, ** turn it into one by adding a unary "+" operator. */ pExpr = sqlite3PExpr(pParse, TK_UPLUS, pExpr, 0); } | | | 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 | if( ALWAYS(pExpr) && pExpr->op==TK_ID ){ /* The value of a generated column needs to be a real expression, not ** just a reference to another column, in order for covering index ** optimizations to work correctly. So if the value is not an expression, ** turn it into one by adding a unary "+" operator. */ pExpr = sqlite3PExpr(pParse, TK_UPLUS, pExpr, 0); } if( pExpr && pExpr->op!=TK_RAISE ) pExpr->affExpr = pCol->affinity; sqlite3ColumnSetExpr(pParse, pTab, pCol, pExpr); pExpr = 0; goto generated_done; generated_error: sqlite3ErrorMsg(pParse, "error in generated column \"%s\"", pCol->zCnName); |
︙ | ︙ |
Changes to test/gencol1.test.
︙ | ︙ | |||
655 656 657 658 659 660 661 662 663 | } {~/Column 0/} # ^^^^^^^^---- verfies that x2 acts like a covering index do_execsql_test gencol1-23.4 { EXPLAIN SELECT b FROM t1 INDEXED BY x2; } {/Column 0/} # ^^^^^^^^^^--- Must reference the original table in this case because # of the different datatype on column b. finish_test | > > > > > > > > > | 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 | } {~/Column 0/} # ^^^^^^^^---- verfies that x2 acts like a covering index do_execsql_test gencol1-23.4 { EXPLAIN SELECT b FROM t1 INDEXED BY x2; } {/Column 0/} # ^^^^^^^^^^--- Must reference the original table in this case because # of the different datatype on column b. # 2023-03-07 https://sqlite.org/forum/forumpost/b312e075b5 # do_execsql_test gencol1-23.5 { CREATE TABLE v0(c1 INT, c2 AS (RAISE(IGNORE))); } do_catchsql_test gencol1-23.6 { SELECT * FROM v0; } {1 {RAISE() may only be used within a trigger-program}} finish_test |