Method: Sequel::Dataset#update
- Defined in:
- lib/sequel/dataset/actions.rb
#update(values = OPTS, &block) ⇒ Object
Updates values for the dataset. The returned value is the number of rows updated. values should be a hash where the keys are columns to set and values are the values to which to set the columns.
DB[:table].update(x: nil) # UPDATE table SET x = NULL
# => 10
DB[:table].update(x: Sequel[:x]+1, y: 0) # UPDATE table SET x = (x + 1), y = 0
# => 10
Some databases support using multiple tables in an UPDATE query. This requires multiple FROM tables (JOINs can also be used). As multiple FROM tables use an implicit CROSS JOIN, you should make sure your WHERE condition uses the appropriate filters for the FROM tables:
DB.from(:a, :b).join(:c, :d=>Sequel[:b][:e]).where{{a[:f]=>b[:g], a[:id]=>10}}.
update(:f=>Sequel[:c][:h])
# UPDATE a
# SET f = c.h
# FROM b
# INNER JOIN c ON (c.d = b.e)
# WHERE ((a.f = b.g) AND (a.id = 10))
1021 1022 1023 1024 1025 1026 1027 1028 |
# File 'lib/sequel/dataset/actions.rb', line 1021 def update(values=OPTS, &block) sql = update_sql(values) if uses_returning?(:update) returning_fetch_rows(sql, &block) else execute_dui(sql) end end |