Module: ForestAdminAgent::Routes::QueryHandler
- Includes:
- Builder, Utils, ForestAdminDatasourceToolkit::Components::Query, ForestAdminDatasourceToolkit::Validations
- Included in:
- Resources::Count, Resources::Csv, Resources::List, Resources::NativeQuery
- Defined in:
- lib/forest_admin_agent/routes/query_handler.rb
Instance Method Summary collapse
- #execute_query(datasource, query, connection_name, permissions, caller, context_variables) ⇒ Object
- #inject_context_variables(datasource, connection_name, query, permissions, caller, context_variables) ⇒ Object
- #parse_query_segment(collection, args, permissions, caller) ⇒ Object
Instance Method Details
#execute_query(datasource, query, connection_name, permissions, caller, context_variables) ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/forest_admin_agent/routes/query_handler.rb', line 17 def execute_query(datasource, query, connection_name, , caller, context_variables) query = query.strip query, binds = inject_context_variables(datasource, connection_name, query, , caller, context_variables) datasource.execute_native_query(connection_name, query, binds) end |
#inject_context_variables(datasource, connection_name, query, permissions, caller, context_variables) ⇒ Object
9 10 11 12 13 14 15 |
# File 'lib/forest_admin_agent/routes/query_handler.rb', line 9 def inject_context_variables(datasource, connection_name, query, , caller, context_variables) user = .get_user_data(caller.id) team = .get_team(caller.rendering_id) context_variables = ContextVariables.new(team, user, context_variables) ContextVariablesInjector.inject_context_in_native_query(datasource, connection_name, query, context_variables) end |
#parse_query_segment(collection, args, permissions, caller) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/forest_admin_agent/routes/query_handler.rb', line 25 def parse_query_segment(collection, args, , caller) return unless args[:params][:segmentQuery] unless args[:params][:connectionName] raise ForestAdminAgent::Http::Exceptions::UnprocessableError, 'Missing native query connection attribute' end QueryValidator.valid?(args[:params][:segmentQuery]) .can_execute_query_segment?(collection, args[:params][:segmentQuery], args[:params][:connectionName]) ids = execute_query( collection.datasource, args[:params][:segmentQuery], args[:params][:connectionName], , caller, args[:params][:contextVariables] ).map(&:values) condition_tree_segment = ConditionTree::ConditionTreeFactory.match_ids(collection, ids) ConditionTreeValidator.validate(condition_tree_segment, collection) condition_tree_segment end |