docs: function copyFromQueryBuilder(otherQueryBuilder) {
    var qb = new QueryBuilder();
    if (otherQueryBuilder != null) {
      var clauseKeys = [
        'whereClause', 'calculateClause', 'orderByClause',
        'sliceClause', 'withOptionsClause'
      ];
      var isString = (typeof otherQueryBuilder === 'string' || otherQueryBuilder instanceof String);
      var other = isString ?
          JSON.parse(otherQueryBuilder) : otherQueryBuilder;
      for (var i=0; i < clauseKeys.length; i++){
        var key = clauseKeys[i];
        var value = other[key];
        if (value != null) {
          // deepcopy instead of clone to avoid preserving prototype
          qb[key] = isString ? value : deepcopy(value);
        }
      }
    }
    return qb;
  }