aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFeideus <erwan.ulrich@gmail.com>2018-06-11 17:53:18 +0200
committerFeideus <erwan.ulrich@gmail.com>2018-06-11 17:53:18 +0200
commitfcccf4d6459024123f2f406086c2d93532b642a2 (patch)
treee8535c9e0cd50e3a7156a10335e2d6e776e6e372 /src
parent19d8c4d45e03e93ab1a6a3942a630209cd6d450b (diff)
downloadschemafuzz-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.java64
-rw-r--r--src/main/java/org/schemaspy/model/SingleChange.java5
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;
}