NAME
SPOPS::DBI::InterBase -- InterBase-specific routines for the SPOPS::DBI
SYNOPSIS
# In your configuration:
'myspops' => {
'isa' => [ qw/ SPOPS::DBI::InterBase SPOPS::DBI / ],
# If you use a generator to create unique keys, set
# increment_field to a true value...
'increment_field' => 1,
# and set 'sequence_name' to the name of the generator
'sequence_name' => 'mygen',
# ...optionally, you can also specify the increment for the
# generated values (defaults to 1 if not specified)
'sequence_increment' => 4,
...
},
DESCRIPTION
This just implements some InterBase-specific routines so we can abstract them out.
The main one is to be able to utilize an existing generator
object for creating unique key values. We cannot use the same pattern as with Oracle/PostgreSQL sequences because there does not seem to be a way to retrieve the current (rather than next) value from a generator
object.
Therefore, we need to retrieve the next value from the database and use that in the INSERT. (This happens in the background, no worry to you.)
How to implement this:
CREATE TABLE my_table (
id int not null primary key,
...
);
CREATE GENERATOR my_generator;
You must to let this module know if you are using this option by setting in your class configuration the key 'increment_field' to a true value and also setting key 'sequence_name' to the name of your generator.
$spops = {
myobj => {
class => 'My::Object',
isa => [ qw/ SPOPS::DBI::InterBase SPOPS::DBI / ],
increment_field => 1,
sequence_name => 'my_generator',
...
},
};
The key 'sequence_name' rather than 'generator_name' is used to be compatible with other databases.
METHODS
sql_current_date()
Returns 'CURRENT_TIMESTAMP', used in InterBase to return the value for right now.
TODO: See how this is used and whether we need to add another methods for executing this as a standalone statement ('SELECT CURRENT_TIMESTAMP' on its own does not work.)
sql_case_insensitive()
Returns 'LIKE' right now, even though this does not seem to be correct.
TODO: See if there is a separate operator for case-insensitive matching.
sql_quote( $value, $data_type, [ $db_handle ] )
DBD::InterBase uses the type of a field if you are quoting values to put into a statement, so we override the default 'sql_quote' from SPOPS::SQLInterface to ensure the type of the field is used in the DBI->quote call.
The $data_type
should correspond to one of the DBI datatypes (see the file 'dbi_sql.h' in your Perl library tree for more info). If the DBI database handle $db_handle
is not passed in, we try to find it with the class method global_datasource_handle()
.
pre_fetch_id( \%params )
If 'increment_field' is not set we do not fetch an ID. If 'sequence_name' is not also set we do not fetch an ID. Otherwise we execute a statement like:
SELECT GEN_ID( $name, $increment ) FROM RDB$DATABASE
Where:
$name - Value of 'sequence_name'
$increment - Either 'sequence_increment' or 1
post_fetch_id( \%params )
Not used.
BUGS
Minimally tested, potentially with buggy InterBase knowledge.
TO DO
Nothing known.
SEE ALSO
COPYRIGHT
Copyright (c) 2002-2004 intes.net, inc.. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHORS
Chris Winters <chris@cwinters.com>