1. 07 Apr, 2017 11 commits
    • Alexander Barkov's avatar
      fa5be1d3
    • Monty's avatar
      Simple binary cache optimizations · 0177a9c7
      Monty authored
      - Don't call my_chsize() for small (less than 64K) binary log tmp files
      - Don't flush cache to disk on reset.
      0177a9c7
    • Monty's avatar
      Simple cleanups · 1bcfa14e
      Monty authored
      - Added file name to error in mysql-test-run
      - When creating tags, first do it for sql to make it easier to find things in server
      1bcfa14e
    • Marko Mäkelä's avatar
      MDEV-10139 Support for InnoDB SEQUENCE objects · 7c767a30
      Marko Mäkelä authored
      We introduce a NO_ROLLBACK flag for InnoDB tables. This flag only works
      for tables that have a single index. Apart from undo logging, this flag
      will also prevent locking and the assignment of DB_ROW_ID or DB_TRX_ID,
      and imply READ UNCOMMITTED isolation. It is assumed that the SQL layer
      is guaranteeing mutual exclusion.
      
      After the initial insert of the single record during CREATE SEQUENCE,
      InnoDB will be updating the single record in-place. This is crash-safe
      thanks to the redo log. (That is, after a crash after CREATE SEQUENCE
      was committed, the effect of sequence operations will be observable
      fully or not at all.)
      
      When it comes to the durability of the updates of SEQUENCE in
      InnoDB, there is a clear analogy to MDEV-6076 Persistent AUTO_INCREMENT.
      The updates would be made persistent by the InnoDB redo log flush
      at transaction commit or rollback (or XA PREPARE), provided that
      innodb_log_flush_at_trx_commit=1.
      
      Similar to AUTO_INCREMENT, it is possible that the update of a SEQUENCE
      in a middle of transaction becomes durable before the COMMIT/ROLLBACK of
      the transaction, in case the InnoDB redo log is being flushed as a result
      of the a commit or rollback of some other transaction, or as a result of
      a redo log checkpoint that can be initiated at any time by operations that
      are writing redo log.
      
      dict_table_t::no_rollback(): Check if the table does not support rollback.
      
      BTR_NO_ROLLBACK: Logging and locking flags for no_rollback() tables.
      
      DICT_TF_BITS: Add the NO_ROLLBACK flag.
      
      row_ins_step(): Assign 0 to DB_ROW_ID and DB_TRX_ID, and skip
      any locking for no-rollback tables. There will be only a single row
      in no-rollback tables (or there must be a proper PRIMARY KEY).
      
      row_search_mvcc(): Execute the READ UNCOMMITTED code path for
      no-rollback tables.
      
      ha_innobase::external_lock(), ha_innobase::store_lock():
      Block CREATE/DROP SEQUENCE in innodb_read_only mode.
      This probably has no effect for CREATE SEQUENCE, because already
      ha_innobase::create() should have been called (and refused)
      before external_lock() or store_lock() is called.
      
      ha_innobase::store_lock(): For CREATE SEQUENCE, do not acquire any
      InnoDB locks, even though TL_WRITE is being requested. (This is just
      a performance optimization.)
      
      innobase_copy_frm_flags_from_create_info(), row_drop_table_for_mysql():
      Disable persistent statistics for no_rollback tables.
      7c767a30
    • Monty's avatar
      Change error message when using DROP VIEW on a non existing view from · 470c3fd9
      Monty authored
      "Unknown table" to "Unknown view"
      470c3fd9
    • Monty's avatar
      MDEV-10139 Support for SEQUENCE objects · 17a87d60
      Monty authored
      Working features:
      CREATE OR REPLACE [TEMPORARY] SEQUENCE [IF NOT EXISTS] name
          [ INCREMENT [ BY | = ] increment ]
          [ MINVALUE [=] minvalue | NO MINVALUE ]
          [ MAXVALUE [=] maxvalue | NO MAXVALUE ]
          [ START [ WITH | = ] start ] [ CACHE [=] cache ] [ [ NO ] CYCLE ]
          ENGINE=xxx COMMENT=".."
      SELECT NEXT VALUE FOR sequence_name;
      SELECT NEXTVAL(sequence_name);
      SELECT PREVIOUS VALUE FOR sequence_name;
      SELECT LASTVAL(sequence_name);
      
      SHOW CREATE SEQUENCE sequence_name;
      SHOW CREATE TABLE sequence_name;
      CREATE TABLE sequence-structure ... SEQUENCE=1
      ALTER TABLE sequence RENAME TO sequence2;
      RENAME TABLE sequence TO sequence2;
      DROP [TEMPORARY] SEQUENCE  [IF EXISTS] sequence_names
      
      Missing features
      - SETVAL(value,sequence_name), to be used with replication.
      - Check replication, including checking that sequence tables are marked
        not transactional.
      - Check that a commit happens for NEXT VALUE that changes table data (may
        already work)
      - ALTER SEQUENCE. ANSI SQL version of setval.
      - Share identical sequence entries to not add things twice to table list.
      - testing insert/delete/update/truncate/load data
      - Run and fix Alibaba sequence tests (part of mysql-test/suite/sql_sequence)
      - Write documentation for NEXT VALUE / PREVIOUS_VALUE
      - NEXTVAL in DEFAULT
        - Ensure that NEXTVAL in DEFAULT uses database from base table
      - Two NEXTVAL for same row should give same answer.
      - Oracle syntax sequence_table.nextval, without any FOR or FROM.
      - Sequence tables are treated as 'not read constant tables' by SELECT; Would
        be better if we would have a separate list for sequence tables so that
        select doesn't know about them, except if refereed to with FROM.
      
      Other things done:
      - Improved output for safemalloc backtrack
      - frm_type_enum changed to Table_type
      - Removed lex->is_view and replaced with lex->table_type. This allows
        use to more easy check if item is view, sequence or table.
      - Added table flag HA_CAN_TABLES_WITHOUT_ROLLBACK, needed for handlers
        that want's to support sequences
      - Added handler calls:
       - engine_name(), to simplify getting engine name for partition and sequences
       - update_first_row(), to be able to do efficient sequence implementations.
       - Made binlog_log_row() global to be able to call it from ha_sequence.cc
      - Added handler variable: row_already_logged, to be able to flag that the
        changed row is already logging to replication log.
      - Added CF_DB_CHANGE and CF_SCHEMA_CHANGE flags to simplify
        deny_updates_if_read_only_option()
      - Added sp_add_cfetch() to avoid new conflicts in sql_yacc.yy
      - Moved code for add_table_options() out from sql_show.cc::show_create_table()
      - Added String::append_longlong() and used it in sql_show.cc to simplify code.
      - Added extra option to dd_frm_type() and ha_table_exists to indicate if
        the table is a sequence. Needed by DROP SQUENCE to not drop a table.
      17a87d60
    • Monty's avatar
      MDEV-8203 Assert in Query_log_event::do_apply_event() · 546e7aa9
      Monty authored
      This happens because the master writes a table_map event to the binary log, but no row event.
      The slave has a check that there should always be a row event if there was a table_map event, which
      causes a crash.
      
      Fixed by remembering in the cache what kind of events are logged
      and ignore cached statements which is just a table map event.
      546e7aa9
    • Alexander Barkov's avatar
    • Alexander Barkov's avatar
      MDEV-12457 Cursors with parameters · 113a980f
      Alexander Barkov authored
      113a980f
    • Alexander Barkov's avatar
      Using the -t command line to bison instead of %name-prefix · 75d1962a
      Alexander Barkov authored
      Needed to compile on machines with older bison versions.
      Adding a new parameter "name_prefix" to RUN_BISON() cmake macro.
      75d1962a
    • Alexander Barkov's avatar
  2. 05 Apr, 2017 29 commits