From 8d433cd4bbb85701dbda4cf343da946e7bceb1c5 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Wed, 30 Aug 2017 12:05:49 +0200 Subject: [PATCH] TT#20334 TT#21092 sipwise_mam ResultSet relation ends to implement performance-critical joins of the form "sipwise_mam.username = concat(voip_subscriber.username,'@',voip_domain.domain)" are added to provisionin_voip_subscriber, to have proper on-clause operands in place (and prevent "unknown column .. in on clause" error in an elegant way). resultset require to join voip_domain explicitly. Change-Id: I4e20c4232f73c7e4286b96da5ded73455a417131 --- .../Result/provisioning_voip_subscribers.pm | 26 ++++++++ lib/NGCP/Schema/Result/sipwise_mam.pm | 62 +++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 lib/NGCP/Schema/Result/sipwise_mam.pm diff --git a/lib/NGCP/Schema/Result/provisioning_voip_subscribers.pm b/lib/NGCP/Schema/Result/provisioning_voip_subscribers.pm index 743455f9..3f4f39c3 100644 --- a/lib/NGCP/Schema/Result/provisioning_voip_subscribers.pm +++ b/lib/NGCP/Schema/Result/provisioning_voip_subscribers.pm @@ -315,6 +315,32 @@ __PACKAGE__->might_have( { cascade_copy => 0, cascade_delete => 0 }, ); +__PACKAGE__->has_many( + "sipwise_mam_user", + 'NGCP::Schema::Result::sipwise_mam', + sub { + my $args = shift; + return { + "$args->{foreign_alias}.username" => { '=' => \"concat($args->{self_alias}.username,\"@\",domain.domain)" } , + }; + }, + { join_type => 'inner' }, + { cascade_copy => 0, cascade_delete => 0 }, +); + +__PACKAGE__->has_many( + "sipwise_mam_with", + 'NGCP::Schema::Result::sipwise_mam', + sub { + my $args = shift; + return { + "$args->{foreign_alias}.with" => { '=' => \"concat($args->{self_alias}.username,\"@\",domain.domain)" } , + }; + }, + { join_type => 'inner' }, + { cascade_copy => 0, cascade_delete => 0 }, +); + sub TO_JSON { my ($self) = @_; return { diff --git a/lib/NGCP/Schema/Result/sipwise_mam.pm b/lib/NGCP/Schema/Result/sipwise_mam.pm new file mode 100644 index 00000000..cfe1663d --- /dev/null +++ b/lib/NGCP/Schema/Result/sipwise_mam.pm @@ -0,0 +1,62 @@ +package NGCP::Schema::Result::sipwise_mam; +use Scalar::Util qw(blessed); +use parent 'DBIx::Class::Core'; + +our $VERSION = '2.007'; + +__PACKAGE__->load_components( + "InflateColumn::DateTime", + "Helper::Row::ToJSON", + "+NGCP::Schema::InflateColumn::DateTime::EpochMilli", +); + +__PACKAGE__->table("prosody.sipwise_mam"); + +__PACKAGE__->add_columns( + "id", + { + data_type => "integer", + extra => { unsigned => 1 }, + is_auto_increment => 1, + is_nullable => 0, + }, + "username", + { + data_type => "varchar", + is_nullable => 0, + size => 255 + }, + "key", + { + data_type => "binary", + is_nullable => 0, + size => 16 + }, + "stanza", + { + data_type => "text", + is_nullable => 1 + }, + "epoch", + { + data_type => "integer", + is_nullable => 0, + }, + "with", + { + data_type => "varchar", + is_nullable => 1, + size => 255 + }, +); + +__PACKAGE__->set_primary_key("id"); + +sub TO_JSON { + my ($self) = @_; + return { + map { blessed($_) && $_->isa('DateTime') ? $_->datetime : $_ } %{ $self->next::method } + }; +} + +1;