*** ./contrib/tsearch/rewrite.c.orig Tue Nov 12 15:50:16 2002 --- ./contrib/tsearch/rewrite.c Tue Nov 12 15:57:51 2002 *************** *** 210,258 **** return NULL; } } ! else if (node->valnode->val == (int4) '|') { NODE *res = node; node->left = clean_fakeval_intree(node->left, &lresult); node->right = clean_fakeval_intree(node->right, &rresult); ! if (lresult == V_TRUE || rresult == V_TRUE) { freetree(node); *result = V_TRUE; return NULL; } ! else if (lresult == V_FALSE && rresult == V_FALSE) { freetree(node); *result = V_FALSE; return NULL; } ! else if (lresult == V_FALSE) ! { ! res = node->right; ! pfree(node); ! } ! else if (rresult == V_FALSE) ! { ! res = node->left; ! pfree(node); ! } ! return res; ! } ! else ! { ! NODE *res = node; ! ! node->left = clean_fakeval_intree(node->left, &lresult); ! node->right = clean_fakeval_intree(node->right, &rresult); ! if (lresult == V_FALSE || rresult == V_FALSE) { freetree(node); ! *result = V_FALSE; return NULL; } ! else if (lresult == V_TRUE && rresult == V_TRUE) { freetree(node); *result = V_TRUE; --- 210,240 ---- return NULL; } } ! else { NODE *res = node; node->left = clean_fakeval_intree(node->left, &lresult); node->right = clean_fakeval_intree(node->right, &rresult); ! if (lresult == V_TRUE && rresult == V_TRUE) { freetree(node); *result = V_TRUE; return NULL; } ! else if (lresult == V_FALSE && rresult == V_FALSE) { freetree(node); *result = V_FALSE; return NULL; } ! else if (lresult == V_TRUE && rresult == V_FALSE) { freetree(node); ! *result = V_TRUE; return NULL; } ! else if (lresult == V_FALSE && rresult == V_TRUE) { freetree(node); *result = V_TRUE; *************** *** 267,272 **** --- 249,264 ---- { res = node->left; pfree(node); + } + else if (lresult == V_FALSE) + { + res = node->right; + pfree(node); + } + else if (rresult == V_FALSE) + { + res = node->left; + pfree(node); } return res; }