potiuk commented on code in PR #25430:
URL: https://github.com/apache/airflow/pull/25430#discussion_r937765188


##########
airflow/providers/common/sql/hooks/sql.py:
##########
@@ -30,13 +30,10 @@
 from airflow.utils.module_loading import import_string
 from airflow.version import version
 
-if TYPE_CHECKING:
-    from sqlalchemy.engine import CursorResult
 
-
-def fetch_all_handler(cursor: 'CursorResult') -> Optional[List[Tuple]]:
+def fetch_all_handler(cursor) -> Optional[List[Tuple]]:
     """Handler for DbApiHook.run() to return results"""
-    if cursor.returns_rows:
+    if cursor.description is not None:
         return cursor.fetchall()

Review Comment:
   What I particularly do not like about rowcount is this not about `-1`:
   
   
   ```
   The attribute is -1 in case no 
[.execute*()](https://peps.python.org/pep-0249/#id14) 
   has been performed on the cursor or the rowcount of the last operation 
   is cannot be determined by the interface. 
[[7]](https://peps.python.org/pep-0249/#id46)
   
   Note
   Future versions of the DB API specification could redefine the latter case 
to have the object return None instead of -1.
   ```
   
   I think just having the note indicate that we should avoid it, and there is 
absolutely no more guarantees rowcount gives us than description:
   
   ```
   This attribute will be None for operations that do not return rows
   or if the cursor has not had an operation
   invoked via the [.execute*()](https://peps.python.org/pep-0249/#id14) method 
yet."
   ```
   
   This is the same, only less ambiguous IMHO.



##########
airflow/providers/common/sql/hooks/sql.py:
##########
@@ -30,13 +30,10 @@
 from airflow.utils.module_loading import import_string
 from airflow.version import version
 
-if TYPE_CHECKING:
-    from sqlalchemy.engine import CursorResult
 
-
-def fetch_all_handler(cursor: 'CursorResult') -> Optional[List[Tuple]]:
+def fetch_all_handler(cursor) -> Optional[List[Tuple]]:
     """Handler for DbApiHook.run() to return results"""
-    if cursor.returns_rows:
+    if cursor.description is not None:
         return cursor.fetchall()

Review Comment:
   ```
   about cursor.description https://peps.python.org/pep-0249/#description 
   "This attribute will be None for operations that do not return rows
   or if the cursor has not had an operation
   invoked via the [.execute*()](https://peps.python.org/pep-0249/#id14) method 
yet."
   ```
   
   This is indeed part of the standardm, so I do no see why we should not base 
the decision on that @uranusjr ? It's quite explicitly stated in the PEP that 
description is only present when there are some rows potentially to be returned 
(and it can be 0 rows as well).



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