MediatorEngine.java

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

Mutations

118

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

126

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

127

1.1
Location : transformSqlite
Killed by : none
negated conditional → NO_COVERAGE

133

1.1
Location : transformSqlite
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/MediatorEngine$1::transformSqlite → NO_COVERAGE

158

1.1
Location : isSqlite
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : isSqlite
Killed by : none
replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::isSqlite → NO_COVERAGE

163

1.1
Location : fingerprintEngine
Killed by : none
negated conditional → NO_COVERAGE

168

1.1
Location : lambda$fingerprintEngine$0
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$0 → NO_COVERAGE

169

1.1
Location : lambda$fingerprintEngine$1
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$1 → NO_COVERAGE

179

1.1
Location : lambda$fingerprintEngine$2
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : lambda$fingerprintEngine$2
Killed by : none
replaced boolean return with true for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$2 → NO_COVERAGE

180

1.1
Location : lambda$fingerprintEngine$3
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$3 → NO_COVERAGE

184

1.1
Location : fingerprintEngine
Killed by : none
negated conditional → NO_COVERAGE

189

1.1
Location : lambda$fingerprintEngine$4
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$4 → NO_COVERAGE

194

1.1
Location : fingerprintEngine
Killed by : none
negated conditional → NO_COVERAGE

199

1.1
Location : lambda$fingerprintEngine$5
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$5 → NO_COVERAGE

200

1.1
Location : lambda$fingerprintEngine$6
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::lambda$fingerprintEngine$6 → NO_COVERAGE

206

1.1
Location : fingerprintEngine
Killed by : none
removed call to com/jsql/model/InjectionModel::appendAnalysisReport → NO_COVERAGE

219

1.1
Location : fingerprintEngine
Killed by : none
removed call to com/jsql/model/InjectionModel::sendToViews → NO_COVERAGE

220

1.1
Location : fingerprintEngine
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::fingerprintEngine → NO_COVERAGE

227

1.1
Location : getEngine
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngine → NO_COVERAGE

235

1.1
Location : getEngineByUser
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getEngineByUser → NO_COVERAGE

243

1.1
Location : getEngines
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEngines → NO_COVERAGE

247

1.1
Location : getEnginesForFingerprint
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/MediatorEngine::getEnginesForFingerprint → NO_COVERAGE

254

1.1
Location : getAuto
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAuto → NO_COVERAGE

258

1.1
Location : getAccess
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAccess → NO_COVERAGE

262

1.1
Location : getAltibase
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getAltibase → NO_COVERAGE

266

1.1
Location : getClickhouse
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getClickhouse → NO_COVERAGE

270

1.1
Location : getCubrid
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getCubrid → NO_COVERAGE

274

1.1
Location : getDb2
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDb2 → NO_COVERAGE

278

1.1
Location : getDerby
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getDerby → KILLED

282

1.1
Location : getExasol
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getExasol → NO_COVERAGE

286

1.1
Location : getFirebird
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getFirebird → NO_COVERAGE

290

1.1
Location : getH2
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getH2 → KILLED

294

1.1
Location : getHana
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHana → NO_COVERAGE

298

1.1
Location : getHsqldb
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getHsqldb → KILLED

302

1.1
Location : getInformix
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getInformix → NO_COVERAGE

306

1.1
Location : getMckoi
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMckoi → NO_COVERAGE

310

1.1
Location : getMimer
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMimer → NO_COVERAGE

314

1.1
Location : getMonetdb
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMonetdb → NO_COVERAGE

318

1.1
Location : getMysql
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getMysql → KILLED

322

1.1
Location : getNeo4j
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getNeo4j → NO_COVERAGE

326

1.1
Location : getOracle
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getOracle → KILLED

330

1.1
Location : getPostgres
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPostgres → KILLED

334

1.1
Location : getPresto
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getPresto → NO_COVERAGE

338

1.1
Location : getSqlite
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlite → KILLED

342

1.1
Location : getSqlserver
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSqlserver → NO_COVERAGE

346

1.1
Location : getSybase
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getSybase → NO_COVERAGE

350

1.1
Location : getVertica
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVertica → NO_COVERAGE

354

1.1
Location : getVirtuoso
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/MediatorEngine::getVirtuoso → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.22.1