Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | In the ANALYZE command implementation make statInit() a 2-value function since the 3rd parameter was always the same constant. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
959bb5acdc3b4e2b481e3c38f2086713 |
User & Date: | drh 2013-08-27 14:14:14.669 |
Context
2013-08-27
| ||
15:41 | Update sqlite3.pc.in to use @PACKAGE_VERSION@ instead of @RELEASE@. (check-in: 2460dfd882 user: dan tags: trunk) | |
14:14 | In the ANALYZE command implementation make statInit() a 2-value function since the 3rd parameter was always the same constant. (check-in: 959bb5acdc user: drh tags: trunk) | |
2013-08-26
| ||
23:18 | Merge the STAT4 capability into trunk. (check-in: a32af0abe5 user: drh tags: trunk) | |
Changes
Changes to src/analyze.c.
︙ | ︙ | |||
281 282 283 284 285 286 287 | int iMin; /* Index in a[] of entry with minimum score */ int nSample; /* Current number of samples */ int iGet; /* Index of current sample accessed by stat_get() */ Stat4Sample *a; /* Array of mxSample Stat4Sample objects */ }; /* | | | | | 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | int iMin; /* Index in a[] of entry with minimum score */ int nSample; /* Current number of samples */ int iGet; /* Index of current sample accessed by stat_get() */ Stat4Sample *a; /* Array of mxSample Stat4Sample objects */ }; /* ** Implementation of the stat_init(C,N) SQL function. The two parameters ** are the number of rows in the table or index (C) and the number of columns ** in the index (N). ** ** This routine allocates the Stat4Accum object in heap memory. The return ** value is a pointer to the the Stat4Accum object encoded as a blob (i.e. ** the size of the blob is sizeof(void*) bytes). */ static void statInit( sqlite3_context *context, |
︙ | ︙ | |||
305 306 307 308 309 310 311 | int nCol; /* Number of columns in index being sampled */ int n; /* Bytes of space to allocate */ int i; /* Used to iterate through p->aSample[] */ /* Decode the three function arguments */ UNUSED_PARAMETER(argc); nRow = (tRowcnt)sqlite3_value_int64(argv[0]); | | | 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | int nCol; /* Number of columns in index being sampled */ int n; /* Bytes of space to allocate */ int i; /* Used to iterate through p->aSample[] */ /* Decode the three function arguments */ UNUSED_PARAMETER(argc); nRow = (tRowcnt)sqlite3_value_int64(argv[0]); mxSample = SQLITE_STAT4_SAMPLES; nCol = sqlite3_value_int(argv[1]); assert( nCol>1 ); /* >1 because it includes the rowid column */ /* Allocate the space required for the Stat4Accum object */ n = sizeof(*p) + sizeof(tRowcnt)*nCol /* Stat4Accum.anEq */ + sizeof(tRowcnt)*nCol /* Stat4Accum.anLt */ |
︙ | ︙ | |||
352 353 354 355 356 357 358 | p->aBest[i].iCol = i; } /* Return a pointer to the allocated object to the caller */ sqlite3_result_blob(context, p, sizeof(p), sqlite3_free); } static const FuncDef statInitFuncdef = { | | | 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 | p->aBest[i].iCol = i; } /* Return a pointer to the allocated object to the caller */ sqlite3_result_blob(context, p, sizeof(p), sqlite3_free); } static const FuncDef statInitFuncdef = { 2, /* nArg */ SQLITE_UTF8, /* iPrefEnc */ 0, /* flags */ 0, /* pUserData */ 0, /* pNext */ statInit, /* xFunc */ 0, /* xStep */ 0, /* xFinalize */ |
︙ | ︙ | |||
907 908 909 910 911 912 913 | ** ** * the number of rows in the index, ** * the number of columns in the index including the rowid, ** * the recommended number of samples for the stat3/stat4 table. */ sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat4+1); sqlite3VdbeAddOp2(v, OP_Integer, nCol+1, regStat4+2); | < | | 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 | ** ** * the number of rows in the index, ** * the number of columns in the index including the rowid, ** * the recommended number of samples for the stat3/stat4 table. */ sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat4+1); sqlite3VdbeAddOp2(v, OP_Integer, nCol+1, regStat4+2); sqlite3VdbeAddOp3(v, OP_Function, 0, regStat4+1, regStat4); sqlite3VdbeChangeP4(v, -1, (char*)&statInitFuncdef, P4_FUNCDEF); sqlite3VdbeChangeP5(v, 2); /* Implementation of the following: ** ** Rewind csr ** if eof(csr) goto end_of_scan; ** regChng = 0 ** goto next_push_0; |
︙ | ︙ |