Re-add relations rendering
This commit is contained in:
parent
329ba57fba
commit
c4789df9e7
80
plugin.rb
80
plugin.rb
|
@ -28,7 +28,6 @@ module ::DataExplorer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
after_initialize do
|
after_initialize do
|
||||||
|
|
||||||
module ::DataExplorer
|
module ::DataExplorer
|
||||||
|
@ -40,6 +39,23 @@ after_initialize do
|
||||||
class ValidationError < StandardError;
|
class ValidationError < StandardError;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class SmallBadgeSerializer < ApplicationSerializer
|
||||||
|
attributes :id, :name, :badge_type, :description, :icon
|
||||||
|
def badge_type
|
||||||
|
object.badge_type.name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class SmallPostWithExcerptSerializer < ApplicationSerializer
|
||||||
|
attributes :id, :topic_id, :post_number, :excerpt
|
||||||
|
attributes :username, :uploaded_avatar_id
|
||||||
|
def excerpt
|
||||||
|
Post.excerpt(object.cooked, 70)
|
||||||
|
end
|
||||||
|
def username; object.user.username; end
|
||||||
|
def uploaded_avatar_id; object.user.uploaded_avatar_id; end
|
||||||
|
end
|
||||||
|
|
||||||
# Run a data explorer query on the currently connected database.
|
# Run a data explorer query on the currently connected database.
|
||||||
#
|
#
|
||||||
# @param [DataExplorer::Query] query the Query object to run
|
# @param [DataExplorer::Query] query the Query object to run
|
||||||
|
@ -120,6 +136,55 @@ SQL
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.extra_data_pluck_fields
|
||||||
|
@extra_data_pluck_fields ||= {
|
||||||
|
user: {class: User, fields: [:id, :username, :uploaded_avatar_id], serializer: BasicUserSerializer},
|
||||||
|
badge: {class: Badge, fields: [:id, :name, :badge_type_id, :description, :icon], include: [:badge_type], serializer: SmallBadgeSerializer},
|
||||||
|
post: {class: Post, fields: [:id, :topic_id, :post_number, :cooked, :user_id], include: [:user], serializer: SmallPostWithExcerptSerializer},
|
||||||
|
topic: {class: Topic, fields: [:id, :title, :slug, :posts_count], serializer: BasicTopicSerializer}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.add_extra_data(pg_result)
|
||||||
|
needed_classes = {}
|
||||||
|
|
||||||
|
pg_result.fields.each_with_index do |col, idx|
|
||||||
|
if col =~ /user_id$/
|
||||||
|
needed_classes[:user] ||= []
|
||||||
|
needed_classes[:user] << idx
|
||||||
|
elsif col =~ /topic_id$/
|
||||||
|
needed_classes[:topic] ||= []
|
||||||
|
needed_classes[:topic] << idx
|
||||||
|
elsif col =~ /badge_id/
|
||||||
|
needed_classes[:badge] ||= []
|
||||||
|
needed_classes[:badge] << idx
|
||||||
|
elsif col =~ /post_id/
|
||||||
|
needed_classes[:post] ||= []
|
||||||
|
needed_classes[:post] << idx
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ret = {}
|
||||||
|
needed_classes.each do |cls, column_nums|
|
||||||
|
next unless column_nums.present?
|
||||||
|
|
||||||
|
ids = Set.new
|
||||||
|
column_nums.each do |col_n|
|
||||||
|
ids.merge(pg_result.column_values(col_n))
|
||||||
|
end
|
||||||
|
ids.delete nil
|
||||||
|
ids.map! &:to_i
|
||||||
|
|
||||||
|
support_info = extra_data_pluck_fields[cls]
|
||||||
|
object_class = support_info[:class]
|
||||||
|
all_objs = object_class.select(support_info[:fields]).
|
||||||
|
where(id: ids.to_a.sort).includes(support_info[:include])
|
||||||
|
|
||||||
|
ret[cls] = ActiveModel::ArraySerializer.new(all_objs, each_serializer: support_info[:serializer])
|
||||||
|
end
|
||||||
|
ret
|
||||||
|
end
|
||||||
|
|
||||||
def self.sensitive_column_names
|
def self.sensitive_column_names
|
||||||
%w(
|
%w(
|
||||||
#_IP_Addresses
|
#_IP_Addresses
|
||||||
|
@ -964,11 +1029,9 @@ SQL
|
||||||
columns: cols,
|
columns: cols,
|
||||||
}
|
}
|
||||||
json[:explain] = result[:explain] if opts[:explain]
|
json[:explain] = result[:explain] if opts[:explain]
|
||||||
# TODO - special serialization
|
if cols.any? { |col_name| special_serialization? col_name }
|
||||||
# This is dead code in the client right now
|
json[:relations] = DataExplorer.add_extra_data(pg_result)
|
||||||
# if cols.any? { |col_name| special_serialization? col_name }
|
end
|
||||||
# json[:relations] = DataExplorer.add_extra_data(pg_result)
|
|
||||||
# end
|
|
||||||
|
|
||||||
json[:rows] = pg_result.values
|
json[:rows] = pg_result.values
|
||||||
|
|
||||||
|
@ -991,6 +1054,11 @@ SQL
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def special_serialization?(col_name)
|
||||||
|
col_name =~ /(user|topic|post|badge)(_id)?$/
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DataExplorer::QuerySerializer < ActiveModel::Serializer
|
class DataExplorer::QuerySerializer < ActiveModel::Serializer
|
||||||
|
|
Loading…
Reference in New Issue