2727
2828#include "aqo.h"
2929#include "hash.h"
30+ #include "path_utils.h"
3031
3132static int get_str_hash (const char * str );
3233static int get_node_hash (Node * node );
@@ -218,11 +219,11 @@ get_fss_for_object(List *relsigns, List *clauselist,
218219 i = 0 ;
219220 foreach (lc , clauselist )
220221 {
221- RestrictInfo * rinfo = lfirst_node ( RestrictInfo , lc );
222+ AQOClause * clause = ( AQOClause * ) lfirst ( lc );
222223
223- clause_hashes [i ] = get_clause_hash (rinfo -> clause ,
224+ clause_hashes [i ] = get_clause_hash (clause -> clause ,
224225 nargs , args_hash , eclass_hash );
225- args = get_clause_args_ptr (rinfo -> clause );
226+ args = get_clause_args_ptr (clause -> clause );
226227 clause_has_consts [i ] = (args != NULL && has_consts (* args ));
227228 i ++ ;
228229 }
@@ -317,14 +318,14 @@ get_clause_hash(Expr *clause, int nargs, int *args_hash, int *eclass_hash)
317318
318319 cclause = copyObject (clause );
319320 args = get_clause_args_ptr (cclause );
321+ /* XXX: Why does it work even if this loop is removed? */
320322 foreach (l , * args )
321323 {
322324 arg_eclass = get_arg_eclass (get_node_hash (lfirst (l )),
323325 nargs , args_hash , eclass_hash );
324326 if (arg_eclass != 0 )
325327 {
326- lfirst (l ) = makeNode (Param );
327- ((Param * ) lfirst (l ))-> paramid = arg_eclass ;
328+ lfirst (l ) = create_aqo_const_node (AQO_NODE_EXPR , arg_eclass );
328329 }
329330 }
330331 if (!clause_is_eq_clause (clause ) || has_consts (* args ))
@@ -554,7 +555,7 @@ get_arg_eclass(int arg_hash, int nargs, int *args_hash, int *eclass_hash)
554555static void
555556get_clauselist_args (List * clauselist , int * nargs , int * * args_hash )
556557{
557- RestrictInfo * rinfo ;
558+ AQOClause * clause ;
558559 List * * args ;
559560 ListCell * l ;
560561 ListCell * l2 ;
@@ -564,9 +565,9 @@ get_clauselist_args(List *clauselist, int *nargs, int **args_hash)
564565
565566 foreach (l , clauselist )
566567 {
567- rinfo = (RestrictInfo * ) lfirst (l );
568- args = get_clause_args_ptr (rinfo -> clause );
569- if (args != NULL && clause_is_eq_clause (rinfo -> clause ))
568+ clause = (AQOClause * ) lfirst (l );
569+ args = get_clause_args_ptr (clause -> clause );
570+ if (args != NULL && clause_is_eq_clause (clause -> clause ))
570571 foreach (l2 , * args )
571572 if (!IsA (lfirst (l2 ), Const ))
572573 cnt ++ ;
@@ -575,9 +576,9 @@ get_clauselist_args(List *clauselist, int *nargs, int **args_hash)
575576 * args_hash = palloc (cnt * sizeof (* * args_hash ));
576577 foreach (l , clauselist )
577578 {
578- rinfo = (RestrictInfo * ) lfirst (l );
579- args = get_clause_args_ptr (rinfo -> clause );
580- if (args != NULL && clause_is_eq_clause (rinfo -> clause ))
579+ clause = (AQOClause * ) lfirst (l );
580+ args = get_clause_args_ptr (clause -> clause );
581+ if (args != NULL && clause_is_eq_clause (clause -> clause ))
581582 foreach (l2 , * args )
582583 if (!IsA (lfirst (l2 ), Const ))
583584 (* args_hash )[i ++ ] = get_node_hash (lfirst (l2 ));
@@ -632,7 +633,7 @@ disjoint_set_merge_eclasses(int *p, int v1, int v2)
632633static int *
633634perform_eclasses_join (List * clauselist , int nargs , int * args_hash )
634635{
635- RestrictInfo * rinfo ;
636+ AQOClause * clause ;
636637 int * p ;
637638 ListCell * l ,
638639 * l2 ;
@@ -646,9 +647,9 @@ perform_eclasses_join(List *clauselist, int nargs, int *args_hash)
646647
647648 foreach (l , clauselist )
648649 {
649- rinfo = (RestrictInfo * ) lfirst (l );
650- args = get_clause_args_ptr (rinfo -> clause );
651- if (args != NULL && clause_is_eq_clause (rinfo -> clause ))
650+ clause = (AQOClause * ) lfirst (l );
651+ args = get_clause_args_ptr (clause -> clause );
652+ if (args != NULL && clause_is_eq_clause (clause -> clause ))
652653 {
653654 i3 = -1 ;
654655 foreach (l2 , * args )
0 commit comments