code: func (q *Query) Copy() *Query {
  	var modelValues map[string]*queryParamsAppender
  	if len(q.modelValues) > 0 {
  		modelValues = make(map[string]*queryParamsAppender, len(q.modelValues))
  		for k, v := range q.modelValues {
  			modelValues[k] = v
  		}
  	}
  
  	copy := &Query{
  		ctx:       q.ctx,
  		db:        q.db,
  		stickyErr: q.stickyErr,
  
  		model:         q.model,
  		implicitModel: q.implicitModel,
  		deleted:       q.deleted,
  
  		with:        q.with[:len(q.with):len(q.with)],
  		tables:      q.tables[:len(q.tables):len(q.tables)],
  		columns:     q.columns[:len(q.columns):len(q.columns)],
  		set:         q.set[:len(q.set):len(q.set)],
  		modelValues: modelValues,
  		where:       q.where[:len(q.where):len(q.where)],
  		updWhere:    q.updWhere[:len(q.updWhere):len(q.updWhere)],
  		joins:       q.joins[:len(q.joins):len(q.joins)],
  		group:       q.group[:len(q.group):len(q.group)],
  		having:      q.having[:len(q.having):len(q.having)],
  		order:       q.order[:len(q.order):len(q.order)],
  		onConflict:  q.onConflict,
  		returning:   q.returning[:len(q.returning):len(q.returning)],
  		limit:       q.limit,
  		offset:      q.offset,
  		selFor:      q.selFor,
  	}
  
  	return copy
  }
docs: // Copy returns copy of the Query.