You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IssueMapper.xml 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
  3. <mapper namespace="org.sonar.db.issue.IssueMapper">
  4. <sql id="issueColumns">
  5. i.kee as kee,
  6. i.rule_uuid as ruleUuid,
  7. i.severity as severity,
  8. i.manual_severity as manualSeverity,
  9. i.message as message,
  10. i.message_formattings as messageFormattings,
  11. i.line as line,
  12. i.locations as locations,
  13. i.gap as gap,
  14. i.effort as effort,
  15. i.status as status,
  16. i.resolution as resolution,
  17. i.checksum as checksum,
  18. i.assignee as assigneeUuid,
  19. i.author_login as authorLogin,
  20. i.tags as tagsString,
  21. i.rule_description_context_key as ruleDescriptionContextKey,
  22. i.issue_creation_date as issueCreationTime,
  23. i.issue_update_date as issueUpdateTime,
  24. i.issue_close_date as issueCloseTime,
  25. i.created_at as createdAt,
  26. i.updated_at as updatedAt,
  27. r.is_external as "isExternal",
  28. r.plugin_rule_key as ruleKey,
  29. r.plugin_name as ruleRepo,
  30. r.language as language,
  31. r.security_standards as securityStandards,
  32. i.clean_code_attribute as cleanCodeAttribute,
  33. r.clean_code_attribute as ruleCleanCodeAttribute,
  34. p.kee as componentKey,
  35. i.component_uuid as componentUuid,
  36. p.path as filePath,
  37. root.kee as projectKey,
  38. i.project_uuid as projectUuid,
  39. i.issue_type as type,
  40. i.quick_fix_available as quickFixAvailable,
  41. i.code_variants as codeVariantsString,
  42. <include refid="issueImpactsColumns"/>
  43. <include refid="ruleDefaultImpactsColumns"/>
  44. <include refid="isNewCodeReferenceIssue"/>
  45. </sql>
  46. <sql id="issueColumnsInInnerQuery">
  47. i.kee,
  48. i.rule_uuid,
  49. i.severity,
  50. i.manual_severity,
  51. i.message,
  52. i.message_formattings,
  53. i.line,
  54. i.locations,
  55. i.gap,
  56. i.effort,
  57. i.status,
  58. i.resolution,
  59. i.checksum,
  60. i.assignee,
  61. i.author_login,
  62. i.tags,
  63. i.rule_description_context_key,
  64. i.issue_creation_date,
  65. i.issue_update_date,
  66. i.issue_close_date,
  67. i.created_at,
  68. i.updated_at,
  69. i.component_uuid,
  70. i.project_uuid,
  71. i.issue_type,
  72. i.quick_fix_available,
  73. i.code_variants,
  74. i.clean_code_attribute
  75. </sql>
  76. <sql id="isNewCodeReferenceIssue" databaseId="mssql">
  77. cast(case when n.uuid is null then 0 else 1 end as bit) as isNewCodeReferenceIssue
  78. </sql>
  79. <sql id="isNewCodeReferenceIssue" databaseId="oracle">
  80. case when n.uuid is null then 0 else 1 end as isNewCodeReferenceIssue
  81. </sql>
  82. <sql id="isNewCodeReferenceIssue">
  83. n.uuid is not null as isNewCodeReferenceIssue
  84. </sql>
  85. <sql id="sortColumn">
  86. <if test="query.sort() != null">,
  87. <choose>
  88. <when test="'SEVERITY'.equals(query.sort())">
  89. i.severity as severity
  90. </when>
  91. <when test="'STATUS'.equals(query.sort())">
  92. i.status as status
  93. </when>
  94. <when test="'ASSIGNEE'.equals(query.sort())">
  95. i.assignee as assigneeUuid
  96. </when>
  97. <when test="'CREATION_DATE'.equals(query.sort())">
  98. i.issue_creation_date as issueCreationTime
  99. </when>
  100. <when test="'UPDATE_DATE'.equals(query.sort())">
  101. i.issue_update_date as issueUpdateTime
  102. </when>
  103. <when test="'CLOSE_DATE'.equals(query.sort())">
  104. i.issue_close_date as issueCloseTime
  105. </when>
  106. </choose>
  107. </if>
  108. </sql>
  109. <sql id="issueImpactsColumns">
  110. ii.software_quality as "ii_softwareQuality",
  111. ii.severity as "ii_severity",
  112. </sql>
  113. <sql id="ruleDefaultImpactsColumns">
  114. rdi.software_quality as "rdi_softwareQuality",
  115. rdi.severity as "rdi_severity",
  116. </sql>
  117. <resultMap id="issueResultMap" type="Issue" autoMapping="true">
  118. <id property="kee" column="kee"/>
  119. <collection property="impacts" column="ii_softwareQuality" notNullColumn="ii_softwareQuality"
  120. javaType="java.util.Set" ofType="Impact">
  121. <result property="softwareQuality" column="ii_softwareQuality"/>
  122. <result property="severity" column="ii_severity"/>
  123. </collection>
  124. <collection property="ruleDefaultImpacts" column="rdi_softwareQuality" notNullColumn="rdi_softwareQuality"
  125. javaType="java.util.Set" ofType="Impact">
  126. <result property="softwareQuality" column="rdi_softwareQuality"/>
  127. <result property="severity" column="rdi_severity"/>
  128. </collection>
  129. </resultMap>
  130. <insert id="insert" parameterType="Issue" useGeneratedKeys="false">
  131. INSERT INTO issues (kee, rule_uuid, severity, manual_severity,
  132. message, message_formattings, line, locations, gap, effort, status, tags, rule_description_context_key,
  133. resolution, checksum, assignee, author_login, issue_creation_date, issue_update_date,
  134. issue_close_date, created_at, updated_at, component_uuid, project_uuid, issue_type, quick_fix_available, code_variants,
  135. clean_code_attribute)
  136. VALUES (
  137. #{kee,jdbcType=VARCHAR},
  138. #{ruleUuid,jdbcType=VARCHAR},
  139. #{severity,jdbcType=VARCHAR},
  140. #{manualSeverity,jdbcType=BOOLEAN},
  141. #{message,jdbcType=VARCHAR},
  142. #{messageFormattings,jdbcType=BINARY},
  143. #{line,jdbcType=INTEGER},
  144. #{locations,jdbcType=BINARY},
  145. #{gap,jdbcType=DOUBLE}, #{effort,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR},
  146. #{tagsString,jdbcType=VARCHAR},
  147. #{ruleDescriptionContextKey,jdbcType=VARCHAR},
  148. #{resolution,jdbcType=VARCHAR},
  149. #{checksum,jdbcType=VARCHAR},
  150. #{assigneeUuid,jdbcType=VARCHAR},
  151. #{authorLogin,jdbcType=VARCHAR},
  152. #{issueCreationTime,jdbcType=BIGINT},#{issueUpdateTime,jdbcType=BIGINT}, #{issueCloseTime,jdbcType=BIGINT},
  153. #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT},
  154. #{componentUuid,jdbcType=VARCHAR}, #{projectUuid,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
  155. #{quickFixAvailable, jdbcType=BOOLEAN},
  156. #{codeVariantsString,jdbcType=VARCHAR},
  157. #{effectiveCleanCodeAttribute,jdbcType=VARCHAR})
  158. </insert>
  159. <insert id="insertAsNewCodeOnReferenceBranch" parameterType="NewCodeReferenceIssue" useGeneratedKeys="false">
  160. INSERT INTO new_code_reference_issues (uuid, issue_key, created_at)
  161. VALUES (
  162. #{uuid,jdbcType=VARCHAR},
  163. #{issueKey,jdbcType=VARCHAR},
  164. #{createdAt,jdbcType=BIGINT})
  165. </insert>
  166. <insert id="insertIssueImpact" parameterType="map" useGeneratedKeys="false">
  167. INSERT INTO issues_impacts (issue_key, software_quality, severity)
  168. VALUES (
  169. #{issueKey,jdbcType=VARCHAR},
  170. #{dto.softwareQuality,jdbcType=VARCHAR},
  171. #{dto.severity,jdbcType=VARCHAR})
  172. </insert>
  173. <delete id="deleteAsNewCodeOnReferenceBranch" parameterType="String" >
  174. DELETE FROM new_code_reference_issues
  175. where issue_key = #{issueKey, jdbcType=VARCHAR}
  176. </delete>
  177. <delete id="deleteIssueImpacts" parameterType="String" >
  178. DELETE FROM issues_impacts
  179. where issue_key = #{issueUuid, jdbcType=VARCHAR}
  180. </delete>
  181. <!--
  182. IMPORTANT - invariant columns can't be updated. See IssueDto#toDtoForUpdate()
  183. -->
  184. <update id="update" parameterType="Issue">
  185. update issues set
  186. severity=#{severity,jdbcType=VARCHAR},
  187. manual_severity=#{manualSeverity,jdbcType=BOOLEAN},
  188. message=#{message,jdbcType=VARCHAR},
  189. message_formattings=#{messageFormattings,jdbcType=BINARY},
  190. line=#{line,jdbcType=INTEGER},
  191. locations=#{locations,jdbcType=BINARY},
  192. gap=#{gap,jdbcType=DOUBLE},
  193. effort=#{effort,jdbcType=INTEGER},
  194. status=#{status,jdbcType=VARCHAR},
  195. resolution=#{resolution,jdbcType=VARCHAR},
  196. checksum=#{checksum,jdbcType=VARCHAR},
  197. assignee=#{assigneeUuid,jdbcType=VARCHAR},
  198. author_login=#{authorLogin,jdbcType=VARCHAR},
  199. tags=#{tagsString,jdbcType=VARCHAR},
  200. rule_description_context_key=#{ruleDescriptionContextKey,jdbcType=VARCHAR},
  201. project_uuid=#{projectUuid,jdbcType=VARCHAR},
  202. issue_creation_date=#{issueCreationTime,jdbcType=BIGINT},
  203. issue_update_date=#{issueUpdateTime,jdbcType=BIGINT},
  204. issue_close_date=#{issueCloseTime,jdbcType=BIGINT},
  205. updated_at=#{updatedAt,jdbcType=BIGINT},
  206. issue_type=#{type,jdbcType=INTEGER},
  207. code_variants=#{codeVariantsString,jdbcType=VARCHAR},
  208. clean_code_attribute=#{effectiveCleanCodeAttribute,jdbcType=VARCHAR}
  209. where kee = #{kee}
  210. </update>
  211. <!--
  212. IMPORTANT - invariant columns can't be updated. See IssueDto#toDtoForUpdate()
  213. -->
  214. <update id="updateIfBeforeSelectedDate" parameterType="Issue">
  215. update issues set
  216. severity=#{severity,jdbcType=VARCHAR},
  217. manual_severity=#{manualSeverity,jdbcType=BOOLEAN},
  218. message=#{message,jdbcType=VARCHAR},
  219. message_formattings=#{messageFormattings,jdbcType=BINARY},
  220. line=#{line,jdbcType=INTEGER},
  221. locations=#{locations,jdbcType=BINARY},
  222. gap=#{gap,jdbcType=DOUBLE},
  223. effort=#{effort,jdbcType=INTEGER},
  224. status=#{status,jdbcType=VARCHAR},
  225. resolution=#{resolution,jdbcType=VARCHAR},
  226. checksum=#{checksum,jdbcType=VARCHAR},
  227. assignee=#{assigneeUuid,jdbcType=VARCHAR},
  228. author_login=#{authorLogin,jdbcType=VARCHAR},
  229. tags=#{tagsString,jdbcType=VARCHAR},
  230. rule_description_context_key=#{ruleDescriptionContextKey,jdbcType=VARCHAR},
  231. component_uuid=#{componentUuid,jdbcType=VARCHAR},
  232. project_uuid=#{projectUuid,jdbcType=VARCHAR},
  233. issue_creation_date=#{issueCreationTime,jdbcType=BIGINT},
  234. issue_update_date=#{issueUpdateTime,jdbcType=BIGINT},
  235. issue_close_date=#{issueCloseTime,jdbcType=BIGINT},
  236. updated_at=#{updatedAt,jdbcType=BIGINT},
  237. issue_type=#{type,jdbcType=INTEGER},
  238. code_variants=#{codeVariantsString,jdbcType=VARCHAR},
  239. clean_code_attribute=#{effectiveCleanCodeAttribute,jdbcType=VARCHAR}
  240. where kee = #{kee} and updated_at &lt;= #{selectedAt}
  241. </update>
  242. <select id="selectByKey" parameterType="String" resultMap="issueResultMap">
  243. select
  244. <include refid="issueColumns"/>,
  245. u.login as assigneeLogin
  246. from issues i
  247. inner join rules r on r.uuid=i.rule_uuid
  248. inner join components p on p.uuid=i.component_uuid
  249. inner join components root on root.uuid=i.project_uuid
  250. left join users u on i.assignee = u.uuid
  251. left join new_code_reference_issues n on i.kee = n.issue_key
  252. left outer join issues_impacts ii on i.kee = ii.issue_key
  253. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  254. where i.kee=#{kee,jdbcType=VARCHAR}
  255. </select>
  256. <select id="scrollNonClosedByComponentUuid" parameterType="String" resultMap="issueResultMap" fetchSize="${_scrollFetchSize}" resultSetType="FORWARD_ONLY" resultOrdered="true">
  257. select
  258. <include refid="issueColumns"/>
  259. from issues i
  260. inner join rules r on r.uuid=i.rule_uuid
  261. inner join components p on p.uuid=i.component_uuid
  262. inner join components root on root.uuid=i.project_uuid
  263. left join new_code_reference_issues n on i.kee = n.issue_key
  264. left outer join issues_impacts ii on i.kee = ii.issue_key
  265. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  266. where
  267. i.component_uuid = #{componentUuid,jdbcType=VARCHAR} and
  268. i.status &lt;&gt; 'CLOSED'
  269. order by
  270. i.kee
  271. </select>
  272. <select id="scrollClosedByComponentUuid" resultMap="issueResultMap" fetchSize="${_scrollFetchSize}" resultSetType="FORWARD_ONLY" resultOrdered="true">
  273. select
  274. <include refid="issueColumns"/>,
  275. ic.change_data as closedChangeData
  276. from issues i
  277. inner join rules r on
  278. r.uuid = i.rule_uuid
  279. inner join components p on
  280. p.uuid = i.component_uuid
  281. inner join components root on
  282. root.uuid = i.project_uuid
  283. inner join issue_changes ic on
  284. ic.issue_key = i.kee
  285. and ic.change_type = 'diff'
  286. and ic.change_data like '%status=%|CLOSED%'
  287. left join new_code_reference_issues n on
  288. i.kee = n.issue_key
  289. left outer join issues_impacts ii on
  290. i.kee = ii.issue_key
  291. left outer join rules_default_impacts rdi on
  292. r.uuid = rdi.rule_uuid
  293. where
  294. i.component_uuid = #{componentUuid,jdbcType=VARCHAR}
  295. and i.status = 'CLOSED'
  296. and i.issue_close_date is not null
  297. and i.issue_close_date &gt;= #{closeDateAfter,jdbcType=BIGINT}
  298. order by
  299. i.kee, ic.issue_change_creation_date desc
  300. </select>
  301. <resultMap id="indexedIssueResultMap" type="org.sonar.db.issue.IndexedIssueDto" autoMapping="true">
  302. <id property="issueKey" column="issueKey"/>
  303. <collection property="impacts" column="ii_softwareQuality" notNullColumn="ii_softwareQuality"
  304. javaType="java.util.Set" ofType="Impact">
  305. <result property="softwareQuality" column="ii_softwareQuality"/>
  306. <result property="severity" column="ii_severity"/>
  307. </collection>
  308. <collection property="ruleDefaultImpacts" column="rdi_softwareQuality" notNullColumn="rdi_softwareQuality"
  309. javaType="java.util.Set" ofType="Impact">
  310. <result property="softwareQuality" column="rdi_softwareQuality"/>
  311. <result property="severity" column="rdi_severity"/>
  312. </collection>
  313. </resultMap>
  314. <select id="scrollIssuesForIndexation" parameterType="map" resultMap="indexedIssueResultMap" fetchSize="${_scrollFetchSize}"
  315. resultSetType="FORWARD_ONLY" resultOrdered="true">
  316. select
  317. i.kee as issueKey,
  318. i.assignee,
  319. i.line,
  320. i.resolution,
  321. i.severity,
  322. i.status,
  323. i.effort,
  324. i.author_login as authorLogin,
  325. i.issue_close_date as issueCloseDate,
  326. i.issue_creation_date as issueCreationDate,
  327. i.issue_update_date as issueUpdateDate,
  328. r.uuid as ruleUuid,
  329. r.language as language,
  330. i.clean_code_attribute as cleanCodeAttribute,
  331. r.clean_code_attribute as ruleCleanCodeAttribute,
  332. c.uuid as componentUuid,
  333. c.path,
  334. c.scope,
  335. c.branch_uuid as branchUuid,
  336. pb.is_main as isMain,
  337. pb.project_uuid as projectUuid,
  338. i.tags,
  339. i.issue_type as issueType,
  340. r.security_standards as securityStandards,
  341. c.qualifier,
  342. i.code_variants as codeVariants,
  343. <include refid="issueImpactsColumns"/>
  344. <include refid="ruleDefaultImpactsColumns"/>
  345. <include refid="isNewCodeReferenceIssue"/>
  346. from issues i
  347. inner join rules r on r.uuid = i.rule_uuid
  348. inner join components c on c.uuid = i.component_uuid
  349. inner join project_branches pb on c.branch_uuid = pb.uuid
  350. left join new_code_reference_issues n on n.issue_key = i.kee
  351. left outer join issues_impacts ii on i.kee = ii.issue_key
  352. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  353. <where>
  354. <if test="branchUuid != null">
  355. and c.branch_uuid = #{branchUuid,jdbcType=VARCHAR} and i.project_uuid = #{branchUuid,jdbcType=VARCHAR}
  356. </if>
  357. <if test="issueKeys != null">
  358. and i.kee in
  359. <foreach collection="issueKeys" open="(" close=")" item="key" separator=",">
  360. #{key,jdbcType=VARCHAR}
  361. </foreach>
  362. </if>
  363. </where>
  364. order by i.kee
  365. </select>
  366. <select id="selectComponentUuidsOfOpenIssuesForProjectUuid" parameterType="string" resultType="string">
  367. select distinct(i.component_uuid)
  368. from issues i
  369. where i.project_uuid=#{projectUuid,jdbcType=VARCHAR} and i.status &lt;&gt; 'CLOSED'
  370. </select>
  371. <select id="selectByKeys" parameterType="map" resultMap="issueResultMap">
  372. select
  373. <include refid="issueColumns"/>,
  374. u.login as assigneeLogin
  375. from issues i
  376. inner join rules r on r.uuid=i.rule_uuid
  377. inner join components p on p.uuid=i.component_uuid
  378. inner join components root on root.uuid=i.project_uuid
  379. left join users u on i.assignee = u.uuid
  380. left join new_code_reference_issues n on i.kee = n.issue_key
  381. left outer join issues_impacts ii on i.kee = ii.issue_key
  382. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  383. where i.kee in
  384. <foreach collection="list" open="(" close=")" item="key" separator=",">
  385. #{key,jdbcType=VARCHAR}
  386. </foreach>
  387. </select>
  388. <select id="selectByKeysIfNotUpdatedAt" parameterType="map" resultMap="issueResultMap">
  389. select
  390. <include refid="issueColumns"/>
  391. from issues i
  392. inner join rules r on r.uuid=i.rule_uuid
  393. inner join components p on p.uuid=i.component_uuid
  394. inner join components root on root.uuid=i.project_uuid
  395. left join new_code_reference_issues n on i.kee = n.issue_key
  396. left outer join issues_impacts ii on i.kee = ii.issue_key
  397. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  398. where
  399. i.kee in
  400. <foreach collection="keys" open="(" close=")" item="key" separator=",">
  401. #{key,jdbcType=VARCHAR}
  402. </foreach>
  403. and i.updated_at &lt;&gt; #{updatedAt,jdbcType=BIGINT}
  404. </select>
  405. <select id="selectOpenByComponentUuids" parameterType="map" resultType="PrIssue">
  406. select
  407. i.kee as kee,
  408. i.message as message,
  409. i.line as line,
  410. i.status as status,
  411. i.checksum as checksum,
  412. i.issue_update_date as issueUpdateDate,
  413. r.plugin_rule_key as ruleKey,
  414. r.plugin_name as ruleRepo,
  415. b.kee as branchKey,
  416. b.branch_type as branchType
  417. from issues i
  418. inner join rules r on r.uuid = i.rule_uuid
  419. inner join project_branches b on i.project_uuid = b.uuid
  420. where i.component_uuid in
  421. <foreach collection="list" open="(" close=")" item="key" separator=",">
  422. #{key,jdbcType=VARCHAR}
  423. </foreach>
  424. and i.status &lt;&gt; 'CLOSED'
  425. </select>
  426. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map">
  427. select
  428. i.issue_type as ruleType,
  429. i.severity as severity,
  430. i.resolution as resolution,
  431. i.status as status, sum(i.effort) as effort,
  432. count(i.issue_type) as "count",
  433. <if test="leakPeriodBeginningDate &gt;= 0">
  434. (i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT}) as inLeak
  435. </if>
  436. <if test="leakPeriodBeginningDate &lt; 0">
  437. CASE WHEN n.uuid is null THEN false ELSE true END as inLeak
  438. </if>
  439. from issues i
  440. <if test="leakPeriodBeginningDate &lt; 0">
  441. left join new_code_reference_issues n on n.issue_key = i.kee
  442. </if>
  443. where i.status &lt;&gt; 'CLOSED'
  444. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  445. group by i.issue_type, i.severity, i.resolution, i.status, inLeak
  446. </select>
  447. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map" databaseId="oracle">
  448. <include refid="selectIssueGroupsByComponentVendorSpecific"/>
  449. </select>
  450. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map" databaseId="mssql">
  451. <include refid="selectIssueGroupsByComponentVendorSpecific"/>
  452. </select>
  453. <sql id="selectIssueGroupsByComponentVendorSpecific">
  454. select
  455. i2.issue_type as ruleType,
  456. i2.severity as severity,
  457. i2.resolution as resolution,
  458. i2.status as status,
  459. sum(i2.effort) as effort,
  460. count(i2.issue_type) as "count",
  461. i2.inLeak as inLeak
  462. from (
  463. select
  464. i.issue_type,
  465. i.severity,
  466. i.resolution,
  467. i.status,
  468. i.effort,
  469. <if test="leakPeriodBeginningDate &gt;= 0">
  470. case when i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT} then 1 else 0 end as inLeak
  471. </if>
  472. <if test="leakPeriodBeginningDate &lt; 0">
  473. case when n.uuid is null then 0 else 1 end as inLeak
  474. </if>
  475. from issues i
  476. <if test="leakPeriodBeginningDate &lt; 0">
  477. left join new_code_reference_issues n on n.issue_key = i.kee
  478. </if>
  479. where i.status &lt;&gt; 'CLOSED'
  480. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  481. ) i2
  482. group by i2.issue_type, i2.severity, i2.resolution, i2.status, i2.inLeak
  483. </sql>
  484. <select id="selectIssueImpactGroupsByComponent" resultType="org.sonar.db.issue.IssueImpactGroupDto" parameterType="map">
  485. select
  486. i2.status as status,
  487. i2.resolution as resolution,
  488. i2.software_quality as softwareQuality,
  489. i2.severity as severity,
  490. count(i2.kee) as "count",
  491. i2.inLeak as inLeak
  492. from (
  493. select
  494. i.status,
  495. i.resolution,
  496. i.kee,
  497. ii.software_quality,
  498. ii.severity,
  499. <if test="leakPeriodBeginningDate &gt;= 0">
  500. case when i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT} then ${_true} else ${_false} end as inLeak
  501. </if>
  502. <if test="leakPeriodBeginningDate &lt; 0">
  503. case when n.uuid is null then ${_false} else ${_true} end as inLeak
  504. </if>
  505. from issues i
  506. inner join issues_impacts ii on i.kee = ii.issue_key
  507. <if test="leakPeriodBeginningDate &lt; 0">
  508. left join new_code_reference_issues n on n.issue_key = i.kee
  509. </if>
  510. where i.status &lt;&gt; 'CLOSED'
  511. and (i.resolution is null or i.resolution = 'WONTFIX')
  512. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  513. ) i2
  514. group by i2.status, i2.resolution, i2.software_quality, i2.severity, i2.inLeak
  515. </select>
  516. <select id="selectIssueKeysByComponentUuid" parameterType="string" resultType="string">
  517. select
  518. i.kee
  519. from issues i
  520. where
  521. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  522. </select>
  523. <select id="selectIssueKeysByComponentUuidWithFilters" parameterType="string" resultType="string">
  524. select
  525. i.kee
  526. from rules r
  527. inner join issues i on i.rule_uuid = r.uuid
  528. where
  529. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  530. AND i.status &lt;&gt; 'CLOSED'
  531. <if test="includingRepositories.size() > 0">
  532. AND r.plugin_name IN
  533. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  534. #{ruleRepository}
  535. </foreach>
  536. </if>
  537. <if test="excludingRepositories.size() > 0">
  538. AND r.plugin_name NOT IN
  539. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  540. #{ruleRepository}
  541. </foreach>
  542. </if>
  543. <if test="languages.size() > 0">
  544. AND r.language IN
  545. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  546. #{language}
  547. </foreach>
  548. </if>
  549. order by i.kee
  550. <include refid="org.sonar.db.common.Common.pagination"/>
  551. </select>
  552. <select id="selectIssueKeysByComponentUuidAndChangedSinceDate" parameterType="map" resultType="string">
  553. select
  554. i.kee
  555. from rules r
  556. inner join issues i on i.rule_uuid = r.uuid
  557. where
  558. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  559. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  560. AND i.status &lt;&gt; 'CLOSED'
  561. <if test="includingRepositories.size() > 0">
  562. AND r.plugin_name IN
  563. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  564. #{ruleRepository}
  565. </foreach>
  566. </if>
  567. <if test="excludingRepositories.size() > 0">
  568. AND r.plugin_name NOT IN
  569. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  570. #{ruleRepository}
  571. </foreach>
  572. </if>
  573. <if test="languages.size() > 0">
  574. AND r.language IN
  575. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  576. #{language}
  577. </foreach>
  578. </if>
  579. order by i.kee
  580. <include refid="org.sonar.db.common.Common.pagination"/>
  581. </select>
  582. <sql id="selectByBranchColumns">
  583. i.kee as kee,
  584. i.rule_uuid as ruleUuid,
  585. i.created_at as createdAt,
  586. i.issue_creation_date as issueCreationTime,
  587. i.status as status,
  588. i.resolution as resolution,
  589. r.rule_type as ruleType,
  590. r.plugin_name as ruleRepo,
  591. r.plugin_rule_key as ruleKey,
  592. i.message as message,
  593. i.message_formattings as messageFormattings,
  594. i.severity as severity,
  595. i.manual_severity as manualSeverity,
  596. i.issue_type as type,
  597. i.locations as locations,
  598. i.component_uuid as component_uuid,
  599. i.assignee as assigneeUuid,
  600. u.login as assigneeLogin,
  601. i.rule_description_context_key as ruleDescriptionContextKey,
  602. <include refid="issueImpactsColumns"/>
  603. <include refid="ruleDefaultImpactsColumns"/>
  604. i.clean_code_attribute as cleanCodeAttribute,
  605. r.clean_code_attribute as ruleCleanCodeAttribute
  606. </sql>
  607. <select id="selectByBranch" parameterType="map" resultMap="issueResultMap" resultOrdered="true">
  608. select
  609. <include refid="selectByBranchColumns"/>
  610. , p.path as filePath
  611. from issues i
  612. inner join rules r on r.uuid = i.rule_uuid
  613. inner join components p on p.uuid=i.component_uuid
  614. left join users u on i.assignee = u.uuid
  615. left outer join issues_impacts ii on i.kee = ii.issue_key
  616. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  617. where
  618. <if test="keys.size() > 0">
  619. i.kee IN
  620. <foreach collection="keys" open="(" close=")" item="key" separator=",">
  621. #{key,jdbcType=VARCHAR}
  622. </foreach>
  623. </if>
  624. <if test="changedSince != null">
  625. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  626. </if>
  627. order by i.kee
  628. </select>
  629. <select id="selectRecentlyClosedIssues" resultType="string">
  630. select i.kee
  631. from rules r
  632. inner join issues i on r.uuid = i.rule_uuid
  633. where
  634. i.project_uuid = #{queryParams.branchUuid}
  635. AND issue_update_date &gt;= #{queryParams.changedSince}
  636. AND i.status = 'CLOSED'
  637. <if test="queryParams.ruleRepositories.size() > 0">
  638. AND r.plugin_name IN
  639. <foreach item="ruleRepository" index="index" collection="queryParams.ruleRepositories" open="(" separator="," close=")">
  640. #{ruleRepository}
  641. </foreach>
  642. </if>
  643. <if test="queryParams.excludingRuleRepositories.size() > 0">
  644. AND r.plugin_name NOT IN
  645. <foreach item="ruleRepository" index="index" collection="queryParams.excludingRuleRepositories" open="(" separator="," close=")">
  646. #{ruleRepository}
  647. </foreach>
  648. </if>
  649. <if test="queryParams.languages.size() > 0">
  650. AND r.language IN
  651. <foreach item="language" index="index" collection="queryParams.languages" open="(" separator="," close=")">
  652. #{language}
  653. </foreach>
  654. </if>
  655. </select>
  656. <select id="selectIssueKeysByQuery" parameterType="map" resultType="string">
  657. select
  658. i.kee
  659. from issues i
  660. inner join components p on p.uuid=i.component_uuid
  661. inner join components root on root.uuid=i.project_uuid
  662. inner join project_branches pb on pb.uuid=i.project_uuid
  663. left join new_code_reference_issues n on i.kee = n.issue_key
  664. <if test="query.softwareQualities.size() > 0">
  665. left join issues_impacts im on i.kee = im.issue_key
  666. </if>
  667. <where>
  668. <if test="query.project != null">
  669. root.kee = #{query.project,jdbcType=VARCHAR}
  670. </if>
  671. <if test="query.component != null">
  672. AND p.kee = #{query.component,jdbcType=VARCHAR}
  673. </if>
  674. <if test="query.branch != null">
  675. AND pb.kee = #{query.branch,jdbcType=VARCHAR}
  676. </if>
  677. <if test="query.pullRequest != null">
  678. AND pb.kee = #{query.pullRequest,jdbcType=VARCHAR}
  679. </if>
  680. <if test="query.types.size() > 0">
  681. AND i.issue_type IN
  682. <foreach collection="query.types" open="(" close=")" item="type" separator=",">
  683. #{type,jdbcType=VARCHAR}
  684. </foreach>
  685. </if>
  686. <if test="query.softwareQualities.size() > 0">
  687. AND im.software_quality IN
  688. <foreach collection="query.softwareQualities" open="(" close=")" item="type" separator=",">
  689. #{type,jdbcType=VARCHAR}
  690. </foreach>
  691. </if>
  692. <if test="query.statuses.size() > 0">
  693. AND i.status IN
  694. <foreach collection="query.statuses" open="(" close=")" item="status" separator=",">
  695. #{status,jdbcType=VARCHAR}
  696. </foreach>
  697. </if>
  698. <if test="query.resolved != null">
  699. AND i.resolution is <if test="query.resolved">not</if> null
  700. </if>
  701. <if test="query.resolutions.size() > 0">
  702. AND i.resolution IN
  703. <foreach collection="query.resolutions" open="(" close=")" item="resolution" separator=",">
  704. #{resolution,jdbcType=VARCHAR}
  705. </foreach>
  706. </if>
  707. <if test="query.newCodeOnReference == true">
  708. AND n.uuid IS NOT NULL
  709. </if>
  710. <if test="query.createdAfter != null">
  711. AND i.issue_creation_date &gt;= #{query.createdAfter,jdbcType=BIGINT}
  712. </if>
  713. </where>
  714. <if test="_databaseId == 'mssql'">
  715. <!-- order by clause is required if using offset rows fetch next on MSSQL Database -->
  716. order by (select null)
  717. </if>
  718. <include refid="org.sonar.db.common.Common.pagination"/>
  719. </select>
  720. </mapper>