Class: GmailSearchSyntax::Query
- Inherits:
-
Object
- Object
- GmailSearchSyntax::Query
- Defined in:
- lib/gmail_search_syntax/sql_visitor.rb
Instance Attribute Summary collapse
-
#alias_counter ⇒ Object
readonly
Returns the value of attribute alias_counter.
-
#conditions ⇒ Object
readonly
Returns the value of attribute conditions.
-
#joins ⇒ Object
readonly
Returns the value of attribute joins.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
Instance Method Summary collapse
- #add_condition(sql_fragment) ⇒ Object
- #add_join(table_name, join_sql) ⇒ Object
- #add_param(value) ⇒ Object
- #get_table_alias(table_name, base_alias = nil) ⇒ Object
-
#initialize(alias_counter:) ⇒ Query
constructor
A new instance of Query.
- #to_sql ⇒ Object
Constructor Details
#initialize(alias_counter:) ⇒ Query
Returns a new instance of Query.
5 6 7 8 9 10 11 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 5 def initialize(alias_counter:) @conditions = [] @joins = {} @params = [] @table_aliases = {} @alias_counter = alias_counter end |
Instance Attribute Details
#alias_counter ⇒ Object (readonly)
Returns the value of attribute alias_counter.
3 4 5 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 3 def alias_counter @alias_counter end |
#conditions ⇒ Object (readonly)
Returns the value of attribute conditions.
3 4 5 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 3 def conditions @conditions end |
#joins ⇒ Object (readonly)
Returns the value of attribute joins.
3 4 5 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 3 def joins @joins end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
3 4 5 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 3 def params @params end |
Instance Method Details
#add_condition(sql_fragment) ⇒ Object
13 14 15 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 13 def add_condition(sql_fragment) @conditions << sql_fragment end |
#add_join(table_name, join_sql) ⇒ Object
21 22 23 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 21 def add_join(table_name, join_sql) @joins["#{table_name}_#{@joins.size}"] = join_sql end |
#add_param(value) ⇒ Object
17 18 19 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 17 def add_param(value) @params << value end |
#get_table_alias(table_name, base_alias = nil) ⇒ Object
25 26 27 28 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 25 def get_table_alias(table_name, base_alias = nil) counter_value = @alias_counter.next base_alias || "#{table_name.split("_").map { |w| w[0] }.join}#{counter_value}" end |
#to_sql ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/gmail_search_syntax/sql_visitor.rb', line 30 def to_sql where_clause = @conditions.empty? ? "1 = 1" : @conditions.join(" ") base_query = "SELECT DISTINCT m0.id FROM messages AS m0" join_clause = @joins.values.join(" ") full_query = [base_query, join_clause, "WHERE", where_clause].reject(&:empty?).join(" ") [full_query, @params] end |