summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorFeideus <erwan.ulrich@gmail.com>2018-06-19 15:13:52 +0200
committerFeideus <erwan.ulrich@gmail.com>2018-06-19 15:13:52 +0200
commit1d5a1e6f42792676d0b71ad624559155e40de4d2 (patch)
tree1e8a822c37381ad7aa032cc782af6fe405088d5d /src/main
parentfaefc5c07d16776f4dd87106f5aa9c2ebc9e3911 (diff)
downloadschemafuzz-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.java13
-rw-r--r--src/main/java/org/schemaspy/model/FkGenericTreeNode.java2
-rw-r--r--src/main/java/org/schemaspy/model/GenericTree.java3
-rw-r--r--src/main/java/org/schemaspy/model/GenericTreeNode.java43
-rw-r--r--src/main/java/org/schemaspy/model/Row.java16
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());
}
}