DBIx::DataModel::Doc::Internals(3p)

NAME
DBIx::DataModel::Doc::Internals - Description of the internal structure

DOCUMENTATION CONTEXT
This chapter is part of the "DBIx::DataModel" manual.

•   SYNOPSIS AND DESCRIPTION

•   DESIGN

•   QUICKSTART

•   REFERENCE

•   MISC

•   INTERNALS

•   GLOSSARY

This chapter documents some details that normally should not be relevant to clients; you only want to read about them if you intend to extend the framework.

PRIVATE METHODS

  _setClassData
  DBIx::DataModel::Base->_setClassData($subclass, $data_ref);

  _createPackage
  DBIx::DataModel::Schema->_createPackage($pckName, $isa_arrayref);

Creates a new Perl package of name $pckName that inherits from @$isa_arrayref. Raises an exception if the package name already exists.

  _defineMethod
  DBIx::DataModel::Schema->_defineMethod($pckName, $methName, $coderef);

Defines a new method in package $pckName, bound to $coderef; or undefines a method if $coderef is "undef". Raises an exception if the method name already exists in that package.

  _rawInsert
  $obj->_rawInsert;

Internal implementation for insertions into the database : takes keys and values within %$obj, generates SQL for insertion of those values into "$obj->dbTable", and executes it. Never called directly, but used by the protected method _singleInsert.

"PROTECTED" METHODS

  _singleInsert
  $obj->_singleInsert;

Implementation for inserting a record into the database; should never be called directly, but is used as a backend by the insert method.

This method receives an object blessed into some table class; the object hash should only contain keys and values to be directly inserted into the database, i.e. the "noUpdateColumns" and all references to foreign objects should have been removed already (this is the job of the insert method). The method calls _rawInsert for performing the database update, and then makes sure that the object contains its own key (if not supplied by the client code, for example when keys are auto-generated by the database).

In the default implementation, getting the key is done by calling DBI's last_insert_id() whenever necessary. This may or may not be meaningful, depending on your database driver. The four arguments required by "last_insert_id" are supplied as follows : catalog and schema names are taken from options given to "Schema->dbh(...)" (or "undef" otherwise), table and column names are taken from the object's database table and primary key, as declared in "Schema->Table(...)".

You may redeclare "_singleInsert" in your own table classes, for example if you need to compute a key, or construct it from other fields.

The scalar value returned by the method will in turn be returned by the insert method; usually this value if the primary key, if that key is on one single column.