Author: vgritsenko
Date: Fri May  6 07:51:55 2005
New Revision: 168611

URL: http://svn.apache.org/viewcvs?rev=168611&view=rev
Log:
fix bug #25098

Modified:
    
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java
    cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/samples.xml
    
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/stylesheets/sql2html.xsl
    
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sitemap.xmap
    
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page2.xml
    
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page3.xml
    cocoon/branches/BRANCH_2_1_X/status.xml

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java
 (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java
 Fri May  6 07:51:55 2005
@@ -132,6 +132,12 @@
  * <code>own-connection</code> parameter.
  * </p>
  *
+ * <p>
+ * TODO: Support inserting of the XML data into the database without need to 
escape it.
+ *       Can be implemented by introducing new &lt;sql:xml/&gt; tag to 
indicate that
+ *       startSerializedXMLRecording(...) should be used.
+ * </p>
+ *
  * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Donald Ball</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
@@ -1158,7 +1164,7 @@
 
                 if (success) {
                     AttributesImpl attr = new AttributesImpl();
-                    if (this.showNrOfRows) {
+                    if (showNrOfRows) {
                         attr.addAttribute("", this.nrOfRowsAttr, 
this.nrOfRowsAttr, "CDATA", String.valueOf(getNrOfRows()));
                     }
                     String name = getName();
@@ -1167,7 +1173,9 @@
                     }
                     start(this.rowsetElement, attr);
 
-                    if (!isStoredProcedure) {
+                    if (isStoredProcedure) {
+                        serializeStoredProcedure();
+                    } else {
                         while (next()) {
                             start(this.rowElement, EMPTY_ATTRIBUTES);
                             serializeRow();
@@ -1176,8 +1184,6 @@
                             }
                             end(this.rowElement);
                         }
-                    } else {
-                        serializeStoredProcedure();
                     }
 
                     end(this.rowsetElement);
@@ -1262,6 +1268,7 @@
 
         protected int getNrOfRows() throws SQLException {
             int nr = 0;
+
             if (rs != null) {
                 if (oldDriver) {
                     nr = -1;
@@ -1324,10 +1331,12 @@
             // If rv is not -1, then an SQL insert, update, etc, has
             // happened (see JDBC docs - return codes for executeUpdate)
             if (rv != -1) {
-                return false;
+                // Output row with return code. Once.
+                return true;
             }
 
             if (rs == null || !rs.next()) {
+                // No more rows.
                 return false;
             }
 
@@ -1400,18 +1409,20 @@
 
         protected void serializeRow()
         throws SQLException, SAXException {
-            if (!isUpdate && !isStoredProcedure) {
+            if (rv != -1) {
+                start("returncode", EMPTY_ATTRIBUTES);
+                serializeData(String.valueOf(rv));
+                end("returncode");
+                // We only want the return code shown once.
+                // Reset rv so next() returns false next time.
+                rv = -1;
+            } else {
                 for (int i = 1; i <= md.getColumnCount(); i++) {
                     String columnName = getColumnName(md.getColumnName(i));
                     start(columnName, EMPTY_ATTRIBUTES);
                     serializeData(getColumnValue(i));
                     end(columnName);
                 }
-            } else if (isUpdate && !isStoredProcedure) {
-                start("returncode", EMPTY_ATTRIBUTES);
-                serializeData(String.valueOf(rv));
-                end("returncode");
-                rv = -1; // we only want the return code shown once.
             }
         }
 

Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/samples.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/samples.xml?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/samples.xml 
(original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/samples.xml Fri 
May  6 07:51:55 2005
@@ -41,7 +41,8 @@
        Example with two queries nested into the third one.
      </sample>
      <sample name="XML Test" href="transform/sql-page3" xlink:role="dynamic">
-       Example with inserting XML into a database.
+       Example with inserting XML into a database and with a select statement
+       nested into the insert statement.
      </sample>
   </group>
 
@@ -68,7 +69,7 @@
        modular package which supports auto increments and more.
      </sample>
      <sample name="File Upload to Blob" href="mod-db/file-upload-blob">
-       A simple example demonstrating of populating a binary database column 
+       A simple example demonstrating of populating a binary database column
        via a multipart form file upload.
      </sample>
   </group>
@@ -107,5 +108,5 @@
        Start the tutorial application.
      </sample>
   </group>
-  
+
 </samples>

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/stylesheets/sql2html.xsl
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/stylesheets/sql2html.xsl?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/stylesheets/sql2html.xsl
 (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/stylesheets/sql2html.xsl
 Fri May  6 07:51:55 2005
@@ -60,6 +60,13 @@
 
   <xsl:template match="sql:description"/>
 
+  <xsl:template match="sql:returncode">
+    <td>
+      <xsl:copy-of select="node()"/>
+      rows updated.
+    </td>
+  </xsl:template>
+
   <xsl:template match="sql:id">
     <!-- ignore -->
   </xsl:template>

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sitemap.xmap
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sitemap.xmap?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sitemap.xmap
 (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sitemap.xmap
 Fri May  6 07:51:55 2005
@@ -36,8 +36,8 @@
 <!-- =========================== Pipelines ================================= 
-->
 
   <map:pipelines>
-
     <map:pipeline>
+
       <map:match pattern="*">
         <map:generate src="{1}.xml"/>
         <!--
@@ -55,7 +55,7 @@
           <map:parameter name="contextPath" value="{request:contextPath}"/>
           <map:parameter name="file" value=".xml"/>
         </map:transform>
-        <map:serialize/>
+        <map:serialize type="html"/>
       </map:match>
 
       <map:match pattern="">

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page2.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page2.xml?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page2.xml
 (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page2.xml
 Fri May  6 07:51:55 2005
@@ -24,7 +24,7 @@
   </resources>
 
   <content>
-    <para>This is my first Cocoon2 page filled with SQL data!</para>
+    <para>This is another page filled with SQL data.</para>
 
     <sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0";>
       <sql:query>

Modified: 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page3.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page3.xml?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page3.xml
 (original)
+++ 
cocoon/branches/BRANCH_2_1_X/src/blocks/databases/samples/transform/sql-page3.xml
 Fri May  6 07:51:55 2005
@@ -24,18 +24,32 @@
   </resources>
 
   <content>
-    <para>This is my first Cocoon2 page filled with SQL data!</para>
+    <para>This page inserts a row into the table.</para>
 
     <sql:execute-query xmlns:sql="http://apache.org/cocoon/SQL/2.0";>
       <sql:query>
-        select max(id) as maxid from department
+        select (max(id)+1) as maxid from department
       </sql:query>
       <sql:execute-query>
+        <!--
+          - Don't do this in real applications: use sequences or auto 
increment fields.
+          -->
         <sql:query>
-         insert into department (id, name, description) 
-             values(<sql:ancestor-value name="maxid" level="1"/> + 1, 'XML 
Test',
-            '<span>An XML Test</span>')
+          insert into department (id, name, description)
+          values(<sql:ancestor-value name="maxid" level="1"/>,
+                 'XML Test <sql:ancestor-value name="maxid" level="1"/>',
+                 '&lt;span&gt;A <sql:ancestor-value name="maxid" level="1"/>th 
attempt to insert &lt;i&gt;XML&lt;/i&gt; into the database.&lt;/span&gt;')
         </sql:query>
+
+        <!--
+          - Output data after update is complete.
+          -->
+        <sql:execute-query>
+          <sql:query>
+            select id, name, description from department
+          </sql:query>
+        </sql:execute-query>
+
       </sql:execute-query>
     </sql:execute-query>
   </content>

Modified: cocoon/branches/BRANCH_2_1_X/status.xml
URL: 
http://svn.apache.org/viewcvs/cocoon/branches/BRANCH_2_1_X/status.xml?rev=168611&r1=168610&r2=168611&view=diff
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Fri May  6 07:51:55 2005
@@ -196,6 +196,11 @@
 
   <changes>
   <release version="@version@" date="@date@">
+    <action dev="VG" type="fix" fixes-bug="25098">
+      Databases: SQLTransformer: Support queries nested into 
insert/delete/update
+      queries. Return number of rows updated by insert/delete/update queries as
+      <code>returncode</code> element.
+    </action>
     <action dev="VG" type="fix">
       Databases: SQLTransformer: Each query can now have connection with own
       database connection configuration parameters. Queries with same 
configuration


Reply via email to