Module: FxAggregate::Statements

Defined in:
lib/fx-aggregate/statements.rb

Instance Method Summary collapse

Instance Method Details

#create_aggregate(name, options = {}) ⇒ Object

Create a new database aggregate.

Examples:

Create from db/aggregates/median_v2.sql

create_aggregate(:median, version: 2)

Create from provided SQL string

create_aggregate(:median, sql_definition: <<-SQL)
  CREATE AGGREGATE median(NUMERIC)(
    SFUNC = array_append,
    STYPE = NUMERIC[],
    FINALFUNC = array_median,
    INITCOND = '{}'
  )
SQL

Parameters:

  • name (String, Symbol)

    The name of the database aggregate.

  • version (Fixnum)

    The version number of the aggregate, used to find the definition file in db/aggregates. This defaults to 1 if not provided.

  • sql_definition (String)

    The SQL query for the aggregate schema. If both sql_definition and version are provided, sql_definition takes prescedence.

Returns:

  • The database response from executing the create statement.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fx-aggregate/statements.rb', line 27

def create_aggregate(name, options = {})
  version = options.fetch(:version, 1)
  sql_definition = options[:sql_definition]

  if version.nil? && sql_definition.nil?
    raise(
      ArgumentError,
      "version or sql_definition must be specified"
    )
  end

  sql_definition = sql_definition.strip_heredoc if sql_definition
  sql_definition ||= Fx::Definition.aggregate(name: name, version: version).to_sql

  Fx.database.create_aggregate(sql_definition)
end

#drop_aggregate(name, options = {}) ⇒ Object

Drop a database aggregate by name.

Examples:

Drop a aggregate, rolling back to version 2 on rollback

drop_aggregate(:median, revert_to_version: 2)

Parameters:

  • name (String, Symbol)

    The name of the database aggregate.

  • revert_to_version (Fixnum)

    Used to reverse the drop_aggregate command on rake db:rollback. The provided version will be passed as the version argument to #create_aggregate.

Returns:

  • The database response from executing the drop statement.



55
56
57
# File 'lib/fx-aggregate/statements.rb', line 55

def drop_aggregate(name, options = {})
  Fx.database.drop_aggregate(name)
end

#update_aggregate(name, options = {}) ⇒ Object

Update a database aggregate.

Examples:

Update aggregate to a given version

update_aggregate(
  :median,
  version: 3,
  revert_to_version: 2,
)

Update aggregate from provided SQL string

update_aggregate(:median, sql_definition: <<-SQL)
  CREATE AGGREGATE median(NUMERIC)(
    SFUNC = array_append,
    STYPE = NUMERIC[],
    FINALFUNC = array_median,
    INITCOND = '{}'
  )
SQL

Parameters:

  • name (String, Symbol)

    The name of the database aggregate.

  • version (Fixnum)

    The version number of the aggregate, used to find the definition file in db/aggregates. This defaults to 1 if not provided.

  • sql_definition (String)

    The SQL query for the aggregate schema. If both sql_definition and version are provided, sql_definition takes prescedence.

Returns:

  • The database response from executing the create statement.



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/fx-aggregate/statements.rb', line 87

def update_aggregate(name, options = {})
  version = options[:version]
  sql_definition = options[:sql_definition]

  if version.nil? && sql_definition.nil?
    raise(
      ArgumentError,
      "version or sql_definition must be specified"
    )
  end

  sql_definition = sql_definition.strip_heredoc if sql_definition
  sql_definition ||= Fx::Definition.aggregate(name: name, version: version).to_sql

  Fx.database.update_aggregate(name, sql_definition)
end