NAME
DBIx::SQLEngine::Record::Base - Base Class for Records
SYNOPSIS
Setup: Several ways to create a class.
my $sqldb = DBIx::SQLEngine->new( ... );
$class_name = $sqldb->record_class( $table_name );
$sqldb->record_class( $table_name, $class_name);
package My::Record;
use DBIx::SQLEngine::Record::Class '-isasubclass';
My::Record->table( $sqldb->table($table_name) );
Basics: Common operations on a record.
$record = $class_name->fetch_record( $primary_key );
@records = $class_name->fetch_select(%clauses)->records;
$record = $class_name->new_with_values(somefield => 'My Value');
print $record->get_values( 'somefield' );
$record->change_values( somefield => 'New Value' );
$record->insert_record();
$record->update_record();
$record->delete_record();
Schema: Access to table and columns.
unless ( $class_name->table_exists ) {
$class_name->table->create_table( { name => 'id', type => 'int'} );
}
DESCRIPTION
This package is not yet complete.
DBIx::SQLEngine::Record::Base is a superclass for database records in tables accessible via DBIx::SQLEngine.
By subclassing this package, you can easily create a class whose instances represent each of the rows in a SQL database table.
TABLE INTERFACE
Each record class is associated with a table object. The table provides the DBI connection and SQL execution capabilities required to talk to the remote data storage.
Table Accessor
- table()
-
$class_name->table() : $table $class_name->table($table)Get and set our current DBIx::SQLEngine::Schema::Table. Required value. Establishes the table a specific class of record will be stored in.
- get_table()
-
$class_name->get_table() : $table or exceptionReturns the table, or throws an exception if it is not set.
Table Delegation Methods
These methods all call the same method on the associated table.
- detect_sqlengine()
-
$class_name->detect_sqlengine : $flagDetects whether the SQL database is avaialable by attempting to connect.
- table_exists()
-
$class_name->table_exists : $flagDetects whether the table has been created and has not been dropped.
- columnset()
-
$class_name->columnset () : $columnsetReturns the current columnset, if any.
- fetch_one_value()
-
$class_name->fetch_one_value( %sql_clauses ) : $scalarCalls fetch_select, then returns the first value from the first row of results.
- count_rows()
-
$class_name->count_rows ( ) : $number $class_name->count_rows ( $criteria ) : $numberReturn the number of rows in the table. If called with criteria, returns the number of matching rows.
SIMPLE RECORD INTERFACE
Constructor
You may create your own records for new instances, or fetch records from the database as described in "FETCHING DATA (SQL DQL)"
- new_empty_record()
-
$class_name->new_empty_record() : $empty_recordCreates and blesses an empty hash object into the given record class.
- new_with_values()
-
$class_name->new_with_values ( %key_argument_pairs ) : $recordCalls new_empty_record, and then change_values.
- new_copy()
-
$record->new_copy() : $new_record $record->new_copy( %key_argument_pairs ) : $new_recordMakes a copy of a record and then clears its primary key so that it will be recognized as a distinct, new row in the database rather than overwriting the original when you save it. Also includes any provided arguments in its call to new_with_values.
Simple Fetch and Save
These methods hide the distinctions between fetch/create and insert/update.
- get_record()
-
$class_name->get_record ( ) : $new_empty_record $class_name->get_record ( $p_key ) : $fetched_record_or_undefCalls new if no primary key is provided, or if the primary key is zero; otherwise calls fetch_record.
- save_record()
-
$record->save_record () : $record_or_undefDetermines whether the record has an primary key assigned to it and then calls either insert_record or update_record. Returns the record unless it fails to save it.
Getting and Changing Values
Records are stored as simple hashes, and their contents can be accessed that way, but methods are also available to get and set field values.
- get_values()
-
$record->get_values( key1 ) : $value $record->get_values( key1, key2, ... ) : $values_joined_with_comma $record->get_values( key1, key2, ... ) : @valuesReturns the values associated with the keys in the provided record.
- change_values()
-
$record->change_values( key1 => value1, ... )Sets the associated key-value pairs in the provided record.
Change and Save Combinations
- change_and_save()
-
$record->change_and_save ( %key_argument_pairs ) : $recordCalls change_values, and then save_record.
- new_and_save()
-
$class_name->new_and_save ( %key_argument_pairs ) : $recordCalls new_empty_record, and then change_and_save.
Destruction
- DESTROY()
-
$record->DESTROY()For internal use only. Does nothing. Subclasses can override this with any functions they wish called when an individual record is being garbage collected.
FETCHING DATA (SQL DQL)
Select to Retrieve Records
- fetch_select()
-
$class_name->fetch_select ( %select_clauses ) : $record_setCalls the corresponding SQLEngine method with the table name and the provided arguments. Return rows from the table that match the provided criteria, and in the requested order, by executing a SQL select statement.
Each row hash is blessed into the record class before being wrapped in a Record::Set object.
- fetch_one_record()
-
$sqldb->fetch_one_record( %select_clauses ) : $record_hashCalls fetch_select, then returns only the first row of results.
The row hash is blessed into the record class before being returned.
- select_record()
-
$class_name->select_record ( $primary_key_value ) : $record_obj $class_name->select_record ( \@compound_primary_key ) : $record_obj $class_name->select_record ( \%hash_with_primary_key_value ) : $record_objFetches a single record by primary key.
The row hash is blessed into the record class before being returned.
- select_records()
-
$class_name->select_records ( @primary_key_values_or_hashrefs ) : $record_setFetches a set of one or more by primary key.
Each row hash is blessed into the record class before being wrapped in a Record::Set object.
- visit_select()
-
$class_name->visit_select ( $sub_ref, %select_clauses ) : @results $class_name->visit_select ( %select_clauses, $sub_ref ) : @resultsCalls the provided subroutine on each matching record as it is retrieved. Returns the accumulated results of each subroutine call (in list context).
Each row hash is blessed into the record class before being the subroutine is called.
Vivifying Records From The Database
These methods are called internally by the various select methods and do not need to be called directly.
- record_from_table()
-
$class_name->record_from_table( $hash_ref ) $class_name->record_from_table( $hash_ref ) : $record $class_name->record_from_table( %hash_contents ) : $recordConverts a hash retrieved from the table to a Record object.
- record_set_from_table()
-
$class_name->record_set_from_table( $hash_array_ref ) $class_name->record_set_from_table( $hash_array_ref ) : $record_set $class_name->record_set_from_table( @hash_refs ) : $record_setConverts an array of hashrefs retrieved from the table to a Record::Set object containing Record objects.
EDITING DATA (SQL DML)
Insert to Add Records
After constructing a record with one of the new_*() methods, you may save any changes by calling insert_record.
- insert_record()
-
$record_obj->insert_record() : $flagAdds the values from this record to the table. Returns the number of rows affected, which should be 1 unless there's an error.
Update to Change Records
After retrieving a record with one of the fetch methods, you may save any changes by calling update_record.
- update_record()
-
$record_obj->update_record() : $record_countAttempts to update the record using its primary key as a unique identifier. Returns the number of rows affected, which should be 1 unless there's an error.
Delete to Remove Records
- delete_record()
-
$record_obj->delete_record() : $record_countDelete this existing record based on its primary key. Returns the number of rows affected, which should be 1 unless there's an error.
SEE ALSO
For more about the Record classes, see DBIx::SQLEngine::Record::Class.
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.