Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add code to select.c for printing the contents of parse-tree structures. The code is normally omitted. You must compile with -DSQLITE_TEST or -DSQLITE_DEBUG to enable it. (CVS 3606) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1b26d6875612a0ed25d6e293f005ea49 |
User & Date: | drh 2007-01-26 19:23:33.000 |
Context
2007-01-26
| ||
19:31 | Fix prototypes for the parser. Syntactic change only - no effect on object code. Ticket #2193. (CVS 3607) (check-in: 02990fabd1 user: drh tags: trunk) | |
19:23 | Add code to select.c for printing the contents of parse-tree structures. The code is normally omitted. You must compile with -DSQLITE_TEST or -DSQLITE_DEBUG to enable it. (CVS 3606) (check-in: 1b26d68756 user: drh tags: trunk) | |
19:04 | Fix a (harmless) assertion fault on nested views where the inner views are compound selects. Ticket #2192. (CVS 3605) (check-in: 942e7193bb user: drh tags: trunk) | |
Changes
Changes to src/printf.c.
︙ | ︙ | |||
853 854 855 856 857 858 859 | void sqlite3DebugPrintf(const char *zFormat, ...){ extern int getpid(void); va_list ap; char zBuf[500]; va_start(ap, zFormat); base_vprintf(0, 0, zBuf, sizeof(zBuf), zFormat, ap); va_end(ap); | | | 853 854 855 856 857 858 859 860 861 862 863 | void sqlite3DebugPrintf(const char *zFormat, ...){ extern int getpid(void); va_list ap; char zBuf[500]; va_start(ap, zFormat); base_vprintf(0, 0, zBuf, sizeof(zBuf), zFormat, ap); va_end(ap); fprintf(stdout,"%s", zBuf); fflush(stdout); } #endif |
Changes to src/select.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.325 2007/01/26 19:23:33 drh Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
3296 3297 3298 3299 3300 3301 3302 | generateColumnNames(pParse, pTabList, pEList); } sqliteFree(sAggInfo.aCol); sqliteFree(sAggInfo.aFunc); return rc; } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 | generateColumnNames(pParse, pTabList, pEList); } sqliteFree(sAggInfo.aCol); sqliteFree(sAggInfo.aFunc); return rc; } #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) /* ******************************************************************************* ** The following code is used for testing and debugging only. The code ** that follows does not appear in normal builds. ** ** These routines are used to print out the content of all or part of a ** parse structures such as Select or Expr. Such printouts are useful ** for helping to understand what is happening inside the code generator ** during the execution of complex SELECT statements. ** ** These routine are not called anywhere from within the normal ** code base. Then are intended to be called from within the debugger ** or from temporary "printf" statements inserted for debugging. */ void sqlite3PrintExpr(Expr *p){ if( p->token.z && p->token.n>0 ){ sqlite3DebugPrintf("(%.*s", p->token.n, p->token.z); }else{ sqlite3DebugPrintf("(%d", p->op); } if( p->pLeft ){ sqlite3DebugPrintf(" "); sqlite3PrintExpr(p->pLeft); } if( p->pRight ){ sqlite3DebugPrintf(" "); sqlite3PrintExpr(p->pRight); } sqlite3DebugPrintf(")"); } void sqlite3PrintExprList(ExprList *pList){ int i; for(i=0; i<pList->nExpr; i++){ sqlite3PrintExpr(pList->a[i].pExpr); if( i<pList->nExpr-1 ){ sqlite3DebugPrintf(", "); } } } void sqlite3PrintSelect(Select *p, int indent){ sqlite3DebugPrintf("%*sSELECT(%p) ", indent, "", p); sqlite3PrintExprList(p->pEList); sqlite3DebugPrintf("\n"); if( p->pSrc ){ char *zPrefix; int i; zPrefix = "FROM"; for(i=0; i<p->pSrc->nSrc; i++){ struct SrcList_item *pItem = &p->pSrc->a[i]; sqlite3DebugPrintf("%*s ", indent+6, zPrefix); zPrefix = ""; if( pItem->pSelect ){ sqlite3DebugPrintf("(\n"); sqlite3PrintSelect(pItem->pSelect, indent+10); sqlite3DebugPrintf("%*s)", indent+8, ""); }else if( pItem->zName ){ sqlite3DebugPrintf("%s", pItem->zName); } if( pItem->pTab ){ sqlite3DebugPrintf("(table: %s)", pItem->pTab->zName); } if( pItem->zAlias ){ sqlite3DebugPrintf(" AS %s", pItem->zAlias); } if( i<p->pSrc->nSrc-1 ){ sqlite3DebugPrintf(","); } sqlite3DebugPrintf("\n"); } } if( p->pWhere ){ sqlite3DebugPrintf("%*s WHERE ", indent, ""); sqlite3PrintExpr(p->pWhere); sqlite3DebugPrintf("\n"); } if( p->pGroupBy ){ sqlite3DebugPrintf("%*s GROUP BY ", indent, ""); sqlite3PrintExprList(p->pGroupBy); sqlite3DebugPrintf("\n"); } if( p->pHaving ){ sqlite3DebugPrintf("%*s HAVING ", indent, ""); sqlite3PrintExpr(p->pHaving); sqlite3DebugPrintf("\n"); } if( p->pOrderBy ){ sqlite3DebugPrintf("%*s ORDER BY ", indent, ""); sqlite3PrintExprList(p->pOrderBy); sqlite3DebugPrintf("\n"); } } /* End of the structure debug printing code *****************************************************************************/ #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */ |