code: func (q *Query) Insert(values ...interface{}) (Result, error) {
  	if q.stickyErr != nil {
  		return nil, q.stickyErr
  	}
  
  	model, err := q.newModel(values...)
  	if err != nil {
  		return nil, err
  	}
  
  	if q.model != nil && q.model.Table().HasFlag(BeforeInsertHookFlag) {
  		err = q.model.BeforeInsert(q.ctx, q.db)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	query := newInsertQuery(q)
  	res, err := q.returningQuery(model, query)
  	if err != nil {
  		return nil, err
  	}
  
  	if q.model != nil {
  		err = q.model.AfterInsert(q.ctx, q.db)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	return res, nil
  }
docs: // Insert inserts the model.