Skip to content

Commit

Permalink
Fix for empty search_vector
Browse files Browse the repository at this point in the history
Sometimes it might happen that the search vector is empty (like when the
'search_index' tuple is empty). In this case the SQL was incorrect:
SET search_index =  WHERE ...
This commit fixes the above SQL to
SET search_index = '' WHERE ...
  • Loading branch information
Przemek Kaminski committed Jan 4, 2016
1 parent 9b05f9a commit e0730d9
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 3 deletions.
2 changes: 1 addition & 1 deletion djorm_pgfulltext/models.py
Expand Up @@ -175,7 +175,7 @@ def update_search_field(self, pk=None, search_field=None, fields=None, config=No
sql = "UPDATE %s SET %s = %s %s;" % (
qn(self.model._meta.db_table),
qn(search_field),
search_vector,
search_vector or "''",
where_sql
)

Expand Down
11 changes: 9 additions & 2 deletions djorm_pgfulltext/tests/__init__.py
@@ -1,16 +1,15 @@
# -*- coding: utf-8 -*-

import django
from django.db import connection
from django.db import transaction
from django.utils import unittest
from django.utils.unittest import TestCase

from djorm_pgfulltext.tests.models import Book
from djorm_pgfulltext.tests.models import Person
from djorm_pgfulltext.tests.models import Person2
from djorm_pgfulltext.tests.models import Person3
from djorm_pgfulltext.tests.models import Person4
from djorm_pgfulltext.tests.models import Person5


class FtsSetUpMixin:
Expand Down Expand Up @@ -143,6 +142,14 @@ def test_multi_vector_field(self):
qs = Person4.objects.filter(data_search_index__ft_startswith="trash")
self.assertEqual(qs.count(), 0)

def test_empty_search_index(self):
Person5.objects.create(
name='Pepa',
description='Is a housewife'
)

self.assertEqual(Person5.objects.all().count(), 1)


class TestFullTextLookups(FtsSetUpMixin, TestCase):

Expand Down
13 changes: 13 additions & 0 deletions djorm_pgfulltext/tests/migrations/0001_initial.py
Expand Up @@ -85,4 +85,17 @@ class Migration(migrations.Migration):
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Person5',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=32)),
('description', models.TextField()),
('search_index', djorm_pgfulltext.fields.VectorField(default=b'', serialize=False, null=True, editable=False, db_index=True)),
('description_search_index', djorm_pgfulltext.fields.VectorField(default=b'', serialize=False, null=True, editable=False, db_index=True)),
],
options={
},
bases=(models.Model,),
),
]
17 changes: 17 additions & 0 deletions djorm_pgfulltext/tests/models.py
Expand Up @@ -6,6 +6,7 @@
from ..fields import VectorField
from ..models import SearchManager


class Person(models.Model):
name = models.CharField(max_length=32)
description = models.TextField()
Expand Down Expand Up @@ -101,6 +102,22 @@ def _convert_field_to_db(field, weight, config, using, extra=None):
""" % (config, qn(field.model._meta.db_table), qn(field.column), extra['key'], weight)


class Person5(models.Model):
name = models.CharField(max_length=32)
description = models.TextField()
search_index = VectorField()

objects = SearchManager(
fields=tuple(),
search_field = 'search_index',
config = 'names',
auto_update_search_field=True,
)

def __unicode__(self):
return self.name


class Book(models.Model):
author = models.ForeignKey(Person)
name = models.CharField(max_length=32)
Expand Down

0 comments on commit e0730d9

Please sign in to comment.