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: Working on the Ne


From: gnunet
Subject: [GNUnet-SVN] [taler-schemafuzz] branch master updated: Working on the New value being used as PK constraint issue. Almost there.
Date: Tue, 05 Jun 2018 16:37:50 +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 b848c8a  Working on the New value being used as PK constraint issue. 
Almost there.
b848c8a is described below

commit b848c8af6e7b3119b20ded990db5c0d6fa56071e
Author: Feideus <address@hidden>
AuthorDate: Tue Jun 5 16:37:42 2018 +0200

    Working on the New value being used as PK constraint issue. Almost there.
---
 src/main/java/org/schemaspy/DBFuzzer.java          |  4 +-
 .../java/org/schemaspy/model/GenericTreeNode.java  | 91 +++++++++++-----------
 2 files changed, 49 insertions(+), 46 deletions(-)

diff --git a/src/main/java/org/schemaspy/DBFuzzer.java 
b/src/main/java/org/schemaspy/DBFuzzer.java
index 1a5f24e..05cdaba 100644
--- a/src/main/java/org/schemaspy/DBFuzzer.java
+++ b/src/main/java/org/schemaspy/DBFuzzer.java
@@ -81,7 +81,7 @@ public class DBFuzzer
         int maxDepth = 
Integer.parseInt(analyzer.getCommandLineArguments().getMaxDepth());
         int mark = 0;
         //adding CASCADE to all foreign key tableColumns.
-        settingTemporaryCascade(false); // need to drop and recreate database
+        //settingTemporaryCascade(false); // need to drop and recreate database
 
         LOGGER.info("Starting Database Fuzzing");
 
@@ -170,7 +170,7 @@ public class DBFuzzer
 
       System.out.println("success");
       printMutationTree();
-      removeTemporaryCascade();
+      //removeTemporaryCascade();
       return returnStatus;
     }
 
diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java 
b/src/main/java/org/schemaspy/model/GenericTreeNode.java
index d76b396..183fd1a 100644
--- a/src/main/java/org/schemaspy/model/GenericTreeNode.java
+++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java
@@ -348,13 +348,16 @@ public class GenericTreeNode {
 
     public boolean inject(SqlService sqlService,Database db, boolean undo)
     {
-
+        String theQuery = "";
         if (undo)
             System.out.println("UNDOING");
         else
             System.out.println("INJECT");
 
-        String theQuery = updateQueryBuilderWrapper(undo,db,sqlService);
+        if(checkIfHasFk(db))
+            theQuery = updateQueryBuilderWrapper(undo,db,sqlService);
+        else
+            theQuery = updateQueryBuilder(undo,db,sqlService);
         try
         {
             Statement stmt = sqlService.getConnection().createStatement();
@@ -671,62 +674,62 @@ public class GenericTreeNode {
     public String updateQueryBuilderWrapper(boolean undo,Database db, 
SqlService sqlService)
     {
         String theQuery = "";
-        boolean hasFk = 
db.getLesForeignKeys().containsKey(chosenChange.getParentTableColumn().getTable().getName().toUpperCase());
 
-        if(hasFk)
-        {
             theQuery = "START TRANSACTION; SET CONSTRAINTS ALL DEFERRED;";
 
-            for(ForeignKeyConstraint fk : 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()))
-            {
-                for(TableColumn tb : fk.getParentColumns())
+                Collection<ForeignKeyConstraint> tmp2 = 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase());
+                for (ForeignKeyConstraint fk : 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()))
                 {
-                    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.getOldValue()+" '";
-                    else
-                        semiQuery = semiQuery +chosenChange.getOldValue();
-
-                    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)
+                    for (TableColumn tb : fk.getChildColumns())
                     {
-                        e.printStackTrace();
-                    }
+                        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();
+                        }
 
-                    if(response != null)
-                    {
-                        for (int i = 0; i < response.getNbRows(); i++)
-                        {
-                            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) {
+                                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);
+                                }
+                            }
                         }
                     }
                 }
-            }
-        }
 
         theQuery = theQuery + updateQueryBuilder(undo,db,sqlService);
+        theQuery = theQuery + " ; COMMIT TRANSACTION;";
 
-        if(hasFk)
-        {
-            theQuery = theQuery + " ; COMMIT TRANSACTION;";
-        }
         System.out.println("Total query = "+theQuery);
         return theQuery;
     }
 
+    public boolean checkIfHasFk(Database db)
+    {
+        
if(db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getTable().getName().toUpperCase()).size()
 > 0)
+            return true;
+        return false;
+    }
+
 }

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



reply via email to

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