Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

IssueMapper.xml 35KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
  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. r.clean_code_attribute as cleanCodeAttribute,
  33. p.kee as componentKey,
  34. i.component_uuid as componentUuid,
  35. p.path as filePath,
  36. root.kee as projectKey,
  37. i.project_uuid as projectUuid,
  38. i.issue_type as type,
  39. i.quick_fix_available as quickFixAvailable,
  40. i.code_variants as codeVariantsString,
  41. <include refid="issueImpactsColumns"/>
  42. <include refid="ruleDefaultImpactsColumns"/>
  43. <include refid="isNewCodeReferenceIssue"/>
  44. </sql>
  45. <sql id="issueColumnsInInnerQuery">
  46. i.kee,
  47. i.rule_uuid,
  48. i.severity,
  49. i.manual_severity,
  50. i.message,
  51. i.message_formattings,
  52. i.line,
  53. i.locations,
  54. i.gap,
  55. i.effort,
  56. i.status,
  57. i.resolution,
  58. i.checksum,
  59. i.assignee,
  60. i.author_login,
  61. i.tags,
  62. i.rule_description_context_key,
  63. i.issue_creation_date,
  64. i.issue_update_date,
  65. i.issue_close_date,
  66. i.created_at,
  67. i.updated_at,
  68. i.component_uuid,
  69. i.project_uuid,
  70. i.issue_type,
  71. i.quick_fix_available,
  72. i.code_variants
  73. </sql>
  74. <sql id="isNewCodeReferenceIssue" databaseId="mssql">
  75. cast(case when n.uuid is null then 0 else 1 end as bit) as isNewCodeReferenceIssue
  76. </sql>
  77. <sql id="isNewCodeReferenceIssue" databaseId="oracle">
  78. case when n.uuid is null then 0 else 1 end as isNewCodeReferenceIssue
  79. </sql>
  80. <sql id="isNewCodeReferenceIssue">
  81. n.uuid is not null as isNewCodeReferenceIssue
  82. </sql>
  83. <sql id="sortColumn">
  84. <if test="query.sort() != null">,
  85. <choose>
  86. <when test="'SEVERITY'.equals(query.sort())">
  87. i.severity as severity
  88. </when>
  89. <when test="'STATUS'.equals(query.sort())">
  90. i.status as status
  91. </when>
  92. <when test="'ASSIGNEE'.equals(query.sort())">
  93. i.assignee as assigneeUuid
  94. </when>
  95. <when test="'CREATION_DATE'.equals(query.sort())">
  96. i.issue_creation_date as issueCreationTime
  97. </when>
  98. <when test="'UPDATE_DATE'.equals(query.sort())">
  99. i.issue_update_date as issueUpdateTime
  100. </when>
  101. <when test="'CLOSE_DATE'.equals(query.sort())">
  102. i.issue_close_date as issueCloseTime
  103. </when>
  104. </choose>
  105. </if>
  106. </sql>
  107. <sql id="issueImpactsColumns">
  108. ii.uuid as "ii_uuid",
  109. ii.software_quality as "ii_softwareQuality",
  110. ii.severity as "ii_severity",
  111. </sql>
  112. <sql id="ruleDefaultImpactsColumns">
  113. rdi.uuid as "rdi_uuid",
  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_uuid" notNullColumn="ii_uuid"
  120. javaType="java.util.Set" ofType="Impact">
  121. <id property="uuid" column="ii_uuid"/>
  122. <result property="softwareQuality" column="ii_softwareQuality"/>
  123. <result property="severity" column="ii_severity"/>
  124. </collection>
  125. <collection property="ruleDefaultImpacts" column="rdi_uuid" notNullColumn="rdi_uuid"
  126. javaType="java.util.Set" ofType="Impact">
  127. <id property="uuid" column="rdi_uuid"/>
  128. <result property="softwareQuality" column="rdi_softwareQuality"/>
  129. <result property="severity" column="rdi_severity"/>
  130. </collection>
  131. </resultMap>
  132. <insert id="insert" parameterType="Issue" useGeneratedKeys="false">
  133. INSERT INTO issues (kee, rule_uuid, severity, manual_severity,
  134. message, message_formattings, line, locations, gap, effort, status, tags, rule_description_context_key,
  135. resolution, checksum, assignee, author_login, issue_creation_date, issue_update_date,
  136. issue_close_date, created_at, updated_at, component_uuid, project_uuid, issue_type, quick_fix_available, code_variants)
  137. VALUES (
  138. #{kee,jdbcType=VARCHAR},
  139. #{ruleUuid,jdbcType=VARCHAR},
  140. #{severity,jdbcType=VARCHAR},
  141. #{manualSeverity,jdbcType=BOOLEAN},
  142. #{message,jdbcType=VARCHAR},
  143. #{messageFormattings,jdbcType=BINARY},
  144. #{line,jdbcType=INTEGER},
  145. #{locations,jdbcType=BINARY},
  146. #{gap,jdbcType=DOUBLE}, #{effort,jdbcType=INTEGER}, #{status,jdbcType=VARCHAR},
  147. #{tagsString,jdbcType=VARCHAR},
  148. #{ruleDescriptionContextKey,jdbcType=VARCHAR},
  149. #{resolution,jdbcType=VARCHAR},
  150. #{checksum,jdbcType=VARCHAR},
  151. #{assigneeUuid,jdbcType=VARCHAR},
  152. #{authorLogin,jdbcType=VARCHAR},
  153. #{issueCreationTime,jdbcType=BIGINT},#{issueUpdateTime,jdbcType=BIGINT}, #{issueCloseTime,jdbcType=BIGINT},
  154. #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT},
  155. #{componentUuid,jdbcType=VARCHAR}, #{projectUuid,jdbcType=VARCHAR}, #{type,jdbcType=INTEGER},
  156. #{quickFixAvailable, jdbcType=BOOLEAN},
  157. #{codeVariantsString,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 (uuid, issue_key, software_quality, severity)
  168. VALUES (
  169. #{dto.uuid,jdbcType=VARCHAR},
  170. #{issueKey,jdbcType=VARCHAR},
  171. #{dto.softwareQuality,jdbcType=VARCHAR},
  172. #{dto.severity,jdbcType=VARCHAR})
  173. </insert>
  174. <delete id="deleteAsNewCodeOnReferenceBranch" parameterType="String" >
  175. DELETE FROM new_code_reference_issues
  176. where issue_key = #{issueKey, jdbcType=VARCHAR}
  177. </delete>
  178. <delete id="deleteIssueImpacts" parameterType="String" >
  179. DELETE FROM issues_impacts
  180. where issue_key = #{issueUuid, jdbcType=VARCHAR}
  181. </delete>
  182. <!--
  183. IMPORTANT - invariant columns can't be updated. See IssueDto#toDtoForUpdate()
  184. -->
  185. <update id="update" parameterType="Issue">
  186. update issues set
  187. severity=#{severity,jdbcType=VARCHAR},
  188. manual_severity=#{manualSeverity,jdbcType=BOOLEAN},
  189. message=#{message,jdbcType=VARCHAR},
  190. message_formattings=#{messageFormattings,jdbcType=BINARY},
  191. line=#{line,jdbcType=INTEGER},
  192. locations=#{locations,jdbcType=BINARY},
  193. gap=#{gap,jdbcType=DOUBLE},
  194. effort=#{effort,jdbcType=INTEGER},
  195. status=#{status,jdbcType=VARCHAR},
  196. resolution=#{resolution,jdbcType=VARCHAR},
  197. checksum=#{checksum,jdbcType=VARCHAR},
  198. assignee=#{assigneeUuid,jdbcType=VARCHAR},
  199. author_login=#{authorLogin,jdbcType=VARCHAR},
  200. tags=#{tagsString,jdbcType=VARCHAR},
  201. rule_description_context_key=#{ruleDescriptionContextKey,jdbcType=VARCHAR},
  202. project_uuid=#{projectUuid,jdbcType=VARCHAR},
  203. issue_creation_date=#{issueCreationTime,jdbcType=BIGINT},
  204. issue_update_date=#{issueUpdateTime,jdbcType=BIGINT},
  205. issue_close_date=#{issueCloseTime,jdbcType=BIGINT},
  206. updated_at=#{updatedAt,jdbcType=BIGINT},
  207. issue_type=#{type,jdbcType=INTEGER},
  208. code_variants=#{codeVariantsString,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. where kee = #{kee} and updated_at &lt;= #{selectedAt}
  240. </update>
  241. <select id="selectByKey" parameterType="String" resultMap="issueResultMap">
  242. select
  243. <include refid="issueColumns"/>,
  244. u.login as assigneeLogin
  245. from issues i
  246. inner join rules r on r.uuid=i.rule_uuid
  247. inner join components p on p.uuid=i.component_uuid
  248. inner join components root on root.uuid=i.project_uuid
  249. left join users u on i.assignee = u.uuid
  250. left join new_code_reference_issues n on i.kee = n.issue_key
  251. left outer join issues_impacts ii on i.kee = ii.issue_key
  252. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  253. where i.kee=#{kee,jdbcType=VARCHAR}
  254. </select>
  255. <select id="scrollNonClosedByComponentUuid" parameterType="String" resultMap="issueResultMap" fetchSize="${_scrollFetchSize}" resultSetType="FORWARD_ONLY" resultOrdered="true">
  256. select
  257. <include refid="issueColumns"/>
  258. from issues i
  259. inner join rules r on r.uuid=i.rule_uuid
  260. inner join components p on p.uuid=i.component_uuid
  261. inner join components root on root.uuid=i.project_uuid
  262. left join new_code_reference_issues n on i.kee = n.issue_key
  263. left outer join issues_impacts ii on i.kee = ii.issue_key
  264. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  265. where
  266. i.component_uuid = #{componentUuid,jdbcType=VARCHAR} and
  267. i.status &lt;&gt; 'CLOSED'
  268. order by
  269. i.kee
  270. </select>
  271. <select id="scrollClosedByComponentUuid" resultMap="issueResultMap" fetchSize="${_scrollFetchSize}" resultSetType="FORWARD_ONLY" resultOrdered="true">
  272. select
  273. <include refid="issueColumns"/>,
  274. ic.change_data as closedChangeData
  275. from issues i
  276. inner join rules r on
  277. r.uuid = i.rule_uuid
  278. inner join components p on
  279. p.uuid = i.component_uuid
  280. inner join components root on
  281. root.uuid = i.project_uuid
  282. inner join issue_changes ic on
  283. ic.issue_key = i.kee
  284. and ic.change_type = 'diff'
  285. and ic.change_data like '%status=%|CLOSED%'
  286. left join new_code_reference_issues n on
  287. i.kee = n.issue_key
  288. left outer join issues_impacts ii on
  289. i.kee = ii.issue_key
  290. left outer join rules_default_impacts rdi on
  291. r.uuid = rdi.rule_uuid
  292. where
  293. i.component_uuid = #{componentUuid,jdbcType=VARCHAR}
  294. and i.status = 'CLOSED'
  295. and i.issue_close_date is not null
  296. and i.issue_close_date &gt;= #{closeDateAfter,jdbcType=BIGINT}
  297. order by
  298. i.kee, ic.issue_change_creation_date desc
  299. </select>
  300. <resultMap id="indexedIssueResultMap" type="org.sonar.db.issue.IndexedIssueDto" autoMapping="true">
  301. <id property="issueKey" column="issueKey"/>
  302. <collection property="impacts" column="ii_uuid" notNullColumn="ii_uuid"
  303. javaType="java.util.Set" ofType="Impact">
  304. <id property="uuid" column="ii_uuid"/>
  305. <result property="softwareQuality" column="ii_softwareQuality"/>
  306. <result property="severity" column="ii_severity"/>
  307. </collection>
  308. <collection property="ruleDefaultImpacts" column="rdi_uuid" notNullColumn="rdi_uuid"
  309. javaType="java.util.Set" ofType="Impact">
  310. <id property="uuid" column="rdi_uuid"/>
  311. <result property="softwareQuality" column="rdi_softwareQuality"/>
  312. <result property="severity" column="rdi_severity"/>
  313. </collection>
  314. </resultMap>
  315. <select id="scrollIssuesForIndexation" parameterType="map" resultMap="indexedIssueResultMap" fetchSize="${_scrollFetchSize}"
  316. resultSetType="FORWARD_ONLY" resultOrdered="true">
  317. select
  318. i.kee as issueKey,
  319. i.assignee,
  320. i.line,
  321. i.resolution,
  322. i.severity,
  323. i.status,
  324. i.effort,
  325. i.author_login as authorLogin,
  326. i.issue_close_date as issueCloseDate,
  327. i.issue_creation_date as issueCreationDate,
  328. i.issue_update_date as issueUpdateDate,
  329. r.uuid as ruleUuid,
  330. r.language as language,
  331. r.clean_code_attribute as cleanCodeAttribute,
  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. from issues i
  375. inner join rules r on r.uuid=i.rule_uuid
  376. inner join components p on p.uuid=i.component_uuid
  377. inner join components root on root.uuid=i.project_uuid
  378. left join new_code_reference_issues n on i.kee = n.issue_key
  379. left outer join issues_impacts ii on i.kee = ii.issue_key
  380. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  381. where i.kee in
  382. <foreach collection="list" open="(" close=")" item="key" separator=",">
  383. #{key,jdbcType=VARCHAR}
  384. </foreach>
  385. </select>
  386. <select id="selectByKeysIfNotUpdatedAt" parameterType="map" resultMap="issueResultMap">
  387. select
  388. <include refid="issueColumns"/>
  389. from issues i
  390. inner join rules r on r.uuid=i.rule_uuid
  391. inner join components p on p.uuid=i.component_uuid
  392. inner join components root on root.uuid=i.project_uuid
  393. left join new_code_reference_issues n on i.kee = n.issue_key
  394. left outer join issues_impacts ii on i.kee = ii.issue_key
  395. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  396. where
  397. i.kee in
  398. <foreach collection="keys" open="(" close=")" item="key" separator=",">
  399. #{key,jdbcType=VARCHAR}
  400. </foreach>
  401. and i.updated_at &lt;&gt; #{updatedAt,jdbcType=BIGINT}
  402. </select>
  403. <select id="selectOpenByComponentUuids" parameterType="map" resultType="PrIssue">
  404. select
  405. i.kee as kee,
  406. i.message as message,
  407. i.line as line,
  408. i.status as status,
  409. i.checksum as checksum,
  410. i.issue_update_date as issueUpdateDate,
  411. r.plugin_rule_key as ruleKey,
  412. r.plugin_name as ruleRepo,
  413. b.kee as branchKey,
  414. b.branch_type as branchType
  415. from issues i
  416. inner join rules r on r.uuid = i.rule_uuid
  417. inner join project_branches b on i.project_uuid = b.uuid
  418. where i.component_uuid in
  419. <foreach collection="list" open="(" close=")" item="key" separator=",">
  420. #{key,jdbcType=VARCHAR}
  421. </foreach>
  422. and i.status &lt;&gt; 'CLOSED'
  423. </select>
  424. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map">
  425. select i.issue_type as ruleType, i.severity as severity, i.resolution as resolution, i.status as status, sum(i.effort) as effort, count(i.issue_type) as "count",
  426. <if test="leakPeriodBeginningDate &gt;= 0">
  427. (i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT}) as inLeak
  428. </if>
  429. <if test="leakPeriodBeginningDate &lt; 0">
  430. CASE WHEN n.uuid is null THEN false ELSE true END as inLeak
  431. </if>
  432. from issues i
  433. <if test="leakPeriodBeginningDate &lt; 0">
  434. left join new_code_reference_issues n on n.issue_key = i.kee
  435. </if>
  436. where i.status !='CLOSED'
  437. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  438. group by i.issue_type, i.severity, i.resolution, i.status, inLeak
  439. </select>
  440. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map" databaseId="oracle">
  441. select i2.issue_type as ruleType, i2.severity as severity, i2.resolution as resolution, i2.status as status, sum(i2.effort) as effort, count(i2.issue_type) as "count", i2.inLeak as inLeak
  442. from (
  443. select i.issue_type, i.severity, i.resolution, i.status, i.effort,
  444. <if test="leakPeriodBeginningDate &gt;= 0">
  445. case when i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT} then 1 else 0 end as inLeak
  446. </if>
  447. <if test="leakPeriodBeginningDate &lt; 0">
  448. case when n.uuid is null then 0 else 1 end as inLeak
  449. </if>
  450. from issues i
  451. <if test="leakPeriodBeginningDate &lt; 0">
  452. left join new_code_reference_issues n on n.issue_key = i.kee
  453. </if>
  454. where i.status !='CLOSED'
  455. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  456. ) i2
  457. group by i2.issue_type, i2.severity, i2.resolution, i2.status, i2.inLeak
  458. </select>
  459. <select id="selectIssueGroupsByComponent" resultType="org.sonar.db.issue.IssueGroupDto" parameterType="map" databaseId="mssql">
  460. select i2.issue_type as ruleType, i2.severity as severity, i2.resolution as resolution, i2.status as status, sum(i2.effort) as effort, count(i2.issue_type) as "count", i2.inLeak as inLeak
  461. from (
  462. select i.issue_type, i.severity, i.resolution, i.status, i.effort,
  463. <if test="leakPeriodBeginningDate &gt;= 0">
  464. case when i.issue_creation_date &gt; #{leakPeriodBeginningDate,jdbcType=BIGINT} then 1 else 0 end as inLeak
  465. </if>
  466. <if test="leakPeriodBeginningDate &lt; 0">
  467. case when n.uuid is null then 0 else 1 end as inLeak
  468. </if>
  469. from issues i
  470. <if test="leakPeriodBeginningDate &lt; 0">
  471. left join new_code_reference_issues n on n.issue_key = i.kee
  472. </if>
  473. where i.status !='CLOSED'
  474. and i.component_uuid = #{component.uuid,jdbcType=VARCHAR}
  475. ) i2
  476. group by i2.issue_type, i2.severity, i2.resolution, i2.status, i2.inLeak
  477. </select>
  478. <select id="selectIssueKeysByComponentUuid" parameterType="string" resultType="string">
  479. select
  480. i.kee
  481. from issues i
  482. where
  483. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  484. </select>
  485. <select id="selectIssueKeysByComponentUuidWithFilters" parameterType="string" resultType="string">
  486. select
  487. i.kee
  488. from rules r
  489. inner join issues i on i.rule_uuid = r.uuid
  490. where
  491. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  492. AND i.status &lt;&gt; 'CLOSED'
  493. <if test="includingRepositories.size() > 0">
  494. AND r.plugin_name IN
  495. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  496. #{ruleRepository}
  497. </foreach>
  498. </if>
  499. <if test="excludingRepositories.size() > 0">
  500. AND r.plugin_name NOT IN
  501. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  502. #{ruleRepository}
  503. </foreach>
  504. </if>
  505. <if test="languages.size() > 0">
  506. AND r.language IN
  507. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  508. #{language}
  509. </foreach>
  510. </if>
  511. order by i.kee
  512. limit #{pagination.pageSize,jdbcType=INTEGER} offset #{pagination.offset,jdbcType=INTEGER}
  513. </select>
  514. <select id="selectIssueKeysByComponentUuidWithFilters" parameterType="map" resultType="string" databaseId="mssql">
  515. select
  516. i.kee
  517. from
  518. (select
  519. row_number() over(order by i.kee ASC) as row_number,
  520. i.kee
  521. from rules r
  522. inner join issues i on i.rule_uuid = r.uuid
  523. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  524. AND i.status &lt;&gt; 'CLOSED'
  525. <if test="includingRepositories.size() > 0">
  526. AND r.plugin_name IN
  527. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  528. #{ruleRepository}
  529. </foreach>
  530. </if>
  531. <if test="excludingRepositories.size() > 0">
  532. AND r.plugin_name NOT IN
  533. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  534. #{ruleRepository}
  535. </foreach>
  536. </if>
  537. <if test="languages.size() > 0">
  538. AND r.language IN
  539. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  540. #{language}
  541. </foreach>
  542. </if>
  543. order by row_number asc
  544. offset #{pagination.offset} rows
  545. fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only) i
  546. </select>
  547. <select id="selectIssueKeysByComponentUuidWithFilters" parameterType="map" resultType="string" databaseId="oracle">
  548. select
  549. i.kee
  550. from (
  551. select rownum as rn, t.* from (
  552. select
  553. i.kee
  554. from rules r
  555. inner join issues i on i.rule_uuid = r.uuid
  556. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  557. AND i.status &lt;&gt; 'CLOSED'
  558. <if test="includingRepositories.size() > 0">
  559. AND r.plugin_name IN
  560. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  561. #{ruleRepository}
  562. </foreach>
  563. </if>
  564. <if test="excludingRepositories.size() > 0">
  565. AND r.plugin_name NOT IN
  566. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  567. #{ruleRepository}
  568. </foreach>
  569. </if>
  570. <if test="languages.size() > 0">
  571. AND r.language IN
  572. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  573. #{language}
  574. </foreach>
  575. </if>
  576. order by i.kee ASC
  577. ) t ) i
  578. where
  579. i.rn between #{pagination.startRowNumber,jdbcType=INTEGER} and #{pagination.endRowNumber,jdbcType=INTEGER}
  580. order by i.rn asc
  581. </select>
  582. <select id="selectIssueKeysByComponentUuidAndChangedSinceDate" parameterType="map" resultType="string">
  583. select
  584. i.kee
  585. from rules r
  586. inner join issues i on i.rule_uuid = r.uuid
  587. where
  588. i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  589. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  590. AND i.status &lt;&gt; 'CLOSED'
  591. <if test="includingRepositories.size() > 0">
  592. AND r.plugin_name IN
  593. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  594. #{ruleRepository}
  595. </foreach>
  596. </if>
  597. <if test="excludingRepositories.size() > 0">
  598. AND r.plugin_name NOT IN
  599. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  600. #{ruleRepository}
  601. </foreach>
  602. </if>
  603. <if test="languages.size() > 0">
  604. AND r.language IN
  605. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  606. #{language}
  607. </foreach>
  608. </if>
  609. order by i.kee
  610. limit #{pagination.pageSize,jdbcType=INTEGER} offset #{pagination.offset,jdbcType=INTEGER}
  611. </select>
  612. <select id="selectIssueKeysByComponentUuidAndChangedSinceDate" parameterType="map" resultType="string" databaseId="mssql">
  613. select
  614. i.kee
  615. from
  616. (select
  617. row_number() over(order by i.kee ASC) as row_number,
  618. i.kee
  619. from rules r
  620. inner join issues i on i.rule_uuid = r.uuid
  621. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  622. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  623. AND i.status &lt;&gt; 'CLOSED'
  624. <if test="includingRepositories.size() > 0">
  625. AND r.plugin_name IN
  626. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  627. #{ruleRepository}
  628. </foreach>
  629. </if>
  630. <if test="excludingRepositories.size() > 0">
  631. AND r.plugin_name NOT IN
  632. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  633. #{ruleRepository}
  634. </foreach>
  635. </if>
  636. <if test="languages.size() > 0">
  637. AND r.language IN
  638. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  639. #{language}
  640. </foreach>
  641. </if>
  642. order by row_number asc
  643. offset #{pagination.offset} rows
  644. fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only) i
  645. </select>
  646. <select id="selectIssueKeysByComponentUuidAndChangedSinceDate" parameterType="map" resultType="string" databaseId="oracle">
  647. select
  648. i.kee
  649. from
  650. (select rownum as rn, t.* from (
  651. select
  652. i.kee
  653. from rules r
  654. inner join issues i on i.rule_uuid = r.uuid
  655. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  656. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  657. AND i.status &lt;&gt; 'CLOSED'
  658. <if test="includingRepositories.size() > 0">
  659. AND r.plugin_name IN
  660. <foreach item="ruleRepository" index="index" collection="includingRepositories" open="(" separator="," close=")">
  661. #{ruleRepository}
  662. </foreach>
  663. </if>
  664. <if test="excludingRepositories.size() > 0">
  665. AND r.plugin_name NOT IN
  666. <foreach item="ruleRepository" index="index" collection="excludingRepositories" open="(" separator="," close=")">
  667. #{ruleRepository}
  668. </foreach>
  669. </if>
  670. <if test="languages.size() > 0">
  671. AND r.language IN
  672. <foreach item="language" index="index" collection="languages" open="(" separator="," close=")">
  673. #{language}
  674. </foreach>
  675. </if>
  676. order by i.kee ASC
  677. ) t
  678. ) i
  679. where
  680. i.rn between #{pagination.startRowNumber,jdbcType=INTEGER} and #{pagination.endRowNumber,jdbcType=INTEGER}
  681. order by i.rn asc
  682. </select>
  683. <select id="selectByComponentUuidPaginated" parameterType="map" resultMap="issueResultMap">
  684. select
  685. <include refid="issueColumns"/>,
  686. u.login as assigneeLogin
  687. from issues i
  688. inner join rules r on r.uuid=i.rule_uuid
  689. inner join components p on p.uuid=i.component_uuid
  690. inner join components root on root.uuid=i.project_uuid
  691. left join users u on i.assignee = u.uuid
  692. left join new_code_reference_issues n on i.kee = n.issue_key
  693. left outer join issues_impacts ii on i.kee = ii.issue_key
  694. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  695. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  696. order by i.issue_creation_date ASC
  697. limit #{pagination.pageSize,jdbcType=INTEGER} offset #{pagination.offset,jdbcType=INTEGER}
  698. </select>
  699. <select id="selectByComponentUuidPaginated" parameterType="map" resultMap="issueResultMap" databaseId="mssql">
  700. select
  701. <include refid="issueColumns"/>,
  702. u.login as assigneeLogin
  703. from
  704. (select
  705. row_number() over(order by i.issue_creation_date ASC) as row_number,
  706. <include refid="issueColumnsInInnerQuery"/>
  707. from issues i
  708. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  709. order by row_number asc
  710. offset #{pagination.offset} rows
  711. fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only) i
  712. inner join rules r on r.uuid=i.rule_uuid
  713. inner join components p on p.uuid=i.component_uuid
  714. inner join components root on root.uuid=i.project_uuid
  715. left join users u on i.assignee = u.uuid
  716. left join new_code_reference_issues n on i.kee = n.issue_key
  717. left outer join issues_impacts ii on i.kee = ii.issue_key
  718. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  719. </select>
  720. <select id="selectByComponentUuidPaginated" parameterType="map" resultMap="issueResultMap" databaseId="oracle">
  721. select
  722. <include refid="issueColumns"/>,
  723. u.login as assigneeLogin
  724. from
  725. (select <include refid="issueColumnsInInnerQuery"/> from (
  726. select rownum as rn, t.* from (
  727. select
  728. <include refid="issueColumnsInInnerQuery"/>
  729. from issues i
  730. where i.project_uuid=#{componentUuid,jdbcType=VARCHAR}
  731. order by i.issue_creation_date ASC
  732. ) t
  733. ) i
  734. where
  735. i.rn between #{pagination.startRowNumber,jdbcType=INTEGER} and #{pagination.endRowNumber,jdbcType=INTEGER}
  736. order by i.rn asc) i
  737. inner join rules r on r.uuid=i.rule_uuid
  738. inner join components p on p.uuid=i.component_uuid
  739. inner join components root on root.uuid=i.project_uuid
  740. left join users u on i.assignee = u.uuid
  741. left join new_code_reference_issues n on i.kee = n.issue_key
  742. left outer join issues_impacts ii on i.kee = ii.issue_key
  743. left outer join rules_default_impacts rdi on r.uuid = rdi.rule_uuid
  744. </select>
  745. <sql id="selectByBranchColumns">
  746. i.kee as kee,
  747. i.rule_uuid as ruleUuid,
  748. i.created_at as createdAt,
  749. i.status as status,
  750. i.resolution as resolution,
  751. r.rule_type as ruleType,
  752. r.plugin_name as ruleRepo,
  753. r.plugin_rule_key as ruleKey,
  754. r.clean_code_attribute as cleanCodeAttribute,
  755. i.message as message,
  756. i.message_formattings as messageFormattings,
  757. i.severity as severity,
  758. i.manual_severity as manualSeverity,
  759. i.issue_type as type,
  760. i.locations as locations,
  761. i.component_uuid as component_uuid,
  762. i.assignee as assigneeUuid,
  763. u.login as assigneeLogin,
  764. i.rule_description_context_key as ruleDescriptionContextKey
  765. </sql>
  766. <select id="selectByBranch" parameterType="map" resultType="Issue">
  767. select
  768. <include refid="selectByBranchColumns"/>
  769. , p.path as filePath
  770. from issues i
  771. inner join rules r on r.uuid = i.rule_uuid
  772. inner join components p on p.uuid=i.component_uuid
  773. left join users u on i.assignee = u.uuid
  774. where
  775. <if test="keys.size() > 0">
  776. i.kee IN
  777. <foreach collection="keys" open="(" close=")" item="key" separator=",">
  778. #{key,jdbcType=VARCHAR}
  779. </foreach>
  780. </if>
  781. <if test="changedSince != null">
  782. AND i.issue_update_date &gt;= #{changedSince,jdbcType=BIGINT}
  783. </if>
  784. </select>
  785. <select id="selectRecentlyClosedIssues" resultType="string">
  786. select i.kee
  787. from rules r
  788. inner join issues i on r.uuid = i.rule_uuid
  789. where
  790. i.project_uuid = #{queryParams.branchUuid}
  791. AND issue_update_date &gt;= #{queryParams.changedSince}
  792. AND i.status = 'CLOSED'
  793. <if test="queryParams.ruleRepositories.size() > 0">
  794. AND r.plugin_name IN
  795. <foreach item="ruleRepository" index="index" collection="queryParams.ruleRepositories" open="(" separator="," close=")">
  796. #{ruleRepository}
  797. </foreach>
  798. </if>
  799. <if test="queryParams.excludingRuleRepositories.size() > 0">
  800. AND r.plugin_name NOT IN
  801. <foreach item="ruleRepository" index="index" collection="queryParams.excludingRuleRepositories" open="(" separator="," close=")">
  802. #{ruleRepository}
  803. </foreach>
  804. </if>
  805. <if test="queryParams.languages.size() > 0">
  806. AND r.language IN
  807. <foreach item="language" index="index" collection="queryParams.languages" open="(" separator="," close=")">
  808. #{language}
  809. </foreach>
  810. </if>
  811. </select>
  812. <select id="selectIssueKeysByQuery" parameterType="map" resultType="string">
  813. select
  814. i.kee
  815. from issues i
  816. inner join components p on p.uuid=i.component_uuid
  817. inner join components root on root.uuid=i.project_uuid
  818. inner join project_branches pb on pb.uuid=i.project_uuid
  819. left join new_code_reference_issues n on i.kee = n.issue_key
  820. <where>
  821. <if test="query.project != null">
  822. root.kee = #{query.project,jdbcType=VARCHAR}
  823. </if>
  824. <if test="query.component != null">
  825. AND p.kee = #{query.component,jdbcType=VARCHAR}
  826. </if>
  827. <if test="query.branch != null">
  828. AND pb.kee = #{query.branch,jdbcType=VARCHAR}
  829. </if>
  830. <if test="query.pullRequest != null">
  831. AND pb.kee = #{query.pullRequest,jdbcType=VARCHAR}
  832. </if>
  833. <if test="query.types.size() > 0">
  834. AND i.issue_type IN
  835. <foreach collection="query.types" open="(" close=")" item="type" separator=",">
  836. #{type,jdbcType=VARCHAR}
  837. </foreach>
  838. </if>
  839. <if test="query.statuses.size() > 0">
  840. AND i.status IN
  841. <foreach collection="query.statuses" open="(" close=")" item="status" separator=",">
  842. #{status,jdbcType=VARCHAR}
  843. </foreach>
  844. </if>
  845. <if test="query.resolved != null">
  846. AND i.resolution is <if test="query.resolved">not</if> null
  847. </if>
  848. <if test="query.resolutions.size() > 0">
  849. AND i.resolution IN
  850. <foreach collection="query.resolutions" open="(" close=")" item="resolution" separator=",">
  851. #{resolution,jdbcType=VARCHAR}
  852. </foreach>
  853. </if>
  854. <if test="query.newCodeOnReference == true">
  855. AND n.uuid IS NOT NULL
  856. </if>
  857. <if test="query.createdAfter != null">
  858. AND i.issue_creation_date &gt;= #{query.createdAfter,jdbcType=BIGINT}
  859. </if>
  860. </where>
  861. <if test="_databaseId == 'mssql'">
  862. <!-- order by clause is required if using offset rows fetch next on MSSQL Database -->
  863. order by (select null)
  864. </if>
  865. offset (#{pagination.startRowNumber,jdbcType=INTEGER}-1) rows fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only
  866. </select>
  867. </mapper>