Hi out there,
I experienced Problems when I tried to save a Sequel::Model
ERROR database: ERROR: currval of sequence "schedules_id_seq" is not yet defined in this session
The model schema is:
set_schema do
serial :id, :primary_key => true
varchar :state, :default => 'running'
timestamp :starts_at
timestamp :stops_at
integer :aberrate_with
integer :dispersal_shift
end
During testing I always recreate the models table.
Also I cant figure out how to limit varchars...
Sincerely
Florian
Huh, did some hacking... to fix this problem I changed the sequel/postgres.rb code a bit:
@L167:
# See: PostgreSQL: Documentation: 8.2: INSERT
RETURNING = " RETURNING (%s)".freeze
# Initializes and returns @table_sequence
def table_sequences
# define default procedure for missing keys (tables) that fetches the pkey
@table_sequences ||= Hash.new do |sequences, table|
# this is not threadsafe but the results shouldn't differ
@pool.hold { |conn| sequences[table] = conn.pkey_and_sequence(table).first }
sequences[table]
end
end
# Ahh, protect this Method... *paranoia*
protected :table_sequences
def execute_insert(sql, table)
# add RETURNING statement to sql
sql << RETURNING % table_sequences[table]
@logger.info(sql) if @logger
# this is not nice
@pool.hold do |conn|
result = conn.execute sql
id = result[0][0].to_i and result.clear
id
end
rescue => e
@logger.error(e.message) if @logger
raise e
end
@L1: I'd replace:
if !Object.const_defined?('Sequel')
require File.join(File.dirname(__FILE__), '../sequel')
end
with:
require File.join(File.dirname(__FILE__), '../sequel')
since Ruby itself checks whether a file is already required...
Another question:
Is PGconn the right place for the @table_sequences cache? I'd place it in the Sequel::Postgres module...
Sincerely
Florian
···
Am 05.06.2007 um 00:09 schrieb Florian Aßmann:
Hi out there,
I experienced Problems when I tried to save a Sequel::Model
ERROR database: ERROR: currval of sequence "schedules_id_seq" is not yet defined in this session
The model schema is:
set_schema do
serial :id, :primary_key => true
varchar :state, :default => 'running'
timestamp :starts_at
timestamp :stops_at
integer :aberrate_with
integer :dispersal_shift
end
During testing I always recreate the models table.
Also I cant figure out how to limit varchars...
Sincerely
Florian
Not that I mind, but you mind get a better response on the Sequel
mailing list: http://groups.google.com/group/sequel-talk
···
On Jun 4, 7:01 pm, Florian Aßmann <florian.assm...@email.de> wrote:
Huh, did some hacking... to fix this problem I changed the sequel/
postgres.rb code a bit:
@L167:
# See:PostgreSQL: Documentation: 8.2: INSERT
RETURNING = " RETURNING (%s)".freeze
# Initializes and returns @table_sequence
def table_sequences
# define default procedure for missing keys (tables) that
fetches the pkey
@table_sequences ||= Hash.new do |sequences, table|
# this is not threadsafe but the results shouldn't differ
@pool.hold { |conn| sequences[table] = conn.pkey_and_sequence
(table).first }
sequences[table]
end
end
# Ahh, protect this Method... *paranoia*
protected :table_sequences
def execute_insert(sql, table)
# add RETURNING statement to sql
sql << RETURNING % table_sequences[table]
@logger.info(sql) if @logger
# this is not nice
@pool.hold do |conn|
result = conn.execute sql
id = result[0][0].to_i and result.clear
id
end
rescue => e
@logger.error(e.message) if @logger
raise e
end
@L1: I'd replace:
if !Object.const_defined?('Sequel')
require File.join(File.dirname(__FILE__), '../sequel')
end
with:
require File.join(File.dirname(__FILE__), '../sequel')
since Ruby itself checks whether a file is already required...
Another question:
Is PGconn the right place for the @table_sequences cache? I'd place
it in the Sequel::Postgres module...
Sincerely
Florian
Am 05.06.2007 um 00:09 schrieb Florian Aßmann:
> Hi out there,
> I experienced Problems when I tried to save a Sequel::Model
> ERROR database: ERROR: currval of sequence "schedules_id_seq" is
> not yet defined in this session
> The model schema is:
> set_schema do
> serial :id, :primary_key => true
> varchar :state, :default => 'running'
> timestamp :starts_at
> timestamp :stops_at
> integer :aberrate_with
> integer :dispersal_shift
> end
> During testing I always recreate the models table.
> Also I cant figure out how to limit varchars...
> Sincerely
> Florian