27
27
28
28
#include "aqo.h"
29
29
#include "hash.h"
30
+ #include "path_utils.h"
30
31
31
32
static int get_str_hash (const char * str );
32
33
static int get_node_hash (Node * node );
@@ -218,11 +219,11 @@ get_fss_for_object(List *relsigns, List *clauselist,
218
219
i = 0 ;
219
220
foreach (lc , clauselist )
220
221
{
221
- RestrictInfo * rinfo = lfirst_node ( RestrictInfo , lc );
222
+ AQOClause * clause = ( AQOClause * ) lfirst ( lc );
222
223
223
- clause_hashes [i ] = get_clause_hash (rinfo -> clause ,
224
+ clause_hashes [i ] = get_clause_hash (clause -> clause ,
224
225
nargs , args_hash , eclass_hash );
225
- args = get_clause_args_ptr (rinfo -> clause );
226
+ args = get_clause_args_ptr (clause -> clause );
226
227
clause_has_consts [i ] = (args != NULL && has_consts (* args ));
227
228
i ++ ;
228
229
}
@@ -317,14 +318,14 @@ get_clause_hash(Expr *clause, int nargs, int *args_hash, int *eclass_hash)
317
318
318
319
cclause = copyObject (clause );
319
320
args = get_clause_args_ptr (cclause );
321
+ /* XXX: Why does it work even if this loop is removed? */
320
322
foreach (l , * args )
321
323
{
322
324
arg_eclass = get_arg_eclass (get_node_hash (lfirst (l )),
323
325
nargs , args_hash , eclass_hash );
324
326
if (arg_eclass != 0 )
325
327
{
326
- lfirst (l ) = makeNode (Param );
327
- ((Param * ) lfirst (l ))-> paramid = arg_eclass ;
328
+ lfirst (l ) = create_aqo_const_node (AQO_NODE_EXPR , arg_eclass );
328
329
}
329
330
}
330
331
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)
554
555
static void
555
556
get_clauselist_args (List * clauselist , int * nargs , int * * args_hash )
556
557
{
557
- RestrictInfo * rinfo ;
558
+ AQOClause * clause ;
558
559
List * * args ;
559
560
ListCell * l ;
560
561
ListCell * l2 ;
@@ -564,9 +565,9 @@ get_clauselist_args(List *clauselist, int *nargs, int **args_hash)
564
565
565
566
foreach (l , clauselist )
566
567
{
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 ))
570
571
foreach (l2 , * args )
571
572
if (!IsA (lfirst (l2 ), Const ))
572
573
cnt ++ ;
@@ -575,9 +576,9 @@ get_clauselist_args(List *clauselist, int *nargs, int **args_hash)
575
576
* args_hash = palloc (cnt * sizeof (* * args_hash ));
576
577
foreach (l , clauselist )
577
578
{
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 ))
581
582
foreach (l2 , * args )
582
583
if (!IsA (lfirst (l2 ), Const ))
583
584
(* args_hash )[i ++ ] = get_node_hash (lfirst (l2 ));
@@ -632,7 +633,7 @@ disjoint_set_merge_eclasses(int *p, int v1, int v2)
632
633
static int *
633
634
perform_eclasses_join (List * clauselist , int nargs , int * args_hash )
634
635
{
635
- RestrictInfo * rinfo ;
636
+ AQOClause * clause ;
636
637
int * p ;
637
638
ListCell * l ,
638
639
* l2 ;
@@ -646,9 +647,9 @@ perform_eclasses_join(List *clauselist, int nargs, int *args_hash)
646
647
647
648
foreach (l , clauselist )
648
649
{
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 ))
652
653
{
653
654
i3 = -1 ;
654
655
foreach (l2 , * args )
0 commit comments