return wantarray ? %$extra : $extra;
}
+# ----------------------------------------------------------------------
+sub remove_extra {
+
+=head2 remove_extra
+
+L</extra> can only be used to get or set "extra" attributes but not to
+remove some. Call with no args to remove all extra attributes that
+have been set before. Call with a list of key names to remove
+certain extra attributes only.
+
+ # remove all extra attributes
+ $field->remove_extra();
+
+ # remove timezone and locale attributes only
+ $field->remove_extra(qw/timezone locale/);
+
+=cut
+
+ my ( $self, @keys ) = @_;
+ unless (@keys) {
+ $self->{'extra'} = {};
+ }
+ else {
+ delete $self->{'extra'}{$_} for @keys;
+ }
+}
# ----------------------------------------------------------------------
sub equals {
#=============================================================================
BEGIN {
- maybe_plan(32,
+ maybe_plan(35,
'YAML',
'SQL::Translator::Producer::MySQL',
'Test::Differences',
SELECT id, name FROM thing
)";
is($view1_sql2, $view_sql_noreplace, 'correct "CREATE VIEW" SQL');
+
+ {
+ my %extra = $view1->extra;
+ is_deeply \%extra,
+ {
+ 'mysql_algorithm' => 'MERGE',
+ 'mysql_definer' => 'CURRENT_USER',
+ 'mysql_security' => 'DEFINER'
+ },
+ 'Extra attributes';
+ }
+
+ $view1->remove_extra(qw/mysql_definer mysql_security/);
+ {
+ my %extra = $view1->extra;
+ is_deeply \%extra, { 'mysql_algorithm' => 'MERGE', }, 'Extra attributes after first reset_extra call';
+ }
+
+ $view1->remove_extra();
+ {
+ my %extra = $view1->extra;
+ is_deeply \%extra, {}, 'Extra attributes completely removed';
+ }
}