django-bulk-hooks 0.2.38__tar.gz → 0.2.40__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.
Potentially problematic release.
This version of django-bulk-hooks might be problematic. Click here for more details.
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/PKG-INFO +1 -1
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/bulk_executor.py +20 -5
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/pyproject.toml +1 -1
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/LICENSE +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/README.md +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/changeset.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/dispatcher.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/factory.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/helpers.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/manager.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/__init__.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/analyzer.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/coordinator.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/mti_handler.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/mti_plans.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/record_classifier.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/queryset.py +0 -0
- {django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/registry.py +0 -0
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/bulk_executor.py
RENAMED
|
@@ -7,7 +7,8 @@ This service coordinates bulk database operations with validation and MTI handli
|
|
|
7
7
|
import logging
|
|
8
8
|
|
|
9
9
|
from django.db import transaction
|
|
10
|
-
from django.db.models import AutoField, ForeignKey
|
|
10
|
+
from django.db.models import AutoField, ForeignKey, Case, When, Value
|
|
11
|
+
from django.db.models.functions import Cast
|
|
11
12
|
|
|
12
13
|
logger = logging.getLogger(__name__)
|
|
13
14
|
|
|
@@ -487,16 +488,16 @@ class BulkExecutor:
|
|
|
487
488
|
|
|
488
489
|
# Handle NULL values specially for ForeignKey fields
|
|
489
490
|
if is_fk and value is None:
|
|
490
|
-
# For ForeignKey fields with None values, use
|
|
491
|
-
#
|
|
491
|
+
# For ForeignKey fields with None values, use Cast to ensure proper NULL type
|
|
492
|
+
# PostgreSQL needs explicit type casting for NULL values in CASE statements
|
|
492
493
|
logger.info(
|
|
493
494
|
f"DEBUG NULL FIX APPLIED - Field: {field_name}, "
|
|
494
|
-
f"PK: {pk}, Using
|
|
495
|
+
f"PK: {pk}, Using Cast(Value(None), output_field={type(case_output_field).__name__})"
|
|
495
496
|
)
|
|
496
497
|
when_statements.append(
|
|
497
498
|
When(
|
|
498
499
|
**{field_group.filter_field: pk},
|
|
499
|
-
then=None,
|
|
500
|
+
then=Cast(Value(None), output_field=case_output_field),
|
|
500
501
|
),
|
|
501
502
|
)
|
|
502
503
|
else:
|
|
@@ -528,6 +529,20 @@ class BulkExecutor:
|
|
|
528
529
|
f"WhenThen: {when_stmt.result}, "
|
|
529
530
|
f"WhenThenType: {type(when_stmt.result).__name__}"
|
|
530
531
|
)
|
|
532
|
+
|
|
533
|
+
# DEBUG: Check if the When result has output_field
|
|
534
|
+
if hasattr(when_stmt.result, 'output_field'):
|
|
535
|
+
logger.info(
|
|
536
|
+
f"DEBUG When Result OutputField - Field: {field_name}, "
|
|
537
|
+
f"WhenIndex: {i}, "
|
|
538
|
+
f"ResultOutputField: {type(when_stmt.result.output_field).__name__}"
|
|
539
|
+
)
|
|
540
|
+
else:
|
|
541
|
+
logger.info(
|
|
542
|
+
f"DEBUG When Result No OutputField - Field: {field_name}, "
|
|
543
|
+
f"WhenIndex: {i}, "
|
|
544
|
+
f"ResultType: {type(when_stmt.result).__name__}"
|
|
545
|
+
)
|
|
531
546
|
|
|
532
547
|
# Execute bulk update
|
|
533
548
|
if case_statements:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/__init__.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/analyzer.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/coordinator.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/mti_handler.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.38 → django_bulk_hooks-0.2.40}/django_bulk_hooks/operations/mti_plans.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|