NAME

DBIx::SQLEngine::Default - Core SQLEngine methods

SYNOPSIS

# This module is loaded by DBIx::SQLEngine; do not use it directly.
my $db = DBIx::SQLEngine->new( $DBIConnectionString );

$datasource->do_insert(
  table => 'students', 
  values => { 'name'=>'Dave', 'age'=>'19', 'status'=>'minor' },
);

$hash_ary = $datasource->fetch_select( 
  table => 'students' 
  criteria => { 'status'=>'minor' },
);

$datasource->do_update( 
  table => 'students', 
  criteria => 'age > 20' 
  values => { 'status'=>'adult' },
);

$datasource->do_delete(
  table => 'students', 
  criteria => { 'name'=>'Dave' },
);

DESCRIPTION

Each DBIx::SQLEngine object is a wrapper around a DBI database handle.

PUBLIC INTERFACE

The public interface described below is shared by all SQLEngine subclasses. To facilitate cross-platform subclassing, these methods are implemented by calling combinations of other methods described in the INTERNALS sections below.

Object Creation

Create one SQLEngine for each DBI datasource you will use.

new
DBIx::SQLEngine->new( $DBIConnectionString ) : $sqldb
DBIx::SQLEngine->new( $DBIConnectionString, $user, $pass, $args ) : $sqldb

Accepts the same arguments as the standard DBI connect method.

DBILogging
$sqldb->DBILogging : $value
$sqldb->DBILogging( $value )

Global. Set this to a true value to turn on logging.

log_connect
$sqldb->log_connect ( $dsn )

Writes out connection logging message.

Retrieving Data

fetch_select
$sqldb->fetch_select( %sql_clauses ) : $row_hashes
$sqldb->fetch_select( %sql_clauses ) : ( $row_hashes, $column_hashes )

Retrieve rows from the datasource as an array of hashrefs. If called in a list context, also returns an array of hashrefs containing information about the columns included in the result set.

visit_select
$sqldb->visit_select( $code_ref, %sql_clauses ) : @results

Retrieve rows from the datasource as a series of hashrefs, and call the user provided function for each one. Returns the results returned by each of those function calls. This can allow for more efficient processing if you are processing a large number of rows and do not need to keep them all in memory.

fetch_one_row
$sqldb->fetch_one_row( %sql_clauses ) : $row_hash

Calls fetch_select, then returns only the first row of results.

fetch_one_value
$sqldb->fetch_one_value( %sql_clauses ) : $scalar

Calls fetch_select, then returns a single value from the first row of results.

Updating Data

do_insert
$sqldb->do_insert( %sql_clauses ) 

Insert a single row into a table in the datasource.

do_update
$sqldb->do_update( %sql_clauses ) 

Modify one or more rows in a table in the datasource.

do_delete
$sqldb->do_delete( %sql_clauses ) 

Delete one or more rows in a table in the datasource.

DBH METHODS

The following methods manage the DBI database handle through which we communicate with the datasource.

_init
$sqldb->_init () 

Called by DBIx::AnyDBD after connection is made and class hierarch has been juggled.

reconnect
$sqldb->reconnect () 

Attempt to re-establish connection with original parameters

DBH Access

get_dbh
$sqldb->get_dbh () : $dbh

Get the current DBH

check_or_reconnect
$sqldb->check_or_reconnect () : $dbh

Incomplete. Subclass hook. Get the current DBH or reconnect.

STH METHODS

The following methods manipulate DBI statement handles as part of processing queries and their results.

Query Execution

$db->do_sql('insert into table values (?, ?)', 'A', 1);
my $rows = $db->fetch_sql('select * from table where status = ?', 2);

This is the public interface for accessing data through the SQLEngine.

do_sql
$sqldb->do_sql ($sql, @params) : ()

Execute a SQL query by sending it to the DBI connection.

fetch_sql
$sqldb->fetch_sql ($sql, @params) : ( $row_hash_ary, $columnset )

Similar to do_sql, but returns any rows that were produced.

visit_sql
$sqldb->visit_sql ($coderef, $sql, @params) : ()

Similar to fetch_sql, but calls your coderef on each row, rather than returning them.

Error Handling

try_query
$sqldb->try_query ( $sql, \@params, $result_method, @result_args ) : @results

Error handling wrapper around execute_query.

try_query
$sqldb->catch_query_exception ( $exception, $sql, \@params, $result_method, @result_args ) : $resolution

Subclass hook. Exceptions are passed to catch_query_exception; if it returns "REDO" the query will be retried up to five times.

Logging

DBILogging
$sqldb->DBILogging : $value
$sqldb->DBILogging( $value )

Global. Set this to a true value to turn on logging.

log_start
$sqldb->log_start( $sql ) : $timer

Called at start of query execution.

log_stop
$sqldb->log_stop( $timer ) : ()

Called at end of query execution.

Statement Handle Lifecycle

These are internal methods for query operations

execute_query
$sqldb->execute_query($sql, \@params, $result_method, @result_args) : @results
prepare_execute
$sqldb->prepare_execute ($sql, @params) : $sth

Prepare, bind, and execute a SQL statement.

done_with_query
$sqldb->done_with_query ($sth) : ()

Called when we're done with the $sth.

Retrieving Rows from a Statement

do_nothing
$sqldb->do_nothing ($sth) : ()

Does nothing.

fetchall_arrayref
$sqldb->fetchall_arrayref ($sth) : $array_of_arrays

Calls the STH's fetchall_arrayref method to retrieve all of the result rows into an array of arrayrefs.

fetchall_hashref
$sqldb->fetchall_hashref ($sth) : $array_of_hashes

Calls the STH's fetchall_arrayref method with an empty hashref to retrieve all of the result rows into an array of hashrefs.

fetchall_hashref_columns
$sqldb->fetchall_hashref ($sth) : $array_of_hashes, $column_info

Calls the STH's fetchall_arrayref method with an empty hashref, and also retrieves information about the columns used in the query result set.

visitall_hashref
$sqldb->visitall_hashref ($sth, $coderef) : ()

Calls coderef on each row with values as hashref; does not return them.

visitall_array
$sqldb->visitall_array ($sth, $coderef) : ()

Calls coderef on each row with values as list; does not return them.

Retrieving Columns from a Statement

retrieve_columns
$sqldb->retrieve_columns ($sth) : $columnset

Obtains information about the columns used in the result set.

column_type_codes
$sqldb->column_type_codes - Standard::Global:hash

Maps the ODBC numeric constants used by DBI to the names we want to use for simplified internal representation.

To Do: this should probably be using DBI's type_info methods.

SQL METHODS

The various sql_* methods below each accept a hash of arguments and combines then to return a SQL statement and corresponding parameters. Data for each clause of the statement is accepted in a variety of formats to facilitate query abstraction.

Each method also supports passing arbitrary queries through.

Select

sql_select
$sqldb->sql_select ( %CLAUSES ) : $sql_stmt, @params

Generate a SQL select statement. If provided, the criteria are used to generate a where clause using sql_where.

The following argument clauses are supported:

sql

Optional; overrides all other arguments. May contain a plain SQL statement to be executed, or a reference to an array of a SQL statement followed by parameters for embedded placeholders.

table or tables

Required. The name of the tables to select from.

columns

Optional; defaults to '*'. May contain a comma-separated string of column names, or an reference to an array of column names, or a reference to an object with a "column_names" method.

criteria

Optional. If the criteria is one of the DBO::Criteria objects, its sql() expression will be used. Criteria are blessed hashes of { 'key'=> word, 'match'=> text, 'value'=> ref_val }; see DBO::Criteria for details.

order

Optional. May contain a comma-separated string of column names or experessions, optionally followed by "DESC", or an reference to an array of the same.

group

Optional. May contain a comma-separated string of column names or experessions, or an reference to an array of the same.

Insert

sql_insert
$sqldb->sql_insert ( %CLAUSES ) : $sql_stmt

Generate a SQL insert statement.

The following argument clauses are supported:

sql

Optional; overrides all other arguments. May contain a plain SQL statement to be executed, or a reference to an array of a SQL statement followed by parameters for embedded placeholders.

table

Required. The name of the table to insert into.

columns

Optional; defaults to '*'. May contain a comma-separated string of column names, or an reference to an array of column names, or a reference to a hash whose keys contain the column names, or a reference to an object with a "column_names" method.

values

Required. May contain a string with one or more comma-separated quoted values or expressions in SQL format, or a reference to an array of values to insert in order, or a reference to a hash whose values are to be inserted.

Update

sql_update
$sqldb->sql_update ( %CLAUSES ) : $sql_stmt

Generate a SQL update statement. The criteria are used to generate a where clause using sql_where.

The following argument clauses are supported:

sql

Optional; overrides all other arguments. May contain a plain SQL statement to be executed, or a reference to an array of a SQL statement followed by parameters for embedded placeholders.

table

Required. The name of the table to insert into.

columns

Optional; defaults to '*'. May contain a comma-separated string of column names, or an reference to an array of column names, or a reference to a hash whose keys contain the column names, or a reference to an object with a "column_names" method.

values

Required. May contain a string with one or more comma-separated quoted values or expressions in SQL format, or a reference to an array of values to insert in order, or a reference to a hash whose values are to be inserted.

criteria

Optional, but remember that ommitting this will cause all of your rows to be updated! If the criteria is one of the DBO::Criteria objects, its sql() expression will be used. Criteria are blessed hashes of { 'key'=> word, 'match'=> text, 'value'=> ref_val }; see DBO::Criteria for details.

Delete

sql_delete
$sqldb->sql_delete ( %CLAUSES ) : $sql_stmt

Generate a SQL delete statement. The criteria are used to generate a where clause using sql_where.

The following argument clauses are supported:

sql

Optional; overrides all other arguments. May contain a plain SQL statement to be executed, or a reference to an array of a SQL statement followed by parameters for embedded placeholders.

table

Required. The name of the table to insert into.

criteria

Optional, but remember that ommitting this will cause all of your rows to be updated! If the criteria is one of the DBO::Criteria objects, its sql() expression will be used. Criteria are blessed hashes of { 'key'=> word, 'match'=> text, 'value'=> ref_val }; see DBO::Criteria for details.

Data Definition

sql_create_table
$sqldb->sql_create_table ($tablename, $columns) : $sql_stmt

Generate a SQL create-table statement based on the column information. Text columns are checked with sql_create_column_text_length() to provide server-appropriate types.

sql_drop_table
$sqldb->sql_drop_table ($tablename) : $sql_stmt

Server-Specific SQL

sql_create_column_text_length
$sqldb->sql_create_column_text_length ( $length ) : $col_type_str

Returns varchar(length) for values under 256, otherwise calls sql_create_column_text_long_type.

sql_create_column_text_long_type
$sqldb->sql_create_column_text_long_type () : $col_type_str

Fails with message "DBMS-Specific Function".

Subclasses should, based on the datasource's server_type, return the appropriate type of column for long text values, such as "BLOB", "TEXT", "LONGTEXT", or "MEMO".

sql_escape_text_for_like
$sqldb->sql_escape_text_for_like ( $text ) : $escaped_expr

Fails with message "DBMS-Specific Function".

Subclasses should, based on the datasource's server_type, protect a literal value for use in a like expression.

SQL Logging

SQLLogging
$sqldb->SQLLogging () : $value 
$sqldb->SQLLogging( $value )

Global. Set this to a true value to turn on logging.

log_sql
$sqldb->log_sql( $sql ) : ()

Called when SQL is generated.

SEE ALSO

DBIx::SQLEngine