mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Move pattern selectivity code from selfuncs.c to like_support.c.
While at it, refactor patternsel() a bit so that it can be used from the LIKE/regex planner support functions as well. This makes the planner able to deal equally well with either operator or function syntax for these operations. I'm not excited about that as a feature in itself, but it provides a nice model for extensions to follow if they want such behavior for their operations. This change localizes the use of pattern_fixed_prefix() and make_greater_string() so that they no longer need be exported. (We might get pushback from extensions about that, perhaps, in which case I'd be inclined to re-export them in a new header file like_support.h.) This reduces the bulk of selfuncs.c a fair amount, removing ~1370 lines or about one-sixth of that file; it's still too big, but this is progress. Discussion: https://postgr.es/m/24537.1550093915@sss.pgh.pa.us
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -15,7 +15,6 @@
 | 
				
			|||||||
#ifndef SELFUNCS_H
 | 
					#ifndef SELFUNCS_H
 | 
				
			||||||
#define SELFUNCS_H
 | 
					#define SELFUNCS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "fmgr.h"
 | 
					 | 
				
			||||||
#include "access/htup.h"
 | 
					#include "access/htup.h"
 | 
				
			||||||
#include "nodes/pathnodes.h"
 | 
					#include "nodes/pathnodes.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,20 +84,6 @@ typedef struct VariableStatData
 | 
				
			|||||||
	} while(0)
 | 
						} while(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef enum
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Pattern_Type_Like,
 | 
					 | 
				
			||||||
	Pattern_Type_Like_IC,
 | 
					 | 
				
			||||||
	Pattern_Type_Regex,
 | 
					 | 
				
			||||||
	Pattern_Type_Regex_IC,
 | 
					 | 
				
			||||||
	Pattern_Type_Prefix
 | 
					 | 
				
			||||||
} Pattern_Type;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef enum
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Pattern_Prefix_None, Pattern_Prefix_Partial, Pattern_Prefix_Exact
 | 
					 | 
				
			||||||
} Pattern_Prefix_Status;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * deconstruct_indexquals is a simple function to examine the indexquals
 | 
					 * deconstruct_indexquals is a simple function to examine the indexquals
 | 
				
			||||||
 * attached to a proposed IndexPath.  It returns a list of IndexQualInfo
 | 
					 * attached to a proposed IndexPath.  It returns a list of IndexQualInfo
 | 
				
			||||||
@@ -175,14 +160,16 @@ extern double histogram_selectivity(VariableStatData *vardata, FmgrInfo *opproc,
 | 
				
			|||||||
					  Datum constval, bool varonleft,
 | 
										  Datum constval, bool varonleft,
 | 
				
			||||||
					  int min_hist_size, int n_skip,
 | 
										  int min_hist_size, int n_skip,
 | 
				
			||||||
					  int *hist_size);
 | 
										  int *hist_size);
 | 
				
			||||||
 | 
					extern double ineq_histogram_selectivity(PlannerInfo *root,
 | 
				
			||||||
extern Pattern_Prefix_Status pattern_fixed_prefix(Const *patt,
 | 
											   VariableStatData *vardata,
 | 
				
			||||||
					 Pattern_Type ptype,
 | 
											   FmgrInfo *opproc, bool isgt, bool iseq,
 | 
				
			||||||
					 Oid collation,
 | 
											   Datum constval, Oid consttype);
 | 
				
			||||||
					 Const **prefix,
 | 
					extern double var_eq_const(VariableStatData *vardata, Oid oproid,
 | 
				
			||||||
					 Selectivity *rest_selec);
 | 
								 Datum constval, bool constisnull,
 | 
				
			||||||
extern Const *make_greater_string(const Const *str_const, FmgrInfo *ltproc,
 | 
								 bool varonleft, bool negate);
 | 
				
			||||||
					Oid collation);
 | 
					extern double var_eq_non_const(VariableStatData *vardata, Oid oproid,
 | 
				
			||||||
 | 
									 Node *other,
 | 
				
			||||||
 | 
									 bool varonleft, bool negate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern Selectivity boolvarsel(PlannerInfo *root, Node *arg, int varRelid);
 | 
					extern Selectivity boolvarsel(PlannerInfo *root, Node *arg, int varRelid);
 | 
				
			||||||
extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype,
 | 
					extern Selectivity booltestsel(PlannerInfo *root, BoolTestType booltesttype,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user