SQLAlchemy 2.0.31__py3-none-any.whl → 2.0.32__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. {SQLAlchemy-2.0.31.dist-info → SQLAlchemy-2.0.32.dist-info}/METADATA +33 -33
  2. {SQLAlchemy-2.0.31.dist-info → SQLAlchemy-2.0.32.dist-info}/RECORD +51 -51
  3. {SQLAlchemy-2.0.31.dist-info → SQLAlchemy-2.0.32.dist-info}/WHEEL +1 -1
  4. sqlalchemy/__init__.py +1 -1
  5. sqlalchemy/connectors/asyncio.py +10 -1
  6. sqlalchemy/dialects/mssql/base.py +4 -0
  7. sqlalchemy/dialects/mysql/base.py +2 -0
  8. sqlalchemy/dialects/oracle/base.py +36 -4
  9. sqlalchemy/dialects/oracle/cx_oracle.py +5 -14
  10. sqlalchemy/dialects/oracle/oracledb.py +123 -3
  11. sqlalchemy/dialects/postgresql/provision.py +1 -1
  12. sqlalchemy/dialects/postgresql/psycopg2.py +33 -23
  13. sqlalchemy/dialects/sqlite/base.py +19 -1
  14. sqlalchemy/engine/base.py +2 -0
  15. sqlalchemy/engine/default.py +19 -2
  16. sqlalchemy/engine/interfaces.py +10 -2
  17. sqlalchemy/event/base.py +46 -45
  18. sqlalchemy/ext/mypy/util.py +20 -1
  19. sqlalchemy/orm/_orm_constructors.py +12 -2
  20. sqlalchemy/orm/attributes.py +1 -1
  21. sqlalchemy/orm/bulk_persistence.py +29 -1
  22. sqlalchemy/orm/collections.py +5 -3
  23. sqlalchemy/orm/descriptor_props.py +3 -1
  24. sqlalchemy/orm/dynamic.py +6 -4
  25. sqlalchemy/orm/mapped_collection.py +12 -15
  26. sqlalchemy/orm/query.py +1 -1
  27. sqlalchemy/orm/session.py +11 -0
  28. sqlalchemy/orm/strategies.py +11 -0
  29. sqlalchemy/orm/util.py +1 -1
  30. sqlalchemy/sql/base.py +1 -1
  31. sqlalchemy/sql/coercions.py +40 -24
  32. sqlalchemy/sql/compiler.py +5 -3
  33. sqlalchemy/sql/crud.py +1 -1
  34. sqlalchemy/sql/elements.py +13 -3
  35. sqlalchemy/sql/operators.py +6 -0
  36. sqlalchemy/sql/schema.py +3 -8
  37. sqlalchemy/sql/selectable.py +38 -17
  38. sqlalchemy/sql/sqltypes.py +12 -7
  39. sqlalchemy/sql/traversals.py +2 -0
  40. sqlalchemy/sql/type_api.py +22 -7
  41. sqlalchemy/testing/__init__.py +1 -0
  42. sqlalchemy/testing/fixtures/sql.py +12 -2
  43. sqlalchemy/testing/requirements.py +25 -0
  44. sqlalchemy/testing/suite/test_results.py +43 -9
  45. sqlalchemy/testing/suite/test_select.py +111 -0
  46. sqlalchemy/testing/suite/test_types.py +70 -0
  47. sqlalchemy/testing/util.py +18 -0
  48. sqlalchemy/util/compat.py +1 -1
  49. sqlalchemy/util/langhelpers.py +8 -0
  50. {SQLAlchemy-2.0.31.dist-info → SQLAlchemy-2.0.32.dist-info}/LICENSE +0 -0
  51. {SQLAlchemy-2.0.31.dist-info → SQLAlchemy-2.0.32.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: SQLAlchemy
3
- Version: 2.0.31
3
+ Version: 2.0.32
4
4
  Summary: Database Abstraction Library
5
5
  Home-page: https://www.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -26,61 +26,61 @@ Classifier: Topic :: Database :: Front-Ends
26
26
  Requires-Python: >=3.7
27
27
  Description-Content-Type: text/x-rst
28
28
  License-File: LICENSE
29
- Requires-Dist: typing-extensions >=4.6.0
30
- Requires-Dist: greenlet !=0.4.17 ; python_version < "3.13" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))
31
- Requires-Dist: importlib-metadata ; python_version < "3.8"
29
+ Requires-Dist: typing-extensions>=4.6.0
30
+ Requires-Dist: greenlet!=0.4.17; python_version < "3.13" and (platform_machine == "aarch64" or (platform_machine == "ppc64le" or (platform_machine == "x86_64" or (platform_machine == "amd64" or (platform_machine == "AMD64" or (platform_machine == "win32" or platform_machine == "WIN32"))))))
31
+ Requires-Dist: importlib-metadata; python_version < "3.8"
32
32
  Provides-Extra: aiomysql
33
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aiomysql'
34
- Requires-Dist: aiomysql >=0.2.0 ; extra == 'aiomysql'
33
+ Requires-Dist: greenlet!=0.4.17; extra == "aiomysql"
34
+ Requires-Dist: aiomysql>=0.2.0; extra == "aiomysql"
35
35
  Provides-Extra: aioodbc
36
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aioodbc'
37
- Requires-Dist: aioodbc ; extra == 'aioodbc'
36
+ Requires-Dist: greenlet!=0.4.17; extra == "aioodbc"
37
+ Requires-Dist: aioodbc; extra == "aioodbc"
38
38
  Provides-Extra: aiosqlite
39
- Requires-Dist: greenlet !=0.4.17 ; extra == 'aiosqlite'
40
- Requires-Dist: aiosqlite ; extra == 'aiosqlite'
41
- Requires-Dist: typing-extensions !=3.10.0.1 ; extra == 'aiosqlite'
39
+ Requires-Dist: greenlet!=0.4.17; extra == "aiosqlite"
40
+ Requires-Dist: aiosqlite; extra == "aiosqlite"
41
+ Requires-Dist: typing-extensions!=3.10.0.1; extra == "aiosqlite"
42
42
  Provides-Extra: asyncio
43
- Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncio'
43
+ Requires-Dist: greenlet!=0.4.17; extra == "asyncio"
44
44
  Provides-Extra: asyncmy
45
- Requires-Dist: greenlet !=0.4.17 ; extra == 'asyncmy'
46
- Requires-Dist: asyncmy !=0.2.4,!=0.2.6,>=0.2.3 ; extra == 'asyncmy'
45
+ Requires-Dist: greenlet!=0.4.17; extra == "asyncmy"
46
+ Requires-Dist: asyncmy!=0.2.4,!=0.2.6,>=0.2.3; extra == "asyncmy"
47
47
  Provides-Extra: mariadb_connector
48
- Requires-Dist: mariadb !=1.1.2,!=1.1.5,>=1.0.1 ; extra == 'mariadb_connector'
48
+ Requires-Dist: mariadb!=1.1.2,!=1.1.5,>=1.0.1; extra == "mariadb-connector"
49
49
  Provides-Extra: mssql
50
- Requires-Dist: pyodbc ; extra == 'mssql'
50
+ Requires-Dist: pyodbc; extra == "mssql"
51
51
  Provides-Extra: mssql_pymssql
52
- Requires-Dist: pymssql ; extra == 'mssql_pymssql'
52
+ Requires-Dist: pymssql; extra == "mssql-pymssql"
53
53
  Provides-Extra: mssql_pyodbc
54
- Requires-Dist: pyodbc ; extra == 'mssql_pyodbc'
54
+ Requires-Dist: pyodbc; extra == "mssql-pyodbc"
55
55
  Provides-Extra: mypy
56
- Requires-Dist: mypy >=0.910 ; extra == 'mypy'
56
+ Requires-Dist: mypy>=0.910; extra == "mypy"
57
57
  Provides-Extra: mysql
58
- Requires-Dist: mysqlclient >=1.4.0 ; extra == 'mysql'
58
+ Requires-Dist: mysqlclient>=1.4.0; extra == "mysql"
59
59
  Provides-Extra: mysql_connector
60
- Requires-Dist: mysql-connector-python ; extra == 'mysql_connector'
60
+ Requires-Dist: mysql-connector-python; extra == "mysql-connector"
61
61
  Provides-Extra: oracle
62
- Requires-Dist: cx-oracle >=8 ; extra == 'oracle'
62
+ Requires-Dist: cx-oracle>=8; extra == "oracle"
63
63
  Provides-Extra: oracle_oracledb
64
- Requires-Dist: oracledb >=1.0.1 ; extra == 'oracle_oracledb'
64
+ Requires-Dist: oracledb>=1.0.1; extra == "oracle-oracledb"
65
65
  Provides-Extra: postgresql
66
- Requires-Dist: psycopg2 >=2.7 ; extra == 'postgresql'
66
+ Requires-Dist: psycopg2>=2.7; extra == "postgresql"
67
67
  Provides-Extra: postgresql_asyncpg
68
- Requires-Dist: greenlet !=0.4.17 ; extra == 'postgresql_asyncpg'
69
- Requires-Dist: asyncpg ; extra == 'postgresql_asyncpg'
68
+ Requires-Dist: greenlet!=0.4.17; extra == "postgresql-asyncpg"
69
+ Requires-Dist: asyncpg; extra == "postgresql-asyncpg"
70
70
  Provides-Extra: postgresql_pg8000
71
- Requires-Dist: pg8000 >=1.29.1 ; extra == 'postgresql_pg8000'
71
+ Requires-Dist: pg8000>=1.29.1; extra == "postgresql-pg8000"
72
72
  Provides-Extra: postgresql_psycopg
73
- Requires-Dist: psycopg >=3.0.7 ; extra == 'postgresql_psycopg'
73
+ Requires-Dist: psycopg>=3.0.7; extra == "postgresql-psycopg"
74
74
  Provides-Extra: postgresql_psycopg2binary
75
- Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
75
+ Requires-Dist: psycopg2-binary; extra == "postgresql-psycopg2binary"
76
76
  Provides-Extra: postgresql_psycopg2cffi
77
- Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
77
+ Requires-Dist: psycopg2cffi; extra == "postgresql-psycopg2cffi"
78
78
  Provides-Extra: postgresql_psycopgbinary
79
- Requires-Dist: psycopg[binary] >=3.0.7 ; extra == 'postgresql_psycopgbinary'
79
+ Requires-Dist: psycopg[binary]>=3.0.7; extra == "postgresql-psycopgbinary"
80
80
  Provides-Extra: pymysql
81
- Requires-Dist: pymysql ; extra == 'pymysql'
81
+ Requires-Dist: pymysql; extra == "pymysql"
82
82
  Provides-Extra: sqlcipher
83
- Requires-Dist: sqlcipher3-binary ; extra == 'sqlcipher'
83
+ Requires-Dist: sqlcipher3-binary; extra == "sqlcipher"
84
84
 
85
85
  SQLAlchemy
86
86
  ==========
@@ -1,4 +1,4 @@
1
- sqlalchemy/__init__.py,sha256=sz89h0rk4HnopZTE-CXiZz3UlVY8JOD-IuYU_8VFqxU,13033
1
+ sqlalchemy/__init__.py,sha256=i0mVxtnBs8TF20PbrQJe7ftldXr46Jp4MmWaCO0F8Pw,13033
2
2
  sqlalchemy/events.py,sha256=k-ZD38aSPD29LYhED7CBqttp5MDVVx_YSaWC2-cu9ec,525
3
3
  sqlalchemy/exc.py,sha256=M_8-O1hd8i6gbyx-TapV400p_Lxq2QqTGMXUAO-YgCc,23976
4
4
  sqlalchemy/inspection.py,sha256=MF-LE358wZDUEl1IH8-Uwt2HI65EsQpQW5o5udHkZwA,5063
@@ -8,7 +8,7 @@ sqlalchemy/schema.py,sha256=dKiWmgHYjcKQ4TiiD6vD0UMmIsD8u0Fsor1M9AAeGUs,3194
8
8
  sqlalchemy/types.py,sha256=cQFM-hFRmaf1GErun1qqgEs6QxufvzMuwKqj9tuMPpE,3168
9
9
  sqlalchemy/connectors/__init__.py,sha256=PzXPqZqi3BzEnrs1eW0DcsR4lyknAzhhN9rWcQ97hb4,476
10
10
  sqlalchemy/connectors/aioodbc.py,sha256=GSTiNMO9h0qjPxgqaxDwWZ8HvhWMFNVR6MJQnN1oc40,5288
11
- sqlalchemy/connectors/asyncio.py,sha256=K3U5857TD0GmJXIhxgRljKnJhJNzYFhQ8UjyFX0Yyoo,5878
11
+ sqlalchemy/connectors/asyncio.py,sha256=Hq2bkXmG6-KO_RfCrwMqx4oGH-uH1Z1WWKqPWNjz8p4,6138
12
12
  sqlalchemy/connectors/pyodbc.py,sha256=t7AjyxIOnaWg3CrlUEpBs4Y5l0HFdNt3P_cSSKhbi0Y,8501
13
13
  sqlalchemy/cyextension/__init__.py,sha256=GzhhN8cjMnDTE0qerlUlpbrNmFPHQWCZ4Gk74OAxl04,244
14
14
  sqlalchemy/cyextension/collections.pyx,sha256=L7DZ3DGKpgw2MT2ZZRRxCnrcyE5pU1NAFowWgAzQPEc,12571
@@ -22,7 +22,7 @@ sqlalchemy/dialects/_typing.py,sha256=hyv0nKucX2gI8ispB1IsvaUgrEPn9zEcq9hS7kfstE
22
22
  sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239
23
23
  sqlalchemy/dialects/mssql/__init__.py,sha256=r5t8wFRNtBQoiUWh0WfIEWzXZW6f3D0uDt6NZTW_7Cc,1880
24
24
  sqlalchemy/dialects/mssql/aioodbc.py,sha256=UQd9ecSMIML713TDnLAviuBVJle7P7i1FtqGZZePk2Y,2022
25
- sqlalchemy/dialects/mssql/base.py,sha256=87Z8bQbA8q5_T2Oyd4tUuttWNjYTQD9Dhq-eplDJcY4,132301
25
+ sqlalchemy/dialects/mssql/base.py,sha256=TQekFOsor8Rc-cnDPmbq_JLQekKrHPtUdBdNsCYFw7w,132447
26
26
  sqlalchemy/dialects/mssql/information_schema.py,sha256=HswjDc6y0mPXCf_x6VyylHlBdBa4PSY6Evxmmlch700,8084
27
27
  sqlalchemy/dialects/mssql/json.py,sha256=evUACW2O62TAPq8B7QIPagz7jfc664ql9ms68JqiYzg,4816
28
28
  sqlalchemy/dialects/mssql/provision.py,sha256=RTVbgYLFAHzEnpVQDJroU8ji_10MqBTiZfyP9_-QNT4,5362
@@ -31,7 +31,7 @@ sqlalchemy/dialects/mssql/pyodbc.py,sha256=vwM-vBlmRwrqxOc73P0sFOrBSwn24wzc5IkEO
31
31
  sqlalchemy/dialects/mysql/__init__.py,sha256=bxbi4hkysUK2OOVvr1F49akUj1cky27kKb07tgFzI9U,2153
32
32
  sqlalchemy/dialects/mysql/aiomysql.py,sha256=-oMZnCqNsSki8mlQRTWIwiQPT1OVdZIuANkb90q8LAs,9999
33
33
  sqlalchemy/dialects/mysql/asyncmy.py,sha256=YpuuOh8VknEeqHqUXQGfQ3jhfO3Xb-vZv78Jq5cscJ0,10067
34
- sqlalchemy/dialects/mysql/base.py,sha256=KA7tvRxKUw0KwHwMth2rz-NWV0xMkVbYvPoBM9wrAFw,120850
34
+ sqlalchemy/dialects/mysql/base.py,sha256=1iN5wVw52gDRi5go-q6YsX8vCPwW-Mkd3ej3rrX2ai8,120957
35
35
  sqlalchemy/dialects/mysql/cymysql.py,sha256=eXT1ry0w_qRxjiO24M980c-8PZ9qSsbhqBHntjEiKB0,2300
36
36
  sqlalchemy/dialects/mysql/dml.py,sha256=HXJMAvimJsqvhj3UZO4vW_6LkF5RqaKbHvklAjor7yU,7645
37
37
  sqlalchemy/dialects/mysql/enumerated.py,sha256=ipEPPQqoXfFwcywNdcLlZCEzHBtnitHRah1Gn6nItcg,8448
@@ -48,10 +48,10 @@ sqlalchemy/dialects/mysql/reflection.py,sha256=3u34YwT1JJh3uThGZJZ3FKdnUcT7v08QB
48
48
  sqlalchemy/dialects/mysql/reserved_words.py,sha256=ucKX2p2c3UnMq2ayZuOHuf73eXhu7SKsOsTlIN1Q83I,9258
49
49
  sqlalchemy/dialects/mysql/types.py,sha256=L5cTCsMT1pTedszNEM3jSxFNZEMcHQLprYCZ0vmfsnA,24343
50
50
  sqlalchemy/dialects/oracle/__init__.py,sha256=p4-2gw7TT0bX_MoJXTGD4i8WHctYsK9kCRbkpzykBrc,1493
51
- sqlalchemy/dialects/oracle/base.py,sha256=-7b5iubFPxJyDRoLXlxj8rk8eBRN2_IdZlB2zzzrrbw,118246
52
- sqlalchemy/dialects/oracle/cx_oracle.py,sha256=t5yH4svVz7xoDSITF958blgZ01hbCUEWUKrAXwiCiAE,55566
51
+ sqlalchemy/dialects/oracle/base.py,sha256=cav9QxSLT75-JXhhFSneYT_y3coF6TmFkBa5fqQMrRI,119615
52
+ sqlalchemy/dialects/oracle/cx_oracle.py,sha256=QcbM3I6ixtEqTdTMjik8IASE43dAE9LUzs-2g_Q_J4w,55258
53
53
  sqlalchemy/dialects/oracle/dictionary.py,sha256=7WMrbPkqo8ZdGjaEZyQr-5f2pajSOF1OTGb8P97z8-g,19519
54
- sqlalchemy/dialects/oracle/oracledb.py,sha256=UFcZwrrk0pWfAp_SKJZ1B5rIQHtNhOvuu73_JaSnTbI,9487
54
+ sqlalchemy/dialects/oracle/oracledb.py,sha256=fZRKGqNIwW9LG4i8yDOXABrucbfzn_yC86Od-BJ3PcM,13619
55
55
  sqlalchemy/dialects/oracle/provision.py,sha256=O9ZpF4OG6Cx4mMzLRfZwhs8dZjrJETWR402n9c7726A,8304
56
56
  sqlalchemy/dialects/oracle/types.py,sha256=QK3hJvWzKnnCe3oD3rItwEEIwcoBze8qGg7VFOvVlIk,8231
57
57
  sqlalchemy/dialects/postgresql/__init__.py,sha256=wwnNAq4wDQzrlPRzDNB06ayuq3L2HNO99nzeEvq-YcU,3892
@@ -67,15 +67,15 @@ sqlalchemy/dialects/postgresql/named_types.py,sha256=3IV1ufo7zJjKmX4VtGDEnoXE6xE
67
67
  sqlalchemy/dialects/postgresql/operators.py,sha256=NsAaWun_tL3d_be0fs9YL6T4LPKK6crnmFxxIJHgyeY,2808
68
68
  sqlalchemy/dialects/postgresql/pg8000.py,sha256=3yoekiWSF-xnaWMqG76XrYPMqerg-42TdmfsW_ivK9E,18640
69
69
  sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=hY3NXEUHxTWD4umhd2aowNu3laC-61Q_qQ_pReyXTUM,9254
70
- sqlalchemy/dialects/postgresql/provision.py,sha256=yqyx-aDFO9l2YcL9f4T5HBP_Lnt5dHsMjpuXUG8mi7A,5762
70
+ sqlalchemy/dialects/postgresql/provision.py,sha256=t6TZj0XaWG9zrpCjNr0oJRjAC_WQzaNdp3kaKJIbS8I,5770
71
71
  sqlalchemy/dialects/postgresql/psycopg.py,sha256=ACkfuT87vUJEW4kJyUqDYTwlnl5u0FZFlDcvLzxNzFQ,23226
72
- sqlalchemy/dialects/postgresql/psycopg2.py,sha256=DbCB1-90O8YQDaIR67RtKOjzW3nvrdHoiwnVWYv_mX4,31605
72
+ sqlalchemy/dialects/postgresql/psycopg2.py,sha256=kwEnflz5bAqJcuO_20eYiCtha_a4m_tg5_lppdDnaeU,31998
73
73
  sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=M7wAYSL6Pvt-4nbfacAHGyyw4XMKJ_bQZ1tc1pBtIdg,1756
74
74
  sqlalchemy/dialects/postgresql/ranges.py,sha256=6CgV7qkxEMJ9AQsiibo_XBLJYzGh-2ZxpG83sRaesVY,32949
75
75
  sqlalchemy/dialects/postgresql/types.py,sha256=Jfxqw9JaKNOq29JRWBublywgb3lLMyzx8YZI7CXpS2s,7300
76
76
  sqlalchemy/dialects/sqlite/__init__.py,sha256=lp9DIggNn349M-7IYhUA8et8--e8FRExWD2V_r1LJk4,1182
77
77
  sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=g3qGV6jmiXabWyb3282g_Nmxtj1jThxGSe9C9yalb-U,12345
78
- sqlalchemy/dialects/sqlite/base.py,sha256=lUtigjn7NdPBq831zQsLcBwdwRJqdgKM_tUaDrMElOE,96794
78
+ sqlalchemy/dialects/sqlite/base.py,sha256=GmDZ7DRgXVXWjx5BKSZgGzKmYHokMtCINM0p8bDmbAc,97557
79
79
  sqlalchemy/dialects/sqlite/dml.py,sha256=9GE55WvwoktKy2fHeT-Wbc9xPHgsbh5oBfd_fckMH5Q,8443
80
80
  sqlalchemy/dialects/sqlite/json.py,sha256=Eoplbb_4dYlfrtmQaI8Xddd2suAIHA-IdbDQYM-LIhs,2777
81
81
  sqlalchemy/dialects/sqlite/provision.py,sha256=UCpmwxf4IWlrpb2eLHGbPTpCFVbdI_KAh2mKtjiLYao,5632
@@ -85,13 +85,13 @@ sqlalchemy/engine/__init__.py,sha256=Stb2oV6l8w65JvqEo6J4qtKoApcmOpXy3AAxQud4C1o
85
85
  sqlalchemy/engine/_py_processors.py,sha256=j9i_lcYYQOYJMcsDerPxI0sVFBIlX5sqoYMdMJlgWPI,3744
86
86
  sqlalchemy/engine/_py_row.py,sha256=wSqoUFzLOJ1f89kgDb6sJm9LUrF5LMFpXPcK1vUsKcs,3787
87
87
  sqlalchemy/engine/_py_util.py,sha256=f2DI3AN1kv6EplelowesCVpwS8hSXNufRkZoQmJtSH8,2484
88
- sqlalchemy/engine/base.py,sha256=0jDuJYb1tipD-N9chnMCvd25JySJQCm8CDCt_lobmv0,122898
88
+ sqlalchemy/engine/base.py,sha256=frWSMmt3dlentYH4QNN3cijdGzp8NbunColUZwWsWgI,122958
89
89
  sqlalchemy/engine/characteristics.py,sha256=N3kbvw_ApMh86wb5yAGnxtPYD4YRhYMWion1H_aVZBI,4765
90
90
  sqlalchemy/engine/create.py,sha256=mYJtOG2ZKM8sgyfjpGpamW15RDU7JXi5s6iibbJHMIs,33206
91
91
  sqlalchemy/engine/cursor.py,sha256=cFq61yrw76k-QR_xNUBWuL-Zeyb14ltG-6jo2Q2iuuw,76392
92
- sqlalchemy/engine/default.py,sha256=B3i9Ce3Jk64CtNaS1gnes4uCMhiQn2cMwnZh5RxR-aE,84137
92
+ sqlalchemy/engine/default.py,sha256=2wwKKdsagb3QTajRSEw8Hl-EnQ-LmRxy822xOGyenHc,84648
93
93
  sqlalchemy/engine/events.py,sha256=c0unNFFiHzTAvkUtXoJaxzMFMDwurBkHiiUhuN8qluc,37381
94
- sqlalchemy/engine/interfaces.py,sha256=n6G7VW5kaGyBlKdCkgaDs694tfzLPOxZeboDmVaJThg,112832
94
+ sqlalchemy/engine/interfaces.py,sha256=fcVHOmnMo7JZLHzgSKoK3QsdVHH7kJ_AmrDvwW9Ka3k,112936
95
95
  sqlalchemy/engine/mock.py,sha256=yvpxgFmRw5G4QsHeF-ZwQGHKES-HqQOucTxFtN1uzdk,4179
96
96
  sqlalchemy/engine/processors.py,sha256=XyfINKbo-2fjN-mW55YybvFyQMOil50_kVqsunahkNs,2379
97
97
  sqlalchemy/engine/reflection.py,sha256=FlT5kPpKm7Lah50GNt5XcnlJWojTL3LD_x0SoCF9kfY,75127
@@ -103,7 +103,7 @@ sqlalchemy/engine/util.py,sha256=bNirO8k1S8yOW61uNH-a9QrWtAJ9VGFgbiR0lk1lUQU,568
103
103
  sqlalchemy/event/__init__.py,sha256=KBrp622xojnC3FFquxa2JsMamwAbfkvzfv6Op0NKiYc,997
104
104
  sqlalchemy/event/api.py,sha256=DtDVgjKSorOfp9MGJ7fgMWrj4seC_hkwF4D8CW1RFZU,8226
105
105
  sqlalchemy/event/attr.py,sha256=X8QeHGK4ioSYht1vkhc11f606_mq_t91jMNIT314ubs,20751
106
- sqlalchemy/event/base.py,sha256=XeNX-y2X2rYZqxNEnylx-_UUTYpVc4TWjLWIGjx4Jkc,15161
106
+ sqlalchemy/event/base.py,sha256=270OShTD17-bSFUFnPtKdVnB0NFJZ2AouYPo1wT0aJw,15127
107
107
  sqlalchemy/event/legacy.py,sha256=teMPs00fO-4g8a_z2omcVKkYce5wj_1uvJO2n2MIeuo,8227
108
108
  sqlalchemy/event/registry.py,sha256=nfTSSyhjZZXc5wseWB4sXn-YibSc0LKX8mg17XlWmAo,10835
109
109
  sqlalchemy/ext/__init__.py,sha256=S1fGKAbycnQDV01gs-JWGaFQ9GCD4QHwKcU2wnugg_o,322
@@ -133,23 +133,23 @@ sqlalchemy/ext/mypy/decl_class.py,sha256=1vVJRII2apnLTUbc5HkJS6Z2GueaUv_eKvhbqh7
133
133
  sqlalchemy/ext/mypy/infer.py,sha256=KVnmLFEVS33Al8pUKI7MJbJQu3KeveBUMl78EluBORw,19369
134
134
  sqlalchemy/ext/mypy/names.py,sha256=Q3ef8XQBgVm9WUwlItqlYCXDNi_kbV5DdLEgbtEMEI8,10479
135
135
  sqlalchemy/ext/mypy/plugin.py,sha256=74ML8LI9xar0V86oCxnPFv5FQGEEfUzK64vOay4BKFs,9750
136
- sqlalchemy/ext/mypy/util.py,sha256=1zuDQG8ezmF-XhJmAQU_lcBHiD--sL-lq20clg8t4lE,9448
136
+ sqlalchemy/ext/mypy/util.py,sha256=DKRaurkXHI2lAMAAcEO5GLXbX_m2Xqy7l_juh8Byf5U,9960
137
137
  sqlalchemy/future/__init__.py,sha256=q2mw-gxk_xoxJLEvRoyMha3vO1xSRHrslcExOHZwmPA,512
138
138
  sqlalchemy/future/engine.py,sha256=AgIw6vMsef8W6tynOTkxsjd6o_OQDwGjLdbpoMD8ue8,495
139
139
  sqlalchemy/orm/__init__.py,sha256=ZYys5nL3RFUDCMOLFDBrRI52F6er3S1U1OY9TeORuKs,8463
140
- sqlalchemy/orm/_orm_constructors.py,sha256=lVn8IZzU_Yq88you3qC8cnm4D1V9Wsf_LeEVTMX-QGc,100158
140
+ sqlalchemy/orm/_orm_constructors.py,sha256=c4RMiYKIXzOTjuPIBbyRIzpizYjUBm2sd7k0n1vqb2o,100717
141
141
  sqlalchemy/orm/_typing.py,sha256=DVBfpHmDVK4x1zxaGJPY2GoTrAsyR6uexv20Lzf1afc,4973
142
- sqlalchemy/orm/attributes.py,sha256=wGpyY9aIxWRkL3y6qlbUgIW78rGA4X38ZhOaWI9S818,92535
142
+ sqlalchemy/orm/attributes.py,sha256=lorOHBJvJJYndOuafWJhHBbQ1pR6FAyimhqz-mErBRQ,92534
143
143
  sqlalchemy/orm/base.py,sha256=re6A8ooMxLyfCAeQfhBwwxeJQkiH7EtzzOZIVIiTPlw,27466
144
- sqlalchemy/orm/bulk_persistence.py,sha256=wU204OQK-V6rJfpc3HPeMAA1X9vZg9nSNpI1zKuZtcY,70086
144
+ sqlalchemy/orm/bulk_persistence.py,sha256=MfFALcRkE3eKwxkntVM1ZcUhOphUFwAr1Fc21qJoobo,71403
145
145
  sqlalchemy/orm/clsregistry.py,sha256=29LyYiuj0qbebOpgW6DbBPNB2ikTweFQar1byCst7I0,17958
146
- sqlalchemy/orm/collections.py,sha256=jpMsJGVixmrW9kfT8wevm9kpatKRqyDLcqWd7CjKPxE,52179
146
+ sqlalchemy/orm/collections.py,sha256=WEKuUCRgLhDhJEIBhZ21UrE0pBOyRm2zxD20GvbgA9g,52243
147
147
  sqlalchemy/orm/context.py,sha256=pFFc-1ZjaV3aQMAO27UIh0W6NyLc30n2IbuWNprMtS8,112445
148
148
  sqlalchemy/orm/decl_api.py,sha256=_WPKQ_vSE5k2TLtNmkaxxYmvbhZvkRMrrvCeDxdqDQE,63998
149
149
  sqlalchemy/orm/decl_base.py,sha256=oeL7xrty2J81FyDx03dNe02BtZ-R6iYpum-BoA1rhik,82822
150
150
  sqlalchemy/orm/dependency.py,sha256=hgjksUWhgbmgHK5GdJdiDCBgDAIGQXIrY-Tj79tbL2k,47631
151
- sqlalchemy/orm/descriptor_props.py,sha256=pKtpP7H1LB_YuHRVrEYpfFZybEnUUdPwQXxduYFe2hA,37180
152
- sqlalchemy/orm/dynamic.py,sha256=jksBDCOsm6EBMVParcNGuMeaAv12hX4IzouKspC-HPA,9786
151
+ sqlalchemy/orm/descriptor_props.py,sha256=dR_h4Gvdtpcdp4sj_ZOR4P5Nng2J2vhsvFHouRLlntc,37244
152
+ sqlalchemy/orm/dynamic.py,sha256=rWAZ-nfAkREuNjt8e_FRdqYrvHDdbODn1CcfyP8Y18k,9816
153
153
  sqlalchemy/orm/evaluator.py,sha256=q292K5vdpP69G7Z9y1RqI5GFAk2diUPwnsXE8De_Wgw,11925
154
154
  sqlalchemy/orm/events.py,sha256=0lxP-EluVWSUr07ny2nsuQ8QhrDu9Qc4ON6QRUhuJnA,127703
155
155
  sqlalchemy/orm/exc.py,sha256=IP40P-wOeXhkYk0YizuTC3wqm6W9cPTaQU08f5MMaQ0,7413
@@ -157,22 +157,22 @@ sqlalchemy/orm/identity.py,sha256=jHdCxCpCyda_8mFOfGmN_Pr0XZdKiU-2hFZshlNxbHs,92
157
157
  sqlalchemy/orm/instrumentation.py,sha256=M-kZmkUvHUxtf-0mCA8RIM5QmMH1hWlYR_pKMwaidjA,24321
158
158
  sqlalchemy/orm/interfaces.py,sha256=Hmf1BjbfOarZRgMlruqghR7cgH2xyugA9v5t0x-a-wU,48502
159
159
  sqlalchemy/orm/loading.py,sha256=9RacpzFOWbuKgPRWHFmyIvD4fYCLAnkpwBFASyQ2CoI,58277
160
- sqlalchemy/orm/mapped_collection.py,sha256=3cneB1dfPTLrsTvKoo9_oCY2xtq4UAHfe5WSXPyqIS4,19690
160
+ sqlalchemy/orm/mapped_collection.py,sha256=zK3d3iozORzDruBUrAmkVC0RR3Orj5szk-TSQ24xzIU,19682
161
161
  sqlalchemy/orm/mapper.py,sha256=bfoRzNKKnjF-CDvr2Df7HZC9TepvtuQ49LRz_fW7DGQ,171088
162
162
  sqlalchemy/orm/path_registry.py,sha256=sJZMv_WPqUpHfQtKWaX3WYFeKBcNJ8C3wOM2mkBGkTE,25920
163
163
  sqlalchemy/orm/persistence.py,sha256=dzyB2JOXNwQgaCbN8kh0sEz00WFePr48qf8NWVCUZH8,61701
164
164
  sqlalchemy/orm/properties.py,sha256=eDPFzxYUgdM3uWjHywnb1XW-i0tVKKyx7A2MCD31GQU,29306
165
- sqlalchemy/orm/query.py,sha256=qKuFTUlbGVjs84AQ7APBY0PJhrzc2JJ1upeI658MV_o,117596
165
+ sqlalchemy/orm/query.py,sha256=woZDL-vAvu_CWQUgxf7geh7Bkl1gUE2zmrdF5UmTrFk,117630
166
166
  sqlalchemy/orm/relationships.py,sha256=dS5SY0v1MiD7iCNnAQlHaI6prUQhL5EkXT7ijc8FR8E,128644
167
167
  sqlalchemy/orm/scoping.py,sha256=rJVc7_Lic4V00HZ-UvYFWkVpXqdrMayRmIs4fIwH1UA,78688
168
- sqlalchemy/orm/session.py,sha256=aBBbHL08H-diS6UxGbySgitga6FCRWdN-EcpP3tPC4M,195261
168
+ sqlalchemy/orm/session.py,sha256=CZJTQ-wPwIy0c3AMFxgJnBgaft6eEf4JzcCLcaaCSjg,195979
169
169
  sqlalchemy/orm/state.py,sha256=327-F4TG29s6mLC8oWRiO2PuvYIUZzY1MqUPjtUy7M4,37670
170
170
  sqlalchemy/orm/state_changes.py,sha256=qKYg7NxwrDkuUY3EPygAztym6oAVUFcP2wXn7QD3Mz4,6815
171
- sqlalchemy/orm/strategies.py,sha256=3fYRUlO61WKgxH2ZSn1kwkJyTRHZk7b9vlfCR4i1kXY,114994
171
+ sqlalchemy/orm/strategies.py,sha256=Sd6IKV_ya_CBKzebwazRrWWabvZ0PqariUB7KKUIUrc,115275
172
172
  sqlalchemy/orm/strategy_options.py,sha256=-n44NV8QX-3uWjhFMA_R_7vYy-d57gJY9snB9JeOj-w,85341
173
173
  sqlalchemy/orm/sync.py,sha256=g7iZfSge1HgxMk9SKRgUgtHEbpbZ1kP_CBqOIdTOXqc,5779
174
174
  sqlalchemy/orm/unitofwork.py,sha256=fiVaqcymbDDHRa1NjS90N9Z466nd5pkJOEi1dHO6QLY,27033
175
- sqlalchemy/orm/util.py,sha256=JdroiJ788zPjrNdLYae_bj0hsxzEDJjLbpUMwqonLCU,80728
175
+ sqlalchemy/orm/util.py,sha256=u7Wd8Wc2V0Qu5EBTrt2taB1Clhnr2a8aK6LC9eIeKZw,80734
176
176
  sqlalchemy/orm/writeonly.py,sha256=SYu2sAaHZONk2pW4PmtE871LG-O0P_bjidvKzY1H_zI,22305
177
177
  sqlalchemy/pool/__init__.py,sha256=qiDdq4r4FFAoDrK6ncugF_i6usi_X1LeJt-CuBHey0s,1804
178
178
  sqlalchemy/pool/base.py,sha256=WF4az4ZKuzQGuKeSJeyexaYjmWZUvYdC6KIi8zTGodw,52236
@@ -186,30 +186,30 @@ sqlalchemy/sql/_py_util.py,sha256=hiM9ePbRSGs60bAMxPFuJCIC_p9SQ1VzqXGiPchiYwE,21
186
186
  sqlalchemy/sql/_selectable_constructors.py,sha256=wjE6HrLm9cR7bxvZXT8sFLUqT6t_J9G1XyQCnYmBDl0,18780
187
187
  sqlalchemy/sql/_typing.py,sha256=oqwrYHVMtK-AuKGH9c4SgfiOEJUt5vjkzSEzzscMHkM,12771
188
188
  sqlalchemy/sql/annotation.py,sha256=aqbbVz9kfbCT3_66CZ9GEirVN197Cukoqt8rq48FgkQ,18245
189
- sqlalchemy/sql/base.py,sha256=Lg7iHywXmB7XuRMar45XSM4KayChGhfj1c8E7nWUJdo,73899
189
+ sqlalchemy/sql/base.py,sha256=M1b-Tg49ikUW2mnZv0aI38oASG6dgeo4jBNWDgJgAg8,73925
190
190
  sqlalchemy/sql/cache_key.py,sha256=0Db8mR8IrpBgdzXs4TGTt98LOpL3c7KABd72MAPKUQQ,33668
191
- sqlalchemy/sql/coercions.py,sha256=1xzN_9U5BCJGgokdc5iYj5o2cMAfEEZkr1Oa9Q-JYj8,40493
192
- sqlalchemy/sql/compiler.py,sha256=e5XWUmeZnE3O8r7fndfmXjAze3qlFZY223BHqrso0AY,274647
193
- sqlalchemy/sql/crud.py,sha256=g9xcol2KRGjZi1qsb2-bVz8zgVy_53gfMtJcnNO2vyQ,56521
191
+ sqlalchemy/sql/coercions.py,sha256=KjrVc2ks6cx_o6-_Zpu6uPuNGjJy2xvFzXy8z5oshQg,40628
192
+ sqlalchemy/sql/compiler.py,sha256=hrTptbOKIgVIHapywj4Lk5OMwpXvHS-KGg3odFwlo-I,274687
193
+ sqlalchemy/sql/crud.py,sha256=HBX4QPtW_PYYJmIKfNr-wE8IdEr963N24WXzFBUZOo0,56514
194
194
  sqlalchemy/sql/ddl.py,sha256=CIqMilCKfuQnF0lrZsQdTxgrbXqcTauKr0Ojzj77PFQ,45602
195
195
  sqlalchemy/sql/default_comparator.py,sha256=utXWsZVGEjflhFfCT4ywa6RnhORc1Rryo87Hga71Rps,16707
196
196
  sqlalchemy/sql/dml.py,sha256=pn0Lm1ofC5qVZzwGWFW73lPCiNba8OsTeemurJgwRyg,65614
197
- sqlalchemy/sql/elements.py,sha256=XpfBuu4sh5W5lHHUZN95DTl4FM4MM_zs0GKqHZvdXXM,176146
197
+ sqlalchemy/sql/elements.py,sha256=Vmn_ux-fwpKBoMyQPMxIAj8QrLZVDD9iCh6odPlfzbA,176378
198
198
  sqlalchemy/sql/events.py,sha256=iC_Q1Htm1Aobt5tOYxWfHHqNpoytrULORmUKcusH_-E,18290
199
199
  sqlalchemy/sql/expression.py,sha256=VMX-dLpsZYnVRJpYNDozDUgaj7iQ0HuewUKVefD57PE,7586
200
200
  sqlalchemy/sql/functions.py,sha256=kMMYplvuIHFAPwxBI03SizwaLcYEHzysecWk-R1V-JM,63762
201
201
  sqlalchemy/sql/lambdas.py,sha256=DP0Qz7Ypo8QhzMwygGHYgRhwJMx-rNezO1euouH3iYU,49292
202
202
  sqlalchemy/sql/naming.py,sha256=ZHs1qSV3ou8TYmZ92uvU3sfdklUQlIz4uhe330n05SU,6858
203
- sqlalchemy/sql/operators.py,sha256=r4oQp4h5zTMFFOpiFNV56joIK-QIjJCobatsmaZ-724,75935
203
+ sqlalchemy/sql/operators.py,sha256=himArRqBzrljob3Zfhi_ZS-Jleg1u6YFp0g3d7Co6IM,76106
204
204
  sqlalchemy/sql/roles.py,sha256=pOsVn_OZD7mF2gJByHf24Rjopt0_Hu3dUCEOK5t4KS8,7662
205
- sqlalchemy/sql/schema.py,sha256=-5QrCcIJNbs1Et6oRzfpTDvhP4R3KbRJkGiYuJExayI,229767
206
- sqlalchemy/sql/selectable.py,sha256=gAOLh2hq0xRVqAaO6ctQr9cgLgdz40iCEhCJ_Gp49cE,233587
207
- sqlalchemy/sql/sqltypes.py,sha256=d3xNVCDPV2MaPInKWvIpLDGS8NwGFLP614_dWws3B_U,126808
208
- sqlalchemy/sql/traversals.py,sha256=NFgJrVJzInO3HrnG90CklxrDXhFydZohPs2vRJkh3Bo,33589
209
- sqlalchemy/sql/type_api.py,sha256=CJAvRix_rRoOsE77sH4BqeGX0lIdtk8dX-StjGx3mUo,83208
205
+ sqlalchemy/sql/schema.py,sha256=XjSlSvJf6Ym8Y5Jt2c_TTAQ7OnOrnk9GU-RiJh2-yW0,229588
206
+ sqlalchemy/sql/selectable.py,sha256=iGTCMsfxmVjPcD3aGJTpHSpF-ckXEJyn29M6rD5UJww,234550
207
+ sqlalchemy/sql/sqltypes.py,sha256=NJnsB-ZC-oyrVBQzhV_sbRHlqFShKAU2FEX65fBj8Vg,126941
208
+ sqlalchemy/sql/traversals.py,sha256=3ScTC1fh1-y8Y478h_2Azmd2xdQdWPWkDve4YgrwMf8,33664
209
+ sqlalchemy/sql/type_api.py,sha256=q_FieFRALHiRkhy5Bj-cVgFHa7DXF1dP23FaRRYKeho,83717
210
210
  sqlalchemy/sql/util.py,sha256=qGHQF-tPCj-m1FBerzT7weCanGcXU7dK5m-W7NHio-4,48077
211
211
  sqlalchemy/sql/visitors.py,sha256=71wdVvhhZL4nJvVwFAs6ssaW-qZgNRSmKjpAcOzF_TA,36317
212
- sqlalchemy/testing/__init__.py,sha256=VsrEHrORpAF5n7Vfl43YQgABh6EP1xBx_gHxs7pSXeE,3126
212
+ sqlalchemy/testing/__init__.py,sha256=zgitAYzsCWT_U48ZiifXHHLJFo8nZBYmI-5TueA4_lE,3160
213
213
  sqlalchemy/testing/assertions.py,sha256=gL0rA7CCZJbcVgvWOPV91tTZTRwQc1_Ta0-ykBn83Ew,31439
214
214
  sqlalchemy/testing/assertsql.py,sha256=IgQG7l94WaiRP8nTbilJh1ZHZl125g7GPq-S5kmQZN0,16817
215
215
  sqlalchemy/testing/asyncio.py,sha256=kM8uuOqDBagZF0r9xvGmsiirUVLUQ_KBzjUFU67W-b8,3830
@@ -220,15 +220,15 @@ sqlalchemy/testing/exclusions.py,sha256=T8B01hmm8WVs-EKcUOQRzabahPqblWJfOidi6bHJ
220
220
  sqlalchemy/testing/pickleable.py,sha256=U9mIqk-zaxq9Xfy7HErP7UrKgTov-A3QFnhZh-NiOjI,2833
221
221
  sqlalchemy/testing/profiling.py,sha256=PbuPhRFbauFilUONeY3tV_Y_5lBkD7iCa8VVyH2Sk9Y,10148
222
222
  sqlalchemy/testing/provision.py,sha256=zXsw2D2Xpmw_chmYLsE1GXQqKQ-so3V8xU_joTcKan0,14619
223
- sqlalchemy/testing/requirements.py,sha256=N9pSj7z2wVMkBif-DQfPVa_cl9k6p9g_J5FY1OsWtrY,51817
223
+ sqlalchemy/testing/requirements.py,sha256=9hJRdF7ePsuor5WT1UPgEV2nlA7pjlr92pVPINmwO9g,52518
224
224
  sqlalchemy/testing/schema.py,sha256=lr4GkGrGwagaHMuSGzWdzkMaj3HnS7dgfLLWfxt__-U,6513
225
- sqlalchemy/testing/util.py,sha256=BFiSp3CEX95Dr-vv4l_7ZRu5vjZi9hjjnp-JKNfuS5E,14080
225
+ sqlalchemy/testing/util.py,sha256=qldXKw8gRJ4I2x3uXsBssYMqwatmcMFMTOveRQCmfDU,14469
226
226
  sqlalchemy/testing/warnings.py,sha256=fJ-QJUY2zY2PPxZJKv9medW-BKKbCNbA4Ns_V3YwFXM,1546
227
227
  sqlalchemy/testing/fixtures/__init__.py,sha256=dMClrIoxqlYIFpk2ia4RZpkbfxsS_3EBigr9QsPJ66g,1198
228
228
  sqlalchemy/testing/fixtures/base.py,sha256=9r_J2ksiTzClpUxW0TczICHrWR7Ny8PV8IsBz6TsGFI,12256
229
229
  sqlalchemy/testing/fixtures/mypy.py,sha256=gdxiwNFIzDlNGSOdvM3gbwDceVCC9t8oM5kKbwyhGBk,11973
230
230
  sqlalchemy/testing/fixtures/orm.py,sha256=8EFbnaBbXX_Bf4FcCzBUaAHgyVpsLGBHX16SGLqE3Fg,6095
231
- sqlalchemy/testing/fixtures/sql.py,sha256=TE5q2BSOc_Vq1TPaLnj1F9ZA_YiQHlqyvUtGId9bGr0,15774
231
+ sqlalchemy/testing/fixtures/sql.py,sha256=KZMjco9_3dsuspmkew5Ejp88Wlr9PsSBB1qeJGFxQAk,15900
232
232
  sqlalchemy/testing/plugin/__init__.py,sha256=79F--BIY_NTBzVRIlJGgAY5LNJJ3cD19XvrAo4X0W9A,247
233
233
  sqlalchemy/testing/plugin/bootstrap.py,sha256=oYScMbEW4pCnWlPEAq1insFruCXFQeEVBwo__i4McpU,1685
234
234
  sqlalchemy/testing/plugin/plugin_base.py,sha256=BgNzWNEmgpK4CwhyblQQKnH-7FDKVi_Uul5vw8fFjBU,21578
@@ -240,11 +240,11 @@ sqlalchemy/testing/suite/test_deprecations.py,sha256=BcJxZTcjYqeOAENVElCg3hVvU6f
240
240
  sqlalchemy/testing/suite/test_dialect.py,sha256=EH4ZQWbnGdtjmx5amZtTyhYmrkXJCvW1SQoLahoE7uk,22923
241
241
  sqlalchemy/testing/suite/test_insert.py,sha256=9azifj6-OCD7s8h_tAO1uPw100ibQv8YoKc_VA3hn3c,18824
242
242
  sqlalchemy/testing/suite/test_reflection.py,sha256=tJSbJFg5fw0sSUv3I_FPmhN7rWWeJtq3YyxmylWJUlM,106466
243
- sqlalchemy/testing/suite/test_results.py,sha256=NQ23m8FDVd0ub751jN4PswGoAhk5nrqvjHvpYULZXnc,15937
243
+ sqlalchemy/testing/suite/test_results.py,sha256=X720GafdA4p75SOGS93j-dXkt6QDEnnJbU2bh18VCcg,16914
244
244
  sqlalchemy/testing/suite/test_rowcount.py,sha256=3KDTlRgjpQ1OVfp__1cv8Hvq4CsDKzmrhJQ_WIJWoJg,7900
245
- sqlalchemy/testing/suite/test_select.py,sha256=FvMFYQW9IJpDWGYZiJk46is6YrtmdSghBdTjZCG8T0Y,58574
245
+ sqlalchemy/testing/suite/test_select.py,sha256=ulRZQJlzkwwcewEyisuBEXVWFR0Wshz9MEDxYYiYLwQ,61732
246
246
  sqlalchemy/testing/suite/test_sequence.py,sha256=66bCoy4xo99GBSaX6Hxb88foANAykLGRz1YEKbvpfuA,9923
247
- sqlalchemy/testing/suite/test_types.py,sha256=rFmTOg6XuMch9L2-XthfLJRCTTwpZbMfrNss2g09gmc,65677
247
+ sqlalchemy/testing/suite/test_types.py,sha256=K4MGHvnTtgqeksoQOBCZRVQYC7HoYO6Z6rVt5vj2t9o,67805
248
248
  sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=c3_eIxLyORuSOhNDP0jWKxPyUf3SwMFpdalxtquwqlM,6141
249
249
  sqlalchemy/testing/suite/test_update_delete.py,sha256=yTiM2unnfOK9rK8ZkqeTTU_MkT-RsKFLmdYliniZfAY,3994
250
250
  sqlalchemy/util/__init__.py,sha256=B3bedg-LSQEscwqgmYYU-VENUX8_zAE3q9vb7tkfJNY,8277
@@ -252,17 +252,17 @@ sqlalchemy/util/_collections.py,sha256=aZoSAVOXnHBoYEsxDOi0O9odg9wqLbGb7PGjaWQKi
252
252
  sqlalchemy/util/_concurrency_py3k.py,sha256=zb0Bow2Y_QjTdaACEviBEEaFvqDuVvpJfmwCjaw8xNE,9170
253
253
  sqlalchemy/util/_has_cy.py,sha256=wCQmeSjT3jaH_oxfCEtGk-1g0gbSpt5MCK5UcWdMWqk,1247
254
254
  sqlalchemy/util/_py_collections.py,sha256=U6L5AoyLdgSv7cdqB4xxQbw1rpeJjyOZVXffgxgga8I,16714
255
- sqlalchemy/util/compat.py,sha256=R6bpBydldtbr6h7oJePihQxFb7jKiI-YDsK465MSOzk,8714
255
+ sqlalchemy/util/compat.py,sha256=fJWqZVkW7qPY2l0DxK-7fHKjyp7b-wa-5wOlmuZlick,8724
256
256
  sqlalchemy/util/concurrency.py,sha256=9lT_cMoO1fZNdY8QTUZ22oeSf-L5I-79Ke7chcBNPA0,3304
257
257
  sqlalchemy/util/deprecations.py,sha256=YBwvvYhSB8LhasIZRKvg_-WNoVhPUcaYI1ZrnjDn868,11971
258
- sqlalchemy/util/langhelpers.py,sha256=5XpX5X6sqKtZ6B07WmlP2oOCbUn7CptBNVTe4LR7jqA,64957
258
+ sqlalchemy/util/langhelpers.py,sha256=uIK3szZuq9aMnO-vEpSlNekNWv4I-E391e56bkTnUm0,65090
259
259
  sqlalchemy/util/preloaded.py,sha256=az7NmLJLsqs0mtM9uBkIu10-841RYDq8wOyqJ7xXvqE,5904
260
260
  sqlalchemy/util/queue.py,sha256=CaeSEaYZ57YwtmLdNdOIjT5PK_LCuwMFiO0mpp39ybM,10185
261
261
  sqlalchemy/util/tool_support.py,sha256=9braZyidaiNrZVsWtGmkSmus50-byhuYrlAqvhjcmnA,6135
262
262
  sqlalchemy/util/topological.py,sha256=N3M3Le7KzGHCmqPGg0ZBqixTDGwmFLhOZvBtc4rHL_g,3458
263
263
  sqlalchemy/util/typing.py,sha256=UctfgugSTnFJgZraikXJbB-5RoV7oyccZmbf2NeRfoA,16671
264
- SQLAlchemy-2.0.31.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
- SQLAlchemy-2.0.31.dist-info/METADATA,sha256=Fv-yTpqMYGTC6PU1Jc8Ka1Evr74lqaBGNQCG7ALeO3g,9632
266
- SQLAlchemy-2.0.31.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
267
- SQLAlchemy-2.0.31.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
- SQLAlchemy-2.0.31.dist-info/RECORD,,
264
+ SQLAlchemy-2.0.32.dist-info/LICENSE,sha256=PA9Zq4h9BB3mpOUv_j6e212VIt6Qn66abNettue-MpM,1100
265
+ SQLAlchemy-2.0.32.dist-info/METADATA,sha256=hG6dXB5GSsBurmqvonmwwtBvJlerDWuK-3ERzPExHQU,9581
266
+ SQLAlchemy-2.0.32.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
267
+ SQLAlchemy-2.0.32.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
268
+ SQLAlchemy-2.0.32.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
sqlalchemy/__init__.py CHANGED
@@ -269,7 +269,7 @@ from .types import Uuid as Uuid
269
269
  from .types import VARBINARY as VARBINARY
270
270
  from .types import VARCHAR as VARCHAR
271
271
 
272
- __version__ = "2.0.31"
272
+ __version__ = "2.0.32"
273
273
 
274
274
 
275
275
  def __go(lcls: Any) -> None:
@@ -36,7 +36,8 @@ class AsyncAdapt_dbapi_cursor:
36
36
  cursor = self._connection.cursor()
37
37
  self._cursor = self._aenter_cursor(cursor)
38
38
 
39
- self._rows = collections.deque()
39
+ if not self.server_side:
40
+ self._rows = collections.deque()
40
41
 
41
42
  def _aenter_cursor(self, cursor):
42
43
  return self.await_(cursor.__aenter__())
@@ -149,6 +150,14 @@ class AsyncAdapt_dbapi_ss_cursor(AsyncAdapt_dbapi_cursor):
149
150
  def fetchall(self):
150
151
  return self.await_(self._cursor.fetchall())
151
152
 
153
+ def __iter__(self):
154
+ iterator = self._cursor.__aiter__()
155
+ while True:
156
+ try:
157
+ yield self.await_(iterator.__anext__())
158
+ except StopAsyncIteration:
159
+ break
160
+
152
161
 
153
162
  class AsyncAdapt_dbapi_connection(AdaptedConnection):
154
163
  _cursor_cls = AsyncAdapt_dbapi_cursor
@@ -1988,6 +1988,10 @@ class MSSQLCompiler(compiler.SQLCompiler):
1988
1988
  self.tablealiases = {}
1989
1989
  super().__init__(*args, **kwargs)
1990
1990
 
1991
+ def _format_frame_clause(self, range_, **kw):
1992
+ kw["literal_execute"] = True
1993
+ return super()._format_frame_clause(range_, **kw)
1994
+
1991
1995
  def _with_legacy_schema_aliasing(fn):
1992
1996
  def decorate(self, *arg, **kw):
1993
1997
  if self.dialect.legacy_schema_aliasing:
@@ -2380,6 +2380,8 @@ class MySQLTypeCompiler(compiler.GenericTypeCompiler):
2380
2380
  def _visit_enumerated_values(self, name, type_, enumerated_values):
2381
2381
  quoted_enums = []
2382
2382
  for e in enumerated_values:
2383
+ if self.dialect.identifier_preparer._double_percents:
2384
+ e = e.replace("%", "%%")
2383
2385
  quoted_enums.append("'%s'" % e.replace("'", "''"))
2384
2386
  return self._extend_string(
2385
2387
  type_, {}, "%s(%s)" % (name, ",".join(quoted_enums))
@@ -326,7 +326,6 @@ returned as well.
326
326
  on parity with other backends.
327
327
 
328
328
 
329
-
330
329
  ON UPDATE CASCADE
331
330
  -----------------
332
331
 
@@ -467,7 +466,7 @@ is reflected and the type is reported as ``DATE``, the time-supporting
467
466
  .. _oracle_table_options:
468
467
 
469
468
  Oracle Table Options
470
- -------------------------
469
+ --------------------
471
470
 
472
471
  The CREATE TABLE phrase supports the following options with Oracle
473
472
  in conjunction with the :class:`_schema.Table` construct:
@@ -1244,6 +1243,31 @@ class OracleCompiler(compiler.SQLCompiler):
1244
1243
  def visit_aggregate_strings_func(self, fn, **kw):
1245
1244
  return "LISTAGG%s" % self.function_argspec(fn, **kw)
1246
1245
 
1246
+ def _visit_bitwise(self, binary, fn_name, custom_right=None, **kw):
1247
+ left = self.process(binary.left, **kw)
1248
+ right = self.process(
1249
+ custom_right if custom_right is not None else binary.right, **kw
1250
+ )
1251
+ return f"{fn_name}({left}, {right})"
1252
+
1253
+ def visit_bitwise_xor_op_binary(self, binary, operator, **kw):
1254
+ return self._visit_bitwise(binary, "BITXOR", **kw)
1255
+
1256
+ def visit_bitwise_or_op_binary(self, binary, operator, **kw):
1257
+ return self._visit_bitwise(binary, "BITOR", **kw)
1258
+
1259
+ def visit_bitwise_and_op_binary(self, binary, operator, **kw):
1260
+ return self._visit_bitwise(binary, "BITAND", **kw)
1261
+
1262
+ def visit_bitwise_rshift_op_binary(self, binary, operator, **kw):
1263
+ raise exc.CompileError("Cannot compile bitwise_rshift in oracle")
1264
+
1265
+ def visit_bitwise_lshift_op_binary(self, binary, operator, **kw):
1266
+ raise exc.CompileError("Cannot compile bitwise_lshift in oracle")
1267
+
1268
+ def visit_bitwise_not_op_unary_operator(self, element, operator, **kw):
1269
+ raise exc.CompileError("Cannot compile bitwise_not in oracle")
1270
+
1247
1271
 
1248
1272
  class OracleDDLCompiler(compiler.DDLCompiler):
1249
1273
  def define_constraint_cascades(self, constraint):
@@ -2036,8 +2060,16 @@ class OracleDialect(default.DefaultDialect):
2036
2060
  ):
2037
2061
  query = select(
2038
2062
  dictionary.all_tables.c.table_name,
2039
- dictionary.all_tables.c.compression,
2040
- dictionary.all_tables.c.compress_for,
2063
+ (
2064
+ dictionary.all_tables.c.compression
2065
+ if self._supports_table_compression
2066
+ else sql.null().label("compression")
2067
+ ),
2068
+ (
2069
+ dictionary.all_tables.c.compress_for
2070
+ if self._supports_table_compress_for
2071
+ else sql.null().label("compress_for")
2072
+ ),
2041
2073
  ).where(dictionary.all_tables.c.owner == owner)
2042
2074
  if has_filter_names:
2043
2075
  query = query.where(
@@ -377,14 +377,12 @@ buffered objects with a ``read()`` method, the parameter
377
377
  ``auto_convert_lobs=False`` may be passed to :func:`_sa.create_engine`,
378
378
  which takes place only engine-wide.
379
379
 
380
- Two Phase Transactions Not Supported
381
- -------------------------------------
380
+ Two Phase Transactions Not Supported (use oracledb)
381
+ ---------------------------------------------------
382
382
 
383
- Two phase transactions are **not supported** under cx_Oracle due to poor
384
- driver support. As of cx_Oracle 6.0b1, the interface for
385
- two phase transactions has been changed to be more of a direct pass-through
386
- to the underlying OCI layer with less automation. The additional logic
387
- to support this system is not implemented in SQLAlchemy.
383
+ Two phase transactions are **not supported** under cx_Oracle due to poor driver
384
+ support. The newer :ref:`oracledb` dialect however **does** support two phase
385
+ transactions and should be preferred.
388
386
 
389
387
  .. _cx_oracle_numeric:
390
388
 
@@ -1423,13 +1421,6 @@ class OracleDialect_cx_oracle(OracleDialect):
1423
1421
  return False
1424
1422
 
1425
1423
  def create_xid(self):
1426
- """create a two-phase transaction ID.
1427
-
1428
- this id will be passed to do_begin_twophase(), do_rollback_twophase(),
1429
- do_commit_twophase(). its format is unspecified.
1430
-
1431
- """
1432
-
1433
1424
  id_ = random.randint(0, 2**128)
1434
1425
  return (0x1234, "%032x" % id_, "%032x" % 9)
1435
1426