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
=== modified file 'bin/osv/orm.py'
--- bin/osv/orm.py 2017-04-06 09:08:50 +0000
+++ bin/osv/orm.py 2017-04-12 14:53:38 +0000
@@ -2715,8 +2715,11 @@
2715 parent_table_name = parent_model._table2715 parent_table_name = parent_model._table
2716 quoted_parent_table_name = '"%s"' % parent_table_name2716 quoted_parent_table_name = '"%s"' % parent_table_name
2717 if quoted_parent_table_name not in query.tables:2717 if quoted_parent_table_name not in query.tables:
2718 query.tables.append(quoted_parent_table_name)2718 query.join([self._table, parent_table_name, inherits_field, 'id'], outer=True)
2719 query.where_clause.append('("%s".%s = %s.id)' % (self._table, inherits_field, parent_table_name))2719 # Use query.join() instead of just put new table and new where clause elements because
2720 # to be able to sort on translated values, we need JOIN between tables
2721# query.tables.append(quoted_parent_table_name)
2722# query.where_clause.append('("%s".%s = %s.id)' % (self._table, inherits_field, parent_table_name))
27202723
2721 def _inherits_join_calc(self, field, query):2724 def _inherits_join_calc(self, field, query):
2722 """2725 """
@@ -4571,51 +4574,88 @@
4571 return map(qualify, m2o_order) if isinstance(m2o_order, list) else qualify(m2o_order)4574 return map(qualify, m2o_order) if isinstance(m2o_order, list) else qualify(m2o_order)
45724575
45734576
4574 def _generate_order_by(self, order_spec, query):4577 def _generate_order_by(self, order_spec, query, context=None):
4575 """4578 """
4576 Attempt to consruct an appropriate ORDER BY clause based on order_spec, which must be4579 Attempt to consruct an appropriate ORDER BY clause based on order_spec, which must be
4577 a comma-separated list of valid field names, optionally followed by an ASC or DESC direction.4580 a comma-separated list of valid field names, optionally followed by an ASC or DESC direction.
45784581
4579 :raise" except_orm in case order_spec is malformed4582 :raise" except_orm in case order_spec is malformed
4580 """4583 """
4584 if context is None:
4585 context = {}
4581 order_by_clause = self._order4586 order_by_clause = self._order
4587
4588 if not order_spec:
4589 order_spec = self._order
4590
4591 from_order_clause = []
4592 translation = 0
4582 if order_spec:4593 if order_spec:
4583 order_by_elements = []4594 order_by_elements = []
4584 self._check_qorder(order_spec)4595 self._check_qorder(order_spec)
4585 for order_part in order_spec.split(','):4596 for order_part in order_spec.split(','):
4597 translatable = False
4586 order_split = order_part.strip().split(' ')4598 order_split = order_part.strip().split(' ')
4587 order_field = order_split[0].strip()4599 order_field = order_split[0].strip()
4588 order_direction = order_split[1].strip() if len(order_split) == 2 else ''4600 order_direction = order_split[1].strip() if len(order_split) == 2 else ''
4589 inner_clause = None4601 inner_clause = None
4602 end_inner_clause = []
4590 if order_field == 'id':4603 if order_field == 'id':
4591 inner_clause = '"%s"."%s"' % (self._table, order_field)4604 end_inner_clause = '"%s"."%s"' % (self._table, order_field)
4592 elif order_field in self._columns:4605 elif order_field in self._columns:
4593 order_column = self._columns[order_field]4606 order_column = self._columns[order_field]
4607 translatable = order_column.translate
4608 if translatable:
4609 translation += 1
4610 trans_name = '"ir_translation%s"' % translation
4611 end_inner_clause.append('%s."value"' % trans_name)
4612 left_join_clause = 'LEFT JOIN "ir_translation" %s' % trans_name
4613 on_clause = 'ON %s.src = "%s"."%s" AND %s.name = \'%s,%s\' AND %s.type = \'model\' AND %s.lang = \'%s\'' % (
4614 trans_name, self._table, order_field, trans_name, self._name, order_field, trans_name, trans_name, context.get('lang', 'en_US'))
4615 from_order_clause.append('%s %s' % (left_join_clause, on_clause))
4594 if order_column._classic_read:4616 if order_column._classic_read:
4595 inner_clause = '"%s"."%s"' % (self._table, order_field)4617 inner_clause = '"%s"."%s"' % (self._table, order_field)
4596 elif order_column._type == 'many2one':4618 elif order_column._type == 'many2one':
4597 inner_clause = self._generate_m2o_order_by(order_field, query)4619 inner_clause = self._generate_m2o_order_by(order_field, query)
4598 else:4620 else:
4599 continue # ignore non-readable or "non-joinable" fields4621 continue # ignore non-readable or "non-joinable" fields
4622
4623 if isinstance(inner_clause, list):
4624 end_inner_clause.extend(inner_clause)
4625 else:
4626 end_inner_clause.append(inner_clause)
4600 elif order_field in self._inherit_fields:4627 elif order_field in self._inherit_fields:
4601 parent_obj = self.pool.get(self._inherit_fields[order_field][3])4628 parent_obj = self.pool.get(self._inherit_fields[order_field][3])
4602 order_column = parent_obj._columns[order_field]4629 order_column = parent_obj._columns[order_field]
4630 translatable = order_column.translate
4631 if translatable:
4632 translation += 1
4633 trans_name = '"ir_translation%s"' % translation
4634 end_inner_clause.append('%s."value"' % trans_name)
4635 left_join_clause = 'LEFT JOIN "ir_translation" %s' % trans_name
4636 on_clause = 'ON %s.src = "%s"."%s" AND %s.name = \'%s,%s\' AND %s.type = \'model\' AND %s.lang = \'%s\'' % (
4637 trans_name, self._table, order_field, trans_name, parent_obj._name, order_field, trans_name, trans_name, context.get('lang', 'en_US'))
4638 from_order_clause.append('%s %s' % (left_join_clause, on_clause))
4603 if order_column._classic_read:4639 if order_column._classic_read:
4604 inner_clause = self._inherits_join_calc(order_field, query)4640 inner_clause = self._inherits_join_calc(order_field, query)
4605 elif order_column._type == 'many2one':4641 elif order_column._type == 'many2one':
4606 inner_clause = self._generate_m2o_order_by(order_field, query)4642 inner_clause = self._generate_m2o_order_by(order_field, query)
4607 else:4643 else:
4608 continue # ignore non-readable or "non-joinable" fields4644 continue # ignore non-readable or "non-joinable" fields
4609 if inner_clause:
4610 if isinstance(inner_clause, list):4645 if isinstance(inner_clause, list):
4611 for clause in inner_clause:4646 end_inner_clause.extend(inner_clause)
4647 else:
4648 end_inner_clause.append(inner_clause)
4649 if end_inner_clause:
4650 if isinstance(end_inner_clause, list):
4651 for clause in end_inner_clause:
4612 order_by_elements.append("%s %s" % (clause, order_direction))4652 order_by_elements.append("%s %s" % (clause, order_direction))
4613 else:4653 else:
4614 order_by_elements.append("%s %s" % (inner_clause, order_direction))4654 order_by_elements.append("%s %s" % (end_inner_clause, order_direction))
4615 if order_by_elements:4655 if order_by_elements:
4616 order_by_clause = ",".join(order_by_elements)4656 order_by_clause = ",".join(order_by_elements)
46174657
4618 return order_by_clause and (' ORDER BY %s ' % order_by_clause) or ''4658 return order_by_clause and (' ORDER BY %s ' % order_by_clause) or '', from_order_clause
46194659
4620 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):4660 def _search(self, cr, user, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
4621 """4661 """
@@ -4633,15 +4673,26 @@
46334673
4634 query = self._where_calc(cr, user, args, context=context)4674 query = self._where_calc(cr, user, args, context=context)
4635 self._apply_ir_rules(cr, user, query, 'read', context=context)4675 self._apply_ir_rules(cr, user, query, 'read', context=context)
4676<<<<<<< TREE
4636 if order == 'NO_ORDER':4677 if order == 'NO_ORDER':
4637 order_by=''4678 order_by=''
4638 else:4679 else:
4639 order_by = self._generate_order_by(order, query)4680 order_by = self._generate_order_by(order, query)
46404681
4682=======
4683 order_by, from_order_clause = self._generate_order_by(order, query, context=context)
4684>>>>>>> MERGE-SOURCE
4641 from_clause, where_clause, where_clause_params = query.get_sql()4685 from_clause, where_clause, where_clause_params = query.get_sql()
46424686
4687<<<<<<< TREE
4643 limit_str = limit and ' LIMIT %d' % limit or ''4688 limit_str = limit and ' LIMIT %d' % limit or ''
4644 offset_str = offset and ' OFFSET %d' % offset or ''4689 offset_str = offset and ' OFFSET %d' % offset or ''
4690=======
4691 from_clause = from_clause + ' '.join(from_order_clause)
4692
4693 limit_str = limit and ' limit %d' % limit or ''
4694 offset_str = offset and ' offset %d' % offset or ''
4695>>>>>>> MERGE-SOURCE
4645 where_str = where_clause and (" WHERE %s" % where_clause) or ''4696 where_str = where_clause and (" WHERE %s" % where_clause) or ''
46464697
4647 if count:4698 if count:

Subscribers

People subscribed via source and target branches

to all changes: