8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-22 14:43:03 +01:00
This commit is contained in:
robocop 2005-02-21 06:01:01 +00:00
parent 04defe2dee
commit 854da4e241
4 changed files with 10 additions and 11 deletions

View File

@ -25,7 +25,7 @@ B) Try to deliver conjuntions made on a UNION inside every single stream.
C) Cardinality calculation has been improved for a better estimated value.
D) MERGE/SORT operation may now be generated for inner joins using equality
comparsion on expressions.
comparison on expressions.
SELECT Count(*) FROM
Relations r
@ -33,7 +33,7 @@ D) MERGE/SORT operation may now be generated for inner joins using equality
WHERE
rc.CategoryID = 3
E) When a UNIQUE index can be fully matched (equality) used on a relation, use this
E) When a UNIQUE index used on a relation can be fully matched (equality), use this
index and forget any possible indexes.
F) Indexed order read with an OUTER JOIN.
@ -56,7 +56,7 @@ G) Ignore NULL values in index scan for operators other than IS NULL and Equival
Note: This works currently only at single segment indexes.
H) Calculate with more accurate selectivity for compound indexes which are partially
H) Calculate with more accuracy selectivity for compound indexes which are partially
matched with conjunctions. Due this we can now use cost-based approach also for
partially matched indexes.
@ -76,7 +76,7 @@ J) STARTING WITH can be used inside compound indexes on every segment, but only
SELECT * FROM Relations WHERE FirstName = 'Joe' and LastName STARTING WITH 'D'
K) Use AND conjunctions also inside OR conjunctions to help with matching on a
compound index. The same calculation for every left and right node of a OR
compound index. The same calculation for every left and right node of an OR
conjunction is used as for the AND conjunctions.
Example:

View File

@ -1227,10 +1227,10 @@ InversionCandidate* OptimizerRetrieval::generateInversion(RecordSource** rsb)
// very safe at the moment, but in our case Array holds a sorted list.
// However SortedArray class should be updated to handle join right!
matches.join(invCandidate->matches);
size_t pos;
tail = optimizer->opt_conjuncts.begin();
for (; tail < opt_end; tail++) {
if (!(tail->opt_conjunct_flags & opt_conjunct_used)) {
size_t pos;
if (matches.find(tail->opt_conjunct_node, pos)) {
tail->opt_conjunct_flags |= opt_conjunct_matched;
}

View File

@ -1561,12 +1561,12 @@ bool Mnt::get()
const char* start = device;
if (n<5)
{ return false;}
return false;
const char* iflag = strchr(device, ':');
if (iflag)
{
node = tstring( start , size_t(iflag-start) );
node = tstring( start , size_t(iflag - start) );
path = tstring( ++iflag );
}
else {

View File

@ -4716,10 +4716,9 @@ static RecordSource* gen_retrieval(thread_db* tdbb,
const bool ods11orHigher = (dbb->dbb_ods_version >= ODS_VERSION11);
if (ods11orHigher && !relation->rel_file) {
// For ODS11 and higher databases we can use new calculations
InversionCandidate* candidate = NULL;
OptimizerRetrieval* optimizerRetrieval = FB_NEW(*tdbb->getDefaultPool())
OptimizerRetrieval(*tdbb->getDefaultPool(), opt, stream, outer_flag, inner_flag, sort_ptr);
candidate = optimizerRetrieval->getInversion(&rsb);
InversionCandidate* candidate = optimizerRetrieval->getInversion(&rsb);
if (candidate && candidate->inversion) {
inversion = candidate->inversion;
}
@ -5735,11 +5734,11 @@ static jrd_nod* get_unmapped_node(thread_db* tdbb, jrd_nod* node,
SET_TDBB(tdbb);
// Check if node is a mapping and if so unmap it, but
// only for root nodes (not contained in an other node).
// only for root nodes (not contained in another node).
// This can be expanded by checking complete expression
// (Then don't forget to leave aggregate-functions alone
// in case of aggregate rse)
// Because this is only to help using a index we keep
// Because this is only to help using an index we keep
// it simple.
if ((node->nod_type == nod_field) &&
((USHORT)(IPTR) node->nod_arg[e_fld_stream] == shellStream))