mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #593 -- Added 'search' DB-API lookup type, which does full-text index searches in MySQL
git-svn-id: http://code.djangoproject.com/svn/django/trunk@3073 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -125,6 +125,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "RAND()" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     raise NotImplementedError | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "DROP CONSTRAINT" | ||||
|  | ||||
|   | ||||
| @@ -33,5 +33,6 @@ get_date_extract_sql = complain | ||||
| get_date_trunc_sql = complain | ||||
| get_limit_offset_sql = complain | ||||
| get_random_function_sql = complain | ||||
| get_fulltext_search_sql = complain | ||||
| get_drop_foreignkey_sql = complain | ||||
| OPERATOR_MAPPING = {} | ||||
|   | ||||
| @@ -152,6 +152,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "RAND()" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     return 'MATCH (%s) AGAINST (%%s IN BOOLEAN MODE)' % field_name | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "DROP FOREIGN KEY" | ||||
|  | ||||
|   | ||||
| @@ -108,6 +108,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "DBMS_RANDOM.RANDOM" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     raise NotImplementedError | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "DROP FOREIGN KEY" | ||||
|  | ||||
|   | ||||
| @@ -102,6 +102,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "RANDOM()" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     raise NotImplementedError | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "DROP CONSTRAINT" | ||||
|  | ||||
|   | ||||
| @@ -108,6 +108,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "RANDOM()" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     raise NotImplementedError | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "DROP CONSTRAINT" | ||||
|  | ||||
|   | ||||
| @@ -124,6 +124,9 @@ def get_limit_offset_sql(limit, offset=None): | ||||
| def get_random_function_sql(): | ||||
|     return "RANDOM()" | ||||
|  | ||||
| def get_fulltext_search_sql(field_name): | ||||
|     raise NotImplementedError | ||||
|  | ||||
| def get_drop_foreignkey_sql(): | ||||
|     return "" | ||||
|  | ||||
|   | ||||
| @@ -162,7 +162,7 @@ class Field(object): | ||||
|  | ||||
|     def get_db_prep_lookup(self, lookup_type, value): | ||||
|         "Returns field's value prepared for database lookup." | ||||
|         if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'ne', 'year', 'month', 'day'): | ||||
|         if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'ne', 'year', 'month', 'day', 'search'): | ||||
|             return [value] | ||||
|         elif lookup_type in ('range', 'in'): | ||||
|             return value | ||||
|   | ||||
| @@ -615,6 +615,8 @@ def get_where_clause(lookup_type, table_prefix, field_name, value): | ||||
|         return "%s = %%s" % backend.get_date_extract_sql(lookup_type, table_prefix + field_name) | ||||
|     elif lookup_type == 'isnull': | ||||
|         return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or '')) | ||||
|     elif lookup_type == 'search': | ||||
|         return backend.get_fulltext_search_sql(table_prefix + field_name) | ||||
|     raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type) | ||||
|  | ||||
| def get_cached_row(klass, row, index_start): | ||||
|   | ||||
| @@ -1035,6 +1035,15 @@ SQL equivalent:: | ||||
|  | ||||
|     SELECT ... WHERE pub_date IS NULL; | ||||
|  | ||||
| search | ||||
| ~~~~~~ | ||||
|  | ||||
| A boolean full-text search, taking advantage of full-text indexing. This is | ||||
| like ``contains`` but is significantly faster due to full-text indexing. | ||||
|  | ||||
| Note this is only available in MySQL and requires direct manipulation of the | ||||
| database to add the full-text index. | ||||
|  | ||||
| Default lookups are exact | ||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user