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 1d0a8f7cdac add exasol operators doc and example & refactor trino 
(#49679)
1d0a8f7cdac is described below

commit 1d0a8f7cdac0f420e292955fb846fc8306e54ade
Author: Aaron Chen <[email protected]>
AuthorDate: Wed Apr 30 00:49:23 2025 -0700

    add exasol operators doc and example & refactor trino (#49679)
    
    * add exasol operators doc, example and refactor trino
    
    * fix lint issue
    
    * fix lint issue #2
    
    * fix code duplicate issue
    
    * fix lint issue #3
    
    * fix CI Static Checks
---
 providers/exasol/docs/index.rst                    | 14 ++++
 providers/exasol/docs/operators.rst                | 79 +++++++++++++++++++
 providers/exasol/tests/system/__init__.py          | 16 ++++
 providers/exasol/tests/system/exasol/__init__.py   | 16 ++++
 .../exasol/tests/system/exasol/example_exasol.py   | 91 ++++++++++++++++++++++
 .../docs/{operators/transfer => }/gcs_to_trino.rst |  0
 providers/trino/docs/index.rst                     |  4 +-
 .../docs/{operators/trino.rst => operators.rst}    |  0
 providers/trino/docs/operators/index.rst           | 25 ------
 9 files changed, 218 insertions(+), 27 deletions(-)

diff --git a/providers/exasol/docs/index.rst b/providers/exasol/docs/index.rst
index d7755960f01..cf33cd9c50e 100644
--- a/providers/exasol/docs/index.rst
+++ b/providers/exasol/docs/index.rst
@@ -29,6 +29,13 @@
     Changelog <changelog>
     Security <security>
 
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: Guides
+
+    Operators <operators>
+
 .. toctree::
     :hidden:
     :maxdepth: 1
@@ -44,6 +51,13 @@
     PyPI Repository <https://pypi.org/project/apache-airflow-providers-exasol/>
     Installing from sources <installing-providers-from-sources>
 
+.. toctree::
+    :hidden:
+    :maxdepth: 1
+    :caption: System tests
+
+    System Tests <_api/tests/system/exasol/index>
+
 .. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE 
OVERWRITTEN AT RELEASE TIME!
 
 
diff --git a/providers/exasol/docs/operators.rst 
b/providers/exasol/docs/operators.rst
new file mode 100644
index 00000000000..4d8e6f2c0fb
--- /dev/null
+++ b/providers/exasol/docs/operators.rst
@@ -0,0 +1,79 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+
+
+.. _howto/operator:ExasolOperator:
+
+SQLExecuteQueryOperator to connect to Exasol
+====================================================
+
+Use the 
:class:`SQLExecuteQueryOperator<airflow.providers.common.sql.operators.sql>` to 
execute
+SQL commands in an `Exasol <https://www.exasol.com/>`__ database.
+
+.. note::
+    Previously, an ``ExasolOperator`` was used to perform this kind of 
operation.
+    After deprecation this has been removed. Please use 
``SQLExecuteQueryOperator`` instead.
+
+.. note::
+    Make sure you have installed the ``apache-airflow-providers-exasol`` 
package
+    and its dependency ``pyexasol`` to enable Exasol support.
+
+Using the Operator
+^^^^^^^^^^^^^^^^^^
+
+Use the ``conn_id`` argument to connect to your Exasol instance where
+the connection metadata is structured as follows:
+
+.. list-table:: Exasol Airflow Connection Metadata
+   :widths: 25 25
+   :header-rows: 1
+
+   * - Parameter
+     - Input
+   * - Host: string
+     - Exasol hostname, container alias or IP address
+   * - Schema: string
+     - Default schema name (e.g. ``TEST``) (optional)
+   * - Login: string
+     - Exasol username (e.g. ``TEST`` or ``sys``)
+   * - Password: string
+     - Exasol password
+   * - Port: int
+     - Exasol port (default: 8563)
+   * - Extra: JSON
+     - Additional connection configuration passed to *pyexasol*, such as:
+       ``{"encryption": false}`` or
+       ``{"encryption": true, "websocket_sslopt": {"cert_reqs": 0}}``
+
+An example usage of the SQLExecuteQueryOperator to connect to Exasol is as 
follows:
+
+.. exampleinclude:: /../../exasol/tests/system/exasol/example_exasol.py
+    :language: python
+    :start-after: [START howto_operator_exasol]
+    :end-before: [END howto_operator_exasol]
+
+Reference
+^^^^^^^^^
+For further information, look at:
+
+* `Exasol Documentation <https://docs.exasol.com/>`__
+
+.. note::
+
+  Parameters provided directly via SQLExecuteQueryOperator() take precedence
+  over those specified in the Airflow connection metadata (such as ``schema``, 
``login``, ``password``, etc).
diff --git a/providers/exasol/tests/system/__init__.py 
b/providers/exasol/tests/system/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ b/providers/exasol/tests/system/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/providers/exasol/tests/system/exasol/__init__.py 
b/providers/exasol/tests/system/exasol/__init__.py
new file mode 100644
index 00000000000..13a83393a91
--- /dev/null
+++ b/providers/exasol/tests/system/exasol/__init__.py
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
diff --git a/providers/exasol/tests/system/exasol/example_exasol.py 
b/providers/exasol/tests/system/exasol/example_exasol.py
new file mode 100644
index 00000000000..c477aec01f4
--- /dev/null
+++ b/providers/exasol/tests/system/exasol/example_exasol.py
@@ -0,0 +1,91 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+This is an example DAG for the use of the SQLExecuteQueryOperator with Exasol.
+"""
+
+from __future__ import annotations
+
+import datetime
+
+from airflow import DAG
+from airflow.providers.common.sql.operators.sql import SQLExecuteQueryOperator
+from airflow.providers.exasol.hooks.exasol import exasol_fetch_all_handler
+
+DAG_ID = "example_exasol"
+
+with DAG(
+    dag_id=DAG_ID,
+    start_date=datetime.datetime(2025, 1, 1),
+    default_args={"conn_id": "my_exasol_conn", "handler": 
exasol_fetch_all_handler},
+    schedule="@once",
+    catchup=False,
+) as dag:
+    # [START howto_operator_exasol]
+    create_table_exasol = SQLExecuteQueryOperator(
+        task_id="create_table_exasol",
+        sql="""
+            CREATE OR REPLACE TABLE exasol_example (
+                a VARCHAR(100),
+                b DECIMAL(18,0)
+            );
+        """,
+    )
+
+    alter_table_exasol = SQLExecuteQueryOperator(
+        task_id="alter_table_exasol",
+        sql="ALTER TABLE exasol_example ADD COLUMN c DECIMAL(18,0);",
+    )
+
+    insert_data_exasol = SQLExecuteQueryOperator(
+        task_id="insert_data_exasol",
+        sql="""
+            INSERT INTO exasol_example (a, b, c)
+            VALUES
+              ('a', 1, 1),
+              ('a', 2, 1),
+              ('b', 3, 1);
+        """,
+    )
+
+    select_data_exasol = SQLExecuteQueryOperator(
+        task_id="select_data_exasol",
+        sql="SELECT * FROM exasol_example;",
+    )
+
+    drop_table_exasol = SQLExecuteQueryOperator(
+        task_id="drop_table_exasol",
+        sql="DROP TABLE exasol_example;",
+    )
+    # [END howto_operator_exasol]
+
+    (
+        create_table_exasol
+        >> alter_table_exasol
+        >> insert_data_exasol
+        >> select_data_exasol
+        >> drop_table_exasol
+    )
+
+    from tests_common.test_utils.watcher import watcher
+
+    list(dag.tasks) >> watcher()
+
+from tests_common.test_utils.system_tests import get_test_run  # noqa: E402
+
+# Needed to run the example DAG with pytest (see: 
tests/system/README.md#run_via_pytest)
+test_run = get_test_run(dag)
diff --git a/providers/trino/docs/operators/transfer/gcs_to_trino.rst 
b/providers/trino/docs/gcs_to_trino.rst
similarity index 100%
rename from providers/trino/docs/operators/transfer/gcs_to_trino.rst
rename to providers/trino/docs/gcs_to_trino.rst
diff --git a/providers/trino/docs/index.rst b/providers/trino/docs/index.rst
index 30cb1263cb1..d4563b46220 100644
--- a/providers/trino/docs/index.rst
+++ b/providers/trino/docs/index.rst
@@ -34,8 +34,8 @@
     :maxdepth: 1
     :caption: Guides
 
-    TrinoTransferOperator types <operators/transfer/gcs_to_trino>
-    TrinoOperator <operators/index>
+    TrinoTransferOperator types <gcs_to_trino>
+    Operators <operators>
     Connection types <connections>
 
 .. toctree::
diff --git a/providers/trino/docs/operators/trino.rst 
b/providers/trino/docs/operators.rst
similarity index 100%
rename from providers/trino/docs/operators/trino.rst
rename to providers/trino/docs/operators.rst
diff --git a/providers/trino/docs/operators/index.rst 
b/providers/trino/docs/operators/index.rst
deleted file mode 100644
index d51bca0f7ae..00000000000
--- a/providers/trino/docs/operators/index.rst
+++ /dev/null
@@ -1,25 +0,0 @@
- .. Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
- ..   http://www.apache.org/licenses/LICENSE-2.0
-
- .. Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-
-Trino operator
-==============
-
-.. toctree::
-    :maxdepth: 1
-    :glob:
-
-    *

Reply via email to