gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-schemafuzz] branch master updated: Still Working on


From: gnunet
Subject: [GNUnet-SVN] [taler-schemafuzz] branch master updated: Still Working on Fk. not very far now I hope
Date: Wed, 06 Jun 2018 18:37:18 +0200

This is an automated email from the git hooks/post-receive script.

erwan-ulrich pushed a commit to branch master
in repository schemafuzz.

The following commit(s) were added to refs/heads/master by this push:
     new 9e91b4a  Still Working on Fk. not very far now I hope
9e91b4a is described below

commit 9e91b4a113ef79e4e06e679f75ea7ed871ab2577
Author: Feideus <address@hidden>
AuthorDate: Wed Jun 6 18:37:12 2018 +0200

    Still Working on Fk. not very far now I hope
---
 .../org/schemaspy/model/FkGenericTreeNode.java     |  90 +++++++++++
 .../java/org/schemaspy/model/GenericTreeNode.java  | 170 ++++++++++-----------
 .../java/org/schemaspy/model/QueryResponse.java    |   4 +-
 3 files changed, 173 insertions(+), 91 deletions(-)

diff --git a/src/main/java/org/schemaspy/model/FkGenericTreeNode.java 
b/src/main/java/org/schemaspy/model/FkGenericTreeNode.java
new file mode 100644
index 0000000..19cda15
--- /dev/null
+++ b/src/main/java/org/schemaspy/model/FkGenericTreeNode.java
@@ -0,0 +1,90 @@
+package org.schemaspy.model;
+
+import org.schemaspy.service.SqlService;
+
+import java.util.Map;
+
+public class FkGenericTreeNode {
+
+    private GenericTreeNode parent;
+    private Row initial_state_row;
+    private Row post_change_row;
+    private SingleChange fkChange;
+
+    public FkGenericTreeNode(Row initial_state_row,GenericTreeNode parent, 
SingleChange sg)
+    {
+        this.parent = null;
+        this.initial_state_row = initial_state_row;
+        this.fkChange = fkChange;
+        initPostChangeRow();
+    }
+
+
+    public void initPostChangeRow()
+    {
+        this.post_change_row = this.initial_state_row.clone();
+        
this.post_change_row.setValueOfColumn(fkChange.getParentTableColumn().getName(),
 fkChange.getNewValue());
+    }
+
+    public String updateQueryBuilder(boolean undo,Database db, SqlService 
sqlService) //undo variable tells if the function should build Inject string or 
Undo string
+    {
+        String theQuery;
+
+        if (undo)
+        {
+            if (fkChange.getParentTableColumn().getTypeName().equals("varchar")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("bool")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("timestamp")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("date")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("_text")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("text")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("fulltext"))
+                theQuery = "UPDATE " + 
initial_state_row.getParentTable().getName() + " SET " + 
fkChange.getParentTableColumn().getName() + "='" + 
fkChange.getOldValue().toString() + "', ";
+            else
+                theQuery = "UPDATE " + 
initial_state_row.getParentTable().getName() + " SET " + 
fkChange.getParentTableColumn().getName() + " = " + 
fkChange.getOldValue().toString() + ", ";
+        }
+        else
+        {
+            if (fkChange.getParentTableColumn().getTypeName().equals("varchar")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("bool")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("timestamp")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("date")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("_text")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("text")
+                    || 
fkChange.getParentTableColumn().getTypeName().equals("fulltext"))
+                theQuery = "UPDATE " + 
initial_state_row.getParentTable().getName() + " SET " + 
fkChange.getParentTableColumn().getName() + "='" + 
fkChange.getNewValue().toString() + "', ";
+            else
+                theQuery = "UPDATE " + 
initial_state_row.getParentTable().getName() + " SET " + 
fkChange.getParentTableColumn().getName() + "=" + 
fkChange.getNewValue().toString() + ", ";
+        }
+        theQuery = theQuery.substring(0, theQuery.lastIndexOf(","));
+        theQuery = theQuery + " WHERE ";
+
+
+        for (Map.Entry<String, Object> entry : 
initial_state_row.getContent().entrySet())
+        {
+            if 
(!entry.getKey().equals(fkChange.getParentTableColumn().getName()))
+            {
+                if 
(fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("varchar")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("bool")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("timestamp")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("date")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("_text")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("text")
+                        || 
fkChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("fulltext"))
+                    theQuery = theQuery + (entry.getKey() + "='" + 
entry.getValue().toString() + "' AND ");
+            }
+            else
+            {
+                if (undo)
+                    theQuery = theQuery + (entry.getKey() + "='" + 
fkChange.getNewValue().toString() + "' AND ");
+                else
+                    theQuery = theQuery + (entry.getKey() + "='" + 
fkChange.getOldValue().toString() + "' AND ");
+            }
+        }
+        theQuery = theQuery.substring(0, theQuery.lastIndexOf(" AND "));
+
+        System.out.println(theQuery);
+
+        return theQuery;
+    }
+}
diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java 
b/src/main/java/org/schemaspy/model/GenericTreeNode.java
index 183fd1a..f4a319b 100644
--- a/src/main/java/org/schemaspy/model/GenericTreeNode.java
+++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java
@@ -23,18 +23,19 @@ public class GenericTreeNode {
     private final Row initial_state_row;
     private Row post_change_row;
     private ArrayList<SingleChange> potential_changes = new 
ArrayList<SingleChange>();
-    private ArrayList<SingleChange> cascadeFK = new ArrayList<SingleChange>(); 
// a integrer
-    private boolean cascadingFK;
+    //private ArrayList<SingleChange> cascadeFK = new 
ArrayList<SingleChange>(); // a integrer
+    //private boolean cascadingFK;
     private GenericTreeNode parent;
     private ArrayList<GenericTreeNode> children = new 
ArrayList<GenericTreeNode>();
     private SingleChange chosenChange;
     private boolean isFirstApperance;
+    private HashMap<TableColumn,FkGenericTreeNode> fkMutations = new 
HashMap<TableColumn,FkGenericTreeNode>();
 
     /**
      * Default GenericTreeNode constructor
      */
     public GenericTreeNode(Row initial_state_row, int id) { // used only for 
rootMutation and Tests
-        this.cascadingFK = false;
+        //this.cascadingFK = false;
         this.subTreeWeight = 0;
         this.parent = null;
         this.weight = 1;
@@ -42,33 +43,19 @@ public class GenericTreeNode {
         this.id = id;
         this.isFirstApperance = true;
         this.initial_state_row = initial_state_row;
-        this.potential_changes = new ArrayList<>();
         this.potential_changes = discoverMutationPossibilities(this);
     }
 
-    public GenericTreeNode(Row initial_state_row,int id, SingleChange sg) { // 
used only for  Tests
-        this.cascadingFK = false;
-        this.subTreeWeight = 0;
-        this.parent = null;
-        this.weight = 1;
-        this.depth = 0;
-        this.id = id;
-        this.isFirstApperance = false;
-        this.initial_state_row = initial_state_row;
-        this.chosenChange = sg;
-    }
-
 
     public GenericTreeNode(Row initial_state_row, int id, GenericTreeNode 
rootMutation, GenericTreeNode parentMutation,boolean isFirstApperance) {
+        //this.cascadingFK = false;
         this.parent = parentMutation;
-        this.cascadingFK = false;
         this.subTreeWeight = 0;
         this.weight = 1;
         this.id = id;
         initDepth();
         this.isFirstApperance = isFirstApperance;
         this.initial_state_row = initial_state_row;
-        this.potential_changes = new ArrayList<>();
         this.potential_changes = discoverMutationPossibilities(rootMutation);
     }
 
@@ -421,31 +408,6 @@ public class GenericTreeNode {
             else
                 theQuery = "UPDATE " + 
initial_state_row.getParentTable().getName() + " SET " + 
chosenChange.getParentTableColumn().getName() + "=" + 
chosenChange.getNewValue().toString() + ", ";
         }
-//        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")
-//                        || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("timestamp")
-//                        || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("date")
-//                        || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("_text")
-//                        || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("text"))
-//                    theQuery = theQuery + (entry.getKey() + "='" + 
entry.getValue().toString() + "', ");
-//                else
-//                {
-//                    if(entry.getValue() == null || 
entry.getValue().toString() == "" || entry.getValue().toString() == null)
-//                    {
-//                        String tmp = "null";
-//                        theQuery = theQuery + (entry.getKey() + "=" + tmp+ 
", "); // A CHANGER DURGENCE
-//
-//                    }
-//                    else
-//                        theQuery = theQuery + (entry.getKey() + "=" + 
entry.getValue().toString() + ", ");
-//                }
-//            }
-//        }
-
         theQuery = theQuery.substring(0, theQuery.lastIndexOf(","));
         theQuery = theQuery + " WHERE ";
 
@@ -462,15 +424,6 @@ public class GenericTreeNode {
                             || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("text")
                             || 
chosenChange.getParentTableColumn().getTable().getColumn(entry.getKey()).getTypeName().equals("fulltext"))
                         theQuery = theQuery + (entry.getKey() + "='" + 
entry.getValue().toString() + "' AND ");
-//                    else
-//                    {
-//                        if (entry.getValue() == null || 
entry.getValue().toString() == "" || entry.getValue().toString() == null) {
-//                            String tmp = "null";
-//                            theQuery = theQuery + (entry.getKey() + "=" + 
tmp + " AND "); // A CHANGER DURGENCE
-//
-//                        } else
-//                            theQuery = theQuery + (entry.getKey() + "=" + 
entry.getValue().toString() + " AND ");
-//                    }
                 }
                 else
                 {
@@ -677,46 +630,81 @@ public class GenericTreeNode {
 
             theQuery = "START TRANSACTION; SET CONSTRAINTS ALL DEFERRED;";
 
-                Collection<ForeignKeyConstraint> tmp2 = 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase());
-                for (ForeignKeyConstraint fk : 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()))
-                {
-                    for (TableColumn tb : fk.getChildColumns())
-                    {
-                        String semiQuery = "SELECT * FROM " + tb.getTable() + 
" WHERE " + tb.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"))
-                            semiQuery = semiQuery + "' " + 
chosenChange.getNewValue() + " ' ORDER BY RANDOM() LIMIT 1";
-                        else
-                            semiQuery = semiQuery + 
chosenChange.getNewValue()+" ORDER BY RANDOM() LIMIT 1";
-
-                        QueryResponseParser qrp;
-                        QueryResponse response = null;
-                        try {
-                            Statement stmt = 
sqlService.getConnection().createStatement();
-                            ResultSet res = stmt.executeQuery(semiQuery);
-                            qrp = new QueryResponseParser();
-                            ArrayList<Row> rows = new 
ArrayList<Row>(qrp.parse(res, tb.getTable()).getRows());
-                            response = new QueryResponse(rows, rows.size());
-                        } catch (Exception e) {
-                            e.printStackTrace();
-                        }
+                
System.out.println(db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()).isEmpty());
+
+                    for (ForeignKeyConstraint fk : 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()))
 {
+                        for (TableColumn tb : fk.getChildColumns())
+                        {
+                            String semiQuery = "SELECT * FROM " + 
tb.getTable() + " WHERE " + tb.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"))
+                                semiQuery = semiQuery + "' " + 
chosenChange.getNewValue() + " ' ORDER BY RANDOM() LIMIT 1";
+                            else
+                                semiQuery = semiQuery + 
chosenChange.getNewValue() + " ORDER BY RANDOM() LIMIT 1";
+
+                            QueryResponseParser qrp;
+                            QueryResponse response = null;
+                            try
+                            {
+                                Statement stmt = 
sqlService.getConnection().createStatement();
+                                ResultSet res = stmt.executeQuery(semiQuery);
+                                qrp = new QueryResponseParser();
+                                ArrayList<Row> rows = new 
ArrayList<Row>(qrp.parse(res, tb.getTable()).getRows());
+                                response = new QueryResponse(rows);
+                            }
+                            catch (Exception e)
+                            {
+                                e.printStackTrace();
+                            }
 
-                        if (response != null) {
-                            if (response.getNbRows() == 0) {
-                                for (int i = 0; i < response.getNbRows(); i++) 
{
-                                    //select all rows with oldValue. change to 
newValue for all of them
-                                    GenericTreeNode tmp = new 
GenericTreeNode(response.getRows().get(i), 0, new 
SingleChange(chosenChange.getParentTableColumn(), this, 
chosenChange.getOldValue(), chosenChange.getNewValue()));
-                                    theQuery = theQuery + 
tmp.updateQueryBuilder(false, db, sqlService);
+                            if (response != null)
+                            {
+                                if (response.getNbRows() == 0)
+                                {
+                                    int tmpIndex = semiQuery.lastIndexOf("=");
+                                    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"))
+                                        semiQuery = 
semiQuery.substring(tmpIndex) + "' " + chosenChange.getOldValue()+"' ";
+                                    else
+                                        semiQuery = 
semiQuery.substring(tmpIndex) + chosenChange.getOldValue();
+
+                                    try
+                                    {
+                                        Statement stmt = 
sqlService.getConnection().createStatement();
+                                        ResultSet res = 
stmt.executeQuery(semiQuery);
+                                        qrp = new QueryResponseParser();
+                                        ArrayList<Row> rows = new 
ArrayList<Row>(qrp.parse(res, tb.getTable()).getRows());
+                                        response = new QueryResponse(rows);
+                                    }
+                                    catch (Exception e)
+                                    {
+                                        e.printStackTrace();
+                                    }
+
+                                    if(!response.getRows().isEmpty())
+                                    {
+                                        for (int i = 0; i < 
response.getNbRows(); i++)
+                                        {
+                                            FkGenericTreeNode tmp = new 
FkGenericTreeNode(response.getRows().get(i), this, new 
SingleChange(chosenChange.getParentTableColumn(), this, 
chosenChange.getOldValue(), chosenChange.getNewValue()));
+                                            fkMutations.put(tb,tmp);
+                                            theQuery = theQuery + 
tmp.updateQueryBuilder(false, db, sqlService);
+                                        }
+                                    }
                                 }
                             }
                         }
                     }
-                }
+
 
         theQuery = theQuery + updateQueryBuilder(undo,db,sqlService);
         theQuery = theQuery + " ; COMMIT TRANSACTION;";
@@ -727,8 +715,12 @@ public class GenericTreeNode {
 
     public boolean checkIfHasFk(Database db)
     {
-        
if(db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()).size()
 > 0)
-            return true;
+        Collection<ForeignKeyConstraint> lesFk= 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase());
+        for(ForeignKeyConstraint fk : lesFk)
+        {
+            
if(fk.getChildColumns().contains(chosenChange.getParentTableColumn()))
+                return true;
+        }
         return false;
     }
 
diff --git a/src/main/java/org/schemaspy/model/QueryResponse.java 
b/src/main/java/org/schemaspy/model/QueryResponse.java
index 33b6aa6..fb3e28a 100644
--- a/src/main/java/org/schemaspy/model/QueryResponse.java
+++ b/src/main/java/org/schemaspy/model/QueryResponse.java
@@ -36,11 +36,11 @@ public class QueryResponse
        /**
        * Default QueryResponse constructor
        */
-       public QueryResponse(ArrayList<Row> rows, Integer nbRows)
+       public QueryResponse(ArrayList<Row> rows)
     {
                this.rows = new ArrayList<Row>();
        this.rows = rows;
-               this.nbRows = nbRows;
+               this.nbRows = rows.size();
        }
        /**
        * Returns value of rows

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]