Django

Code

Changeset 3073

Show
Ignore:
Timestamp:
06/03/06 18:28:24 (2 years ago)
Author:
adrian
Message:

Fixed #593 -- Added 'search' DB-API lookup type, which does full-text index searches in MySQL

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/backends/ado_mssql/base.py

    r2993 r3073  
    126126    return "RAND()" 
    127127 
     128def get_fulltext_search_sql(field_name): 
     129    raise NotImplementedError 
     130 
    128131def get_drop_foreignkey_sql(): 
    129132    return "DROP CONSTRAINT" 
  • django/trunk/django/db/backends/dummy/base.py

    r2809 r3073  
    3434get_limit_offset_sql = complain 
    3535get_random_function_sql = complain 
     36get_fulltext_search_sql = complain 
    3637get_drop_foreignkey_sql = complain 
    3738OPERATOR_MAPPING = {} 
  • django/trunk/django/db/backends/mysql/base.py

    r2993 r3073  
    153153    return "RAND()" 
    154154 
     155def get_fulltext_search_sql(field_name): 
     156    return 'MATCH (%s) AGAINST (%%s IN BOOLEAN MODE)' % field_name 
     157 
    155158def get_drop_foreignkey_sql(): 
    156159    return "DROP FOREIGN KEY" 
  • django/trunk/django/db/backends/oracle/base.py

    r3070 r3073  
    109109    return "DBMS_RANDOM.RANDOM" 
    110110 
     111def get_fulltext_search_sql(field_name): 
     112    raise NotImplementedError 
     113 
    111114def get_drop_foreignkey_sql(): 
    112115    return "DROP FOREIGN KEY" 
  • django/trunk/django/db/backends/postgresql/base.py

    r2993 r3073  
    103103    return "RANDOM()" 
    104104 
     105def get_fulltext_search_sql(field_name): 
     106    raise NotImplementedError 
     107 
    105108def get_drop_foreignkey_sql(): 
    106109    return "DROP CONSTRAINT" 
  • django/trunk/django/db/backends/postgresql_psycopg2/base.py

    r2993 r3073  
    109109    return "RANDOM()" 
    110110 
     111def get_fulltext_search_sql(field_name): 
     112    raise NotImplementedError 
     113 
    111114def get_drop_foreignkey_sql(): 
    112115    return "DROP CONSTRAINT" 
  • django/trunk/django/db/backends/sqlite3/base.py

    r2993 r3073  
    125125    return "RANDOM()" 
    126126 
     127def get_fulltext_search_sql(field_name): 
     128    raise NotImplementedError 
     129 
    127130def get_drop_foreignkey_sql(): 
    128131    return "" 
  • django/trunk/django/db/models/fields/__init__.py

    r3002 r3073  
    163163    def get_db_prep_lookup(self, lookup_type, value): 
    164164        "Returns field's value prepared for database lookup." 
    165         if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'ne', 'year', 'month', 'day'): 
     165        if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'ne', 'year', 'month', 'day', 'search'): 
    166166            return [value] 
    167167        elif lookup_type in ('range', 'in'): 
  • django/trunk/django/db/models/query.py

    r3044 r3073  
    616616    elif lookup_type == 'isnull': 
    617617        return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or '')) 
     618    elif lookup_type == 'search': 
     619        return backend.get_fulltext_search_sql(table_prefix + field_name) 
    618620    raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type) 
    619621 
  • django/trunk/docs/db-api.txt

    r3054 r3073  
    10361036    SELECT ... WHERE pub_date IS NULL; 
    10371037 
     1038search 
     1039~~~~~~ 
     1040 
     1041A boolean full-text search, taking advantage of full-text indexing. This is 
     1042like ``contains`` but is significantly faster due to full-text indexing. 
     1043 
     1044Note this is only available in MySQL and requires direct manipulation of the 
     1045database to add the full-text index. 
     1046 
    10381047Default lookups are exact 
    10391048~~~~~~~~~~~~~~~~~~~~~~~~~