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 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 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 execute(Parameters param, int QueryTimeOut) throws DException, 96 RemoteException { 97 int type = param.getType(); 98 Object parameters = param.getObjects(); 99 boolean blobClobPresent = param.isBlobClobPresent(); 100 if (type == param.OBJECT_ARRAY) { 101 Object result = getRequiredObjectOfExecute(preparedStatement.execute( 102 blobClobPresent ? getChangedParameters( (Object []) parameters) 103 : (Object []) 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 [] {"Invalid parameter type"}); 131 } 132 133 private Object getRequiredObjectOfExecute(Object 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 executeForFresh(Parameters param) throws com.daffodilwoods. 151 database.resource.DException, java.rmi.RemoteException { 152 Object [] parm1 = (Object []) 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 [] getChangedParameters(Object [] 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 [] keys = parm1.keySet().toArray(); 189 if (keys != null) { 190 for (int i = 0; i < keys.length; i++) { 191 Object 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 |