@@ -177,6 +177,7 @@ clean_NOT_v2(ITEM * ptr, int4 *len)
177
177
#define V_UNKNOWN 0
178
178
#define V_TRUE 1
179
179
#define V_FALSE 2
180
+ #define V_STOP 3
180
181
181
182
/*
182
183
* Clean query tree from values which is always in
@@ -190,10 +191,10 @@ clean_fakeval_intree(NODE * node, char *result)
190
191
191
192
if (node -> valnode -> type == VAL )
192
193
return node ;
193
- else if (node -> valnode -> type == VALTRUE )
194
+ else if (node -> valnode -> type == VALSTOP )
194
195
{
195
196
pfree (node );
196
- * result = V_TRUE ;
197
+ * result = V_STOP ;
197
198
return NULL ;
198
199
}
199
200
@@ -203,65 +204,29 @@ clean_fakeval_intree(NODE * node, char *result)
203
204
node -> right = clean_fakeval_intree (node -> right , & rresult );
204
205
if (!node -> right )
205
206
{
206
- * result = ( rresult == V_TRUE ) ? V_FALSE : V_TRUE ;
207
+ * result = V_STOP ;
207
208
freetree (node );
208
209
return NULL ;
209
210
}
210
211
}
211
- else if (node -> valnode -> val == (int4 ) '|' )
212
- {
213
- NODE * res = node ;
214
-
215
- node -> left = clean_fakeval_intree (node -> left , & lresult );
216
- node -> right = clean_fakeval_intree (node -> right , & rresult );
217
- if (lresult == V_TRUE || rresult == V_TRUE )
218
- {
219
- freetree (node );
220
- * result = V_TRUE ;
221
- return NULL ;
222
- }
223
- else if (lresult == V_FALSE && rresult == V_FALSE )
224
- {
225
- freetree (node );
226
- * result = V_FALSE ;
227
- return NULL ;
228
- }
229
- else if (lresult == V_FALSE )
230
- {
231
- res = node -> right ;
232
- pfree (node );
233
- }
234
- else if (rresult == V_FALSE )
235
- {
236
- res = node -> left ;
237
- pfree (node );
238
- }
239
- return res ;
240
- }
241
212
else
242
213
{
243
214
NODE * res = node ;
244
215
245
216
node -> left = clean_fakeval_intree (node -> left , & lresult );
246
217
node -> right = clean_fakeval_intree (node -> right , & rresult );
247
- if (lresult == V_FALSE || rresult == V_FALSE )
248
- {
249
- freetree (node );
250
- * result = V_FALSE ;
251
- return NULL ;
252
- }
253
- else if (lresult == V_TRUE && rresult == V_TRUE )
218
+ if (lresult == V_STOP && rresult == V_STOP )
254
219
{
255
220
freetree (node );
256
- * result = V_TRUE ;
221
+ * result = V_STOP ;
257
222
return NULL ;
258
223
}
259
- else if (lresult == V_TRUE )
224
+ else if (lresult == V_STOP )
260
225
{
261
226
res = node -> right ;
262
227
pfree (node );
263
228
}
264
- else if (rresult == V_TRUE )
229
+ else if (rresult == V_STOP )
265
230
{
266
231
res = node -> left ;
267
232
pfree (node );
0 commit comments