++ed by:

3 PAUSE users
7 non-PAUSE users.

Laurent Dami
and 1 contributors


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


This chapter is part of the DBIx::DataModel manual.

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.



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


  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.


  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.



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.




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.