Class: Lookout::Stats::VisitDurationQuery

Inherits:
BaseQuery show all
Defined in:
app/queries/lookout/stats/visit_duration_query.rb

Instance Attribute Summary

Attributes inherited from ApplicationQuery

#params

Instance Method Summary collapse

Methods included from LazyComparableQuery

#with_lazy_comparison

Methods included from ComparableQuery

#with_comparison

Methods inherited from ApplicationQuery

call, inherited, #initialize, #inspect

Constructor Details

This class inherits a constructor from Lookout::ApplicationQuery

Instance Method Details

#buildObject



4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'app/queries/lookout/stats/visit_duration_query.rb', line 4

def build
  events = event_query
             .reselect("max(#{Lookout.event.table_name}.time) - min(#{Lookout.event.table_name}.time) as duration, #{Lookout.event.table_name}.visit_id")
             .group("#{Lookout.event.table_name}.visit_id")

  # PostgreSQL has duration type, SQLite stores as numeric seconds
  duration_cast = Lookout::DatabaseAdapter.postgresql? ? "duration::duration" : "duration"
  
  ::Ahoy::Visit
    .select("#{duration_cast} as duration, started_at")
    .from(events, :views_per_visit_table)
    .joins("inner join #{Lookout.visit.table_name} on #{Lookout.visit.table_name}.id = views_per_visit_table.visit_id")
end