Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

CreateInitialSchema.java 95KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2023 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.platform.db.migration.version.v00;
  21. import java.sql.SQLException;
  22. import org.sonar.db.Database;
  23. import org.sonar.server.platform.db.migration.def.BigIntegerColumnDef;
  24. import org.sonar.server.platform.db.migration.def.BooleanColumnDef;
  25. import org.sonar.server.platform.db.migration.def.ColumnDef;
  26. import org.sonar.server.platform.db.migration.def.IntegerColumnDef;
  27. import org.sonar.server.platform.db.migration.def.TimestampColumnDef;
  28. import org.sonar.server.platform.db.migration.def.TinyIntColumnDef;
  29. import org.sonar.server.platform.db.migration.def.VarcharColumnDef;
  30. import org.sonar.server.platform.db.migration.sql.CreateIndexBuilder;
  31. import org.sonar.server.platform.db.migration.sql.CreateTableBuilder;
  32. import org.sonar.server.platform.db.migration.step.DdlChange;
  33. import static java.util.Arrays.stream;
  34. import static java.util.stream.Stream.concat;
  35. import static java.util.stream.Stream.of;
  36. import static org.sonar.server.platform.db.migration.def.BigIntegerColumnDef.newBigIntegerColumnDefBuilder;
  37. import static org.sonar.server.platform.db.migration.def.BlobColumnDef.newBlobColumnDefBuilder;
  38. import static org.sonar.server.platform.db.migration.def.BooleanColumnDef.newBooleanColumnDefBuilder;
  39. import static org.sonar.server.platform.db.migration.def.ClobColumnDef.newClobColumnDefBuilder;
  40. import static org.sonar.server.platform.db.migration.def.DecimalColumnDef.newDecimalColumnDefBuilder;
  41. import static org.sonar.server.platform.db.migration.def.IntegerColumnDef.newIntegerColumnDefBuilder;
  42. import static org.sonar.server.platform.db.migration.def.TimestampColumnDef.newTimestampColumnDefBuilder;
  43. import static org.sonar.server.platform.db.migration.def.TinyIntColumnDef.newTinyIntColumnDefBuilder;
  44. import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.DESCRIPTION_SECTION_KEY_SIZE;
  45. import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.MAX_SIZE;
  46. import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.USER_UUID_SIZE;
  47. import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE;
  48. import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.newVarcharColumnDefBuilder;
  49. public class CreateInitialSchema extends DdlChange {
  50. /**
  51. * Initially, UUID columns were created with size 50 when only 40 is needed. {@link VarcharColumnDef#UUID_SIZE}
  52. * should be used instead of this constant whenever reducing the column size is possible.
  53. */
  54. private static final int OLD_UUID_VARCHAR_SIZE = 50;
  55. // keep column name constants in alphabetic order
  56. private static final String ANALYSIS_UUID_COL_NAME = "analysis_uuid";
  57. private static final String COMPONENT_UUID_COL_NAME = "component_uuid";
  58. private static final String CREATED_AT_COL_NAME = "created_at";
  59. private static final String DESCRIPTION_COL_NAME = "description";
  60. private static final String GROUP_UUID_COL_NAME = "group_uuid";
  61. private static final String LANGUAGE_COL_NAME = "language";
  62. private static final String METRIC_UUID_COL_NAME = "metric_uuid";
  63. private static final String PROJECT_UUID_COL_NAME = "project_uuid";
  64. private static final String BRANCH_UUID_COL_NAME = "branch_uuid";
  65. public static final String RULE_UUID_COL_NAME = "rule_uuid";
  66. private static final String STATUS_COL_NAME = "status";
  67. private static final String TASK_UUID_COL_NAME = "task_uuid";
  68. private static final String TEMPLATE_UUID_COL_NAME = "template_uuid";
  69. private static final String TEXT_VALUE_COL_NAME = "text_value";
  70. private static final String UPDATED_AT_COL_NAME = "updated_at";
  71. private static final String USER_UUID_COL_NAME = "user_uuid";
  72. private static final String VALUE_COL_NAME = "value";
  73. private static final String PRIVATE_COL_NAME = "private";
  74. private static final String QPROFILE_UUID_COL_NAME = "qprofile_uuid";
  75. private static final String EXPIRATION_DATE_COL_NAME = "expiration_date";
  76. public static final String QUALITY_GATE_UUID_COL_NAME = "quality_gate_uuid";
  77. public static final String CLOB_VALUE_COL_NAME = "clob_value";
  78. public static final String IS_EMPTY_COL_NAME = "is_empty";
  79. private static final String UNIQUE_INDEX_SUFFIX = "_unique";
  80. // usual technical columns
  81. private static final VarcharColumnDef UUID_COL = newVarcharColumnDefBuilder().setColumnName("uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  82. private static final BigIntegerColumnDef TECHNICAL_CREATED_AT_COL = newBigIntegerColumnDefBuilder().setColumnName(CREATED_AT_COL_NAME).setIsNullable(false).build();
  83. private static final BigIntegerColumnDef NULLABLE_TECHNICAL_CREATED_AT_COL = newBigIntegerColumnDefBuilder().setColumnName(CREATED_AT_COL_NAME).setIsNullable(true).build();
  84. private static final BigIntegerColumnDef TECHNICAL_UPDATED_AT_COL = newBigIntegerColumnDefBuilder().setColumnName(UPDATED_AT_COL_NAME).setIsNullable(false).build();
  85. private static final BigIntegerColumnDef NULLABLE_TECHNICAL_UPDATED_AT_COL = newBigIntegerColumnDefBuilder().setColumnName(UPDATED_AT_COL_NAME).setIsNullable(true).build();
  86. private static final TimestampColumnDef DEPRECATED_TECHNICAL_CREATED_AT_COL = newTimestampColumnDefBuilder().setColumnName(CREATED_AT_COL_NAME).setIsNullable(true).build();
  87. private static final TimestampColumnDef DEPRECATED_TECHNICAL_UPDATED_AT_COL = newTimestampColumnDefBuilder().setColumnName(UPDATED_AT_COL_NAME).setIsNullable(true).build();
  88. public CreateInitialSchema(Database db) {
  89. super(db);
  90. }
  91. @Override
  92. public void execute(Context context) throws SQLException {
  93. createActiveRuleParameters(context);
  94. createActiveRules(context);
  95. createAlmPats(context);
  96. createAlmSettings(context);
  97. createProjectAlmSettings(context);
  98. createAnalysisProperties(context);
  99. createAppBranchProjectBranch(context);
  100. createAppProjects(context);
  101. createAudits(context);
  102. createCeActivity(context);
  103. createCeQueue(context);
  104. createCeScannerContext(context);
  105. createCeTaskCharacteristics(context);
  106. createCeTaskInput(context);
  107. createCeTaskMessage(context);
  108. createComponents(context);
  109. createDefaultQProfiles(context);
  110. createDeprecatedRuleKeys(context);
  111. createDuplicationsIndex(context);
  112. createEsQueue(context);
  113. createEventComponentChanges(context);
  114. createEvents(context);
  115. createFileSources(context);
  116. createGroupRoles(context);
  117. createGroups(context);
  118. createGroupsUsers(context);
  119. createInternalComponentProps(context);
  120. createInternalProperties(context);
  121. createIssueChanges(context);
  122. createIssues(context);
  123. createLiveMeasures(context);
  124. createMetrics(context);
  125. createNewCodePeriods(context);
  126. createNewCodeReferenceIssues(context);
  127. createNotifications(context);
  128. createOrgQProfiles(context);
  129. createPermTemplatesGroups(context);
  130. createPermTemplatesUsers(context);
  131. createPermTemplatesCharacteristics(context);
  132. createPermissionTemplates(context);
  133. createPlugins(context);
  134. createPortfolioProjBranches(context);
  135. createPortfolioProjects(context);
  136. createPortfolioReferences(context);
  137. createPortfolios(context);
  138. createProjectBadgeToken(context);
  139. createProjectBranches(context);
  140. createProjectLinks(context);
  141. createProjectMappings(context);
  142. createProjectMeasures(context);
  143. createProjectQprofiles(context);
  144. createProjects(context);
  145. createProjectQGates(context);
  146. createProperties(context);
  147. createPushEvents(context);
  148. createQGateGroupPermissions(context);
  149. createQGateUserPermissions(context);
  150. createQProfileChanges(context);
  151. createQProfileEditGroups(context);
  152. createQProfileEditUsers(context);
  153. createQualityGateConditions(context);
  154. createQualityGates(context);
  155. createScimUsers(context);
  156. createSessionTokens(context);
  157. createRulesRepository(context);
  158. createRuleDescSections(context);
  159. createRules(context);
  160. createRulesParameters(context);
  161. createRulesProfiles(context);
  162. createSamlMessageIds(context);
  163. createScannerAnalysisCache(context);
  164. createSnapshots(context);
  165. createUserRoles(context);
  166. createUserDismissedMessage(context);
  167. createUserTokens(context);
  168. createUsers(context);
  169. createWebhookDeliveries(context);
  170. createWebhooks(context);
  171. }
  172. private void createActiveRuleParameters(Context context) {
  173. String tableName = "active_rule_parameters";
  174. VarcharColumnDef activeRuleUuidColumnDef = newVarcharColumnDefBuilder("active_rule_uuid").setLimit(UUID_SIZE).setIsNullable(false).build();
  175. VarcharColumnDef rulesParameterUuidColumnDef = newVarcharColumnDefBuilder("rules_parameter_uuid").setLimit(UUID_SIZE).setIsNullable(false).build();
  176. context.execute(
  177. newTableBuilder(tableName)
  178. .addPkColumn(UUID_COL)
  179. .addColumn(newVarcharColumnDefBuilder(VALUE_COL_NAME).setLimit(MAX_SIZE).build())
  180. .addColumn(newVarcharColumnDefBuilder("rules_parameter_key").setLimit(128).build())
  181. .addColumn(activeRuleUuidColumnDef)
  182. .addColumn(rulesParameterUuidColumnDef)
  183. .build());
  184. addIndex(context, tableName, "arp_active_rule_uuid", false, activeRuleUuidColumnDef);
  185. }
  186. private void createActiveRules(Context context) {
  187. VarcharColumnDef profileUuidCol = newVarcharColumnDefBuilder("profile_uuid").setLimit(UUID_SIZE).setIsNullable(false).build();
  188. VarcharColumnDef ruleUuidCol = newVarcharColumnDefBuilder(RULE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  189. context.execute(
  190. newTableBuilder("active_rules")
  191. .addPkColumn(UUID_COL)
  192. .addColumn(newIntegerColumnDefBuilder().setColumnName("failure_level").setIsNullable(false).build())
  193. .addColumn(newVarcharColumnDefBuilder("inheritance").setLimit(10).build())
  194. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  195. .addColumn(NULLABLE_TECHNICAL_UPDATED_AT_COL)
  196. .addColumn(profileUuidCol)
  197. .addColumn(ruleUuidCol)
  198. .build());
  199. addIndex(context, "active_rules", "uniq_profile_rule_uuids", true, profileUuidCol, ruleUuidCol);
  200. }
  201. private void createAlmPats(Context context) {
  202. String tableName = "alm_pats";
  203. VarcharColumnDef patCol = newVarcharColumnDefBuilder("pat").setIsNullable(false).setLimit(2000).build();
  204. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setIsNullable(false).setLimit(256).build();
  205. VarcharColumnDef almSettingUuidCol = newVarcharColumnDefBuilder("alm_setting_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  206. context.execute(newTableBuilder(tableName)
  207. .addPkColumn(UUID_COL)
  208. .addColumn(patCol)
  209. .addColumn(userUuidCol)
  210. .addColumn(almSettingUuidCol)
  211. .addColumn(TECHNICAL_UPDATED_AT_COL)
  212. .addColumn(TECHNICAL_CREATED_AT_COL)
  213. .build());
  214. addIndex(context, tableName, "uniq_alm_pats", true, userUuidCol, almSettingUuidCol);
  215. }
  216. private void createAlmSettings(Context context) {
  217. String tableName = "alm_settings";
  218. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setIsNullable(false).setLimit(200).build();
  219. context.execute(newTableBuilder(tableName)
  220. .addPkColumn(UUID_COL)
  221. .addColumn(newVarcharColumnDefBuilder("alm_id").setIsNullable(false).setLimit(UUID_SIZE).build())
  222. .addColumn(keeCol)
  223. .addColumn(newVarcharColumnDefBuilder("url").setIsNullable(true).setLimit(2000).build())
  224. .addColumn(newVarcharColumnDefBuilder("app_id").setIsNullable(true).setLimit(80).build())
  225. .addColumn(newVarcharColumnDefBuilder("private_key").setIsNullable(true).setLimit(2500).build())
  226. .addColumn(newVarcharColumnDefBuilder("pat").setIsNullable(true).setLimit(2000).build())
  227. .addColumn(TECHNICAL_UPDATED_AT_COL)
  228. .addColumn(TECHNICAL_CREATED_AT_COL)
  229. .addColumn(newVarcharColumnDefBuilder("client_id").setIsNullable(true).setLimit(80).build())
  230. .addColumn(newVarcharColumnDefBuilder("client_secret").setIsNullable(true).setLimit(160).build())
  231. .addColumn(newVarcharColumnDefBuilder("webhook_secret").setIsNullable(true).setLimit(160).build())
  232. .build());
  233. addIndex(context, tableName, "uniq_alm_settings", true, keeCol);
  234. }
  235. private void createProjectAlmSettings(Context context) {
  236. String tableName = "project_alm_settings";
  237. VarcharColumnDef almSettingUuidCol = newVarcharColumnDefBuilder("alm_setting_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  238. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  239. VarcharColumnDef almRepoCol = newVarcharColumnDefBuilder("alm_repo").setIsNullable(true).setLimit(256).build();
  240. VarcharColumnDef almSlugCol = newVarcharColumnDefBuilder("alm_slug").setIsNullable(true).setLimit(256).build();
  241. BooleanColumnDef summaryCommentEnabledCol = newBooleanColumnDefBuilder("summary_comment_enabled").setIsNullable(true).build();
  242. BooleanColumnDef monorepoCol = newBooleanColumnDefBuilder("monorepo").setIsNullable(false).build();
  243. context.execute(newTableBuilder(tableName)
  244. .addPkColumn(UUID_COL)
  245. .addColumn(almSettingUuidCol)
  246. .addColumn(projectUuidCol)
  247. .addColumn(almRepoCol)
  248. .addColumn(almSlugCol)
  249. .addColumn(TECHNICAL_UPDATED_AT_COL)
  250. .addColumn(TECHNICAL_CREATED_AT_COL)
  251. .addColumn(summaryCommentEnabledCol)
  252. .addColumn(monorepoCol)
  253. .build());
  254. addIndex(context, tableName, "uniq_project_alm_settings", true, projectUuidCol);
  255. addIndex(context, tableName, "project_alm_settings_alm", false, almSettingUuidCol);
  256. addIndex(context, tableName, "project_alm_settings_slug", false, almSlugCol);
  257. }
  258. private void createAnalysisProperties(Context context) {
  259. String tableName = "analysis_properties";
  260. VarcharColumnDef snapshotUuidColumn = newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME)
  261. .setIsNullable(false)
  262. .setLimit(UUID_SIZE)
  263. .build();
  264. context.execute(
  265. newTableBuilder(tableName)
  266. .addPkColumn(UUID_COL)
  267. .addColumn(snapshotUuidColumn)
  268. .addColumn(newVarcharColumnDefBuilder("kee").setIsNullable(false).setLimit(512).build())
  269. .addColumn(newVarcharColumnDefBuilder(TEXT_VALUE_COL_NAME).setIsNullable(true).setLimit(MAX_SIZE).build())
  270. .addColumn(newClobColumnDefBuilder().setColumnName(CLOB_VALUE_COL_NAME).setIsNullable(true).build())
  271. .addColumn(newBooleanColumnDefBuilder().setColumnName(IS_EMPTY_COL_NAME).setIsNullable(false).build())
  272. .addColumn(TECHNICAL_CREATED_AT_COL)
  273. .build());
  274. addIndex(context, tableName, "analysis_properties_analysis", false, snapshotUuidColumn);
  275. }
  276. private void createAppBranchProjectBranch(Context context) {
  277. String tableName = "app_branch_project_branch";
  278. VarcharColumnDef applicationBranchUuid = newVarcharColumnDefBuilder("application_branch_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  279. VarcharColumnDef projectBranchUuid = newVarcharColumnDefBuilder("project_branch_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  280. VarcharColumnDef applicationUuid = newVarcharColumnDefBuilder("application_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  281. VarcharColumnDef projectUuid = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  282. context.execute(
  283. newTableBuilder(tableName)
  284. .addPkColumn(UUID_COL)
  285. .addColumn(applicationUuid)
  286. .addColumn(applicationBranchUuid)
  287. .addColumn(projectUuid)
  288. .addColumn(projectBranchUuid)
  289. .addColumn(TECHNICAL_CREATED_AT_COL)
  290. .build());
  291. addIndex(context, tableName, "uniq_app_branch_proj", true, applicationBranchUuid, projectBranchUuid);
  292. addIndex(context, tableName, "idx_abpb_app_uuid", false, applicationUuid);
  293. addIndex(context, tableName, "idx_abpb_app_branch_uuid", false, applicationBranchUuid);
  294. addIndex(context, tableName, "idx_abpb_proj_uuid", false, projectUuid);
  295. addIndex(context, tableName, "idx_abpb_proj_branch_uuid", false, projectBranchUuid);
  296. }
  297. private void createAppProjects(Context context) {
  298. String tableName = "app_projects";
  299. VarcharColumnDef applicationUuid = newVarcharColumnDefBuilder("application_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  300. VarcharColumnDef projectUuid = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  301. context.execute(
  302. newTableBuilder(tableName)
  303. .addPkColumn(UUID_COL)
  304. .addColumn(applicationUuid)
  305. .addColumn(projectUuid)
  306. .addColumn(TECHNICAL_CREATED_AT_COL)
  307. .build());
  308. addIndex(context, tableName, "uniq_app_projects", true, applicationUuid, projectUuid);
  309. addIndex(context, tableName, "idx_app_proj_application_uuid", false, applicationUuid);
  310. addIndex(context, tableName, "idx_app_proj_project_uuid", false, projectUuid);
  311. }
  312. private void createAudits(Context context) {
  313. String tableName = "audits";
  314. context.execute(newTableBuilder(tableName)
  315. .addPkColumn(UUID_COL)
  316. .addColumn(newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setIsNullable(false).setLimit(USER_UUID_SIZE).build())
  317. .addColumn(newVarcharColumnDefBuilder("user_login").setIsNullable(false).setLimit(USER_UUID_SIZE).build())
  318. .addColumn(newVarcharColumnDefBuilder("category").setIsNullable(false).setLimit(25).build())
  319. .addColumn(newVarcharColumnDefBuilder("operation").setIsNullable(false).setLimit(50).build())
  320. .addColumn(newVarcharColumnDefBuilder("new_value").setIsNullable(true).setLimit(4000).build())
  321. .addColumn(TECHNICAL_CREATED_AT_COL)
  322. .addColumn(newBooleanColumnDefBuilder("user_triggered").setIsNullable(false).setDefaultValue(true).build())
  323. .build());
  324. addIndex(context, tableName, "audits_created_at", false, TECHNICAL_CREATED_AT_COL);
  325. }
  326. private void createCeActivity(Context context) {
  327. String tableName = "ce_activity";
  328. VarcharColumnDef uuidCol = UUID_COL;
  329. VarcharColumnDef mainComponentUuidCol = newVarcharColumnDefBuilder("main_component_uuid").setLimit(UUID_SIZE).setIsNullable(true).build();
  330. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  331. VarcharColumnDef statusCol = newVarcharColumnDefBuilder(STATUS_COL_NAME).setLimit(15).setIsNullable(false).build();
  332. BooleanColumnDef mainIsLastCol = newBooleanColumnDefBuilder().setColumnName("main_is_last").setIsNullable(false).build();
  333. VarcharColumnDef mainIsLastKeyCol = newVarcharColumnDefBuilder("main_is_last_key").setLimit(55).setIsNullable(false).build();
  334. BooleanColumnDef isLastCol = newBooleanColumnDefBuilder().setColumnName("is_last").setIsNullable(false).build();
  335. VarcharColumnDef isLastKeyCol = newVarcharColumnDefBuilder("is_last_key").setLimit(55).setIsNullable(false).build();
  336. context.execute(
  337. newTableBuilder(tableName)
  338. .addPkColumn(uuidCol)
  339. .addColumn(newVarcharColumnDefBuilder("task_type").setLimit(15).setIsNullable(false).build())
  340. .addColumn(mainComponentUuidCol)
  341. .addColumn(componentUuidCol)
  342. .addColumn(statusCol)
  343. .addColumn(mainIsLastCol)
  344. .addColumn(mainIsLastKeyCol)
  345. .addColumn(isLastCol)
  346. .addColumn(isLastKeyCol)
  347. .addColumn(newVarcharColumnDefBuilder("submitter_uuid").setLimit(USER_UUID_SIZE).setIsNullable(true).build())
  348. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("submitted_at").setIsNullable(false).build())
  349. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("started_at").setIsNullable(true).build())
  350. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("executed_at").setIsNullable(true).build())
  351. .addColumn(newIntegerColumnDefBuilder().setColumnName("execution_count").setIsNullable(false).build())
  352. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("execution_time_ms").setIsNullable(true).build())
  353. .addColumn(newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(true).build())
  354. .addColumn(newVarcharColumnDefBuilder("error_message").setLimit(1_000).setIsNullable(true).build())
  355. .addColumn(newClobColumnDefBuilder().setColumnName("error_stacktrace").setIsNullable(true).build())
  356. .addColumn(newVarcharColumnDefBuilder("error_type").setLimit(20).setIsNullable(true).build())
  357. .addColumn(newVarcharColumnDefBuilder("worker_uuid").setLimit(UUID_SIZE).setIsNullable(true).build())
  358. .addColumn(TECHNICAL_CREATED_AT_COL)
  359. .addColumn(TECHNICAL_UPDATED_AT_COL)
  360. .addColumn(newVarcharColumnDefBuilder("node_name").setLimit(100).setIsNullable(true).build())
  361. .build());
  362. addIndex(context, tableName, "ce_activity_component", false, componentUuidCol);
  363. addIndex(context, tableName, "ce_activity_islast", false, isLastCol, statusCol);
  364. addIndex(context, tableName, "ce_activity_islast_key", false, isLastKeyCol);
  365. addIndex(context, tableName, "ce_activity_main_component", false, mainComponentUuidCol);
  366. addIndex(context, tableName, "ce_activity_main_islast", false, mainIsLastCol, statusCol);
  367. addIndex(context, tableName, "ce_activity_main_islast_key", false, mainIsLastKeyCol);
  368. }
  369. private void createCeQueue(Context context) {
  370. String tableName = "ce_queue";
  371. VarcharColumnDef uuidCol = UUID_COL;
  372. VarcharColumnDef mainComponentUuidCol = newVarcharColumnDefBuilder("main_component_uuid").setLimit(UUID_SIZE).setIsNullable(true).build();
  373. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  374. context.execute(
  375. newTableBuilder(tableName)
  376. .addPkColumn(uuidCol)
  377. .addColumn(newVarcharColumnDefBuilder("task_type").setLimit(15).setIsNullable(false).build())
  378. .addColumn(mainComponentUuidCol)
  379. .addColumn(componentUuidCol)
  380. .addColumn(newVarcharColumnDefBuilder(STATUS_COL_NAME).setLimit(15).setIsNullable(true).build())
  381. .addColumn(newVarcharColumnDefBuilder("submitter_uuid").setLimit(USER_UUID_SIZE).setIsNullable(true).build())
  382. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("started_at").setIsNullable(true).build())
  383. .addColumn(newVarcharColumnDefBuilder("worker_uuid").setLimit(UUID_SIZE).setIsNullable(true).build())
  384. .addColumn(newIntegerColumnDefBuilder().setColumnName("execution_count").setIsNullable(false).build())
  385. .addColumn(TECHNICAL_CREATED_AT_COL)
  386. .addColumn(TECHNICAL_UPDATED_AT_COL)
  387. .build());
  388. addIndex(context, tableName, "ce_queue_main_component", false, mainComponentUuidCol);
  389. addIndex(context, tableName, "ce_queue_component", false, componentUuidCol);
  390. }
  391. private void createCeScannerContext(Context context) {
  392. context.execute(
  393. newTableBuilder("ce_scanner_context")
  394. .addPkColumn(newVarcharColumnDefBuilder(TASK_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  395. .addColumn(newBlobColumnDefBuilder().setColumnName("context_data").setIsNullable(false).build())
  396. .addColumn(TECHNICAL_CREATED_AT_COL)
  397. .addColumn(TECHNICAL_UPDATED_AT_COL)
  398. .build());
  399. }
  400. private void createCeTaskCharacteristics(Context context) {
  401. String tableName = "ce_task_characteristics";
  402. VarcharColumnDef ceTaskUuidColumn = newVarcharColumnDefBuilder(TASK_UUID_COL_NAME)
  403. .setLimit(UUID_SIZE)
  404. .setIsNullable(false)
  405. .build();
  406. context.execute(
  407. newTableBuilder(tableName)
  408. .addPkColumn(UUID_COL)
  409. .addColumn(ceTaskUuidColumn)
  410. .addColumn(newVarcharColumnDefBuilder("kee").setLimit(512).setIsNullable(false).build())
  411. .addColumn(newVarcharColumnDefBuilder(TEXT_VALUE_COL_NAME).setLimit(512).setIsNullable(true).build())
  412. .build());
  413. addIndex(context, tableName, "ce_characteristics_" + ceTaskUuidColumn.getName(), false, ceTaskUuidColumn);
  414. }
  415. private void createCeTaskInput(Context context) {
  416. context.execute(
  417. newTableBuilder("ce_task_input")
  418. .addPkColumn(newVarcharColumnDefBuilder(TASK_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  419. .addColumn(newBlobColumnDefBuilder().setColumnName("input_data").setIsNullable(true).build())
  420. .addColumn(TECHNICAL_CREATED_AT_COL)
  421. .addColumn(TECHNICAL_UPDATED_AT_COL)
  422. .build());
  423. }
  424. private void createCeTaskMessage(Context context) {
  425. String tableName = "ce_task_message";
  426. VarcharColumnDef taskUuidCol = newVarcharColumnDefBuilder(TASK_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  427. VarcharColumnDef messageTypeCol = newVarcharColumnDefBuilder("message_type").setIsNullable(false).setLimit(255).build();
  428. context.execute(newTableBuilder(tableName)
  429. .addPkColumn(UUID_COL)
  430. .addColumn(taskUuidCol)
  431. .addColumn(newVarcharColumnDefBuilder("message").setIsNullable(false).setLimit(MAX_SIZE).build())
  432. .addColumn(TECHNICAL_CREATED_AT_COL)
  433. .addColumn(messageTypeCol)
  434. .build());
  435. addIndex(context, tableName, tableName + "_task", false, taskUuidCol);
  436. addIndex(context, tableName, "ctm_message_type", false, messageTypeCol);
  437. }
  438. private void createComponents(Context context) {
  439. String tableName = "components";
  440. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setIsNullable(true).setLimit(1000).build();
  441. VarcharColumnDef moduleUuidCol = newVarcharColumnDefBuilder("module_uuid").setIsNullable(true).setLimit(50).build();
  442. VarcharColumnDef branchUuidCol = newVarcharColumnDefBuilder(BRANCH_UUID_COL_NAME).setIsNullable(false).setLimit(50).build();
  443. VarcharColumnDef qualifierCol = newVarcharColumnDefBuilder("qualifier").setIsNullable(true).setLimit(10).build();
  444. VarcharColumnDef rootUuidCol = newVarcharColumnDefBuilder("root_uuid").setIsNullable(false).setLimit(50).build();
  445. VarcharColumnDef uuidCol = newVarcharColumnDefBuilder("uuid").setIsNullable(false).setLimit(50).build();
  446. VarcharColumnDef mainBranchProjectUuidCol = newVarcharColumnDefBuilder("main_branch_project_uuid").setIsNullable(true).setLimit(50).build();
  447. context.execute(newTableBuilder(tableName)
  448. .addColumn(uuidCol)
  449. .addColumn(keeCol)
  450. .addColumn(newVarcharColumnDefBuilder("deprecated_kee").setIsNullable(true).setLimit(400).build())
  451. .addColumn(newVarcharColumnDefBuilder("name").setIsNullable(true).setLimit(2000).build())
  452. .addColumn(newVarcharColumnDefBuilder("long_name").setIsNullable(true).setLimit(2000).build())
  453. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setIsNullable(true).setLimit(2000).build())
  454. .addColumn(newBooleanColumnDefBuilder().setColumnName("enabled").setIsNullable(false).setDefaultValue(true).build())
  455. .addColumn(newVarcharColumnDefBuilder("scope").setIsNullable(true).setLimit(3).build())
  456. .addColumn(qualifierCol)
  457. .addColumn(newBooleanColumnDefBuilder().setColumnName(PRIVATE_COL_NAME).setIsNullable(false).build())
  458. .addColumn(rootUuidCol)
  459. .addColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setIsNullable(true).setLimit(20).build())
  460. .addColumn(newVarcharColumnDefBuilder("copy_component_uuid").setIsNullable(true).setLimit(50).build())
  461. .addColumn(newVarcharColumnDefBuilder("path").setIsNullable(true).setLimit(2000).build())
  462. .addColumn(newVarcharColumnDefBuilder("uuid_path").setIsNullable(false).setLimit(1500).build())
  463. .addColumn(branchUuidCol)
  464. .addColumn(moduleUuidCol)
  465. .addColumn(newVarcharColumnDefBuilder("module_uuid_path").setIsNullable(true).setLimit(1500).build())
  466. .addColumn(mainBranchProjectUuidCol)
  467. .addColumn(newBooleanColumnDefBuilder().setColumnName("b_changed").setIsNullable(true).build())
  468. .addColumn(newVarcharColumnDefBuilder("b_name").setIsNullable(true).setLimit(500).build())
  469. .addColumn(newVarcharColumnDefBuilder("b_long_name").setIsNullable(true).setLimit(500).build())
  470. .addColumn(newVarcharColumnDefBuilder("b_description").setIsNullable(true).setLimit(2000).build())
  471. .addColumn(newBooleanColumnDefBuilder().setColumnName("b_enabled").setIsNullable(true).build())
  472. .addColumn(newVarcharColumnDefBuilder("b_qualifier").setIsNullable(true).setLimit(10).build())
  473. .addColumn(newVarcharColumnDefBuilder("b_language").setIsNullable(true).setLimit(20).build())
  474. .addColumn(newVarcharColumnDefBuilder("b_copy_component_uuid").setIsNullable(true).setLimit(50).build())
  475. .addColumn(newVarcharColumnDefBuilder("b_path").setIsNullable(true).setLimit(2000).build())
  476. .addColumn(newVarcharColumnDefBuilder("b_uuid_path").setIsNullable(true).setLimit(1500).build())
  477. .addColumn(newVarcharColumnDefBuilder("b_module_uuid").setIsNullable(true).setLimit(50).build())
  478. .addColumn(newVarcharColumnDefBuilder("b_module_uuid_path").setIsNullable(true).setLimit(1500).build())
  479. .addColumn(newTimestampColumnDefBuilder().setColumnName(CREATED_AT_COL_NAME).setIsNullable(true).build())
  480. .build());
  481. addIndex(context, tableName, "projects_module_uuid", false, moduleUuidCol);
  482. addIndex(context, tableName, "projects_qualifier", false, qualifierCol);
  483. addIndex(context, tableName, "projects_root_uuid", false, rootUuidCol);
  484. addIndex(context, tableName, "idx_main_branch_prj_uuid", false, mainBranchProjectUuidCol);
  485. addIndex(context, tableName, "components_uuid", true, uuidCol);
  486. addIndex(context, tableName, "components_branch_uuid", false, branchUuidCol);
  487. addIndex(context, tableName, "components_kee_branch_uuid", true, keeCol, branchUuidCol);
  488. }
  489. private void createDefaultQProfiles(Context context) {
  490. String tableName = "default_qprofiles";
  491. VarcharColumnDef profileUuidColumn = newVarcharColumnDefBuilder(QPROFILE_UUID_COL_NAME)
  492. .setLimit(255)
  493. .setIsNullable(false)
  494. .build();
  495. context.execute(
  496. newTableBuilder(tableName)
  497. .addPkColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setLimit(20).setIsNullable(false).build())
  498. .addColumn(profileUuidColumn)
  499. .addColumn(TECHNICAL_CREATED_AT_COL)
  500. .addColumn(TECHNICAL_UPDATED_AT_COL)
  501. .build());
  502. addIndex(context, tableName, "uniq_default_qprofiles_uuid", true, profileUuidColumn);
  503. }
  504. private void createDeprecatedRuleKeys(Context context) {
  505. String tableName = "deprecated_rule_keys";
  506. VarcharColumnDef ruleUuidCol = newVarcharColumnDefBuilder(RULE_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  507. VarcharColumnDef oldRepositoryKeyCol = newVarcharColumnDefBuilder("old_repository_key").setIsNullable(false).setLimit(255).build();
  508. VarcharColumnDef oldRuleKeyCol = newVarcharColumnDefBuilder("old_rule_key").setIsNullable(false).setLimit(200).build();
  509. context.execute(newTableBuilder(tableName)
  510. .addPkColumn(UUID_COL)
  511. .addColumn(oldRepositoryKeyCol)
  512. .addColumn(oldRuleKeyCol)
  513. .addColumn(TECHNICAL_CREATED_AT_COL)
  514. .addColumn(ruleUuidCol)
  515. .build());
  516. addIndex(context, tableName, "uniq_deprecated_rule_keys", true, oldRepositoryKeyCol, oldRuleKeyCol);
  517. addIndex(context, tableName, "rule_uuid_deprecated_rule_keys", false, ruleUuidCol);
  518. }
  519. private void createDuplicationsIndex(Context context) {
  520. String tableName = "duplications_index";
  521. VarcharColumnDef hashCol = newVarcharColumnDefBuilder("hash").setLimit(50).setIsNullable(false).build();
  522. VarcharColumnDef analysisUuidCol = newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  523. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  524. context.execute(
  525. newTableBuilder(tableName)
  526. .addPkColumn(UUID_COL)
  527. .addColumn(analysisUuidCol)
  528. .addColumn(componentUuidCol)
  529. .addColumn(hashCol)
  530. .addColumn(newIntegerColumnDefBuilder().setColumnName("index_in_file").setIsNullable(false).build())
  531. .addColumn(newIntegerColumnDefBuilder().setColumnName("start_line").setIsNullable(false).build())
  532. .addColumn(newIntegerColumnDefBuilder().setColumnName("end_line").setIsNullable(false).build())
  533. .build());
  534. addIndex(context, tableName, "duplications_index_hash", false, hashCol);
  535. addIndex(context, tableName, "duplication_analysis_component", false, analysisUuidCol, componentUuidCol);
  536. }
  537. private void createEsQueue(Context context) {
  538. String tableName = "es_queue";
  539. BigIntegerColumnDef createdAtCol = TECHNICAL_CREATED_AT_COL;
  540. context.execute(
  541. newTableBuilder(tableName)
  542. .addPkColumn(UUID_COL)
  543. .addColumn(newVarcharColumnDefBuilder("doc_type").setIsNullable(false).setLimit(40).build())
  544. .addColumn(newVarcharColumnDefBuilder("doc_id").setIsNullable(false).setLimit(MAX_SIZE).build())
  545. .addColumn(newVarcharColumnDefBuilder("doc_id_type").setIsNullable(true).setLimit(20).build())
  546. .addColumn(newVarcharColumnDefBuilder("doc_routing").setIsNullable(true).setLimit(MAX_SIZE).build())
  547. .addColumn(createdAtCol)
  548. .build());
  549. addIndex(context, tableName, "es_queue_created_at", false, createdAtCol);
  550. }
  551. private void createEventComponentChanges(Context context) {
  552. String tableName = "event_component_changes";
  553. VarcharColumnDef eventUuidCol = newVarcharColumnDefBuilder("event_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  554. VarcharColumnDef eventComponentUuidCol = newVarcharColumnDefBuilder("event_component_uuid").setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  555. VarcharColumnDef eventAnalysisUuidCol = newVarcharColumnDefBuilder("event_analysis_uuid").setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  556. VarcharColumnDef changeCategoryCol = newVarcharColumnDefBuilder("change_category").setIsNullable(false).setLimit(12).build();
  557. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  558. context.execute(newTableBuilder(tableName)
  559. .addPkColumn(UUID_COL)
  560. .addColumn(eventUuidCol)
  561. .addColumn(eventComponentUuidCol)
  562. .addColumn(eventAnalysisUuidCol)
  563. .addColumn(changeCategoryCol)
  564. .addColumn(componentUuidCol)
  565. .addColumn(newVarcharColumnDefBuilder("component_key").setIsNullable(false).setLimit(400).build())
  566. .addColumn(newVarcharColumnDefBuilder("component_name").setIsNullable(false).setLimit(2000).build())
  567. .addColumn(newVarcharColumnDefBuilder("component_branch_key").setIsNullable(true).setLimit(255).build())
  568. .addColumn(TECHNICAL_CREATED_AT_COL)
  569. .build());
  570. addIndex(context, tableName, tableName + UNIQUE_INDEX_SUFFIX, true, eventUuidCol, changeCategoryCol, componentUuidCol);
  571. addIndex(context, tableName, "event_cpnt_changes_cpnt", false, eventComponentUuidCol);
  572. addIndex(context, tableName, "event_cpnt_changes_analysis", false, eventAnalysisUuidCol);
  573. }
  574. private void createEvents(Context context) {
  575. String tableName = "events";
  576. VarcharColumnDef uuidCol = UUID_COL;
  577. VarcharColumnDef analysisUuidCol = newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  578. VarcharColumnDef componentUuid = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  579. context.execute(
  580. newTableBuilder(tableName)
  581. .addPkColumn(uuidCol)
  582. .addColumn(analysisUuidCol)
  583. .addColumn(newVarcharColumnDefBuilder("name").setLimit(400).setIsNullable(true).build())
  584. .addColumn(newVarcharColumnDefBuilder("category").setLimit(50).build())
  585. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(MAX_SIZE).build())
  586. .addColumn(newVarcharColumnDefBuilder("event_data").setLimit(MAX_SIZE).build())
  587. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("event_date").setIsNullable(false).build())
  588. .addColumn(TECHNICAL_CREATED_AT_COL)
  589. .addColumn(componentUuid)
  590. .build());
  591. addIndex(context, tableName, "events_analysis", false, analysisUuidCol);
  592. addIndex(context, tableName, "events_component_uuid", false, componentUuid);
  593. }
  594. private void createFileSources(Context context) {
  595. String tableName = "file_sources";
  596. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  597. BigIntegerColumnDef updatedAtCol = TECHNICAL_UPDATED_AT_COL;
  598. VarcharColumnDef fileUuidCol = newVarcharColumnDefBuilder("file_uuid").setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  599. context.execute(
  600. newTableBuilder(tableName)
  601. .addPkColumn(UUID_COL)
  602. .addColumn(projectUuidCol)
  603. .addColumn(fileUuidCol)
  604. .addColumn(newClobColumnDefBuilder().setColumnName("line_hashes").setIsNullable(true).build())
  605. .addColumn(newIntegerColumnDefBuilder().setColumnName("line_hashes_version").setIsNullable(true).build())
  606. .addColumn(newVarcharColumnDefBuilder("data_hash").setLimit(50).setIsNullable(true).build())
  607. .addColumn(newVarcharColumnDefBuilder("src_hash").setLimit(50).setIsNullable(true).build())
  608. .addColumn(newVarcharColumnDefBuilder("revision").setLimit(100).setIsNullable(true).build())
  609. .addColumn(newIntegerColumnDefBuilder().setColumnName("line_count").setIsNullable(false).build())
  610. .addColumn(newBlobColumnDefBuilder().setColumnName("binary_data").setIsNullable(true).build())
  611. .addColumn(TECHNICAL_CREATED_AT_COL)
  612. .addColumn(updatedAtCol)
  613. .build());
  614. addIndex(context, tableName, "file_sources_file_uuid", true, fileUuidCol);
  615. addIndex(context, tableName, "file_sources_project_uuid", false, projectUuidCol);
  616. addIndex(context, tableName, "file_sources_updated_at", false, updatedAtCol);
  617. }
  618. private void createGroupRoles(Context context) {
  619. String tableName = "group_roles";
  620. VarcharColumnDef roleCol = newVarcharColumnDefBuilder("role").setLimit(64).setIsNullable(false).build();
  621. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setIsNullable(true).setLimit(UUID_SIZE).build();
  622. VarcharColumnDef groupUuidCol = newVarcharColumnDefBuilder(GROUP_UUID_COL_NAME).setIsNullable(true).setLimit(UUID_SIZE).build();
  623. context.execute(
  624. newTableBuilder(tableName)
  625. .addPkColumn(UUID_COL)
  626. .addColumn(roleCol)
  627. .addColumn(componentUuidCol)
  628. .addColumn(groupUuidCol)
  629. .build());
  630. addIndex(context, tableName, "group_roles_component_uuid", false, componentUuidCol);
  631. addIndex(context, tableName, "uniq_group_roles", true, groupUuidCol, componentUuidCol, roleCol);
  632. }
  633. private void createGroups(Context context) {
  634. String tableName = "groups";
  635. VarcharColumnDef nameCol = newVarcharColumnDefBuilder("name").setLimit(500).setIsNullable(false).build();
  636. context.execute(
  637. newTableBuilder(tableName)
  638. .addPkColumn(UUID_COL)
  639. .addColumn(nameCol)
  640. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(200).setIsNullable(true).build())
  641. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  642. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  643. .build());
  644. addIndex(context, tableName, "uniq_groups_name", true, nameCol);
  645. }
  646. private void createGroupsUsers(Context context) {
  647. String tableName = "groups_users";
  648. VarcharColumnDef groupUuidCol = newVarcharColumnDefBuilder(GROUP_UUID_COL_NAME).setLimit(40).setIsNullable(false).build();
  649. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(255).setIsNullable(false).build();
  650. context.execute(
  651. newTableBuilder(tableName)
  652. .addColumn(groupUuidCol)
  653. .addColumn(userUuidCol)
  654. .build());
  655. addIndex(context, tableName, "index_groups_users_group_uuid", false, groupUuidCol);
  656. addIndex(context, tableName, "index_groups_users_user_uuid", false, userUuidCol);
  657. addIndex(context, tableName, "groups_users_unique", true, userUuidCol, groupUuidCol);
  658. }
  659. private void createInternalComponentProps(Context context) {
  660. String tableName = "internal_component_props";
  661. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  662. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setIsNullable(false).setLimit(512).build();
  663. context.execute(newTableBuilder(tableName)
  664. .addPkColumn(UUID_COL)
  665. .addColumn(componentUuidCol)
  666. .addColumn(keeCol)
  667. .addColumn(newVarcharColumnDefBuilder(VALUE_COL_NAME).setIsNullable(true).setLimit(MAX_SIZE).build())
  668. .addColumn(TECHNICAL_UPDATED_AT_COL)
  669. .addColumn(TECHNICAL_CREATED_AT_COL)
  670. .build());
  671. addIndex(context, tableName, "unique_component_uuid_kee", true, componentUuidCol, keeCol);
  672. }
  673. private void createInternalProperties(Context context) {
  674. context.execute(
  675. newTableBuilder("internal_properties")
  676. .addPkColumn(newVarcharColumnDefBuilder("kee").setLimit(20).setIsNullable(false).build())
  677. .addColumn(newBooleanColumnDefBuilder().setColumnName(IS_EMPTY_COL_NAME).setIsNullable(false).build())
  678. .addColumn(newVarcharColumnDefBuilder().setColumnName(TEXT_VALUE_COL_NAME).setLimit(MAX_SIZE).setIgnoreOracleUnit(true).build())
  679. .addColumn(newClobColumnDefBuilder().setColumnName(CLOB_VALUE_COL_NAME).setIsNullable(true).build())
  680. .addColumn(TECHNICAL_CREATED_AT_COL)
  681. .build());
  682. }
  683. private void createIssueChanges(Context context) {
  684. String tableName = "issue_changes";
  685. VarcharColumnDef issueKeyCol = newVarcharColumnDefBuilder("issue_key").setLimit(50).setIsNullable(false).build();
  686. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setLimit(50).build();
  687. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(50).setIsNullable(false).build();
  688. VarcharColumnDef changeTypeCol = newVarcharColumnDefBuilder("change_type").setLimit(20).build();
  689. context.execute(
  690. newTableBuilder(tableName)
  691. .addPkColumn(UUID_COL)
  692. .addColumn(keeCol)
  693. .addColumn(issueKeyCol)
  694. .addColumn(newVarcharColumnDefBuilder("user_login").setLimit(USER_UUID_SIZE).build())
  695. .addColumn(changeTypeCol)
  696. .addColumn(newClobColumnDefBuilder().setColumnName("change_data").build())
  697. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  698. .addColumn(NULLABLE_TECHNICAL_UPDATED_AT_COL)
  699. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("issue_change_creation_date").build())
  700. .addColumn(projectUuidCol)
  701. .build());
  702. addIndex(context, tableName, "issue_changes_issue_key", false, issueKeyCol);
  703. addIndex(context, tableName, "issue_changes_kee", false, keeCol);
  704. addIndex(context, tableName, "issue_changes_project_uuid", false, projectUuidCol);
  705. addIndex(context, tableName, "issue_changes_issue_key_type", false, issueKeyCol, changeTypeCol);
  706. }
  707. private void createIssues(Context context) {
  708. var tableName = "issues";
  709. VarcharColumnDef assigneeCol = newVarcharColumnDefBuilder("assignee").setLimit(USER_UUID_SIZE).build();
  710. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(50).build();
  711. BigIntegerColumnDef issueCreationDateCol = newBigIntegerColumnDefBuilder().setColumnName("issue_creation_date").build();
  712. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setLimit(50).setIsNullable(false).build();
  713. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(50).build();
  714. VarcharColumnDef resolutionCol = newVarcharColumnDefBuilder("resolution").setLimit(20).build();
  715. VarcharColumnDef ruleUuidCol = newVarcharColumnDefBuilder(RULE_UUID_COL_NAME).setLimit(40).setIsNullable(true).build();
  716. BigIntegerColumnDef updatedAtCol = NULLABLE_TECHNICAL_UPDATED_AT_COL;
  717. context.execute(
  718. newTableBuilder(tableName)
  719. .addPkColumn(keeCol)
  720. .addColumn(ruleUuidCol)
  721. .addColumn(newVarcharColumnDefBuilder("severity").setLimit(10).build())
  722. .addColumn(newBooleanColumnDefBuilder().setColumnName("manual_severity").setIsNullable(false).build())
  723. // unit has been fixed in SonarQube 5.6 (see migration 1151, SONAR-7493)
  724. .addColumn(newVarcharColumnDefBuilder("message").setLimit(MAX_SIZE).build())
  725. .addColumn(newIntegerColumnDefBuilder().setColumnName("line").build())
  726. .addColumn(newDecimalColumnDefBuilder().setColumnName("gap").setPrecision(30).setScale(20).build())
  727. .addColumn(newVarcharColumnDefBuilder(STATUS_COL_NAME).setLimit(20).build())
  728. .addColumn(resolutionCol)
  729. .addColumn(newVarcharColumnDefBuilder("checksum").setLimit(1000).build())
  730. .addColumn(assigneeCol)
  731. .addColumn(newVarcharColumnDefBuilder("author_login").setLimit(255).build())
  732. .addColumn(newIntegerColumnDefBuilder().setColumnName("effort").build())
  733. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  734. .addColumn(updatedAtCol)
  735. .addColumn(issueCreationDateCol)
  736. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("issue_update_date").build())
  737. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("issue_close_date").build())
  738. .addColumn(newVarcharColumnDefBuilder("tags").setLimit(MAX_SIZE).build())
  739. .addColumn(componentUuidCol)
  740. .addColumn(projectUuidCol)
  741. .addColumn(newBlobColumnDefBuilder().setColumnName("locations").build())
  742. .addColumn(new TinyIntColumnDef.Builder().setColumnName("issue_type").build())
  743. .addColumn(newBooleanColumnDefBuilder().setColumnName("from_hotspot").setIsNullable(true).build())
  744. .addColumn(newBooleanColumnDefBuilder().setColumnName("quick_fix_available").setIsNullable(true).build())
  745. .addColumn(newVarcharColumnDefBuilder("rule_description_context_key").setLimit(50).build())
  746. .addColumn(newBlobColumnDefBuilder().setColumnName("message_formattings").build())
  747. .build());
  748. addIndex(context, tableName, "issues_assignee", false, assigneeCol);
  749. addIndex(context, tableName, "issues_component_uuid", false, componentUuidCol);
  750. addIndex(context, tableName, "issues_creation_date", false, issueCreationDateCol);
  751. addIndex(context, tableName, "issues_project_uuid", false, projectUuidCol);
  752. addIndex(context, tableName, "issues_resolution", false, resolutionCol);
  753. addIndex(context, tableName, "issues_updated_at", false, updatedAtCol);
  754. addIndex(context, tableName, "issues_rule_uuid", false, ruleUuidCol);
  755. }
  756. private void createLiveMeasures(Context context) {
  757. String tableName = "live_measures";
  758. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  759. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  760. VarcharColumnDef metricUuidCol = newVarcharColumnDefBuilder(METRIC_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  761. context.execute(newTableBuilder(tableName)
  762. .addPkColumn(UUID_COL)
  763. .addColumn(projectUuidCol)
  764. .addColumn(componentUuidCol)
  765. .addColumn(metricUuidCol)
  766. .addColumn(newDecimalColumnDefBuilder().setColumnName(VALUE_COL_NAME).setPrecision(38).setScale(20).build())
  767. .addColumn(newVarcharColumnDefBuilder(TEXT_VALUE_COL_NAME).setIsNullable(true).setLimit(MAX_SIZE).build())
  768. .addColumn(newBlobColumnDefBuilder().setColumnName("measure_data").setIsNullable(true).build())
  769. .addColumn(newVarcharColumnDefBuilder("update_marker").setIsNullable(true).setLimit(UUID_SIZE).build())
  770. .addColumn(TECHNICAL_CREATED_AT_COL)
  771. .addColumn(TECHNICAL_UPDATED_AT_COL)
  772. .build());
  773. addIndex(context, tableName, "live_measures_project", false, projectUuidCol);
  774. addIndex(context, tableName, "live_measures_component", true, componentUuidCol, metricUuidCol);
  775. }
  776. private void createMetrics(Context context) {
  777. String tableName = "metrics";
  778. VarcharColumnDef nameCol = newVarcharColumnDefBuilder("name").setLimit(64).setIsNullable(false).build();
  779. context.execute(
  780. newTableBuilder(tableName)
  781. .addPkColumn(UUID_COL)
  782. .addColumn(nameCol)
  783. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(255).build())
  784. .addColumn(newIntegerColumnDefBuilder().setColumnName("direction").setIsNullable(false).setDefaultValue(0).build())
  785. .addColumn(newVarcharColumnDefBuilder("domain").setLimit(64).build())
  786. .addColumn(newVarcharColumnDefBuilder("short_name").setLimit(64).build())
  787. .addColumn(newBooleanColumnDefBuilder().setColumnName("qualitative").setDefaultValue(false).setIsNullable(false).build())
  788. .addColumn(newVarcharColumnDefBuilder("val_type").setLimit(8).build())
  789. .addColumn(newBooleanColumnDefBuilder().setColumnName("enabled").setDefaultValue(true).build())
  790. .addColumn(newDecimalColumnDefBuilder().setColumnName("worst_value").setPrecision(38).setScale(20).build())
  791. .addColumn(newDecimalColumnDefBuilder().setColumnName("best_value").setPrecision(38).setScale(20).build())
  792. .addColumn(newBooleanColumnDefBuilder().setColumnName("optimized_best_value").build())
  793. .addColumn(newBooleanColumnDefBuilder().setColumnName("hidden").build())
  794. .addColumn(newBooleanColumnDefBuilder().setColumnName("delete_historical_data").build())
  795. .addColumn(newIntegerColumnDefBuilder().setColumnName("decimal_scale").build())
  796. .build());
  797. addIndex(context, tableName, "metrics_unique_name", true, nameCol);
  798. }
  799. private void createNewCodePeriods(Context context) {
  800. String tableName = "new_code_periods";
  801. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  802. VarcharColumnDef branchUuidCol = newVarcharColumnDefBuilder(BRANCH_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  803. VarcharColumnDef typeCol = newVarcharColumnDefBuilder("type").setLimit(30).setIsNullable(false).build();
  804. VarcharColumnDef valueCol = newVarcharColumnDefBuilder(VALUE_COL_NAME).setLimit(255).setIsNullable(true).build();
  805. context.execute(
  806. newTableBuilder(tableName)
  807. .addPkColumn(UUID_COL)
  808. .addColumn(projectUuidCol)
  809. .addColumn(branchUuidCol)
  810. .addColumn(typeCol)
  811. .addColumn(valueCol)
  812. .addColumn(TECHNICAL_UPDATED_AT_COL)
  813. .addColumn(TECHNICAL_CREATED_AT_COL)
  814. .build());
  815. addIndex(context, tableName, "uniq_new_code_periods", true, projectUuidCol, branchUuidCol);
  816. addIndex(context, tableName, "idx_ncp_type", false, typeCol);
  817. addIndex(context, tableName, "idx_ncp_value", false, valueCol);
  818. }
  819. private void createNewCodeReferenceIssues(Context context) {
  820. String tableName = "new_code_reference_issues";
  821. VarcharColumnDef issueKeyCol = newVarcharColumnDefBuilder("issue_key").setLimit(50).setIsNullable(false).build();
  822. context.execute(
  823. newTableBuilder(tableName)
  824. .addPkColumn(UUID_COL)
  825. .addColumn(issueKeyCol)
  826. .addColumn(TECHNICAL_CREATED_AT_COL)
  827. .build());
  828. addIndex(context, tableName, "uniq_new_code_reference_issues", true, issueKeyCol);
  829. }
  830. private void createNotifications(Context context) {
  831. context.execute(
  832. newTableBuilder("notifications")
  833. .addPkColumn(UUID_COL)
  834. .addColumn(newBlobColumnDefBuilder().setColumnName("data").build())
  835. .addColumn(TECHNICAL_CREATED_AT_COL)
  836. .build());
  837. }
  838. private void createOrgQProfiles(Context context) {
  839. String tableName = "org_qprofiles";
  840. int profileUuidSize = 255;
  841. VarcharColumnDef rulesProfileUuidCol = newVarcharColumnDefBuilder("rules_profile_uuid").setLimit(profileUuidSize).setIsNullable(false).build();
  842. VarcharColumnDef parentUuidCol = newVarcharColumnDefBuilder("parent_uuid").setLimit(profileUuidSize).setIsNullable(true).build();
  843. context.execute(
  844. newTableBuilder(tableName)
  845. .addPkColumn(newVarcharColumnDefBuilder().setColumnName("uuid").setIsNullable(false).setLimit(255).build())
  846. .addColumn(rulesProfileUuidCol)
  847. .addColumn(parentUuidCol)
  848. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("last_used").setIsNullable(true).build())
  849. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("user_updated_at").setIsNullable(true).build())
  850. .addColumn(TECHNICAL_CREATED_AT_COL)
  851. .addColumn(TECHNICAL_UPDATED_AT_COL)
  852. .build());
  853. addIndex(context, tableName, "qprofiles_rp_uuid", false, rulesProfileUuidCol);
  854. addIndex(context, tableName, "org_qprofiles_parent_uuid", false, parentUuidCol);
  855. }
  856. private void createPermTemplatesGroups(Context context) {
  857. context.execute(
  858. newTableBuilder("perm_templates_groups")
  859. .addPkColumn(UUID_COL)
  860. .addColumn(newVarcharColumnDefBuilder("permission_reference").setLimit(64).setIsNullable(false).build())
  861. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  862. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  863. .addColumn(newVarcharColumnDefBuilder(TEMPLATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  864. .addColumn(newVarcharColumnDefBuilder(GROUP_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build())
  865. .build());
  866. }
  867. private void createPermTemplatesUsers(Context context) {
  868. context.execute(
  869. newTableBuilder("perm_templates_users")
  870. .addPkColumn(UUID_COL)
  871. .addColumn(newVarcharColumnDefBuilder("permission_reference").setLimit(64).setIsNullable(false).build())
  872. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  873. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  874. .addColumn(newVarcharColumnDefBuilder(TEMPLATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  875. .addColumn(newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(USER_UUID_SIZE).setIsNullable(false).build())
  876. .build());
  877. }
  878. private void createPermTemplatesCharacteristics(Context context) {
  879. String tableName = "perm_tpl_characteristics";
  880. VarcharColumnDef permissionKeyColumn = newVarcharColumnDefBuilder("permission_key").setLimit(64).setIsNullable(false).build();
  881. VarcharColumnDef templateUuidColumn = newVarcharColumnDefBuilder(TEMPLATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  882. context.execute(
  883. newTableBuilder(tableName)
  884. .addPkColumn(UUID_COL)
  885. .addColumn(permissionKeyColumn)
  886. .addColumn(newBooleanColumnDefBuilder().setColumnName("with_project_creator").setIsNullable(false).setDefaultValue(false).build())
  887. .addColumn(TECHNICAL_CREATED_AT_COL)
  888. .addColumn(TECHNICAL_UPDATED_AT_COL)
  889. .addColumn(templateUuidColumn)
  890. .build());
  891. addIndex(context, tableName, "uniq_perm_tpl_charac", true, templateUuidColumn, permissionKeyColumn);
  892. }
  893. private void createPermissionTemplates(Context context) {
  894. context.execute(
  895. newTableBuilder("permission_templates")
  896. .addPkColumn(UUID_COL)
  897. .addColumn(newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build())
  898. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(MAX_SIZE).build())
  899. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  900. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  901. .addColumn(newVarcharColumnDefBuilder("key_pattern").setLimit(500).build())
  902. .build());
  903. }
  904. private void createPlugins(Context context) {
  905. int pluginKeyMaxSize = 200;
  906. String tableName = "plugins";
  907. VarcharColumnDef keyColumn = newVarcharColumnDefBuilder("kee").setLimit(pluginKeyMaxSize).setIsNullable(false).build();
  908. context.execute(
  909. newTableBuilder(tableName)
  910. .addPkColumn(UUID_COL)
  911. .addColumn(keyColumn)
  912. .addColumn(newVarcharColumnDefBuilder("base_plugin_key").setLimit(pluginKeyMaxSize).setIsNullable(true).build())
  913. .addColumn(newVarcharColumnDefBuilder("file_hash").setLimit(200).setIsNullable(false).build())
  914. .addColumn(TECHNICAL_CREATED_AT_COL)
  915. .addColumn(TECHNICAL_UPDATED_AT_COL)
  916. .addColumn(newVarcharColumnDefBuilder("type").setLimit(10).setIsNullable(false).build())
  917. .addColumn(newBooleanColumnDefBuilder("removed").setDefaultValue(false).setIsNullable(false).build())
  918. .build());
  919. addIndex(context, tableName, "plugins_key", true, keyColumn);
  920. }
  921. private void createPortfolioProjBranches(Context context) {
  922. String tableName = "portfolio_proj_branches";
  923. context.execute(new CreateTableBuilder(getDialect(), tableName)
  924. .addPkColumn(UUID_COL)
  925. .addColumn(newVarcharColumnDefBuilder().setColumnName("portfolio_project_uuid").setIsNullable(false).setLimit(UUID_SIZE).build())
  926. .addColumn(newVarcharColumnDefBuilder().setColumnName(BRANCH_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build())
  927. .addColumn(TECHNICAL_CREATED_AT_COL)
  928. .build());
  929. }
  930. private void createPortfolioProjects(Context context) {
  931. String tableName = "portfolio_projects";
  932. VarcharColumnDef portfolioUuidColumn = newVarcharColumnDefBuilder().setColumnName("portfolio_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  933. VarcharColumnDef projectUuidColumn = newVarcharColumnDefBuilder().setColumnName(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  934. context.execute(new CreateTableBuilder(getDialect(), tableName)
  935. .addPkColumn(UUID_COL)
  936. .addColumn(portfolioUuidColumn)
  937. .addColumn(projectUuidColumn)
  938. .addColumn(TECHNICAL_CREATED_AT_COL)
  939. .build());
  940. addIndex(context, tableName, "uniq_portfolio_projects", true, portfolioUuidColumn, projectUuidColumn);
  941. }
  942. private void createPortfolioReferences(Context context) {
  943. String tableName = "portfolio_references";
  944. VarcharColumnDef portfolioUuidColumn = newVarcharColumnDefBuilder().setColumnName("portfolio_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  945. VarcharColumnDef referenceUuidColumn = newVarcharColumnDefBuilder().setColumnName("reference_uuid").setIsNullable(false).setLimit(UUID_SIZE).build();
  946. VarcharColumnDef branchUuidColumn = newVarcharColumnDefBuilder().setColumnName(BRANCH_UUID_COL_NAME).setIsNullable(true).setLimit(255).build();
  947. context.execute(new CreateTableBuilder(getDialect(), tableName)
  948. .addPkColumn(UUID_COL)
  949. .addColumn(portfolioUuidColumn)
  950. .addColumn(referenceUuidColumn)
  951. .addColumn(TECHNICAL_CREATED_AT_COL)
  952. .addColumn(branchUuidColumn)
  953. .build());
  954. addIndex(context, tableName, "uniq_portfolio_references", true, portfolioUuidColumn, referenceUuidColumn, branchUuidColumn);
  955. }
  956. private void createPortfolios(Context context) {
  957. String tableName = "portfolios";
  958. VarcharColumnDef keeColumn = newVarcharColumnDefBuilder().setColumnName("kee").setIsNullable(false).setLimit(400).build();
  959. context.execute(new CreateTableBuilder(getDialect(), tableName)
  960. .addPkColumn(UUID_COL)
  961. .addColumn(keeColumn)
  962. .addColumn(newVarcharColumnDefBuilder().setColumnName("name").setIsNullable(false).setLimit(2000).build())
  963. .addColumn(newVarcharColumnDefBuilder().setColumnName(DESCRIPTION_COL_NAME).setIsNullable(true).setLimit(2000).build())
  964. .addColumn(newVarcharColumnDefBuilder().setColumnName("root_uuid").setIsNullable(false).setLimit(UUID_SIZE).build())
  965. .addColumn(newVarcharColumnDefBuilder().setColumnName("parent_uuid").setIsNullable(true).setLimit(UUID_SIZE).build())
  966. .addColumn(newBooleanColumnDefBuilder(PRIVATE_COL_NAME).setIsNullable(false).build())
  967. .addColumn(newVarcharColumnDefBuilder().setColumnName("selection_mode").setIsNullable(false).setLimit(50).build())
  968. .addColumn(newVarcharColumnDefBuilder().setColumnName("selection_expression").setIsNullable(true).setLimit(4000).build())
  969. .addColumn(TECHNICAL_CREATED_AT_COL)
  970. .addColumn(TECHNICAL_UPDATED_AT_COL)
  971. .addColumn(newVarcharColumnDefBuilder().setColumnName("branch_key").setIsNullable(true).setLimit(255).build())
  972. .build());
  973. addIndex(context, tableName, "uniq_portfolios_kee", true, keeColumn);
  974. }
  975. private void createProjectBadgeToken(Context context) {
  976. String tableName = "project_badge_token";
  977. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  978. context.execute(
  979. newTableBuilder(tableName)
  980. .addPkColumn(UUID_COL)
  981. .addColumn(newVarcharColumnDefBuilder("token").setIsNullable(false).setLimit(255).build())
  982. .addColumn(projectUuidCol)
  983. .addColumn(TECHNICAL_CREATED_AT_COL)
  984. .addColumn(TECHNICAL_UPDATED_AT_COL)
  985. .build());
  986. addIndex(context, tableName, "uniq_project_badge_token", true, projectUuidCol);
  987. }
  988. private void createProjectBranches(Context context) {
  989. String tableName = "project_branches";
  990. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build();
  991. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setIsNullable(false).setLimit(255).build();
  992. VarcharColumnDef branchTypeCol = newVarcharColumnDefBuilder("branch_type").setIsNullable(false).setLimit(12).build();
  993. context.execute(
  994. newTableBuilder(tableName)
  995. .addPkColumn(newVarcharColumnDefBuilder("uuid").setIsNullable(false).setLimit(OLD_UUID_VARCHAR_SIZE).build())
  996. .addColumn(projectUuidCol)
  997. .addColumn(keeCol)
  998. .addColumn(branchTypeCol)
  999. .addColumn(newVarcharColumnDefBuilder("merge_branch_uuid").setIsNullable(true).setLimit(OLD_UUID_VARCHAR_SIZE).build())
  1000. .addColumn(newBlobColumnDefBuilder().setColumnName("pull_request_binary").setIsNullable(true).build())
  1001. .addColumn(newVarcharColumnDefBuilder("manual_baseline_analysis_uuid").setIsNullable(true).setLimit(UUID_SIZE).build())
  1002. .addColumn(TECHNICAL_CREATED_AT_COL)
  1003. .addColumn(TECHNICAL_UPDATED_AT_COL)
  1004. .addColumn(newBooleanColumnDefBuilder("exclude_from_purge").setDefaultValue(false).setIsNullable(false).build())
  1005. .addColumn(newBooleanColumnDefBuilder("need_issue_sync").setIsNullable(false).build())
  1006. .build());
  1007. addIndex(context, tableName, "uniq_project_branches", true, branchTypeCol, projectUuidCol, keeCol);
  1008. }
  1009. private void createProjectLinks(Context context) {
  1010. String tableName = "project_links";
  1011. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1012. context.execute(newTableBuilder(tableName)
  1013. .addPkColumn(UUID_COL)
  1014. .addColumn(projectUuidCol)
  1015. .addColumn(newVarcharColumnDefBuilder("link_type").setLimit(20).setIsNullable(false).build())
  1016. .addColumn(newVarcharColumnDefBuilder("name").setLimit(128).setIsNullable(true).build())
  1017. .addColumn(newVarcharColumnDefBuilder("href").setLimit(2048).setIsNullable(false).build())
  1018. .addColumn(TECHNICAL_CREATED_AT_COL)
  1019. .addColumn(TECHNICAL_UPDATED_AT_COL)
  1020. .build());
  1021. addIndex(context, tableName, "project_links_project", false, projectUuidCol);
  1022. }
  1023. private void createProjectMappings(Context context) {
  1024. String tableName = "project_mappings";
  1025. VarcharColumnDef keyTypeCol = newVarcharColumnDefBuilder("key_type").setIsNullable(false).setLimit(200).build();
  1026. VarcharColumnDef keyCol = newVarcharColumnDefBuilder("kee").setIsNullable(false).setLimit(MAX_SIZE).build();
  1027. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  1028. context.execute(newTableBuilder(tableName)
  1029. .addPkColumn(UUID_COL)
  1030. .addColumn(keyTypeCol)
  1031. .addColumn(keyCol)
  1032. .addColumn(projectUuidCol)
  1033. .addColumn(TECHNICAL_CREATED_AT_COL)
  1034. .build());
  1035. addIndex(context, tableName, "key_type_kee", true, keyTypeCol, keyCol);
  1036. addIndex(context, tableName, PROJECT_UUID_COL_NAME, false, projectUuidCol);
  1037. }
  1038. private void createProjectMeasures(Context context) {
  1039. String tableName = "project_measures";
  1040. IntegerColumnDef personIdCol = newIntegerColumnDefBuilder().setColumnName("person_id").build();
  1041. VarcharColumnDef metricUuidCol = newVarcharColumnDefBuilder(METRIC_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1042. VarcharColumnDef analysisUuidCol = newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  1043. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  1044. context.execute(
  1045. newTableBuilder(tableName)
  1046. .addPkColumn(UUID_COL)
  1047. .addColumn(newDecimalColumnDefBuilder().setColumnName(VALUE_COL_NAME).setPrecision(38).setScale(20).build())
  1048. .addColumn(analysisUuidCol)
  1049. .addColumn(componentUuidCol)
  1050. .addColumn(newVarcharColumnDefBuilder(TEXT_VALUE_COL_NAME).setLimit(MAX_SIZE).build())
  1051. .addColumn(newVarcharColumnDefBuilder("alert_status").setLimit(5).build())
  1052. .addColumn(newVarcharColumnDefBuilder("alert_text").setLimit(MAX_SIZE).build())
  1053. .addColumn(personIdCol)
  1054. .addColumn(newBlobColumnDefBuilder().setColumnName("measure_data").build())
  1055. .addColumn(metricUuidCol)
  1056. .build());
  1057. addIndex(context, tableName, "measures_component_uuid", false, componentUuidCol);
  1058. addIndex(context, tableName, "measures_analysis_metric", false, analysisUuidCol, metricUuidCol);
  1059. addIndex(context, tableName, "project_measures_metric", false, metricUuidCol);
  1060. }
  1061. private void createProjectQprofiles(Context context) {
  1062. String tableName = "project_qprofiles";
  1063. VarcharColumnDef projectUuid = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(50).setIsNullable(false).build();
  1064. VarcharColumnDef profileKey = newVarcharColumnDefBuilder("profile_key").setLimit(50).setIsNullable(false).build();
  1065. context.execute(
  1066. newTableBuilder(tableName)
  1067. .addPkColumn(UUID_COL)
  1068. .addColumn(projectUuid)
  1069. .addColumn(profileKey)
  1070. .build());
  1071. addIndex(context, tableName, "uniq_project_qprofiles", true, projectUuid, profileKey);
  1072. }
  1073. private void createProjects(Context context) {
  1074. String tableName = "projects";
  1075. VarcharColumnDef uuidCol = UUID_COL;
  1076. VarcharColumnDef keeCol = newVarcharColumnDefBuilder("kee").setLimit(400).setIsNullable(false).build();
  1077. VarcharColumnDef qualifierCol = newVarcharColumnDefBuilder("qualifier").setLimit(10).setIsNullable(false).build();
  1078. context.execute(
  1079. newTableBuilder(tableName)
  1080. .addPkColumn(uuidCol)
  1081. .addColumn(keeCol)
  1082. .addColumn(qualifierCol)
  1083. .addColumn(newVarcharColumnDefBuilder("name").setLimit(2_000).setIsNullable(true).build())
  1084. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(2_000).setIsNullable(true).build())
  1085. .addColumn(newBooleanColumnDefBuilder().setColumnName(PRIVATE_COL_NAME).setIsNullable(false).build())
  1086. .addColumn(newVarcharColumnDefBuilder("tags").setLimit(500).setIsNullable(true).build())
  1087. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  1088. .addColumn(TECHNICAL_UPDATED_AT_COL)
  1089. .withPkConstraintName("pk_new_projects")
  1090. .build());
  1091. addIndex(context, tableName, "uniq_projects_kee", true, keeCol);
  1092. addIndex(context, tableName, "idx_qualifier", false, qualifierCol);
  1093. }
  1094. private void createProjectQGates(Context context) {
  1095. String tableName = "project_qgates";
  1096. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1097. VarcharColumnDef qualityGateUuidCol = newVarcharColumnDefBuilder(QUALITY_GATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1098. context.execute(
  1099. newTableBuilder(tableName)
  1100. .addPkColumn(projectUuidCol)
  1101. .addColumn(qualityGateUuidCol)
  1102. .build());
  1103. addIndex(context, tableName, "uniq_project_qgates", true, projectUuidCol, qualityGateUuidCol);
  1104. }
  1105. private void createProperties(Context context) {
  1106. String tableName = "properties";
  1107. VarcharColumnDef propKey = newVarcharColumnDefBuilder("prop_key").setLimit(512).setIsNullable(false).build();
  1108. context.execute(newTableBuilder(tableName)
  1109. .addPkColumn(UUID_COL)
  1110. .addColumn(propKey)
  1111. .addColumn(newBooleanColumnDefBuilder().setColumnName(IS_EMPTY_COL_NAME).setIsNullable(false).build())
  1112. .addColumn(newVarcharColumnDefBuilder(TEXT_VALUE_COL_NAME).setLimit(MAX_SIZE).build())
  1113. .addColumn(newClobColumnDefBuilder().setColumnName(CLOB_VALUE_COL_NAME).setIsNullable(true).build())
  1114. .addColumn(TECHNICAL_CREATED_AT_COL)
  1115. .addColumn(newVarcharColumnDefBuilder().setColumnName(COMPONENT_UUID_COL_NAME).setIsNullable(true).setLimit(UUID_SIZE).build())
  1116. .addColumn(newVarcharColumnDefBuilder().setColumnName(USER_UUID_COL_NAME).setIsNullable(true).setLimit(USER_UUID_SIZE).build())
  1117. // table with be renamed to properties in following migration, use final constraint name right away
  1118. .withPkConstraintName("pk_properties")
  1119. .build());
  1120. addIndex(context, tableName, "properties_key", false, propKey);
  1121. }
  1122. private void createPushEvents(Context context) {
  1123. String tableName = "push_events";
  1124. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1125. context.execute(newTableBuilder(tableName)
  1126. .addPkColumn(UUID_COL)
  1127. .addColumn(newVarcharColumnDefBuilder("name").setLimit(40).setIsNullable(false).build())
  1128. .addColumn(projectUuidCol)
  1129. .addColumn(newBlobColumnDefBuilder().setColumnName("payload").setIsNullable(false).build())
  1130. .addColumn(TECHNICAL_CREATED_AT_COL)
  1131. .addColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setLimit(20).build())
  1132. .build());
  1133. addIndex(context, tableName, "idx_push_even_crea_uuid_proj", false, TECHNICAL_CREATED_AT_COL, UUID_COL, projectUuidCol);
  1134. }
  1135. private void createQGateGroupPermissions(Context context) {
  1136. String tableName = "qgate_group_permissions";
  1137. VarcharColumnDef qualityGateUuidColumn = newVarcharColumnDefBuilder(QUALITY_GATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1138. context.execute(newTableBuilder(tableName)
  1139. .addPkColumn(UUID_COL)
  1140. .addColumn(qualityGateUuidColumn)
  1141. .addColumn(newVarcharColumnDefBuilder(GROUP_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  1142. .addColumn(TECHNICAL_CREATED_AT_COL)
  1143. .build());
  1144. addIndex(context, tableName, "qg_groups_uuid_idx", false, qualityGateUuidColumn);
  1145. }
  1146. private void createQGateUserPermissions(Context context) {
  1147. String tableName = "qgate_user_permissions";
  1148. VarcharColumnDef qualityGateUuidColumn = newVarcharColumnDefBuilder(QUALITY_GATE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1149. context.execute(newTableBuilder(tableName)
  1150. .addPkColumn(UUID_COL)
  1151. .addColumn(qualityGateUuidColumn)
  1152. .addColumn(newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  1153. .addColumn(TECHNICAL_CREATED_AT_COL)
  1154. .build());
  1155. addIndex(context, tableName, "quality_gate_uuid_idx", false, qualityGateUuidColumn);
  1156. }
  1157. private void createQProfileChanges(Context context) {
  1158. String tableName = "qprofile_changes";
  1159. VarcharColumnDef rulesProfileUuidCol = newVarcharColumnDefBuilder("rules_profile_uuid").setLimit(255).setIsNullable(false).build();
  1160. context.execute(newTableBuilder(tableName)
  1161. .addPkColumn(newVarcharColumnDefBuilder("kee").setLimit(UUID_SIZE).setIsNullable(false).build())
  1162. .addColumn(rulesProfileUuidCol)
  1163. .addColumn(newVarcharColumnDefBuilder("change_type").setLimit(20).setIsNullable(false).build())
  1164. .addColumn(newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(USER_UUID_SIZE).setIsNullable(true).build())
  1165. .addColumn(newClobColumnDefBuilder().setColumnName("change_data").setIsNullable(true).build())
  1166. .addColumn(TECHNICAL_CREATED_AT_COL)
  1167. .build());
  1168. addIndex(context, tableName, "qp_changes_rules_profile_uuid", false, rulesProfileUuidCol);
  1169. }
  1170. private void createQProfileEditGroups(Context context) {
  1171. String tableName = "qprofile_edit_groups";
  1172. VarcharColumnDef qProfileUuidCol = newVarcharColumnDefBuilder(QPROFILE_UUID_COL_NAME).setIsNullable(false).setLimit(255).build();
  1173. VarcharColumnDef groupUuidCol = newVarcharColumnDefBuilder(GROUP_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1174. context.execute(newTableBuilder(tableName)
  1175. .addPkColumn(UUID_COL)
  1176. .addColumn(qProfileUuidCol)
  1177. .addColumn(TECHNICAL_CREATED_AT_COL)
  1178. .addColumn(groupUuidCol)
  1179. .build());
  1180. addIndex(context, tableName, tableName + "_qprofile", false, qProfileUuidCol);
  1181. addIndex(context, tableName, tableName + UNIQUE_INDEX_SUFFIX, true, groupUuidCol, qProfileUuidCol);
  1182. }
  1183. private void createQProfileEditUsers(Context context) {
  1184. String tableName = "qprofile_edit_users";
  1185. VarcharColumnDef qProfileUuidCol = newVarcharColumnDefBuilder(QPROFILE_UUID_COL_NAME).setLimit(255).setIsNullable(false).build();
  1186. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(255).setIsNullable(false).build();
  1187. context.execute(newTableBuilder(tableName)
  1188. .addPkColumn(UUID_COL)
  1189. .addColumn(qProfileUuidCol)
  1190. .addColumn(TECHNICAL_CREATED_AT_COL)
  1191. .addColumn(userUuidCol)
  1192. .build());
  1193. addIndex(context, tableName, tableName + "_qprofile", false, qProfileUuidCol);
  1194. addIndex(context, tableName, tableName + UNIQUE_INDEX_SUFFIX, true, userUuidCol, qProfileUuidCol);
  1195. }
  1196. private void createQualityGateConditions(Context context) {
  1197. context.execute(
  1198. newTableBuilder("quality_gate_conditions")
  1199. .addPkColumn(UUID_COL)
  1200. .addColumn(newVarcharColumnDefBuilder("operator").setLimit(3).setIsNullable(true).build())
  1201. .addColumn(newVarcharColumnDefBuilder("value_error").setLimit(64).setIsNullable(true).build())
  1202. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  1203. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  1204. .addColumn(newVarcharColumnDefBuilder(METRIC_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build())
  1205. .addColumn(newVarcharColumnDefBuilder("qgate_uuid").setLimit(UUID_SIZE).setIsNullable(false).build())
  1206. .build());
  1207. }
  1208. private void createQualityGates(Context context) {
  1209. context.execute(
  1210. newTableBuilder("quality_gates")
  1211. .addPkColumn(UUID_COL)
  1212. .addColumn(newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build())
  1213. .addColumn(newBooleanColumnDefBuilder().setColumnName("is_built_in").setIsNullable(false).build())
  1214. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  1215. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  1216. .build());
  1217. }
  1218. private void createScimUsers(Context context) {
  1219. String tableName = "scim_users";
  1220. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1221. context.execute(
  1222. newTableBuilder(tableName)
  1223. .addPkColumn(newVarcharColumnDefBuilder().setColumnName("scim_uuid").setIsNullable(false).setLimit(UUID_SIZE).build())
  1224. .addColumn(userUuidCol)
  1225. .build());
  1226. addIndex(context, tableName, "uniq_scim_users_user_uuid", true, userUuidCol);
  1227. }
  1228. private void createSessionTokens(Context context) {
  1229. String tableName = "session_tokens";
  1230. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(255).setIsNullable(false).build();
  1231. context.execute(
  1232. newTableBuilder(tableName)
  1233. .addPkColumn(UUID_COL)
  1234. .addColumn(userUuidCol)
  1235. .addColumn(newBigIntegerColumnDefBuilder().setColumnName(EXPIRATION_DATE_COL_NAME).setIsNullable(false).build())
  1236. .addColumn(TECHNICAL_CREATED_AT_COL)
  1237. .addColumn(TECHNICAL_UPDATED_AT_COL)
  1238. .build());
  1239. addIndex(context, tableName, "session_tokens_user_uuid", false, userUuidCol);
  1240. }
  1241. private void createRulesRepository(Context context) {
  1242. String tableName = "rule_repositories";
  1243. context.execute(newTableBuilder(tableName)
  1244. .addPkColumn(newVarcharColumnDefBuilder("kee").setLimit(200).setIsNullable(false).build())
  1245. .addColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setLimit(20).setIsNullable(false).build())
  1246. .addColumn(newVarcharColumnDefBuilder("name").setLimit(4_000).setIsNullable(false).build())
  1247. .addColumn(TECHNICAL_CREATED_AT_COL)
  1248. .build());
  1249. }
  1250. private void createRuleDescSections(Context context) {
  1251. String tableName = "rule_desc_sections";
  1252. VarcharColumnDef ruleUuidCol = newVarcharColumnDefBuilder().setColumnName(RULE_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build();
  1253. VarcharColumnDef keeCol = newVarcharColumnDefBuilder().setColumnName("kee").setIsNullable(false).setLimit(DESCRIPTION_SECTION_KEY_SIZE).build();
  1254. VarcharColumnDef contextKeyCol = newVarcharColumnDefBuilder().setColumnName("context_key").setIsNullable(true).setLimit(DESCRIPTION_SECTION_KEY_SIZE).build();
  1255. context.execute(newTableBuilder(tableName)
  1256. .addPkColumn(newVarcharColumnDefBuilder().setColumnName("uuid").setIsNullable(false).setLimit(UUID_SIZE).build())
  1257. .addColumn(ruleUuidCol)
  1258. .addColumn(keeCol)
  1259. .addColumn(newClobColumnDefBuilder().setColumnName("content").setIsNullable(false).build())
  1260. .addColumn(contextKeyCol)
  1261. .addColumn(newVarcharColumnDefBuilder().setColumnName("context_display_name").setIsNullable(true).setLimit(50).build())
  1262. .build());
  1263. addIndex(context, tableName, "uniq_rule_desc_sections", true, ruleUuidCol, keeCol, contextKeyCol);
  1264. }
  1265. private void createRules(Context context) {
  1266. VarcharColumnDef pluginRuleKeyCol = newVarcharColumnDefBuilder("plugin_rule_key").setLimit(200).setIsNullable(false).build();
  1267. VarcharColumnDef pluginNameCol = newVarcharColumnDefBuilder("plugin_name").setLimit(255).setIsNullable(false).build();
  1268. context.execute(
  1269. newTableBuilder("rules")
  1270. .addPkColumn(UUID_COL)
  1271. .addColumn(newVarcharColumnDefBuilder("name").setLimit(200).setIsNullable(true).build())
  1272. .addColumn(pluginRuleKeyCol)
  1273. .addColumn(newVarcharColumnDefBuilder("plugin_key").setLimit(200).setIsNullable(true).build())
  1274. .addColumn(newVarcharColumnDefBuilder("plugin_config_key").setLimit(200).setIsNullable(true).build())
  1275. .addColumn(pluginNameCol)
  1276. .addColumn(newVarcharColumnDefBuilder("scope").setLimit(20).setIsNullable(false).build())
  1277. .addColumn(newIntegerColumnDefBuilder().setColumnName("priority").setIsNullable(true).build())
  1278. .addColumn(newVarcharColumnDefBuilder(STATUS_COL_NAME).setLimit(40).setIsNullable(true).build())
  1279. .addColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setLimit(20).setIsNullable(true).build())
  1280. .addColumn(newVarcharColumnDefBuilder("def_remediation_function").setLimit(20).setIsNullable(true).build())
  1281. .addColumn(newVarcharColumnDefBuilder("def_remediation_gap_mult").setLimit(20).setIsNullable(true).build())
  1282. .addColumn(newVarcharColumnDefBuilder("def_remediation_base_effort").setLimit(20).setIsNullable(true).build())
  1283. .addColumn(newVarcharColumnDefBuilder("gap_description").setLimit(MAX_SIZE).setIsNullable(true).build())
  1284. .addColumn(newVarcharColumnDefBuilder("system_tags").setLimit(MAX_SIZE).setIsNullable(true).build())
  1285. .addColumn(newBooleanColumnDefBuilder().setColumnName("is_template").setIsNullable(false).setDefaultValue(false).build())
  1286. .addColumn(newVarcharColumnDefBuilder("description_format").setLimit(20).setIsNullable(true).build())
  1287. .addColumn(new TinyIntColumnDef.Builder().setColumnName("rule_type").setIsNullable(true).build())
  1288. .addColumn(newVarcharColumnDefBuilder("security_standards").setIsNullable(true).setLimit(4_000).build())
  1289. .addColumn(newBooleanColumnDefBuilder().setColumnName("is_ad_hoc").setIsNullable(false).build())
  1290. .addColumn(newBooleanColumnDefBuilder().setColumnName("is_external").setIsNullable(false).build())
  1291. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  1292. .addColumn(NULLABLE_TECHNICAL_UPDATED_AT_COL)
  1293. .addColumn(newVarcharColumnDefBuilder(TEMPLATE_UUID_COL_NAME).setIsNullable(true).setLimit(UUID_SIZE).build())
  1294. .addColumn(newClobColumnDefBuilder().setColumnName("note_data").setIsNullable(true).build())
  1295. .addColumn(newVarcharColumnDefBuilder("note_user_uuid").setLimit(USER_UUID_SIZE).setIsNullable(true).build())
  1296. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("note_created_at").setIsNullable(true).build())
  1297. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("note_updated_at").setIsNullable(true).build())
  1298. .addColumn(newVarcharColumnDefBuilder("remediation_function").setLimit(20).setIsNullable(true).build())
  1299. .addColumn(newVarcharColumnDefBuilder("remediation_gap_mult").setLimit(20).setIsNullable(true).build())
  1300. .addColumn(newVarcharColumnDefBuilder("remediation_base_effort").setLimit(20).setIsNullable(true).build())
  1301. .addColumn(newVarcharColumnDefBuilder("tags").setLimit(4_000).setIsNullable(true).build())
  1302. .addColumn(newVarcharColumnDefBuilder("ad_hoc_name").setLimit(200).setIsNullable(true).build())
  1303. .addColumn(newClobColumnDefBuilder().setColumnName("ad_hoc_description").setIsNullable(true).build())
  1304. .addColumn(newVarcharColumnDefBuilder("ad_hoc_severity").setLimit(10).setIsNullable(true).build())
  1305. .addColumn(newTinyIntColumnDefBuilder().setColumnName("ad_hoc_type").setIsNullable(true).build())
  1306. .addColumn(newVarcharColumnDefBuilder("education_principles").setLimit(255).setIsNullable(true).build())
  1307. .build());
  1308. addIndex(context, "rules", "rules_repo_key", true, pluginRuleKeyCol, pluginNameCol);
  1309. }
  1310. private void createRulesParameters(Context context) {
  1311. String tableName = "rules_parameters";
  1312. VarcharColumnDef ruleUuidCol = newVarcharColumnDefBuilder(RULE_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1313. VarcharColumnDef nameCol = newVarcharColumnDefBuilder("name").setLimit(128).setIsNullable(false).build();
  1314. context.execute(
  1315. newTableBuilder(tableName)
  1316. .addPkColumn(UUID_COL)
  1317. .addColumn(nameCol)
  1318. .addColumn(newVarcharColumnDefBuilder(DESCRIPTION_COL_NAME).setLimit(MAX_SIZE).setIsNullable(true).build())
  1319. .addColumn(newVarcharColumnDefBuilder("param_type").setLimit(512).setIsNullable(false).build())
  1320. .addColumn(newVarcharColumnDefBuilder("default_value").setLimit(MAX_SIZE).setIsNullable(true).build())
  1321. .addColumn(ruleUuidCol)
  1322. .build());
  1323. addIndex(context, tableName, "rules_parameters_rule_uuid", false, ruleUuidCol);
  1324. addIndex(context, tableName, "rules_parameters_unique", true, ruleUuidCol, nameCol);
  1325. }
  1326. private void createRulesProfiles(Context context) {
  1327. String tableName = "rules_profiles";
  1328. context.execute(
  1329. newTableBuilder(tableName)
  1330. .addPkColumn(UUID_COL)
  1331. .addColumn(newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build())
  1332. .addColumn(newVarcharColumnDefBuilder(LANGUAGE_COL_NAME).setLimit(20).setIsNullable(true).build())
  1333. .addColumn(newBooleanColumnDefBuilder().setColumnName("is_built_in").setIsNullable(false).build())
  1334. .addColumn(newVarcharColumnDefBuilder("rules_updated_at").setLimit(100).setIsNullable(true).build())
  1335. .addColumn(DEPRECATED_TECHNICAL_CREATED_AT_COL)
  1336. .addColumn(DEPRECATED_TECHNICAL_UPDATED_AT_COL)
  1337. .build());
  1338. }
  1339. private void createSamlMessageIds(Context context) {
  1340. String tableName = "saml_message_ids";
  1341. VarcharColumnDef messageIdCol = newVarcharColumnDefBuilder("message_id").setLimit(255).setIsNullable(false).build();
  1342. context.execute(
  1343. newTableBuilder(tableName)
  1344. .addPkColumn(UUID_COL)
  1345. .addColumn(messageIdCol)
  1346. .addColumn(newBigIntegerColumnDefBuilder().setColumnName(EXPIRATION_DATE_COL_NAME).setIsNullable(false).build())
  1347. .addColumn(TECHNICAL_CREATED_AT_COL)
  1348. .build());
  1349. addIndex(context, tableName, "saml_message_ids_unique", true, messageIdCol);
  1350. }
  1351. private void createScannerAnalysisCache(Context context) {
  1352. String tableName = "scanner_analysis_cache";
  1353. context.execute(
  1354. newTableBuilder(tableName)
  1355. .addPkColumn(newVarcharColumnDefBuilder().setColumnName(BRANCH_UUID_COL_NAME).setIsNullable(false).setLimit(UUID_SIZE).build())
  1356. .addColumn(newBlobColumnDefBuilder().setColumnName("data").setIsNullable(false).build())
  1357. .build());
  1358. }
  1359. private void createSnapshots(Context context) {
  1360. String tableName = "snapshots";
  1361. VarcharColumnDef uuidCol = newVarcharColumnDefBuilder("uuid").setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  1362. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(OLD_UUID_VARCHAR_SIZE).setIsNullable(false).build();
  1363. context.execute(
  1364. newTableBuilder(tableName)
  1365. .addPkColumn(uuidCol)
  1366. .addColumn(componentUuidCol)
  1367. .addColumn(newVarcharColumnDefBuilder(STATUS_COL_NAME).setLimit(4).setIsNullable(false).setDefaultValue("U").build())
  1368. .addColumn(newBooleanColumnDefBuilder().setColumnName("islast").setIsNullable(false).setDefaultValue(false).build())
  1369. .addColumn(newVarcharColumnDefBuilder("version").setLimit(500).setIsNullable(true).build())
  1370. .addColumn(newIntegerColumnDefBuilder().setColumnName("purge_status").setIsNullable(true).build())
  1371. .addColumn(newVarcharColumnDefBuilder("build_string").setLimit(100).setIsNullable(true).build())
  1372. .addColumn(newVarcharColumnDefBuilder("revision").setLimit(100).setIsNullable(true).build())
  1373. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("build_date").setIsNullable(true).build())
  1374. .addColumn(newVarcharColumnDefBuilder("period1_mode").setLimit(100).setIsNullable(true).build())
  1375. .addColumn(newVarcharColumnDefBuilder("period1_param").setLimit(100).setIsNullable(true).build())
  1376. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("period1_date").setIsNullable(true).build())
  1377. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  1378. .build());
  1379. addIndex(context, tableName, "snapshot_component", false, componentUuidCol);
  1380. }
  1381. private void createUserRoles(Context context) {
  1382. String tableName = "user_roles";
  1383. VarcharColumnDef componentUuidCol = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  1384. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(USER_UUID_SIZE).setIsNullable(true).build();
  1385. context.execute(
  1386. newTableBuilder(tableName)
  1387. .addPkColumn(UUID_COL)
  1388. .addColumn(newVarcharColumnDefBuilder("role").setLimit(64).setIsNullable(false).build())
  1389. .addColumn(componentUuidCol)
  1390. .addColumn(userUuidCol)
  1391. .build());
  1392. addIndex(context, tableName, "user_roles_component_uuid", false, componentUuidCol);
  1393. addIndex(context, tableName, "user_roles_user", false, userUuidCol);
  1394. }
  1395. private void createUserDismissedMessage(Context context) {
  1396. String tableName = "user_dismissed_messages";
  1397. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(USER_UUID_SIZE).setIsNullable(false).build();
  1398. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1399. VarcharColumnDef messageTypeCol = newVarcharColumnDefBuilder("message_type").setLimit(255).setIsNullable(false).build();
  1400. context.execute(
  1401. newTableBuilder(tableName)
  1402. .addPkColumn(UUID_COL)
  1403. .addColumn(userUuidCol)
  1404. .addColumn(projectUuidCol)
  1405. .addColumn(messageTypeCol)
  1406. .addColumn(TECHNICAL_CREATED_AT_COL)
  1407. .build());
  1408. addIndex(context, tableName, "uniq_user_dismissed_messages", true, userUuidCol, projectUuidCol, messageTypeCol);
  1409. addIndex(context, tableName, "udm_project_uuid", false, projectUuidCol);
  1410. addIndex(context, tableName, "udm_message_type", false, messageTypeCol);
  1411. }
  1412. private void createUserTokens(Context context) {
  1413. String tableName = "user_tokens";
  1414. VarcharColumnDef userUuidCol = newVarcharColumnDefBuilder(USER_UUID_COL_NAME).setLimit(USER_UUID_SIZE).setIsNullable(false).build();
  1415. VarcharColumnDef nameCol = newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build();
  1416. VarcharColumnDef tokenHashCol = newVarcharColumnDefBuilder("token_hash").setLimit(255).setIsNullable(false).build();
  1417. VarcharColumnDef projectKeyCol = newVarcharColumnDefBuilder("project_key").setLimit(255).setIsNullable(true).build();
  1418. VarcharColumnDef typeCol = newVarcharColumnDefBuilder("type").setLimit(100).setIsNullable(false).build();
  1419. context.execute(
  1420. newTableBuilder(tableName)
  1421. .addPkColumn(UUID_COL)
  1422. .addColumn(userUuidCol)
  1423. .addColumn(nameCol)
  1424. .addColumn(tokenHashCol)
  1425. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("last_connection_date").setIsNullable(true).build())
  1426. .addColumn(TECHNICAL_CREATED_AT_COL)
  1427. .addColumn(projectKeyCol)
  1428. .addColumn(typeCol)
  1429. .addColumn(newBigIntegerColumnDefBuilder().setColumnName(EXPIRATION_DATE_COL_NAME).setIsNullable(true).build())
  1430. .build());
  1431. addIndex(context, tableName, "user_tokens_user_uuid_name", true, userUuidCol, nameCol);
  1432. addIndex(context, tableName, "user_tokens_token_hash", true, tokenHashCol);
  1433. }
  1434. private void createUsers(Context context) {
  1435. String tableName = "users";
  1436. VarcharColumnDef loginCol = newVarcharColumnDefBuilder("login").setLimit(255).setIsNullable(false).build();
  1437. VarcharColumnDef externalLoginCol = newVarcharColumnDefBuilder("external_login").setLimit(255).setIsNullable(false).build();
  1438. VarcharColumnDef externalIdentityProviderCol = newVarcharColumnDefBuilder("external_identity_provider").setLimit(100).setIsNullable(false).build();
  1439. VarcharColumnDef externalIdCol = newVarcharColumnDefBuilder("external_id").setLimit(255).setIsNullable(false).build();
  1440. context.execute(
  1441. newTableBuilder(tableName)
  1442. .addPkColumn(newVarcharColumnDefBuilder("uuid").setLimit(USER_UUID_SIZE).setIsNullable(false).build())
  1443. .addColumn(loginCol)
  1444. .addColumn(newVarcharColumnDefBuilder("name").setLimit(200).setIsNullable(true).build())
  1445. .addColumn(newVarcharColumnDefBuilder("email").setLimit(100).setIsNullable(true).build())
  1446. .addColumn(newVarcharColumnDefBuilder("crypted_password").setLimit(100).setIsNullable(true).build())
  1447. .addColumn(newVarcharColumnDefBuilder("salt").setLimit(40).setIsNullable(true).build())
  1448. .addColumn(newVarcharColumnDefBuilder("hash_method").setLimit(10).setIsNullable(true).build())
  1449. .addColumn(newBooleanColumnDefBuilder().setColumnName("active").setDefaultValue(true).setIsNullable(true).build())
  1450. .addColumn(newVarcharColumnDefBuilder("scm_accounts").setLimit(MAX_SIZE).build())
  1451. .addColumn(externalLoginCol)
  1452. .addColumn(externalIdentityProviderCol)
  1453. .addColumn(externalIdCol)
  1454. .addColumn(newBooleanColumnDefBuilder().setColumnName("user_local").setIsNullable(true).build())
  1455. .addColumn(newVarcharColumnDefBuilder("homepage_type").setLimit(40).setIsNullable(true).build())
  1456. .addColumn(newVarcharColumnDefBuilder("homepage_parameter").setLimit(40).setIsNullable(true).build())
  1457. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("last_connection_date").setIsNullable(true).build())
  1458. .addColumn(NULLABLE_TECHNICAL_CREATED_AT_COL)
  1459. .addColumn(NULLABLE_TECHNICAL_UPDATED_AT_COL)
  1460. .addColumn(newBooleanColumnDefBuilder().setColumnName("reset_password").setIsNullable(false).build())
  1461. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("last_sonarlint_connection").setIsNullable(true).build())
  1462. .build());
  1463. addIndex(context, tableName, "users_login", true, loginCol);
  1464. addIndex(context, tableName, "users_updated_at", false, NULLABLE_TECHNICAL_UPDATED_AT_COL);
  1465. addIndex(context, tableName, "uniq_external_id", true, externalIdentityProviderCol, externalIdCol);
  1466. addIndex(context, tableName, "uniq_external_login", true, externalIdentityProviderCol, externalLoginCol);
  1467. }
  1468. private void createWebhookDeliveries(Context context) {
  1469. String tableName = "webhook_deliveries";
  1470. VarcharColumnDef componentUuidColumn = newVarcharColumnDefBuilder(COMPONENT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(false).build();
  1471. VarcharColumnDef ceTaskUuidColumn = newVarcharColumnDefBuilder("ce_task_uuid").setLimit(UUID_SIZE).setIsNullable(true).build();
  1472. VarcharColumnDef webhookUuidColumn = newVarcharColumnDefBuilder("webhook_uuid").setLimit(UUID_SIZE).setIsNullable(false).build();
  1473. context.execute(newTableBuilder(tableName)
  1474. .addPkColumn(UUID_COL)
  1475. .addColumn(webhookUuidColumn)
  1476. .addColumn(componentUuidColumn)
  1477. .addColumn(ceTaskUuidColumn)
  1478. .addColumn(newVarcharColumnDefBuilder(ANALYSIS_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build())
  1479. .addColumn(newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build())
  1480. .addColumn(newVarcharColumnDefBuilder("url").setLimit(2_000).setIsNullable(false).build())
  1481. .addColumn(newBooleanColumnDefBuilder().setColumnName("success").setIsNullable(false).build())
  1482. .addColumn(newIntegerColumnDefBuilder().setColumnName("http_status").setIsNullable(true).build())
  1483. .addColumn(newBigIntegerColumnDefBuilder().setColumnName("duration_ms").setIsNullable(false).build())
  1484. .addColumn(newClobColumnDefBuilder().setColumnName("payload").setIsNullable(false).build())
  1485. .addColumn(newClobColumnDefBuilder().setColumnName("error_stacktrace").setIsNullable(true).build())
  1486. .addColumn(TECHNICAL_CREATED_AT_COL)
  1487. .build());
  1488. addIndex(context, tableName, COMPONENT_UUID_COL_NAME, false, componentUuidColumn);
  1489. addIndex(context, tableName, "ce_task_uuid", false, ceTaskUuidColumn);
  1490. addIndex(context, tableName, "idx_wbhk_dlvrs_wbhk_uuid", false, webhookUuidColumn);
  1491. }
  1492. private void createWebhooks(Context context) {
  1493. String tableName = "webhooks";
  1494. VarcharColumnDef projectUuidCol = newVarcharColumnDefBuilder(PROJECT_UUID_COL_NAME).setLimit(UUID_SIZE).setIsNullable(true).build();
  1495. context.execute(newTableBuilder(tableName)
  1496. .addPkColumn(UUID_COL)
  1497. .addColumn(projectUuidCol)
  1498. .addColumn(newVarcharColumnDefBuilder("name").setLimit(100).setIsNullable(false).build())
  1499. .addColumn(newVarcharColumnDefBuilder("url").setLimit(2_000).setIsNullable(false).build())
  1500. .addColumn(newVarcharColumnDefBuilder("secret").setLimit(200).setIsNullable(true).build())
  1501. .addColumn(TECHNICAL_CREATED_AT_COL)
  1502. .addColumn(NULLABLE_TECHNICAL_UPDATED_AT_COL)
  1503. .build());
  1504. }
  1505. private static void addIndex(Context context, String table, String index, boolean unique, ColumnDef firstColumn, ColumnDef... otherColumns) {
  1506. CreateIndexBuilder builder = new CreateIndexBuilder()
  1507. .setTable(table)
  1508. .setName(index)
  1509. .setUnique(unique);
  1510. concat(of(firstColumn), stream(otherColumns)).forEach(builder::addColumn);
  1511. context.execute(builder.build());
  1512. }
  1513. private CreateTableBuilder newTableBuilder(String tableName) {
  1514. return new CreateTableBuilder(getDialect(), tableName);
  1515. }
  1516. }