summaryrefslogtreecommitdiff
path: root/src/backend/optimizer
AgeCommit message (Collapse)Author
2004-01-21Repair error apparently introduced in the initial coding of GUC: theTom Lane
default value for geqo_effort is supposed to be 40, not 1. The actual 'genetic' component of the GEQO algorithm has been practically disabled since 7.1 because of this mistake. Improve documentation while at it.
2004-01-19Don't return an overoptimistic result from join_in_selectivity whenTom Lane
we have detected that an IN subquery must return unique results.
2004-01-19Recognize that IN subqueries return already-unique results if they useTom Lane
UNION/INTERSECT/EXCEPT (without ALL). This adds on to the previous optimization for subqueries using DISTINCT.
2004-01-18When testing whether a sub-plan can do projection, use a general-purposeTom Lane
check instead of hardwiring assumptions that only certain plan node types can appear at the places where we are testing. This was always a pretty fragile assumption, and it turns out to be broken in 7.4 for certain cases involving IN-subselect tests that need type coercion. Also, modify code that builds finished Plan tree so that node types that don't do projection always copy their input node's targetlist, rather than having the tlist passed in from the caller. The old method makes it too easy to write broken code that thinks it can modify the tlist when it cannot.
2004-01-14Fix permission-checking bug reported by Tim Burgess 10-Feb-03 (this timeTom Lane
for sure...). Rather than relying on the query context of a rangetable entry to identify what permissions it wants checked, store a full AclMode mask in each RTE, and check exactly those bits. This allows an RTE specifying, say, INSERT privilege on a view to be copied into a derived UPDATE query without changing meaning. Per recent discussion thread. initdb forced due to change of stored rule representation.
2004-01-12Fix another place that wasn't maintaining AND/OR flatness of anTom Lane
already-canonicalized qual expression.
2004-01-12Preserve AND/OR flatness during eval_const_expressions(). This seems aTom Lane
useful improvement in any case, and it keeps the new logic for restrictinfo structures happy. Per report from Kris Jurka.
2004-01-10Improve has_nullable_targetlist() to allow strict functions of simpleTom Lane
variables, not just simple variables. This was foreseen in the original coding of this routine, but not implemented until now. Responds to performance gripe from Laurent Perez.
2004-01-10Fix subquery pullup logic to not be fooled when a view that appearsTom Lane
'simple' references another view that is not simple. Must recheck conditions after performing recursive pullup. Per example from Laurent Perez, 9-Jan-04.
2004-01-07Make some improvements in the intelligence of the partial-indexTom Lane
predicate tester. It can now deal with commuted clauses (for instance, 4 < x implies x > 3), subclauses more complicated than a simple Var (for example, upper(x) = 't' implies upper(x) > 'a'), and <> operators (for example, x < 3 implies x <> 4). Still only understands operators associated with btree opclasses, though. Inspired by example from Martin Hampl.
2004-01-07More janitorial work: remove the explicit casting of NULL literals to aNeil Conway
pointer type when it is not necessary to do so. For future reference, casting NULL to a pointer type is only necessary when (a) invoking a function AND either (b) the function has no prototype OR (c) the function is a varargs function.
2004-01-06Instead of rechecking lossy index operators by putting them into theTom Lane
regular qpqual ('filter condition'), add special-purpose code to nodeIndexscan.c to recheck them. This ends being almost no net addition of code, because the removal of planner code balances out the extra executor code, but it is significantly more efficient when a lossy operator is involved in an OR indexscan. The old implementation had to recheck the entire indexqual in such cases.
2004-01-05Adjust indexscan planning logic to keep RestrictInfo nodes associatedTom Lane
with index qual clauses in the Path representation. This saves a little work during createplan and (probably more importantly) allows reuse of cached selectivity estimates during indexscan planning. Also fix latent bug: wrong plan would have been generated for a 'special operator' used in a nestloop-inner-indexscan join qual, because the special operator would not have gotten into the list of quals to recheck. This bug is only latent because at present the special-operator code could never trigger on a join qual, but sooner or later someone will want to do it.
2004-01-05Improve UniquePath logic to detect the case where the input is alreadyTom Lane
known unique (eg, it is a SELECT DISTINCT ... subquery), and not do a redundant unique-ification step.
2004-01-05Dept. of second thoughts: clause_selectivity shouldn't try to cache itsTom Lane
result for jointypes associated with IN processing.
2004-01-05Add the ability to extract OR indexscan conditions from OR-of-ANDTom Lane
join conditions in which each OR subclause includes a constraint on the same relation. This implements the other useful side-effect of conversion to CNF format, without its unpleasant side-effects. As per pghackers discussion of a few weeks ago.
2004-01-04Merge restrictlist_selectivity into clauselist_selectivity byTom Lane
teaching the latter to accept either RestrictInfo nodes or bare clause expressions; and cache the selectivity result in the RestrictInfo node when possible. This extends the caching behavior of approx_selectivity to many more contexts, and should reduce duplicate selectivity calculations.
2004-01-04Rewrite OR indexscan processing to be more flexible. We can now for theTom Lane
first time generate an OR indexscan for a two-column index when the WHERE condition is like 'col1 = foo AND (col2 = bar OR col2 = baz)' --- before, the OR had to be on the first column of the index or we'd not notice the possibility of using it. Some progress towards extracting OR indexscans from subclauses of an OR that references multiple relations, too, although this code is #ifdef'd out because it needs more work.
2003-12-30Adjust the definition of RestrictInfo's left_relids and right_relidsTom Lane
fields: now they are valid whenever the clause is a binary opclause, not only when it is a potential join clause (there is a new boolean field canjoin to signal the latter condition). This lets us avoid recomputing the relid sets over and over while examining indexes. Still more work to do to make this as useful as it could be, because there are places that could use the info but don't have access to the RestrictInfo node.
2003-12-30Instead of trying to force WHERE clauses into CNF or DNF normal form,Tom Lane
just look for common clauses that can be pulled out of ORs. Per recent discussion, extracting common clauses seems to be the only really useful effect of normalization, and if we do it explicitly then we can avoid cluttering the qual with partially-redundant duplicated expressions, which was an unpleasant side-effect of the old approach.
2003-12-29Improve comment.Tom Lane
2003-12-28Clean up the usage of canonicalize_qual(): in particular, be consistentTom Lane
about whether it is applied before or after eval_const_expressions(). I believe there were some corner cases where the system would fail to recognize that a partial index is applicable because of the previous inconsistency. Store normal rather than 'implicit AND' representations of constraints and index predicates in the catalogs. initdb forced due to representation change of constraints/predicates.
2003-12-18Here is the definition of relation_byte_size() in optimizer/path/costsize.c:Bruce Momjian
---------------------------------------------------------------------- /* * relation_byte_size * Estimate the storage space in bytes for a given number of tuples * of a given width (size in bytes). */ static double relation_byte_size(double tuples, int width) { return tuples * (MAXALIGN(width) + MAXALIGN(sizeof(HeapTupleData))); } ---------------------------------------------------------------------- Shouldn't this be HeapTupleHeaderData and not HeapTupleData ? (Of course, from a costing perspective these shouldn't be very different but ...) Sailesh Krishnamurthy
2003-12-18Be a little smarter in group_clauses_by_indexkey_for_join: detect casesTom Lane
where a joinclause is redundant with a restriction clause. Original coding believed this was impossible and didn't need to be checked for, but that was a thinko ...
2003-12-17Repair planner failure when there are multiple IN clauses, each withTom Lane
a join in its subselect. In this situation we *must* build a bushy plan because there are no valid left-sided or right-sided join trees. Accordingly, hoary sanity check needs an update. Per report from Alessandro Depase.
2003-12-09query_tree_mutator should copy RangeTblEntry nodes even when it's notTom Lane
planning to modify them itself. Otherwise we end up with shared RTE substructure, which breaks inheritance_planner because the rte->inh flag needs to be independent in each copied subquery. Per bug report from Chris Piker.
2003-12-08Whole-row references were broken for subqueries and functions, becauseTom Lane
attr_needed/attr_widths optimization failed to allow for Vars with attno zero in this case. Per report from Tatsuo Ishii.
2003-12-03Planner failed to be smart about binary-compatible expressions in pathkeysTom Lane
and hash bucket-size estimation. Issue has been there awhile but is more critical in 7.4 because it affects varchar columns. Per report from Greg Stark.
2003-11-29make sure the $Id tags are converted to $PostgreSQL as well ...PostgreSQL Daemon
2003-11-29$Header: -> $PostgreSQL Changes ...PostgreSQL Daemon
2003-11-25Repair subselect.c's occasional assignment of the wrong vartypmod toTom Lane
Vars created to fill subplan args lists. This is an ancient error, going back at least to 7.0, but is more easily triggered in 7.4 than before because we no longer compare varlevelsup when deciding whether a Param slot can be re-used. Fixes bug reported by Klint Gore.
2003-11-25Get rid of hashkeys field of Hash plan node, since it's redundant withTom Lane
the hashclauses field of the parent HashJoin. This avoids problems with duplicated links to SubPlans in hash clauses, as per report from Andrew Holm-Hansen.
2003-11-12Cross-data-type comparisons are now indexable by btrees, pursuant to myTom Lane
pghackers proposal of 8-Nov. All the existing cross-type comparison operators (int2/int4/int8 and float4/float8) have appropriate support. The original proposal of storing the right-hand-side datatype as part of the primary key for pg_amop and pg_amproc got modified a bit in the event; it is easier to store zero as the 'default' case and only store a nonzero when the operator is actually cross-type. Along the way, remove the long-since-defunct bigbox_ops operator class.
2003-11-09Add operator strategy and comparison-value datatype fields to ScanKey.Tom Lane
Remove the 'strategy map' code, which was a large amount of mechanism that no longer had any use except reverse-mapping from procedure OID to strategy number. Passing the strategy number to the index AM in the first place is simpler and faster. This is a preliminary step in planned support for cross-datatype index operations. I'm committing it now since the ScanKeyEntryInitialize() API change touches quite a lot of files, and I want to commit those changes before the tree drifts under me.
2003-11-05Fix for this problem:Tom Lane
regression=# select 1 from tenk1 ta cross join tenk1 tb for update; ERROR: no relation entry for relid 3 7.3 said "SELECT FOR UPDATE cannot be applied to a join", which was better but still wrong, considering that 7.2 took the query just fine. Fix by making transformForUpdate() ignore JOIN and other special RTE types, rather than trying to mark them FOR UPDATE. The actual error message now only appears if you explicitly name the join in FOR UPDATE.
2003-10-29Give a useful error message if a RangeVar is encountered in an expression.Tom Lane
Per example from Ian Barwick, 28-Oct-03.
2003-10-18Repair interaction between IN-join processing and subselect pullup thatTom Lane
I inadvertently broke a few days ago (per report from Sean Thomas). Add regression test case to try to catch any similar breakage in future.
2003-10-13pull_up_subqueries() should copy the subquery before starting to modifyTom Lane
it. Not sure why I'd thought it would be a good idea to do differently way back when, but Greg Stark exposed the folly of doing so ...
2003-10-05Add a little more smarts to estimate_hash_bucketsize(): if there's noTom Lane
statistics, but there is a unique index on the column, we can safely assume it's well-distributed.
2003-09-25Message editing: remove gratuitous variations in message wording, standardizePeter Eisentraut
terms, add some clarifications, fix some untranslatable attempts at dynamic message building.
2003-09-07Remove geqo_random_seed parameter. Having geqo reset the global random()Tom Lane
sequence every time it's called is bogus --- it interferes with user control over the seed, and actually decreases randomness overall (because a seed based on time(NULL) is pretty predictable). If you really want a reproducible result from geqo, do 'set seed = 0' before planning a query.
2003-08-27Department of second thoughts: can't reorder merge-join clauses.Tom Lane
2003-08-26Push subplan clauses to the back in qual lists for join plans, notTom Lane
only scan plans. Per observation from Rod Taylor.
2003-08-17Fix ARRAY[] construct so that in multidimensional case, elements canTom Lane
be anything yielding an array of the proper kind, not only sub-ARRAY[] constructs; do subscript checking at runtime not parse time. Also, adjust array_cat to make array || array comply with the SQL99 spec. Joe Conway
2003-08-17Create a 'type cache' that keeps track of the data needed for any particularTom Lane
datatype by array_eq and array_cmp; use this to solve problems with memory leaks in array indexing support. The parser's equality_oper and ordering_oper routines also use the cache. Change the operator search algorithms to look for appropriate btree or hash index opclasses, instead of assuming operators named '<' or '=' have the right semantics. (ORDER BY ASC/DESC now also look at opclasses, instead of assuming '<' and '>' are the right things.) Add several more index opclasses so that there is no regression in functionality for base datatypes. initdb forced due to catalog additions.
2003-08-12Change some frequently-reached elog(DEBUG...) calls to ereport(DEBUG...)Tom Lane
for speed reasons. (ereport falls out much more quickly when no output is needed than elog does.)
2003-08-11Rewriter and planner should use only resno, not resname, to identifyTom Lane
target columns in INSERT and UPDATE targetlists. Don't rely on resname to be accurate in ruleutils, either. This fixes bug reported by Donald Fraser, in which renaming a column referenced in a rule did not work very well.
2003-08-11Code cleanup inspired by recent resname bug report (doesn't fix the bugTom Lane
yet, though). Avoid using nth() to fetch tlist entries; provide a common routine get_tle_by_resno() to search a tlist for a particular resno. This replaces a couple uses of nth() and a dozen hand-coded search loops. Also, replace a few uses of nth(length-1, list) with llast().
2003-08-08Another pgindent run with updated typedefs.Bruce Momjian
2003-08-07create_unique_plan() should not discard existing output columns of theTom Lane
subplan it starts with, as they may be needed at upper join levels. See comments added to code for the non-obvious reason why. Per bug report from Robert Creager.