Sha256: ebe0e77c511562cdda88644d67c6a8281e011310d1ae9517db81aee522855807

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

module Timescale
  class Hypertable < ActiveRecord::Base
    self.table_name = "timescaledb_information.hypertables"
    self.primary_key = "hypertable_name"

    has_many :jobs, foreign_key: "hypertable_name"
    has_many :chunks, foreign_key: "hypertable_name"

    has_one :compression_settings,
      foreign_key: "hypertable_name",
      class_name: "Timescale::CompressionSettings"

    has_one :dimensions,
      foreign_key: "hypertable_name",
      class_name: "Timescale::Dimensions"

    has_many :continuous_aggregates,
      foreign_key: "hypertable_name",
      class_name: "Timescale::ContinuousAggregates"

    def chunks_detailed_size
      struct_from "SELECT * from chunks_detailed_size('#{self.hypertable_name}')"
    end

    def approximate_row_count
      struct_from("SELECT * FROM approximate_row_count('#{self.hypertable_name}')").first.approximate_row_count
    end

    def compression_stats
      @compression_stats ||=
        struct_from("SELECT * from hypertable_compression_stats('#{self.hypertable_name}')").first || {}
    end

    def detailed_size
      struct_from("SELECT * FROM hypertable_detailed_size('#{self.hypertable_name}')").first
    end

    def before_total_bytes
      compression_stats["before_compression_total_bytes"] || detailed_size.total_bytes
    end

    def after_total_bytes
      compression_stats["after_compression_total_bytes"] || 0
    end

    private
    def struct_from(sql)
      self.class.connection.execute(sql).map(&OpenStruct.method(:new))
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
timescaledb-0.1.4 lib/timescale/hypertable.rb
timescaledb-0.1.3 lib/timescale/hypertable.rb