You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Simon Nash (JIRA)" <de...@tuscany.apache.org> on 2011/08/21 12:47:27 UTC

[jira] [Updated] (TUSCANY-2722) getInsertOrder needs to support multiple children per parent

     [ https://issues.apache.org/jira/browse/TUSCANY-2722?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Simon Nash updated TUSCANY-2722:
--------------------------------

    Fix Version/s: Java-DAS-Next

> getInsertOrder needs to support multiple children per parent
> ------------------------------------------------------------
>
>                 Key: TUSCANY-2722
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2722
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java DAS RDB
>    Affects Versions: Java-DAS-beta1
>            Reporter: Joe Crichton
>             Fix For: Java-DAS-Next
>
>
> I am not patch savvy, but here is the 'new' getInsertOrder I am using to support multiple parent-child relationships WRT insert/delete ordering:
>     // TODO optimize
>     public List getInsertOrder() {
>         if (this.logger.isDebugEnabled()) {
>             this.logger.debug("Getting insert order");
>         }
>         List inserts = new ArrayList();
>         // JMC - this must allow multiple children per parent
>         Map<String,List<String>> parentToChildren = new HashMap<String,List<String>>();
>        //Map parentToChild = new HashMap();
>         List parents = new ArrayList();
>         List children = new ArrayList();
>         if (config != null) {
>             Iterator i = getConfig().getRelationship().iterator();
>             while (i.hasNext()) {
>                 Relationship r = (Relationship) i.next();
>                 parents.add(r.getPrimaryKeyTable());
>                 children.add(r.getForeignKeyTable());
>                 
>                 // JMC - mapping must be multiple children per parent
>                 List<String>rchildren = parentToChildren.get(r.getPrimaryKeyTable());
>                 if (rchildren == null) parentToChildren.put(r.getPrimaryKeyTable(), rchildren=new ArrayList<String>());
>                 rchildren.add(r.getForeignKeyTable());
>                 //parentToChild.put(r.getPrimaryKeyTable(), r.getForeignKeyTable());
>             }
>             while (parents.size() > 0) {
>                 String parent = (String) parents.get(0);
>                 if (!children.contains(parent)) {
>                     if (!inserts.contains(parent)) {
>                         inserts.add(parent);
>                     }
>                     
>                     // JMC - Deal with ALL relationships
>                     //String child = (String) parentToChild.get(parent);
>                     List<String> rchildren = parentToChildren.get(parent);
>                     Iterator<String> it = rchildren.iterator();
>                     while(it.hasNext()) {
>                        String child = it.next();                    
>                        if (!inserts.contains(child)) {
>                           inserts.add(child);
>                           children.remove(child);
>                        }
>                     }
>                     parents.remove(parent);
>                 } else {
>                     parents.add(parents.remove(0));
>                 }
>             }
>             inserts.addAll(children);
>         }
>         if (this.logger.isDebugEnabled()) {
>             this.logger.debug(inserts);
>         }
>         return inserts;
>     }

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira