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: First drop for fk


From: gnunet
Subject: [GNUnet-SVN] [taler-schemafuzz] branch master updated: First drop for fk handling (high crash probability)
Date: Mon, 04 Jun 2018 16:10:15 +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 bb23b73  First drop for fk handling (high crash probability)
bb23b73 is described below

commit bb23b7381beba9aca0cf12240d980e1f794827ee
Author: Feideus <address@hidden>
AuthorDate: Mon Jun 4 16:10:07 2018 +0200

    First drop for fk handling (high crash probability)
---
 .../java/org/schemaspy/model/GenericTreeNode.java  | 64 ++++++++++++++++++++--
 1 file changed, 58 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java 
b/src/main/java/org/schemaspy/model/GenericTreeNode.java
index 579d645..f193c3f 100644
--- a/src/main/java/org/schemaspy/model/GenericTreeNode.java
+++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java
@@ -1,10 +1,8 @@
 package org.schemaspy.model;
 
-import java.sql.PreparedStatement;
+import java.io.IOException;
+import java.sql.*;
 
-import java.sql.ResultSet;
-import java.sql.Statement;
-import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.ArrayList;
@@ -350,12 +348,13 @@ public class GenericTreeNode {
 
     public boolean inject(SqlService sqlService,Database db, boolean undo)
     {
+
         if (undo)
             System.out.println("UNDOING");
         else
             System.out.println("INJECT");
 
-        String theQuery = updateQueryBuilder(undo);
+        String theQuery = updateQueryBuilderWrapper(undo,db,sqlService);
         try
         {
             Statement stmt = sqlService.getConnection().createStatement();
@@ -389,7 +388,7 @@ public class GenericTreeNode {
         }
     }
 
-    public String updateQueryBuilder(boolean undo) //undo variable tells if 
the function should build Inject string or Undo string
+    public String updateQueryBuilder(boolean undo,Database db, SqlService 
sqlService) //undo variable tells if the function should build Inject string or 
Undo string
     {
         String theQuery;
 
@@ -665,4 +664,57 @@ public class GenericTreeNode {
         return FirstApperanceOf(mutation.getParent());
     }
 
+
+    public String updateQueryBuilderWrapper(boolean undo,Database db, 
SqlService sqlService)
+    {
+        String theQuery = "";
+        boolean hasFk = 
db.getLesForeignKeys().containsKey(chosenChange.getParentTableColumn().getName());
+
+        if(hasFk)
+        {
+            theQuery = "START TRANSACTION; SET CONSTRAINTS ALL DEFERRED;";
+
+            for(ForeignKeyConstraint fk : 
db.getLesForeignKeys().get(chosenChange.getParentTableColumn().getName()))
+            {
+                ArrayList<TableColumn> allChildrenAndParents = new 
ArrayList<TableColumn>();
+                allChildrenAndParents.addAll(fk.getChildColumns());
+                allChildrenAndParents.addAll(fk.getParentColumns());
+
+                for(TableColumn tb : allChildrenAndParents)
+                {
+                    String semiQuery = "SELECT * FROM "+tb.getTable()+" WHERE 
"+tb.getName()+"="+chosenChange.getOldValue();
+                    QueryResponseParser qrp;
+                    QueryResponse response = null ;
+                    try {
+                        Statement stmt = 
sqlService.getConnection().createStatement();
+                        ResultSet res = stmt.executeQuery(semiQuery);
+                        qrp = new QueryResponseParser();
+                        response = qrp.parse(res,tb.getTable());
+                    }
+                    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);
+                        }
+                    }
+                }
+            }
+        }
+
+        theQuery = theQuery + updateQueryBuilder(undo,db,sqlService);
+
+        if(hasFk)
+        {
+            theQuery = theQuery + " ; COMMIT TRANSACTION;";
+        }
+        return theQuery;
+    }
+
 }

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



reply via email to

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