Merge lp:~unifield-team/unifield-server/bklg-35 into lp:unifield-server

Proposed by jftempo
Status: Merged
Merged at revision: 4370
Proposed branch: lp:~unifield-team/unifield-server/bklg-35
Merge into: lp:unifield-server
Diff against target: 139 lines (+59/-8) (has conflicts)
1 file modified
bin/osv/orm.py (+59/-8)
Text conflict in bin/osv/orm.py
To merge this branch: bzr merge lp:~unifield-team/unifield-server/bklg-35
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+322463@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/osv/orm.py'
2--- bin/osv/orm.py 2017-04-06 09:08:50 +0000
3+++ bin/osv/orm.py 2017-04-12 14:53:38 +0000
4@@ -2715,8 +2715,11 @@
5 parent_table_name = parent_model._table
6 quoted_parent_table_name = '"%s"' % parent_table_name
7 if quoted_parent_table_name not in query.tables:
8- query.tables.append(quoted_parent_table_name)
9- query.where_clause.append('("%s".%s = %s.id)' % (self._table, inherits_field, parent_table_name))
10+ query.join([self._table, parent_table_name, inherits_field, 'id'], outer=True)
11+ # Use query.join() instead of just put new table and new where clause elements because
12+ # to be able to sort on translated values, we need JOIN between tables
13+# query.tables.append(quoted_parent_table_name)
14+# query.where_clause.append('("%s".%s = %s.id)' % (self._table, inherits_field, parent_table_name))
15
16 def _inherits_join_calc(self, field, query):
17 """
18@@ -4571,51 +4574,88 @@
19 return map(qualify, m2o_order) if isinstance(m2o_order, list) else qualify(m2o_order)
20
21
22- def _generate_order_by(self, order_spec, query):
23+ def _generate_order_by(self, order_spec, query, context=None):
24 """
25 Attempt to consruct an appropriate ORDER BY clause based on order_spec, which must be
26 a comma-separated list of valid field names, optionally followed by an ASC or DESC direction.
27
28 :raise" except_orm in case order_spec is malformed
29 """
30+ if context is None:
31+ context = {}
32 order_by_clause = self._order
33+
34+ if not order_spec:
35+ order_spec = self._order
36+
37+ from_order_clause = []
38+ translation = 0
39 if order_spec:
40 order_by_elements = []
41 self._check_qorder(order_spec)
42 for order_part in order_spec.split(','):
43+ translatable = False
44 order_split = order_part.strip().split(' ')
45 order_field = order_split[0].strip()
46 order_direction = order_split[1].strip() if len(order_split) == 2 else ''
47 inner_clause = None
48+ end_inner_clause = []
49 if order_field == 'id':
50- inner_clause = '"%s"."%s"' % (self._table, order_field)
51+ end_inner_clause = '"%s"."%s"' % (self._table, order_field)
52 elif order_field in self._columns:
53 order_column = self._columns[order_field]
54+ translatable = order_column.translate
55+ if translatable:
56+ translation += 1
57+ trans_name = '"ir_translation%s"' % translation
58+ end_inner_clause.append('%s."value"' % trans_name)
59+ left_join_clause = 'LEFT JOIN "ir_translation" %s' % trans_name
60+ on_clause = 'ON %s.src = "%s"."%s" AND %s.name = \'%s,%s\' AND %s.type = \'model\' AND %s.lang = \'%s\'' % (
61+ trans_name, self._table, order_field, trans_name, self._name, order_field, trans_name, trans_name, context.get('lang', 'en_US'))
62+ from_order_clause.append('%s %s' % (left_join_clause, on_clause))
63 if order_column._classic_read:
64 inner_clause = '"%s"."%s"' % (self._table, order_field)
65 elif order_column._type == 'many2one':
66 inner_clause = self._generate_m2o_order_by(order_field, query)
67 else:
68 continue # ignore non-readable or "non-joinable" fields
69+
70+ if isinstance(inner_clause, list):
71+ end_inner_clause.extend(inner_clause)
72+ else:
73+ end_inner_clause.append(inner_clause)
74 elif order_field in self._inherit_fields:
75 parent_obj = self.pool.get(self._inherit_fields[order_field][3])
76 order_column = parent_obj._columns[order_field]
77+ translatable = order_column.translate
78+ if translatable:
79+ translation += 1
80+ trans_name = '"ir_translation%s"' % translation
81+ end_inner_clause.append('%s."value"' % trans_name)
82+ left_join_clause = 'LEFT JOIN "ir_translation" %s' % trans_name
83+ on_clause = 'ON %s.src = "%s"."%s" AND %s.name = \'%s,%s\' AND %s.type = \'model\' AND %s.lang = \'%s\'' % (
84+ trans_name, self._table, order_field, trans_name, parent_obj._name, order_field, trans_name, trans_name, context.get('lang', 'en_US'))
85+ from_order_clause.append('%s %s' % (left_join_clause, on_clause))
86 if order_column._classic_read:
87 inner_clause = self._inherits_join_calc(order_field, query)
88 elif order_column._type == 'many2one':
89 inner_clause = self._generate_m2o_order_by(order_field, query)
90 else:
91 continue # ignore non-readable or "non-joinable" fields
92- if inner_clause:
93 if isinstance(inner_clause, list):
94- for clause in inner_clause:
95+ end_inner_clause.extend(inner_clause)
96+ else:
97+ end_inner_clause.append(inner_clause)
98+ if end_inner_clause:
99+ if isinstance(end_inner_clause, list):
100+ for clause in end_inner_clause:
101 order_by_elements.append("%s %s" % (clause, order_direction))
102 else:
103- order_by_elements.append("%s %s" % (inner_clause, order_direction))
104+ order_by_elements.append("%s %s" % (end_inner_clause, order_direction))
105 if order_by_elements:
106 order_by_clause = ",".join(order_by_elements)
107
108- return order_by_clause and (' ORDER BY %s ' % order_by_clause) or ''
109+ return order_by_clause and (' ORDER BY %s ' % order_by_clause) or '', from_order_clause
110
111 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
112 """
113@@ -4633,15 +4673,26 @@
114
115 query = self._where_calc(cr, user, args, context=context)
116 self._apply_ir_rules(cr, user, query, 'read', context=context)
117+<<<<<<< TREE
118 if order == 'NO_ORDER':
119 order_by=''
120 else:
121 order_by = self._generate_order_by(order, query)
122
123+=======
124+ order_by, from_order_clause = self._generate_order_by(order, query, context=context)
125+>>>>>>> MERGE-SOURCE
126 from_clause, where_clause, where_clause_params = query.get_sql()
127
128+<<<<<<< TREE
129 limit_str = limit and ' LIMIT %d' % limit or ''
130 offset_str = offset and ' OFFSET %d' % offset or ''
131+=======
132+ from_clause = from_clause + ' '.join(from_order_clause)
133+
134+ limit_str = limit and ' limit %d' % limit or ''
135+ offset_str = offset and ' offset %d' % offset or ''
136+>>>>>>> MERGE-SOURCE
137 where_str = where_clause and (" WHERE %s" % where_clause) or ''
138
139 if count:

Subscribers

People subscribed via source and target branches

to all changes: