コード例 #1
0
    def _search_parents(self, domain=[], order=None):
        self._check_parent_field()
        self.check_access_rights('read')
        if expression.is_false(self, domain):
            return []
        query = self._where_calc(domain)
        self._apply_ir_rules(query, 'read')
        from_clause, where_clause, where_clause_arguments = query.get_sql()
        parent_where = where_clause and (" WHERE %s" % where_clause) or ''
        parent_query = 'SELECT "%s".id FROM ' % self._table + from_clause + parent_where
        no_parent_clause = '"{table}"."{field}" IS NULL'.format(
            table=self._table, field=self._parent_name)
        no_access_clause = '"{table}"."{field}" NOT IN ({query})'.format(
            table=self._table, field=self._parent_name, query=parent_query)
        parent_clause = '({0} OR {1})'.format(no_parent_clause,
                                              no_access_clause)
        order_by = self._generate_order_by(order, query)
        from_clause, where_clause, where_clause_params = query.get_sql()

        where_str = (where_clause and (" WHERE %s AND %s" %
                                       (where_clause, parent_clause))
                     or (" WHERE %s" % parent_clause))
        query_str = 'SELECT "%s".id FROM ' % self._table + from_clause + where_str + order_by
        complete_where_clause_params = where_clause_params + where_clause_arguments
        self._cr.execute(query_str, complete_where_clause_params)
        return utils.uniquify_list([x[0] for x in self._cr.fetchall()])
コード例 #2
0
ファイル: base.py プロジェクト: e5las/K_POS
 def _search_parents(self,
                     domain=[],
                     offset=0,
                     limit=None,
                     order=None,
                     count=False):
     self._check_parent_field()
     self.check_access_rights("read")
     if expression.is_false(self, domain):
         return 0 if count else []
     self._flush_search(domain, fields=[self._parent_name], order=order)
     query = self._where_calc(domain)
     self._apply_ir_rules(query, "read")
     from_clause, where_clause, where_clause_arguments = query.get_sql()
     parent_where = where_clause and (
         " WHERE {}".format(where_clause)) or ""
     parent_query = ('SELECT "{}".id FROM '.format(self._table) +
                     from_clause + parent_where)
     no_parent_clause = '"{table}"."{field}" IS NULL'.format(
         table=self._table, field=self._parent_name)
     no_access_clause = '"{table}"."{field}" NOT IN ({query})'.format(
         table=self._table, field=self._parent_name, query=parent_query)
     parent_clause = "({} OR {})".format(no_parent_clause, no_access_clause)
     order_by = self._generate_order_by(order, query)
     from_clause, where_clause, where_clause_params = query.get_sql()
     where_str = (where_clause and
                  (" WHERE {} AND {}".format(where_clause, parent_clause))
                  or (" WHERE {}".format(parent_clause)))
     if count:
         query_str = "SELECT count(1) FROM " + from_clause + where_str
         self.env.cr.execute(query_str,
                             where_clause_params + where_clause_arguments)
         return self.env.cr.fetchone()[0]
     limit_str = limit and " limit %d" % limit or ""
     offset_str = offset and " offset %d" % offset or ""
     query_str = ('SELECT "{}".id FROM '.format(self._table) + from_clause +
                  where_str + order_by + limit_str + offset_str)
     self.env.cr.execute(query_str,
                         where_clause_params + where_clause_arguments)
     return utils.uniquify_list([x[0] for x in self.env.cr.fetchall()])