Hi!

I have a model "Adherent" correspondint to a table "adherents" in my 
Postgres database. In this table, when I create a row from my app, I want 
to set the "creator_id" column to same value as id. With Sequel the 
folowing intruction works ok

DB[:adherents].insert(:name => "foo", :creator_id => 
Sequel.function("currval","adherents_id_seq"))

But this one does fail:
Adherent.new(:name => "foo", :creator_id => 
Sequel.function("currval","adherents_id_seq"))

This fail at validation, because the sequel function object is not an 
integer as expected.

To bypass validation, I affect the value in the "before_create" hook:
def before_create
    super
    self.creator_id ||= Sequel.lit("currval('adherents_id_seq')")
end

This is also failing 
using Sequel.lit("currval('adherents_id_seq')") the error is:
ERROR -- : PG::InvalidTextRepresentation: ERREUR:  syntaxe en entrée 
invalide pour le type integer : « currval('adherents_id_seq') »
using Sequel.function("currval","adherents_id_seq") the error is:
ERREUR:  syntaxe en entrée invalide pour le type integer : « 
#<Sequel::SQL::Function:0x000055f8811d3fd8> » 
(PG::InvalidTextRepresentation)

I feel this is because of the auto-generated PREPARE statement
PREPARE smpsp_1 AS INSERT INTO "adherents" ("name", "creator_id") VALUES 
($1, $2) RETURNING "id", "prenom", "nom", "annee_naissance", "email", 
"tel_portable", "motivations", "commentaires", "echeance_SEPA", 
"envoi_papier", "adresse_id", "premiere_adhesion", "stop_relance", 
"perdu_trace", "updated_at", "created_at", "titre", "date_naissance", 
"sceau", "creator_id", "updater_id"

the $2 variable should not be declared, instead it should be written the 
raw sql 
currval('adherents_id_seq')

When using a Sequel::Model instance, is there a way to put a sql function 
as a value for a given field ?

Thanks for your help.

-- 
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 sequel-talk+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/7fe3f217-a70a-488d-86e8-6b2e44d79efcn%40googlegroups.com.

Reply via email to