1. 26 May, 2021 7 commits
    • Monty's avatar
      552bb1af
    • Monty's avatar
      Replace item->marker= # with Item->marker= DEFINE · e8a54a37
      Monty authored
      - Better, easier to read code (no used of 'random' constants).
      - All defines are now unique, so it is easier to find bugs if
        somethings goes wrong.
      
      Other things:
      - Created sub function of common code in Aggregator_distinct::setup() and
        Item_func_group_concat::setup() that set item->marker
      - More documentation
      - Folded a few long lines.
      - Allmost all changes in item.cc, sql_lex.cc and sql_window.cc are done
        with 'replace'.
      e8a54a37
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 860e7543
      Marko Mäkelä authored
      860e7543
    • Marko Mäkelä's avatar
      Merge 10.4 into 10.5 · 365cd083
      Marko Mäkelä authored
      365cd083
    • Igor Babaev's avatar
      MDEV-23886 Reusing CTE inside a function fails with table doesn't exist · 675716e1
      Igor Babaev authored
      In the code existed just before this patch binding of a table reference to
      the specification of the corresponding CTE happens in the function
      open_and_process_table(). If the table reference is not the first in the
      query the specification is cloned in the same way as the specification of
      a view is cloned for any reference of the view. This works fine for
      standalone queries, but does not work for stored procedures / functions
      for the following reason.
      When the first call of a stored procedure/ function SP is processed the
      body of SP is parsed. When a query of SP is parsed the info on each
      encountered table reference is put into a TABLE_LIST object linked into
      a global chain associated with the query. When parsing of the query is
      finished the basic info on the table references from this chain except
      table references to derived tables and information schema tables is put
      in one hash table associated with SP. When parsing of the body of SP is
      finished this hash table is used to construct TABLE_LIST objects for all
      table references mentioned in SP and link them into the list of such
      objects passed to a pre-locking process that calls open_and_process_table()
      for each table from the list.
      When a TABLE_LIST for a view is encountered the view is opened and its
      specification is parsed. For any table reference occurred in
      the specification a new TABLE_LIST object is created to be included into
      the list for pre-locking. After all objects in the pre-locking have been
      looked through the tables mentioned in the list are locked. Note that the
      objects referenced CTEs are just skipped here as it is impossible to
      resolve these references without any info on the context where they occur.
      Now the statements from the body of SP are executed one by one that.
      At the very beginning of the execution of a query the tables used in the
      query are opened and open_and_process_table() now is called for each table
      reference mentioned in the list of TABLE_LIST objects associated with the
      query that was built when the query was parsed.
      For each table reference first the reference is checked against CTEs
      definitions in whose scope it occurred. If such definition is found the
      reference is considered resolved and if this is not the first reference
      to the found CTE the the specification of the CTE is re-parsed and the
      result of the parsing is added to the parsing tree of the query as a
      sub-tree. If this sub-tree contains table references to other tables they
      are added to the list of TABLE_LIST objects associated with the query in
      order the referenced tables to be opened. When the procedure that opens
      the tables comes to the TABLE_LIST object created for a non-first
      reference to a CTE it discovers that the referenced table instance is not
      locked and reports an error.
      Thus processing non-first table references to a CTE similar to how
      references to view are processed does not work for queries used in stored
      procedures / functions. And the main problem is that the current
      pre-locking mechanism employed for stored procedures / functions does not
      allow to save the context in which a CTE reference occur. It's not trivial
      to save the info about the context where a CTE reference occurs while the
      resolution of the table reference cannot be done without this context and
      consequentially the specification for the table reference cannot be
      determined.
      
      This patch solves the above problem by moving resolution of all CTE
      references at the parsing stage. More exactly references to CTEs occurred in
      a query are resolved right after parsing of the query has finished. After
      resolution any CTE reference it is marked as a reference to to derived
      table. So it is excluded from the hash table created for pre-locking used
      base tables and view when the first call of a stored procedure / function
      is processed.
      This solution required recursive calls of the parser. The function
      THD::sql_parser() has been added specifically for recursive invocations of
      the parser.
      
      # Conflicts:
      #	sql/sql_cte.cc
      #	sql/sql_cte.h
      #	sql/sql_lex.cc
      #	sql/sql_lex.h
      #	sql/sql_view.cc
      #	sql/sql_yacc.yy
      #	sql/sql_yacc_ora.yy
      675716e1
    • Brad Smith's avatar
      CRC32 on OpenBSD/powerpc64. · 4926498a
      Brad Smith authored
      closes #1828
      4926498a
    • nia's avatar
      threadpool_generic: support future NetBSD kqueue versions · 6d549aec
      nia authored
      In NetBSD 9.x and prior, udata is an intptr_t, but in 10.x (current
      development branch) it was changed to be a void * for compatibility
      with other BSDs a year or so ago.
      
      Unfortunately, this does not simplify the code, as NetBSD 8.x and 9.x
      are still supported and will be for a few more years.
      Signed-off-by: default avatarNia Alarie <nia@NetBSD.org>
      6d549aec
  2. 25 May, 2021 4 commits
    • Elena Stepanova's avatar
      Race condition occurs upon server restart inside test cases · 71e1ddda
      Elena Stepanova authored
      Server restart is reported as failed (with exit code 0),
      and the whole MTR worker aborts
      71e1ddda
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 1dea7f79
      Marko Mäkelä authored
      1dea7f79
    • Igor Babaev's avatar
      MDEV-23886 Reusing CTE inside a function fails with table doesn't exist · 04de6517
      Igor Babaev authored
      In the code existed just before this patch binding of a table reference to
      the specification of the corresponding CTE happens in the function
      open_and_process_table(). If the table reference is not the first in the
      query the specification is cloned in the same way as the specification of
      a view is cloned for any reference of the view. This works fine for
      standalone queries, but does not work for stored procedures / functions
      for the following reason.
      When the first call of a stored procedure/ function SP is processed the
      body of SP is parsed. When a query of SP is parsed the info on each
      encountered table reference is put into a TABLE_LIST object linked into
      a global chain associated with the query. When parsing of the query is
      finished the basic info on the table references from this chain except
      table references to derived tables and information schema tables is put
      in one hash table associated with SP. When parsing of the body of SP is
      finished this hash table is used to construct TABLE_LIST objects for all
      table references mentioned in SP and link them into the list of such
      objects passed to a pre-locking process that calls open_and_process_table()
      for each table from the list.
      When a TABLE_LIST for a view is encountered the view is opened and its
      specification is parsed. For any table reference occurred in
      the specification a new TABLE_LIST object is created to be included into
      the list for pre-locking. After all objects in the pre-locking have been
      looked through the tables mentioned in the list are locked. Note that the
      objects referenced CTEs are just skipped here as it is impossible to
      resolve these references without any info on the context where they occur.
      Now the statements from the body of SP are executed one by one that.
      At the very beginning of the execution of a query the tables used in the
      query are opened and open_and_process_table() now is called for each table
      reference mentioned in the list of TABLE_LIST objects associated with the
      query that was built when the query was parsed.
      For each table reference first the reference is checked against CTEs
      definitions in whose scope it occurred. If such definition is found the
      reference is considered resolved and if this is not the first reference
      to the found CTE the the specification of the CTE is re-parsed and the
      result of the parsing is added to the parsing tree of the query as a
      sub-tree. If this sub-tree contains table references to other tables they
      are added to the list of TABLE_LIST objects associated with the query in
      order the referenced tables to be opened. When the procedure that opens
      the tables comes to the TABLE_LIST object created for a non-first
      reference to a CTE it discovers that the referenced table instance is not
      locked and reports an error.
      Thus processing non-first table references to a CTE similar to how
      references to view are processed does not work for queries used in stored
      procedures / functions. And the main problem is that the current
      pre-locking mechanism employed for stored procedures / functions does not
      allow to save the context in which a CTE reference occur. It's not trivial
      to save the info about the context where a CTE reference occurs while the
      resolution of the table reference cannot be done without this context and
      consequentially the specification for the table reference cannot be
      determined.
      
      This patch solves the above problem by moving resolution of all CTE
      references at the parsing stage. More exactly references to CTEs occurred in
      a query are resolved right after parsing of the query has finished. After
      resolution any CTE reference it is marked as a reference to to derived
      table. So it is excluded from the hash table created for pre-locking used
      base tables and view when the first call of a stored procedure / function
      is processed.
      This solution required recursive calls of the parser. The function
      THD::sql_parser() has been added specifically for recursive invocations of
      the parser.
      04de6517
    • nia's avatar
      my_largepage: Fix build with MAP_ALIGNED by no MAP_ALIGNED_SUPER · 2eb35749
      nia authored
      This needs backporting to MariaDB 10.5.
      
      Any changes I submit are freely available under the new BSD
      license.
      Signed-off-by: default avatarNia Alarie <nia@NetBSD.org>
      2eb35749
  3. 24 May, 2021 7 commits
  4. 23 May, 2021 6 commits
  5. 22 May, 2021 10 commits
  6. 21 May, 2021 6 commits
    • Igor Babaev's avatar
      MDEV-23886 Reusing CTE inside a function fails with table doesn't exist · 43c9fcef
      Igor Babaev authored
      In the code existed just before this patch binding of a table reference to
      the specification of the corresponding CTE happens in the function
      open_and_process_table(). If the table reference is not the first in the
      query the specification is cloned in the same way as the specification of
      a view is cloned for any reference of the view. This works fine for
      standalone queries, but does not work for stored procedures / functions
      for the following reason.
      When the first call of a stored procedure/ function SP is processed the
      body of SP is parsed. When a query of SP is parsed the info on each
      encountered table reference is put into a TABLE_LIST object linked into
      a global chain associated with the query. When parsing of the query is
      finished the basic info on the table references from this chain except
      table references to derived tables and information schema tables is put
      in one hash table associated with SP. When parsing of the body of SP is
      finished this hash table is used to construct TABLE_LIST objects for all
      table references mentioned in SP and link them into the list of such
      objects passed to a pre-locking process that calls open_and_process_table()
      for each table from the list.
      When a TABLE_LIST for a view is encountered the view is opened and its
      specification is parsed. For any table reference occurred in
      the specification a new TABLE_LIST object is created to be included into
      the list for pre-locking. After all objects in the pre-locking have been
      looked through the tables mentioned in the list are locked. Note that the
      objects referenced CTEs are just skipped here as it is impossible to
      resolve these references without any info on the context where they occur.
      Now the statements from the body of SP are executed one by one that.
      At the very beginning of the execution of a query the tables used in the
      query are opened and open_and_process_table() now is called for each table
      reference mentioned in the list of TABLE_LIST objects associated with the
      query that was built when the query was parsed.
      For each table reference first the reference is checked against CTEs
      definitions in whose scope it occurred. If such definition is found the
      reference is considered resolved and if this is not the first reference
      to the found CTE the the specification of the CTE is re-parsed and the
      result of the parsing is added to the parsing tree of the query as a
      sub-tree. If this sub-tree contains table references to other tables they
      are added to the list of TABLE_LIST objects associated with the query in
      order the referenced tables to be opened. When the procedure that opens
      the tables comes to the TABLE_LIST object created for a non-first
      reference to a CTE it discovers that the referenced table instance is not
      locked and reports an error.
      Thus processing non-first table references to a CTE similar to how
      references to view are processed does not work for queries used in stored
      procedures / functions. And the main problem is that the current
      pre-locking mechanism employed for stored procedures / functions does not
      allow to save the context in which a CTE reference occur. It's not trivial
      to save the info about the context where a CTE reference occurs while the
      resolution of the table reference cannot be done without this context and
      consequentially the specification for the table reference cannot be
      determined.
      
      This patch solves the above problem by moving resolution of all CTE
      references at the parsing stage. More exactly references to CTEs occurred in
      a query are resolved right after parsing of the query has finished. After
      resolution any CTE reference it is marked as a reference to to derived
      table. So it is excluded from the hash table created for pre-locking used
      base tables and view when the first call of a stored procedure / function
      is processed.
      This solution required recursive calls of the parser. The function
      THD::sql_parser() has been added specifically for recursive invocations of
      the parser.
      43c9fcef
    • Daniel Bartholomew's avatar
      bump the VERSION · 66165ae2
      Daniel Bartholomew authored
      66165ae2
    • Marko Mäkelä's avatar
      MDEV-25664 Potential hang in purge for virtual columns · 9739cf18
      Marko Mäkelä authored
      ha_innobase::open(): If the table is only being opened by purge
      for evaluating virtual column values, avoid invoking
      initialize_auto_increment(), because the purge thread may already
      be holding an shared latch on the clustered index root page.
      Shared latches are not recursive. The additional request would lead
      to a hang if another thread has started waiting for an exclusive latch.
      9739cf18
    • Marko Mäkelä's avatar
      MDEV-25743: Unnecessary copying of table names in InnoDB dictionary · 49e2c8f0
      Marko Mäkelä authored
      Many InnoDB data dictionary cache operations require that the
      table name be copied so that it will be NUL terminated.
      (For example, SYS_TABLES.NAME is not guaranteed to be NUL-terminated.)
      
      dict_table_t::is_garbage_name(): Check if a name belongs to
      the background drop table queue.
      
      dict_check_if_system_table_exists(): Remove.
      
      dict_sys_t::load_sys_tables(): Load the non-hard-coded system tables
      SYS_FOREIGN, SYS_FOREIGN_COLS, SYS_VIRTUAL on startup.
      
      dict_sys_t::create_or_check_sys_tables(): Replaces
      dict_create_or_check_foreign_constraint_tables() and
      dict_create_or_check_sys_virtual().
      
      dict_sys_t::load_table(): Replaces dict_table_get_low()
      and dict_load_table().
      
      dict_sys_t::find_table(): Renamed from get_table().
      
      dict_sys_t::sys_tables_exist(): Check whether all the non-hard-coded
      tables SYS_FOREIGN, SYS_FOREIGN_COLS, SYS_VIRTUAL exist.
      
      trx_t::has_stats_table_lock(): Moved to dict0stats.cc.
      
      Some error messages will now report table names in the internal
      databasename/tablename format, instead of `databasename`.`tablename`.
      49e2c8f0
    • Marko Mäkelä's avatar
      Cleanup: Remove the compile-innodb script · 525bf049
      Marko Mäkelä authored
      The InnoDB storage engine is being built by default.
      There is no need to have an unportable script that encourages
      in-source builds and a particular build driver.
      525bf049
    • Marko Mäkelä's avatar
      Cleanup: Remove the error code DB_MUST_GET_MORE_FILE_SPACE · 7bdb8d12
      Marko Mäkelä authored
      Ever since MDEV-24589, MDEV-18518 and other recent changes corrected the
      rollback of CREATE and DROP operations, there is no need to crash the
      server if we run out of space during a DROP operation. We can simply
      let the transaction be rolled back.
      7bdb8d12