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