Class: Card::Query::SqlStatement
- Inherits:
-
Object
- Object
- Card::Query::SqlStatement
show all
- Includes:
- Joins, Order, Where
- Defined in:
- lib/card/query/sql_statement.rb,
lib/card/query/sql_statement/joins.rb,
lib/card/query/sql_statement/order.rb,
lib/card/query/sql_statement/where.rb
Overview
convert @query sort rep into order by statement order information is stored in @mods, @mods, and @mods
Defined Under Namespace
Modules: Joins, Order, Where
Constant Summary
collapse
- ORDER_MAP =
{
"id" => "id",
"update" => "updated_at",
"create" => "created_at",
"name" => "key",
"content" => "db_content",
"alpha" => "key", "relevance" => "updated_at" }.freeze
Instance Method Summary
collapse
Methods included from Order
#order, #order_as, #order_dir, #order_directive, #order_directives, #order_field
Methods included from Where
#basic_conditions, #condition_joint, #conditions_from, #exist_condition, #explicit_conditions, #format_conditions, #implicit_conditions, #in_condition, #maybe_not, #permission_conditions, #spaced_subquery_sql, #standard_condition, #trash_condition, #where
Methods included from Joins
#join_clause, #join_clause_parts, #join_table, #joins, #joins_on_query, #on_card_conditions, #on_clause, #subjoins
Constructor Details
#initialize(query = nil) ⇒ SqlStatement
Returns a new instance of SqlStatement.
18
19
20
21
|
# File 'lib/card/query/sql_statement.rb', line 18
def initialize query=nil
@query = query
@mods = query&.mods
end
|
Instance Method Details
#build ⇒ Object
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/card/query/sql_statement.rb', line 23
def build
@fields = fields
@tables = tables
@joins = joins
@where = where
@group = group
@order = order
@limit_and_offset = limit_and_offset
self
end
|
#cast_type(type) ⇒ Object
114
115
116
117
|
# File 'lib/card/query/sql_statement.rb', line 114
def cast_type type
cxn ||= ActiveRecord::Base.connection
(val = cxn.cast_types[type.to_sym]) ? val[:name] : safe_sql(type)
end
|
52
53
54
55
56
|
# File 'lib/card/query/sql_statement.rb', line 52
def
return nil unless Card.config. && @query.
"/* #{@query.} */\n"
end
|
#fields ⇒ Object
62
63
64
65
66
67
68
|
# File 'lib/card/query/sql_statement.rb', line 62
def fields
table = @query.table_alias
field = @mods[:return] unless @mods[:return] =~ /^_\w+/
field = field.blank? ? :card : field.to_sym
field = full_field(table, field)
[field, @mods[:sort_join_field]].compact * ", "
end
|
#from ⇒ Object
44
45
46
|
# File 'lib/card/query/sql_statement.rb', line 44
def from
"FROM #{@tables}"
end
|
#full_field(table, field) ⇒ Object
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/card/query/sql_statement.rb', line 70
def full_field table, field
case field
when :card, :raw then "#{table}.*"
when :content then "#{table}.db_content"
when :name, :key then "#{table}.name, #{table}.left_id, #{table}.right_id"
when :count then "coalesce(count( distinct #{table}.id),0) as count"
else
standard_full_field table, field
end
end
|
#full_syntax ⇒ Object
106
107
108
|
# File 'lib/card/query/sql_statement.rb', line 106
def full_syntax
@query.full? ? yield : return
end
|
#group ⇒ Object
89
90
91
92
|
# File 'lib/card/query/sql_statement.rb', line 89
def group
group = @mods[:group]
"GROUP BY #{safe_sql group}" if group.present?
end
|
#leading_space ⇒ Object
48
49
50
|
# File 'lib/card/query/sql_statement.rb', line 48
def leading_space
" " * (@query.depth * 2)
end
|
#limit_and_offset ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/card/query/sql_statement.rb', line 94
def limit_and_offset
full_syntax do
limit = @mods[:limit]
offset = @mods[:offset]
if limit.to_i.positive?
string = "LIMIT #{limit.to_i} "
string += "OFFSET #{offset.to_i} " if offset.present?
string
end
end
end
|
#safe_sql(txt) ⇒ Object
110
111
112
|
# File 'lib/card/query/sql_statement.rb', line 110
def safe_sql txt
Query.safe_sql txt
end
|
#select ⇒ Object
40
41
42
|
# File 'lib/card/query/sql_statement.rb', line 40
def select
"#{leading_space}SELECT #{'DISTINCT' if @joins.present?} #{@fields}"
end
|
#standard_full_field(table, field) ⇒ Object
81
82
83
84
85
86
87
|
# File 'lib/card/query/sql_statement.rb', line 81
def standard_full_field table, field
if Query.attributes[field.to_sym] == :basic
"#{table}.#{field}"
else
safe_sql field
end
end
|
#tables ⇒ Object
58
59
60
|
# File 'lib/card/query/sql_statement.rb', line 58
def tables
"#{@query.table} #{@query.table_alias}"
end
|
#to_s ⇒ Object
34
35
36
37
38
|
# File 'lib/card/query/sql_statement.rb', line 34
def to_s
[
, select, from, @joins, @where, @group, @order, @limit_and_offset
].compact.join " "
end
|