code: function () {
              var tOpts = this.__opts,
                  clause = (tOpts.having ? "having" : "where"),
                  clauseObj = tOpts[clause];
              if (clauseObj) {
                  return this.or.apply(this, arguments);
              } else {
                  var args = argsToArray(arguments);
                  args = args.length === 1 ? args[0] : args;
                  var opts = {};
                  opts[clause] = this._filterExpr(args, null, "AND");
                  return this.mergeOptions(opts);
              }
          }
docs: Adds a group of ANDed conditions wrapped in parens to an existing where/having clause by an OR. If there isn't
  a where/having clause, a where clause is created with the ANDed conditions.
  
  <p>
  <b>For parameter types see {@link patio.Dataset#filter}.</b>
  </p>
  
  @example
  
  DB.from("items").filter({id, [1,2,3]}).orGroupedAnd([{price: {lt : 0}}, {price: {gt: 10}]).sql;
  //=> SELECT
  *
  FROM
  items
  WHERE
  ((id IN (1, 2, 3)) OR ((price > 0) AND (price < 10)))
  
  DB.from("items").orGroupedAnd([{price: {gt : 0}}, {price: {gt: 10}]).sql;
  //=> SELECT
  *
  FROM
  items
  WHERE
  ((price > 0) AND (price < 10))
  
  @return {patio.Dataset} a cloned dataset with the condition 'and group' added to the WHERE/HAVING clause.