| Rose-DB-Object documentation | Contained in the Rose-DB-Object distribution. |
Rose::DB::Object::Metadata::Column::Bitfield - Bitfield column metadata.
use Rose::DB::Object::Metadata::Column::Bitfield; $col = Rose::DB::Object::Metadata::Column::Bitfield->new(...); $col->make_methods(...); ...
Objects of this class store and manipulate metadata for bitfield columns in a database. Column metadata objects store information about columns (data type, size, etc.) and are responsible for parsing, formatting, and creating object methods that manipulate column values.
This class inherits from Rose::DB::Object::Metadata::Column. Inherited methods that are not overridden will not be documented a second time here. See the Rose::DB::Object::Metadata::Column documentation for more information.
Important note: if you are using MySQL 5.0.3 or later, you must allow inline column values in any Rose::DB::Object-derived class that has one or more bitfield columns. (That is, columns that use the BIT data type.) This requirement may be relaxed in the future.
get_setgetget_setSee the Rose::DB::Object::Metadata::Column documentation for an explanation of this method map.
Get or set the number of bits in the column.
Convert VALUE to the equivalent Bit::Vector object. The return value of the column object's bits() method is used to determine the length of the bitfield in bits. DB is a Rose::DB object that is used as part of the parsing process. Both arguments are required.
Returns "bitfield".
John C. Siracusa (siracusa@gmail.com)
Copyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Rose-DB-Object documentation | Contained in the Rose-DB-Object distribution. |
package Rose::DB::Object::Metadata::Column::Bitfield; use strict; use Rose::Object::MakeMethods::Generic; use Rose::DB::Object::MakeMethods::Generic; use Rose::DB::Object::Metadata::Column; our @ISA = qw(Rose::DB::Object::Metadata::Column); our $VERSION = '0.788'; __PACKAGE__->add_common_method_maker_argument_names ( qw(default bits) ); Rose::Object::MakeMethods::Generic->make_methods ( { preserve_existing => 1 }, scalar => [ __PACKAGE__->common_method_maker_argument_names ] ); sub type { 'bitfield' } foreach my $type (__PACKAGE__->available_method_types) { __PACKAGE__->method_maker_type($type => 'bitfield') } # sub dbi_data_type { DBI::SQL_INTEGER() } sub parse_value { my $self = shift; my $db = shift; my $value = shift; my $bits = shift || $self->bits; return $db->parse_bitfield($value, $bits); } sub format_value { my $self = shift; my $db = shift; my $value = shift; my $bits = shift || $self->bits; return $db->format_bitfield($value, $bits); } sub init_with_dbi_column_info { my($self, $col_info) = @_; $self->SUPER::init_with_dbi_column_info($col_info); $self->bits($col_info->{'COLUMN_SIZE'}); return; } sub should_inline_value { my($self, $db, $value) = @_; no warnings 'uninitialized'; return (($db->validate_bitfield_keyword($value) && $db->should_inline_bitfield_value($value)) || ($db->keyword_function_calls && $value =~ /^\w+\(.*\)$/)) ? 1 : 0; } sub method_uses_formatted_key { my($self, $type) = @_; return 1 if($type eq 'get' || $type eq 'set' || $type eq 'get_set'); return 0; } sub select_sql { my($self, $db, $table) = @_; if($db) { if(defined $table) { return $db->select_bitfield_column_sql($self->{'name'}, $table); } else { return $self->{'select_sql'}{$db->{'driver'}} ||= $db->select_bitfield_column_sql($self->{'name'}); } } else { return $self->{'name'}; } } 1; __END__