SQLite

Check-in [81f25d5c84]
Login

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

Overview
Comment:Add assert() statements to sqlite3ExprDelete() that prove various symmetry properties of the Expr object that might be exploited to make the Expr object smaller and faster.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | expr-simplify
Files: files | file ages | folders
SHA3-256: 81f25d5c84e4d2d0cd3c6a7c105c7c93d310218feeea4e023dbc32e7e96b2a52
User & Date: drh 2018-07-28 01:30:43.176
Context
2018-09-18
18:08
Merge all recent trunk enhancements. (check-in: 655f065404 user: drh tags: expr-simplify)
2018-07-28
13:37
An early attempt at refactoring Expr (Closed-Leaf check-in: fc90a53de7 user: drh tags: expr-simplify-branch1)
01:30
Add assert() statements to sqlite3ExprDelete() that prove various symmetry properties of the Expr object that might be exploited to make the Expr object smaller and faster. (check-in: 81f25d5c84 user: drh tags: expr-simplify)
2018-07-27
23:33
Improvements to the parser to increase coverage. Fix the parser so that at least one expresssion is required after PARTITION BY and within the list of expressions on VALUES(). (check-in: 02204f8b24 user: drh tags: trunk)
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/expr.c.
1056
1057
1058
1059
1060
1061
1062











1063
1064
1065
1066
1067
1068
1069
  assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
#ifdef SQLITE_DEBUG
  if( ExprHasProperty(p, EP_Leaf) && !ExprHasProperty(p, EP_TokenOnly) ){
    assert( p->pLeft==0 );
    assert( p->pRight==0 );
    assert( p->x.pSelect==0 );
  }











#endif
  if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){
    /* The Expr.x union is never used at the same time as Expr.pRight */
    assert( p->x.pList==0 || p->pRight==0 );
    if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft);
    if( p->pRight ){
      sqlite3ExprDeleteNN(db, p->pRight);







>
>
>
>
>
>
>
>
>
>
>







1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
  assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
#ifdef SQLITE_DEBUG
  if( ExprHasProperty(p, EP_Leaf) && !ExprHasProperty(p, EP_TokenOnly) ){
    assert( p->pLeft==0 );
    assert( p->pRight==0 );
    assert( p->x.pSelect==0 );
  }
  if( !ExprHasProperty(p, EP_TokenOnly) ){
    assert( p->op!=TK_FUNCTION || p->pLeft==0 );
    assert( p->pRight==0 || p->x.pSelect==0 );
  }
  if( !ExprHasProperty(p, (EP_TokenOnly|EP_Reduced)) ){
    assert( p->pWin==0 || p->pLeft==0 );
    assert( p->pWin==0 || p->pTab==0 );
    assert( p->pWin==0 || p->op==TK_FUNCTION );
    assert( p->pWin==0 || !ExprHasProperty(p, EP_xIsSelect) );
    assert( p->pTab==0 || (p->pRight==0 && p->x.pSelect==0) );
  }
#endif
  if( !ExprHasProperty(p, (EP_TokenOnly|EP_Leaf)) ){
    /* The Expr.x union is never used at the same time as Expr.pRight */
    assert( p->x.pList==0 || p->pRight==0 );
    if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft);
    if( p->pRight ){
      sqlite3ExprDeleteNN(db, p->pRight);