summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorFeideus <erwan.ulrich@gmail.com>2018-05-29 16:46:29 +0200
committerFeideus <erwan.ulrich@gmail.com>2018-05-29 16:46:29 +0200
commit72a0c0bb75bd0af284c0f1bdab311b21cb4b5a3b (patch)
treeaa5ce3745239519dc6b7ada16c21177914dd7914 /src/main
parentca68b41f0172dc17ac39db9e913cd9566a0b9536 (diff)
downloadschemafuzz-72a0c0bb75bd0af284c0f1bdab311b21cb4b5a3b.tar.gz
schemafuzz-72a0c0bb75bd0af284c0f1bdab311b21cb4b5a3b.tar.bz2
schemafuzz-72a0c0bb75bd0af284c0f1bdab311b21cb4b5a3b.zip
changed data storage type to Object to handle timestamps. Tests pass . still getting synthax error on sql timestamp statements. change timestamp default format at the very begginning ?
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/schemaspy/model/GenericTreeNode.java70
-rw-r--r--src/main/java/org/schemaspy/model/QueryResponseParser.java4
-rw-r--r--src/main/java/org/schemaspy/model/Row.java20
-rw-r--r--src/main/java/org/schemaspy/model/SingleChange.java16
4 files changed, 58 insertions, 52 deletions
diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java b/src/main/java/org/schemaspy/model/GenericTreeNode.java
index f974463..3ddd9fd 100644
--- a/src/main/java/org/schemaspy/model/GenericTreeNode.java
+++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java
@@ -216,7 +216,7 @@ public class GenericTreeNode {
ArrayList<SingleChange> possibilities = new ArrayList<SingleChange>();
//TRYING TO DISCOVER RAW POSSIBILITIES
- for (Map.Entry<String, String> content : initial_state_row.getContent().entrySet())
+ for (Map.Entry<String, Object> content : initial_state_row.getContent().entrySet())
{
try
{
@@ -240,7 +240,7 @@ public class GenericTreeNode {
return possibilities;
}
- public ArrayList<SingleChange> discoverFieldPossibilities(TableColumn tableColumn, String column_value,GenericTreeNode rootMutation) throws Exception //listing of the mutation possibilities on the specified row
+ public ArrayList<SingleChange> discoverFieldPossibilities(TableColumn tableColumn, Object column_value,GenericTreeNode rootMutation) throws Exception //listing of the mutation possibilities on the specified row
{
ArrayList<SingleChange> oneChange = new ArrayList<SingleChange>();
@@ -252,7 +252,7 @@ public class GenericTreeNode {
case "smallint":
case "integer":
case "int2":
- int tmp = Integer.parseInt(rootMutation.getInitial_state_row().getContent().get(tableColumn.getName()));
+ int tmp = Integer.parseInt(rootMutation.getInitial_state_row().getContent().get(tableColumn.getName()).toString());
oneChange.add(new SingleChange(tableColumn, this, column_value, Integer.toString(tmp++)));
oneChange.add(new SingleChange(tableColumn, this, column_value, Integer.toString(32767)));
oneChange.add(new SingleChange(tableColumn, this, column_value, Integer.toString(1)));
@@ -262,15 +262,15 @@ public class GenericTreeNode {
case "character varying":
case "varchar":
if (rootMutation == null) {
- char tmp2 = column_value.charAt(0);
- oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(tmp2++) + column_value.substring(1))));
- oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(tmp2--) + column_value.substring(1))));
+ char tmp2 = column_value.toString().charAt(0);
+ oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(tmp2++) + column_value.toString().substring(1))));
+ oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(tmp2--) + column_value.toString().substring(1))));
} else {
- char tmp2 = (char) rootMutation.getInitial_state_row().getContent().get(tableColumn.getName()).charAt(0);
+ char tmp2 = (char) rootMutation.getInitial_state_row().getContent().get(tableColumn.getName()).toString().charAt(0);
char nextChar = (char) (tmp2 + 1);
char prevChar = (char) (tmp2 - 1);
- oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(nextChar) + column_value.substring(1))));
- oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(prevChar) + column_value.substring(1))));
+ oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(nextChar) + column_value.toString().substring(1))));
+ oneChange.add(new SingleChange(tableColumn, this, column_value, (Character.toString(prevChar) + column_value.toString().substring(1))));
}
break;
@@ -281,7 +281,7 @@ public class GenericTreeNode {
oneChange.add(new SingleChange(tableColumn, this, column_value, "f"));
break;
- case "timestamp":
+ /*case "timestamp":
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Calendar cal = Calendar.getInstance();
@@ -300,7 +300,7 @@ public class GenericTreeNode {
break;
- /*case 6: typeName = "June";
+ case 6: typeName = "June";
break;
case 7: typeName = "July";
break;
@@ -369,59 +369,63 @@ public class GenericTreeNode {
if (undo)
{
- if (chosenChange.getParentTableColumn().getTypeName().equals("varchar") || chosenChange.getParentTableColumn().getTypeName().equals("bool"))
- theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "='" + chosenChange.getOldValue() + "', ";
+ if (chosenChange.getParentTableColumn().getTypeName().equals("varchar")
+ || chosenChange.getParentTableColumn().getTypeName().equals("bool")
+ || chosenChange.getParentTableColumn().getTypeName().equals("timestamp"))
+ theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "='" + chosenChange.getOldValue().toString() + "', ";
else
- theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + " = " + chosenChange.getOldValue() + ", ";
+ theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + " = " + chosenChange.getOldValue().toString() + ", ";
}
else
{
- if (chosenChange.getParentTableColumn().getTypeName().equals("varchar") || chosenChange.getParentTableColumn().getTypeName().equals("bool"))
- theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "='" + chosenChange.getNewValue() + "', ";
+ if (chosenChange.getParentTableColumn().getTypeName().equals("varchar")
+ || chosenChange.getParentTableColumn().getTypeName().equals("bool")
+ || chosenChange.getParentTableColumn().getTypeName().equals("timestamp"))
+ theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "='" + chosenChange.getNewValue().toString() + "', ";
else
- theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "=" + chosenChange.getNewValue() + ", ";
+ theQuery = "UPDATE " + initial_state_row.getParentTable().getName() + " SET " + chosenChange.getParentTableColumn().getName() + "=" + chosenChange.getNewValue().toString() + ", ";
}
- for (Map.Entry<String, String> entry : initial_state_row.getContent().entrySet())
+ for (Map.Entry<String, Object> entry : initial_state_row.getContent().entrySet())
{
if (!entry.getKey().equals(chosenChange.getParentTableColumn().getName()))
{
- if (chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("varchar") || chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("bool"))
- theQuery = theQuery + (entry.getKey() + "='" + entry.getValue() + "', ");
+ if (chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("varchar") ||
+ chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("bool") ||
+ chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("timestamp"))
+ theQuery = theQuery + (entry.getKey() + "='" + entry.getValue().toString() + "', ");
else
- theQuery = theQuery + (entry.getKey() + "=" + entry.getValue() + ", ");
+ theQuery = theQuery + (entry.getKey() + "=" + entry.getValue().toString() + ", ");
}
}
theQuery = theQuery.substring(0, theQuery.lastIndexOf(","));
theQuery = theQuery + " WHERE ";
- // USING ALL VALUES TO TRIANGULATE THE ROW TO UPDATE (no primary key)
- if (initial_state_row.getParentTable().getPrimaryColumns().isEmpty())
- {
- for (Map.Entry<String, String> entry : initial_state_row.getContent().entrySet())
+
+ for (Map.Entry<String, Object> entry : initial_state_row.getContent().entrySet())
{
if (!entry.getKey().equals(chosenChange.getParentTableColumn().getName()))
{
- if (chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("varchar") || chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("bool"))
- theQuery = theQuery + (entry.getKey() + "='" + entry.getValue() + "' AND ");
+ if (chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("varchar") ||
+ chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("bool") ||
+ chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("timestamp"))
+ theQuery = theQuery + (entry.getKey() + "='" + entry.getValue().toString() + "' AND ");
else
- theQuery = theQuery + (entry.getKey() + "=" + entry.getValue() + " AND ");
+ theQuery = theQuery + (entry.getKey() + "=" + entry.getValue().toString() + " AND ");
}
else
{
if (undo)
- theQuery = theQuery + (entry.getKey() + "='" + chosenChange.getNewValue() + "' AND ");
+ theQuery = theQuery + (entry.getKey() + "='" + chosenChange.getNewValue().toString() + "' AND ");
else
- theQuery = theQuery + (entry.getKey() + "='" + chosenChange.getOldValue() + "' AND ");
+ theQuery = theQuery + (entry.getKey() + "='" + chosenChange.getOldValue().toString() + "' AND ");
}
}
theQuery = theQuery.substring(0, theQuery.lastIndexOf(" AND "));
- }
- else
- theQuery = theQuery + (" " + initial_state_row.getParentTable().getPrimaryColumns().get(0).getName() + "=" + initial_state_row.getValueOfColumn(initial_state_row.getParentTable().getPrimaryColumns().get(0).getName()));
System.out.println("build query ! "+theQuery); //uncomment to see built request;
+
return theQuery;
}
diff --git a/src/main/java/org/schemaspy/model/QueryResponseParser.java b/src/main/java/org/schemaspy/model/QueryResponseParser.java
index ddbe655..e24b825 100644
--- a/src/main/java/org/schemaspy/model/QueryResponseParser.java
+++ b/src/main/java/org/schemaspy/model/QueryResponseParser.java
@@ -56,10 +56,12 @@ public class QueryResponseParser
while(resultOfQuery.next())
{
- HashMap<String,String> mapOfTheRow = new HashMap<String,String>();
+ HashMap<String,Object> mapOfTheRow = new HashMap();
for(i = 1; i <= resultMeta.getColumnCount();i++)
{
+ if(resultMeta.getColumnTypeName(i).equals("timestamp"))
+ mapOfTheRow.put(resultMeta.getColumnName(i),resultOfQuery.getTimestamp(i));
mapOfTheRow.put(resultMeta.getColumnName(i), resultOfQuery.getString(i));
}
diff --git a/src/main/java/org/schemaspy/model/Row.java b/src/main/java/org/schemaspy/model/Row.java
index 59890e3..53f7d80 100644
--- a/src/main/java/org/schemaspy/model/Row.java
+++ b/src/main/java/org/schemaspy/model/Row.java
@@ -33,17 +33,17 @@ import java.util.*;
public class Row
{
private Table parentTable;
- private HashMap<String,String> content;
+ private HashMap<String,Object> content;
private Integer nbKeys;
public Row() {
- this.content = new HashMap<String,String>();
+ this.content = new HashMap<String,Object>();
}
- public Row(Table parentTable, HashMap<String,String> content, Integer nbKeys)
+ public Row(Table parentTable, HashMap<String,Object> content, Integer nbKeys)
{
this.parentTable = parentTable;
- this.content = new HashMap<String,String>();
+ this.content = new HashMap<String,Object>();
this.content = content;
this.nbKeys = nbKeys;
}
@@ -53,11 +53,11 @@ public class Row
return this.parentTable;
}
- public HashMap<String,String> getContent() {
+ public HashMap<String,Object> getContent() {
return content;
}
- public void setContent(HashMap<String,String> content) {
+ public void setContent(HashMap<String,Object> content) {
this.content = content;
}
@@ -66,12 +66,12 @@ public class Row
return nbKeys;
}
- public String getValueOfColumn(String columnName)
+ public Object getValueOfColumn(String columnName)
{
return content.get(columnName);
}
- public void setValueOfColumn(String columnName, String newVal)
+ public void setValueOfColumn(String columnName, Object newVal)
{
this.getContent().replace(columnName, newVal);
}
@@ -92,7 +92,7 @@ public class Row
if(content.size() != initial_state_row.getContent().size())
return false;
- for(Map.Entry<String,String> entry : content.entrySet())
+ for(Map.Entry<String,Object> entry : content.entrySet())
{
if(!initial_state_row.getContent().containsKey(entry.getKey()))
return false;
@@ -105,7 +105,7 @@ public class Row
public Row clone()
{
- HashMap<String,String> clonedMap = (HashMap<String,String>) this.content.clone();
+ HashMap<String,Object> clonedMap = (HashMap<String,Object>) this.content.clone();
Row res = new Row(this.parentTable,clonedMap,this.content.keySet().size());
return res;
diff --git a/src/main/java/org/schemaspy/model/SingleChange.java b/src/main/java/org/schemaspy/model/SingleChange.java
index 6c4cd23..b0be256 100644
--- a/src/main/java/org/schemaspy/model/SingleChange.java
+++ b/src/main/java/org/schemaspy/model/SingleChange.java
@@ -6,11 +6,11 @@ public class SingleChange
{
private GenericTreeNode attachedToMutation;
private TableColumn parentTableColumn;
- private String oldValue;
- private String newValue;
+ private Object oldValue;
+ private Object newValue;
- public SingleChange(TableColumn parentColumn ,GenericTreeNode attachedToMutation, String oldValue, String newValue)
+ public SingleChange(TableColumn parentColumn ,GenericTreeNode attachedToMutation, Object oldValue, Object newValue)
{
this.attachedToMutation = attachedToMutation;
this.parentTableColumn = parentColumn;
@@ -23,15 +23,15 @@ public class SingleChange
switch (parentTableColumn.getTypeName())
{
case "serial":
- if(Integer.parseInt(newValue) < Math.pow(2,parentTableColumn.getLength()))
+ if(Integer.parseInt(newValue.toString()) < Math.pow(2,parentTableColumn.getLength()))
return true;
return false;
case "numeric":
- if(Integer.parseInt(newValue) < Math.pow(2,parentTableColumn.getLength()))
+ if(Integer.parseInt(newValue.toString()) < Math.pow(2,parentTableColumn.getLength()))
return true;
return false;
case "int2":
- if(Integer.parseInt(newValue) <= 32767)
+ if(Integer.parseInt(newValue.toString()) <= 32767)
return true;
return false;
default:
@@ -45,12 +45,12 @@ public class SingleChange
return "\n[SG - attachedToMutation : "+this.getAttachedToMutation().getId()+"| OV :"+oldValue+" | NV :"+newValue+" ]\n";
}
- public String getOldValue()
+ public Object getOldValue()
{
return oldValue;
}
- public String getNewValue()
+ public Object getNewValue()
{
return newValue;
}