<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>138139</bug_id>
          
          <creation_ts>2006-11-30 10:53:32 +0000</creation_ts>
          <short_desc>Incorrect export to SQL</short_desc>
          <delta_ts>2006-11-30 19:50:16 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>2</classification_id>
          <classification>Applications</classification>
          <product>umbrello</product>
          <component>general</component>
          <version>unspecified</version>
          <rep_platform>Gentoo Packages</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexey Parshin">alexeyp</reporter>
          <assigned_to name="Umbrello Development Group">umbrello-devel</assigned_to>
          
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>490639</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Parshin">alexeyp</who>
    <bug_when>2006-11-30 10:53:32 +0000</bug_when>
    <thetext>Version:            (using KDE KDE 3.5.5)
Installed from:    Gentoo Packages
Compiler:          gcc 4.1.1 
OS:                Linux

The SQL export is incorrect as soon as the diagram is over about 50 objects, and associations between objects were dropped and recreated.
The following problems are detected:

1) Export to SQL ignores associations when a field of the table refers to another field of the same table.

2) With the large diagram (over 70..90) objects, some associations are repeated during the export multiple times (as CONSTRAINT .. FOREIGN KEY)

3) The generated CREATE TABLE statement contains CONSTRAINTS. That requires to execute output .sql files in certain order.

4) .XMI file contains hundreds of bogus connections. Some edit+save operations cause file size to double. I&apos;ve given name to all the connections, yet hundreds of connections with name=&quot;&quot; exist in the file. I didn&apos;t find any workaround for this yet.

I have a patch that fixes 1)..3). I&apos;ll try to attach it here if I find how.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490640</commentid>
    <comment_count>1</comment_count>
      <attachid>18732</attachid>
    <who name="Alexey Parshin">alexeyp</who>
    <bug_when>2006-11-30 10:54:30 +0000</bug_when>
    <thetext>Created attachment 18732
Patch to fix sql export</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490760</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2006-11-30 18:56:43 +0000</bug_when>
    <thetext>&gt; Patch to fix sql export 
 
The attachment contains the diff for sqlwriter.cpp but
apparently you have added a new member, constraintMap.
Please check - did you also modify sqlwriter.h (or some
other file?)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490761</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2006-11-30 19:00:06 +0000</bug_when>
    <thetext>Sorry, forget about Comment #2. All is fine and I will apply instantly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490774</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Kellogg">okellogg</who>
    <bug_when>2006-11-30 19:50:14 +0000</bug_when>
    <thetext>SVN commit 609424 by okellogg:

Apply attachment 18732 from Alexey Parshin with slight modification.
writeClass(): Add an auxiliary variable, constraintMap, to avoid excessive
 code for duplicated associations. (Those duplicated associations should
 not be there in the first place though.)
writeAttributes(): Generate code for implementation-level attributes.
BUG:138139


 M  +1 -0      ChangeLog  
 M  +24 -11    umbrello/codegenerators/sqlwriter.cpp  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #609423:609424
@@ -11,6 +11,7 @@
   http://www.geeksoc.org/~jr/umbrello/uml-devel/9863.html
 * Bugs/wishes from http://bugs.kde.org:
 * Artifacts of a component diagram are wrongly placed in Deployment View folder (137564)
+* Incorrect export to SQL (138139)
 
 Version 1.5.52
 
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/codegenerators/sqlwriter.cpp #609423:609424
@@ -83,6 +83,9 @@
     if (isClass)
         writeAttributes(c, sql);
 
+    sql &lt;&lt; m_endl &lt;&lt; &quot;);&quot; &lt;&lt; m_endl;
+
+    QMap&lt;UMLAssociation*,UMLAssociation*&gt; constraintMap; // so we don&apos;t repeat constraint
     UMLAssociationList aggregations = c-&gt;getAggregations();
     if( forceSections() || !aggregations.isEmpty() ) {
         for(UMLAssociation* a = aggregations.first(); a; a = aggregations.next()) {
@@ -90,18 +93,20 @@
             UMLObject *objB = a-&gt;getObject(Uml::B);
             if (objA-&gt;getID() == c-&gt;getID() &amp;&amp; objB-&gt;getID() != c-&gt;getID())
                 continue;
-            QString roleNameA = a-&gt;getRoleName(Uml::A);
-            QString roleNameB = a-&gt;getRoleName(Uml::B);
-            if (roleNameA.isEmpty() || roleNameB.isEmpty())
-                continue;
-            sql &lt;&lt; m_indentation &lt;&lt; &quot;,&quot; &lt;&lt; m_endl;
-            sql &lt;&lt; m_indentation &lt;&lt; &quot;CONSTRAINT &quot; &lt;&lt; a-&gt;getName()
-                &lt;&lt; &quot; FOREIGN KEY (&quot; &lt;&lt; roleNameB &lt;&lt; &quot;) REFERENCES &quot;
-                &lt;&lt; objA-&gt;getName() &lt;&lt; &quot; (&quot; &lt;&lt; roleNameA &lt;&lt; &quot;)&quot;;
+	    constraintMap[a] = a;
         }
     }
+    
+    QMap&lt;UMLAssociation*,UMLAssociation*&gt;::Iterator itor = constraintMap.begin();
+    for (;itor != constraintMap.end();itor++) {
+	UMLAssociation* a = itor.data();
+	sql &lt;&lt; &quot;ALTER TABLE &quot;&lt;&lt; classname
+            &lt;&lt; &quot; ADD CONSTRAINT &quot; &lt;&lt; a-&gt;getName() &lt;&lt; &quot; FOREIGN KEY (&quot;
+            &lt;&lt; a-&gt;getRoleName(Uml::B) &lt;&lt; &quot;) REFERENCES &quot;
+            &lt;&lt; a-&gt;getObject(Uml::A)-&gt;getName()
+            &lt;&lt; &quot; (&quot; &lt;&lt; a-&gt;getRoleName(Uml::A) &lt;&lt; &quot;);&quot; &lt;&lt; m_endl;
+    }
 
-    sql &lt;&lt; m_endl &lt;&lt; &quot;);&quot; &lt;&lt; m_endl;
 
     file.close();
     emit codeGenerated(c, true);
@@ -109,10 +114,11 @@
 
 
 void SQLWriter::writeAttributes(UMLClassifier *c, QTextStream &amp;sql) {
-    UMLAttributeList atpub, atprot, atpriv;
+    UMLAttributeList atpub, atprot, atpriv, atimp;
     atpub.setAutoDelete(false);
     atprot.setAutoDelete(false);
     atpriv.setAutoDelete(false);
+    atimp.setAutoDelete(false);
 
     //sort attributes by scope and see if they have a default value
     UMLAttributeList atl = c-&gt;getAttributeList();
@@ -127,7 +133,8 @@
           case Uml::Visibility::Private:
             atpriv.append(at);
             break;
-          default:
+          case Uml::Visibility::Implementation:
+            atimp.append(at);
             break;
         }
     }
@@ -155,6 +162,12 @@
         first = false;
     }
 
+    if (atimp.count() &gt; 0)
+    {
+        printAttributes(sql, atimp, first);
+        first = false;
+    }
+
     return;
 }
 
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18732</attachid>
            <date>2006-11-30 10:54:30 +0000</date>
            <delta_ts>2006-11-30 10:54:30 +0000</delta_ts>
            <desc>Patch to fix sql export</desc>
            <filename>umbrello-3.5.5-sqlexport.patch</filename>
            <type>text/plain</type>
            <size>2771</size>
            <attacher name="Alexey Parshin">alexeyp</attacher>
            
              <data encoding="base64">ZGlmZiAtdU5yIGtkZXNkay0zLjUuNS5vcmlnL3VtYnJlbGxvL3VtYnJlbGxvL2NvZGVnZW5lcmF0
b3JzL3NxbHdyaXRlci5jcHAga2Rlc2RrLTMuNS41L3VtYnJlbGxvL3VtYnJlbGxvL2NvZGVnZW5l
cmF0b3JzL3NxbHdyaXRlci5jcHAKLS0tIGtkZXNkay0zLjUuNS5vcmlnL3VtYnJlbGxvL3VtYnJl
bGxvL2NvZGVnZW5lcmF0b3JzL3NxbHdyaXRlci5jcHAJMjAwNi0wNy0yMiAxODoxMTo1Ny4wMDAw
MDAwMDAgKzEwMDAKKysrIGtkZXNkay0zLjUuNS91bWJyZWxsby91bWJyZWxsby9jb2RlZ2VuZXJh
dG9ycy9zcWx3cml0ZXIuY3BwCTIwMDYtMTEtMzAgMjA6MjA6MDMuMDAwMDAwMDAwICsxMTAwCkBA
IC04MywyMSArODMsMjggQEAKICAgICBpZiAoaXNDbGFzcykKICAgICAgICAgd3JpdGVBdHRyaWJ1
dGVzKGMsIHNxbCk7CiAKKyAgICBzcWwgPDwgbV9lbmRsIDw8ICIpOyIgPDwgbV9lbmRsOworCisg
ICAgUU1hcDxRU3RyaW5nLFVNTEFzc29jaWF0aW9uKj4gY29uc3RyYWludE1hcDsgLy8gc28gd2Ug
ZG9uJ3QgcmVwZWF0IGNvbnN0cmFpbnQKICAgICBVTUxBc3NvY2lhdGlvbkxpc3QgYWdncmVnYXRp
b25zID0gYy0+Z2V0QWdncmVnYXRpb25zKCk7CiAgICAgaWYoIGZvcmNlU2VjdGlvbnMoKSB8fCAh
YWdncmVnYXRpb25zLmlzRW1wdHkoKSApIHsKICAgICAgICAgZm9yKFVNTEFzc29jaWF0aW9uKiBh
ID0gYWdncmVnYXRpb25zLmZpcnN0KCk7IGE7IGEgPSBhZ2dyZWdhdGlvbnMubmV4dCgpKSB7Ci0g
ICAgICAgICAgICBpZiggYS0+Z2V0T2JqZWN0KFVtbDo6QSktPmdldElEKCkgIT0gYy0+Z2V0SUQo
KSApIHsKLQotICAgICAgICAgICAgICAgIHNxbCA8PCBtX2luZGVudGF0aW9uIDw8ICIsIiA8PCBt
X2VuZGwgPDwgbV9pbmRlbnRhdGlvbgotICAgICAgICAgICAgICAgIDw8ICJDT05TVFJBSU5UICIg
PDwgYS0+Z2V0TmFtZSgpIDw8ICIgRk9SRUlHTiBLRVkgKCIKLSAgICAgICAgICAgICAgICA8PCBh
LT5nZXRSb2xlTmFtZShVbWw6OkIpIDw8ICIpIFJFRkVSRU5DRVMgIgotICAgICAgICAgICAgICAg
IDw8IGEtPmdldE9iamVjdChVbWw6OkEpLT5nZXROYW1lKCkKLSAgICAgICAgICAgICAgICA8PCAi
ICgiIDw8IGEtPmdldFJvbGVOYW1lKFVtbDo6QSkgPDwgIikiOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYoIGEtPmdldE9iamVjdChVbWw6OkEpLT5nZXRJRCgpID09IGMtPmdldElEKCkg
JiYgYS0+Z2V0T2JqZWN0KFVtbDo6QiktPmdldElEKCkgIT0gYy0+Z2V0SUQoKSApCisJCWNvbnRp
bnVlOworCSAgICBjb25zdHJhaW50TWFwW2EtPmdldE5hbWUoKV0gPSBhOwogICAgICAgICB9CiAg
ICAgfQorICAgIAorICAgIFFNYXA8UVN0cmluZyxVTUxBc3NvY2lhdGlvbio+OjpJdGVyYXRvciBp
dG9yID0gY29uc3RyYWludE1hcC5iZWdpbigpOworICAgIGZvciAoO2l0b3IgIT0gY29uc3RyYWlu
dE1hcC5lbmQoKTtpdG9yKyspIHsKKwlVTUxBc3NvY2lhdGlvbiogYSA9IGl0b3IuZGF0YSgpOwor
CXNxbCA8PCAiQUxURVIgVEFCTEUgIjw8IGNsYXNzbmFtZQorICAgICAgICAgICAgPDwgIiBBREQg
Q09OU1RSQUlOVCAiIDw8IGEtPmdldE5hbWUoKSA8PCAiIEZPUkVJR04gS0VZICgiCisgICAgICAg
ICAgICA8PCBhLT5nZXRSb2xlTmFtZShVbWw6OkIpIDw8ICIpIFJFRkVSRU5DRVMgIgorICAgICAg
ICAgICAgPDwgYS0+Z2V0T2JqZWN0KFVtbDo6QSktPmdldE5hbWUoKQorICAgICAgICAgICAgPDwg
IiAoIiA8PCBhLT5nZXRSb2xlTmFtZShVbWw6OkEpIDw8ICIpOyIgPDwgbV9lbmRsOworICAgIH0K
IAotICAgIHNxbCA8PCBtX2VuZGwgPDwgIik7IiA8PCBtX2VuZGw7CiAKICAgICBmaWxlLmNsb3Nl
KCk7CiAgICAgZW1pdCBjb2RlR2VuZXJhdGVkKGMsIHRydWUpOwpAQCAtMTA1LDEwICsxMTIsMTEg
QEAKIAogCiB2b2lkIFNRTFdyaXRlcjo6d3JpdGVBdHRyaWJ1dGVzKFVNTENsYXNzaWZpZXIgKmMs
IFFUZXh0U3RyZWFtICZzcWwpIHsKLSAgICBVTUxBdHRyaWJ1dGVMaXN0IGF0cHViLCBhdHByb3Qs
IGF0cHJpdjsKKyAgICBVTUxBdHRyaWJ1dGVMaXN0IGF0cHViLCBhdHByb3QsIGF0cHJpdiwgYXRp
bXA7CiAgICAgYXRwdWIuc2V0QXV0b0RlbGV0ZShmYWxzZSk7CiAgICAgYXRwcm90LnNldEF1dG9E
ZWxldGUoZmFsc2UpOwogICAgIGF0cHJpdi5zZXRBdXRvRGVsZXRlKGZhbHNlKTsKKyAgICBhdGlt
cC5zZXRBdXRvRGVsZXRlKGZhbHNlKTsKIAogICAgIC8vc29ydCBhdHRyaWJ1dGVzIGJ5IHNjb3Bl
IGFuZCBzZWUgaWYgdGhleSBoYXZlIGEgZGVmYXVsdCB2YWx1ZQogICAgIFVNTEF0dHJpYnV0ZUxp
c3QgYXRsID0gYy0+Z2V0QXR0cmlidXRlTGlzdCgpOwpAQCAtMTIzLDcgKzEzMSw5IEBACiAgICAg
ICAgICAgY2FzZSBVbWw6OlZpc2liaWxpdHk6OlByaXZhdGU6CiAgICAgICAgICAgICBhdHByaXYu
YXBwZW5kKGF0KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgY2FzZSBVbWw6OlZpc2liaWxpdHk6OkltcGxlbWVudGF0aW9uOgorICAgICAgICAgIC8v
ZGVmYXVsdDoKKyAgICAgICAgICAgIGF0aW1wLmFwcGVuZChhdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MSw2ICsxNjEsMTIgQEAKICAgICAgICAgZmlyc3Qg
PSBmYWxzZTsKICAgICB9CiAKKyAgICBpZiAoYXRpbXAuY291bnQoKSA+IDApCisgICAgeworICAg
ICAgICBwcmludEF0dHJpYnV0ZXMoc3FsLCBhdGltcCwgZmlyc3QpOworICAgICAgICBmaXJzdCA9
IGZhbHNlOworICAgIH0KKwogICAgIHJldHVybjsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>