diff options
author | Feideus <erwan.ulrich@gmail.com> | 2018-05-29 16:46:29 +0200 |
---|---|---|
committer | Feideus <erwan.ulrich@gmail.com> | 2018-05-29 16:46:29 +0200 |
commit | 72a0c0bb75bd0af284c0f1bdab311b21cb4b5a3b (patch) | |
tree | aa5ce3745239519dc6b7ada16c21177914dd7914 /src/main | |
parent | ca68b41f0172dc17ac39db9e913cd9566a0b9536 (diff) | |
download | schemafuzz-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')
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; } |