Aaryan123456679 commented on code in PR #70235:
URL: https://github.com/apache/airflow/pull/70235#discussion_r3744035078


##########
airflow-core/src/airflow/migrations/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py:
##########
@@ -39,40 +39,57 @@
 airflow_version = "2.9.2"
 
 
-def upgrade():
-    """Apply Update missing constraints."""
-    conn = op.get_bind()
-    if conn.dialect.name == "mysql":
-        # TODO: Rewrite these queries to use alembic when lowest MYSQL version 
supports IF EXISTS
-        conn.execute(
-            sa.text("""
-        set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS 
WHERE
-            CONSTRAINT_SCHEMA = DATABASE() AND
-            TABLE_NAME        = 'connection' AND
-            CONSTRAINT_NAME   = 'unique_conn_id' AND
-            CONSTRAINT_TYPE   = 'UNIQUE') = true,'ALTER TABLE connection
-            DROP INDEX unique_conn_id','select 1');
+def _mysql_drop_unique_constraint_if_exists(conn, table: str, index_name: str) 
-> None:
+    """
+    Drop a MySQL unique constraint only if it is actually present.
 
-        prepare stmt from @var;
-        execute stmt;
-        deallocate prepare stmt;
-        """)
-        )
-        # Dropping the below and recreating cause there's no IF NOT EXISTS in 
mysql
+    MySQL has no ``DROP INDEX IF EXISTS``, and PyMySQL does not support the
+    ``prepare``/``execute``/``deallocate prepare`` sequence in a single
+    ``cursor.execute()`` call, so the existence check and the drop are issued 
as two
+    separate single statements. In offline (``--sql``) mode there is no live 
connection
+    to query information_schema against, so the guarded dynamic SQL is emitted 
as literal
+    script text instead, to be run later through a real SQL client that 
supports
+    multi-statement scripts.
+    """
+    if context.is_offline_mode():
         conn.execute(
-            sa.text("""
+            sa.text(f"""
                 set @var=if((SELECT true FROM 
information_schema.TABLE_CONSTRAINTS WHERE
                     CONSTRAINT_SCHEMA = DATABASE() AND
-                    TABLE_NAME        = 'connection' AND
-                    CONSTRAINT_NAME   = 'connection_conn_id_uq' AND
-                    CONSTRAINT_TYPE   = 'UNIQUE') = true,'ALTER TABLE 
connection
-                    DROP INDEX connection_conn_id_uq','select 1');
+                    TABLE_NAME        = '{table}' AND
+                    CONSTRAINT_NAME   = '{index_name}' AND
+                    CONSTRAINT_TYPE   = 'UNIQUE') = true,'ALTER TABLE {table}
+                    DROP INDEX {index_name}','select 1');
 
                 prepare stmt from @var;
                 execute stmt;
                 deallocate prepare stmt;
                 """)
         )
+        return
+    existing_indexes = {
+        row[0]
+        for row in conn.execute(
+            sa.text(f"""
+                SELECT CONSTRAINT_NAME FROM 
information_schema.TABLE_CONSTRAINTS
+                WHERE CONSTRAINT_SCHEMA = DATABASE()
+                AND TABLE_NAME = '{table}'
+                AND CONSTRAINT_TYPE = 'UNIQUE'
+            """)

Review Comment:
   Done.
   
   ---
   Drafted-by: Claude Code (Sonnet 5) (no human review before posting)



##########
airflow-core/src/airflow/migrations/versions/0017_2_9_2_fix_inconsistency_between_ORM_and_migration_files.py:
##########
@@ -39,40 +39,57 @@
 airflow_version = "2.9.2"
 
 
-def upgrade():
-    """Apply Update missing constraints."""
-    conn = op.get_bind()
-    if conn.dialect.name == "mysql":
-        # TODO: Rewrite these queries to use alembic when lowest MYSQL version 
supports IF EXISTS
-        conn.execute(
-            sa.text("""
-        set @var=if((SELECT true FROM information_schema.TABLE_CONSTRAINTS 
WHERE
-            CONSTRAINT_SCHEMA = DATABASE() AND
-            TABLE_NAME        = 'connection' AND
-            CONSTRAINT_NAME   = 'unique_conn_id' AND
-            CONSTRAINT_TYPE   = 'UNIQUE') = true,'ALTER TABLE connection
-            DROP INDEX unique_conn_id','select 1');
+def _mysql_drop_unique_constraint_if_exists(conn, table: str, index_name: str) 
-> None:
+    """
+    Drop a MySQL unique constraint only if it is actually present.
 
-        prepare stmt from @var;
-        execute stmt;
-        deallocate prepare stmt;
-        """)
-        )
-        # Dropping the below and recreating cause there's no IF NOT EXISTS in 
mysql
+    MySQL has no ``DROP INDEX IF EXISTS``, and PyMySQL does not support the
+    ``prepare``/``execute``/``deallocate prepare`` sequence in a single
+    ``cursor.execute()`` call, so the existence check and the drop are issued 
as two

Review Comment:
   Done.
   
   ---
   Drafted-by: Claude Code (Sonnet 5) (no human review before posting)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to