Commit graph

1686 commits

Author SHA1 Message Date
Aleksey Midenkov
ababd6a935 SQL: destroy Vers_min_max_stats [] 2017-11-27 18:28:56 +03:00
Marko Mäkelä
0b89a42ffc Remove the flag vers_update_trt
THD::vers_update_trt, trx_t::vers_update_trt, trx_savept_t::vers_update_trt:
Remove. Instead, determine from trx_t::mod_tables whether versioned
columns were affected by the transaction.

handlerton::prepare_commit_versioned: Replaces vers_get_trt_data.
Return the transaction start ID and also the commit ID, in case
the transaction modified any system-versioned columns (0 if not).

TR_table::store_data(): Remove (merge with update() below).

TR_table::update(): Add the parameters start_id, end_id.

ha_commit_trans(): Remove a condition on SQLCOM_ALTER_TABLE.
If we need something special for ALTER TABLE...ALGORITHM=INPLACE,
that can be done inside InnoDB by modifying trx_t::mod_tables.

innodb_prepare_commit_versioned(): Renamed from innodb_get_trt_data().
Check trx_t::mod_tables to see if any changes to versioned columns
are present.

trx_mod_table_time_t: A pair of logical timestamps, replacing the
undo_no_t in trx_mod_tables_t. Keep track of not only the first
modification to a persistent table in each transaction, but also
the first modification of a versioned column in a table.

dtype_t, dict_col_t: Add the accessor is_any_versioned(), to check
if the type refers to a system-versioned user or system column.

upd_t::affects_versioned(): Check if an update affects a versioned
column.

trx_undo_report_row_operation(): If a versioned column is affected
by the update, invoke trx_mod_table_time_t::set_versioned().

trx_rollback_to_savepoint_low(): If all changes to versioned columns
were rolled back, invoke trx_mod_table_time_t::rollback_versioned(),
so that trx_mod_table_time_t::is_versioned() will no longer hold.
2017-11-27 15:07:33 +03:00
Eugene Kosov
0cdc1164dc SQL, IB: various refactoring [] 2017-11-27 15:07:32 +03:00
Aleksey Midenkov
6e0b2c7fe0 System Versioning 1.0pre2
Merge branch '10.3' into trunk
2017-11-23 19:41:44 +03:00
Aleksey Midenkov
cbe93291e4 SQL,IB: add auto_inc copy mode fix []
Related to .

Extra update of sys_trx_start removed [].
2017-11-23 18:31:55 +03:00
Aleksey Midenkov
5994b6873c Daemon: TRT check doesn't abort [fixes ]
Added schema check logging messages.
2017-11-22 22:20:14 +03:00
Aleksey Midenkov
a4439fef96 SQL: don't update TRT when altered [, ]
Tests affected: main.mysqlcheck
2017-11-17 14:28:45 +03:00
Michael Widenius
5b3da95bf3 Simplify fn_rext
- Change interface according to real usage
- Fix comment
- Rename to fn_frm_ext
2017-11-17 07:30:05 +02:00
Aleksey Midenkov
72274c10f0 SQL: TRT failure fixes [closes ]
Unclosed stmt transaction
TRT failure in inplace

Related to 
2017-11-15 00:22:12 +03:00
Eugene Kosov
08099bc05a Daemon: check TRT schema [closes ] 2017-11-15 00:22:11 +03:00
Aleksey Midenkov
33085349e9 IB, SQL: removed VTQ, added TRT on SQL layer [closes ] 2017-11-15 00:22:10 +03:00
Aleksey Midenkov
d8d7251019 System Versioning pre0.12
Merge remote-tracking branch 'origin/archive/2017-10-17' into 10.3
2017-11-07 00:37:49 +03:00
Alexander Barkov
835cbbcc7b Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3
TODO: enable MDEV-13049 optimization for 10.3
2017-10-30 20:47:39 +04:00
Alexander Barkov
003cb2f424 Merge remote-tracking branch 'origin/10.2' into bb-10.2-ext 2017-10-30 16:42:46 +04:00
Sergei Golubchik
e0a1c745ec Merge branch '10.1' into 10.2 2017-10-24 14:53:18 +02:00
Sergei Golubchik
9d2e2d7533 Merge branch '10.0' into 10.1 2017-10-22 13:03:41 +02:00
Sergei Golubchik
da4503e956 Merge branch '5.5' into 10.0 2017-10-18 15:14:39 +02:00
Oleksandr Byelkin
235b68299b MDEV-9619: Assertion `null_ref_table' failed in virtual table_map Item_direct_view_ref::used_tables() const on 2nd execution of PS
Refer left expression indirectly in case it changes from execution to execution.
2017-10-13 19:32:38 +02:00
Eugene Kosov
a4c23ac720 remove unndeded class member variable 2017-10-11 12:04:15 +04:00
Aleksey Midenkov
1d056f5abc SQL: not a VTMD table warning [related to ] 2017-10-03 00:31:44 +03:00
Aleksey Midenkov
904b69cd9e SQL: partitioning misc fixes [closes ]
* cleanup: *never* use assert(A && B)
* vers_setup_1() revisited
* vers_setup_2() renamed
* partition_element::type removed
* Copy ctor instead of memcpy()
* Handle return value from check_range_constants()
* Malloc error fix
* error, style, misc fixes
2017-09-07 15:49:11 +03:00
Aleksey Midenkov
a734c2f0fb Style: partitioning, sysvars, handler fixes
* Sys_var_vers_asof formatting
* Vers_field_stats renamed to Vers_min_max_stats
* Item_temporal_literal::set_lower()/set_higher() replaced by operator>()/operator<()
* handler API comments
2017-09-06 23:40:13 +03:00
Monty
536215e32f Added DBUG_ASSERT_AS_PRINTF compile flag
If compiling a non DBUG binary with
-DDBUG_ASSERT_AS_PRINTF asserts will be
changed to printf + stack trace (of stack
trace are enabled).

- Changed #ifndef DBUG_OFF to
  #ifdef DBUG_ASSERT_EXISTS
  for those DBUG_OFF that was just used to enable
  assert
- Assert checking that could greatly impact
  performance where changed to DBUG_ASSERT_SLOW which
  is not affected by DBUG_ASSERT_AS_PRINTF
- Added one extra option to my_print_stacktrace() to
  get more silent in case of stack trace printing as
  part of assert.
2017-08-24 01:05:50 +02:00
Michael Widenius
8bfda2f0af Simplify test if we can use table in query cache
- Added TABLE_SHARE->not_usable_by_query_cache
- Moved TABLE->no_replicate to TABLE_SHARE->no_replicate as it's same for
  all TABLE instances
- Renamed TABLE_SHARE->cached_row_logging_check to can_do_row_logging
2017-08-24 01:05:49 +02:00
Michael Widenius
4aaa38d26e Enusure that my_global.h is included first
- Added sql/mariadb.h file that should be included first by files in sql
  directory, if sql_plugin.h is not used (sql_plugin.h adds SHOW variables
  that must be done before my_global.h is included)
- Removed a lot of include my_global.h from include files
- Removed include's of some files that my_global.h automatically includes
- Removed duplicated include's of my_sys.h
- Replaced include my_config.h with my_global.h
2017-08-24 01:05:44 +02:00
Alexander Barkov
6db1b0188c Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3 2017-08-15 07:52:48 +04:00
Igor Babaev
b14e2b044b This first patch prepared for the task MDEV-13369:
"Optimization for equi-joins of derived tables with GROUP BY"
should be considered rather as a 'proof of concept'.

The task itself is targeted at an optimization that employs re-writing
equi-joins with grouping derived tables / views into lateral
derived tables. Here's an example of such transformation:
  select t1.a,t.max,t.min
  from t1 [left] join
       (select a, max(t2.b) max, min(t2.b) min from t2
       group by t2.a) as t
       on t1.a=t.a;
=>
  select t1.a,tl.max,tl.min
  from t1 [left] join
       lateral (select a, max(t2.b) max, min(t2.b) min from t2
                where  t1.a=t2.a) as t
       on 1=1;
The transformation pushes the equi-join condition t1.a=t.a into the
derived table making it dependent on table t1. It means that for
every row from t1 a new derived table must be filled out. However
the size of any of these derived tables is just a fraction of the
original derived table t. One could say that transformation 'splits'
the rows used for the GROUP BY operation into separate groups
performing aggregation for a group only in the case when there is
a match for the current row of t1.
Apparently the transformation may produce a query with a better
performance only in the case when
 - the GROUP BY list refers only to fields returned by the derived table
 - there is an index I on one of the tables T used in FROM list of
   the specification of the derived table whose prefix covers the
   the fields from the proper beginning of the GROUP BY list or
   fields that are equal to those fields.
Whether the result of the re-writing can be executed faster depends
on many factors:
  - the size of the original derived table
  - the size of the table T
  - whether the index I is clustering for table T
  - whether the index I fully covers the GROUP BY list.

This patch only tries to improve the chosen execution plan using
this transformation. It tries to do it only when the chosen
plan reaches the derived table by a key whose prefix covers
all the fields of the derived table produced by the fields of
the table T from the GROUP BY list.
The code of the patch does not evaluates the cost of the improved
plan. If certain conditions are met the transformation is applied.
2017-08-10 14:26:29 -07:00
Aleksey Midenkov
d3d2ea9fd5 SQL, Parser: system_time logic and syntax fixes [closes ] 2017-08-08 17:12:16 +03:00
Alexander Barkov
3b9273d203 Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3 2017-07-05 17:43:32 +04:00
Alexander Barkov
58dd72f18c MDEV-13245 Add struct AUTHID 2017-07-05 17:18:33 +04:00
Alexander Barkov
96d1cdecbe MDEV-13197 Parser refactoring for CREATE VIEW,TRIGGER,SP,UDF,EVENT 2017-07-01 14:37:12 +04:00
Eugene Kosov
ac5eb9771e SQL: Versioned SHOW CREATE TABLE [closes ] 2017-06-19 15:21:48 +03:00
Aleksey Midenkov
448374a228 SQL, IB: (0.10) VTMD tracking [closes ]
IB: Fixes in logic when to do versioned or usual row updates. Now it is
able to do unversioned updates for versioned tables just by disabling
`TABLE_SHARE::versioned` flag.

SQL: DDL tracking for:
* RENAME TABLE, ALTER TABLE .. RENAME TO;
* DROP TABLE;
* data-modifying operations (f.ex. ALTER TABLE .. ADD/DROP COLUMN).
2017-06-19 15:21:39 +03:00
Alexander Barkov
314350a722 Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3 2017-05-07 23:51:18 +04:00
Aleksey Midenkov
8a11f9b243 SQL: VIEW fix [related to ] 2017-05-05 20:36:39 +03:00
Aleksey Midenkov
7153ff85a1 SQL: derived tables improvements [closes ] 2017-05-05 20:36:38 +03:00
Aleksey Midenkov
1e8a81dea6 SQL: CREATE VIEW and misc improvements [fixes ] 2017-05-05 20:36:37 +03:00
Aleksey Midenkov
9e9af76eaf SQL: vers_current_time refactoring [closes ]
* session sysvars;
* moved value parsing to set variable phase;
* renamed 'temporal_current_timestamp' to 'vers_current_time'.
2017-05-05 20:36:34 +03:00
kevg
21e8b22f53 Misc: vers_select_conds_t::init_from_sysvar() 2017-05-05 20:36:32 +03:00
kevg
7aa3ebdd18 SQL, Tests: FOR SYSTEM_TIME for VIEWs [closes ] 2017-05-05 20:36:27 +03:00
Aleksey Midenkov
26a3ff0a22 SQL: (0.6) Pruning for VERSIONING partitions [closes ]
* based on RANGE pruning by COLUMNS (sys_trx_end) condition
* removed DEFAULT; AS OF NOW is always last; current VERSIONING as last non-empty (or first empty)
* Min/Max stats in TABLE_SHARE
* ALTER TABLE ADD PARTITION adds before AS OF NOW partition
2017-05-05 20:36:25 +03:00
kevg
e069de7d9d SQL: TRUNCATE FOR SYSTEM_TIME BEFORE [closes ] 2017-05-05 20:36:25 +03:00
Aleksey Midenkov
3a64d55aed Parser, SQL: table-specific FOR SYSTEM_TIME [closes ]
* Syntax sugar: query-global QUERY FOR SYSTEM_TIME
2017-05-05 20:36:25 +03:00
kevg
abb2f9488d IB: skip sys_trx_start when comparing master and slave rows [closes ] 2017-05-05 20:36:24 +03:00
Aleksey Midenkov
ea60760e47 SQL: missed FOR SYSTEM_TIME ALL for FOR_SYSTEM_TIME_UNSPECIFIED
[fixes ]
2017-05-05 20:36:23 +03:00
Aleksey Midenkov
412dd1e1f3 SQL: FOR SYSTEM_TIME support in VIEW expression [fixes ] 2017-05-05 20:36:23 +03:00
Aleksey Midenkov
e851c140f4 SQL: (0.5) Versioned partitions [closes ]
* one `AS OF NOW`, multiple `VERSIONING` partitions;
* rotation of `VERSIONING` partitions by record count, time period;
* rotation is multi-threaded;
* conventional subpartitions as bottom level for versioned partitions;
* `DEFAULT` keyword selects first `VERSIONING` partition;
* ALTER TABLE ADD/DROP partition;
* REBUILD PARTITION basic operation.
2017-05-05 20:36:21 +03:00
kevg
dc4ef66fee SQL: optimize FOR SYSTEM_TIME ALL queries [closes ] 2017-05-05 20:36:21 +03:00
Aleksey Midenkov
6d89a4a49b Parser, SQL: (0.4) TRANSACTION support in queries
Syntax extension: TIMESTAMP/TRANSACTION keyword can be used before FROM ... TO, BETWEEN ... AND.
Example:
    SELECT * FROM t1 FOR SYSTEM_TIME TIMESTAMP FROM '1-1-1' TO NOW();

Closes 
2017-05-05 20:36:15 +03:00
Aleksey Midenkov
6ccae7369b SQL: fixed LEFT JOIN, RIGHT JOIN 2017-05-05 20:36:11 +03:00