Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Use the SQLITE_CONSTRAINT return value from xBestIndex to prohibit bad query plans in the pragma virtual table. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b1259d4448f744861e416f42328c1450 |
User & Date: | drh 2024-03-25 11:34:42 |
Context
2024-03-25
| ||
12:28 | Fix recent test case changes so that they also work on Windows. (check-in: 38578b5a user: drh tags: trunk) | |
11:34 | Use the SQLITE_CONSTRAINT return value from xBestIndex to prohibit bad query plans in the pragma virtual table. (check-in: b1259d44 user: drh tags: trunk) | |
10:55 | Improvements to the vtablog.c extension: Eliminate memory leaks. More diagnostic output for xBestIndex. (check-in: 92e9a71b user: drh tags: trunk) | |
Changes
Changes to src/pragma.c.
︙ | ︙ | |||
2866 2867 2868 2869 2870 2871 2872 | pIdxInfo->estimatedCost = (double)1; if( pTab->nHidden==0 ){ return SQLITE_OK; } pConstraint = pIdxInfo->aConstraint; seen[0] = 0; seen[1] = 0; for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){ | | | < < < < < > | | | > | 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 | pIdxInfo->estimatedCost = (double)1; if( pTab->nHidden==0 ){ return SQLITE_OK; } pConstraint = pIdxInfo->aConstraint; seen[0] = 0; seen[1] = 0; for(i=0; i<pIdxInfo->nConstraint; i++, pConstraint++){ if( pConstraint->iColumn < pTab->iHidden ) continue; if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; if( pConstraint->usable==0 ) return SQLITE_CONSTRAINT; j = pConstraint->iColumn - pTab->iHidden; assert( j < 2 ); seen[j] = i+1; } if( seen[0]==0 ){ pIdxInfo->estimatedCost = (double)2147483647; pIdxInfo->estimatedRows = 2147483647; return SQLITE_OK; } j = seen[0]-1; pIdxInfo->aConstraintUsage[j].argvIndex = 1; pIdxInfo->aConstraintUsage[j].omit = 1; pIdxInfo->estimatedCost = (double)20; pIdxInfo->estimatedRows = 20; if( seen[1] ){ j = seen[1]-1; pIdxInfo->aConstraintUsage[j].argvIndex = 2; pIdxInfo->aConstraintUsage[j].omit = 1; } return SQLITE_OK; } /* Create a new cursor for the pragma virtual table */ static int pragmaVtabOpen(sqlite3_vtab *pVtab, sqlite3_vtab_cursor **ppCursor){ PragmaVtabCursor *pCsr; pCsr = (PragmaVtabCursor*)sqlite3_malloc(sizeof(*pCsr)); |
︙ | ︙ |