From e5bbf10bfc191b19955968e4087c7dde780038ec Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Sun, 15 Dec 2019 15:32:19 -0500 Subject: [PATCH] Pass a reference to db into Schema object This change adds a 'db' attribute to the `Bugzilla::DB::Schema` class. In two places (`get_empty_schema` and `deserialize_abstract`) the invocant argument was called `$class` but was never actually a class. Those were renamed to `$self`. It was fortunate that they were always objects because otherwise it would have been more difficult to ensure a `db` is always present. --- Bugzilla/DB.pm | 2 +- Bugzilla/DB/Schema.pm | 12 +++++++----- t/013dbschema.t | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index 7262cf888c..cb5eb440ed 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -1170,7 +1170,7 @@ sub _bz_schema { return $self->{private_bz_schema} if exists $self->{private_bz_schema}; my $schema_class = $self->_bz_schema_class; eval "require $schema_class"; - $self->{private_bz_schema} = $schema_class->new(); + $self->{private_bz_schema} = $schema_class->new(db => $self); return $self->{private_bz_schema}; } diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index 053ec389af..928e92ac72 100644 --- a/Bugzilla/DB/Schema.pm +++ b/Bugzilla/DB/Schema.pm @@ -1773,6 +1773,8 @@ has 'schema' => (init_arg =>undef, is => 'rw'); has 'db_specific' => (init_arg => undef, is => 'rw'); +has 'db' => (is => 'ro', weak_ref => 1, required => 1); + #-------------------------------------------------------------------------- sub _initialize { @@ -2933,7 +2935,7 @@ sub serialize_abstract { =cut sub deserialize_abstract { - my ($class, $serialized, $version) = @_; + my ($self, $serialized, $version) = @_; my $thawed_hash; if ($version < 2) { @@ -2947,7 +2949,7 @@ sub deserialize_abstract { # Version 2 didn't have the "created" key for REFERENCES items. if ($version < 3) { - my $standard = $class->new()->{abstract_schema}; + my $standard = $self->new(db => $self->db)->{abstract_schema}; foreach my $table_name (keys %$thawed_hash) { my %standard_fields = @{$standard->{$table_name}->{FIELDS} || []}; my $table = $thawed_hash->{$table_name}; @@ -2960,7 +2962,7 @@ sub deserialize_abstract { } } - return $class->new(_abstract_schema => $thawed_hash); + return $self->new(db => $self->db, _abstract_schema => $thawed_hash); } ##################################################################### @@ -2988,8 +2990,8 @@ object. =cut sub get_empty_schema { - my ($class) = @_; - return $class->deserialize_abstract(Dumper({}), SCHEMA_VERSION); + my ($self) = @_; + return $self->deserialize_abstract(Dumper({}), SCHEMA_VERSION); } 1; diff --git a/t/013dbschema.t b/t/013dbschema.t index c2d827e4d3..a1a4aceb27 100644 --- a/t/013dbschema.t +++ b/t/013dbschema.t @@ -58,7 +58,8 @@ our $schema; our @tables; BEGIN { - $schema = Bugzilla::DB::Schema::Mysql->new; + our $fake_db = bless {}, 'Bugzilla::DB'; + $schema = Bugzilla::DB::Schema::Mysql->new(db => $fake_db); @tables = $schema->get_table_list(); } -- 2.47.2