MCPcopy Create free account
hub / github.com/MariaDB/server / get_index_for_order

Function get_index_for_order

sql/sql_select.cc:33637–33719  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33635*/
33636
33637uint get_index_for_order(ORDER *order, TABLE *table, SQL_SELECT *select,
33638 ha_rows limit, ha_rows *scanned_limit,
33639 bool *need_sort, bool *reverse)
33640{
33641 if (!order)
33642 {
33643 *need_sort= FALSE;
33644 if (select && select->quick)
33645 return select->quick->index; // index or MAX_KEY, use quick select as is
33646 else
33647 return table->file->key_used_on_scan; // MAX_KEY or index for some engine
33648 }
33649
33650 if (!is_simple_order(order)) // just to cut further expensive checks
33651 {
33652 *need_sort= TRUE;
33653 return MAX_KEY;
33654 }
33655
33656 if (select && select->quick)
33657 {
33658 if (select->quick->index == MAX_KEY)
33659 {
33660 *need_sort= TRUE;
33661 return MAX_KEY;
33662 }
33663
33664 uint used_key_parts;
33665 switch (test_if_order_by_key(NULL, order, table, select->quick->index,
33666 &used_key_parts)) {
33667 case 1: // desired order
33668 *need_sort= FALSE;
33669 *scanned_limit= MY_MIN(limit, select->quick->records);
33670 return select->quick->index;
33671 case 0: // unacceptable order
33672 *need_sort= TRUE;
33673 return MAX_KEY;
33674 case -1: // desired order, but opposite direction
33675 {
33676 QUICK_SELECT_I *reverse_quick;
33677 if ((reverse_quick=
33678 select->quick->make_reverse(used_key_parts)))
33679 {
33680 select->set_quick(reverse_quick);
33681 *need_sort= FALSE;
33682 *scanned_limit= MY_MIN(limit, select->quick->records);
33683 return select->quick->index;
33684 }
33685 else
33686 {
33687 *need_sort= TRUE;
33688 return MAX_KEY;
33689 }
33690 }
33691 }
33692 DBUG_ASSERT(0);
33693 }
33694 else if (limit != HA_POS_ERROR)

Callers 2

update_single_tableMethod · 0.85

Calls 6

is_simple_orderFunction · 0.85
test_if_order_by_keyFunction · 0.85
test_if_cheaper_orderingFunction · 0.85
set_quickMethod · 0.80
stat_recordsMethod · 0.80
make_reverseMethod · 0.45

Tested by

no test coverage detected