This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new e7194dff6a8 Add support for semicolon stripping to DbApiHook, 
PrestoHook, and TrinoHook (#41916)
e7194dff6a8 is described below

commit e7194dff6a816bf3a721cbf579ceac19c11cd111
Author: Dmitry Astankov <[email protected]>
AuthorDate: Wed Nov 13 16:46:46 2024 +0300

    Add support for semicolon stripping to DbApiHook, PrestoHook, and TrinoHook 
(#41916)
    
    
    
    ---------
    
    Co-authored-by: Elad Kalif <[email protected]>
---
 dev/breeze/src/airflow_breeze/global_constants.py  |  2 +-
 dev/breeze/tests/test_packages.py                  |  4 +-
 generated/provider_dependencies.json               | 54 +++++++++++-----------
 .../src/airflow/providers/amazon/provider.yaml     |  2 +-
 .../airflow/providers/apache/drill/provider.yaml   |  2 +-
 .../airflow/providers/apache/druid/provider.yaml   |  2 +-
 .../airflow/providers/apache/hive/provider.yaml    |  2 +-
 .../airflow/providers/apache/impala/provider.yaml  |  2 +-
 .../airflow/providers/apache/pinot/provider.yaml   |  2 +-
 .../src/airflow/providers/common/sql/hooks/sql.py  | 15 ++++--
 .../src/airflow/providers/common/sql/hooks/sql.pyi |  3 +-
 .../src/airflow/providers/common/sql/provider.yaml |  3 +-
 .../src/airflow/providers/databricks/provider.yaml |  2 +-
 .../airflow/providers/elasticsearch/provider.yaml  |  2 +-
 .../src/airflow/providers/exasol/provider.yaml     |  2 +-
 .../src/airflow/providers/google/provider.yaml     |  2 +-
 providers/src/airflow/providers/jdbc/provider.yaml |  2 +-
 .../providers/microsoft/mssql/provider.yaml        |  2 +-
 .../src/airflow/providers/mysql/provider.yaml      |  2 +-
 providers/src/airflow/providers/odbc/provider.yaml |  2 +-
 .../airflow/providers/openlineage/provider.yaml    |  3 +-
 .../src/airflow/providers/openlineage/sqlparser.py |  7 ++-
 .../src/airflow/providers/oracle/provider.yaml     |  2 +-
 .../src/airflow/providers/postgres/provider.yaml   |  2 +-
 .../src/airflow/providers/presto/hooks/presto.py   |  1 +
 .../src/airflow/providers/presto/provider.yaml     |  2 +-
 .../src/airflow/providers/slack/provider.yaml      |  2 +-
 .../src/airflow/providers/snowflake/provider.yaml  |  2 +-
 .../src/airflow/providers/sqlite/provider.yaml     |  2 +-
 .../src/airflow/providers/standard/provider.yaml   |  2 +-
 .../src/airflow/providers/teradata/provider.yaml   |  2 +-
 .../src/airflow/providers/trino/hooks/trino.py     |  1 +
 .../src/airflow/providers/trino/provider.yaml      |  2 +-
 .../src/airflow/providers/vertica/provider.yaml    |  2 +-
 providers/src/airflow/providers/ydb/provider.yaml  |  2 +-
 providers/tests/presto/hooks/test_presto.py        | 10 ++++
 providers/tests/trino/hooks/test_trino.py          | 10 ++++
 37 files changed, 100 insertions(+), 63 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/global_constants.py 
b/dev/breeze/src/airflow_breeze/global_constants.py
index ce0b4f8f2fb..15cd0ac81cc 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -568,7 +568,7 @@ DEFAULT_EXTRAS = [
     # END OF EXTRAS LIST UPDATED BY PRE COMMIT
 ]
 
-CHICKEN_EGG_PROVIDERS = " ".join(["standard amazon"])
+CHICKEN_EGG_PROVIDERS = " ".join(["standard amazon common.sql"])
 
 
 BASE_PROVIDERS_COMPATIBILITY_CHECKS: list[dict[str, str | list[str]]] = [
diff --git a/dev/breeze/tests/test_packages.py 
b/dev/breeze/tests/test_packages.py
index 390bb34b435..fe3173b2e9d 100644
--- a/dev/breeze/tests/test_packages.py
+++ b/dev/breeze/tests/test_packages.py
@@ -209,7 +209,7 @@ def test_get_documentation_package_path():
             "postgres",
             "beta0",
             """
-    "apache-airflow-providers-common-sql>=1.17.0b0",
+    "apache-airflow-providers-common-sql>=1.20.0b0",
     "apache-airflow>=2.8.0b0",
     "psycopg2-binary>=2.9.4",
     """,
@@ -219,7 +219,7 @@ def test_get_documentation_package_path():
             "postgres",
             "",
             """
-    "apache-airflow-providers-common-sql>=1.17.0",
+    "apache-airflow-providers-common-sql>=1.20.0",
     "apache-airflow>=2.8.0",
     "psycopg2-binary>=2.9.4",
     """,
diff --git a/generated/provider_dependencies.json 
b/generated/provider_dependencies.json
index 1c3de04d2c5..0fd840c1a9f 100644
--- a/generated/provider_dependencies.json
+++ b/generated/provider_dependencies.json
@@ -27,7 +27,7 @@
     "deps": [
       "PyAthena>=3.0.10",
       "apache-airflow-providers-common-compat>=1.2.1",
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow-providers-http",
       "apache-airflow>=2.8.0",
       "asgiref>=2.3.0",
@@ -102,7 +102,7 @@
   },
   "apache.drill": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "sqlalchemy-drill>=1.1.0"
     ],
@@ -116,7 +116,7 @@
   },
   "apache.druid": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pydruid>=0.4.1"
     ],
@@ -159,7 +159,7 @@
   },
   "apache.hive": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "hmsclient>=0.1.0",
       "jmespath>=0.7.0",
@@ -201,7 +201,7 @@
   },
   "apache.impala": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "impyla>=0.18.0,<1.0"
     ],
@@ -265,7 +265,7 @@
   },
   "apache.pinot": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pinotdb>=5.1.0"
     ],
@@ -421,7 +421,7 @@
     "deps": [
       "apache-airflow>=2.8.0",
       "more-itertools>=9.0.0",
-      "sqlparse>=0.4.2"
+      "sqlparse>=0.5.1"
     ],
     "devel-deps": [],
     "plugins": [],
@@ -434,7 +434,7 @@
   "databricks": {
     "deps": [
       "aiohttp>=3.9.2, <4",
-      "apache-airflow-providers-common-sql>=1.10.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "databricks-sql-connector>=2.0.0, <3.0.0, !=2.9.0",
       "mergedeep>=1.3.4",
@@ -545,7 +545,7 @@
   },
   "elasticsearch": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "elasticsearch>=8.10,<9"
     ],
@@ -559,7 +559,7 @@
   },
   "exasol": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pandas>=1.5.3,<2.2;python_version<\"3.9\"",
       "pandas>=2.1.2,<2.2;python_version>=\"3.9\"",
@@ -632,7 +632,7 @@
     "deps": [
       "PyOpenSSL>=23.0.0",
       "apache-airflow-providers-common-compat>=1.2.1",
-      "apache-airflow-providers-common-sql>=1.7.2",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "asgiref>=3.5.2",
       "dill>=0.2.3",
@@ -787,7 +787,7 @@
   },
   "jdbc": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "jaydebeapi>=1.1.1"
     ],
@@ -855,7 +855,7 @@
   },
   "microsoft.mssql": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "methodtools>=0.4.7",
       "pymssql>=2.3.0"
@@ -906,7 +906,7 @@
   },
   "mysql": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "mysql-connector-python>=8.0.29",
       "mysqlclient>=1.4.0; sys_platform != 'darwin'"
@@ -937,7 +937,7 @@
   },
   "odbc": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pyodbc>=5.0.0"
     ],
@@ -973,7 +973,7 @@
   "openlineage": {
     "deps": [
       "apache-airflow-providers-common-compat>=1.2.1",
-      "apache-airflow-providers-common-sql>=1.6.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "attrs>=22.2",
       "openlineage-integration-common>=1.24.2",
@@ -1017,7 +1017,7 @@
   },
   "oracle": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "oracledb>=2.0.0"
     ],
@@ -1083,7 +1083,7 @@
   },
   "postgres": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.17.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "psycopg2-binary>=2.9.4"
     ],
@@ -1099,7 +1099,7 @@
   },
   "presto": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pandas>=1.5.3,<2.2;python_version<\"3.9\"",
       "pandas>=2.1.2,<2.2;python_version>=\"3.9\"",
@@ -1214,7 +1214,7 @@
   },
   "slack": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "slack_sdk>=3.19.0"
     ],
@@ -1239,7 +1239,7 @@
   "snowflake": {
     "deps": [
       "apache-airflow-providers-common-compat>=1.1.0",
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pandas>=1.5.3,<2.2;python_version<\"3.9\"",
       "pandas>=2.1.2,<2.2;python_version>=\"3.9\"",
@@ -1260,7 +1260,7 @@
   },
   "sqlite": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0"
     ],
     "devel-deps": [],
@@ -1285,7 +1285,7 @@
   },
   "standard": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.18.0",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0"
     ],
     "devel-deps": [],
@@ -1318,7 +1318,7 @@
   },
   "teradata": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "teradatasql>=17.20.0.28",
       "teradatasqlalchemy>=17.20.0.0"
@@ -1335,7 +1335,7 @@
   },
   "trino": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "pandas>=1.5.3,<2.2;python_version<\"3.9\"",
       "pandas>=2.1.2,<2.2;python_version>=\"3.9\"",
@@ -1353,7 +1353,7 @@
   },
   "vertica": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.3.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "vertica-python>=0.6.0"
     ],
@@ -1393,7 +1393,7 @@
   },
   "ydb": {
     "deps": [
-      "apache-airflow-providers-common-sql>=1.14.1",
+      "apache-airflow-providers-common-sql>=1.20.0",
       "apache-airflow>=2.8.0",
       "ydb-dbapi>=0.1.0",
       "ydb>=3.18.8"
diff --git a/providers/src/airflow/providers/amazon/provider.yaml 
b/providers/src/airflow/providers/amazon/provider.yaml
index 2e49d8845b2..9cebb32d488 100644
--- a/providers/src/airflow/providers/amazon/provider.yaml
+++ b/providers/src/airflow/providers/amazon/provider.yaml
@@ -95,7 +95,7 @@ versions:
 dependencies:
   - apache-airflow>=2.8.0
   - apache-airflow-providers-common-compat>=1.2.1
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - apache-airflow-providers-http
   # We should update minimum version of boto3 and here regularly to avoid 
`pip` backtracking with the number
   # of candidates to consider. Make sure to configure boto3 version here as 
well as in all the tools below
diff --git a/providers/src/airflow/providers/apache/drill/provider.yaml 
b/providers/src/airflow/providers/apache/drill/provider.yaml
index 8512112bf09..f649512903a 100644
--- a/providers/src/airflow/providers/apache/drill/provider.yaml
+++ b/providers/src/airflow/providers/apache/drill/provider.yaml
@@ -53,7 +53,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - sqlalchemy-drill>=1.1.0
 
 integrations:
diff --git a/providers/src/airflow/providers/apache/druid/provider.yaml 
b/providers/src/airflow/providers/apache/druid/provider.yaml
index c67d658f8ac..416602ea034 100644
--- a/providers/src/airflow/providers/apache/druid/provider.yaml
+++ b/providers/src/airflow/providers/apache/druid/provider.yaml
@@ -60,7 +60,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - pydruid>=0.4.1
 
 integrations:
diff --git a/providers/src/airflow/providers/apache/hive/provider.yaml 
b/providers/src/airflow/providers/apache/hive/provider.yaml
index 1ee8e62f4ca..1cfdf10fe56 100644
--- a/providers/src/airflow/providers/apache/hive/provider.yaml
+++ b/providers/src/airflow/providers/apache/hive/provider.yaml
@@ -73,7 +73,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - hmsclient>=0.1.0
   # In pandas 2.2 minimal version of the sqlalchemy is 2.0
   # 
https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
diff --git a/providers/src/airflow/providers/apache/impala/provider.yaml 
b/providers/src/airflow/providers/apache/impala/provider.yaml
index d7958369cff..3dc44b77d83 100644
--- a/providers/src/airflow/providers/apache/impala/provider.yaml
+++ b/providers/src/airflow/providers/apache/impala/provider.yaml
@@ -41,7 +41,7 @@ versions:
 
 dependencies:
   - impyla>=0.18.0,<1.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - apache-airflow>=2.8.0
 
 additional-extras:
diff --git a/providers/src/airflow/providers/apache/pinot/provider.yaml 
b/providers/src/airflow/providers/apache/pinot/provider.yaml
index befaf091e27..ef0a9ae5d3c 100644
--- a/providers/src/airflow/providers/apache/pinot/provider.yaml
+++ b/providers/src/airflow/providers/apache/pinot/provider.yaml
@@ -53,7 +53,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - pinotdb>=5.1.0
 
 integrations:
diff --git a/providers/src/airflow/providers/common/sql/hooks/sql.py 
b/providers/src/airflow/providers/common/sql/hooks/sql.py
index 60c659e340f..4904bc23f8d 100644
--- a/providers/src/airflow/providers/common/sql/hooks/sql.py
+++ b/providers/src/airflow/providers/common/sql/hooks/sql.py
@@ -150,6 +150,8 @@ class DbApiHook(BaseHook):
     conn_name_attr: str
     # Override to have a default connection id for a particular dbHook
     default_conn_name = "default_conn_id"
+    # Override if this db doesn't support semicolons in SQL queries
+    strip_semicolon = False
     # Override if this db supports autocommit.
     supports_autocommit = False
     # Override if this db supports executemany.
@@ -369,14 +371,18 @@ class DbApiHook(BaseHook):
         return sql.strip().rstrip(";")
 
     @staticmethod
-    def split_sql_string(sql: str) -> list[str]:
+    def split_sql_string(sql: str, strip_semicolon: bool = False) -> list[str]:
         """
         Split string into multiple SQL expressions.
 
         :param sql: SQL string potentially consisting of multiple expressions
+        :param strip_semicolon: whether to strip semicolon from SQL string
         :return: list of individual expressions
         """
-        splits = sqlparse.split(sqlparse.format(sql, strip_comments=True))
+        splits = sqlparse.split(
+            sql=sqlparse.format(sql, strip_comments=True),
+            strip_semicolon=strip_semicolon,
+        )
         return [s for s in splits if s]
 
     @property
@@ -471,7 +477,10 @@ class DbApiHook(BaseHook):
 
         if isinstance(sql, str):
             if split_statements:
-                sql_list: Iterable[str] = self.split_sql_string(sql)
+                sql_list: Iterable[str] = self.split_sql_string(
+                    sql=sql,
+                    strip_semicolon=self.strip_semicolon,
+                )
             else:
                 sql_list = [sql] if sql.strip() else []
         else:
diff --git a/providers/src/airflow/providers/common/sql/hooks/sql.pyi 
b/providers/src/airflow/providers/common/sql/hooks/sql.pyi
index 0039733d966..ed93958401e 100644
--- a/providers/src/airflow/providers/common/sql/hooks/sql.pyi
+++ b/providers/src/airflow/providers/common/sql/hooks/sql.pyi
@@ -54,6 +54,7 @@ class ConnectorProtocol(Protocol):
 class DbApiHook(BaseHook):
     conn_name_attr: str
     default_conn_name: str
+    strip_semicolon: bool
     supports_autocommit: bool
     supports_executemany: bool
     connector: ConnectorProtocol | None
@@ -93,7 +94,7 @@ class DbApiHook(BaseHook):
     @staticmethod
     def strip_sql_string(sql: str) -> str: ...
     @staticmethod
-    def split_sql_string(sql: str) -> list[str]: ...
+    def split_sql_string(sql: str, strip_semicolon: bool = False) -> 
list[str]: ...
     @property
     def last_description(self) -> Sequence[Sequence] | None: ...
     @overload
diff --git a/providers/src/airflow/providers/common/sql/provider.yaml 
b/providers/src/airflow/providers/common/sql/provider.yaml
index f0251670727..42fd9d72dc8 100644
--- a/providers/src/airflow/providers/common/sql/provider.yaml
+++ b/providers/src/airflow/providers/common/sql/provider.yaml
@@ -25,6 +25,7 @@ state: ready
 source-date-epoch: 1730012422
 # note that those versions are maintained by release manager - do not update 
them manually
 versions:
+  - 1.20.0
   - 1.19.0
   - 1.18.0
   - 1.17.1
@@ -64,7 +65,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - sqlparse>=0.4.2
+  - sqlparse>=0.5.1
   - more-itertools>=9.0.0
 
 additional-extras:
diff --git a/providers/src/airflow/providers/databricks/provider.yaml 
b/providers/src/airflow/providers/databricks/provider.yaml
index fe2bb9f7fde..d7ec6c2f892 100644
--- a/providers/src/airflow/providers/databricks/provider.yaml
+++ b/providers/src/airflow/providers/databricks/provider.yaml
@@ -72,7 +72,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.10.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - requests>=2.27.0,<3
   # The connector 2.9.0 released on Aug 10, 2023 has a bug that it does not 
properly declare urllib3 and
   # it needs to be excluded. See 
https://github.com/databricks/databricks-sql-python/issues/190
diff --git a/providers/src/airflow/providers/elasticsearch/provider.yaml 
b/providers/src/airflow/providers/elasticsearch/provider.yaml
index 595a3d45be5..a3fa966f2ac 100644
--- a/providers/src/airflow/providers/elasticsearch/provider.yaml
+++ b/providers/src/airflow/providers/elasticsearch/provider.yaml
@@ -70,7 +70,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - elasticsearch>=8.10,<9
 
 integrations:
diff --git a/providers/src/airflow/providers/exasol/provider.yaml 
b/providers/src/airflow/providers/exasol/provider.yaml
index bca92be1377..cfc3a6fdd45 100644
--- a/providers/src/airflow/providers/exasol/provider.yaml
+++ b/providers/src/airflow/providers/exasol/provider.yaml
@@ -61,7 +61,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - pyexasol>=0.5.1
   # In pandas 2.2 minimal version of the sqlalchemy is 2.0
   # 
https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
diff --git a/providers/src/airflow/providers/google/provider.yaml 
b/providers/src/airflow/providers/google/provider.yaml
index 1790008b3a3..0d5fb07f8e0 100644
--- a/providers/src/airflow/providers/google/provider.yaml
+++ b/providers/src/airflow/providers/google/provider.yaml
@@ -99,7 +99,7 @@ versions:
 dependencies:
   - apache-airflow>=2.8.0
   - apache-airflow-providers-common-compat>=1.2.1
-  - apache-airflow-providers-common-sql>=1.7.2
+  - apache-airflow-providers-common-sql>=1.20.0
   - asgiref>=3.5.2
   - dill>=0.2.3
   - gcloud-aio-auth>=5.2.0
diff --git a/providers/src/airflow/providers/jdbc/provider.yaml 
b/providers/src/airflow/providers/jdbc/provider.yaml
index 5165d339396..364bc9f451d 100644
--- a/providers/src/airflow/providers/jdbc/provider.yaml
+++ b/providers/src/airflow/providers/jdbc/provider.yaml
@@ -55,7 +55,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - jaydebeapi>=1.1.1
 
 integrations:
diff --git a/providers/src/airflow/providers/microsoft/mssql/provider.yaml 
b/providers/src/airflow/providers/microsoft/mssql/provider.yaml
index 8bee7393ccf..8fbda1aefab 100644
--- a/providers/src/airflow/providers/microsoft/mssql/provider.yaml
+++ b/providers/src/airflow/providers/microsoft/mssql/provider.yaml
@@ -56,7 +56,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - pymssql>=2.3.0
   # The methodtools dependency can be removed with min airflow version >=2.9.1
   # as it was added in https://github.com/apache/airflow/pull/37757
diff --git a/providers/src/airflow/providers/mysql/provider.yaml 
b/providers/src/airflow/providers/mysql/provider.yaml
index a1ab2229dfd..19f53bb141f 100644
--- a/providers/src/airflow/providers/mysql/provider.yaml
+++ b/providers/src/airflow/providers/mysql/provider.yaml
@@ -69,7 +69,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   # The mysqlclient package creates friction when installing on MacOS as it 
needs pkg-config to
   # Install and compile, and it's really only used by MySQL provider, so we 
can skip it on MacOS
   # Instead, if someone attempts to use it on MacOS, they will get explanatory 
error on how to install it
diff --git a/providers/src/airflow/providers/odbc/provider.yaml 
b/providers/src/airflow/providers/odbc/provider.yaml
index 9904e727c87..fb3c7160310 100644
--- a/providers/src/airflow/providers/odbc/provider.yaml
+++ b/providers/src/airflow/providers/odbc/provider.yaml
@@ -56,7 +56,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - pyodbc>=5.0.0
 
 integrations:
diff --git a/providers/src/airflow/providers/openlineage/provider.yaml 
b/providers/src/airflow/providers/openlineage/provider.yaml
index e638daba78e..c9eaa520699 100644
--- a/providers/src/airflow/providers/openlineage/provider.yaml
+++ b/providers/src/airflow/providers/openlineage/provider.yaml
@@ -25,6 +25,7 @@ state: ready
 source-date-epoch: 1730013356
 # note that those versions are maintained by release manager - do not update 
them manually
 versions:
+  - 1.14.0
   - 1.13.0
   - 1.12.2
   - 1.12.1
@@ -51,7 +52,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.6.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - apache-airflow-providers-common-compat>=1.2.1
   - attrs>=22.2
   - openlineage-integration-common>=1.24.2
diff --git a/providers/src/airflow/providers/openlineage/sqlparser.py 
b/providers/src/airflow/providers/openlineage/sqlparser.py
index 323ed8a11b8..9751af3f794 100644
--- a/providers/src/airflow/providers/openlineage/sqlparser.py
+++ b/providers/src/airflow/providers/openlineage/sqlparser.py
@@ -331,8 +331,11 @@ class SQLParser(LoggingMixin):
             split_statement = DbApiHook.split_sql_string
         except (ImportError, AttributeError):
             # No common.sql Airflow provider available or version is too old.
-            def split_statement(sql: str) -> list[str]:
-                splits = sqlparse.split(sqlparse.format(sql, 
strip_comments=True))
+            def split_statement(sql: str, strip_semicolon: bool = False) -> 
list[str]:
+                splits = sqlparse.split(
+                    sql=sqlparse.format(sql, strip_comments=True),
+                    strip_semicolon=strip_semicolon,
+                )
                 return [s for s in splits if s]
 
         if isinstance(sql, str):
diff --git a/providers/src/airflow/providers/oracle/provider.yaml 
b/providers/src/airflow/providers/oracle/provider.yaml
index 01309d91146..c50924d55e6 100644
--- a/providers/src/airflow/providers/oracle/provider.yaml
+++ b/providers/src/airflow/providers/oracle/provider.yaml
@@ -61,7 +61,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - oracledb>=2.0.0
 
 additional-extras:
diff --git a/providers/src/airflow/providers/postgres/provider.yaml 
b/providers/src/airflow/providers/postgres/provider.yaml
index 51332b9b0fe..7ad54604396 100644
--- a/providers/src/airflow/providers/postgres/provider.yaml
+++ b/providers/src/airflow/providers/postgres/provider.yaml
@@ -67,7 +67,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.17.0
+  - apache-airflow-providers-common-sql>=1.20.0
   - psycopg2-binary>=2.9.4
 
 additional-extras:
diff --git a/providers/src/airflow/providers/presto/hooks/presto.py 
b/providers/src/airflow/providers/presto/hooks/presto.py
index bd2436d5828..adb4dffa680 100644
--- a/providers/src/airflow/providers/presto/hooks/presto.py
+++ b/providers/src/airflow/providers/presto/hooks/presto.py
@@ -84,6 +84,7 @@ class PrestoHook(DbApiHook):
     default_conn_name = "presto_default"
     conn_type = "presto"
     hook_name = "Presto"
+    strip_semicolon = True
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
diff --git a/providers/src/airflow/providers/presto/provider.yaml 
b/providers/src/airflow/providers/presto/provider.yaml
index 0cc9bc5a44d..c6ce5ad40af 100644
--- a/providers/src/airflow/providers/presto/provider.yaml
+++ b/providers/src/airflow/providers/presto/provider.yaml
@@ -62,7 +62,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - presto-python-client>=0.8.4
   # In pandas 2.2 minimal version of the sqlalchemy is 2.0
   # 
https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
diff --git a/providers/src/airflow/providers/slack/provider.yaml 
b/providers/src/airflow/providers/slack/provider.yaml
index 1444036923e..597b0186174 100644
--- a/providers/src/airflow/providers/slack/provider.yaml
+++ b/providers/src/airflow/providers/slack/provider.yaml
@@ -66,7 +66,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - slack_sdk>=3.19.0
 
 integrations:
diff --git a/providers/src/airflow/providers/snowflake/provider.yaml 
b/providers/src/airflow/providers/snowflake/provider.yaml
index 08a2ce861d4..a3bbe899271 100644
--- a/providers/src/airflow/providers/snowflake/provider.yaml
+++ b/providers/src/airflow/providers/snowflake/provider.yaml
@@ -81,7 +81,7 @@ versions:
 dependencies:
   - apache-airflow>=2.8.0
   - apache-airflow-providers-common-compat>=1.1.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   # In pandas 2.2 minimal version of the sqlalchemy is 2.0
   # 
https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
   # However Airflow not fully supports it yet: 
https://github.com/apache/airflow/issues/28723
diff --git a/providers/src/airflow/providers/sqlite/provider.yaml 
b/providers/src/airflow/providers/sqlite/provider.yaml
index 586551285d8..4f00d3e6f43 100644
--- a/providers/src/airflow/providers/sqlite/provider.yaml
+++ b/providers/src/airflow/providers/sqlite/provider.yaml
@@ -56,7 +56,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
 
 integrations:
   - integration-name: SQLite
diff --git a/providers/src/airflow/providers/standard/provider.yaml 
b/providers/src/airflow/providers/standard/provider.yaml
index d936d151ecd..ba1a53e44bf 100644
--- a/providers/src/airflow/providers/standard/provider.yaml
+++ b/providers/src/airflow/providers/standard/provider.yaml
@@ -29,7 +29,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.18.0
+  - apache-airflow-providers-common-sql>=1.20.0
 
 integrations:
   - integration-name: Standard
diff --git a/providers/src/airflow/providers/teradata/provider.yaml 
b/providers/src/airflow/providers/teradata/provider.yaml
index 3e304b7334b..445c2606d33 100644
--- a/providers/src/airflow/providers/teradata/provider.yaml
+++ b/providers/src/airflow/providers/teradata/provider.yaml
@@ -36,7 +36,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - teradatasqlalchemy>=17.20.0.0
   - teradatasql>=17.20.0.28
 
diff --git a/providers/src/airflow/providers/trino/hooks/trino.py 
b/providers/src/airflow/providers/trino/hooks/trino.py
index 9e776361c14..e450c9b67e3 100644
--- a/providers/src/airflow/providers/trino/hooks/trino.py
+++ b/providers/src/airflow/providers/trino/hooks/trino.py
@@ -86,6 +86,7 @@ class TrinoHook(DbApiHook):
     default_conn_name = "trino_default"
     conn_type = "trino"
     hook_name = "Trino"
+    strip_semicolon = True
     query_id = ""
     _test_connection_sql = "select 1"
 
diff --git a/providers/src/airflow/providers/trino/provider.yaml 
b/providers/src/airflow/providers/trino/provider.yaml
index 876244aa1c6..a64fde3e2c8 100644
--- a/providers/src/airflow/providers/trino/provider.yaml
+++ b/providers/src/airflow/providers/trino/provider.yaml
@@ -65,7 +65,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   # In pandas 2.2 minimal version of the sqlalchemy is 2.0
   # 
https://pandas.pydata.org/docs/whatsnew/v2.2.0.html#increased-minimum-versions-for-dependencies
   # However Airflow not fully supports it yet: 
https://github.com/apache/airflow/issues/28723
diff --git a/providers/src/airflow/providers/vertica/provider.yaml 
b/providers/src/airflow/providers/vertica/provider.yaml
index c33d202fb56..e8bd4256b2d 100644
--- a/providers/src/airflow/providers/vertica/provider.yaml
+++ b/providers/src/airflow/providers/vertica/provider.yaml
@@ -54,7 +54,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.3.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - vertica-python>=0.6.0
 
 integrations:
diff --git a/providers/src/airflow/providers/ydb/provider.yaml 
b/providers/src/airflow/providers/ydb/provider.yaml
index f70a70b2834..26ffd8f8f84 100644
--- a/providers/src/airflow/providers/ydb/provider.yaml
+++ b/providers/src/airflow/providers/ydb/provider.yaml
@@ -33,7 +33,7 @@ versions:
 
 dependencies:
   - apache-airflow>=2.8.0
-  - apache-airflow-providers-common-sql>=1.14.1
+  - apache-airflow-providers-common-sql>=1.20.0
   - ydb>=3.18.8
   - ydb-dbapi>=0.1.0
 
diff --git a/providers/tests/presto/hooks/test_presto.py 
b/providers/tests/presto/hooks/test_presto.py
index 2b9449eec23..74ee349f9d8 100644
--- a/providers/tests/presto/hooks/test_presto.py
+++ b/providers/tests/presto/hooks/test_presto.py
@@ -276,6 +276,16 @@ class TestPrestoHook:
 
         self.cur.execute.assert_called_once_with(statement, None)
 
+    def test_split_sql_string(self):
+        statement = "SELECT 1; SELECT 2"
+        result_sets = ["SELECT 1", "SELECT 2"]
+        self.cur.fetchall.return_value = result_sets
+
+        assert result_sets == self.db_hook.split_sql_string(
+            sql=statement,
+            strip_semicolon=self.db_hook.strip_semicolon,
+        )
+
     def test_serialize_cell(self):
         assert "foo" == self.db_hook._serialize_cell("foo", None)
         assert 1 == self.db_hook._serialize_cell(1, None)
diff --git a/providers/tests/trino/hooks/test_trino.py 
b/providers/tests/trino/hooks/test_trino.py
index 312ae5ec582..5f6e0961727 100644
--- a/providers/tests/trino/hooks/test_trino.py
+++ b/providers/tests/trino/hooks/test_trino.py
@@ -345,6 +345,16 @@ class TestTrinoHook:
 
         self.cur.execute.assert_called_once_with(statement, None)
 
+    def test_split_sql_string(self):
+        statement = "SELECT 1; SELECT 2"
+        result_sets = ["SELECT 1", "SELECT 2"]
+        self.cur.fetchall.return_value = result_sets
+
+        assert result_sets == self.db_hook.split_sql_string(
+            sql=statement,
+            strip_semicolon=self.db_hook.strip_semicolon,
+        )
+
     @patch("airflow.providers.trino.hooks.trino.TrinoHook.run")
     def test_run(self, mock_run):
         sql = "SELECT 1"

Reply via email to