summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-05-31 10:28:59 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-05-31 10:28:59 +0300
commit4a0b56f60436cab3f2f60b15ec699cb19c1e10ba (patch)
tree141f7f177748f763dab14484514453cec367c585 /sql/sql_select.cc
parent0bf843cd13981b03920bfc49c646b28a130f5d47 (diff)
parent6da14d7b4a935466de55a6aa87db14bc359dbd30 (diff)
downloadmariadb-git-4a0b56f60436cab3f2f60b15ec699cb19c1e10ba.tar.gz
Merge 10.4 into 10.5
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc23
1 files changed, 17 insertions, 6 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 0774dc15ef8..2347162ff84 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -1036,10 +1036,16 @@ int SELECT_LEX::vers_setup_conds(THD *thd, TABLE_LIST *tables)
if (vers_conditions.is_set())
{
+ if (vers_conditions.was_set() &&
+ table->lock_type > TL_READ_NO_INSERT &&
+ !vers_conditions.delete_history)
+ {
+ my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE, MYF(0), table->alias.str);
+ DBUG_RETURN(-1);
+ }
+
if (vers_conditions.type == SYSTEM_TIME_ALL)
continue;
-
- lock_type= TL_READ; // ignore TL_WRITE, history is immutable anyway
}
bool timestamps_only= table->table->versioned(VERS_TIMESTAMP);
@@ -2768,11 +2774,16 @@ int JOIN::optimize_stage2()
}
need_tmp= test_if_need_tmp_table();
- //TODO this could probably go in test_if_need_tmp_table.
- if (this->select_lex->window_specs.elements > 0) {
- need_tmp= TRUE;
+
+ /*
+ If window functions are present then we can't have simple_order set to
+ TRUE as the window function needs a temp table for computation.
+ ORDER BY is computed after the window function computation is done, so
+ the sort will be done on the temp table.
+ */
+ if (select_lex->have_window_funcs())
simple_order= FALSE;
- }
+
/*
If the hint FORCE INDEX FOR ORDER BY/GROUP BY is used for the table