mirror of https://github.com/django/django.git
parent
a9f1711518
commit
b86321e9a4
|
@ -120,16 +120,22 @@ class Lookup(RegisterLookupMixin):
|
||||||
|
|
||||||
|
|
||||||
class BuiltinLookup(Lookup):
|
class BuiltinLookup(Lookup):
|
||||||
def as_sql(self, qn, connection):
|
def process_lhs(self, qn, connection, lhs=None):
|
||||||
lhs_sql, params = self.process_lhs(qn, connection)
|
lhs_sql, params = super(BuiltinLookup, self).process_lhs(
|
||||||
|
qn, connection, lhs)
|
||||||
field_internal_type = self.lhs.output_type.get_internal_type()
|
field_internal_type = self.lhs.output_type.get_internal_type()
|
||||||
db_type = self.lhs.output_type.db_type(connection=connection)
|
db_type = self.lhs.output_type.db_type(connection=connection)
|
||||||
lhs_sql = connection.ops.field_cast_sql(db_type, field_internal_type) % lhs_sql
|
lhs_sql = connection.ops.field_cast_sql(
|
||||||
|
db_type, field_internal_type) % lhs_sql
|
||||||
lhs_sql = connection.ops.lookup_cast(self.lookup_name) % lhs_sql
|
lhs_sql = connection.ops.lookup_cast(self.lookup_name) % lhs_sql
|
||||||
|
return lhs_sql, params
|
||||||
|
|
||||||
|
def as_sql(self, qn, connection):
|
||||||
|
lhs_sql, params = self.process_lhs(qn, connection)
|
||||||
rhs_sql, rhs_params = self.process_rhs(qn, connection)
|
rhs_sql, rhs_params = self.process_rhs(qn, connection)
|
||||||
params.extend(rhs_params)
|
params.extend(rhs_params)
|
||||||
operator_plus_rhs = self.get_rhs_op(connection, rhs_sql)
|
rhs_sql = self.get_rhs_op(connection, rhs_sql)
|
||||||
return '%s %s' % (lhs_sql, operator_plus_rhs), params
|
return '%s %s' % (lhs_sql, rhs_sql), params
|
||||||
|
|
||||||
def get_rhs_op(self, connection, rhs):
|
def get_rhs_op(self, connection, rhs):
|
||||||
return connection.operators[self.lookup_name] % rhs
|
return connection.operators[self.lookup_name] % rhs
|
||||||
|
@ -276,8 +282,8 @@ default_lookups['range'] = Range
|
||||||
|
|
||||||
class DateLookup(BuiltinLookup):
|
class DateLookup(BuiltinLookup):
|
||||||
|
|
||||||
def process_lhs(self, qn, connection):
|
def process_lhs(self, qn, connection, lhs=None):
|
||||||
lhs, params = super(DateLookup, self).process_lhs(qn, connection)
|
lhs, params = super(DateLookup, self).process_lhs(qn, connection, lhs)
|
||||||
tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None
|
tzname = timezone.get_current_timezone_name() if settings.USE_TZ else None
|
||||||
sql, tz_params = connection.ops.datetime_extract_sql(self.extract_type, lhs, tzname)
|
sql, tz_params = connection.ops.datetime_extract_sql(self.extract_type, lhs, tzname)
|
||||||
return connection.ops.lookup_cast(self.lookup_name) % sql, tz_params
|
return connection.ops.lookup_cast(self.lookup_name) % sql, tz_params
|
||||||
|
@ -341,9 +347,18 @@ default_lookups['search'] = Search
|
||||||
|
|
||||||
class Regex(BuiltinLookup):
|
class Regex(BuiltinLookup):
|
||||||
lookup_name = 'regex'
|
lookup_name = 'regex'
|
||||||
|
|
||||||
|
def as_sql(self, qn, connection):
|
||||||
|
if self.lookup_name in connection.operators:
|
||||||
|
return super(Regex, self).as_sql(qn, connection)
|
||||||
|
else:
|
||||||
|
lhs, lhs_params = self.process_lhs(qn, connection)
|
||||||
|
rhs, rhs_params = self.process_rhs(qn, connection)
|
||||||
|
sql_template = connection.ops.regex_lookup(self.lookup_name)
|
||||||
|
return sql_template % (lhs, rhs), lhs_params + rhs_params
|
||||||
default_lookups['regex'] = Regex
|
default_lookups['regex'] = Regex
|
||||||
|
|
||||||
|
|
||||||
class IRegex(BuiltinLookup):
|
class IRegex(Regex):
|
||||||
lookup_name = 'iregex'
|
lookup_name = 'iregex'
|
||||||
default_lookups['iregex'] = IRegex
|
default_lookups['iregex'] = IRegex
|
||||||
|
|
Loading…
Reference in New Issue