SQLite

Check-in [e7033104fa]
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
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: e7033104fa8bd974a9a3d173200aa07a3aa3daade86e7eb65cad5d00b086969e
User & Date: dan 2018-09-11 13:38:35.239
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: 0af18674ca user: drh tags: trunk)
13:38
Fix a problem causing ENABLE_CURSOR_HINTS builds to segfault. (check-in: e7033104fa user: dan tags: trunk)
2018-09-10
19:34
Fix a test script issue in fts3ao.test. (check-in: 74c381b573 user: dan tags: trunk)
Changes
Side-by-Side Diff 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
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 */
      sqlite3ExprCodeGetColumnOfTable(
      sqlite3ExprCode(pWalker->pParse, pExpr, reg);
          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 );
    }
Changes to test/cursorhint2.test.
181
182
183
184
185
186
187















188
189
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