diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-06-09 17:09:20 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2016-06-14 16:12:01 +0200 |
commit | a9f33af2ab0e8a72609d7304af65758c3f39bfa7 (patch) | |
tree | 7a2cc8c54bb735841f380636c1205904c80841e1 /server/sonar-web/src/main/webapp/WEB-INF | |
parent | daee45d773b4f7ca9fa835c761b66ecec134d961 (diff) | |
download | sonarqube-a9f33af2ab0e8a72609d7304af65758c3f39bfa7.tar.gz sonarqube-a9f33af2ab0e8a72609d7304af65758c3f39bfa7.zip |
SONAR-7693 support removal of ID columns in SNAPSHOTS
Diffstat (limited to 'server/sonar-web/src/main/webapp/WEB-INF')
10 files changed, 51 insertions, 55 deletions
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/events_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/events_controller.rb index 44277d0885b..7900407f219 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/events_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/events_controller.rb @@ -130,10 +130,10 @@ class Api::EventsController < Api::ApiController if (params[:dateTime]) # try to find a snapshot on that day date = parse_datetime(params[:dateTime], true) - root_snapshot = Snapshot.find(:last, :conditions => ["project_id = ? AND created_at >= ? AND created_at <= ?", @resource.id, date.to_i*1000, (date + 1.day).to_i*1000], :order => :created_at) + root_snapshot = Snapshot.find(:last, :conditions => ["component_uuid = ? AND created_at >= ? AND created_at <= ?", @resource.uuid, date.to_i*1000, (date + 1.day).to_i*1000], :order => :created_at) raise "No snapshot exists for given date" unless root_snapshot else - root_snapshot = Snapshot.find(:last, :conditions => ["project_id = ?", @resource.id], :order => :created_at) + root_snapshot = Snapshot.find(:last, :conditions => ["component_uuid = ?", @resource.uuid], :order => :created_at) end raise "A version already exists on this resource." if params[:category]==EventCategory::KEY_VERSION && root_snapshot.event(EventCategory::KEY_VERSION) @@ -161,7 +161,7 @@ class Api::EventsController < Api::ApiController :event_date => snapshot.created_at ) event.save! - event_to_return = event if snapshot.project_id = @resource.id + event_to_return = event if snapshot.component_uuid = @resource.uuid end diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/projects_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/projects_controller.rb index cac85bb1e1d..de02d22c9cd 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/projects_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/projects_controller.rb @@ -38,7 +38,7 @@ class Api::ProjectsController < Api::ApiController begin @show_description=(params[:desc]=='true') @projects=load_projects - @snapshots_by_pid=load_snapshots_by_project + @snapshots_by_puuid=load_snapshots_by_project respond_to do |format| format.json{ render :json => jsonp(to_json) } format.xml { render :xml => to_xml } @@ -115,7 +115,7 @@ class Api::ProjectsController < Api::ApiController end # this is really an advanced optimization ! - select_columns='id,kee,name,language,long_name,scope,qualifier,root_id' + select_columns='id,uuid,kee,name,language,long_name,scope,qualifier,root_id' select_columns += ',description' if @show_description projects=Project.find(:all, :select => select_columns, :conditions => [conditions.join(' AND '), values], :order => 'name') @@ -123,21 +123,21 @@ class Api::ProjectsController < Api::ApiController end def load_snapshots_by_project - select_columns='id,project_id,version,islast,created_at' + select_columns='id,component_uuid,version,islast,created_at' if params[:versions]=='true' - snapshots=Snapshot.find_by_sql(["SELECT #{select_columns} FROM snapshots s1 WHERE s1.status=? AND s1.project_id IN (?) AND NOT EXISTS(SELECT * FROM snapshots s2 WHERE s2.project_id=s1.project_id AND s2.created_at>s1.created_at AND s2.version=s1.version)", 'P', @projects.map{|p| p.id}]) + snapshots=Snapshot.find_by_sql(["SELECT #{select_columns} FROM snapshots s1 WHERE s1.status=? AND s1.component_uuid IN (?) AND NOT EXISTS(SELECT * FROM snapshots s2 WHERE s2.component_uuid=s1.component_uuid AND s2.created_at>s1.created_at AND s2.version=s1.version)", 'P', @projects.map{|p| p.uuid}]) elsif params[:versions]=='last' - snapshots=Snapshot.find_by_sql(["SELECT #{select_columns} FROM snapshots s1 WHERE s1.status=? AND islast=? AND s1.project_id IN (?) AND NOT EXISTS(SELECT * FROM snapshots s2 WHERE s2.project_id=s1.project_id AND s2.created_at>s1.created_at AND s2.version=s1.version)", 'P', true, @projects.map{|p| p.id}]) + snapshots=Snapshot.find_by_sql(["SELECT #{select_columns} FROM snapshots s1 WHERE s1.status=? AND islast=? AND s1.component_uuid IN (?) AND NOT EXISTS(SELECT * FROM snapshots s2 WHERE s2.component_uuid=s1.component_uuid AND s2.created_at>s1.created_at AND s2.version=s1.version)", 'P', true, @projects.map{|p| p.uuid}]) else snapshots=[] end - snapshots_by_project_id={} + snapshots_by_project_uuid={} snapshots.each do |s| - snapshots_by_project_id[s.project_id]||=[] - snapshots_by_project_id[s.project_id]<<s + snapshots_by_project_uuid[s.component_uuid]||=[] + snapshots_by_project_uuid[s.component_uuid]<<s end - snapshots_by_project_id + snapshots_by_project_uuid end def to_json @@ -145,9 +145,9 @@ class Api::ProjectsController < Api::ApiController @projects.each do |project| hash=to_json_hash(project) - if @snapshots_by_pid && @snapshots_by_pid[project.id] + if @snapshots_by_puuid && @snapshots_by_puuid[project.uuid] versions={} - @snapshots_by_pid[project.id].sort{|s1,s2| s2.version <=> s1.version}.each do |snapshot| + @snapshots_by_puuid[project.uuid].sort{|s1,s2| s2.version <=> s1.version}.each do |snapshot| version={:sid => snapshot.id.to_s} version[:d]=Api::Utils.format_datetime(snapshot.created_at) if snapshot.created_at if snapshot.last? @@ -189,8 +189,8 @@ class Api::ProjectsController < Api::ApiController xml.qualifier(project.qualifier) xml.desc(project.description) if @show_description && project.description - if @snapshots_by_pid && @snapshots_by_pid[project.id] - @snapshots_by_pid[project.id].sort{|s1,s2| s2.version <=> s1.version}.each do |snapshot| + if @snapshots_by_puuid && @snapshots_by_puuid[project.uuid] + @snapshots_by_puuid[project.id].sort{|s1,s2| s2.version <=> s1.version}.each do |snapshot| attributes={:sid => snapshot.id.to_s, :last => snapshot.last?} attributes[:date]=Api::Utils.format_datetime(snapshot.created_at) if snapshot.created_at xml.version(snapshot.version, attributes) diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/resources_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/resources_controller.rb index 35f9baa870b..9be60b5114a 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/resources_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/resources_controller.rb @@ -227,10 +227,10 @@ class Api::ResourcesController < Api::ApiController # ---------- PREPARE RESPONSE resource_by_sid={} - snapshots_by_rid={} + snapshots_by_uuid={} snapshots_including_resource.each do |snapshot| resource_by_sid[snapshot.id]=snapshot.project - snapshots_by_rid[snapshot.project_id]=snapshot + snapshots_by_uuid[snapshot.component_uuid]=snapshot end @@ -248,7 +248,7 @@ class Api::ResourcesController < Api::ApiController sorted_resources=sorted_resources.uniq.compact # ---------- FORMAT RESPONSE - objects={:sorted_resources => sorted_resources, :snapshots_by_rid => snapshots_by_rid, :measures_by_sid => measures_by_sid, :params => params} + objects={:sorted_resources => sorted_resources, :snapshots_by_uuid => snapshots_by_uuid, :measures_by_sid => measures_by_sid, :params => params} respond_to do |format| format.json { render :json => jsonp(to_json(objects)) } format.xml { render :xml => to_xml(objects) } @@ -277,13 +277,13 @@ class Api::ResourcesController < Api::ApiController def to_json(objects) resources = objects[:sorted_resources] - snapshots_by_rid = objects[:snapshots_by_rid] + snapshots_by_uuid = objects[:snapshots_by_uuid] measures_by_sid = objects[:measures_by_sid] params = objects[:params] result=[] resources.each do |resource| - snapshot=snapshots_by_rid[resource.id] + snapshot=snapshots_by_uuid[resource.uuid] result<<resource_to_json(resource, snapshot, measures_by_sid[snapshot.id], params) end result diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/timemachine_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/timemachine_controller.rb index 746e1a32418..4a3f6ac09a9 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/timemachine_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/api/timemachine_controller.rb @@ -68,8 +68,8 @@ class Api::TimemachineController < Api::ApiController @measures_by_sid={} unless @metrics.empty? - sql_conditions = ['snapshots.project_id=:rid AND snapshots.status=:status AND project_measures.person_id IS NULL'] - sql_values = {:rid => @resource.id, :status => Snapshot::STATUS_PROCESSED} + sql_conditions = ['snapshots.component_uuid=:rid AND snapshots.status=:status AND project_measures.person_id IS NULL'] + sql_values = {:rid => @resource.uuid, :status => Snapshot::STATUS_PROCESSED} if params[:fromDateTime] from = parse_datetime(params[:fromDateTime]) diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/project_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/project_controller.rb index 169e153b56a..16fbb908651 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/project_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/project_controller.rb @@ -221,7 +221,7 @@ class ProjectController < ApplicationController end @snapshot=@project.last_snapshot - @snapshots = Snapshot.all(:conditions => ["status='P' AND project_id=?", @project.id], + @snapshots = Snapshot.all(:conditions => ["status='P' AND component_uuid=?", @project.uuid], :include => 'events', :order => 'snapshots.created_at DESC') end @@ -320,7 +320,7 @@ class ProjectController < ApplicationController end end - redirect_to :action => 'history', :id => snapshot.root_project_id + redirect_to :action => 'history', :id => snapshot.root_project.id end def delete_version @@ -329,7 +329,7 @@ class ProjectController < ApplicationController access_denied unless is_admin?(parent_snapshot) # We update all the related snapshots to have the same version as the next snapshot - next_snapshot = Snapshot.find(:first, :conditions => ['created_at>? and project_id=?', parent_snapshot.created_at.to_i*1000, parent_snapshot.project_id], :order => 'created_at asc') + next_snapshot = Snapshot.find(:first, :conditions => ['created_at>? and component_uuid=?', parent_snapshot.created_at.to_i*1000, parent_snapshot.component_uuid], :order => 'created_at asc') snapshots = find_project_snapshots(parent_snapshot.id) snapshots.each do |snapshot| snapshot.version = next_snapshot.version @@ -348,7 +348,7 @@ class ProjectController < ApplicationController end flash[:notice] = message('project_history.version_removed', :params => h(old_version_name)) - redirect_to :action => 'history', :id => parent_snapshot.root_project_id + redirect_to :action => 'history', :id => parent_snapshot.root_project.id end def create_event @@ -371,7 +371,7 @@ class ProjectController < ApplicationController flash[:notice] = message('project_history.event_created', :params => h(params[:event_name])) end - redirect_to :action => 'history', :id => snapshot.project_id + redirect_to :action => 'history', :id => snapshot.project.id end def update_event diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/models/event.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/models/event.rb index b9d1b345cf7..6133eaead1e 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/models/event.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/models/event.rb @@ -70,7 +70,7 @@ class Event < ActiveRecord::Base # def self.already_exists(snapshot_id, event_name, event_category) snapshot = Snapshot.find(snapshot_id.to_i) - snapshots = Snapshot.find(:all, :conditions => ["status='P' AND project_id=?", snapshot.project_id], :include => 'events') + snapshots = Snapshot.find(:all, :conditions => ["status='P' AND component_uuid=?", snapshot.component_uuid], :include => 'events') snapshots.each do |snapshot| snapshot.events.each do |event| return true if event.name==event_name && event.category==event_category @@ -82,6 +82,6 @@ class Event < ActiveRecord::Base def populate_snapshot self.created_at=DateTime.now unless self.created_at - self.snapshot=Snapshot.snapshot_by_date(resource_id, event_date) unless self.snapshot + self.snapshot=Snapshot.snapshot_by_date(snapshot.uuid, event_date) unless self.snapshot end end diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/models/measure_filter.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/models/measure_filter.rb index ad9713b3dbe..2a24b78060e 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/models/measure_filter.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/models/measure_filter.rb @@ -287,15 +287,11 @@ class MeasureFilter < ActiveRecord::Base end if require_links? - project_ids = [] project_uuids = [] - project_id_by_uuid = {} - rows_by_project_id = {} + rows_by_project_uuid = {} snapshots.each do |snapshot| - project_ids << snapshot.project_id - project_uuids << snapshot.project.uuid - project_id_by_uuid[snapshot.project.uuid] = snapshot.project_id - rows_by_project_id[snapshot.project_id] = rows_by_snapshot_id[snapshot.id] + project_uuids << snapshot.component_uuid + rows_by_project_uuid[snapshot.component_uuid] = rows_by_snapshot_id[snapshot.id] end links = [] @@ -303,7 +299,7 @@ class MeasureFilter < ActiveRecord::Base links.concat(ProjectLink.all(:conditions => {:component_uuid => safe_for_oracle_uuids}, :order => 'link_type')) end links.each do |link| - rows_by_project_id[project_id_by_uuid[link.component_uuid]].add_link(link) + rows_by_project_uuid[link.component_uuid].add_link(link) end end end diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/models/project.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/models/project.rb index 668c75ebd46..b3c0ec0dbc3 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/models/project.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/models/project.rb @@ -21,8 +21,8 @@ class Project < ActiveRecord::Base include Comparable include Resourceable - has_many :snapshots - has_many :processed_snapshots, :class_name => 'Snapshot', :conditions => "status='#{Snapshot::STATUS_PROCESSED}' AND qualifier<>'LIB'", :order => 'created_at asc' + has_many :snapshots, :class_name => 'Snapshot', :foreign_key => 'component_uuid', :primary_key => 'uuid' + has_many :processed_snapshots, :class_name => 'Snapshot', :foreign_key => 'component_uuid', :primary_key => 'uuid', :conditions => "status='#{Snapshot::STATUS_PROCESSED}' AND qualifier<>'LIB'", :order => 'created_at asc' has_many :events, :foreign_key => 'component_uuid', :primary_key => 'uuid', :order => 'event_date DESC' has_many :project_links, :foreign_key => 'component_uuid', :primary_key => 'uuid', :dependent => :delete_all, :order => 'link_type' has_many :user_roles, :foreign_key => 'resource_id' @@ -108,7 +108,7 @@ class Project < ActiveRecord::Base def last_snapshot @last_snapshot ||= begin - snapshot=Snapshot.first(:conditions => {:islast => true, :project_id => id}) + snapshot=Snapshot.first(:conditions => {:islast => true, :component_uuid => uuid}) if snapshot snapshot.project=self end @@ -146,7 +146,7 @@ class Project < ActiveRecord::Base ' from project_measures m, snapshots s ' + ' where s.id=m.snapshot_id and ' + " s.status='%s' and " + - ' s.project_id=%s and m.metric_id=%s ', 'P', self.id, metric_id]) + + ' s.component_uuid=%s and m.metric_id=%s ', 'P', self.uuid, metric_id]) + ' and m.person_id IS NULL' + ' order by s.created_at' create_chart_measures(Project.connection.select_all(sql), 'created_at', 'value') diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/models/snapshot.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/models/snapshot.rb index f929f119e6f..9d17cfe325e 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/models/snapshot.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/models/snapshot.rb @@ -21,8 +21,8 @@ class Snapshot < ActiveRecord::Base include Resourceable acts_as_tree :foreign_key => 'parent_snapshot_id' - belongs_to :project - belongs_to :root_project, :class_name => 'Project', :foreign_key => 'root_project_id' + belongs_to :project, :class_name => 'Project', :foreign_key => 'component_uuid',:primary_key => 'uuid' + belongs_to :root_project, :class_name => 'Project', :foreign_key => 'root_component_uuid',:primary_key => 'uuid' belongs_to :parent_snapshot, :class_name => 'Snapshot', :foreign_key => 'parent_snapshot_id' belongs_to :root_snapshot, :class_name => 'Snapshot', :foreign_key => 'root_snapshot_id' @@ -75,7 +75,7 @@ class Snapshot < ActiveRecord::Base # 2. project B, which depends on A 1.0, is analyzed -> new snapshot A 1.0 with qualifier LIB. # 3. project A has 2 snapshots : the first one with qualifier=TRK has measures, the second one with qualifier LIB has no measures. Its version must not be used in time machine # That's why the 2 following SQL requests check the qualifiers (and optionally scopes, just to be sure) - snapshots=Snapshot.find(:all, :conditions => ["snapshots.project_id=? AND events.snapshot_id=snapshots.id AND snapshots.status=? AND snapshots.scope=? AND snapshots.qualifier=?", resource.id, STATUS_PROCESSED, resource.scope, resource.qualifier], + snapshots=Snapshot.find(:all, :conditions => ["snapshots.component_uuid=? AND events.snapshot_id=snapshots.id AND snapshots.status=? AND snapshots.scope=? AND snapshots.qualifier=?", resource.uuid, STATUS_PROCESSED, resource.scope, resource.qualifier], :include => 'events', :order => 'snapshots.created_at ASC') @@ -84,7 +84,7 @@ class Snapshot < ActiveRecord::Base snapshots=snapshots[-5, 5] if snapshots.size>=5 snapshots.insert(0, Snapshot.find(:first, - :conditions => ["project_id=? AND status=? AND scope=? AND qualifier=?", resource.id, STATUS_PROCESSED, resource.scope, resource.qualifier], + :conditions => ["component_uuid=? AND status=? AND scope=? AND qualifier=?", resource.uuid, STATUS_PROCESSED, resource.scope, resource.qualifier], :include => 'project', :order => 'snapshots.created_at ASC', :limit => 1)) snapshots.compact.uniq @@ -97,7 +97,7 @@ class Snapshot < ActiveRecord::Base end # Get 1rst & latests snapshots of the period - snapshot_conditions = ["snapshots.project_id=? AND snapshots.status=? AND snapshots.scope=? AND snapshots.qualifier=?", resource.id, STATUS_PROCESSED, resource.scope, resource.qualifier] + snapshot_conditions = ["snapshots.component_uuid=? AND snapshots.status=? AND snapshots.scope=? AND snapshots.qualifier=?", resource.uuid, STATUS_PROCESSED, resource.scope, resource.qualifier] if options[:from] snapshot_conditions[0] += " AND snapshots.created_at>=?" snapshot_conditions << options[:from].to_i * 1000 @@ -196,9 +196,9 @@ class Snapshot < ActiveRecord::Base nil end - def self.snapshot_by_date(resource_id, date) - if resource_id && date - Snapshot.find(:first, :conditions => ['created_at>=? and created_at<? and project_id=?', date.beginning_of_day.to_i*1000, date.end_of_day.to_i*1000, resource_id], :order => 'created_at desc') + def self.snapshot_by_date(resource_uuid, date) + if resource_uuid && date + Snapshot.find(:first, :conditions => ['created_at>=? and created_at<? and component_uuid=?', date.beginning_of_day.to_i*1000, date.end_of_day.to_i*1000, resource_uuid], :order => 'created_at desc') else nil end @@ -209,7 +209,7 @@ class Snapshot < ActiveRecord::Base end def resource_id - project_id + project.id end def periods? @@ -217,7 +217,7 @@ class Snapshot < ActiveRecord::Base end def resource_id_for_authorization - root_project_id || project_id + root_project.id end def path_name diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/models/trends_chart.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/models/trends_chart.rb index 0780981546e..f681c28b3d7 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/models/trends_chart.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/models/trends_chart.rb @@ -24,9 +24,9 @@ class TrendsChart sql= "select s.created_at as created_at, m.value as value, m.metric_id as metric_id, s.id as sid " + " from project_measures m LEFT OUTER JOIN snapshots s ON s.id=m.snapshot_id " + " where s.status=? " + - " and s.project_id=? " + + " and s.component_uuid=? " + " and m.metric_id in (?) " + - " and m.person_id is null" + " and m.person_id is null" if (options[:from]) sql += ' and s.created_at>=?' end @@ -34,7 +34,7 @@ class TrendsChart sql += ' and s.created_at<=?' end sql += ' order by s.created_at ASC' - conditions=[sql, Snapshot::STATUS_PROCESSED, resource.id, metric_ids] + conditions=[sql, Snapshot::STATUS_PROCESSED, resource.uuid, metric_ids] if (options[:from]) conditions<<options[:from].to_i*1000 end |