]> source.dussan.org Git - sonarqube.git/blob
9fdbcfe5d55bb9048e81e01262c5621843f8f660
[sonarqube.git] /
1 /*
2  * SonarQube
3  * Copyright (C) 2009-2022 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.def;
21
22 import javax.annotation.Nullable;
23 import javax.annotation.concurrent.Immutable;
24 import org.sonar.db.dialect.Dialect;
25 import org.sonar.db.dialect.H2;
26 import org.sonar.db.dialect.MsSql;
27 import org.sonar.db.dialect.Oracle;
28 import org.sonar.db.dialect.PostgreSql;
29
30 import static org.sonar.server.platform.db.migration.def.Validations.validateColumnName;
31
32 /**
33  * Used to define VARCHAR column
34  */
35 @Immutable
36 public class BooleanColumnDef extends AbstractColumnDef {
37
38   private BooleanColumnDef(Builder builder) {
39     super(builder.columnName, builder.isNullable, builder.defaultValue);
40   }
41
42   public static Builder newBooleanColumnDefBuilder() {
43     return new Builder();
44   }
45
46   @Override
47   public String generateSqlType(Dialect dialect) {
48     switch (dialect.getId()) {
49       case PostgreSql.ID:
50       case H2.ID:
51         return "BOOLEAN";
52       case Oracle.ID:
53         return "NUMBER(1)";
54       case MsSql.ID:
55         return "BIT";
56       default:
57         throw new UnsupportedOperationException(String.format("Unknown dialect '%s'", dialect.getId()));
58     }
59   }
60
61   public static class Builder {
62     private String columnName;
63     private Boolean defaultValue = null;
64     private boolean isNullable = true;
65
66     public Builder setColumnName(String columnName) {
67       this.columnName = validateColumnName(columnName);
68       return this;
69     }
70
71     public Builder setIsNullable(boolean isNullable) {
72       this.isNullable = isNullable;
73       return this;
74     }
75
76     public Builder setDefaultValue(@Nullable Boolean b) {
77       this.defaultValue = b;
78       return this;
79     }
80
81     public BooleanColumnDef build() {
82       validateColumnName(columnName);
83       return new BooleanColumnDef(this);
84     }
85   }
86
87 }