Map any perl object as scalar dump via storable
use Tangram::Core; use Tangram::Type::Dump::Storable; # always $schema = Tangram::Schema->new( classes => { NaturalPerson => { fields => { storable => { diary => # diary is a perl hash { col => 'diarydata', sql => 'BLOB', indent => 0, terse => 1, purity => 0 }, lucky_numbers => 'int', # use defaults }
Maps arbitrary Perl data structures by serializing to a string representation. The persistent fields are grouped in a hash under the \*(C`storable\*(C' key in the field hash.
Serialization is done by Storable::freeze, which traverses the Perl data structure and creates a binary representation of it. The resulting string will be mapped to the \s-1DBMS\s0 as a scalar value. During restore, the scalar value will be restored with Storable::thaw to reconstruct the original data structure.
The structure should be able to contain pretty much anything that may be safely dumped by Storable. However, be aware that Tangram::Type::Dump::flatten() must be able to find the persistent objects in the field. Unless you're using classes that are implemented in C and contain other objects, you should be fine (Set::Object has a special work-around).
The field names are passed in a hash that associates a field name with a field descriptor. The field descriptor may be either a hash or a string. The hash uses the following fields:
col
sql
indent
terse
purity
The optional fields \*(C`col\*(C' and \*(C`sql\*(C' specify the column name and the column type for the scalar value in the database. If not present, \*(C`col\*(C' defaults to the field name and \*(C`sql\*(C' defaults to \s-1VARCHAR\s0(255). Values will be always quoted as they are passed to the database.
The remaining optional fields control the serialization process. They will be passed down to Data::Dumper as values to the corresponding Data::Dumper options. The default settings are: no indentation (\*(C`indent=0\*(C'), compact format (\*(C`terse=1\*(C'), and quick dump (\*(C`purity=0\*(C').
This mapping was contributed by Gabor Herr <[email protected]>