@@ -158,6 +158,10 @@ func (s *Store) Insert(schema Schema, record Record) error {
158158 return err
159159 }
160160
161+ virtualCols , virtualColValues := virtualColumns (record , cols )
162+ cols = append (cols , virtualCols ... )
163+ values = append (values , virtualColValues ... )
164+
161165 builder := s .builder .
162166 Insert (schema .Table ()).
163167 Columns (cols ... ).
@@ -213,6 +217,10 @@ func (s *Store) Update(schema Schema, record Record, cols ...SchemaField) (int64
213217 return 0 , err
214218 }
215219
220+ virtualCols , virtualColValues := virtualColumns (record , columnNames )
221+ columnNames = append (columnNames , virtualCols ... )
222+ values = append (values , virtualColValues ... )
223+
216224 var clauses = make (map [string ]interface {}, len (cols ))
217225 for i , col := range columnNames {
218226 clauses [col ] = values [i ]
@@ -418,3 +426,29 @@ type RecordWithSchema struct {
418426 Schema Schema
419427 Record Record
420428}
429+
430+ func virtualColumns (r Record , columns []string ) (cols []string , vals []interface {}) {
431+ c , ok := r .(VirtualColumnContainer )
432+ if ! ok {
433+ return
434+ }
435+
436+ vcols := c .getVirtualColumns ()
437+ for col , val := range vcols {
438+ if ! containsString (columns , col ) {
439+ cols = append (cols , col )
440+ vals = append (vals , val )
441+ }
442+ }
443+
444+ return
445+ }
446+
447+ func containsString (strs []string , str string ) bool {
448+ for _ , s := range strs {
449+ if s == str {
450+ return true
451+ }
452+ }
453+ return false
454+ }
0 commit comments