diff options
author | Feideus <erwan.ulrich@gmail.com> | 2018-06-11 17:53:18 +0200 |
---|---|---|
committer | Feideus <erwan.ulrich@gmail.com> | 2018-06-11 17:53:18 +0200 |
commit | fcccf4d6459024123f2f406086c2d93532b642a2 (patch) | |
tree | e8535c9e0cd50e3a7156a10335e2d6e776e6e372 /src | |
parent | 19d8c4d45e03e93ab1a6a3942a630209cd6d450b (diff) | |
download | schemafuzz-fcccf4d6459024123f2f406086c2d93532b642a2.tar.gz schemafuzz-fcccf4d6459024123f2f406086c2d93532b642a2.tar.bz2 schemafuzz-fcccf4d6459024123f2f406086c2d93532b642a2.zip |
Loop is working. still crashes on some mutations.
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/org/schemaspy/model/GenericTreeNode.java | 64 | ||||
-rw-r--r-- | src/main/java/org/schemaspy/model/SingleChange.java | 5 |
2 files changed, 69 insertions, 0 deletions
diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java b/src/main/java/org/schemaspy/model/GenericTreeNode.java index 23d29f7..2ba8723 100644 --- a/src/main/java/org/schemaspy/model/GenericTreeNode.java +++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java @@ -1,6 +1,8 @@ package org.schemaspy.model; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.sql.*; import java.text.SimpleDateFormat; @@ -749,7 +751,49 @@ public class GenericTreeNode { e.printStackTrace(); } + + initial_state_row = response.getRows().get(0); // there should be only one row. + + + + semiQuery = "SELECT * FROM " + chosenChange.getParentTableColumn().getTable().getName() ; + if (chosenChange.getParentTableColumn().getTypeName().equals("varchar") + || chosenChange.getParentTableColumn().getTypeName().equals("bool") + || chosenChange.getParentTableColumn().getTypeName().equals("timestamp") + || chosenChange.getParentTableColumn().getTypeName().equals("date") + || chosenChange.getParentTableColumn().getTypeName().equals("_text") + || chosenChange.getParentTableColumn().getTypeName().equals("text") + || chosenChange.getParentTableColumn().getTypeName().equals("fulltext") + || chosenChange.getParentTableColumn().getTypeName().equals("email")) + semiQuery = semiQuery + " WHERE " + chosenChange.getParentTableColumn().getName() + "= '"+chosenChange.getNewValue() + " '"; + else + semiQuery = semiQuery + " WHERE " + chosenChange.getParentTableColumn().getName() + "="+chosenChange.getNewValue(); + + try { + Statement stmt = sqlService.getConnection().createStatement(); + ResultSet res = stmt.executeQuery(semiQuery); + qrp = new QueryResponseParser(); + ArrayList<Row> rows = new ArrayList<Row>(qrp.parse(res, chosenChange.getParentTableColumn().getTable()).getRows()); + response = new QueryResponse(rows); + } catch (Exception e) { + e.printStackTrace(); + } + + if(!response.getRows().isEmpty()) + { + try + { + Process fuID = new ProcessBuilder("/bin/bash", "firstUnusedId.sh").start(); + String newValueAsString = getScriptResponse(fuID); + int newValue = Integer.parseInt(newValueAsString.replaceAll("\\s+","")); + chosenChange.setNewValue(newValue); + } + catch(Exception e) + { + e.printStackTrace(); + } + } } public boolean checkIfHasParentFk(Database db) @@ -807,4 +851,24 @@ public class GenericTreeNode { } return newPossibilities; } + + public String getScriptResponse(Process p) + { + String response = ""; + try + { + + BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); + String line; + while ((line = r.readLine())!=null) { + response = response+line; + } + r.close(); + } + catch(Exception e) + { + System.out.println("error while reading process output"+e); + } + return response; + } } diff --git a/src/main/java/org/schemaspy/model/SingleChange.java b/src/main/java/org/schemaspy/model/SingleChange.java index 897b517..0463797 100644 --- a/src/main/java/org/schemaspy/model/SingleChange.java +++ b/src/main/java/org/schemaspy/model/SingleChange.java @@ -64,6 +64,10 @@ public class SingleChange return parentTableColumn; } + public void setNewValue(Object newValue) { + this.newValue = newValue; + } + public boolean compare(SingleChange chosenChange) { if(chosenChange == null || this == null ) @@ -78,6 +82,7 @@ public class SingleChange if(!chosenChange.getParentTableColumn().getName().equals(this.getParentTableColumn().getName())) return false; + return true; } |