| 1 | package com.jsql.model.injection.vendor; | |
| 2 | ||
| 3 | import com.jsql.model.InjectionModel; | |
| 4 | import com.jsql.model.bean.util.Header; | |
| 5 | import com.jsql.model.bean.util.Interaction; | |
| 6 | import com.jsql.model.bean.util.Request; | |
| 7 | import com.jsql.model.injection.vendor.model.Vendor; | |
| 8 | import com.jsql.model.injection.vendor.model.VendorYaml; | |
| 9 | import com.jsql.util.I18nUtil; | |
| 10 | import com.jsql.util.LogLevelUtil; | |
| 11 | import com.jsql.util.StringUtil; | |
| 12 | import org.apache.commons.lang3.StringUtils; | |
| 13 | import org.apache.commons.lang3.SystemUtils; | |
| 14 | import org.apache.logging.log4j.LogManager; | |
| 15 | import org.apache.logging.log4j.Logger; | |
| 16 | ||
| 17 | import java.net.URLEncoder; | |
| 18 | import java.nio.charset.StandardCharsets; | |
| 19 | import java.time.LocalDate; | |
| 20 | import java.time.format.DateTimeFormatter; | |
| 21 | import java.util.Arrays; | |
| 22 | import java.util.EnumMap; | |
| 23 | import java.util.List; | |
| 24 | import java.util.Map; | |
| 25 | ||
| 26 | public class MediatorVendor { | |
| 27 | | |
| 28 | private static final Logger LOGGER = LogManager.getRootLogger(); | |
| 29 | | |
| 30 | private static final String LOG_VENDOR = "{} [{}]"; | |
| 31 | ||
| 32 | /** | |
| 33 | * Database vendor currently used. | |
| 34 | * It can be switched to another vendor by automatic detection or manual selection. | |
| 35 | */ | |
| 36 | private Vendor vendor; | |
| 37 | ||
| 38 | /** | |
| 39 | * Database vendor selected by user (default UNDEFINED). | |
| 40 | * If not UNDEFINED then the next injection will be forced to use the selected vendor. | |
| 41 | */ | |
| 42 | private Vendor vendorByUser; | |
| 43 | ||
| 44 | // TODO Replace with enum | |
| 45 | private final Vendor auto; | |
| 46 | private final Vendor cubrid; | |
| 47 | private final Vendor db2; | |
| 48 | private final Vendor derby; | |
| 49 | private final Vendor firebird; | |
| 50 | private final Vendor h2; | |
| 51 | private final Vendor hsqldb; | |
| 52 | private final Vendor informix; | |
| 53 | private final Vendor mckoi; | |
| 54 | private final Vendor mimer; | |
| 55 | private final Vendor monetdb; | |
| 56 | private final Vendor mysql; | |
| 57 | private final Vendor neo4j; | |
| 58 | private final Vendor oracle; | |
| 59 | private final Vendor postgres; | |
| 60 | private final Vendor sqlite; | |
| 61 | private final Vendor sqlserver; | |
| 62 | private final Vendor sybase; | |
| 63 | private final Vendor vertica; | |
| 64 | ||
| 65 | private final List<Vendor> vendors; | |
| 66 | private final List<Vendor> vendorsForFingerprint; | |
| 67 | ||
| 68 | private final InjectionModel injectionModel; | |
| 69 | | |
| 70 | public MediatorVendor(InjectionModel injectionModel) { | |
| 71 | this.injectionModel = injectionModel; | |
| 72 | | |
| 73 | Vendor access = new Vendor(new VendorYaml("access.yml", injectionModel)); | |
| 74 | Vendor altibase = new Vendor(new VendorYaml("altibase.yml", injectionModel)); | |
| 75 | Vendor ctreeace = new Vendor(new VendorYaml("ctreeace.yml", injectionModel)); | |
| 76 | Vendor exasol = new Vendor(new VendorYaml("exasol.yml", injectionModel)); | |
| 77 | Vendor frontbase = new Vendor(new VendorYaml("frontbase.yml", injectionModel)); | |
| 78 | Vendor hana = new Vendor(new VendorYaml("hana.yml", injectionModel)); | |
| 79 | Vendor ingres = new Vendor(new VendorYaml("ingres.yml", injectionModel)); | |
| 80 | Vendor iris = new Vendor(new VendorYaml("iris.yml", injectionModel)); | |
| 81 | Vendor maxdb = new Vendor(new VendorYaml("maxdb.yml", injectionModel)); | |
| 82 | Vendor netezza = new Vendor(new VendorYaml("netezza.yml", injectionModel)); | |
| 83 | Vendor nuodb = new Vendor(new VendorYaml("nuodb.yml", injectionModel)); | |
| 84 | Vendor presto = new Vendor(new VendorYaml("presto.yml", injectionModel)); | |
| 85 | Vendor teradata = new Vendor(new VendorYaml("teradata.yml", injectionModel)); | |
| 86 | ||
| 87 | this.auto = new Vendor(); | |
| 88 | this.cubrid = new Vendor(new VendorYaml("cubrid.yml", injectionModel)); | |
| 89 | this.db2 = new Vendor(new VendorYaml("db2.yml", injectionModel)); | |
| 90 | this.derby = new Vendor(new VendorYaml("derby.yml", injectionModel)); | |
| 91 | this.firebird = new Vendor(new VendorYaml("firebird.yml", injectionModel)); | |
| 92 | this.h2 = new Vendor(new VendorYaml("h2.yml", injectionModel)); | |
| 93 | this.hsqldb = new Vendor(new VendorYaml("hsqldb.yml", injectionModel)); | |
| 94 | this.informix = new Vendor(new VendorYaml("informix.yml", injectionModel)); | |
| 95 | this.mckoi = new Vendor(new VendorYaml("mckoi.yml", injectionModel)); | |
| 96 | this.mimer = new Vendor(new VendorYaml("mimersql.yml", injectionModel)); | |
| 97 | this.monetdb = new Vendor(new VendorYaml("monetdb.yml", injectionModel)); | |
| 98 | this.mysql = new Vendor(new VendorYaml("mysql.yml", injectionModel)); | |
| 99 | this.neo4j = new Vendor(new VendorYaml("neo4j.yml", injectionModel)); | |
| 100 | this.oracle = new Vendor(new VendorYaml("oracle.yml", injectionModel)); | |
| 101 | this.postgres = new Vendor(new VendorYaml("postgres.yml", injectionModel)); | |
| 102 | this.sqlite = new Vendor(new VendorYaml("sqlite.yml", injectionModel)) { | |
| 103 | @Override | |
| 104 | public String transformSqlite(String resultToParse) { | |
| 105 | var resultSqlite = new StringBuilder(); | |
| 106 | ||
| 107 | String resultTmp = resultToParse | |
| 108 | .replaceFirst("[^(]+\\(", StringUtils.EMPTY) | |
| 109 | .trim() | |
| 110 | .replaceAll("\\)$", StringUtils.EMPTY); | |
| 111 | resultTmp = resultTmp.replaceAll("\\([^)]+\\)", StringUtils.EMPTY); | |
| 112 | ||
| 113 | for (String columnNameAndType: resultTmp.split(",")) { | |
| 114 |
1
1. transformSqlite : negated conditional → NO_COVERAGE |
if (columnNameAndType.trim().startsWith("primary key")) { |
| 115 | continue; | |
| 116 | } | |
| 117 | // Some recent SQLite use tabulation character as a separator => split() by any white space \s | |
| 118 | String columnName = columnNameAndType.trim().split("\\s")[0]; | |
| 119 | // Some recent SQLite enclose names with ` => strip those ` | |
| 120 | columnName = StringUtils.strip(columnName, "`"); | |
| 121 | if ( | |
| 122 |
1
1. transformSqlite : negated conditional → NO_COVERAGE |
!"CONSTRAINT".equals(columnName) |
| 123 |
1
1. transformSqlite : negated conditional → NO_COVERAGE |
&& !"UNIQUE".equals(columnName) |
| 124 | ) { | |
| 125 | // Generate pattern \4\5\4\6 for injection parsing | |
| 126 | resultSqlite.append((char) 4).append(columnName).append((char) 5).append("0").append((char) 4).append((char) 6); | |
| 127 | } | |
| 128 | } | |
| 129 |
1
1. transformSqlite : replaced return value with "" for com/jsql/model/injection/vendor/MediatorVendor$1::transformSqlite → NO_COVERAGE |
return resultSqlite.toString(); |
| 130 | } | |
| 131 | }; | |
| 132 | this.sqlserver = new Vendor(new VendorYaml("sqlserver.yml", injectionModel)); | |
| 133 | this.sybase = new Vendor(new VendorYaml("sybase.yml", injectionModel)); | |
| 134 | this.vertica = new Vendor(new VendorYaml("vertica.yml", injectionModel)); | |
| 135 | ||
| 136 | this.vendors = Arrays.asList( | |
| 137 | this.auto, access, altibase, ctreeace, this.cubrid, this.db2, this.derby, exasol, this.firebird, frontbase, this.h2, | |
| 138 | hana, this.hsqldb, this.informix, ingres, iris, maxdb, this.mckoi, this.mimer, this.monetdb, this.mysql, this.neo4j, | |
| 139 | netezza, nuodb, this.oracle, this.postgres, presto, this.sqlite, this.sqlserver, this.sybase, teradata, this.vertica | |
| 140 | ); | |
| 141 | this.vendorsForFingerprint = Arrays.asList( | |
| 142 | this.mysql, this.postgres, this.sqlite, this.h2, this.hsqldb, this.oracle, this.sqlserver, access, altibase, ctreeace, | |
| 143 | this.cubrid, this.db2, this.derby, exasol, this.firebird, frontbase, hana, this.informix, ingres, iris, maxdb, this.mckoi, | |
| 144 | this.mimer, this.monetdb, this.neo4j, netezza, nuodb, presto, this.sybase, teradata, this.vertica | |
| 145 | ); | |
| 146 | ||
| 147 |
1
1. <init> : removed call to com/jsql/model/injection/vendor/MediatorVendor::setVendor → SURVIVED |
this.setVendor(this.mysql); |
| 148 | this.vendorByUser = this.auto; | |
| 149 | } | |
| 150 | | |
| 151 | public boolean isSqlite() { | |
| 152 |
2
1. isSqlite : negated conditional → NO_COVERAGE 2. isSqlite : replaced boolean return with true for com/jsql/model/injection/vendor/MediatorVendor::isSqlite → NO_COVERAGE |
return this.getVendor() == this.getSqlite(); |
| 153 | } | |
| 154 | | |
| 155 | public Vendor fingerprintVendor() { | |
| 156 | Vendor vendorFound = null; | |
| 157 |
1
1. fingerprintVendor : negated conditional → NO_COVERAGE |
if (this.injectionModel.getMediatorVendor().getVendorByUser() != this.injectionModel.getMediatorVendor().getAuto()) { |
| 158 | vendorFound = this.injectionModel.getMediatorVendor().getVendorByUser(); | |
| 159 | LOGGER.log( | |
| 160 | LogLevelUtil.CONSOLE_INFORM, | |
| 161 | MediatorVendor.LOG_VENDOR, | |
| 162 |
1
1. lambda$fingerprintVendor$0 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$0 → NO_COVERAGE |
() -> I18nUtil.valueByKey("LOG_DATABASE_TYPE_FORCED_BY_USER"), |
| 163 |
1
1. lambda$fingerprintVendor$1 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$1 → NO_COVERAGE |
() -> this.injectionModel.getMediatorVendor().getVendorByUser() |
| 164 | ); | |
| 165 | } else { | |
| 166 | LOGGER.log(LogLevelUtil.CONSOLE_DEFAULT, "Fingerprinting database..."); | |
| 167 | var insertionCharacter = URLEncoder.encode("'\"#-)'\"*", StandardCharsets.UTF_8); | |
| 168 | String pageSource = this.injectionModel.injectWithoutIndex(insertionCharacter, "test#vendor"); | |
| 169 | | |
| 170 | var mediatorVendor = this.injectionModel.getMediatorVendor(); | |
| 171 | Vendor[] vendorsWithoutAuto = mediatorVendor.getVendors() | |
| 172 | .stream() | |
| 173 |
2
1. lambda$fingerprintVendor$2 : replaced boolean return with true for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$2 → NO_COVERAGE 2. lambda$fingerprintVendor$2 : negated conditional → NO_COVERAGE |
.filter(v -> v != mediatorVendor.getAuto()) |
| 174 |
1
1. lambda$fingerprintVendor$3 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$3 → NO_COVERAGE |
.toArray(Vendor[]::new); |
| 175 | | |
| 176 | // Test each vendor | |
| 177 | for (Vendor vendorTest: vendorsWithoutAuto) { | |
| 178 |
1
1. fingerprintVendor : negated conditional → NO_COVERAGE |
if (pageSource.matches(vendorTest.instance().fingerprintErrorsAsRegex())) { |
| 179 | vendorFound = vendorTest; | |
| 180 | LOGGER.log( | |
| 181 | LogLevelUtil.CONSOLE_SUCCESS, | |
| 182 | MediatorVendor.LOG_VENDOR, | |
| 183 |
1
1. lambda$fingerprintVendor$4 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$4 → NO_COVERAGE |
() -> "Basic fingerprint matching vendor", |
| 184 |
1
1. lambda$fingerprintVendor$5 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$fingerprintVendor$5 → NO_COVERAGE |
() -> vendorTest |
| 185 | ); | |
| 186 | break; | |
| 187 | } | |
| 188 | } | |
| 189 | vendorFound = this.initVendor(vendorFound); | |
| 190 | } | |
| 191 | ||
| 192 | var urlGitHub = this.injectionModel.getMediatorUtils().getPropertiesUtil().getProperty("github.url"); | |
| 193 |
1
1. fingerprintVendor : removed call to com/jsql/model/InjectionModel::appendAnalysisReport → NO_COVERAGE |
this.injectionModel.appendAnalysisReport( |
| 194 | String.join( | |
| 195 | StringUtils.EMPTY, | |
| 196 | "# Date: ", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE), | |
| 197 | "<br> # Tested on: ", SystemUtils.OS_NAME, " (", SystemUtils.OS_VERSION, ")", | |
| 198 | "<br> # Tool: ", StringUtil.APP_NAME, " v", this.injectionModel.getPropertiesUtil().getVersionJsql(), | |
| 199 | " (<a href=", urlGitHub, ">", urlGitHub, "</a>)", | |
| 200 | "<br> # Database: ", vendorFound.toString(), | |
| 201 | "<br> <br> ## Vulnerability summary</span>" | |
| 202 | ), | |
| 203 | true | |
| 204 | ); | |
| 205 | ||
| 206 | var requestSetVendor = new Request(); | |
| 207 |
1
1. fingerprintVendor : removed call to com/jsql/model/bean/util/Request::setMessage → NO_COVERAGE |
requestSetVendor.setMessage(Interaction.SET_VENDOR); |
| 208 | Map<Header, Object> msgHeader = new EnumMap<>(Header.class); | |
| 209 | msgHeader.put(Header.URL, this.injectionModel.getMediatorUtils().getConnectionUtil().getUrlByUser()); | |
| 210 | msgHeader.put(Header.VENDOR, vendorFound); | |
| 211 |
1
1. fingerprintVendor : removed call to com/jsql/model/bean/util/Request::setParameters → NO_COVERAGE |
requestSetVendor.setParameters(msgHeader); |
| 212 |
1
1. fingerprintVendor : removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE |
this.injectionModel.sendToViews(requestSetVendor); |
| 213 | | |
| 214 |
1
1. fingerprintVendor : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::fingerprintVendor → NO_COVERAGE |
return vendorFound; |
| 215 | } | |
| 216 | ||
| 217 | public Vendor initVendor(Vendor vendor) { | |
| 218 | var vendorFixed = vendor; | |
| 219 |
1
1. initVendor : negated conditional → NO_COVERAGE |
if (vendorFixed == null) { |
| 220 | vendorFixed = this.injectionModel.getMediatorVendor().getMysql(); | |
| 221 | LOGGER.log( | |
| 222 | LogLevelUtil.CONSOLE_INFORM, | |
| 223 | MediatorVendor.LOG_VENDOR, | |
| 224 |
1
1. lambda$initVendor$6 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$initVendor$6 → NO_COVERAGE |
() -> I18nUtil.valueByKey("LOG_DATABASE_TYPE_NOT_FOUND"), |
| 225 |
1
1. lambda$initVendor$7 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$initVendor$7 → NO_COVERAGE |
() -> this.injectionModel.getMediatorVendor().getMysql() |
| 226 | ); | |
| 227 | } else { | |
| 228 | LOGGER.log( | |
| 229 | LogLevelUtil.CONSOLE_INFORM, | |
| 230 | MediatorVendor.LOG_VENDOR, | |
| 231 |
1
1. lambda$initVendor$8 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$initVendor$8 → NO_COVERAGE |
() -> I18nUtil.valueByKey("LOG_USING_DATABASE_TYPE"), |
| 232 |
1
1. lambda$initVendor$9 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::lambda$initVendor$9 → NO_COVERAGE |
() -> vendor |
| 233 | ); | |
| 234 | Map<Header, Object> msgHeader = new EnumMap<>(Header.class); | |
| 235 | msgHeader.put( | |
| 236 | Header.URL, | |
| 237 | this.injectionModel.getMediatorUtils().getConnectionUtil().getUrlByUser() | |
| 238 | ); | |
| 239 | msgHeader.put(Header.VENDOR, vendorFixed); | |
| 240 | | |
| 241 | var requestDatabaseIdentified = new Request(); | |
| 242 |
1
1. initVendor : removed call to com/jsql/model/bean/util/Request::setMessage → NO_COVERAGE |
requestDatabaseIdentified.setMessage(Interaction.DATABASE_IDENTIFIED); |
| 243 |
1
1. initVendor : removed call to com/jsql/model/bean/util/Request::setParameters → NO_COVERAGE |
requestDatabaseIdentified.setParameters(msgHeader); |
| 244 |
1
1. initVendor : removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE |
this.injectionModel.sendToViews(requestDatabaseIdentified); |
| 245 | } | |
| 246 |
1
1. initVendor : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::initVendor → NO_COVERAGE |
return vendorFixed; |
| 247 | } | |
| 248 | | |
| 249 | | |
| 250 | // Getter and setter | |
| 251 | | |
| 252 | public Vendor getAuto() { | |
| 253 |
1
1. getAuto : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getAuto → NO_COVERAGE |
return this.auto; |
| 254 | } | |
| 255 | ||
| 256 | public Vendor getCubrid() { | |
| 257 |
1
1. getCubrid : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getCubrid → NO_COVERAGE |
return this.cubrid; |
| 258 | } | |
| 259 | ||
| 260 | public Vendor getH2() { | |
| 261 |
1
1. getH2 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getH2 → KILLED |
return this.h2; |
| 262 | } | |
| 263 | ||
| 264 | public Vendor getPostgres() { | |
| 265 |
1
1. getPostgres : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getPostgres → KILLED |
return this.postgres; |
| 266 | } | |
| 267 | ||
| 268 | public Vendor getMysql() { | |
| 269 |
1
1. getMysql : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getMysql → KILLED |
return this.mysql; |
| 270 | } | |
| 271 | ||
| 272 | public Vendor getSqlite() { | |
| 273 |
1
1. getSqlite : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getSqlite → KILLED |
return this.sqlite; |
| 274 | } | |
| 275 | ||
| 276 | public Vendor getSqlserver() { | |
| 277 |
1
1. getSqlserver : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getSqlserver → NO_COVERAGE |
return this.sqlserver; |
| 278 | } | |
| 279 | ||
| 280 | public Vendor getNeo4j() { | |
| 281 |
1
1. getNeo4j : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getNeo4j → NO_COVERAGE |
return this.neo4j; |
| 282 | } | |
| 283 | | |
| 284 | public Vendor getVendor() { | |
| 285 |
1
1. getVendor : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getVendor → NO_COVERAGE |
return this.vendor; |
| 286 | } | |
| 287 | ||
| 288 | public void setVendor(Vendor vendor) { | |
| 289 | this.vendor = vendor; | |
| 290 | } | |
| 291 | ||
| 292 | public Vendor getVendorByUser() { | |
| 293 |
1
1. getVendorByUser : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getVendorByUser → NO_COVERAGE |
return this.vendorByUser; |
| 294 | } | |
| 295 | ||
| 296 | public void setVendorByUser(Vendor vendorByUser) { | |
| 297 | this.vendorByUser = vendorByUser; | |
| 298 | } | |
| 299 | ||
| 300 | public List<Vendor> getVendors() { | |
| 301 |
1
1. getVendors : replaced return value with Collections.emptyList for com/jsql/model/injection/vendor/MediatorVendor::getVendors → NO_COVERAGE |
return this.vendors; |
| 302 | } | |
| 303 | ||
| 304 | public List<Vendor> getVendorsForFingerprint() { | |
| 305 |
1
1. getVendorsForFingerprint : replaced return value with Collections.emptyList for com/jsql/model/injection/vendor/MediatorVendor::getVendorsForFingerprint → NO_COVERAGE |
return this.vendorsForFingerprint; |
| 306 | } | |
| 307 | ||
| 308 | public Vendor getDb2() { | |
| 309 |
1
1. getDb2 : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getDb2 → NO_COVERAGE |
return this.db2; |
| 310 | } | |
| 311 | ||
| 312 | public Vendor getHsqldb() { | |
| 313 |
1
1. getHsqldb : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getHsqldb → KILLED |
return this.hsqldb; |
| 314 | } | |
| 315 | ||
| 316 | public Vendor getDerby() { | |
| 317 |
1
1. getDerby : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getDerby → KILLED |
return this.derby; |
| 318 | } | |
| 319 | ||
| 320 | public Vendor getOracle() { | |
| 321 |
1
1. getOracle : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getOracle → KILLED |
return this.oracle; |
| 322 | } | |
| 323 | ||
| 324 | public Vendor getFirebird() { | |
| 325 |
1
1. getFirebird : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getFirebird → NO_COVERAGE |
return this.firebird; |
| 326 | } | |
| 327 | ||
| 328 | public Vendor getMonetdb() { | |
| 329 |
1
1. getMonetdb : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getMonetdb → NO_COVERAGE |
return this.monetdb; |
| 330 | } | |
| 331 | ||
| 332 | public Vendor getMimer() { | |
| 333 |
1
1. getMimer : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getMimer → NO_COVERAGE |
return this.mimer; |
| 334 | } | |
| 335 | ||
| 336 | public Vendor getMckoi() { | |
| 337 |
1
1. getMckoi : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getMckoi → NO_COVERAGE |
return this.mckoi; |
| 338 | } | |
| 339 | ||
| 340 | public Vendor getInformix() { | |
| 341 |
1
1. getInformix : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getInformix → NO_COVERAGE |
return this.informix; |
| 342 | } | |
| 343 | ||
| 344 | public Vendor getSybase() { | |
| 345 |
1
1. getSybase : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getSybase → NO_COVERAGE |
return this.sybase; |
| 346 | } | |
| 347 | ||
| 348 | public Vendor getVertica() { | |
| 349 |
1
1. getVertica : replaced return value with null for com/jsql/model/injection/vendor/MediatorVendor::getVertica → NO_COVERAGE |
return this.vertica; |
| 350 | } | |
| 351 | } | |
Mutations | ||
| 114 |
1.1 |
|
| 122 |
1.1 |
|
| 123 |
1.1 |
|
| 129 |
1.1 |
|
| 147 |
1.1 |
|
| 152 |
1.1 2.2 |
|
| 157 |
1.1 |
|
| 162 |
1.1 |
|
| 163 |
1.1 |
|
| 173 |
1.1 2.2 |
|
| 174 |
1.1 |
|
| 178 |
1.1 |
|
| 183 |
1.1 |
|
| 184 |
1.1 |
|
| 193 |
1.1 |
|
| 207 |
1.1 |
|
| 211 |
1.1 |
|
| 212 |
1.1 |
|
| 214 |
1.1 |
|
| 219 |
1.1 |
|
| 224 |
1.1 |
|
| 225 |
1.1 |
|
| 231 |
1.1 |
|
| 232 |
1.1 |
|
| 242 |
1.1 |
|
| 243 |
1.1 |
|
| 244 |
1.1 |
|
| 246 |
1.1 |
|
| 253 |
1.1 |
|
| 257 |
1.1 |
|
| 261 |
1.1 |
|
| 265 |
1.1 |
|
| 269 |
1.1 |
|
| 273 |
1.1 |
|
| 277 |
1.1 |
|
| 281 |
1.1 |
|
| 285 |
1.1 |
|
| 293 |
1.1 |
|
| 301 |
1.1 |
|
| 305 |
1.1 |
|
| 309 |
1.1 |
|
| 313 |
1.1 |
|
| 317 |
1.1 |
|
| 321 |
1.1 |
|
| 325 |
1.1 |
|
| 329 |
1.1 |
|
| 333 |
1.1 |
|
| 337 |
1.1 |
|
| 341 |
1.1 |
|
| 345 |
1.1 |
|
| 349 |
1.1 |