2017-02-13 13:58:58 -05:00
|
|
|
# frozen_string_literal: true
|
2018-02-24 01:45:50 -05:00
|
|
|
|
2018-02-24 02:41:47 -05:00
|
|
|
module Arel # :nodoc: all
|
2010-12-07 14:44:32 -05:00
|
|
|
###
|
|
|
|
# Methods for creating various nodes
|
|
|
|
module FactoryMethods
|
2011-05-30 23:40:11 -04:00
|
|
|
def create_true
|
|
|
|
Arel::Nodes::True.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def create_false
|
|
|
|
Arel::Nodes::False.new
|
|
|
|
end
|
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def create_table_alias(relation, name)
|
2011-03-30 12:54:23 -04:00
|
|
|
Nodes::TableAlias.new(relation, name)
|
|
|
|
end
|
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def create_join(to, constraint = nil, klass = Nodes::InnerJoin)
|
2010-12-14 12:43:19 -05:00
|
|
|
klass.new(to, constraint)
|
2010-12-07 14:44:32 -05:00
|
|
|
end
|
2010-12-07 17:59:13 -05:00
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def create_string_join(to)
|
2010-12-14 13:22:39 -05:00
|
|
|
create_join to, nil, Nodes::StringJoin
|
2010-12-07 17:59:13 -05:00
|
|
|
end
|
2010-12-09 18:42:29 -05:00
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def create_and(clauses)
|
2010-12-09 18:42:29 -05:00
|
|
|
Nodes::And.new clauses
|
|
|
|
end
|
2010-12-10 17:45:38 -05:00
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def create_on(expr)
|
2010-12-10 17:45:38 -05:00
|
|
|
Nodes::On.new expr
|
|
|
|
end
|
2010-12-26 21:56:07 -05:00
|
|
|
|
2018-02-24 01:45:50 -05:00
|
|
|
def grouping(expr)
|
2010-12-26 21:56:07 -05:00
|
|
|
Nodes::Grouping.new expr
|
|
|
|
end
|
2011-04-25 15:01:22 -04:00
|
|
|
|
|
|
|
###
|
|
|
|
# Create a LOWER() function
|
2018-02-24 01:45:50 -05:00
|
|
|
def lower(column)
|
|
|
|
Nodes::NamedFunction.new "LOWER", [Nodes.build_quoted(column)]
|
2011-04-25 15:01:22 -04:00
|
|
|
end
|
Make `update_counters` preparable
Before:
```
Topic Update All (0.4ms) UPDATE `topics` SET `topics`.`replies_count` = COALESCE(`topics`.`replies_count`, 0) + 1, `topics`.`updated_at` = '2018-09-27 18:34:05.068774' WHERE `topics`.`id` = ? [["id", 7]]
```
After:
```
Topic Update All (0.4ms) UPDATE `topics` SET `topics`.`replies_count` = COALESCE(`topics`.`replies_count`, 0) + ?, `topics`.`updated_at` = ? WHERE `topics`.`id` = ? [["replies_count", 1], ["updated_at", 2018-09-27 18:55:05 UTC], ["id", 7]]
```
2018-09-27 14:38:55 -04:00
|
|
|
|
|
|
|
def coalesce(*exprs)
|
|
|
|
Nodes::NamedFunction.new "COALESCE", exprs
|
|
|
|
end
|
2010-12-07 14:44:32 -05:00
|
|
|
end
|
|
|
|
end
|