Details

    • Type: Task
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Fix Version/s: 10.0.8
    • Component/s: None
    • Labels:
      None

      Description

      Implementation of CREATE OR REPLACE TABLE.

      This is needed to make replication with GTID work reliable with CREATE ... SELECT.

      Using CREATE OR REPLACE TABLE will be identical to

      DROP TABLE IF EXISTS table_name;
      CREATE TABLE ...;

      Except that:

      • The above will be atomic (now one can create the same table between drop and create).
      • Temporary tables will not shadow the table name for the DROP
      • The CREATE TABLE tells us already if we are using a temporary table or not.
      • If this would not be the case, we could with the statement drop a temporary table but still not be able to create the original table.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              Hide
              monty Michael Widenius added a comment -

              Now this is almost done, some implementation notes:

              • We don't anymore open the to-be-created table during CREATE TABLE, which the original code did.
              • There is no need to open a table we are planning to create. It's enough to check if the table exists or not.
              • It simplifies CREATE OR REPLACE that we don't open a table we are about to drop and recreate.
              • Removed some of duplicated code for CREATE IF NOT EXISTS.
              • Made OR REPLACE reusable in sql_yacc.yy
              • Both CREATE OR REPLACE TABLE and CREATE OR REPLACE VIEW now uses the same code.
              • An error is given if CREATE OR REPLACE is used for triggers, SP or events (to fixed by another Jira task).
              • Give an error when using CREATE OR REPLACE with IF NOT EXISTS (conflicting options)
              • As a side effect of the code changes, we don't anymore have to internally re-prepare prepared statements with CREATE TABLE if the table exists.
              Show
              monty Michael Widenius added a comment - Now this is almost done, some implementation notes: We don't anymore open the to-be-created table during CREATE TABLE, which the original code did. There is no need to open a table we are planning to create. It's enough to check if the table exists or not. It simplifies CREATE OR REPLACE that we don't open a table we are about to drop and recreate. Removed some of duplicated code for CREATE IF NOT EXISTS. Made OR REPLACE reusable in sql_yacc.yy Both CREATE OR REPLACE TABLE and CREATE OR REPLACE VIEW now uses the same code. An error is given if CREATE OR REPLACE is used for triggers, SP or events (to fixed by another Jira task). Give an error when using CREATE OR REPLACE with IF NOT EXISTS (conflicting options) As a side effect of the code changes, we don't anymore have to internally re-prepare prepared statements with CREATE TABLE if the table exists.

                People

                • Assignee:
                  monty Michael Widenius
                  Reporter:
                  monty Michael Widenius
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Due:
                    Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - 1 day Original Estimate - 1 day
                    1d
                    Remaining:
                    Time Spent - 5 hours Remaining Estimate - 4 hours
                    4h
                    Logged:
                    Time Spent - 5 hours Remaining Estimate - 4 hours
                    5h