DBIx::SQLEngine::Driver::Sybase - Extends SQLEngine for DBMS Idiosyncrasies


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

Index


Code Index:

NAME

Top

DBIx::SQLEngine::Driver::Sybase - Extends SQLEngine for DBMS Idiosyncrasies

SYNOPSIS

Top

DBI Wrapper: Adds methods to a DBI database handle.

  my $sqldb = DBIx::SQLEngine->new( 'dbi:Sybase:server=MyServer' );

Portability Subclasses: Uses driver's idioms or emulation.

  $sqldb->do_insert(                          # use identity 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 Sybase's idiosyncrasies.

Under Development

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

The SQLEngine framework doesn't yet have a strategy or interface for dealing with one of the limitations of DBD::Sybase: each connection can only have one statement handle active. If AutoCommit is on, then it silently opens up another database handle for each additional statement handle. However, transactions can't span connections, so if AutoCommit is off, it dies with this message: DBD::Sybase: Can't have multiple statement handles on a single database handle when AutoCommit is OFF.

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::Sybase.

About DBMS Flavors

This driver uses the DatabaseFlavors trait. For more information, see DBIx::SQLEngine::Driver::Trait::DatabaseFlavors.

It does this in order to support use of DBD::Sybase with Microsoft SQL Server. For more information, see DBIx::SQLEngine::Driver::Sybase::MySQL.

FETCHING DATA (SQL DQL)

Top

Methods Used By Complex Queries

sql_limit()

Not yet supported.

See http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.12

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 Sybase's "select @@IDENTITY".

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.

For more information see http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.9

DEFINING STRUCTURES (SQL DDL)

Top

Column Type Methods

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

Implemented using Sybase's blob and identity types.

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

Implemented using Sybase's blob type.

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::Sybase;

use strict;
use Carp;

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

use DBIx::SQLEngine::Driver::Trait::DatabaseFlavors ':all';

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

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

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, $table, $field) = @_;
  $self->fetch_one_value( 
    sql => 'select @@IDENTITY AS lastID'
  );
}

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

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

sub dbms_create_column_types {
  'sequential' => 'numeric(5,0) identity', 
  'binary' => 'blob',
}

sub dbms_create_column_text_long_type {
  'blob'
}

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

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

1;