diff --git a/onetl/connection/db_connection/oracle/connection.py b/onetl/connection/db_connection/oracle/connection.py index 45fc76558..a2d8d35b9 100644 --- a/onetl/connection/db_connection/oracle/connection.py +++ b/onetl/connection/db_connection/oracle/connection.py @@ -206,14 +206,14 @@ def get_packages( """ default_java_version = "8" - default_package_version = "23.3.0.0.23.09" + default_package_version = "23.3.0.23.09" java_ver = Version(java_version or default_java_version) if java_ver.major < 8: raise ValueError(f"Java version must be at least 8, got {java_ver.major}") jre_ver = "8" if java_ver.major < 11 else "11" - jdbc_version = Version(package_version or default_package_version) + jdbc_version = Version(package_version or default_package_version).min_digits(4) return [f"com.oracle.database.jdbc:ojdbc{jre_ver}:{jdbc_version}"] @@ -222,7 +222,7 @@ def package(cls) -> str: """Get package name to be downloaded by Spark.""" msg = "`Oracle.package` will be removed in 1.0.0, use `Oracle.get_packages()` instead" warnings.warn(msg, UserWarning, stacklevel=3) - return "com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09" + return "com.oracle.database.jdbc:ojdbc8:23.3.0.23.09" @property def jdbc_url(self) -> str: diff --git a/tests/tests_unit/tests_db_connection_unit/test_oracle_unit.py b/tests/tests_unit/tests_db_connection_unit/test_oracle_unit.py index 69fca40cc..6e8a31dc1 100644 --- a/tests/tests_unit/tests_db_connection_unit/test_oracle_unit.py +++ b/tests/tests_unit/tests_db_connection_unit/test_oracle_unit.py @@ -14,7 +14,7 @@ def test_oracle_class_attributes(): def test_oracle_package(): warning_msg = re.escape("will be removed in 1.0.0, use `Oracle.get_packages()` instead") with pytest.warns(UserWarning, match=warning_msg): - assert Oracle.package == "com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09" + assert Oracle.package == "com.oracle.database.jdbc:ojdbc8:23.3.0.23.09" def test_oracle_get_packages_no_input(): @@ -30,20 +30,38 @@ def test_oracle_get_packages_java_version_not_supported(java_version): @pytest.mark.parametrize( "java_version, package_version, expected_packages", [ - (None, None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]), - ("8", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]), - ("8", "23.3.0.0.23.09", ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]), - ("9", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.0.23.09"]), - ("11", None, ["com.oracle.database.jdbc:ojdbc11:23.3.0.0.23.09"]), + (None, None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]), + ("8", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]), + ("8", "23.3.0.23.09", ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]), + ("8", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc8:21.13.0.0"]), + ("9", None, ["com.oracle.database.jdbc:ojdbc8:23.3.0.23.09"]), + ("9", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc8:21.13.0.0"]), + ("11", None, ["com.oracle.database.jdbc:ojdbc11:23.3.0.23.09"]), ("11", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc11:21.13.0.0"]), ("17", "21.13.0.0", ["com.oracle.database.jdbc:ojdbc11:21.13.0.0"]), - ("20", "23.3.0.0.23.09", ["com.oracle.database.jdbc:ojdbc11:23.3.0.0.23.09"]), + ("20", "23.3.0.23.09", ["com.oracle.database.jdbc:ojdbc11:23.3.0.23.09"]), ], ) def test_oracle_get_packages(java_version, package_version, expected_packages): assert Oracle.get_packages(java_version=java_version, package_version=package_version) == expected_packages +@pytest.mark.parametrize( + "java_version, package_version", + [ + ("8", "23.3.0"), + ("11", "23.3"), + ("11", "a.b.c.d"), + ], +) +def test_oracle_get_packages_invalid_version(java_version, package_version): + with pytest.raises( + ValueError, + match=rf"Version '{package_version}' does not have enough numeric components for requested format \(expected at least 4\).", + ): + Oracle.get_packages(java_version=java_version, package_version=package_version) + + @pytest.mark.parametrize("java_version", ["7", "6"]) def test_oracle_get_packages_java_version_not_supported(java_version): with pytest.raises(ValueError, match=f"Java version must be at least 8, got {java_version}"):