On Mon, Dec 14, 2020 at 6:34 AM Rodrigo Rosenfeld Rosas <[email protected]>
wrote:

> Hi, today I've faced something unexpected.
>
> I've changed one library to increment the model's version and in some code
> using the library, I was comparing the version and the expected failed
> wasn't matching.
>
> Then I noticed that when we do:
>
> model.update version: Sequel.lit('version + ')
>
> Then model.version won't reflect the computed version after the update
> statement.
>
> This is unexpected because I'd assume all around that calling
> model.version would always retrieve the actual value of the field. What
> would be the recommended Sequel way to deal with that? Avoid using literal
> when using the update instance method? Are there any refresh-like methods
> that would only refresh a single column (or a set of columns)?
>

Model instances deal only with values, not with SQL expressions, and a
literal string is an SQL expression.  To deal with SQL expressions, you
should to drop down to dataset level, and Model#this returns a dataset for
the specific instance:

  model.this.update version: Sequel.lit('version + 1')

Currently, Sequel doesn't offer support for refreshing single columns in
model objects.  If the database supports UPDATE RETURNING, you could do:

  model.values[:version] = model.this.returning(:version).update(version:
Sequel.lit('version + 1'))[0][:version]

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/CADGZSScM2aDH3OoP1tkrd%2BSB%2ByzOwg%3DipxDQzZvTGB8XdOCyGA%40mail.gmail.com.

Reply via email to