/ Check-in [e7033104]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix a problem causing ENABLE_CURSOR_HINTS builds to segfault.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256:e7033104fa8bd974a9a3d173200aa07a3aa3daade86e7eb65cad5d00b086969e
User & Date: dan 2018-09-11 13:38:35
Context
2018-09-11
19:05
Do not do the byte-by-byte modifications in the resetdb.test script if the reserved-byte flag in the DB header is non-zero, because in that case the bytes will be in the wrong place and the test won't work. check-in: 0af18674 user: drh tags: trunk
13:38
Fix a problem causing ENABLE_CURSOR_HINTS builds to segfault. check-in: e7033104 user: dan tags: trunk
2018-09-10
19:34
Fix a test script issue in fts3ao.test. check-in: 74c381b5 user: dan tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to src/wherecode.c.

882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){
  int rc = WRC_Continue;
  struct CCurHint *pHint = pWalker->u.pCCurHint;
  if( pExpr->op==TK_COLUMN ){
    if( pExpr->iTable!=pHint->iTabCur ){
      Vdbe *v = pWalker->pParse->pVdbe;
      int reg = ++pWalker->pParse->nMem;   /* Register for column value */
      sqlite3ExprCodeGetColumnOfTable(
          v, pExpr->pTab, pExpr->iTable, pExpr->iColumn, reg
      );
      pExpr->op = TK_REGISTER;
      pExpr->iTable = reg;
    }else if( pHint->pIdx!=0 ){
      pExpr->iTable = pHint->iIdxCur;
      pExpr->iColumn = sqlite3ColumnOfIndex(pHint->pIdx, pExpr->iColumn);
      assert( pExpr->iColumn>=0 );
    }







|
<
<







882
883
884
885
886
887
888
889


890
891
892
893
894
895
896
static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){
  int rc = WRC_Continue;
  struct CCurHint *pHint = pWalker->u.pCCurHint;
  if( pExpr->op==TK_COLUMN ){
    if( pExpr->iTable!=pHint->iTabCur ){
      Vdbe *v = pWalker->pParse->pVdbe;
      int reg = ++pWalker->pParse->nMem;   /* Register for column value */
      sqlite3ExprCode(pWalker->pParse, pExpr, reg);


      pExpr->op = TK_REGISTER;
      pExpr->iTable = reg;
    }else if( pHint->pIdx!=0 ){
      pExpr->iTable = pHint->iIdxCur;
      pExpr->iColumn = sqlite3ColumnOfIndex(pHint->pIdx, pExpr->iColumn);
      assert( pExpr->iColumn>=0 );
    }

Changes to test/cursorhint2.test.

181
182
183
184
185
186
187
188















189
}
  
do_extract_hints_test 2.12 {
  SELECT * FROM x1 LEFT JOIN x2 ON (a=x) WHERE coalesce(x2.b, 1)
} {
  x2 {EQ(c0,r[2])}
}
















finish_test








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
}
  
do_extract_hints_test 2.12 {
  SELECT * FROM x1 LEFT JOIN x2 ON (a=x) WHERE coalesce(x2.b, 1)
} {
  x2 {EQ(c0,r[2])}
}

reset_db
do_execsql_test 3.0 {
  CREATE TABLE t1 (i1 TEXT);    
  CREATE TABLE t2 (i2 TEXT UNIQUE);    
  INSERT INTO t1 VALUES('0');
  INSERT INTO t2 VALUES('0');
}

do_extract_hints_test 3.1 {
  SELECT * FROM t1 CROSS JOIN t2 WHERE (t1.i1 = t2.i2) AND t2.i2 = 1;
} {
  t1 {EQ(c0,r[1])} t2 EQ(c0,1)
}


finish_test