1. 21 Feb, 2019 25 commits
    • Sachin's avatar
      MDEV-371 Unique Index for long columns · d00f19e8
      Sachin authored
      This patch implements engine independent unique hash index.
      
      Usage:- Unique HASH index can be created automatically for blob/varchar/test column whose key
       length > handler->max_key_length()
      or it can be explicitly specified.
      
        Automatic Creation:-
         Create TABLE t1 (a blob unique);
        Explicit Creation:-
         Create TABLE t1 (a int , unique(a) using HASH);
      
      Internal KEY_PART Representations:-
       Long unique key_info will have 2 representations.
       (lets understand this with an example create table t1(a blob, b blob , unique(a, b)); )
      
       1. User Given Representation:- key_info->key_part array will be similar to what user has defined.
       So in case of example it will have 2 key_parts (a, b)
      
       2. Storage Engine Representation:- In this case there will be only one key_part and it will point to
       HASH_FIELD. This key_part will be always after user defined key_parts.
      
       So:- User Given Representation          [a] [b] [hash_key_part]
                        key_info->key_part ----^
        Storage Engine Representation          [a] [b] [hash_key_part]
                        key_info->key_part ------------^
      
       Table->s->key_info will have User Given Representation, While table->key_info will have Storage Engine
       Representation.Representation can be changed into each other by calling re/setup_keyinfo_hash function.
      
      Working:-
      
      1. So when user specifies HASH_INDEX or key_length is > handler->max_key_length(), In mysql_prepare_create_table
      One extra vfield is added (for each long unique key). And key_info->algorithm is set to HA_KEY_ALG_LONG_HASH.
      
      2. In init_from_binary_frm_image values for hash_keypart is set (like fieldnr , field and flags)
      
      3. In parse_vcol_defs, HASH_FIELD->vcol_info is created. Item_func_hash is used with list of Item_fields,
         When Explicit length is given by user then Item_left is used to concatenate Item_field values.
      
      4. In ha_write_row/ha_update_row check_duplicate_long_entry_key is called which will create the hash key from
      table->record[0] and then call ha_index_read_map , if we found duplicated hash , we will compare the result
      field by field.
      d00f19e8
    • Oleksandr Byelkin's avatar
      fix test to pass on embedded serever · 5b4d6595
      Oleksandr Byelkin authored
      5b4d6595
    • Sergei Golubchik's avatar
      mysql_install_db: make sure the variable's value is visible · 33b9f805
      Sergei Golubchik authored
      move the assignment out of a function, so that it wouldn't
      happen in a subshell
      33b9f805
    • Marko Mäkelä's avatar
      MDEV-18677 clang-cl 7 fails to compile innodb · 7c8e17b9
      Marko Mäkelä authored
      ib_counter_element_t: Declare as struct, not union.
      
      Based on patch by Vladislav Vaintroub
      7c8e17b9
    • Sergei Golubchik's avatar
      MDEV-12484 Enable unix socket authentication by default · 7f6d8894
      Sergei Golubchik authored
      Debian part. Do not ask to set a root password,
      do not create debian-sys-maint user (but preserve an existing one
      on upgrades - user scripts might be relying on it).
      
      Just create an empty /etc/mysql/debian.cnf for --defaults-file not to fail
      7f6d8894
    • Sergei Golubchik's avatar
      don't invoke error interceptors for fatal errors · 132216fa
      Sergei Golubchik authored
      and, again, *don't use thd->clear_error()*
      
      this fixed main.sp_notembedded failure on various amd64 platforms
      (where ER_STACK_OVERRUN_NEED_MORE happens to fire in open_stat_tables()
      under Dummy_error_handler)
      132216fa
    • Sergei Golubchik's avatar
      65ffea39
    • Sergei Golubchik's avatar
      MDEV-18297 How to reset a forgotten root password · 4386d935
      Sergei Golubchik authored
      After FLUSH PRIVILEGES remember if the connection started under
      --skip-grant-tables and keep it all-powerful, not a lowly anonymous.
      
      One could use this connection to reset passwords as needed.
      
      Also fix a crash in SHOW CREATE USER
      4386d935
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      MDEV-7597 Expiration of user passwords · 1e621016
      Sergei Golubchik authored
      post-merge changes:
      * handle password expiration on old tables like everything else -
        make changes in memory, even if they cannot be done on disk
      * merge "debug" tests with non-debug tests, they don't use dbug anyway
      * only run rpl password expiration in MIXED mode, it doesn't replicate
        anything, so no need to repeat it thrice
      * restore update_user_table_password() prototype, it should not change
        ACL_USER, this is done in acl_user_update()
      * don't parse json twice in get_password_lifetime and get_password_expired
      * remove LEX_USER::is_changing_password, see if there was any auth instead
      * avoid overflow in expiration calculations
      * don't initialize Account_options in the constructor, it's bzero-ed later
      * don't create ulong sysvars - they're not portable, prefer uint or ulonglong
      * misc simplifications
      1e621016
    • Robert Bindar's avatar
      MDEV-7597 Expiration of user passwords · 90ad4dbd
      Robert Bindar authored
      This patch adds support for expiring user passwords.
      The following statements are extended:
        CREATE USER user@localhost PASSWORD EXPIRE [option]
        ALTER USER user@localhost PASSWORD EXPIRE [option]
      If no option is specified, the password is expired with immediate
      effect. If option is DEFAULT, global policy applies according to
      the default_password_lifetime system var (if 0, password never
      expires, if N, password expires every N days). If option is NEVER,
      the password never expires and if option is INTERVAL N DAY, the
      password expires every N days.
      The feature also supports the disconnect_on_expired_password system
      var and the --connect-expired-password client option.
      
      Closes #1166
      90ad4dbd
    • Sergei Golubchik's avatar
      try harder to link unix_socket plugin statically · 83de75d6
      Sergei Golubchik authored
      fix unix_socket tests to work if unix_socket is a built-in
      83de75d6
    • Sergei Golubchik's avatar
      update C/C · 38bf9319
      Sergei Golubchik authored
      38bf9319
    • Sergei Golubchik's avatar
      81ecc2b2
    • Sergei Golubchik's avatar
      8ad23ff4
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      9718e374
    • Sergei Golubchik's avatar
      misc cleanups · 81e4b9b3
      Sergei Golubchik authored
      81e4b9b3
    • Sergei Golubchik's avatar
      tests · 7ec3a4d7
      Sergei Golubchik authored
      * don't suppress output unnecessary
      * only run system versioning tests with two innodb combinations
      * show results of delete/update (add SELECTs as needed)
      7ec3a4d7
    • Nikita Malyavin's avatar
      MDEV-16975 Application-time periods: ALTER TABLE · 6294516a
      Nikita Malyavin authored
      * implicit period constraint is hidden and cannot be dropped independently
      * create...like and create...select support
      6294516a
    • Nikita Malyavin's avatar
      b2bd5229
    • Nikita Malyavin's avatar
      MDEV-16973 Application-time periods: DELETE · 47e28a94
      Nikita Malyavin authored
      * inject portion of time updates into mysql_delete main loop
      * triggered case emits delete+insert, no updates
      * PORTION OF `SYSTEM_TIME` is forbidden
      * `DELETE HISTORY .. FOR PORTION OF ...` is forbidden as well
      47e28a94
    • Nikita Malyavin's avatar
      MDEV-17082 Application-time periods: CREATE · 073c93b1
      Nikita Malyavin authored
      * add syntax `CREATE TABLE ... PERIOD FOR <apptime>`
      * add table period entity
      073c93b1
    • Sergei Golubchik's avatar
      move aws_sdk to extra/ · b6360461
      Sergei Golubchik authored
      b6360461
    • Oleksandr Byelkin's avatar
      Merge branch '10.3' into 10.4 · 93ac7ae7
      Oleksandr Byelkin authored
      93ac7ae7
  2. 20 Feb, 2019 7 commits
  3. 19 Feb, 2019 8 commits
    • Oleksandr Byelkin's avatar
      c65daf02
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-12026: Implement innodb_checksum_algorithm=full_crc32 · c0f47a4a
      Thirunarayanan Balathandayuthapani authored
      MariaDB data-at-rest encryption (innodb_encrypt_tables)
      had repurposed the same unused data field that was repurposed
      in MySQL 5.7 (and MariaDB 10.2) for the Split Sequence Number (SSN)
      field of SPATIAL INDEX. Because of this, MariaDB was unable to
      support encryption on SPATIAL INDEX pages.
      
      Furthermore, InnoDB page checksums skipped some bytes, and there
      are multiple variations and checksum algorithms. By default,
      InnoDB accepts all variations of all algorithms that ever existed.
      This unnecessarily weakens the page checksums.
      
      We hereby introduce two more innodb_checksum_algorithm variants
      (full_crc32, strict_full_crc32) that are special in a way:
      When either setting is active, newly created data files will
      carry a flag (fil_space_t::full_crc32()) that indicates that
      all pages of the file will use a full CRC-32C checksum over the
      entire page contents (excluding the bytes where the checksum
      is stored, at the very end of the page). Such files will always
      use that checksum, no matter what the parameter
      innodb_checksum_algorithm is assigned to.
      
      For old files, the old checksum algorithms will continue to be
      used. The value strict_full_crc32 will be equivalent to strict_crc32
      and the value full_crc32 will be equivalent to crc32.
      
      ROW_FORMAT=COMPRESSED tables will only use the old format.
      These tables do not support new features, such as larger
      innodb_page_size or instant ADD/DROP COLUMN. They may be
      deprecated in the future. We do not want an unnecessary
      file format change for them.
      
      The new full_crc32() format also cleans up the MariaDB tablespace
      flags. We will reserve flags to store the page_compressed
      compression algorithm, and to store the compressed payload length,
      so that checksum can be computed over the compressed (and
      possibly encrypted) stream and can be validated without
      decrypting or decompressing the page.
      
      In the full_crc32 format, there no longer are separate before-encryption
      and after-encryption checksums for pages. The single checksum is
      computed on the page contents that is written to the file.
      
      We do not make the new algorithm the default for two reasons.
      First, MariaDB 10.4.2 was a beta release, and the default values
      of parameters should not change after beta. Second, we did not
      yet implement the full_crc32 format for page_compressed pages.
      This will be fixed in MDEV-18644.
      
      This is joint work with Marko Mäkelä.
      c0f47a4a
    • Oleksandr Byelkin's avatar
      Merge branch '10.2' into bb-10.3-merge · 00906719
      Oleksandr Byelkin authored
      00906719
    • Oleksandr Byelkin's avatar
      Merge branch '10.3' into bb-10.3-merge · 055c09ad
      Oleksandr Byelkin authored
      055c09ad
    • Oleksandr Byelkin's avatar
      Merge branch '10.1' into 10.2 · 91d506cf
      Oleksandr Byelkin authored
      91d506cf
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · fc124778
      Marko Mäkelä authored
      fc124778
    • Alexander Barkov's avatar
      Fixing compilation problems with this DBUG_ASSERT_AS_PRINTF · 93984ff6
      Alexander Barkov authored
      For example, with this cmake command line:
      
      cmake . -DCMAKE_C_FLAGS="-DDBUG_ASSERT_AS_PRINTF" \
              -DCMAKE_CXX_FLAGS="-DDBUG_ASSERT_AS_PRINTF"
      93984ff6
    • Sergey Vojtovich's avatar
      Fixed build failure · abd3c202
      Sergey Vojtovich authored
      Apparently DBUG_ASSERT() can co-exist with DBUG_OFF when
      -DCMAKE_CXX_FLAGS="-DDBUG_ASSERT_AS_PRINTF".
      
      Removed assertion as it is useless now, since the type is unsigned.
      abd3c202