﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
29702	QuerySet database-side pattern regexp support	Alex Damian	nobody	"Currently there is no API to match a string against regex patterns stored in a database. Proposing an API to enable this functionality.

== Current regex API

The current set of QuerySet APIs supports regexp functions (i.e `__regex` and `__iregex`) support passing in a pattern that is matched against a field in the database. E.g. for a database `value_field=CharField()` containing the `foo`, `bar` and `for`, the queryset API `Q(value__regexp='.o.')` will match `foo` and `for` through a `value_field REGEX 'o'` WHERE clause. 

== New API proposal

What is missing is an API to allow the regex (proposing `__revregex` and `__irevregex`) pattern to be stored in the field and to apply a WHERE clause on a string that returns pattern-matching entries in the database.  

E.G have the database field `pattern=CharField()` that stores a regex pattern, with the values '.o.' and '.*'.  
The queryset  statement `Q(pattern__revregex='foo')` will match both values, while the pattern `Q(pattern__revregex)='bar')` will match only the `.*` value.

== Example

Currently I'm implementing this with an `extra()` query:

{{{

class DisplayClassifiers(models.Model):
    regex_pattern = models.CharField(max_length=10, null=False)

....

 # return my classifiers that match the string supplied

DisplayClassifiers.objects.extra(where=[""'{0}' REGEXP regex_pattern"".format(regex_pattern.replace(""'"", """"))])
}}}

This generates this SQL:
{{{
 SELECT .... FROM `mainapp_displayclassifier` WHERE ('foo-bar-go' REGEXP regex_pattern)
}}}

Works as expected with mariadb 10.0.31"	New feature	new	Database layer (models, ORM)	2.1	Normal		new feature, queryset, regex	Ülgen Sarıkavak	Accepted	0	0	0	0	0	0
