kaya-abdullah commented on code in PR #45675:
URL: https://github.com/apache/superset/pull/45675#discussion_r4387037202


##########
superset/db_engine_specs/oracle.py:
##########
@@ -86,24 +90,57 @@ def get_limit_method(cls, database: Database) -> 
LimitMethod:
 
         return cls.limit_method
 
+    @classmethod
+    def get_max_column_name_length(cls, database: Database) -> int | None:
+        """
+        Cap labels at 30 bytes on Oracle releases before 12.2.
+
+        Those releases reject longer labels with "ORA-00972: identifier is too
+        long". A version given only as "12c" is treated as 12.1, since 30 bytes
+        is accepted by every release.
+        """
+        version = cls.get_server_version(database)
+        if version is not None and version < LONG_IDENTIFIERS_VERSION:
+            return ORACLE_LEGACY_MAX_IDENTIFIER_LENGTH
+
+        return cls.max_column_name_length

Review Comment:
   This only happens when the version lookup itself fails, and the lookup 
connects to the same database the query is about to run on, so in practice that 
query fails anyway. The failure isn't cached, so the next query reads the 
version again and gets the 30-byte limit. `get_limit_method` falls back the 
same way. Using 30 when the version is unknown would also change the SQL on 
12.2+ whenever the lookup fails, so I left it as is.



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


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to