Ticket #2473: where_0=1.diff

File where_0=1.diff, 2.0 KB (added by Gary Wilson <gary.wilson@…>, 8 years ago)

used where 0=1 instead of where false

  • django/db/models/query.py

    === modified file 'django/db/models/query.py'
     
    641641    except KeyError:
    642642        pass
    643643    if lookup_type == 'in':
    644         return '%s%s IN (%s)' % (table_prefix, field_name, ','.join(['%s' for v in value]))
     644        in_string = ','.join(['%s' for id in value])
     645        if in_string:
     646            return '%s%s IN (%s)' % (table_prefix, field_name, in_string)
     647        else:
     648            # Most backends do not accept an empty string inside the IN
     649            # expression, i.e. cannot do "WHERE ... IN ()".  Since there are
     650            # also some backends that do not accept "WHERE false", we instead
     651            # use an expression that always evaluates to False.
     652            return '0=1'
    645653    elif lookup_type == 'range':
    646654        return '%s%s BETWEEN %%s AND %%s' % (table_prefix, field_name)
    647655    elif lookup_type in ('year', 'month', 'day'):
  • tests/modeltests/or_lookups/models.py

    === modified file 'tests/modeltests/or_lookups/models.py'
     
    6969>>> Article.objects.filter(Q(pk=1) | Q(pk=2) | Q(pk=3))
    7070[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
    7171
     72# You could also use "in" to accomplish the same as above.
     73>>> Article.objects.filter(pk__in=[1,2,3])
     74[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
     75
     76>>> Article.objects.filter(pk__in=[1,2,3,4])
     77[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
     78
     79# Passing "in" an empty list returns no results.
     80>>> Article.objects.filter(pk__in=[])
     81[]
     82
     83# But can return results if we OR it with another query.
     84>>> Article.objects.filter(Q(pk__in=[]) | Q(headline__icontains='goodbye'))
     85[<Article: Goodbye>, <Article: Hello and goodbye>]
     86
    7287# Q arg objects are ANDed
    7388>>> Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye'))
    7489[<Article: Hello and goodbye>]
Back to Top