|
@@ -74,87 +74,10 @@ module Blazer
|
|
|
|
|
|
data_source = @query.data_source if @query && @query.data_source
|
|
|
@data_source = Blazer.data_sources[data_source]
|
|
|
- Blazer.transform_statement.call(@data_source, @statement) if Blazer.transform_statement
|
|
|
-
|
|
|
- # audit
|
|
|
- if Blazer.audit
|
|
|
- audit = Blazer::Audit.new(statement: @statement)
|
|
|
- audit.query = @query
|
|
|
- audit.data_source = data_source
|
|
|
- audit.user = blazer_user
|
|
|
- audit.save!
|
|
|
- end
|
|
|
-
|
|
|
- start_time = Time.now
|
|
|
- @columns, @rows, @error, @cached_at, @just_cached = @data_source.run_statement(@statement, user: blazer_user, query: @query, refresh_cache: params[:check], with_just_cached: true)
|
|
|
- duration = Time.now - start_time
|
|
|
-
|
|
|
- if Blazer.audit
|
|
|
- audit.duration = duration if audit.respond_to?(:duration=)
|
|
|
- audit.error = @error if audit.respond_to?(:error=)
|
|
|
- audit.timed_out = @error == Blazer::TIMEOUT_MESSAGE if audit.respond_to?(:timed_out=)
|
|
|
- audit.cached = @cached_at.present? if audit.respond_to?(:cached=)
|
|
|
- if !@cached_at && duration >= 10
|
|
|
- audit.cost = @data_source.cost(@statement) if audit.respond_to?(:cost=)
|
|
|
- end
|
|
|
- audit.save! if audit.changed?
|
|
|
- end
|
|
|
|
|
|
- if @query && @error != Blazer::TIMEOUT_MESSAGE
|
|
|
- @query.checks.each do |check|
|
|
|
- check.update_state(@rows, @error)
|
|
|
- end
|
|
|
- end
|
|
|
-
|
|
|
- @first_row = @rows.first || []
|
|
|
- @column_types = []
|
|
|
- if @rows.any?
|
|
|
- @columns.each_with_index do |column, i|
|
|
|
- @column_types << (
|
|
|
- case @first_row[i]
|
|
|
- when Integer
|
|
|
- "int"
|
|
|
- when Float
|
|
|
- "float"
|
|
|
- else
|
|
|
- "string-ins"
|
|
|
- end
|
|
|
- )
|
|
|
- end
|
|
|
- end
|
|
|
+ @columns, @rows, @error, @cached_at, @just_cached = @data_source.run_main_statement(@statement, user: blazer_user, query: @query, refresh_cache: params[:check])
|
|
|
|
|
|
- @filename = @query.name.parameterize if @query
|
|
|
- @min_width_types = @columns.each_with_index.select { |c, i| @first_row[i].is_a?(Time) || @first_row[i].is_a?(String) || @data_source.smart_columns[c] }
|
|
|
-
|
|
|
- @boom = {}
|
|
|
- @columns.each_with_index do |key, i|
|
|
|
- query = @data_source.smart_columns[key]
|
|
|
- if query
|
|
|
- values = @rows.map { |r| r[i] }.compact.uniq
|
|
|
- columns, rows, error, cached_at = @data_source.run_statement(ActiveRecord::Base.send(:sanitize_sql_array, [query.sub("{value}", "(?)"), values]))
|
|
|
- @boom[key] = Hash[rows.map { |k, v| [k.to_s, v] }]
|
|
|
- end
|
|
|
- end
|
|
|
-
|
|
|
- @linked_columns = @data_source.linked_columns
|
|
|
-
|
|
|
- @markers = []
|
|
|
- [["latitude", "longitude"], ["lat", "lon"]].each do |keys|
|
|
|
- lat_index = @columns.index(keys.first)
|
|
|
- lon_index = @columns.index(keys.last)
|
|
|
- if lat_index && lon_index
|
|
|
- @markers =
|
|
|
- @rows.select do |r|
|
|
|
- r[lat_index] && r[lon_index]
|
|
|
- end.map do |r|
|
|
|
- {
|
|
|
- title: r.each_with_index.map{ |v, i| i == lat_index || i == lon_index ? nil : "<strong>#{@columns[i]}:</strong> #{v}" }.compact.join("<br />").truncate(140),
|
|
|
- latitude: r[lat_index],
|
|
|
- longitude: r[lon_index]
|
|
|
- }
|
|
|
- end
|
|
|
- end
|
|
|
- end
|
|
|
+ render_run
|
|
|
end
|
|
|
|
|
|
respond_to do |format|
|
|
@@ -203,6 +126,58 @@ module Blazer
|
|
|
|
|
|
private
|
|
|
|
|
|
+ def render_run
|
|
|
+ @first_row = @rows.first || []
|
|
|
+ @column_types = []
|
|
|
+ if @rows.any?
|
|
|
+ @columns.each_with_index do |column, i|
|
|
|
+ @column_types << (
|
|
|
+ case @first_row[i]
|
|
|
+ when Integer
|
|
|
+ "int"
|
|
|
+ when Float
|
|
|
+ "float"
|
|
|
+ else
|
|
|
+ "string-ins"
|
|
|
+ end
|
|
|
+ )
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ @filename = @query.name.parameterize if @query
|
|
|
+ @min_width_types = @columns.each_with_index.select { |c, i| @first_row[i].is_a?(Time) || @first_row[i].is_a?(String) || @data_source.smart_columns[c] }
|
|
|
+
|
|
|
+ @boom = {}
|
|
|
+ @columns.each_with_index do |key, i|
|
|
|
+ query = @data_source.smart_columns[key]
|
|
|
+ if query
|
|
|
+ values = @rows.map { |r| r[i] }.compact.uniq
|
|
|
+ columns, rows, error, cached_at = @data_source.run_statement(ActiveRecord::Base.send(:sanitize_sql_array, [query.sub("{value}", "(?)"), values]))
|
|
|
+ @boom[key] = Hash[rows.map { |k, v| [k.to_s, v] }]
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ @linked_columns = @data_source.linked_columns
|
|
|
+
|
|
|
+ @markers = []
|
|
|
+ [["latitude", "longitude"], ["lat", "lon"]].each do |keys|
|
|
|
+ lat_index = @columns.index(keys.first)
|
|
|
+ lon_index = @columns.index(keys.last)
|
|
|
+ if lat_index && lon_index
|
|
|
+ @markers =
|
|
|
+ @rows.select do |r|
|
|
|
+ r[lat_index] && r[lon_index]
|
|
|
+ end.map do |r|
|
|
|
+ {
|
|
|
+ title: r.each_with_index.map{ |v, i| i == lat_index || i == lon_index ? nil : "<strong>#{@columns[i]}:</strong> #{v}" }.compact.join("<br />").truncate(140),
|
|
|
+ latitude: r[lat_index],
|
|
|
+ longitude: r[lon_index]
|
|
|
+ }
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
def set_queries(limit = nil)
|
|
|
@my_queries =
|
|
|
if limit && blazer_user
|