Code

Ticket #7580: binary_patch.diff

File binary_patch.diff, 2.2 KB (added by Paul Kenjora <pkenjora@…>, 6 years ago)
Line 
1Index: db/models/sql/query.py
2===================================================================
3--- db/models/sql/query.py      (revision 7742)
4+++ db/models/sql/query.py      (working copy)
5@@ -557,6 +557,11 @@
6         else:
7             asc, desc = ORDER_DIR['DESC']
8         for field in ordering:
9+            binary_extra = ''
10+            if field.endswith('__binary'):
11+                field = field.rstrip('__binary') 
12+                binary_extra = 'BINARY '
13+
14             if field == '?':
15                 result.append(self.connection.ops.random_function_sql())
16                 continue
17@@ -566,7 +571,7 @@
18                     field = -field
19                 else:
20                     order = asc
21-                result.append('%s %s' % (field, order))
22+                result.append('%s %s' % (binary_extra + field, order))
23                 continue
24             if '.' in field:
25                 # This came in through an extra(order_by=...) addition. Pass it
26@@ -575,7 +580,7 @@
27                 table, col = col.split('.', 1)
28                 elt = '%s.%s' % (qn(table), col)
29                 if not distinct or elt in select_aliases:
30-                    result.append('%s %s' % (elt, order))
31+                    result.append('%s %s' % (binary_extra + elt, order))
32             elif get_order_dir(field)[0] not in self.extra_select:
33                 # 'col' is of the form 'field' or 'field1__field2' or
34                 # '-field1__field2__field', etc.
35@@ -584,13 +589,13 @@
36                     elt = '%s.%s' % (qn(table), qn2(col))
37                     if distinct and elt not in select_aliases:
38                         ordering_aliases.append(elt)
39-                    result.append('%s %s' % (elt, order))
40+                    result.append('%s %s' % (binary_extra + elt, order))
41             else:
42                 col, order = get_order_dir(field, asc)
43                 elt = qn(col)
44                 if distinct and elt not in select_aliases:
45                     ordering_aliases.append(elt)
46-                result.append('%s %s' % (elt, order))
47+                result.append('%s %s' % (binary_extra + elt, order))
48         self.ordering_aliases = ordering_aliases
49         return result
50