Class: Json2sql::WhereModel
- Inherits:
-
Object
- Object
- Json2sql::WhereModel
- Defined in:
- lib/json2sql/where_model.rb
Overview
Builds a SQL WHERE clause from a Hash describing the conditions.
Input structure mirrors the JSON format used in the C++ backend:
{
"and" => {
"name" => "john", # implicit LIKE '%john%'
"age" => 30, # implicit equality
"status" => { "in" => [1,2] },
"score" => { ">=" => 4.5 },
"col" => { "null" => true }, # IS NULL / IS NOT NULL
"ref" => { "=" => "$.table.col" } # column reference
},
"or" => { ... }
}
Supported operators: = < > <= >= != <>
in !in like !like
String pseudo-actions: contains (LIKE %v%), first (LIKE v%), last (LIKE %v)
Instance Method Summary collapse
- #build(params) ⇒ Object
-
#initialize(sql, table, relation) ⇒ WhereModel
constructor
A new instance of WhereModel.
Constructor Details
#initialize(sql, table, relation) ⇒ WhereModel
Returns a new instance of WhereModel.
25 26 27 28 29 30 31 32 |
# File 'lib/json2sql/where_model.rb', line 25 def initialize(sql, table, relation) @sql = sql @table = table.to_s @relation = relation end |
Instance Method Details
#build(params) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/json2sql/where_model.rb', line 34 def build(params) has_relation = @relation.kind != WhereRelation::NONE has_where_and = params["and"].is_a?(Hash) has_where_or = params["or"].is_a?(Hash) return unless has_relation || has_where_and || has_where_or rules = [] rules << with_buffer { @relation.build_table_relation(@sql, @table) } if has_relation scope = has_where_and ? " AND " : " OR " group = params["and"] || params["or"] if group rule = build_column_group(group, scope) rules << rule unless rule.empty? end return if rules.empty? @sql << " WHERE " << rules.join(" AND ") end |