Skip to content

SQLAlchemy 2: Finish organising compliance test suite #256

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Oct 23, 2023

Conversation

susodapop
Copy link
Contributor

@susodapop susodapop commented Oct 23, 2023

Background

Now that we've incorporated the entire SQLAlchemy 2 dialect compliance test suite and implemented the required features, we need to mark which tests are expected to pass versus expected to fail.

Description

This PR splits out the contents of test_suite.py into three files: _regression.py, _unsupported.py, and _future.py. The use of these files is outlined in the new README.tests.md.

As of this PR, the output from pytest -m "skipped" looks like this. Observe how each skip marker indicates if this is unsupported versus a future feature, which a brief explanation as to why.

test_suite.py::ArrayTest::test_array_roundtrip SKIPPED ([FUTURE][ARRAY]: This dialect doesn't implement ARRAY column type handling.)                                                                                                                                                                       [  0%]
test_suite.py::ArrayTest::test_literal_complex SKIPPED ([FUTURE][ARRAY]: This dialect doesn't implement ARRAY column type handling.)                                                                                                                                                                       [  0%]
test_suite.py::ArrayTest::test_literal_simple SKIPPED ([FUTURE][ARRAY]: This dialect doesn't implement ARRAY column type handling.)                                                                                                                                                                        [  0%]
test_suite.py::AutocommitIsolationTest::test_autocommit_off SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                               [  0%]
test_suite.py::AutocommitIsolationTest::test_autocommit_on SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                                [  1%]
test_suite.py::AutocommitIsolationTest::test_dialect_autocommit_is_restored[not_use_dialect_setting] SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                      [  1%]
test_suite.py::AutocommitIsolationTest::test_dialect_autocommit_is_restored[use_dialect_setting] SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                          [  1%]
test_suite.py::AutocommitIsolationTest::test_turn_autocommit_off_via_default_iso_level SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                    [  1%]
test_suite.py::BinaryTest_databricks+databricks::test_binary_roundtrip[7\xe7\x9f] SKIPPED ([FUTURE][BINARY]: This dialect doesn't implement BINARY column type handling.)                                                                                                                                  [  1%]
test_suite.py::BinaryTest_databricks+databricks::test_binary_roundtrip[this is binary] SKIPPED ([FUTURE][BINARY]: This dialect doesn't implement BINARY column type handling.)                                                                                                                             [  2%]
test_suite.py::BinaryTest_databricks+databricks::test_pickle_roundtrip SKIPPED ([FUTURE][BINARY]: This dialect doesn't implement BINARY column type handling.)                                                                                                                                             [  2%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-not_use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                             [  2%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-not_use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [  2%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-not_use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [  3%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-not_use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                              [  3%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [  3%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                             [  3%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                               [  3%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[(2)-use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [  4%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-not_use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [  4%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-not_use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                  [  4%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-not_use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                    [  4%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-not_use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                       [  4%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [  5%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [  5%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [  5%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[[brackets]-use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [  5%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-not_use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [  6%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-not_use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                  [  6%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-not_use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                    [  6%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-not_use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                       [  6%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [  6%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [  7%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [  7%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[per % cent-use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [  7%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-not_use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [  7%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-not_use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                       [  7%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-not_use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [  8%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-not_use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                            [  8%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-use_composite-(3)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                               [  8%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-use_composite-[brack]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [  8%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-use_composite-col%p] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                             [  9%]
test_suite.py::BizarroCharacterFKResolutionTest_databricks+databricks::test_fk_ref[plain-use_composite-id] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                [  9%]
test_suite.py::CTETest_databricks+databricks::test_delete_from_round_trip SKIPPED ([FUTURE][CTE_FEAT]: This dialect doesn't implement required CTE features. More detail in _future.py)                                                                                                                    [  9%]
test_suite.py::CTETest_databricks+databricks::test_delete_scalar_subq_round_trip SKIPPED ([UNSUPPORTED][CTE_FEAT]: Databricks does not support required CTE features. More detail in _unsupported.py)                                                                                                      [  9%]
test_suite.py::CTETest_databricks+databricks::test_select_recursive_round_trip SKIPPED ([UNSUPPORTED][CTE_FEAT]: Databricks does not support required CTE features. More detail in _unsupported.py)                                                                                                        [  9%]
test_suite.py::CollateTest_databricks+databricks::test_collate_order_by SKIPPED ([FUTURE][COLLATE]: This dialect doesn't implement COLLATE DDL generation.)                                                                                                                                                [ 10%]
test_suite.py::ComponentReflectionTestExtra_databricks+databricks::test_get_check_constraints SKIPPED ([FUTURE][CHECK]: This dialect doesn't implement CHECK constraint handling.)                                                                                                                         [ 10%]
test_suite.py::ComponentReflectionTestExtra_databricks+databricks::test_get_foreign_key_options SKIPPED ([FUTURE][FK_OPTS]: This dialect doesn't implement foreign key option checking.)                                                                                                                   [ 10%]
test_suite.py::ComponentReflectionTestExtra_databricks+databricks::test_reflect_covering_index SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                  [ 10%]
test_suite.py::ComponentReflectionTestExtra_databricks+databricks::test_reflect_expression_based_indexes SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                        [ 10%]
test_suite.py::ComponentReflectionTestExtra_databricks+databricks::test_varchar_reflection SKIPPED ([UNSUPPORTED][STRING_FEAT]: Databricks does not support required STRING type features. More detail in _unsupported.py)                                                                                 [ 11%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_multi_pk_constraint SKIPPED ([FUTURE][MULTI_PK]: This dialect doesn't implement get_multi_pk_constraint method.)                                                                                                                    [ 11%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_multi_table_comment SKIPPED ([FUTURE][TBL_COMMENTS]: This dialect doesn't implement table comment reflection.)                                                                                                                      [ 11%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_multi_unique_constraints SKIPPED ([UNSUPPORTED][UNIQUE]: Databricks does not support UNIQUE constraints.)                                                                                                                           [ 11%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_temp_table_columns SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                                 [ 12%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_temp_table_indexes SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                                 [ 12%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_temp_table_names SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                                   [ 12%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_temp_table_unique_constraints SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                      [ 12%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_temp_view_names SKIPPED ([UNSUPPORTED][BADSETUP][TEMP_TBL]: Databricks does not support temporary tables. More detail in _unsupported.py)                                                                                           [ 12%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_view_definition SKIPPED ([FUTURE][VIEW_DEF]: This dialect doesn't implement get_view_definition method.)                                                                                                                            [ 13%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_get_view_definition_does_not_exist SKIPPED ([FUTURE][VIEW_DEF]: This dialect doesn't implement get_view_definition method.)                                                                                                             [ 13%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_multi_get_table_options_tables SKIPPED ([FUTURE][TBL_OPTS]: This dialect doesn't implement get_table_options method. More detail in _future.py)                                                                                         [ 13%]
test_suite.py::ComponentReflectionTest_databricks+databricks::test_reflect_table_temp_table SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                               [ 13%]
test_suite.py::ComputedColumnTest::test_select_all SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                                                   [ 14%]
test_suite.py::ComputedColumnTest::test_select_columns SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                                               [ 14%]
test_suite.py::ComputedReflectionTest::test_computed_col_default_not_set SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                             [ 14%]
test_suite.py::ComputedReflectionTest::test_get_column_returns_computed SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                              [ 14%]
test_suite.py::ComputedReflectionTest::test_get_column_returns_persisted SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                             [ 14%]
test_suite.py::ComputedReflectionTest::test_get_column_returns_persisted_with_schema SKIPPED ([UNSUPPORTED][GENERATED_COLUMNS]: Databricks does not support computed / generated columns.)                                                                                                                 [ 15%]
test_suite.py::DateTimeTZTest::test_literal SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                       [ 15%]
test_suite.py::DateTimeTZTest::test_null SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                          [ 15%]
test_suite.py::DateTimeTZTest::test_null_bound_comparison SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                         [ 15%]
test_suite.py::DateTimeTZTest::test_round_trip SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                    [ 15%]
test_suite.py::DateTimeTZTest::test_round_trip_decorated SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                          [ 16%]
test_suite.py::DateTimeTZTest::test_select_direct SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                 [ 16%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[%percent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [ 16%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[/slashes/] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                [ 16%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[1col:on] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 17%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[1param] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 17%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[42numbers] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                [ 17%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[[BracketsAndCase]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [ 17%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[___name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 17%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[_name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                    [ 18%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[_starts_with_underscore] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                  [ 18%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[boring] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 18%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[col:ons] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 18%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[dot.s] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                    [ 18%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[has spaces] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                               [ 19%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[more :: %colons%] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 19%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[more/slashes] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                             [ 19%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[par(ens)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [ 19%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[per % cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                               [ 20%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[per cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [ 20%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[percent%(ens)yah] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 20%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[percent%signs] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                            [ 20%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_round_trip_same_named_column[q?marks] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 20%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[%percent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 21%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[/slashes/] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [ 21%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[1col:on] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 21%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[1param] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                    [ 21%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[42numbers] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                 [ 21%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[[BracketsAndCase]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 22%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[___name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 22%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[_name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                     [ 22%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[_starts_with_underscore] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                   [ 22%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[boring] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                    [ 23%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[col:ons] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 23%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[dot.s] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                     [ 23%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[has spaces] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                [ 23%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[more :: %colons%] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [ 23%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[more/slashes] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                              [ 24%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[par(ens)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 24%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[per % cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                [ 24%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[per cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                  [ 24%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[percent%(ens)yah] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [ 25%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[percent%signs] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                             [ 25%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape[q?marks] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                                   [ 25%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[%percent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [ 25%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[/slashes/] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                       [ 25%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[1col:on] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 26%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[1param] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [ 26%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[42numbers] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                       [ 26%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[[BracketsAndCase]] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                               [ 26%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[___name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 26%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[_name] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [ 27%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[_starts_with_underscore] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                         [ 27%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[boring] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                          [ 27%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[col:ons] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 27%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[dot.s] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                           [ 28%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[has spaces] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [ 28%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[more :: %colons%] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                [ 28%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[more/slashes] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                    [ 28%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[par(ens)] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [ 28%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[per % cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                      [ 29%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[per cent] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                        [ 29%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[percent%(ens)yah] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                [ 29%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[percent%signs] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                   [ 29%]
test_suite.py::DifficultParametersTest_databricks+databricks::test_standalone_bindparam_escape_expanding[q?marks] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides.)                                                                                         [ 29%]
test_suite.py::ExceptionTest_databricks+databricks::test_exception_with_non_ascii SKIPPED ([UNSUPPORTED][ENFORCE_KEYS]: Databricks does not support enforcing primary or foreign key restraints.)                                                                                                          [ 30%]
test_suite.py::ExceptionTest_databricks+databricks::test_integrity_error SKIPPED ([UNSUPPORTED][ENFORCE_KEYS]: Databricks does not support enforcing primary or foreign key restraints.)                                                                                                                   [ 30%]
test_suite.py::ExpandingBoundInTest_databricks+databricks::test_empty_heterogeneous_tuples_bindparam SKIPPED ([FUTURE][TUPLE_LITERAL]: This dialect doesn't implement tuple-like IN markers completely.)                                                                                                   [ 30%]
test_suite.py::ExpandingBoundInTest_databricks+databricks::test_empty_heterogeneous_tuples_direct SKIPPED ([FUTURE][TUPLE_LITERAL]: This dialect doesn't implement tuple-like IN markers completely.)                                                                                                      [ 30%]
test_suite.py::ExpandingBoundInTest_databricks+databricks::test_empty_homogeneous_tuples_bindparam SKIPPED ([FUTURE][TUPLE_LITERAL]: This dialect doesn't implement tuple-like IN markers completely.)                                                                                                     [ 31%]
test_suite.py::ExpandingBoundInTest_databricks+databricks::test_empty_homogeneous_tuples_direct SKIPPED ([FUTURE][TUPLE_LITERAL]: This dialect doesn't implement tuple-like IN markers completely.)                                                                                                        [ 31%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_bound_fetch_offset SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                              [ 31%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_expr_fetch_offset SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                               [ 31%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_no_order SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                           [ 31%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_nobinds SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                            [ 32%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_percent SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                            [ 32%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_percent_ties SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                       [ 32%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_ties SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                               [ 32%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_fetch_offset_ties_exact_number SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                  [ 32%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_limit_render_multiple_times SKIPPED ([UNSUPPORTED][IMPLICIT_ORDER]: Databricks does not support deterministic return order if ORDER BY is not present. More detail in _unsupported.py)                                                     [ 33%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_fetch SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                                    [ 33%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_fetch_offset SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                             [ 33%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_fetch_percent SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                            [ 33%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_fetch_percent_ties SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                       [ 34%]
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_fetch_ties SKIPPED ([UNSUPPORTED][FETCH]: Databricks does not support fetch clauses.)                                                                                                                                               [ 34%]
test_suite.py::FutureTableDDLTest_databricks+databricks::test_add_table_comment SKIPPED ([FUTURE][TBL_COMMENTS]: This dialect doesn't implement table comment reflection.)                                                                                                                                 [ 34%]
test_suite.py::FutureTableDDLTest_databricks+databricks::test_create_index_if_not_exists SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                        [ 34%]
test_suite.py::FutureTableDDLTest_databricks+databricks::test_drop_index_if_exists SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                              [ 34%]
test_suite.py::FutureTableDDLTest_databricks+databricks::test_drop_table_comment SKIPPED ([FUTURE][TBL_COMMENTS]: This dialect doesn't implement table comment reflection.)                                                                                                                                [ 35%]
test_suite.py::FutureWeCanSetDefaultSchemaWEventsTest::test_control_case SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                                        [ 35%]
test_suite.py::FutureWeCanSetDefaultSchemaWEventsTest::test_schema_change_on_connect SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                            [ 35%]
test_suite.py::FutureWeCanSetDefaultSchemaWEventsTest::test_schema_change_works_w_transactions SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                  [ 35%]
test_suite.py::FutureWeCanSetDefaultSchemaWEventsTest::test_wont_work_wo_insert SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                                 [ 35%]
test_suite.py::HasIndexTest_databricks+databricks::test_has_index[dialect] SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                                      [ 36%]
test_suite.py::HasIndexTest_databricks+databricks::test_has_index[inspector] SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                                    [ 36%]
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[dialect] SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                               [ 36%]
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[inspector] SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                             [ 36%]
test_suite.py::HasSequenceTest::test_get_sequence_names SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                     [ 37%]
test_suite.py::HasSequenceTest::test_get_sequence_names_no_sequence_schema SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                  [ 37%]
test_suite.py::HasSequenceTest::test_get_sequence_names_sequences_schema SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                    [ 37%]
test_suite.py::HasSequenceTest::test_has_sequence SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                           [ 37%]
test_suite.py::HasSequenceTest::test_has_sequence_cache SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                     [ 37%]
test_suite.py::HasSequenceTest::test_has_sequence_default_not_in_remote SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                     [ 38%]
test_suite.py::HasSequenceTest::test_has_sequence_neg SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                       [ 38%]
test_suite.py::HasSequenceTest::test_has_sequence_other_object SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                              [ 38%]
test_suite.py::HasSequenceTest::test_has_sequence_remote_not_in_default SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                     [ 38%]
test_suite.py::HasSequenceTest::test_has_sequence_schema SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                    [ 39%]
test_suite.py::HasSequenceTest::test_has_sequence_schemas_neg SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                               [ 39%]
test_suite.py::HasSequenceTestEmpty::test_get_sequence_names_no_sequence SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                    [ 39%]
test_suite.py::HasTableTest_databricks+databricks::test_has_table_temp_table SKIPPED ([UNSUPPORTED][TEMP_TBL]: Databricks does not support temporary tables.)                                                                                                                                              [ 39%]
test_suite.py::HasTableTest_databricks+databricks::test_has_table_temp_view SKIPPED ([UNSUPPORTED][BADSETUP][TEMP_TBL]: Databricks does not support temporary tables. More detail in _unsupported.py)                                                                                                      [ 39%]
test_suite.py::IdentityAutoincrementTest_databricks+databricks::test_autoincrement_with_identity SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                                [ 40%]
test_suite.py::IdentityColumnTest_databricks+databricks::test_insert_always_error SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                                               [ 40%]
test_suite.py::IdentityColumnTest_databricks+databricks::test_select_all SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                                                        [ 40%]
test_suite.py::IdentityColumnTest_databricks+databricks::test_select_columns SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                                                    [ 40%]
test_suite.py::IdentityReflectionTest_databricks+databricks::test_reflect_identity SKIPPED ([FUTURE][IDENTITY]: This dialect doesn't implement identity reflection. More detail in _future.py)                                                                                                             [ 40%]
test_suite.py::IdentityReflectionTest_databricks+databricks::test_reflect_identity_schema SKIPPED ([FUTURE][IDENTITY]: This dialect doesn't implement identity reflection. More detail in _future.py)                                                                                                      [ 41%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_autoclose_on_insert SKIPPED ([UNSUPPORTED][BADSETUP][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                                         [ 41%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_autoclose_on_insert_implicit_returning SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                          [ 41%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_empty_insert SKIPPED ([FUTURE][EMPTY_INSERT]: This dialect doesn't implement empty INSERT support. More detail in _future.py)                                                                                                                [ 41%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_empty_insert_multiple SKIPPED ([FUTURE][EMPTY_INSERT]: This dialect doesn't implement empty INSERT support. More detail in _future.py)                                                                                                       [ 42%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_insert_from_select_autoinc SKIPPED ([UNSUPPORTED][BADSETUP][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                                  [ 42%]
test_suite.py::InsertBehaviorTest_databricks+databricks::test_insert_from_select_autoinc_no_rows SKIPPED ([UNSUPPORTED][BADSETUP][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                          [ 42%]
test_suite.py::IsolationLevelTest::test_all_levels SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                                        [ 42%]
test_suite.py::IsolationLevelTest::test_default_isolation_level SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                           [ 42%]
test_suite.py::IsolationLevelTest::test_dialect_user_setting_is_restored SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                  [ 43%]
test_suite.py::IsolationLevelTest::test_invalid_level_engine_param SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                        [ 43%]
test_suite.py::IsolationLevelTest::test_invalid_level_execution_option SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                    [ 43%]
test_suite.py::IsolationLevelTest::test_non_default_isolation_level SKIPPED ([UNSUPPORTED][TRANSACTIONS]: Databricks does not support transactions.)                                                                                                                                                       [ 43%]
test_suite.py::JSONLegacyStringCastIndexTest::test_string_cast_crit_against_string_basic SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                               [ 43%]
test_suite.py::JSONLegacyStringCastIndexTest::test_string_cast_crit_mixed_path SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                         [ 44%]
test_suite.py::JSONLegacyStringCastIndexTest::test_string_cast_crit_simple_int SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                         [ 44%]
test_suite.py::JSONLegacyStringCastIndexTest::test_string_cast_crit_spaces_in_key SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                      [ 44%]
test_suite.py::JSONLegacyStringCastIndexTest::test_string_cast_crit_string_path SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                        [ 44%]
test_suite.py::JSONTest::test_eval_none_flag_orm SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                       [ 45%]
test_suite.py::JSONTest::test_index_typed_access[None0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                [ 45%]
test_suite.py::JSONTest::test_index_typed_access[None1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                [ 45%]
test_suite.py::JSONTest::test_index_typed_access[_decimal0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 45%]
test_suite.py::JSONTest::test_index_typed_access[_decimal1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 45%]
test_suite.py::JSONTest::test_index_typed_access[_decimal2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 46%]
test_suite.py::JSONTest::test_index_typed_access[boolean0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 46%]
test_suite.py::JSONTest::test_index_typed_access[boolean1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 46%]
test_suite.py::JSONTest::test_index_typed_access[boolean2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 46%]
test_suite.py::JSONTest::test_index_typed_access[float0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                               [ 46%]
test_suite.py::JSONTest::test_index_typed_access[float1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                               [ 47%]
test_suite.py::JSONTest::test_index_typed_access[float2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                               [ 47%]
test_suite.py::JSONTest::test_index_typed_access[integer0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 47%]
test_suite.py::JSONTest::test_index_typed_access[integer1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 47%]
test_suite.py::JSONTest::test_index_typed_access[integer2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 48%]
test_suite.py::JSONTest::test_index_typed_access[integer3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 48%]
test_suite.py::JSONTest::test_index_typed_access[json0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                [ 48%]
test_suite.py::JSONTest::test_index_typed_access[json1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                [ 48%]
test_suite.py::JSONTest::test_index_typed_access[numeric0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 48%]
test_suite.py::JSONTest::test_index_typed_access[numeric1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 49%]
test_suite.py::JSONTest::test_index_typed_access[numeric2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 49%]
test_suite.py::JSONTest::test_index_typed_access[string0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                              [ 49%]
test_suite.py::JSONTest::test_index_typed_access[string1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                              [ 49%]
test_suite.py::JSONTest::test_index_typed_access[string2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                              [ 50%]
test_suite.py::JSONTest::test_index_typed_access[string3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                              [ 50%]
test_suite.py::JSONTest::test_index_typed_comparison[_decimal0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 50%]
test_suite.py::JSONTest::test_index_typed_comparison[_decimal1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 50%]
test_suite.py::JSONTest::test_index_typed_comparison[_decimal2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 50%]
test_suite.py::JSONTest::test_index_typed_comparison[boolean0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 51%]
test_suite.py::JSONTest::test_index_typed_comparison[boolean1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 51%]
test_suite.py::JSONTest::test_index_typed_comparison[boolean2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 51%]
test_suite.py::JSONTest::test_index_typed_comparison[float0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 51%]
test_suite.py::JSONTest::test_index_typed_comparison[float1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 51%]
test_suite.py::JSONTest::test_index_typed_comparison[float2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 52%]
test_suite.py::JSONTest::test_index_typed_comparison[integer0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 52%]
test_suite.py::JSONTest::test_index_typed_comparison[integer1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 52%]
test_suite.py::JSONTest::test_index_typed_comparison[integer2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 52%]
test_suite.py::JSONTest::test_index_typed_comparison[integer3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 53%]
test_suite.py::JSONTest::test_index_typed_comparison[numeric0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 53%]
test_suite.py::JSONTest::test_index_typed_comparison[numeric1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 53%]
test_suite.py::JSONTest::test_index_typed_comparison[numeric2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 53%]
test_suite.py::JSONTest::test_index_typed_comparison[string0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 53%]
test_suite.py::JSONTest::test_index_typed_comparison[string1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 54%]
test_suite.py::JSONTest::test_index_typed_comparison[string2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 54%]
test_suite.py::JSONTest::test_index_typed_comparison[string3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 54%]
test_suite.py::JSONTest::test_path_typed_comparison[_decimal0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 54%]
test_suite.py::JSONTest::test_path_typed_comparison[_decimal1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 54%]
test_suite.py::JSONTest::test_path_typed_comparison[_decimal2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 55%]
test_suite.py::JSONTest::test_path_typed_comparison[boolean0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 55%]
test_suite.py::JSONTest::test_path_typed_comparison[boolean1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 55%]
test_suite.py::JSONTest::test_path_typed_comparison[boolean2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 55%]
test_suite.py::JSONTest::test_path_typed_comparison[float0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 56%]
test_suite.py::JSONTest::test_path_typed_comparison[float1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 56%]
test_suite.py::JSONTest::test_path_typed_comparison[float2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 56%]
test_suite.py::JSONTest::test_path_typed_comparison[integer0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 56%]
test_suite.py::JSONTest::test_path_typed_comparison[integer1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 56%]
test_suite.py::JSONTest::test_path_typed_comparison[integer2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 57%]
test_suite.py::JSONTest::test_path_typed_comparison[integer3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 57%]
test_suite.py::JSONTest::test_path_typed_comparison[numeric0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 57%]
test_suite.py::JSONTest::test_path_typed_comparison[numeric1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 57%]
test_suite.py::JSONTest::test_path_typed_comparison[numeric2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 57%]
test_suite.py::JSONTest::test_path_typed_comparison[string0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 58%]
test_suite.py::JSONTest::test_path_typed_comparison[string1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 58%]
test_suite.py::JSONTest::test_path_typed_comparison[string2] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 58%]
test_suite.py::JSONTest::test_path_typed_comparison[string3] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                           [ 58%]
test_suite.py::JSONTest::test_round_trip_custom_json SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                   [ 59%]
test_suite.py::JSONTest::test_round_trip_data1 SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                         [ 59%]
test_suite.py::JSONTest::test_round_trip_json_null_as_json_null SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 59%]
test_suite.py::JSONTest::test_round_trip_none_as_json_null[multiparameters] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                            [ 59%]
test_suite.py::JSONTest::test_round_trip_none_as_json_null[parameters] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 59%]
test_suite.py::JSONTest::test_round_trip_none_as_json_null[values] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                     [ 60%]
test_suite.py::JSONTest::test_round_trip_none_as_sql_null[multiparameters] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                             [ 60%]
test_suite.py::JSONTest::test_round_trip_none_as_sql_null[omit] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 60%]
test_suite.py::JSONTest::test_round_trip_none_as_sql_null[parameters] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                  [ 60%]
test_suite.py::JSONTest::test_round_trip_none_as_sql_null[values] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                      [ 60%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[100-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                  [ 61%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[100-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                [ 61%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[1999-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 61%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[1999-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 61%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[3000-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 62%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[3000-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 62%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[4000-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 62%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[4000-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 62%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[5000-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 62%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[5000-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 63%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[9000-ascii] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                 [ 63%]
test_suite.py::JSONTest::test_round_trip_pretty_large_data[9000-unicode] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 63%]
test_suite.py::JSONTest::test_single_element_round_trip[-1.0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 63%]
test_suite.py::JSONTest::test_single_element_round_trip[-1] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 64%]
test_suite.py::JSONTest::test_single_element_round_trip[0] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                             [ 64%]
test_suite.py::JSONTest::test_single_element_round_trip[15.052] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                        [ 64%]
test_suite.py::JSONTest::test_single_element_round_trip[15] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                            [ 64%]
test_suite.py::JSONTest::test_single_element_round_trip[False] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                         [ 64%]
test_suite.py::JSONTest::test_single_element_round_trip[None] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 65%]
test_suite.py::JSONTest::test_single_element_round_trip[True] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                          [ 65%]
test_suite.py::JSONTest::test_single_element_round_trip[a string] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                      [ 65%]
test_suite.py::JSONTest::test_single_element_round_trip[r\xe9ve ill\xe9] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                               [ 65%]
test_suite.py::JSONTest::test_single_element_round_trip[r\xe9ve\U0001f40d ill\xe9] SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                     [ 65%]
test_suite.py::JSONTest::test_unicode_round_trip SKIPPED ([FUTURE][JSON]: This dialect doesn't implement JSON column type handling.)                                                                                                                                                                       [ 66%]
test_suite.py::LastrowidTest_databricks+databricks::test_autoincrement_on_insert SKIPPED ([UNSUPPORTED][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                                                    [ 66%]
test_suite.py::LastrowidTest_databricks+databricks::test_last_inserted_id SKIPPED ([UNSUPPORTED][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                                                           [ 66%]
test_suite.py::LastrowidTest_databricks+databricks::test_native_lastrowid_autoinc SKIPPED ([UNSUPPORTED][AUTO_INC]: Databricks does not support implicit AUTO_INCREMENT. More detail in _unsupported.py)                                                                                                   [ 66%]
test_suite.py::LikeFunctionsTest_databricks+databricks::test_not_regexp_match SKIPPED ([FUTURE][REGEXP]: This dialect doesn't implement _visit_regexp.)                                                                                                                                                    [ 67%]
test_suite.py::LikeFunctionsTest_databricks+databricks::test_regexp_match SKIPPED ([FUTURE][REGEXP]: This dialect doesn't implement _visit_regexp.)                                                                                                                                                        [ 67%]
test_suite.py::LongNameBlowoutTest_databricks+databricks::test_long_convention_name[ck-_exclusions_03] SKIPPED ([UNSUPPORTED][IDENTIFIER_LENGTH]: Databricks does not support identifiers > 255 characters.)                                                                                               [ 67%]
test_suite.py::LongNameBlowoutTest_databricks+databricks::test_long_convention_name[fk-_exclusions_00] SKIPPED ([UNSUPPORTED][IDENTIFIER_LENGTH]: Databricks does not support identifiers > 255 characters.)                                                                                               [ 67%]
test_suite.py::LongNameBlowoutTest_databricks+databricks::test_long_convention_name[ix-_exclusions_02] SKIPPED ([UNSUPPORTED][IDENTIFIER_LENGTH]: Databricks does not support identifiers > 255 characters.)                                                                                               [ 67%]
test_suite.py::LongNameBlowoutTest_databricks+databricks::test_long_convention_name[pk-_exclusions_01] SKIPPED ([UNSUPPORTED][IDENTIFIER_LENGTH]: Databricks does not support identifiers > 255 characters.)                                                                                               [ 68%]
test_suite.py::LongNameBlowoutTest_databricks+databricks::test_long_convention_name[uq-_exclusions_04] SKIPPED ([UNSUPPORTED][IDENTIFIER_LENGTH]: Databricks does not support identifiers > 255 characters.)                                                                                               [ 68%]
test_suite.py::NativeUUIDTest::test_literal_nonnative_text SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                          [ 68%]
test_suite.py::NativeUUIDTest::test_literal_nonnative_uuid SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                          [ 68%]
test_suite.py::NativeUUIDTest::test_literal_text SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                                    [ 68%]
test_suite.py::NativeUUIDTest::test_literal_uuid SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                                    [ 69%]
test_suite.py::NativeUUIDTest::test_uuid_returning SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                                  [ 69%]
test_suite.py::NativeUUIDTest::test_uuid_round_trip SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                                 [ 69%]
test_suite.py::NativeUUIDTest::test_uuid_text_round_trip SKIPPED ([FUTURE][UUID]: This dialect doesn't implement native Uuid() type. More detail in _future.py)                                                                                                                                            [ 69%]
test_suite.py::NormalizedNameTest_databricks+databricks::test_get_table_names SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                                                   [ 70%]
test_suite.py::NumericTest_databricks+databricks::test_enotation_decimal SKIPPED ([UNSUPPORTED][DECIMAL_FEAT]: Databricks does not support required decimal features.)                                                                                                                                     [ 70%]
test_suite.py::NumericTest_databricks+databricks::test_enotation_decimal_large SKIPPED ([UNSUPPORTED][DECIMAL_FEAT]: Databricks does not support required decimal features.)                                                                                                                               [ 70%]
test_suite.py::NumericTest_databricks+databricks::test_float_coerce_round_trip SKIPPED ([UNSUPPORTED][IMPL_FLOAT_PREC]: Databricks does not support required implicit float precision. More detail in _unsupported.py)                                                                                     [ 70%]
test_suite.py::NumericTest_databricks+databricks::test_float_custom_scale SKIPPED ([UNSUPPORTED][IMPL_FLOAT_PREC]: Databricks does not support required implicit float precision. More detail in _unsupported.py)                                                                                          [ 70%]
test_suite.py::PercentSchemaNamesTest::test_executemany_returning_roundtrip SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                 [ 71%]
test_suite.py::PercentSchemaNamesTest::test_executemany_roundtrip SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                           [ 71%]
test_suite.py::PercentSchemaNamesTest::test_single_roundtrip SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                                [ 71%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_check_constraints[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                             [ 71%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_check_constraints[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                             [ 71%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_columns[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                       [ 72%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_columns[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                       [ 72%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_foreign_keys[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                  [ 72%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_foreign_keys[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                  [ 72%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_indexes[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                       [ 73%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_indexes[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                       [ 73%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_pk_constraint[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 73%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_pk_constraint[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 73%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_table_comment[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 73%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_table_comment[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 74%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_table_options[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 74%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_table_options[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                                 [ 74%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_unique_constraints[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                            [ 74%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_unique_constraints[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                            [ 75%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_view_definition[quote " two-_exclusions_01] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                               [ 75%]
test_suite.py::QuotedNameArgumentTest_databricks+databricks::test_get_view_definition[quote ' one-_exclusions_00] SKIPPED ([FUTURE][TEST_DESIGN]: This dialect doesn't implement required test-fixture overrides. More detail in _future.py)                                                               [ 75%]
test_suite.py::ReturningTest::test_autoincrement_on_insert_implicit_returning SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                 [ 75%]
test_suite.py::ReturningTest::test_explicit_returning_pk_autocommit SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                           [ 75%]
test_suite.py::ReturningTest::test_explicit_returning_pk_no_autocommit SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                        [ 76%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-LargeBinary1] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                            [ 76%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-LargeBinary2] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                            [ 76%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-PG BYTEA] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                [ 76%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-UUID] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                    [ 76%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-generic_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                     [ 77%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-non_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                         [ 77%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-not_sort_by_parameter_order-non_native_uuid_str] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                     [ 77%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-LargeBinary1] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                [ 77%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-LargeBinary2] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                [ 78%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-PG BYTEA] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                    [ 78%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-UUID] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                        [ 78%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-generic_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                         [ 78%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-non_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                             [ 78%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[multiple_rows-sort_by_parameter_order-non_native_uuid_str] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                         [ 79%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-LargeBinary1] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                        [ 79%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-LargeBinary2] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                        [ 79%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-PG BYTEA] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                            [ 79%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-UUID] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                [ 79%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-generic_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                 [ 80%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-non_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                     [ 80%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-not_sort_by_parameter_order-non_native_uuid_str] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                 [ 80%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-LargeBinary1] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                            [ 80%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-LargeBinary2] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                            [ 81%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-PG BYTEA] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                [ 81%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-UUID] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                    [ 81%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-generic_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                     [ 81%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-non_native_uuid] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                         [ 81%]
test_suite.py::ReturningTest::test_imv_returning_datatypes[not_multiple_rows-sort_by_parameter_order-non_native_uuid_str] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                     [ 82%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_0-8.5514716-True-_exclusions_00] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 82%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_1-8.5514716-True-_exclusions_01] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 82%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_2-8.5514-False-_exclusions_02] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                              [ 82%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_3-8.5514-True-_exclusions_03] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                               [ 82%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_4-8.5514716-True-_exclusions_04] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 83%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-not_sort_by_parameter_order-type_5-value5-False-_exclusions_05] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                              [ 83%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_0-8.5514716-True-_exclusions_00] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                [ 83%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_1-8.5514716-True-_exclusions_01] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                [ 83%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_2-8.5514-False-_exclusions_02] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                  [ 84%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_3-8.5514-True-_exclusions_03] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                   [ 84%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_4-8.5514716-True-_exclusions_04] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                [ 84%]
test_suite.py::ReturningTest::test_insert_w_floats[multiple_rows-sort_by_parameter_order-type_5-value5-False-_exclusions_05] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                  [ 84%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_0-8.5514716-True-_exclusions_00] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                        [ 84%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_1-8.5514716-True-_exclusions_01] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                        [ 85%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_2-8.5514-False-_exclusions_02] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                          [ 85%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_3-8.5514-True-_exclusions_03] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                           [ 85%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_4-8.5514716-True-_exclusions_04] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                        [ 85%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-not_sort_by_parameter_order-type_5-value5-False-_exclusions_05] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                          [ 85%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_0-8.5514716-True-_exclusions_00] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 86%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_1-8.5514716-True-_exclusions_01] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 86%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_2-8.5514-False-_exclusions_02] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                              [ 86%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_3-8.5514-True-_exclusions_03] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                               [ 86%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_4-8.5514716-True-_exclusions_04] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                            [ 87%]
test_suite.py::ReturningTest::test_insert_w_floats[not_multiple_rows-sort_by_parameter_order-type_5-value5-False-_exclusions_05] SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                              [ 87%]
test_suite.py::ReturningTest::test_insertmanyvalues_returning SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                                 [ 87%]
test_suite.py::ReturningTest::test_last_inserted_id_implicit_returning SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                        [ 87%]
test_suite.py::RowCountTest::test_basic SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                           [ 87%]
test_suite.py::RowCountTest::test_delete_rowcount SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                 [ 88%]
test_suite.py::RowCountTest::test_multi_delete_rowcount SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                           [ 88%]
test_suite.py::RowCountTest::test_multi_update_rowcount SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                           [ 88%]
test_suite.py::RowCountTest::test_raw_sql_rowcount SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                [ 88%]
test_suite.py::RowCountTest::test_text_rowcount SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                   [ 89%]
test_suite.py::RowCountTest::test_update_delete_rowcount_return_defaults[delete-implicit_returning] SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                               [ 89%]
test_suite.py::RowCountTest::test_update_delete_rowcount_return_defaults[delete-not_implicit_returning] SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                           [ 89%]
test_suite.py::RowCountTest::test_update_delete_rowcount_return_defaults[update-implicit_returning] SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                               [ 89%]
test_suite.py::RowCountTest::test_update_delete_rowcount_return_defaults[update-not_implicit_returning] SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                           [ 89%]
test_suite.py::RowCountTest::test_update_rowcount1 SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                [ 90%]
test_suite.py::RowCountTest::test_update_rowcount2 SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                [ 90%]
test_suite.py::SequenceCompilerTest::test_literal_binds_inline_compile SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                      [ 90%]
test_suite.py::SequenceTest::test_insert_lastrowid SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                          [ 90%]
test_suite.py::SequenceTest::test_insert_roundtrip SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                          [ 90%]
test_suite.py::SequenceTest::test_insert_roundtrip_no_implicit_returning SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                    [ 91%]
test_suite.py::SequenceTest::test_insert_roundtrip_translate[False] SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                         [ 91%]
test_suite.py::SequenceTest::test_insert_roundtrip_translate[True] SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                          [ 91%]
test_suite.py::SequenceTest::test_nextval_direct SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                            [ 91%]
test_suite.py::SequenceTest::test_nextval_direct_schema_translate SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                           [ 92%]
test_suite.py::SequenceTest::test_optional_seq SKIPPED ([UNSUPPORTED][SEQUENCES]: Databricks does not support SQL SEQUENCES.)                                                                                                                                                                              [ 92%]
test_suite.py::ServerSideCursorsTest::test_aliases_and_ss SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                               [ 92%]
test_suite.py::ServerSideCursorsTest::test_conn_option SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                                  [ 92%]
test_suite.py::ServerSideCursorsTest::test_roundtrip_fetchall SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                           [ 92%]
test_suite.py::ServerSideCursorsTest::test_roundtrip_fetchmany SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                          [ 93%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[for_update_expr] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                            [ 93%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[for_update_string] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                          [ 93%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[global_expr] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                [ 93%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[global_off_explicit] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                        [ 93%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[global_string] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                              [ 94%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[global_text] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                [ 94%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[stmt_option] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                [ 94%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[stmt_option_disabled] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                       [ 94%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[text_no_ss] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                                 [ 95%]
test_suite.py::ServerSideCursorsTest::test_ss_cursor_status[text_ss_option] SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                             [ 95%]
test_suite.py::ServerSideCursorsTest::test_stmt_enabled_conn_option_disabled SKIPPED ([UNSUPPORTED][CURSORS]: Databricks does not support server-side cursors.)                                                                                                                                            [ 95%]
test_suite.py::SimpleUpdateDeleteTest::test_delete SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                [ 95%]
test_suite.py::SimpleUpdateDeleteTest::test_update SKIPPED ([FUTURE][SANE_ROWCOUNT]: This dialect doesn't implement sane_rowcount support.)                                                                                                                                                                [ 95%]
test_suite.py::TableDDLTest_databricks+databricks::test_add_table_comment SKIPPED ([FUTURE][TBL_COMMENTS]: This dialect doesn't implement table comment reflection.)                                                                                                                                       [ 96%]
test_suite.py::TableDDLTest_databricks+databricks::test_create_index_if_not_exists SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                              [ 96%]
test_suite.py::TableDDLTest_databricks+databricks::test_drop_index_if_exists SKIPPED ([UNSUPPORTED][INDEXES]: Databricks does not support SQL INDEXes.)                                                                                                                                                    [ 96%]
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table_comment SKIPPED ([FUTURE][TBL_COMMENTS]: This dialect doesn't implement table comment reflection.)                                                                                                                                      [ 96%]
test_suite.py::TimeTZTest::test_literal SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                           [ 96%]
test_suite.py::TimeTZTest::test_null SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                              [ 97%]
test_suite.py::TimeTZTest::test_null_bound_comparison SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                             [ 97%]
test_suite.py::TimeTZTest::test_round_trip SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                        [ 97%]
test_suite.py::TimeTZTest::test_round_trip_decorated SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                              [ 97%]
test_suite.py::TimeTZTest::test_select_direct SKIPPED ([FUTURE][TIMEZONE]: This dialect doesn't implement timezone handling for DateTime() or Time() types. More detail in _future.py)                                                                                                                     [ 98%]
test_suite.py::UnicodeSchemaTest::test_col_targeting SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                                        [ 98%]
test_suite.py::UnicodeSchemaTest::test_insert SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                                               [ 98%]
test_suite.py::UnicodeSchemaTest::test_reflect SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                                              [ 98%]
test_suite.py::UnicodeSchemaTest::test_repr SKIPPED ([UNSUPPORTED][SYMBOL_CHARSET]: Databricks does not support symbols expected by test.)                                                                                                                                                                 [ 98%]
test_suite.py::UuidTest_databricks+databricks::test_uuid_returning SKIPPED ([UNSUPPORTED][RETURNING]: Databricks does not support INSERT ... RETURNING syntax.)                                                                                                                                            [ 99%]
test_suite.py::WeCanSetDefaultSchemaWEventsTest::test_control_case SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                                              [ 99%]
test_suite.py::WeCanSetDefaultSchemaWEventsTest::test_schema_change_on_connect SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                                  [ 99%]
test_suite.py::WeCanSetDefaultSchemaWEventsTest::test_schema_change_works_w_transactions SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)                                                                                        [ 99%]
test_suite.py::WeCanSetDefaultSchemaWEventsTest::test_wont_work_wo_insert SKIPPED ([FUTURE][PROVISION]: This dialect doesn't implement event-driven engine configuration. More detail in _future.py)   

Jesse Whitehouse added 21 commits October 19, 2023 12:01
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
… these tests

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
not needed because these are already included in _regression.py

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
During PR review, I learned that generated columns are in public preview

https://docs.databricks.com/en/delta/generated-columns.html

Therefore this is not unsupported but rather a future feature

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
@susodapop susodapop merged commit 411b16b into main Oct 23, 2023
@susodapop susodapop deleted the reorganise-test-skips-2 branch October 23, 2023 20:23
saishreeeee pushed a commit that referenced this pull request Jun 4, 2025
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
saishreeeee pushed a commit that referenced this pull request Jun 4, 2025
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>
saishreeeee added a commit that referenced this pull request Jun 10, 2025
* [ES-402013] Close cursors before closing connection (#38)

* Add test: cursors are closed when connection closes

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.0.5 and improve CHANGELOG (#40)

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fix dco issue

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fix dco issue

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* dco tunning

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* dco tunning

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Github workflows: run checks on pull requests from forks (#47)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* OAuth implementation (#15)

This PR:
* Adds the foundation for OAuth against Databricks account on AWS with BYOIDP.
* It copies one internal module that Steve Weis @sweisdb wrote for Databricks CLI (oauth.py). Once ecosystem-dev team (Serge, Pieter) build a python sdk core we will move this code to their repo as a dependency.
* the PR provides authenticators with visitor pattern format for stamping auth-token which later is intended to be moved to the repo owned by Serge @nfx and and Pieter @pietern

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Automate deploys to Pypi (#48)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-205] Add functional examples (#52)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.1.0 (#54)

Bump to v2.1.0 and update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [SC-110400] Enabling compression in Python SQL Connector (#49)

Signed-off-by: Mohit Singla <mohit.singla@databricks.com>
Co-authored-by: Moe Derakhshani <moe.derakhshani@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add tests for parameter sanitisation / escaping (#46)

* Refactor so we can unit test `inject_parameters`
* Add unit tests for inject_parameters
* Remove inaccurate comment. Per #51, spark sql does not support escaping a single quote with a second single quote.
* Closes #51 and adds unit tests plus the integration test provided in #56

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Courtney Holcomb (@courtneyholcomb)
Co-authored-by: @mcannamela
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump thrift dependency to 0.16.0 (#65)

Addresses https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13949

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.2.0 (#66)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Support Python 3.11 (#60)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.2.1  (#70)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add none check on _oauth_persistence in DatabricksOAuthProvider (#71)

Add none check on _oauth_persistence in DatabricksOAuthProvider to avoid app crash when _oauth_persistence is None.

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Support custom oauth client id and redirect port (#75)

* Support custom oauth client id and rediret port range

PySQL is used by other tools/CLIs which have own oauth client id,
we need to expose oauth_client_id and oauth_redirect_port_range
as the connection parameters to support this customization.

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Change oauth redirect port range to port

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Fix type check issue

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.2.2 (#76)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Merge staging ingestion into main (#78)

Follow up to #67 and #64

* Regenerate TCLIService using latest TCLIService.thrift from DBR (#64)
* SI: Implement GET, PUT, and REMOVE (#67)
* Re-lock dependencies after merging `main`

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.3.0 and update changelog (#80)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add pkgutil-style for the package (#84)

Since the package is under databricks namespace. pip install this package will cause issue importing other packages under the same namespace like automl and feature store. Adding pkgutil style to resolve the issue.

Signed-off-by: lu-wang-dl <lu.wang@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add SQLAlchemy Dialect (#57)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 2.4.0(#89)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix syntax in examples in root readme. (#92)

Do this because the environment variable pulls did not have closing quotes on their string literals.

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Less strict numpy and pyarrow dependencies (#90)

Signed-off-by: Thomas Newton <thomas.w.newton@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Thomas Newton <thomas.w.newton@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update example in docstring so query output is valid Spark SQL (#95)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.4.1 (#96)

Per the sermver.org spec, updating the projects dependencies is considered a compatible change.

https: //semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update CODEOWNERS (#97)

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add Andre to CODEOWNERS (#98)

* Add Andre. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Revert the change temporarily so I can sign off. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Add Andre and sign off. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Remove redundant line

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

---------

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add external auth provider + example (#101)

Signed-off-by: Andre Furlan <andre.furlan@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Retry on connection timeout (#103)

A lot of the time we see the error `[Errno 110] Connection timed out`. This happens a lot in Azure, particularly. In this PR I make it a retryable error as it is safe

Signed-off-by: Andre Furlan <andre.furlan@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-244] Make http proxies work (#81)

Override thrift's proxy header encoding function.  Uses the fix identified in https://github.com/apache/thrift/pull/2565

H/T @pspeter

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 2.5.0 (#104)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix changelog release date for version 2.5.0

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Relax sqlalchemy requirement (#113)

* Plus update docs about how to change dependency spec

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update to version 2.5.1 (#114)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix SQLAlchemy timestamp converter + docs (#117)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Relax pandas and alembic requirements (#119)

Update dependencies for alembic and pandas per customer request

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 2.5.2 (#118)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Use urllib3 for thrift transport + reuse http connections (#131)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Default socket timeout to 15 min (#137)

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.6.0 (#139)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix: some thrift RPCs failed with BadStatusLine (#141)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.6.1 (#142)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [ES-706907] Retry GetOperationStatus for http errors (#145)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.6.2 (#147)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-626] Support OAuth flow for Databricks Azure (#86)

## Summary

Support OAuth flow for Databricks Azure

## Background

Some OAuth endpoints (e.g. Open ID Configuration) and scopes are different between Databricks Azure and AWS. Current code only supports OAuth flow on Databricks in AWS

## What changes are proposed in this pull request?

- Change `OAuthManager` to decouple Databricks AWS specific configuration from OAuth flow
- Add `sql/auth/endpoint.py` that implements cloud specific OAuth endpoint configuration
- Change `DatabricksOAuthProvider` to work with the OAuth configurations in different Databricks cloud (AWS, Azure)
- Add the corresponding unit tests

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Use a separate logger for unsafe thrift responses (#153)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Improve e2e test development ergonomics  (#155)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Don't raise exception when closing a stale Thrift session (#159)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 2.7.0 (#161)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Cloud Fetch download handler (#127)

* Cloud Fetch download handler

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Issue fix: final result link compressed data has multiple LZ4 end-of-frame markers

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Addressing PR comments
 - Linting
 - Type annotations
 - Use response.ok
 - Log exception
 - Remove semaphore and only use threading.event
 - reset() flags method
 - Fix tests after removing semaphore
 - Link expiry logic should be in secs
 - Decompress data static function
 - link_expiry_buffer and static public methods
 - Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Changing logger.debug to remove url

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* _reset() comment to docstring

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* link_expiry_buffer -> link_expiry_buffer_secs

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Cloud Fetch download manager (#146)

* Cloud Fetch download manager

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Bug fix: submit handler.run

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Type annotations

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Namedtuple -> dataclass

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Shutdown thread pool and clear handlers

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* handler.run is the correct call

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Link expiry buffer in secs

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Adding type annotations for download_handlers and downloadable_result_settings

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Move DownloadableResultSettings to downloader.py to avoid circular import

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Black linting

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Timeout is never None

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Cloud fetch queue and integration (#151)

* Cloud fetch queue and integration

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Enable cloudfetch with direct results

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Typing and style changes

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Client-settable max_download_threads

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Increase default buffer size bytes to 104857600

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Move max_download_threads to kwargs of ThriftBackend, fix unit tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Fix tests: staticmethod make_arrow_table mock not callable

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* cancel_futures in shutdown() only available in python >=3.9.0

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Black linting

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Fix typing errors

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Cloud Fetch e2e tests (#154)

* Cloud Fetch e2e tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Test case works for e2-dogfood shared unity catalog

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Moving test to LargeQueriesSuite and setting catalog to hive_metastore

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Align default value of buffer_size_bytes in driver tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Adding comment to specify what's needed to run successfully

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update changelog for cloudfetch (#172)

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Improve sqlalchemy backward compatibility with 1.3.24 (#173)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* OAuth: don't override auth headers with contents of .netrc file (#122)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix proxy connection pool creation (#158)

Signed-off-by: Sebastian Eckweiler <sebastian.eckweiler@mercedes-benz.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Sebastian Eckweiler <sebastian.eckweiler@mercedes-benz.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Relax pandas dependency constraint to allow ^2.0.0 (#164)

Signed-off-by: Daniel Segesdi <daniel.segesdi@turbine.ai>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Use hex string version of operation ID instead of bytes (#170)

---------
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy: fix has_table so it honours schema= argument (#174)

---------
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix socket timeout test (#144)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Disable non_native_boolean_check_constraint (#120)

---------
Signed-off-by: Bogdan Kyryliuk <b.kyryliuk@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Remove unused import for SQLAlchemy 2 compatibility (#128)

Signed-off-by: William Gentry <william.barr.gentry@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.8.0 (#178)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix typo in python README quick start example (#186)

---------

Co-authored-by: Jesse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Configure autospec for mocked Client objects (#188)

Resolves #187

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Use urllib3 for retries (#182)

Behaviour is gated behind `enable_v3_retries` config. This will be removed and become the default behaviour in a subsequent release.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.9.0 (#189)

* Add note to changelog about using cloud_fetch
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Explicitly add urllib3 dependency (#191)

Signed-off-by: Jacobus Herman <jacobus.herman@otrium.com>

Co-authored-by: Jesse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to 2.9.1 (#195)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Make backwards compatible with urllib3~=1.0 (#197)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Convenience improvements to v3 retry logic (#199)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.9.2 (#201)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Github Actions Fix: poetry install fails for python 3.7 tests (#208)

snok/install-poetry@v1 installs the latest version of Poetry

The latest version of poetry released on 20 August 2023 (four days ago
as of this commit) which drops support for Python 3.7, causing our
github action to fail.

Until we complete #207 we need to conditionally install the last version
of poetry that supports Python 3.7 (poetry==1.5.1)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Make backwards compatible with urllib3~=1.0 [Follow up #197]  (#206)

* Make retry policy backwards compatible with urllib3~=1.0.0

We already implement the equivalent of backoff_max so the behaviour will
be the same for urllib3==1.x and urllib3==2.x

We do not implement backoff jitter so the behaviour for urllib3==1.x will
NOT include backoff jitter whereas urllib3==2.x WILL include jitter.

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump version to 2.9.3 (#209)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add note to sqlalchemy example: IDENTITY isn't supported yet (#212)

ES-842237

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1029] Updated thrift compiler version (#216)

* Updated thrift definitions

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Tried with a different thrift installation

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Reverted TCLI to previous

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Reverted to older thrift

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Updated version again

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Upgraded thrift

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Final commit

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1055] Updated thrift defs to allow Tsparkparameters (#220)

Updated thrift defs to most recent versions

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update changelog to indicate that 2.9.1 and 2.9.2 have been yanked. (#222)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix changelog typo: _enable_v3_retries (#225)

Closes #219

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Introduce SQLAlchemy reusable dialog tests (#125)

Signed-off-by: Jim Fulton <jim.fulton@unsupervised.com>
Co-Authored-By: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1026] Add Parameterized Query support to Python (#217)

* Initial commit

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added tsparkparam handling

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added basic test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Addressed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Addressed missed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Resolved comments

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Parameterized queries: Add e2e tests for inference (#227)

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1109] Parameterized Query: add suport for inferring decimal types (#228)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: reorganise dialect files into a single directory (#231)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1083] Updated thrift files and added check for protocol version (#229)

* Updated thrift files and added check for protocol version

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Made error message more clear

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Changed name of fn

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Ran linter

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Update src/databricks/sql/client.py

Co-authored-by: Jesse <jwhitehouse@airpost.net>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Co-authored-by: Jesse <jwhitehouse@airpost.net>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-840] Port staging ingestion behaviour to new UC Volumes (#235)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Query parameters: implement support for binding NoneType parameters (#233)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Bump dependency version and update e2e tests for existing behaviour (#236)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Revert "[PECO-1083] Updated thrift files and added check for protocol version" (#237)

Reverts #229 as it causes all of our e2e tests to fail on some versions of DBR.

We'll reimplement the protocol version check in a follow-up.

This reverts commit 241e934a96737d506c2a1f77c7012e1ab8de967b.

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: add type compilation for all CamelCase types (#238)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: add type compilation for uppercase types (#240)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Stop skipping all type tests (#242)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1134] v3 Retries: allow users to bound the number of redirects to follow (#244)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Parameters: Add type inference for BIGINT and TINYINT types (#246)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Stop skipping some non-type tests (#247)

* Stop skipping TableDDLTest and permanent skip HasIndexTest

We're now in the territory of features that aren't required for sqla2
compat as of pysql==3.0.0 but we may consider adding this in the future.

In this case, table comment reflection needs to be manually implemented.
Index reflection would require hooking into the compiler to reflect
the partition strategy.

test_suite.py::HasIndexTest_databricks+databricks::test_has_index[dialect] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index[inspector] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[dialect] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[inspector] SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_add_table_comment SKIPPED (Comment reflection is possible but not implemented in this dialect.)
test_suite.py::TableDDLTest_databricks+databricks::test_create_index_if_not_exists SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_create_table PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_create_table_if_not_exists PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_create_table_schema PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_drop_index_if_exists SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table_comment SKIPPED (Comment reflection is possible but not implemented in this dialect.)
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table_if_exists PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_underscore_names PASSED

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip QuotedNameArgumentTest with comments

The fixes to DESCRIBE TABLE and visit_xxx were necessary to get to the
point where I could even determine that these tests wouldn't pass.

But those changes are not currently tested in the dialect. If, in the
course of reviewing the remaining tests in the compliance suite, I find
that these visit_xxxx methods are not tested anywhere else then we should
extend test_suite.py with our own tests to confirm the behaviour for
ourselves.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Move files from base.py to _ddl.py

The presence of this pytest.ini file is _required_ to establish pytest's
root_path

https://docs.pytest.org/en/7.1.x/reference/customize.html#finding-the-rootdir

Without it, the custom pytest plugin from SQLAlchemy can't read the contents
of setup.cfg which makes none of the tests runnable.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Emit a warning for certain constructs

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping RowFetchTest

Date type work fixed this test failure

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Revise infer_types logic to never infer a TINYINT

This allows these SQLAlchemy tests to pass:

test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_bound_limit PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_bound_limit_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_expr_limit_simple_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_expr_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases0] PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases1] PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases2] PASSED

This partially reverts the change introduced in #246

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping FetchLimitOffsetTest

I implemented our custom DatabricksStatementCompiler so we can override
the default rendering of unbounded LIMIT clauses from `LIMIT -1` to
`LIMIT ALL`

We also explicitly skip the FETCH clause tests since Databricks doesn't
support this syntax.

Blacked all source code here too.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping FutureTableDDLTest

Add meaningful skip markers for table comment reflection and indexes

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping Identity column tests

This closes https://github.com/databricks/databricks-sql-python/issues/175

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping HasTableTest

Adding the @reflection.cache decorator to has_table is necessary to pass
test_has_table_cache

Caching calls to has_table improves the efficiency of the connector

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip LongNameBlowoutTest

Databricks constraint names are limited to 255 characters

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping ExceptionTest

Black test_suite.py

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip LastrowidTest

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Implement PRIMARY KEY and FOREIGN KEY reflection and enable tests

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Skip all IdentityColumnTest tests

Turns out that none of these can pass for the same reason that the
first two seemed un-runnable in db6f52bb329f3f43a9215b5cd46b03c3459a302a

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: implement and refactor schema reflection methods (#249)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add GovCloud domain into AWS domains (#252)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Refactor __init__.py into base.py (#250)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Finish implementing all of ComponentReflectionTest (#251)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Finish marking all tests in the suite (#253)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Finish organising compliance test suite (#256)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Fix failing mypy checks from development (#257)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Enable cloud fetch by default (#258)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1137] Reintroduce protocol checking to Python test fw (#248)

* Put in some unit tests, will add e2e

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added e2e test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Linted

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* re-bumped thrift files

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Changed structure to store protocol version as feature of connection

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed parameters test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Update src/databricks/sql/client.py

Co-authored-by: Jesse <jwhitehouse@airpost.net>
Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Removed extra indent

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Co-authored-by: Jesse <jwhitehouse@airpost.net>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* sqla2 clean-up: make sqlalchemy optional and don't mangle the user-agent (#264)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Add support for TINYINT (#265)

Closes #123

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add OAuth M2M example (#266)

* Add OAuth M2M example

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Native Parameters: reintroduce INLINE approach with tests (#267)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Document behaviour of executemany (#213)

Signed-off-by: Martin Rueckl <enigma@nbubu.de>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy 2: Expose TIMESTAMP and TIMESTAMP_NTZ types to users (#268)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Drop Python 3.7 as a supported version (#270)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
(cherry picked from commit 8d85fa8b33a70331141c0c6556196f641d1b8ed5)
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* GH Workflows: remove Python 3.7 from the matrix for _all_ workflows (#274)

Remove Python 3.7 from the matrix for _all_ workflows

This was missed in #270

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add README and updated example for SQLAlchemy usage (#273)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Rewrite native parameter implementation with docs and tests (#281)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Enable v3 retries by default (#282)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* security: bump pyarrow dependency to 14.0.1 (#284)

pyarrow is currently compatible with Python 3.8 → Python 3.11

I also removed specifiers for when Python is 3.7 since this no longer
applies.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump package version to 3.0.0 (#285)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix docstring about default parameter approach (#287)

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1286] Add tests for complex types in query results (#293)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* sqlalchemy: fix deprecation warning for dbapi classmethod (#294)

Rename `dbapi` classmethod to `import_dbapi` as required by SQLAlchemy 2

Closes #289

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1297] sqlalchemy: fix: can't read columns for tables containing a TIMESTAMP_NTZ column (#296)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepared 3.0.1 release (#297)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Make contents of `__init__.py` equal across projects (#304)

---------

Signed-off-by: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix URI construction in ThriftBackend (#303)

Signed-off-by: Jessica <12jessicasmith34@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [sqlalchemy] Add table and column comment support (#329)

Signed-off-by: Christophe Bornet <cbornet@hotmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Pin pandas and urllib3 versions to fix runtime issues in dbt-databricks (#330)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* SQLAlchemy: TINYINT types didn't reflect properly (#315)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1435] Restore `tests.py` to the test suite (#331)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 3.0.2 (#335)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update some outdated OAuth comments (#339)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Redact the URL query parameters from the urllib3.connectionpool logs (#341)

* Redact the URL query parameters from the urllib3.connectionpool logs

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

* Fix code formatting

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

* Add str check for the log record message arg dict values

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

---------

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 3.0.3 (#344)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1411] Support Databricks OAuth on GCP (#338)

* [PECO-1411] Support OAuth InHouse on GCP

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

---------

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1414] Support Databricks native OAuth in Azure (#351)

* [PECO-1414] Support Databricks InHouse OAuth in Azure

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prep for Test Automation (#352)

Getting ready for test automation

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update code owners (#345)

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

---------

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Reverting retry behavior on 429s/503s to how it worked in 2.9.3 (#349)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to version 3.1.0 (#358)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1440] Expose current query id on cursor object (#364)

* [PECO-1440] Expose current query id on cursor object

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Clear `active_op_handle` when closing the cursor

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add a default for retry after (#371)

* Add a default for retry after
Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Applied black formatter
Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix boolean literals (#357)

Set supports_native_boolean to True

Signed-off-by: Alex Holyoke <alexander.holyoke@growthloop.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Don't retry network requests that fail with code 403 (#373)

* Don't retry requests that fail with 404

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* Fix lint error

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

---------

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bump to 3.1.1 (#374)

* bump to 3.1.1

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix cookie setting (#379)

* fix cookie setting

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Removing cookie code

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

---------

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fixing a couple type problems: how I would address most of #381 (#382)

* Create py.typed

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* add -> Connection annotation

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* massage the code to appease the particular version of the project's mypy deps

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* fix circular import problem

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fix the return types of the classes' __enter__ functions (#384)

fix the return types of the classes' __enter__ functions so that the type information is preserved in context managers eg with-as blocks

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add Kravets Levko to codeowners (#386)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare for 3.1.2 (#387)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update the proxy authentication (#354)

changed authentication for proxy

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix failing tests (#392)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Relax `pyarrow` pin (#389)

* Relax `pyarrow` pin

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Allow `pyarrow` 16

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Update `poetry.lock`

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

---------

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix log error in oauth.py (#269)

* Duplicate of applicable change from #93

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix after merge

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Enable `delta.feature.allowColumnDefaults` for all tables (#343)

* Enable `delta.feature.allowColumnDefaults` for all tables

* Code style

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix SQLAlchemy tests (#393)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Add more debug logging for CloudFetch (#395)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update Thrift package (#397)

Signed-off-by: Milan Lukac <milan@lukac.online>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare release 3.2.0 (#396)

* Prepare release 3.2.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update changelog

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* move py.typed to correct places (#403)

* move py.typed to correct places

https://peps.python.org/pep-0561/ says 'For namespace packages (see PEP 420), the py.typed file should be in the submodules of the namespace, to avoid conflicts and for clarity.'. Previously, when I added the py.typed file to this project, https://github.com/databricks/databricks-sql-python/pull/382 , I was unaware this was a namespace package (although, curiously, it seems I had done it right initially and then changed to the wrong way). As PEP 561 warns us, this does create conflicts; other libraries in the databricks namespace package (such as, in my case, databricks-vectorsearch) are then treated as though they are typed, which they are not. This commit moves the py.typed file to the correct places, the submodule folders, fixing that problem.
Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* change target of mypy to src/databricks instead of src.

I think this might fix the CI code-quality checks failure, but unfortunately I can't replicate that failure locally and the error message is unhelpful

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Possible workaround for bad error message 'error: --install-types failed (no mypy cache directory)'; see https://github.com/python/mypy/issues/10768#issuecomment-2178450153

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* fix invalid yaml syntax

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Best fix (#3)

Fixes the problem by cding and supplying a flag to mypy (that mypy needs this flag is seemingly fixed/changed in later versions of mypy; but that's another pr altogether...). Also fixes a type error that was somehow in the arguments of the program (?!) (I guess this is because you guys are still using implicit optional)

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* return the old result_links default (#5)

Return the old result_links default, make the type optional, & I'm pretty sure the original problem is that add_file_links can't take a None, so these statements should be in the body of the if-statement that ensures it is not None

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Update src/databricks/sql/utils.py

"self.download_manager is unconditionally used later, so must be created. Looks this part of code is totally not covered with tests 🤔"

Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Upgrade mypy (#406)

* Upgrade mypy

This commit removes the flag (and cd step) from https://github.com/databricks/databricks-sql-python/commit/f53aa37a34dc37026d430e71b5e0d1b871bc5ac1 which we added to get mypy to treat namespaces correctly. This was apparently a bug in mypy, or behavior they decided to change. To get the new behavior, we must upgrade mypy. (This also allows us to remove a couple `# type: ignore` comment that are no longer needed.)

This commit runs changes the version of mypy and runs `poetry lock`. It also conforms the whitespace of files in this project to the expectations of various tools and standard (namely: removing trailing whitespace as expected by git and enforcing the existence of one and only one newline at the end of a file as expected by unix and github.) It also uses https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade codebase due to a change in mypy behavior. For a similar reason, it also fixes a new type (or otherwise) errors:

* "Return type 'Retry' of 'new' incompatible with return type 'DatabricksRetryPolicy' in supertype 'Retry'"
* databricks/sql/auth/retry.py:225: error: object has no attribute update  [attr-defined]
* /test_param_escaper.py:31: DeprecationWarning: invalid escape sequence \) [as it happens, I think it was also wrong for the string not to be raw, because I'm pretty sure it wants all of its backslashed single-quotes to appear literally with the backslashes, which wasn't happening until now]
* ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject [this is like a numpy version thing, which I fixed by being stricter about numpy version]

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Incorporate suggestion.

I decided the most expedient way of dealing with this type error was just adding the type ignore comment back in, but with a  `[attr-defined]` specifier this time. I mean, otherwise I would have to restructure the code or figure out the proper types for a TypedDict for the dict and I don't think that's worth it at the moment.

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Do not retry failing requests with status code 401 (#408)

- Raises NonRecoverableNetworkError when request results in 401 status code

Signed-off-by: Tor Hødnebø <thodnebo@gmail.com>
Signed-off-by: Tor Hødnebø <tor.hodnebo@gjensidige.no>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1715] Remove username/password (BasicAuth) auth option (#409)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1751] Refactor CloudFetch downloader: handle files sequentially (#405)

* [PECO-1751] Refactor CloudFetch downloader: handle files sequentially; utilize Futures

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Retry failed CloudFetch downloads

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix CloudFetch retry policy to be compatible with all `urllib3` versions we support (#412)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Disable SSL verification for CloudFetch links (#414)

* Disable SSL verification for CloudFetch links

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Use existing `_tls_no_verify` option in CloudFetch downloader

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare relese 3.3.0 (#415)

* Prepare relese 3.3.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Remove @arikfr from CODEOWNERS

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix pandas 2.2.2 support (#416)

* Support pandas 2.2.2

See release note numpy 2.2.2:
https://pandas.pydata.org/docs/dev/whatsnew/v2.2.0.html#to-numpy-for-numpy-nullable-and-arrow-types-converts-to-suitable-numpy-dtype

* Allow pandas 2.2.2 in pyproject.toml

* Update poetry.lock, poetry lock --no-update

* Code style

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1801] Make OAuth as the default authenticator if no authentication setting is provided (#419)

* [PECO-1801] Make OAuth as the default authenticator if no authentication setting is provided

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1857] Use SSL options with HTTPS connection pool (#425)

* [PECO-1857] Use SSL options with HTTPS connection pool

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Some cleanup

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Resolve circular dependencies

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update existing tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix MyPy issues

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix `_tls_no_verify` handling

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Add tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare release v3.4.0 (#430)

Prepare release 3.4.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1926] Create a non pyarrow flow to handle small results for the column set (#440)

* Implemented the columnar flow for non arrow users

* Minor fixes

* Introduced the Column Table structure

* Added test for the new column table

* Minor fix

* Removed unnecessory fikes

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-1961] On non-retryable error, ensure PySQL includes useful information in error (#447)

* added error info on non-retryable error

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Reformatted all the files using black (#448)

Reformatted the files using black

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare release v3.5.0 (#457)

Prepare release 3.5.0

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECO-2051] Add custom auth headers into cloud fetch request (#460)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Prepare release 3.6.0 (#461)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [ PECO - 1768 ] PySQL: adjust HTTP retry logic to align with Go and Nodejs drivers (#467)

* Added the exponential backoff code

* Added the exponential backoff algorithm and refractored the code

* Added jitter and added unit tests

* Reformatted

* Fixed the test_retry_exponential_backoff integration test

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [ PECO-2065 ] Create the async execution flow for the PySQL Connector (#463)

* Built the basic flow for the async pipeline - testing is remaining

* Implemented the flow for the get_execution_result, but the problem of invalid operation handle still persists

* Missed adding some files in previous commit

* Working prototype of execute_async, get_query_state and get_execution_result

* Added integration tests for execute_async

* add docs for functions

* Refractored the async code

* Fixed java doc

* Reformatted

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Fix for check_types github action failing (#472)

Fixed the chekc_types failing

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Remove upper caps on dependencies (#452)

* Remove upper caps on numpy and pyarrow versions

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Updated the doc to specify native parameters in PUT operation is not supported from >=3.x connector (#477)

Added doc update

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Incorrect rows in inline fetch result (#479)

* Raised error when incorrect Row offset it returned

* Changed error type

* grammar fix

* Added unit tests and modified the code

* Updated error message

* Updated the non retying to only inline case

* Updated fix

* Changed the flow

* Minor update

* Updated the retryable condition

* Minor test fix

* Added extra space

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Bumped up to version 3.7.0 (#482)

* bumped up version

* Updated to version 3.7.0

* Grammar fix

* Minor fix

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* PySQL Connector split into connector and sqlalchemy (#444)

* Modified the gitignore file to not have .idea file

* [PECO-1803] Splitting the PySql connector into the core and the non core part (#417)

…
saishreeeee added a commit that referenced this pull request Jul 10, 2025
* [PECO-197] Support Python 3.10 (#31)

* Test with multiple python versions.
* Update pyarrow to version 9.0.0 to address issue in relation to python 3.10 & a specific version of numpy being pulled in by pyarrow.

Closes #26 

Signed-off-by: David Black <dblack@atlassian.com>

* Update changelog and bump to v2.0.4 (#34)

* Update changelog and bump to v2.0.4
* Specifically thank @dbaxa for this change.

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* Bump to 2.0.5-dev on main (#35)

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* On Pypi, display the "Project Links" sidebar. (#36)

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* [ES-402013] Close cursors before closing connection (#38)

* Add test: cursors are closed when connection closes

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* Bump version to 2.0.5 and improve CHANGELOG (#40)

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* fix dco issue

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>

* fix dco issue

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>

* dco tunning

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>

* dco tunning

Signed-off-by: Moe Derakhshani <moe.derakhshani@databricks.com>

* Github workflows: run checks on pull requests from forks (#47)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* OAuth implementation (#15)

This PR:
* Adds the foundation for OAuth against Databricks account on AWS with BYOIDP.
* It copies one internal module that Steve Weis @sweisdb wrote for Databricks CLI (oauth.py). Once ecosystem-dev team (Serge, Pieter) build a python sdk core we will move this code to their repo as a dependency. 
* the PR provides authenticators with visitor pattern format for stamping auth-token which later is intended to be moved to the repo owned by Serge @nfx and and Pieter @pietern

* Automate deploys to Pypi (#48)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-205] Add functional examples (#52)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.1.0 (#54)

Bump to v2.1.0 and update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [SC-110400] Enabling compression in Python SQL Connector (#49)

Signed-off-by: Mohit Singla <mohit.singla@databricks.com>
Co-authored-by: Moe Derakhshani <moe.derakhshani@databricks.com>

* Add tests for parameter sanitisation / escaping (#46)

* Refactor so we can unit test `inject_parameters`
* Add unit tests for inject_parameters
* Remove inaccurate comment. Per #51, spark sql does not support escaping a single quote with a second single quote.
* Closes #51 and adds unit tests plus the integration test provided in #56

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Courtney Holcomb (@courtneyholcomb)
Co-authored-by: @mcannamela

* Bump thrift dependency to 0.16.0 (#65)

Addresses https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-13949

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.2.0 (#66)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Support Python 3.11 (#60)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.2.1  (#70)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add none check on _oauth_persistence in DatabricksOAuthProvider (#71)

Add none check on _oauth_persistence in DatabricksOAuthProvider to avoid app crash when _oauth_persistence is None.

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Support custom oauth client id and redirect port (#75)

* Support custom oauth client id and rediret port range

PySQL is used by other tools/CLIs which have own oauth client id,
we need to expose oauth_client_id and oauth_redirect_port_range
as the connection parameters to support this customization.

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Change oauth redirect port range to port

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Fix type check issue

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Bump version to 2.2.2 (#76)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse <jesse.whitehouse@databricks.com>

* Merge staging ingestion into main (#78)

Follow up to #67 and #64 

* Regenerate TCLIService using latest TCLIService.thrift from DBR (#64)
* SI: Implement GET, PUT, and REMOVE (#67)
* Re-lock dependencies after merging `main`

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.3.0 and update changelog (#80)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add pkgutil-style for the package (#84)

Since the package is under databricks namespace. pip install this package will cause issue importing other packages under the same namespace like automl and feature store. Adding pkgutil style to resolve the issue.

Signed-off-by: lu-wang-dl <lu.wang@databricks.com>

* Add SQLAlchemy Dialect (#57)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to version 2.4.0(#89)


Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix syntax in examples in root readme. (#92)

Do this because the environment variable pulls did not have closing quotes on their string literals.

* Less strict numpy and pyarrow dependencies (#90)

Signed-off-by: Thomas Newton <thomas.w.newton@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Thomas Newton <thomas.w.newton@gmail.com>

* Update example in docstring so query output is valid Spark SQL (#95)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.4.1 (#96)

Per the sermver.org spec, updating the projects dependencies is considered a compatible change.

https: //semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Update CODEOWNERS (#97)

* Add Andre to CODEOWNERS (#98)

* Add Andre. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Revert the change temporarily so I can sign off. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Add Andre and sign off. Signed-off-by: Yunbo Deng <yunbo.deng@databricks.com>

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Remove redundant line

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

---------

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Add external auth provider + example (#101)

Signed-off-by: Andre Furlan <andre.furlan@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Retry on connection timeout (#103)

A lot of the time we see the error `[Errno 110] Connection timed out`. This happens a lot in Azure, particularly. In this PR I make it a retryable error as it is safe

Signed-off-by: Andre Furlan <andre.furlan@databricks.com>

* [PECO-244] Make http proxies work (#81)

Override thrift's proxy header encoding function.  Uses the fix identified in https://github.com/apache/thrift/pull/2565

H/T @pspeter

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to version 2.5.0 (#104)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix changelog release date for version 2.5.0

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Relax sqlalchemy requirement (#113)

* Plus update docs about how to change dependency spec

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Update to version 2.5.1 (#114)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix SQLAlchemy timestamp converter + docs (#117)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Relax pandas and alembic requirements (#119)

Update dependencies for alembic and pandas per customer request

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to version 2.5.2 (#118)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Use urllib3 for thrift transport + reuse http connections (#131)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Default socket timeout to 15 min (#137)


Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Bump version to 2.6.0 (#139)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix: some thrift RPCs failed with BadStatusLine (#141)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.6.1 (#142)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [ES-706907] Retry GetOperationStatus for http errors (#145)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.6.2 (#147)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-626] Support OAuth flow for Databricks Azure (#86)

## Summary

Support OAuth flow for Databricks Azure

## Background

Some OAuth endpoints (e.g. Open ID Configuration) and scopes are different between Databricks Azure and AWS. Current code only supports OAuth flow on Databricks in AWS

## What changes are proposed in this pull request?

- Change `OAuthManager` to decouple Databricks AWS specific configuration from OAuth flow
- Add `sql/auth/endpoint.py` that implements cloud specific OAuth endpoint configuration
- Change `DatabricksOAuthProvider` to work with the OAuth configurations in different Databricks cloud (AWS, Azure)
- Add the corresponding unit tests

* Use a separate logger for unsafe thrift responses (#153)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Improve e2e test development ergonomics  (#155)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Don't raise exception when closing a stale Thrift session (#159)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to version 2.7.0 (#161)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Cloud Fetch download handler (#127)

* Cloud Fetch download handler

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Issue fix: final result link compressed data has multiple LZ4 end-of-frame markers

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Addressing PR comments
 - Linting
 - Type annotations
 - Use response.ok
 - Log exception
 - Remove semaphore and only use threading.event
 - reset() flags method
 - Fix tests after removing semaphore
 - Link expiry logic should be in secs
 - Decompress data static function
 - link_expiry_buffer and static public methods
 - Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Changing logger.debug to remove url

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* _reset() comment to docstring

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* link_expiry_buffer -> link_expiry_buffer_secs

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Cloud Fetch download manager (#146)

* Cloud Fetch download manager

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Bug fix: submit handler.run

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Type annotations

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Namedtuple -> dataclass

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Shutdown thread pool and clear handlers

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* handler.run is the correct call

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Link expiry buffer in secs

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Adding type annotations for download_handlers and downloadable_result_settings

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Move DownloadableResultSettings to downloader.py to avoid circular import

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Black linting

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Timeout is never None

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Cloud fetch queue and integration (#151)

* Cloud fetch queue and integration

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Enable cloudfetch with direct results

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Typing and style changes

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Client-settable max_download_threads

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Docstrings and comments

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Increase default buffer size bytes to 104857600

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Move max_download_threads to kwargs of ThriftBackend, fix unit tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Fix tests: staticmethod make_arrow_table mock not callable

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* cancel_futures in shutdown() only available in python >=3.9.0

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Black linting

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Fix typing errors

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Cloud Fetch e2e tests (#154)

* Cloud Fetch e2e tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Test case works for e2-dogfood shared unity catalog

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Moving test to LargeQueriesSuite and setting catalog to hive_metastore

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Align default value of buffer_size_bytes in driver tests

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Adding comment to specify what's needed to run successfully

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

---------

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Update changelog for cloudfetch (#172)

Signed-off-by: Matthew Kim <11141331+mattdeekay@users.noreply.github.com>

* Improve sqlalchemy backward compatibility with 1.3.24 (#173)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* OAuth: don't override auth headers with contents of .netrc file (#122)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix proxy connection pool creation (#158)

Signed-off-by: Sebastian Eckweiler <sebastian.eckweiler@mercedes-benz.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Sebastian Eckweiler <sebastian.eckweiler@mercedes-benz.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Relax pandas dependency constraint to allow ^2.0.0 (#164)

Signed-off-by: Daniel Segesdi <daniel.segesdi@turbine.ai>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Use hex string version of operation ID instead of bytes (#170)

---------
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy: fix has_table so it honours schema= argument (#174)

---------
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix socket timeout test (#144)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Disable non_native_boolean_check_constraint (#120)

---------
Signed-off-by: Bogdan Kyryliuk <b.kyryliuk@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Remove unused import for SQLAlchemy 2 compatibility (#128)

Signed-off-by: William Gentry <william.barr.gentry@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.8.0 (#178)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix typo in python README quick start example (#186)

---------

Co-authored-by: Jesse <jesse.whitehouse@databricks.com>

* Configure autospec for mocked Client objects (#188)

Resolves #187

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Use urllib3 for retries (#182)

Behaviour is gated behind `enable_v3_retries` config. This will be removed and become the default behaviour in a subsequent release.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.9.0 (#189)

* Add note to changelog about using cloud_fetch
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Explicitly add urllib3 dependency (#191)

Signed-off-by: Jacobus Herman <jacobus.herman@otrium.com>

Co-authored-by: Jesse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to 2.9.1 (#195)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Make backwards compatible with urllib3~=1.0 (#197)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Convenience improvements to v3 retry logic (#199)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.9.2 (#201)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Github Actions Fix: poetry install fails for python 3.7 tests (#208)

snok/install-poetry@v1 installs the latest version of Poetry

The latest version of poetry released on 20 August 2023 (four days ago
as of this commit) which drops support for Python 3.7, causing our
github action to fail.

Until we complete #207 we need to conditionally install the last version
of poetry that supports Python 3.7 (poetry==1.5.1)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Make backwards compatible with urllib3~=1.0 [Follow up #197]  (#206)

* Make retry policy backwards compatible with urllib3~=1.0.0

We already implement the equivalent of backoff_max so the behaviour will
be the same for urllib3==1.x and urllib3==2.x

We do not implement backoff jitter so the behaviour for urllib3==1.x will
NOT include backoff jitter whereas urllib3==2.x WILL include jitter.

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump version to 2.9.3 (#209)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add note to sqlalchemy example: IDENTITY isn't supported yet (#212)

ES-842237

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1029] Updated thrift compiler version (#216)

* Updated thrift definitions

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Tried with a different thrift installation

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Reverted TCLI to previous

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Reverted to older thrift

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Updated version again

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Upgraded thrift

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Final commit

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* [PECO-1055] Updated thrift defs to allow Tsparkparameters (#220)

Updated thrift defs to most recent versions

* Update changelog to indicate that 2.9.1 and 2.9.2 have been yanked. (#222)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix changelog typo: _enable_v3_retries (#225)

Closes #219

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Introduce SQLAlchemy reusable dialog tests (#125)

Signed-off-by: Jim Fulton <jim.fulton@unsupervised.com>
Co-Authored-By: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1026] Add Parameterized Query support to Python (#217)

* Initial commit

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added tsparkparam handling

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added basic test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Addressed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Addressed missed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Resolved comments

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Parameterized queries: Add e2e tests for inference (#227)

* [PECO-1109] Parameterized Query: add suport for inferring decimal types (#228)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: reorganise dialect files into a single directory (#231)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1083] Updated thrift files and added check for protocol version (#229)

* Updated thrift files and added check for protocol version

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Made error message more clear

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Changed name of fn

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Ran linter

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Update src/databricks/sql/client.py

Co-authored-by: Jesse <jwhitehouse@airpost.net>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Co-authored-by: Jesse <jwhitehouse@airpost.net>

* [PECO-840] Port staging ingestion behaviour to new UC Volumes (#235)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Query parameters: implement support for binding NoneType parameters (#233)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Bump dependency version and update e2e tests for existing behaviour (#236)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Revert "[PECO-1083] Updated thrift files and added check for protocol version" (#237)

Reverts #229 as it causes all of our e2e tests to fail on some versions of DBR.

We'll reimplement the protocol version check in a follow-up.

This reverts commit 241e934a96737d506c2a1f77c7012e1ab8de967b.

* SQLAlchemy 2: add type compilation for all CamelCase types (#238)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: add type compilation for uppercase types (#240)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Stop skipping all type tests (#242)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1134] v3 Retries: allow users to bound the number of redirects to follow (#244)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Parameters: Add type inference for BIGINT and TINYINT types (#246)


Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Stop skipping some non-type tests (#247)

* Stop skipping TableDDLTest and permanent skip HasIndexTest

We're now in the territory of features that aren't required for sqla2
compat as of pysql==3.0.0 but we may consider adding this in the future.

In this case, table comment reflection needs to be manually implemented.
Index reflection would require hooking into the compiler to reflect
the partition strategy.

test_suite.py::HasIndexTest_databricks+databricks::test_has_index[dialect] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index[inspector] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[dialect] SKIPPED (Databricks does not support indexes.)
test_suite.py::HasIndexTest_databricks+databricks::test_has_index_schema[inspector] SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_add_table_comment SKIPPED (Comment reflection is possible but not implemented in this dialect.)
test_suite.py::TableDDLTest_databricks+databricks::test_create_index_if_not_exists SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_create_table PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_create_table_if_not_exists PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_create_table_schema PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_drop_index_if_exists SKIPPED (Databricks does not support indexes.)
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table_comment SKIPPED (Comment reflection is possible but not implemented in this dialect.)
test_suite.py::TableDDLTest_databricks+databricks::test_drop_table_if_exists PASSED
test_suite.py::TableDDLTest_databricks+databricks::test_underscore_names PASSED

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip QuotedNameArgumentTest with comments

The fixes to DESCRIBE TABLE and visit_xxx were necessary to get to the
point where I could even determine that these tests wouldn't pass.

But those changes are not currently tested in the dialect. If, in the
course of reviewing the remaining tests in the compliance suite, I find
that these visit_xxxx methods are not tested anywhere else then we should
extend test_suite.py with our own tests to confirm the behaviour for
ourselves.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Move files from base.py to _ddl.py

The presence of this pytest.ini file is _required_ to establish pytest's
root_path

https://docs.pytest.org/en/7.1.x/reference/customize.html#finding-the-rootdir

Without it, the custom pytest plugin from SQLAlchemy can't read the contents
of setup.cfg which makes none of the tests runnable.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Emit a warning for certain constructs

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping RowFetchTest

Date type work fixed this test failure

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Revise infer_types logic to never infer a TINYINT

This allows these SQLAlchemy tests to pass:

test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_bound_limit PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_bound_limit_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_expr_limit_simple_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_expr_offset PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases0] PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases1] PASSED
test_suite.py::FetchLimitOffsetTest_databricks+databricks::test_simple_limit_offset[cases2] PASSED

This partially reverts the change introduced in #246

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping FetchLimitOffsetTest

I implemented our custom DatabricksStatementCompiler so we can override
the default rendering of unbounded LIMIT clauses from `LIMIT -1` to
`LIMIT ALL`

We also explicitly skip the FETCH clause tests since Databricks doesn't
support this syntax.

Blacked all source code here too.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping FutureTableDDLTest

Add meaningful skip markers for table comment reflection and indexes

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping Identity column tests

This closes https://github.com/databricks/databricks-sql-python/issues/175

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping HasTableTest

Adding the @reflection.cache decorator to has_table is necessary to pass
test_has_table_cache

Caching calls to has_table improves the efficiency of the connector

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip LongNameBlowoutTest

Databricks constraint names are limited to 255 characters

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Stop skipping ExceptionTest

Black test_suite.py

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Permanently skip LastrowidTest

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Implement PRIMARY KEY and FOREIGN KEY reflection and enable tests

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Skip all IdentityColumnTest tests

Turns out that none of these can pass for the same reason that the
first two seemed un-runnable in db6f52bb329f3f43a9215b5cd46b03c3459a302a

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: implement and refactor schema reflection methods (#249)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add GovCloud domain into AWS domains (#252)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* SQLAlchemy 2: Refactor __init__.py into base.py (#250)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Finish implementing all of ComponentReflectionTest (#251)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Finish marking all tests in the suite (#253)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Finish organising compliance test suite (#256)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Fix failing mypy checks from development (#257)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Enable cloud fetch by default (#258)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1137] Reintroduce protocol checking to Python test fw (#248)

* Put in some unit tests, will add e2e

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Added e2e test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Linted

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* re-bumped thrift files

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Changed structure to store protocol version as feature of connection

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed parameters test

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Update src/databricks/sql/client.py

Co-authored-by: Jesse <jwhitehouse@airpost.net>
Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Fixed comments

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

* Removed extra indent

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>

---------

Signed-off-by: nithinkdb <nithin.krishnamurthi@databricks.com>
Co-authored-by: Jesse <jwhitehouse@airpost.net>

* sqla2 clean-up: make sqlalchemy optional and don't mangle the user-agent (#264)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy 2: Add support for TINYINT (#265)

Closes #123

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add OAuth M2M example (#266)

* Add OAuth M2M example

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Native Parameters: reintroduce INLINE approach with tests (#267)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Document behaviour of executemany (#213)

Signed-off-by: Martin Rueckl <enigma@nbubu.de>

* SQLAlchemy 2: Expose TIMESTAMP and TIMESTAMP_NTZ types to users (#268)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Drop Python 3.7 as a supported version (#270)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
(cherry picked from commit 8d85fa8b33a70331141c0c6556196f641d1b8ed5)

* GH Workflows: remove Python 3.7 from the matrix for _all_ workflows (#274)

Remove Python 3.7 from the matrix for _all_ workflows

This was missed in #270

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Add README and updated example for SQLAlchemy usage (#273)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Rewrite native parameter implementation with docs and tests (#281)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Enable v3 retries by default (#282)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* security: bump pyarrow dependency to 14.0.1 (#284)

pyarrow is currently compatible with Python 3.8 → Python 3.11

I also removed specifiers for when Python is 3.7 since this no longer
applies.

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump package version to 3.0.0 (#285)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix docstring about default parameter approach (#287)

* [PECO-1286] Add tests for complex types in query results (#293)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* sqlalchemy: fix deprecation warning for dbapi classmethod (#294)

Rename `dbapi` classmethod to `import_dbapi` as required by SQLAlchemy 2

Closes #289

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1297] sqlalchemy: fix: can't read columns for tables containing a TIMESTAMP_NTZ column (#296)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Prepared 3.0.1 release (#297)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Make contents of `__init__.py` equal across projects (#304)

---------

Signed-off-by: Pieter Noordhuis <pieter.noordhuis@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix URI construction in ThriftBackend (#303)

Signed-off-by: Jessica <12jessicasmith34@gmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [sqlalchemy] Add table and column comment support (#329)

Signed-off-by: Christophe Bornet <cbornet@hotmail.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Pin pandas and urllib3 versions to fix runtime issues in dbt-databricks (#330)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* SQLAlchemy: TINYINT types didn't reflect properly (#315)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1435] Restore `tests.py` to the test suite (#331)

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Bump to version 3.0.2 (#335)

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Update some outdated OAuth comments (#339)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Redact the URL query parameters from the urllib3.connectionpool logs (#341)

* Redact the URL query parameters from the urllib3.connectionpool logs

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

* Fix code formatting

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

* Add str check for the log record message arg dict values

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

---------

Signed-off-by: Mubashir Kazia <mubashir.kazia@databricks.com>

* Bump to version 3.0.3 (#344)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-1411] Support Databricks OAuth on GCP (#338)

* [PECO-1411] Support OAuth InHouse on GCP

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

---------

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Co-authored-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* [PECO-1414] Support Databricks native OAuth in Azure (#351)

* [PECO-1414] Support Databricks InHouse OAuth in Azure

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Prep for Test Automation (#352)

Getting ready for test automation

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Update code owners (#345)

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* update owners

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

---------

Signed-off-by: yunbodeng-db <104732431+yunbodeng-db@users.noreply.github.com>

* Reverting retry behavior on 429s/503s to how it worked in 2.9.3 (#349)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Bump to version 3.1.0 (#358)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-1440] Expose current query id on cursor object (#364)

* [PECO-1440] Expose current query id on cursor object

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Clear `active_op_handle` when closing the cursor

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Add a default for retry after (#371)

* Add a default for retry after
Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Applied black formatter
Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Fix boolean literals (#357)

Set supports_native_boolean to True

Signed-off-by: Alex Holyoke <alexander.holyoke@growthloop.com>

* Don't retry network requests that fail with code 403 (#373)

* Don't retry requests that fail with 404

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* Fix lint error

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

---------

Signed-off-by: Jesse Whitehouse <jesse@whitehouse.dev>

* Bump to 3.1.1 (#374)

* bump to 3.1.1

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Fix cookie setting (#379)

* fix cookie setting

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Removing cookie code

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

---------

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Fixing a couple type problems: how I would address most of #381 (#382)

* Create py.typed

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* add -> Connection annotation

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* massage the code to appease the particular version of the project's mypy deps

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* fix circular import problem

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* fix the return types of the classes' __enter__ functions (#384)

fix the return types of the classes' __enter__ functions so that the type information is preserved in context managers eg with-as blocks

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Add Kravets Levko to codeowners (#386)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Prepare for 3.1.2 (#387)

Signed-off-by: Ben Cassell <ben.cassell@databricks.com>

* Update the proxy authentication (#354)

changed authentication for proxy

* Fix failing tests (#392)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Relax `pyarrow` pin (#389)

* Relax `pyarrow` pin

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Allow `pyarrow` 16

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Update `poetry.lock`

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

---------

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Fix log error in oauth.py (#269)

* Duplicate of applicable change from #93

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Update changelog

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>

* Fix after merge

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Jesse Whitehouse <jesse.whitehouse@databricks.com>
Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>

* Enable `delta.feature.allowColumnDefaults` for all tables (#343)

* Enable `delta.feature.allowColumnDefaults` for all tables

* Code style

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>

* Fix SQLAlchemy tests (#393)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Add more debug logging for CloudFetch (#395)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update Thrift package (#397)

Signed-off-by: Milan Lukac <milan@lukac.online>

* Prepare release 3.2.0 (#396)

* Prepare release 3.2.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update changelog

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* move py.typed to correct places (#403)

* move py.typed to correct places

https://peps.python.org/pep-0561/ says 'For namespace packages (see PEP 420), the py.typed file should be in the submodules of the namespace, to avoid conflicts and for clarity.'. Previously, when I added the py.typed file to this project, https://github.com/databricks/databricks-sql-python/pull/382 , I was unaware this was a namespace package (although, curiously, it seems I had done it right initially and then changed to the wrong way). As PEP 561 warns us, this does create conflicts; other libraries in the databricks namespace package (such as, in my case, databricks-vectorsearch) are then treated as though they are typed, which they are not. This commit moves the py.typed file to the correct places, the submodule folders, fixing that problem.
Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* change target of mypy to src/databricks instead of src.

I think this might fix the CI code-quality checks failure, but unfortunately I can't replicate that failure locally and the error message is unhelpful

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Possible workaround for bad error message 'error: --install-types failed (no mypy cache directory)'; see https://github.com/python/mypy/issues/10768#issuecomment-2178450153

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* fix invalid yaml syntax

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Best fix (#3)

Fixes the problem by cding and supplying a flag to mypy (that mypy needs this flag is seemingly fixed/changed in later versions of mypy; but that's another pr altogether...). Also fixes a type error that was somehow in the arguments of the program (?!) (I guess this is because you guys are still using implicit optional)

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* return the old result_links default (#5)

Return the old result_links default, make the type optional, & I'm pretty sure the original problem is that add_file_links can't take a None, so these statements should be in the body of the if-statement that ensures it is not None

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Update src/databricks/sql/utils.py

"self.download_manager is unconditionally used later, so must be created. Looks this part of code is totally not covered with tests 🤔"

Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>

* Upgrade mypy (#406)

* Upgrade mypy

This commit removes the flag (and cd step) from https://github.com/databricks/databricks-sql-python/commit/f53aa37a34dc37026d430e71b5e0d1b871bc5ac1 which we added to get mypy to treat namespaces correctly. This was apparently a bug in mypy, or behavior they decided to change. To get the new behavior, we must upgrade mypy. (This also allows us to remove a couple `# type: ignore` comment that are no longer needed.)

This commit runs changes the version of mypy and runs `poetry lock`. It also conforms the whitespace of files in this project to the expectations of various tools and standard (namely: removing trailing whitespace as expected by git and enforcing the existence of one and only one newline at the end of a file as expected by unix and github.) It also uses https://github.com/hauntsaninja/no_implicit_optional to automatically upgrade codebase due to a change in mypy behavior. For a similar reason, it also fixes a new type (or otherwise) errors:

* "Return type 'Retry' of 'new' incompatible with return type 'DatabricksRetryPolicy' in supertype 'Retry'"
* databricks/sql/auth/retry.py:225: error: object has no attribute update  [attr-defined]
* /test_param_escaper.py:31: DeprecationWarning: invalid escape sequence \) [as it happens, I think it was also wrong for the string not to be raw, because I'm pretty sure it wants all of its backslashed single-quotes to appear literally with the backslashes, which wasn't happening until now]
* ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject [this is like a numpy version thing, which I fixed by being stricter about numpy version]

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Incorporate suggestion.

I decided the most expedient way of dealing with this type error was just adding the type ignore comment back in, but with a  `[attr-defined]` specifier this time. I mean, otherwise I would have to restructure the code or figure out the proper types for a TypedDict for the dict and I don't think that's worth it at the moment.

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

---------

Signed-off-by: wyattscarpenter <wyattscarpenter@gmail.com>

* Do not retry failing requests with status code 401 (#408)

- Raises NonRecoverableNetworkError when request results in 401 status code

Signed-off-by: Tor Hødnebø <thodnebo@gmail.com>
Signed-off-by: Tor Hødnebø <tor.hodnebo@gjensidige.no>

* [PECO-1715] Remove username/password (BasicAuth) auth option (#409)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-1751] Refactor CloudFetch downloader: handle files sequentially (#405)

* [PECO-1751] Refactor CloudFetch downloader: handle files sequentially; utilize Futures

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Retry failed CloudFetch downloads

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix CloudFetch retry policy to be compatible with all `urllib3` versions we support (#412)

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Disable SSL verification for CloudFetch links (#414)

* Disable SSL verification for CloudFetch links

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Use existing `_tls_no_verify` option in CloudFetch downloader

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Prepare relese 3.3.0 (#415)

* Prepare relese 3.3.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Remove @arikfr from CODEOWNERS

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix pandas 2.2.2 support (#416)

* Support pandas 2.2.2

See release note numpy 2.2.2:
https://pandas.pydata.org/docs/dev/whatsnew/v2.2.0.html#to-numpy-for-numpy-nullable-and-arrow-types-converts-to-suitable-numpy-dtype

* Allow pandas 2.2.2 in pyproject.toml

* Update poetry.lock, poetry lock --no-update

* Code style

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>

* [PECO-1801] Make OAuth as the default authenticator if no authentication setting is provided (#419)

* [PECO-1801] Make OAuth as the default authenticator if no authentication setting is provided

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-1857] Use SSL options with HTTPS connection pool (#425)

* [PECO-1857] Use SSL options with HTTPS connection pool

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Some cleanup

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Resolve circular dependencies

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Update existing tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix MyPy issues

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Fix `_tls_no_verify` handling

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Add tests

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

---------

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* Prepare release v3.4.0 (#430)

Prepare release 3.4.0

Signed-off-by: Levko Kravets <levko.ne@gmail.com>

* [PECO-1926] Create a non pyarrow flow to handle small results for the column set (#440)

* Implemented the columnar flow for non arrow users

* Minor fixes

* Introduced the Column Table structure

* Added test for the new column table

* Minor fix

* Removed unnecessory fikes

* [PECO-1961] On non-retryable error, ensure PySQL includes useful information in error (#447)

* added error info on non-retryable error

* Reformatted all the files using black (#448)

Reformatted the files using black

* Prepare release v3.5.0 (#457)

Prepare release 3.5.0

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-2051] Add custom auth headers into cloud fetch request (#460)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Prepare release 3.6.0 (#461)

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [ PECO - 1768 ] PySQL: adjust HTTP retry logic to align with Go and Nodejs drivers (#467)

* Added the exponential backoff code

* Added the exponential backoff algorithm and refractored the code

* Added jitter and added unit tests

* Reformatted

* Fixed the test_retry_exponential_backoff integration test

* [ PECO-2065 ] Create the async execution flow for the PySQL Connector (#463)

* Built the basic flow for the async pipeline - testing is remaining

* Implemented the flow for the get_execution_result, but the problem of invalid operation handle still persists

* Missed adding some files in previous commit

* Working prototype of execute_async, get_query_state and get_execution_result

* Added integration tests for execute_async

* add docs for functions

* Refractored the async code

* Fixed java doc

* Reformatted

* Fix for check_types github action failing (#472)

Fixed the chekc_types failing

* Remove upper caps on dependencies (#452)

* Remove upper caps on numpy and pyarrow versions

* Updated the doc to specify native parameters in PUT operation is not supported from >=3.x connector (#477)

Added doc update

* Incorrect rows in inline fetch result (#479)

* Raised error when incorrect Row offset it returned

* Changed error type

* grammar fix

* Added unit tests and modified the code

* Updated error message

* Updated the non retying to only inline case

* Updated fix

* Changed the flow

* Minor update

* Updated the retryable condition

* Minor test fix

* Added extra space

* Bumped up to version 3.7.0 (#482)

* bumped up version

* Updated to version 3.7.0

* Grammar fix

* Minor fix

* PySQL Connector split into connector and sqlalchemy (#444)

* Modified the gitignore file to not have .idea file

* [PECO-1803] Splitting the PySql connector into the core and the non core part (#417)

* Implemented ColumnQueue to test the fetchall without pyarrow

Removed token

removed token

* order of fields in row corrected

* Changed the folder structure and tested the basic setup to work

* Refractored the code to make connector to work

* Basic Setup of connector, core and sqlalchemy is working

* Basic integration of core, connect and sqlalchemy is working

* Setup working dynamic change from ColumnQueue to ArrowQueue

* Refractored the test code and moved to respective folders

* Added the unit test for column_queue

Fixed __version__

Fix

* venv_main added to git ignore

* Added code for merging columnar table

* Merging code for columnar

* Fixed the retry_close sesssion test issue with logging

* Fixed the databricks_sqlalchemy tests and introduced pytest.ini for the sqla_testing

* Added pyarrow_test mark on pytest

* Fixed databricks.sqlalchemy to databricks_sqlalchemy imports

* Added poetry.lock

* Added dist folder

* Changed the pyproject.toml

* Minor Fix

* Added the pyarrow skip tag on unit tests and tested their working

* Fixed the Decimal and timestamp conversion issue in non arrow pipeline

* Removed not required files and reformatted

* Fixed test_retry error

* Changed the folder structure to src / databricks

* Removed the columnar non arrow flow to another PR

* Moved the README to the root

* removed columnQueue instance

* Revmoved databricks_sqlalchemy dependency in core

* Changed the pysql_supports_arrow predicate, introduced changes in the pyproject.toml

* Ran the black formatter with the original version

* Extra .py removed from all the __init__.py files names

* Undo formatting check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* Check

* BIG UPDATE

* Refeactor code

* Refractor

* Fixed versioning

* Minor refractoring

* Minor refractoring

* Changed the folder structure such that sqlalchemy has not reference here

* Fixed README.md and CONTRIBUTING.md

* Added manual publish

* On push trigger added

* Manually setting the publish step

* Changed versioning in pyproject.toml

* Bumped up the version to 4.0.0.b3 and also changed the structure to have pyarrow as optional

* Removed the sqlalchemy tests from integration.yml file

* [PECO-1803] Print warning message if pyarrow is not installed (#468)

Print warning message if pyarrow is not installed

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* [PECO-1803] Remove sqlalchemy and update README.md (#469)

Remove sqlalchemy and update README.md

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>

* Removed all sqlalchemy related stuff

* generated the lock file

* Fixed failing tests

* removed poetry.lock

* Updated the lock file

* Fixed poetry numpy 2.2.2 issue

* Workflow fixes

---------

Signed-off-by: Jacky Hu <jacky.hu@databricks.com>
Co-authored-by: Jacky Hu <jacky.hu@databricks.com>

* Removed CI CD for python3.8 (#490)

* Removed python3.8 support

* Minor fix

* Added CI CD upto python 3.12 (#491)

Support for Py till 3.12

* Merging changes from v3.7.1 release (#488)

* Increased the number of retry attempts allowed  (#486)

Updated the number of attempts allowed

* bump version to 3.7.1 (#487)

bumped up version

* Refractore

* Minor change

* Bumped up to version 4.0.0 (#493)

bumped up the version

* Updated action's version (#455)

Updated actions version.
Signed-off-by: Arata Hatori <newwingbird@gmail.com>

* Support Python 3.13 and update deps (#510)

* Remove upper caps on dependencies (#452)

* Remove upper caps on numpy and pyarrow versions

Signed-off-by: David Black <dblack@atlassian.com>

* Added CI CD upto python 3.13

Signed-off-by: David Black <dblack@atlassian.com>

* Specify pandas 2.2.3 as the lower bound for python 3.13

Signed-off-by: David Black <dblack@atlassian.com>

* Specify pyarrow 18.0.0 as the lower bound for python 3.13

Signed-off-by: David Black <dblack@atlassian.com>

* Move `numpy` to dev dependencies

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

* Updated lockfile

Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>

---------

Signed-off-by: David Black <dblack@atlassian.com>
Signed-off-by: Dave Hirschfeld <dave.hirschfeld@gmail.com>
Co-authored-by: David Black <dblack@atlassian.com>

* Improve debugging + fix PR review template (#514)

* Improve debugging + add PR review template

* case sensitivity of PR template

* Forward porting all changes  into 4.x.x. uptil v3.7.3 (#529)

* Base changes

* Black formatter

* Cache version fix

* Added the changed test_retry.py file

* retry_test_mixins changes

* Updated the CODEOWNERS (#531)

Updated the codeowners

* Add version check for urllib3 in backoff calculation (#526)

Signed-off-by: Shivam Raj <shivam.raj@databricks.com>

* [ES-1372353] make user_agent_header part of public API (#530)

* make user_agent_header part of public API

* removed user_agent_entry from list of internal params

* add backward compatibility

* Updates runner used to run DCO check to use databricks-protected-runner (#521)

* commit 1

Signed-off-by: Madhav Sainanee <madhav.sainanee@databricks.com>

* commit 1

Signed-off-by: Madhav Sainanee <madhav.sainanee@databricks.com>

* updates runner for dco check

Signed-off-by: Madhav Sainanee <madhav.sainanee@databricks.com>

* removes contributing file changes

Signed-off-by: Madhav Sainanee <madhav.sainanee@databricks.com>

---------

Signed-off-by: Madhav Sainanee <madhav.sainanee@databricks.com>

* Support multiple timestamp formats in non arrow flow (#533)

* Added check for 2 formats

* Wrote unit tests

* Added more supporting formats

* Added the T format datetime

* Added more timestamp formats

* Added python-dateutil library

* prepare release for v4.0.1 (#534)

Signed-off-by: Shivam Raj <shivam.raj@databricks.com>

* Relaxed bound for python-dateutil (#538)

Changed bound for python-datetutil

* Bumped up the version for 4.0.2 (#539)

* Added example for async execute query (#537)

Added examples and fixed the async execute not working without pyarrow

* Added urllib3 version check (#547)

* Added version check

* Removed packaging

* Bump version to 4.0.3 (#549)

Updated the version to 4.0.3

* Cleanup fields as they might be deprecated/removed/change in the future (#553)

* Clean thrift files

Signed-off-by: Vikrant Puppala <vikrant.puppala@databricks.com>

* Refactor decimal conversion in PyArrow tables to use direct casting (#544)

This PR replaces the previous implementation of convert_decimals_in_arrow_table() with a more efficient approach that uses PyArrow's native casting operation instead of going through pandas conversion and array creation.

- Remove conversion to pandas DataFrame via to_pandas() and apply() methods
- Remove intermediate steps of creating array from decimal column and setting it back
- Replace with direct type casting using PyArrow's cast() method
- Build a new table with transformed columns rather than modifying the original table
- Create a new schema based on the modified fields

The new approach is more performant by avoiding pandas conversion overhead. The table below highlights substantial performance improvements when retrieving all rows from a table containing decimal columns, particularly when compression is disabled. Even greater gains were observed with compression enabled—showing approximately an 84% improvement (6 seconds compared to 39 seconds). Benchmarking was performed against e2-dogfood, with the client located in the us-west-2 region.
![image](https://github.com/user-attachments/assets/5407b651-8ab6-4c13-b525-cf912f503ba0)

Signed-off-by: Jayant Singh <jayant.singh@databricks.com>

* [PECOBLR-361] convert column table to arrow if arrow present (#551)

* Update CODEOWNERS (#562)

new codeowners

* Enhance Cursor close handling and context manager exception management to prevent server side resource leaks (#554)

* Enhance Cursor close handling and context manager exception management

* tests

* fmt

* Fix Cursor.close() to properly handle CursorAlreadyClosedError

* Remove specific test message from Cursor.close() error handling

* Improve error handling in connection and cursor context managers to ensure proper closure during exceptions, including KeyboardInterrupt. Add tests for nested cursor management and verify operation closure on server-side errors.

* add

* add

* PECOBLR-86 improve logging on python driver (#556)

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fixed format

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* used lazy logging

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* changed debug to error logs

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* used lazy logging

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

---------

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update github actions run conditions (#569)

More conditions to run github actions

* Added classes required for telemetry (#572)

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fixed format

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* used lazy logging

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* changed debug to error logs

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* added classes required for telemetry

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* removed TelemetryHelper

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* [PECOBLR-361] convert column table to arrow if arrow present (#551)

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update CODEOWNERS (#562)

new codeowners

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Enhance Cursor close handling and context manager exception management to prevent server side resource leaks (#554)

* Enhance Cursor close handling and context manager exception management

* tests

* fmt

* Fix Cursor.close() to properly handle CursorAlreadyClosedError

* Remove specific test message from Cursor.close() error handling

* Improve error handling in connection and cursor context managers to ensure proper closure during exceptions, including KeyboardInterrupt. Add tests for nested cursor management and verify operation closure on server-side errors.

* add

* add

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* PECOBLR-86 improve logging on python driver (#556)

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* PECOBLR-86 Improve logging for debug level

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fixed format

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* used lazy logging

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* changed debug to error logs

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* used lazy logging

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

---------

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Update github actions run conditions (#569)

More conditions to run github actions

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* Added classes required for telemetry

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* fixed example

Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>

* chan…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants