Class: FastAPI::SQL
- Inherits:
-
Object
- Object
- FastAPI::SQL
- Extended by:
- Forwardable
- Defined in:
- lib/fastapi/sql.rb
Instance Method Summary collapse
-
#initialize(filters, offset, count, klazz, whitelist, safe = false) ⇒ SQL
constructor
A new instance of SQL.
Constructor Details
#initialize(filters, offset, count, klazz, whitelist, safe = false) ⇒ SQL
Returns a new instance of SQL.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fastapi/sql.rb', line 9 def initialize(filters, offset, count, klazz, whitelist, safe = false) results = filter_fields(klazz, whitelist) models, belongs, has_many, fields = results.values_at(:models, :belongs, :has_many, :fields) model_name = klazz.to_s.tableize.singularize table_name = klazz.to_s.tableize # Base fields field_list = generate_field_list(klazz, fields, table_name) # Belongs fields joins = parse_belongs(belongs, field_list, table_name) # Many fields (1 to many) parse_manys(has_many, filters, field_list, model_name, table_name) filter_string = filters[:main].size > 0 ? "WHERE #{filters[:main].join(' AND ')}" : nil order_string = filters[:main_order] ? "ORDER BY #{filters[:main_order]}" : nil @sql = { query: [ "SELECT #{field_list.join(', ')}", "FROM #{table_name}", joins.join(' '), filter_string, order_string, "LIMIT #{count}", "OFFSET #{offset}" ].compact.join(' '), count_query: [ "SELECT COUNT(id) FROM #{table_name}", filter_string ].compact.join(' '), models: models } end |