Details

    • Task
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • 10.0.8
    • None
    • 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.

      Attachments

        Issue Links

          Activity

            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.
            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

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

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.