~therp-nl/openobject-server/6.1-lp1175516-expression_search_translations_with_fallback_on_untranslated

« back to all changes in this revision

Viewing changes to openerp/osv/expression.py

  • Committer: Stefan Rijnhart
  • Date: 2014-06-24 16:12:52 UTC
  • Revision ID: stefan@therp.nl-20140624161252-zaua1zisifeek03o
[FIX] Search on translatable fields with negative operator gives false positives

Show diffs side-by-side

added added

removed removed

Lines of Context:
628
628
                             '     AND lang = %s'       \
629
629
                             '     AND type = %s'
630
630
                    instr = ' %s'
 
631
 
 
632
                    untranslated = ' AND id NOT IN (' \
 
633
                        'SELECT res_id FROM ir_translation ' \
 
634
                        'WHERE name = %s AND lang = %s AND type = \'model\')'
631
635
                    #Covering in,not in operators with operands (%s,%s) ,etc.
632
636
                    if sql_operator in ['in','not in']:
633
637
                        instr = ','.join(['%s'] * len(right))
635
639
                             ') UNION ('                \
636
640
                             '  SELECT id'              \
637
641
                             '    FROM "' + working_table._table + '"'       \
638
 
                             '   WHERE "' + left + '" ' + sql_operator + ' ' +" (" + instr + "))"
 
642
                             '   WHERE "' + left + '" ' + sql_operator + ' ' +" (" + instr + ")" + \
 
643
                             untranslated + ")"
639
644
                    else:
640
645
                        if self.has_unaccent and sql_operator in ('ilike', 'not ilike'):
641
646
                            subselect += '     AND unaccent(value) ' + sql_operator + ' unaccent(' + instr +   \
642
647
                                 ')) UNION ('                \
643
648
                                 '  SELECT id'              \
644
649
                                 '    FROM "' + working_table._table + '"'       \
645
 
                                 '   WHERE unaccent("' + left + '") ' + sql_operator + ' unaccent(' + instr + '))'
 
650
                                 '   WHERE unaccent("' + left + '") ' + sql_operator + ' unaccent(' + instr + ')' + \
 
651
                                 untranslated + ')'
646
652
                        else:
647
653
                            subselect += '     AND value ' + sql_operator + instr +   \
648
654
                                 ') UNION ('                \
649
655
                                 '  SELECT id'              \
650
656
                                 '    FROM "' + working_table._table + '"'       \
651
 
                                 '   WHERE "' + left + '" ' + sql_operator + instr + ")"
 
657
                                 '   WHERE "' + left + '" ' + sql_operator + instr + untranslated + ')'
652
658
 
653
659
                    params = [working_table._name + ',' + left,
654
660
                              context.get('lang', False) or 'en_US',
655
661
                              'model',
656
662
                              right,
657
663
                              right,
 
664
                              working_table._name + ',' + left,
 
665
                              context.get('lang', 'en_US'),
658
666
                             ]
659
667
 
660
668
                    self.__exp[i] = ('id', 'inselect', (subselect, params))