plain.postgres 0.110.0__tar.gz → 0.110.1__tar.gz

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 (222) hide show
  1. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/PKG-INFO +1 -1
  2. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/CHANGELOG.md +10 -0
  3. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/compiler.py +7 -2
  4. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/pyproject.toml +1 -1
  5. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/.gitignore +0 -0
  6. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/CLAUDE.md +0 -0
  7. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/LICENSE +0 -0
  8. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/README.md +0 -0
  9. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/README.md +0 -0
  10. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/__init__.py +0 -0
  11. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/adapters.py +0 -0
  12. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/agents/.claude/rules/plain-postgres.md +0 -0
  13. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/agents/.claude/skills/plain-postgres-doctor/SKILL.md +0 -0
  14. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/aggregates.py +0 -0
  15. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/base.py +0 -0
  16. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/__init__.py +0 -0
  17. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/converge.py +0 -0
  18. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/core.py +0 -0
  19. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/decorators.py +0 -0
  20. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/diagnose.py +0 -0
  21. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/migrations.py +0 -0
  22. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/schema.py +0 -0
  23. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/cli/sync.py +0 -0
  24. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/config.py +0 -0
  25. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/connection.py +0 -0
  26. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/constants.py +0 -0
  27. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/constraints.py +0 -0
  28. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/convergence/__init__.py +0 -0
  29. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/convergence/analysis.py +0 -0
  30. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/convergence/fixes.py +0 -0
  31. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/convergence/planning.py +0 -0
  32. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/database_url.py +0 -0
  33. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/db.py +0 -0
  34. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/ddl.py +0 -0
  35. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/default_settings.py +0 -0
  36. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/deletion.py +0 -0
  37. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/dialect.py +0 -0
  38. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/entrypoints.py +0 -0
  39. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/enums.py +0 -0
  40. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/exceptions.py +0 -0
  41. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/expressions.py +0 -0
  42. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/__init__.py +0 -0
  43. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/base.py +0 -0
  44. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/binary.py +0 -0
  45. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/boolean.py +0 -0
  46. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/duration.py +0 -0
  47. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/encrypted.py +0 -0
  48. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/json.py +0 -0
  49. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/mixins.py +0 -0
  50. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/network.py +0 -0
  51. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/numeric.py +0 -0
  52. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/primary_key.py +0 -0
  53. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/related.py +0 -0
  54. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/related_descriptors.py +0 -0
  55. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/related_lookups.py +0 -0
  56. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/related_managers.py +0 -0
  57. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/reverse_descriptors.py +0 -0
  58. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/reverse_related.py +0 -0
  59. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/temporal.py +0 -0
  60. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/text.py +0 -0
  61. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/timezones.py +0 -0
  62. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/fields/uuid.py +0 -0
  63. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/forms.py +0 -0
  64. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/__init__.py +0 -0
  65. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/comparison.py +0 -0
  66. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/datetime.py +0 -0
  67. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/math.py +0 -0
  68. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/mixins.py +0 -0
  69. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/random.py +0 -0
  70. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/text.py +0 -0
  71. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/uuid.py +0 -0
  72. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/functions/window.py +0 -0
  73. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/indexes.py +0 -0
  74. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/__init__.py +0 -0
  75. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/__init__.py +0 -0
  76. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/checks_cumulative.py +0 -0
  77. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/checks_snapshot.py +0 -0
  78. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/checks_structural.py +0 -0
  79. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/context.py +0 -0
  80. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/helpers.py +0 -0
  81. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/ownership.py +0 -0
  82. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/runner.py +0 -0
  83. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/health/types.py +0 -0
  84. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/introspection/schema.py +0 -0
  85. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/lookups.py +0 -0
  86. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/meta.py +0 -0
  87. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/middleware.py +0 -0
  88. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/__init__.py +0 -0
  89. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/autodetector.py +0 -0
  90. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/exceptions.py +0 -0
  91. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/executor.py +0 -0
  92. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/graph.py +0 -0
  93. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/loader.py +0 -0
  94. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/migration.py +0 -0
  95. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/operations/__init__.py +0 -0
  96. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/operations/base.py +0 -0
  97. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/operations/fields.py +0 -0
  98. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/operations/models.py +0 -0
  99. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/operations/special.py +0 -0
  100. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/optimizer.py +0 -0
  101. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/questioner.py +0 -0
  102. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/recorder.py +0 -0
  103. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/serializer.py +0 -0
  104. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/state.py +0 -0
  105. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/utils.py +0 -0
  106. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/migrations/writer.py +0 -0
  107. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/options.py +0 -0
  108. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/otel.py +0 -0
  109. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/preflight/__init__.py +0 -0
  110. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/preflight/database.py +0 -0
  111. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/preflight/indexes.py +0 -0
  112. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/preflight/models.py +0 -0
  113. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/query.py +0 -0
  114. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/query_utils.py +0 -0
  115. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/registry.py +0 -0
  116. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/schema.py +0 -0
  117. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sources.py +0 -0
  118. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/__init__.py +0 -0
  119. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/constants.py +0 -0
  120. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/datastructures.py +0 -0
  121. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/query.py +0 -0
  122. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/sql/where.py +0 -0
  123. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/test/__init__.py +0 -0
  124. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/test/database.py +0 -0
  125. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/test/pytest.py +0 -0
  126. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/transaction.py +0 -0
  127. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/types.py +0 -0
  128. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/types.pyi +0 -0
  129. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/plain/postgres/utils.py +0 -0
  130. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/forms.py +0 -0
  131. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0001_initial.py +0 -0
  132. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0002_test_field_removed.py +0 -0
  133. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0003_deleteparent_childsetnull_childsetdefault_and_more.py +0 -0
  134. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0004_defaultquerysetmodel_mixintestmodel_and_more.py +0 -0
  135. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0005_feature_carfeature_car_features.py +0 -0
  136. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0006_secretstore.py +0 -0
  137. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0007_treenode_unconstrainedchild.py +0 -0
  138. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0008_setsentinelparent_diamondparenta_midparent_and_more.py +0 -0
  139. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0009_circb_circa_circb_partner.py +0 -0
  140. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0010_hideableitem.py +0 -0
  141. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0011_defaultsexample.py +0 -0
  142. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0012_iterationexample.py +0 -0
  143. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0013_indexexample_constraintexample_nullabilityexample.py +0 -0
  144. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0014_widget_rename_feature_tag_remove_carfeature_car_and_more.py +0 -0
  145. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0015_dbdefaultsexample.py +0 -0
  146. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0016_formsexample.py +0 -0
  147. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0017_random_string_token.py +0 -0
  148. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/0018_storageparametersexample.py +0 -0
  149. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/migrations/__init__.py +0 -0
  150. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/__init__.py +0 -0
  151. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/constraints.py +0 -0
  152. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/defaults.py +0 -0
  153. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/delete.py +0 -0
  154. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/encrypted.py +0 -0
  155. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/forms.py +0 -0
  156. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/indexes.py +0 -0
  157. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/iteration.py +0 -0
  158. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/mixins.py +0 -0
  159. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/nullability.py +0 -0
  160. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/querysets.py +0 -0
  161. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/relationships.py +0 -0
  162. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/storage_parameters.py +0 -0
  163. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/trees.py +0 -0
  164. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/models/unregistered.py +0 -0
  165. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/urls.py +0 -0
  166. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/examples/views.py +0 -0
  167. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/settings.py +0 -0
  168. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/app/urls.py +0 -0
  169. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/conftest.py +0 -0
  170. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/conftest_convergence.py +0 -0
  171. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_autodetector_not_null_errors.py +0 -0
  172. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_autodetector_type_change.py +0 -0
  173. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_connection_isolation.py +0 -0
  174. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_connection_lifecycle.py +0 -0
  175. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_connection_pool.py +0 -0
  176. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_connection_self_heal.py +0 -0
  177. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_constraint_violation_error.py +0 -0
  178. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence.py +0 -0
  179. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_constraints.py +0 -0
  180. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_defaults.py +0 -0
  181. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_fk.py +0 -0
  182. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_indexes.py +0 -0
  183. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_nullability.py +0 -0
  184. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_storage_parameters.py +0 -0
  185. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_convergence_timeouts.py +0 -0
  186. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_db_expression_defaults.py +0 -0
  187. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_diagnose.py +0 -0
  188. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_executor_connection_hook.py +0 -0
  189. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_fk_characterization.py +0 -0
  190. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_health.py +0 -0
  191. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_introspection.py +0 -0
  192. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_literal_default_persistence.py +0 -0
  193. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_management_connection.py +0 -0
  194. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_migration_executor.py +0 -0
  195. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_no_callable_defaults.py +0 -0
  196. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_otel_metrics.py +0 -0
  197. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_preflight_duplicate_indexes.py +0 -0
  198. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_preflight_fk_composite_hint.py +0 -0
  199. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_preflight_fk_coverage.py +0 -0
  200. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_schema_normalize_type.py +0 -0
  201. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/internal/test_schema_timeouts.py +0 -0
  202. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_create_update.py +0 -0
  203. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_database_url.py +0 -0
  204. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_deferred_loading.py +0 -0
  205. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_delete_behaviors.py +0 -0
  206. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_encrypted_fields.py +0 -0
  207. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_exceptions.py +0 -0
  208. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_field_defaults.py +0 -0
  209. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_functions_uuid.py +0 -0
  210. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_integrity_error_mapping.py +0 -0
  211. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_iterator.py +0 -0
  212. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_m2m.py +0 -0
  213. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_manager_assignment.py +0 -0
  214. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_manual_pk.py +0 -0
  215. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_mixins.py +0 -0
  216. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_modelform_roundtrip.py +0 -0
  217. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_queryset_repr.py +0 -0
  218. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_random_string_field.py +0 -0
  219. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_raw_query.py +0 -0
  220. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_read_only_transactions.py +0 -0
  221. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_related.py +0 -0
  222. {plain_postgres-0.110.0 → plain_postgres-0.110.1}/tests/public/test_related_instance_filter.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.postgres
3
- Version: 0.110.0
3
+ Version: 0.110.1
4
4
  Summary: Model your data and store it in a database.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,15 @@
1
1
  # plain-postgres changelog
2
2
 
3
+ ## [0.110.1](https://github.com/dropseed/plain/releases/plain-postgres@0.110.1) (2026-06-22)
4
+
5
+ ### What's changed
6
+
7
+ - Internal: the ordering infinite-loop guard builds its join signature with `isinstance(alias, Join)` instead of `getattr(alias, "join_col", None)`, keeping `.join_col` greppable and type-checked. No behavior change. ([c813405f](https://github.com/dropseed/plain/commit/c813405f))
8
+
9
+ ### Upgrade instructions
10
+
11
+ - No changes required.
12
+
3
13
  ## [0.110.0](https://github.com/dropseed/plain/releases/plain-postgres@0.110.0) (2026-06-17)
4
14
 
5
15
  ### What's changed
@@ -42,6 +42,7 @@ from plain.postgres.sql.constants import (
42
42
  ORDER_DIR,
43
43
  SINGLE,
44
44
  )
45
+ from plain.postgres.sql.datastructures import Join
45
46
  from plain.postgres.sql.query import Query, get_order_dir
46
47
  from plain.postgres.transaction import TransactionManagementError
47
48
  from plain.utils.hashable import make_hashable
@@ -903,10 +904,14 @@ class SQLCompiler:
903
904
  and field.name != pieces[-1]
904
905
  and not getattr(transform_function, "has_transforms", False)
905
906
  ):
906
- # Firstly, avoid infinite loops.
907
+ # Firstly, avoid infinite loops. Each join contributes its column
908
+ # pair to the signature; the base table (no join_col) contributes
909
+ # None. isinstance keeps `.join_col` greppable and type-checked.
907
910
  already_seen = already_seen or set()
911
+ alias_map = self.query.alias_map
908
912
  join_tuple = tuple(
909
- getattr(self.query.alias_map[j], "join_col", None) for j in joins
913
+ alias_map[j].join_col if isinstance(alias_map[j], Join) else None
914
+ for j in joins
910
915
  )
911
916
  if join_tuple in already_seen:
912
917
  raise FieldError("Infinite loop caused by ordering.")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain.postgres"
3
- version = "0.110.0"
3
+ version = "0.110.1"
4
4
  description = "Model your data and store it in a database."
5
5
  authors = [{ name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev" }]
6
6
  readme = "README.md"