#1254 Custom fields with multiple values
This commit is contained in:
parent
b687119d1d
commit
44b15a8028
@ -189,6 +189,15 @@ class DmsfQuery < Query
|
|||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def sub_query
|
||||||
|
case ActiveRecord::Base.connection.adapter_name.downcase
|
||||||
|
when 'sqlserver'
|
||||||
|
'dmsf_file_revisions.id = (SELECT TOP 1 r.id FROM dmsf_file_revisions r WHERE r.created_at = (SELECT MAX(created_at) FROM dmsf_file_revisions rr WHERE rr.dmsf_file_id = dmsf_files.id) AND r.dmsf_file_id = dmsf_files.id ORDER BY id DESC)'
|
||||||
|
else
|
||||||
|
'dmsf_file_revisions.id = (SELECT r.id FROM dmsf_file_revisions r WHERE r.created_at = (SELECT MAX(created_at) FROM dmsf_file_revisions rr WHERE rr.dmsf_file_id = dmsf_files.id) AND r.dmsf_file_id = dmsf_files.id ORDER BY id DESC LIMIT 1)'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_integer_type
|
def get_integer_type
|
||||||
if Redmine::Database.mysql?
|
if Redmine::Database.mysql?
|
||||||
@ -198,6 +207,15 @@ class DmsfQuery < Query
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_cf_query(id, type, table)
|
||||||
|
if Redmine::Database.mysql? || Redmine::Database.sqlite?
|
||||||
|
aggr_func = 'GROUP_CONCAT(value)'
|
||||||
|
else
|
||||||
|
aggr_func = "STRING_AGG(value, ',')"
|
||||||
|
end
|
||||||
|
",(SELECT #{aggr_func} FROM custom_values WHERE custom_field_id = #{id} AND customized_type = '#{type}' AND customized_id = #{table}.id GROUP BY custom_field_id) AS cf_#{id}"
|
||||||
|
end
|
||||||
|
|
||||||
def dmsf_projects_scope
|
def dmsf_projects_scope
|
||||||
return nil unless sub_projects
|
return nil unless sub_projects
|
||||||
cf_columns = +''
|
cf_columns = +''
|
||||||
@ -233,7 +251,7 @@ class DmsfQuery < Query
|
|||||||
def dmsf_folders_scope
|
def dmsf_folders_scope
|
||||||
cf_columns = +''
|
cf_columns = +''
|
||||||
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
||||||
cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_folders.id) AS cf_#{id}"
|
cf_columns << get_cf_query(id, 'DmsfFolder', 'dmsf_folders')
|
||||||
end
|
end
|
||||||
scope = DmsfFolder.select(%{
|
scope = DmsfFolder.select(%{
|
||||||
dmsf_folders.id AS id,
|
dmsf_folders.id AS id,
|
||||||
@ -275,7 +293,7 @@ class DmsfQuery < Query
|
|||||||
return nil unless project
|
return nil unless project
|
||||||
cf_columns = +''
|
cf_columns = +''
|
||||||
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
||||||
cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFolder' AND customized_id = dmsf_folders.id) AS cf_#{id}"
|
cf_columns << get_cf_query(id, 'DmsfFolder', 'dmsf_folders')
|
||||||
end
|
end
|
||||||
scope = DmsfLink.select(%{
|
scope = DmsfLink.select(%{
|
||||||
dmsf_links.id AS id,
|
dmsf_links.id AS id,
|
||||||
@ -312,7 +330,7 @@ class DmsfQuery < Query
|
|||||||
return nil unless project
|
return nil unless project
|
||||||
cf_columns = +''
|
cf_columns = +''
|
||||||
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
||||||
cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFileRevision' AND customized_id = dmsf_file_revisions.id) AS cf_#{id}"
|
cf_columns << get_cf_query(id, 'DmsfFileRevision', 'dmsf_file_revisions')
|
||||||
end
|
end
|
||||||
scope = DmsfFile.select(%{
|
scope = DmsfFile.select(%{
|
||||||
dmsf_files.id AS id,
|
dmsf_files.id AS id,
|
||||||
@ -350,7 +368,7 @@ class DmsfQuery < Query
|
|||||||
return nil unless project
|
return nil unless project
|
||||||
cf_columns = +''
|
cf_columns = +''
|
||||||
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
DmsfFileRevisionCustomField.visible.order(:position).pluck(:id).each do |id|
|
||||||
cf_columns << ",(SELECT value from custom_values WHERE custom_field_id = #{id} AND customized_type = 'DmsfFileRevision' AND customized_id = dmsf_file_revisions.id) AS cf_#{id}"
|
cf_columns << get_cf_query(id, 'DmsfFileRevision', 'dmsf_file_revisions')
|
||||||
end
|
end
|
||||||
scope = DmsfLink.select(%{
|
scope = DmsfLink.select(%{
|
||||||
dmsf_links.id AS id,
|
dmsf_links.id AS id,
|
||||||
@ -422,13 +440,4 @@ class DmsfQuery < Query
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def sub_query
|
|
||||||
case ActiveRecord::Base.connection.adapter_name.downcase
|
|
||||||
when 'sqlserver'
|
|
||||||
'dmsf_file_revisions.id = (SELECT TOP 1 r.id FROM dmsf_file_revisions r WHERE r.created_at = (SELECT MAX(created_at) FROM dmsf_file_revisions rr WHERE rr.dmsf_file_id = dmsf_files.id) AND r.dmsf_file_id = dmsf_files.id ORDER BY id DESC)'
|
|
||||||
else
|
|
||||||
'dmsf_file_revisions.id = (SELECT r.id FROM dmsf_file_revisions r WHERE r.created_at = (SELECT MAX(created_at) FROM dmsf_file_revisions rr WHERE rr.dmsf_file_id = dmsf_files.id) AND r.dmsf_file_id = dmsf_files.id ORDER BY id DESC LIMIT 1)'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user