diff options
author | Feideus <erwan.ulrich@gmail.com> | 2018-06-19 15:13:52 +0200 |
---|---|---|
committer | Feideus <erwan.ulrich@gmail.com> | 2018-06-19 15:13:52 +0200 |
commit | 1d5a1e6f42792676d0b71ad624559155e40de4d2 (patch) | |
tree | 1e8a822c37381ad7aa032cc782af6fe405088d5d /src/main | |
parent | faefc5c07d16776f4dd87106f5aa9c2ebc9e3911 (diff) | |
download | schemafuzz-1d5a1e6f42792676d0b71ad624559155e40de4d2.tar.gz schemafuzz-1d5a1e6f42792676d0b71ad624559155e40de4d2.tar.bz2 schemafuzz-1d5a1e6f42792676d0b71ad624559155e40de4d2.zip |
fixed buggs.
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/schemaspy/DBFuzzer.java | 13 | ||||
-rw-r--r-- | src/main/java/org/schemaspy/model/FkGenericTreeNode.java | 2 | ||||
-rw-r--r-- | src/main/java/org/schemaspy/model/GenericTree.java | 3 | ||||
-rw-r--r-- | src/main/java/org/schemaspy/model/GenericTreeNode.java | 43 | ||||
-rw-r--r-- | src/main/java/org/schemaspy/model/Row.java | 16 |
5 files changed, 44 insertions, 33 deletions
diff --git a/src/main/java/org/schemaspy/DBFuzzer.java b/src/main/java/org/schemaspy/DBFuzzer.java index f23d238..a7b0df6 100644 --- a/src/main/java/org/schemaspy/DBFuzzer.java +++ b/src/main/java/org/schemaspy/DBFuzzer.java @@ -113,6 +113,9 @@ public class DBFuzzer currentMutation = chooseNextMutation(); } + if(currentMutation.getInitial_state_row().compare(currentMutation.getPost_change_row())) + System.out.println("ICI"); + System.out.println("chosen mutation "+currentMutation); System.out.println("parent mutation "+currentMutation.getParent()); @@ -138,6 +141,7 @@ public class DBFuzzer { LOGGER.info("GenericTreeNode was sucessfull"); mutationTree.addToTree(currentMutation); + currentMutation.discoverMutationPossibilities(analyzer.getSqlService()); } else LOGGER.info("QueryError. This update affected 0 rows"); @@ -319,20 +323,22 @@ public class DBFuzzer if (mutationTree.getRoot() != null) { - if (markingDiff > 0) // + if (markingDiff > 0 ) // { + System.out.println("creation1"); int randNumber = rand.nextInt(previousMutation.getPotential_changes().size()); GenericTreeNode nextMut = new GenericTreeNode(previousMutation.getPost_change_row(), nextId(), mutationTree.getRoot(), previousMutation,false,analyzer.getSqlService()); nextMut.setChosenChange(previousMutation.getPotential_changes().get(randNumber)); nextMut.initPostChangeRow(); return nextMut; } - else if (markingDiff <= 0) + else { Random changeOrDepthen = new Random(); // 1 is same row if(changeOrDepthen.nextInt(2) == 1) { + System.out.println("creation2"); SingleChange tmp = mutationTree.getRoot().singleChangeBasedOnWeight(); GenericTreeNode nextMut = new GenericTreeNode(tmp.getAttachedToMutation().getPost_change_row(), nextId(), mutationTree.getRoot(), tmp.getAttachedToMutation(),false,analyzer.getSqlService()); nextMut.setChosenChange(tmp); @@ -341,6 +347,7 @@ public class DBFuzzer } else { + System.out.println("creation3"); Row nextRow; GenericTreeNode nextMut; do @@ -355,8 +362,6 @@ public class DBFuzzer return nextMut; } } - else - System.out.println("I mean What Da Heck"); } throw new Error("No mutation returned. That should not happen"); } diff --git a/src/main/java/org/schemaspy/model/FkGenericTreeNode.java b/src/main/java/org/schemaspy/model/FkGenericTreeNode.java index cdad44a..d29033e 100644 --- a/src/main/java/org/schemaspy/model/FkGenericTreeNode.java +++ b/src/main/java/org/schemaspy/model/FkGenericTreeNode.java @@ -24,7 +24,7 @@ public class FkGenericTreeNode { public void initPostChangeRow() { - this.post_change_row = this.initial_state_row.clone(); + this.post_change_row = this.initial_state_row.myClone(); this.post_change_row.setValueOfColumn(fkChange.getParentTableColumn().getName(), fkChange.getNewValue()); } diff --git a/src/main/java/org/schemaspy/model/GenericTree.java b/src/main/java/org/schemaspy/model/GenericTree.java index e89feb0..c6f488d 100644 --- a/src/main/java/org/schemaspy/model/GenericTree.java +++ b/src/main/java/org/schemaspy/model/GenericTree.java @@ -76,7 +76,8 @@ public class GenericTree { return find(getLastId()); } - public void addToTree(GenericTreeNode currentMutation) { + public void addToTree(GenericTreeNode currentMutation) + { currentMutation.getParent().addChild(currentMutation); } diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java b/src/main/java/org/schemaspy/model/GenericTreeNode.java index 14d2cec..ec25a57 100644 --- a/src/main/java/org/schemaspy/model/GenericTreeNode.java +++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java @@ -37,7 +37,7 @@ public class GenericTreeNode { this.id = id; this.isFirstApperance = true; this.initial_state_row = initial_state_row; - this.potential_changes = discoverMutationPossibilities(this, sqlService); + this.potential_changes = discoverMutationPossibilities(sqlService); } @@ -50,7 +50,7 @@ public class GenericTreeNode { initDepth(); this.isFirstApperance = isFirstApperance; this.initial_state_row = initial_state_row; - this.potential_changes = discoverMutationPossibilities(rootMutation, sqlService); + this.potential_changes = discoverMutationPossibilities(sqlService); } @@ -186,7 +186,11 @@ public class GenericTreeNode { public void setChosenChange(SingleChange sc) { this.chosenChange = sc; + this.chosenChange.getAttachedToMutation().getPotential_changes().remove(chosenChange); + this.getPotential_changes().add(sc); this.chosenChange.setAttachedToMutation(this); + + assert(sc.getAttachedToMutation().equals(this.getId())); } /** @@ -199,12 +203,7 @@ public class GenericTreeNode { this.parent = parent; } - public ArrayList<SingleChange> discoverMutationPossibilities(GenericTreeNode rootMutation, SqlService sqlService) { - - if (initial_state_row == null) { - System.out.println("NO INITIAL STATE"); - return null; - } + public ArrayList<SingleChange> discoverMutationPossibilities( SqlService sqlService) { ArrayList<SingleChange> possibilities = new ArrayList<SingleChange>(); @@ -212,7 +211,7 @@ public class GenericTreeNode { for (Map.Entry<String, Object> content : initial_state_row.getContent().entrySet()) { try { TableColumn parentColumn = initial_state_row.getParentTable().findTableColumn(content.getKey()); - possibilities.addAll(discoverFieldPossibilities(parentColumn, content.getValue(), rootMutation)); + possibilities.addAll(discoverFieldPossibilities(parentColumn, content.getValue())); } catch (Exception e) { e.printStackTrace(); } @@ -224,7 +223,7 @@ public class GenericTreeNode { return possibilities; } - public ArrayList<SingleChange> discoverFieldPossibilities(TableColumn tableColumn, Object column_value, GenericTreeNode rootMutation) throws Exception //listing of the mutation possibilities on the specified row + public ArrayList<SingleChange> discoverFieldPossibilities(TableColumn tableColumn, Object column_value) throws Exception //listing of the mutation possibilities on the specified row { ArrayList<SingleChange> oneChange = new ArrayList<SingleChange>(); @@ -331,7 +330,6 @@ public class GenericTreeNode { default: System.out.println("Unsupported dataType = " + typeName); } - return oneChange; } @@ -358,8 +356,10 @@ public class GenericTreeNode { } public void initPostChangeRow() { - this.post_change_row = this.initial_state_row.clone(); + this.post_change_row = this.initial_state_row.myClone(); this.post_change_row.setValueOfColumn(chosenChange.getParentTableColumn().getName(), chosenChange.getNewValue()); + if(!post_change_row.getValueOfColumn(chosenChange.getParentTableColumn().getName()).equals(chosenChange.getNewValue())) + System.out.println("problem"); } public int undo(SqlService sqlService, Database db) { @@ -374,11 +374,6 @@ public class GenericTreeNode { public String updateQueryBuilder(boolean undo, Database db, SqlService sqlService) //undo variable tells if the function should build Inject string or Undo string { - if(db.getTablesMap().get(chosenChange.getParentTableColumn().getTable().getName()) == null) - { - System.out.println("unmatching tableColumn"); - } - String theQuery; if (undo) { @@ -561,6 +556,7 @@ public class GenericTreeNode { tmpThis = tmpThis.getParent(); tmpTarget = tmpTarget.getParent(); } + thisPath.add(tmpThis); // tmpThis and tmpTarget are equals, so add the commun ancestor Collections.reverse(targetPath); finalPath.add(thisPath); //way up @@ -705,8 +701,7 @@ public class GenericTreeNode { QueryResponse response = fetchingDataFromDatabase(semiQuery, chosenChange.getParentTableColumn().getTable(), sqlService); - - setInitial_state_row(response.getRows().get(0)); // Crashes sometimes due to 0 row found. to be fixed. + setInitial_state_row(response.getRows().get(0),sqlService); // Crashes sometimes due to 0 row found. to be fixed. semiQuery = "SELECT * FROM " + chosenChange.getParentTableColumn().getTable().getName(); @@ -732,8 +727,10 @@ public class GenericTreeNode { } - public void setInitial_state_row(Row initial_state_row) { + public void setInitial_state_row(Row initial_state_row,SqlService sqlService) { this.initial_state_row = initial_state_row; + this.potential_changes = null; + this.potential_changes = discoverMutationPossibilities(sqlService); initPostChangeRow(); } @@ -758,13 +755,14 @@ public class GenericTreeNode { else semiQuery = semiQuery + " WHERE " + sg.getParentTableColumn().getName() + "=" + sg.getNewValue(); - System.out.println("removing = " + semiQuery); - QueryResponse response = fetchingDataFromDatabase(semiQuery, sg.getParentTableColumn().getTable(), sqlService); SingleChange tmp = sg; if (response.getNbRows() > 0) + { + System.out.println("removing "+sg); toBeRemoved.add(tmp); + } } } possibilities.removeAll(toBeRemoved); @@ -810,4 +808,5 @@ public class GenericTreeNode { return true; return false; } + } diff --git a/src/main/java/org/schemaspy/model/Row.java b/src/main/java/org/schemaspy/model/Row.java index 991e4f7..b92c434 100644 --- a/src/main/java/org/schemaspy/model/Row.java +++ b/src/main/java/org/schemaspy/model/Row.java @@ -77,7 +77,9 @@ public class Row public void setValueOfColumn(String columnName, Object newVal) { - this.getContent().replace(columnName, newVal); + this.getContent().put(columnName,newVal); + if(!this.getContent().get(columnName).equals(newVal)) + System.out.println("problem"); } public void setNbKeys(Integer nbKeys) { @@ -114,11 +116,15 @@ public class Row return true; } - public Row clone() + public Row myClone() { - HashMap<String,Object> clonedMap = (HashMap<String,Object>) this.content.clone(); - Row res = new Row(this.parentTable,clonedMap,this.content.keySet().size()); + HashMap<String,Object> clonedRow = new HashMap<String,Object>(); - return res; + for(Map.Entry<String,Object> entry: content.entrySet()) + { + clonedRow.put(entry.getKey(),entry.getValue()); + } + + return new Row(parentTable,clonedRow,clonedRow.size()); } } |