KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > rmi > server > RmiPreparedStatementServerSide


1 package com.daffodilwoods.rmi.server;
2
3 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.
4
    _SelectIterator;
5 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.table.
6
    SelectIterator;
7 import com.daffodilwoods.rmi.interfaces._RmiPreparedStatement;
8 import com.daffodilwoods.database.resource.*;
9 import com.daffodilwoods.rmi.interfaces.*;
10 import com.daffodilwoods.database.general.*;
11 import com.daffodilwoods.daffodildb.server.serversystem.*;
12 import java.rmi.server.*;
13 import java.rmi.*;
14 import java.util.*;
15 import com.daffodilwoods.daffodildb.server.datadictionarysystem.
16
    _ColumnCharacteristics;
17 import com.daffodilwoods.daffodildb.server.sql99.utils._VariableValues;
18
19 import com.daffodilwoods.daffodildb.server.sql99.dql.resultsetmetadata.
20
    _SelectColumnCharacteristics;
21 import com.daffodilwoods.rmi.RmiBlob;
22 import com.daffodilwoods.rmi.RmiClob;
23 import com.daffodilwoods.daffodildb.server.sql99.dml.DMLResult;
24
25 public class RmiPreparedStatementServerSide
26     extends UnicastRemoteObject
27     implements _RmiPreparedStatement {
28
29   _PreparedStatement preparedStatement;
30   String JavaDoc query;
31   _Connection connection;
32   _RmiConnection rmiConnection;
33   RmiSelectIteratorServerSide rmiSelectIterator;
34   RmiPreparedStatementFactory factory;
35
36   public RmiPreparedStatementServerSide() throws RemoteException {
37
38   }
39
40   void initialize(_PreparedStatement preparedStatement,
41                   _RmiConnection rmiConnection1,
42                   RmiPreparedStatementFactory factory0) {
43     this.preparedStatement = preparedStatement;
44     rmiConnection = rmiConnection1;
45     factory = factory0;
46   }
47
48   void deInitialize() {
49     preparedStatement = null;
50     query = null;
51     connection = null;
52     rmiConnection = null;
53     rmiSelectIterator = null;
54     factory = null;
55   }
56
57   public int getParameterCount() throws RemoteException {
58     return preparedStatement.getParameterCount();
59   }
60
61   public void setQuery(String JavaDoc query) throws RemoteException {
62     this.query = query;
63   }
64
65   public void setConnection(_Connection connection) throws RemoteException {
66     this.connection = connection;
67   }
68
69   public _ColumnCharacteristics getColumnCharacteristics() throws DException,
70       RemoteException {
71     _SelectColumnCharacteristics scc = (_SelectColumnCharacteristics)
72         preparedStatement.getColumnCharacteristics();
73     int columnCount = scc.getColumnCount();
74     ColumnInfo[] columnInfo = new ColumnInfo[columnCount];
75     for (int i = 0; i < columnCount; i++) {
76       columnInfo[i] = new ColumnInfo();
77       ColumnInfo ci = columnInfo[i];
78       int columnIndex = i + 1;
79       ci.catalogName = scc.getCatalogName(columnIndex);
80       ci.columnLabel = scc.getColumnLabel(columnIndex);
81       ci.isColumnUpdatable = scc.isColumnUpdatable(columnIndex);
82       ci.name = scc.getColumnName(columnIndex);
83       ci.nullable = scc.isNullable(columnIndex);
84       ci.precision = scc.getPrecision(columnIndex);
85       ci.qualifiedTableName = scc.getQualifiedTableName(columnIndex);
86       ci.scale = scc.getScale(columnIndex);
87       ci.schemaName = scc.getSchemaName(columnIndex);
88       ci.size = scc.getSize(columnIndex);
89       ci.tableName = scc.getTableName(columnIndex);
90       ci.type = scc.getColumnType(columnIndex);
91     }
92     return new RmiSelectColumnCharacteristics(columnInfo);
93   }
94
95   public Object JavaDoc execute(Parameters param, int QueryTimeOut) throws DException,
96       RemoteException {
97     int type = param.getType();
98     Object JavaDoc parameters = param.getObjects();
99     boolean blobClobPresent = param.isBlobClobPresent();
100     if (type == param.OBJECT_ARRAY) {
101       Object JavaDoc result = getRequiredObjectOfExecute(preparedStatement.execute(
102           blobClobPresent ? getChangedParameters( (Object JavaDoc[]) parameters)
103           : (Object JavaDoc[]) parameters, QueryTimeOut));
104       if (result instanceof DMLResult) {
105         _ColumnCharacteristics cc = (_ColumnCharacteristics) ( (DMLResult)
106             result).getColumnCharacteristics();
107         if (cc != null && (cc instanceof RmiSelectColumnCharacteristics) == false) {
108           int columnCount = cc.getColumnCount();
109           ColumnInfo[] ci = new ColumnInfo[columnCount];
110           for (int i = 1; i <= columnCount; i++) {
111             ci[i-1] = new ColumnInfo(cc.getTableName(i), cc.getCatalogName(i),
112                                     cc.getSchemaName(i),
113                                     cc.getColumnName(i), cc.getColumnType(i),
114                                     cc.getSize(i), cc.getPrecision(i),
115                                     cc.getScale(i), cc.isNullable(i),
116                                     cc.getColumnLabel(i),
117                                     cc.getQualifiedTableName(i),
118                                     cc.isAutoIncrement(i));
119
120           }
121           ( (DMLResult) result).setColumnCharacteristics(new RmiSelectColumnCharacteristics(ci));
122         }
123       }
124       return result;
125     }
126     if (type == param.HASHMAP)
127       return getRequiredObjectOfExecute(preparedStatement.execute(
128           blobClobPresent ? getChangedParameters( (HashMap) parameters)
129           : (HashMap) parameters, QueryTimeOut));
130     throw new DException("DSE0", new Object JavaDoc[] {"Invalid parameter type"});
131   }
132
133   private Object JavaDoc getRequiredObjectOfExecute(Object JavaDoc result) throws DException,
134       RemoteException {
135     if (result instanceof _SelectIterator) {
136       boolean sendObject = false;
137       if (rmiSelectIterator == null) {
138         rmiSelectIterator = new RmiSelectIteratorServerSide( (_SelectIterator)
139             result, rmiConnection);
140         sendObject = true;
141       }
142       rmiSelectIterator.setConnection(connection);
143       rmiSelectIterator.setQuery(query);
144       rmiSelectIterator.changeSelectIterator( (_SelectIterator) result);
145       return sendObject ? rmiSelectIterator : null;
146     }
147     return result;
148   }
149
150   public Object JavaDoc executeForFresh(Parameters param) throws com.daffodilwoods.
151
      database.resource.DException, java.rmi.RemoteException JavaDoc {
152     Object JavaDoc[] parm1 = (Object JavaDoc[]) param.getObjects();
153     return getRequiredObjectOfExecute(preparedStatement.executeForFresh(parm1));
154   }
155
156   public _ParameterMetaData getParameterMetaData() throws DException,
157       RemoteException {
158     return preparedStatement.getParameterMetaData();
159   }
160
161   public int getQueryType() {
162     return preparedStatement.getQueryType();
163   }
164
165   public void close() throws RemoteException {
166     preparedStatement.close();
167     if (rmiSelectIterator != null)
168       UnicastRemoteObject.unexportObject(rmiSelectIterator, true);
169     factory.freeStatement(this);
170   }
171
172   private Object JavaDoc[] getChangedParameters(Object JavaDoc[] parm1) throws
173       RemoteException {
174     if (parm1 != null) {
175       for (int i = 0; i < parm1.length; i++) {
176         if (parm1[i] instanceof _RmiBlob)
177           parm1[i] = new RmiBlob( (_RmiBlob) parm1[i]);
178         else if (parm1[i] instanceof _RmiClob)
179           parm1[i] = new RmiClob( (_RmiClob) parm1[i]);
180       }
181     }
182     return parm1;
183   }
184
185   private HashMap getChangedParameters(HashMap parm1) throws
186       RemoteException {
187     if (parm1 != null) {
188       Object JavaDoc[] keys = parm1.keySet().toArray();
189       if (keys != null) {
190         for (int i = 0; i < keys.length; i++) {
191           Object JavaDoc value = parm1.get(keys[i]);
192           if (value instanceof _RmiBlob) {
193             parm1.put(keys[i], new RmiBlob( (_RmiBlob) value));
194           }
195           else if (value instanceof _RmiClob) {
196             parm1.put(keys[i], new RmiClob( (_RmiClob) value));
197           }
198         }
199       }
200     }
201     return parm1;
202   }
203 }
204
Popular Tags