DBIx::SQLEngine::Driver::Informix - Support DBD::Informix and DBD::ODBC/Informix


DBIx-SQLEngine documentation Contained in the DBIx-SQLEngine distribution.

Index


Code Index:

NAME

Top

DBIx::SQLEngine::Driver::Informix - Support DBD::Informix and DBD::ODBC/Informix

SYNOPSIS

Top

DBI Wrapper: Adds methods to a DBI database handle.

  my $sqldb = DBIx::SQLEngine->new( 'dbi:Informix:test_data@my_server' );

Portability Subclasses: Uses driver's idioms or emulation.

  $sqldb->do_insert(                          # use SERIAL column
    table => 'students', sequence => 'id',        
    values => { 'name'=>'Dave', 'age'=>'19', 'status'=>'minor' },
  );




DESCRIPTION

Top

This package provides a subclass of DBIx::SQLEngine which compensates for Informix's idiosyncrasies.

About Driver Subclasses

You do not need to use this package directly; when you connect to a database, the SQLEngine object is automatically re-blessed in to the appropriate subclass.

For more information about the underlying driver class, see DBD::Informix.

Under Development

Note that this driver class has been added recently and not yet tested in real-world conditions.

To Do: Add missing functionality from related CPAN modules. See DBD::Informix::Summary, DBIx::SearchBuilder::Handle::Informix and maybe Dimedis::SqlDriver::Informix.

FETCHING DATA (SQL DQL)

Top

Methods Used By Complex Queries

sql_limit()

Not yet supported. Perhaps we should use "first $maxrows" and throw out the first $offset?

EDITING DATA (SQL DML)

Top

Insert to Add Data

do_insert_with_sequence()
  $sqldb->do_insert_with_sequence( $sequence_name, %sql_clauses ) : $row_count

Implemented using _seq_do_insert_postfetch and seq_fetch_current.

seq_fetch_current()
  $sqldb->seq_fetch_current( ) : $current_value

Implemented using DBD::Informix's ix_sqlerrd attribute.

Note that this doesn't fetch the current sequence value for a given table, since it doesn't respect the table and field arguments, but merely returns the last sequencial value created during this session.

DEFINING STRUCTURES (SQL DDL)

Top

Column Type Methods

dbms_create_column_types()
  $sqldb->dbms_create_column_types () : %column_type_codes

Implemented using Informix's byte and SERIAL types.

dbms_create_column_text_long_type()
  $sqldb->dbms_create_column_text_long_type () : $col_type_str

Implemented using Informix's text type.

ADVANCED CAPABILITIES

Top

Call, Create and Drop Stored Procedures

fetch_storedproc()
  $sqldb->fetch_storedproc( $proc_name, @arguments ) : $rows

Calls fetch_sql with "execute procedure", the procedure name, and the arguments using placeholders.

do_storedproc()
  $sqldb->do_storedproc( $proc_name, @arguments ) : $row_count

Calls do_sql with "execute procedure", the procedure name, and the arguments using placeholders.

create_storedproc()
  $sqldb->create_storedproc( $proc_name, $definition )

Calls do_sql with "create procedure", the procedure name, and the definition.

drop_storedproc()
  $sqldb->drop_storedproc( $proc_name )

Calls do_sql with "drop procedure" and the procedure name.

SEE ALSO

Top

See DBIx::SQLEngine for the overall interface and developer documentation.

See DBIx::SQLEngine::Docs::ReadMe for general information about this distribution, including installation and license information.


DBIx-SQLEngine documentation Contained in the DBIx-SQLEngine distribution.
########################################################################

package DBIx::SQLEngine::Driver::Informix;

use strict;
use Carp;

########################################################################

########################################################################

sub sql_limit {
  confess("Not yet supported")
}

########################################################################

########################################################################

# $rows = $self->do_insert_with_sequence( $sequence, %clauses );
sub do_insert_with_sequence {
  (shift)->_seq_do_insert_postfetch( @_ )
}

# $current_id = $sqldb->seq_fetch_current( );
sub seq_fetch_current {
  my $self = shift;
  
  $self->get_dbh->{ix_sqlerrd}[1]
}

########################################################################

########################################################################

sub dbms_create_column_types {
  'sequential' => 'SERIAL', 
  'binary' => 'byte',
}

sub dbms_create_column_text_long_type {
  'text'
}

########################################################################

########################################################################

sub fetch_storedproc  { 
  (shift)->fetch_sql( "execute procedure " . (shift) . 
		      "(" . join(', ', ('?') x scalar(@_) ) . ")", @_)
}
sub do_storedproc     { 
  (shift)->do_sql(    "execute procedure " . (shift) . 
		      "(" . join(', ', ('?') x scalar(@_) ) . ")", @_)
}
sub create_storedproc { 
  (shift)->do_sql( "create procedure $_[0] " . join("\n", @_ ) ) 
}
sub drop_storedproc   { 
  (shift)->do_sql( "drop procedure $_[0]" ) 
}

########################################################################

########################################################################

1;