Author: sumedha
Date: Mon Jan  7 04:09:48 2008
New Revision: 11961

Log:

element & attribute support, prevented db connection close when calling nested 
queries.

Modified:
   
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java

Modified: 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java
==============================================================================
--- 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java  
    (original)
+++ 
trunk/commons/data-services/src/main/java/org/wso2/ws/dataservice/DBUtils.java  
    Mon Jan  7 04:09:48 2008
@@ -171,7 +171,7 @@
                        }else {
                                //This can be a stored procedure call
                                resultElement =
-                                       getStoredProcedureResult(queryElement, 
inputs, params, paramOrder,paramType, axisService);
+                                       getStoredProcedureResult(queryElement, 
inputs, params, paramOrder,paramType, axisService,callFromNestedQuery);
 
                        }
                } catch (Exception e) {
@@ -250,7 +250,8 @@
        }
        
        private static OMElement getStoredProcedureResult(OMElement 
queryElement,HashMap inputValues,
-                       HashMap params, HashMap paramOrder,HashMap paramType, 
AxisService axisService)
+                       HashMap params, HashMap paramOrder,HashMap paramType, 
AxisService axisService
+                       ,boolean callFromNestedQuery)
        throws AxisFault{
                OMElement resultElement = null;
                Connection conn = null;
@@ -283,8 +284,7 @@
                        }
                        
 
-                       //check for out parameters
-                       
+                       //check for out parameters                      
                        OMElement result = 
queryElement.getFirstChildWithName(new QName("result"));
                        Query query = new 
Query(queryElement.getChildrenWithName(new QName("param")));
                        Result resultObj = new Result(result);
@@ -328,20 +328,17 @@
 
                                        boolean useAsParamToNextQuery = false;
                                        for(int a=0;a < 
resultObj.getDisplayColumnNames().length;a++){
-                                               //OMElement element = 
(OMElement) elements.next();
-                                               if 
(resultObj.getElementLocalNames()[a].equals("element")) {
-                                                       //String displayTagName 
= element.getAttributeValue(new QName("name"));
+                                               //can be one of 
'element','attribute','text','link' or 'header' 
+                                               String outPutElementType = 
resultObj.getElementLocalNames()[a];
+                                               
+                                               if 
(outPutElementType.equals("element")
+                                                               || 
outPutElementType.equals("attribute")) {
                                                    String displayTagName = 
resultObj.getDisplayColumnNames()[a];
-                                                       //String 
resultSetFieldName =   element.getAttributeValue(new QName("column"));
                                                    String resultSetFieldName = 
resultObj.getResultSetColumnNames()[a];
 
                                                        // This means,the 
parameter is not part of the
                                                        // resultset. i.e. it 
is being passed from user's
-                                                       // parameters.
-                                                   
-                                                       //TODO **********
-
-                                                       
+                                                       // parameters.          
                                            
 
                                                        if 
(useAsParamToNextQuery) {
                                                                elementValue = 
(String) params.get(resultSetFieldName);
@@ -355,15 +352,14 @@
                                                                        
elementValue = setOutparameterValue(cs, query,resultSetFieldName);              
                                                
                                                        }
 
-                                                       if (columnDefalut == 
null || columnDefalut.equals("element")) {
+                                                       if 
(outPutElementType.equals("element")) {
                                                                OMElement 
rowElement = fac.createOMElement(displayTagName, omNs);
                                                                
rowElement.addChild(fac.createOMText(rowElement, elementValue));
                                                                
row.addChild(rowElement);
-                                                       } else if 
(columnDefalut.equals("attribute")) {
+                                                       } else if 
(outPutElementType.equals("attribute")) {
                                                                
row.addAttribute(displayTagName, elementValue, omNs);
                                                        }
                                                } else if 
(resultObj.getElementLocalNames()[a].equals("call-query")) {
-                               //OMElement element = (OMElement) 
elements.next();                                                  
                                                    OMElement element = 
(OMElement)tmpElementsArrayList.get(a);
                                                        OMElement rowElement = 
getRDBMSResult(element, axisService, elementValues,true);
                                                        
row.addChild(rowElement);
@@ -422,7 +418,7 @@
                
                finally {
                        try {
-                               if (conn != null) {
+                               if (conn != null && !callFromNestedQuery) {
                                        conn.commit();
                                        conn.close();
                                }
@@ -493,7 +489,7 @@
                OMFactory fac = null;
                OMNamespace omNs = null;
                Result resultObj = null;
-               String columnDefalut = null;
+               String columnDefault = null;
 
  
                
@@ -528,11 +524,15 @@
                        //TODO : need to define a way to get values 
automatically
                                
//getDefaultValuesForResultsWrapper(wrapperElementName,rowElementName);
                                // check ??
-                               columnDefalut = result.getAttributeValue(new 
QName("columnDefault"));
+                               columnDefault = result.getAttributeValue(new 
QName("columnDefault"));
                                fac = OMAbstractFactory.getOMFactory();
-                               omNs = 
fac.createOMNamespace(axisService.getTargetNamespace(), "data");
+                               String resultElementNS = 
result.getAttributeValue(new QName("defaultNamespace"));
+                               
+                               //omNs = 
fac.createOMNamespace(axisService.getTargetNamespace(), "data");
+                               omNs = fac.createOMNamespace(resultElementNS, 
"data");
                                //OMNamespace omNs = fac.createOMNamespace("", 
"data");
                                resultElement = 
fac.createOMElement(resultObj.getResultWrapper(), omNs);                        
+                               //resultElement = 
fac.createOMElement(resultObj.getResultWrapper(),null);
                        }
                        
 

_______________________________________________
Commons-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev

Reply via email to