| 1 package com.daffodilwoods.daffodildb.server.serversystem; 2 3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 4 import com.daffodilwoods.daffodildb.server.sessionsystem.*; 5 import com.daffodilwoods.daffodildb.server.sql99.*; 6 import com.daffodilwoods.daffodildb.server.sql99.common.*; 7 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqlcontrolstatement.*; 8 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqlsessionstatement.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqltransactionstatement.*; 10 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dml.*; 12 import com.daffodilwoods.daffodildb.server.sql99.dml.declarecursor.*; 13 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*; 14 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*; 15 import com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression.*; 16 import com.daffodilwoods.daffodildb.utils.parser.*; 17 import com.daffodilwoods.database.general.*; 18 import com.daffodilwoods.database.resource.*; 19 public class Connection extends ServerSession implements _Connection { 20 21 public Connection() throws DException { 22 } 23 public Connection( String databaseURL, _UserSession userSession,ServerSystem serverSystem) throws DException { 24 super(databaseURL, userSession, serverSystem); 25 } 26 27 28 29 public Object parseQuery(String query) throws DException { 30 return Parser.parseQuery( query ); 31 } 32 33 34 35 public _PreparedStatement getPreparedStatement( String query ) throws DException{ 36 return getPreparedStatement(query,getType() ); 37 } 38 39 40 public _PreparedStatement getPreparedStatement( String query ,int type) throws DException{ 41 long time = System.currentTimeMillis(); 42 long time1 = -1; 43 try { 44 if (connectionStatus) 45 throw new DException("DSE279", null); 46 Object parsedQuery = Parser.parseQuery(query); 47 time1 = System.currentTimeMillis() - time; 48 return getPreparedStatement(parsedQuery, query, type); 49 50 } 51 catch (RuntimeException re) { 52 PrintHandler.print(query, verboseUser, re); 53 throw re; 54 } 55 catch (DException ex) { 56 PrintHandler.print(query, verboseUser, ex); 57 throw ex; 58 } 59 finally { 60 time = System.currentTimeMillis() - time; 61 if (time > 25) 62 ; } 64 } 65 66 public _PreparedStatement getPreparedStatement(String query, int type, 67 int autoGeneratedType, 68 Object autoGenetatedValues) throws 69 DException { 70 71 if (connectionStatus) 72 throw new DException("DSE279", null); 73 Object parsedQuery = Parser.parseQuery(query); 74 if (parsedQuery instanceof SQLdatastatement) { 75 if ( ( (String ) getUserSession().getTransactionAccessMode()). 76 equalsIgnoreCase("Read Only")) 77 throw new DException("DSE1184", (Object [])null); 78 _StatementExecutionContext sec = getStatementExecutionContext(); 79 SQLdatastatement sqldatastatement = (SQLdatastatement) parsedQuery; 80 Object [] parameters = sqldatastatement.getParameters(this); 81 sec.setAutoGeneratedInfo(autoGeneratedType, autoGenetatedValues); 82 _Executer executer = (_Executer) sqldatastatement.run(sec); 83 ParameterMetaData parameterMetaData = new ParameterMetaData(query, ((SQLdatachangestatement) parsedQuery).getParameterInfo()); 84 PreparedStatement preparedStatment = new PreparedStatement(executer, 85 parameters == null ? 0 : parameters.length, parameterMetaData, query, verboseUser,this); 86 preparedStatment.setQueryType(PreparedStatement.SQLdatastatement); 87 return preparedStatment; 88 } 89 else 90 return getPreparedStatement(parsedQuery, query, type); 91 92 } 93 94 public _PreparedStatement getPreparedStatement(Object parsedQuery,String query,int type) throws DException{ 95 if( parsedQuery instanceof queryexpression ){ 96 queryexpression qurexp = (queryexpression)parsedQuery; 97 ServerSessionWrapper sersewr = new ServerSessionWrapper(this); 98 if(type == IteratorConstants.UPDATABLE) 99 if(!qurexp.isSimpleQuery(sersewr)) 100 type = IteratorConstants.NONSCROLLABLE; 101 sersewr.setType(type); 102 _Executer executer = (_Executer) qurexp.run( sersewr ); 103 ParameterMetaData parameterMetaData = new ParameterMetaData(query, qurexp.getParameterInfo()); 104 Object [] parameters = qurexp.getParameters(this); 105 PreparedStatement preparedStatment = new PreparedStatement(executer, 106 parameters == null 107 ? 0 : parameters.length,parameterMetaData,query, verboseUser,this); 108 preparedStatment.setQueryType(PreparedStatement.queryexpression); 109 return preparedStatment; 110 } 111 if( parsedQuery instanceof SQLdatastatement ){ 112 if( ((String )getUserSession().getTransactionAccessMode()).equalsIgnoreCase("Read Only")) 113 throw new DException("DSE1184", (Object [])null); 114 115 _StatementExecutionContext sec = getStatementExecutionContext(); 116 SQLdatastatement sqldatastatement = (SQLdatastatement)parsedQuery; 117 Object [] parameters = sqldatastatement.getParameters(this); 118 _Executer executer = (_Executer) sqldatastatement.run( sec ); 119 ParameterMetaData parameterMetaData = new ParameterMetaData(query, ((SQLdatachangestatement) parsedQuery).getParameterInfo()); 120 PreparedStatement preparedStatment = new PreparedStatement(executer, 121 parameters == null ? 0: parameters.length ,parameterMetaData ,query, verboseUser,this); 122 preparedStatment.setQueryType(PreparedStatement.SQLdatastatement); 123 return preparedStatment; 124 125 } 126 if(parsedQuery instanceof SQLschemastatement ){ 127 if( ((String )getUserSession().getTransactionAccessMode()).equalsIgnoreCase("Read Only")) 128 throw new DException("DSE1184", (Object [])null); 129 NonPreparedStatement nps = new NonPreparedStatement(this, (StatementExecuter)parsedQuery, verboseUser); 130 nps.setQueryType(PreparedStatement.SQLschemastatement); 131 return nps; 132 } 133 if( parsedQuery instanceof SQLtransactionstatement ){ 134 NonPreparedStatement nps = new NonPreparedStatement(this, (StatementExecuter)parsedQuery, verboseUser); 135 nps.setQueryType(PreparedStatement.SQLtransactionstatement); 136 return nps; 137 138 } 139 if( parsedQuery instanceof SQLsessionstatement ){ 140 NonPreparedStatement nps = new NonPreparedStatement(this, (StatementExecuter)parsedQuery, verboseUser); 141 nps.setQueryType(PreparedStatement.SQLsessionstatement); 142 return nps; 143 } 144 if( parsedQuery instanceof SQLcontrolstatement ){ 145 146 _StatementExecutionContext sec = getStatementExecutionContext(); 147 SQLcontrolstatement sqlcontrolstatement = (SQLcontrolstatement)parsedQuery; 148 Object [] parameters = sqlcontrolstatement.getParameters(this); 149 _Executer executer = (_Executer) sqlcontrolstatement.run( sec ); 150 ParameterMetaData pmd = new ParameterMetaData(query,sqlcontrolstatement.getParameterInfo()); 151 PreparedStatement preparedStatment = new PreparedStatement(executer, 152 parameters == null ? 0: parameters.length ,pmd,query, verboseUser,this); 153 preparedStatment.setQueryType(PreparedStatement.callstatement); 154 return preparedStatment; 155 156 } 157 throw new DException("DSE565",new Object []{"Query"}); 158 } 159 160 161 162 165 public Object [] executeBatch(String query) throws DException{ 166 Object [] parsedQuery = null; 167 try { 168 parsedQuery = (Object [])Parser.parseBatch(query); 169 } 170 catch (DException ex) { 171 PrintHandler.print(query, verboseUser, ex); 172 throw ex; 173 } 174 Object [] result = new Object [parsedQuery.length]; 175 for (int i = 0; i < result.length; i++) { 176 PrintHandler.print(" " + parsedQuery[i].toString()); 177 if( parsedQuery[i] instanceof insertstatement){ 178 if(super.userSession.getTransactionAccessMode().equals("Read Only")) 179 throw new DException("DSE1184", (Object [])null); 180 181 insertstatement in = (insertstatement) parsedQuery[i]; 182 _StatementExecutionContext sec = getStatementExecutionContext(); 183 in.run( sec ); 184 ParameterInfo[] parameterInfo = in.getParameterInfo(); 185 if( parameterInfo != null && parameterInfo.length > 0){ 186 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 187 QueryInfo qi = new QueryInfo(parsedQuery[i].toString(), QueryInfo.INSERT, parameterMetaData ); 188 result[i] = qi; 189 } 190 else 191 { 192 QueryInfo qi = new QueryInfo(parsedQuery[i].toString(), QueryInfo.INSERT , null ); 193 result[i] = qi; 194 } 195 } 196 else if( parsedQuery[i] instanceof updatestatementsearched){ 197 if(super.userSession.getTransactionAccessMode().equals("Read Only")) 198 throw new DException("DSE1184", (Object [])null); 199 updatestatementsearched up = (updatestatementsearched) parsedQuery[i]; 200 _StatementExecutionContext sec = getStatementExecutionContext(); 201 up.run( sec ); 202 ParameterInfo[] parameterInfo = up.getParameterInfo(); 203 if( parameterInfo != null && parameterInfo.length > 0){ 204 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 205 QueryInfo qu = new QueryInfo(parsedQuery[i].toString(), QueryInfo.UPDATE, parameterMetaData ); 206 result[i] = qu; 207 } 208 else 209 { 210 QueryInfo qu = new QueryInfo(parsedQuery[i].toString(), QueryInfo.UPDATE, null ); 211 result[i] = qu; 212 } 213 214 } 215 else if(parsedQuery[i] instanceof deletestatementsearched){ 216 if(super.userSession.getTransactionAccessMode().equals("Read Only")) 217 throw new DException("DSE1184", (Object [])null); 218 deletestatementsearched ds = (deletestatementsearched) parsedQuery[i]; 219 _StatementExecutionContext sec = getStatementExecutionContext(); 220 ds.run( sec ); 221 ParameterInfo[] parameterInfo = ds.getParameterInfo(); 222 if( parameterInfo != null && parameterInfo.length > 0){ 223 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 224 QueryInfo qd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.DELETE, parameterMetaData ); 225 result[i] = qd; 226 } 227 else 228 { 229 QueryInfo qd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.DELETE, null ); 230 result[i] = qd; 231 } 232 } 233 else if(parsedQuery[i] instanceof queryexpression){ 234 queryexpression qs = (queryexpression) parsedQuery[i]; 235 qs.checkSemantic( this,true ); 236 ParameterInfo[] parameterInfo = qs.getParameterInfo(); 237 if( parameterInfo != null && parameterInfo.length > 0 ){ 238 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 239 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.SELECT, parameterMetaData ); 240 result[i] = qsd; 241 } 242 else 243 { 244 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.SELECT, null ); 245 result[i] = qsd; 246 } 247 } 248 else if(parsedQuery[i] instanceof SQLcontrolstatement){ 249 SQLcontrolstatement cs = (SQLcontrolstatement) parsedQuery[i]; 250 if(!(cs instanceof callstatement)){ 251 throw new DException("DSE531", null); 252 } 253 _StatementExecutionContext sec = getStatementExecutionContext(); 254 cs.checkSemantic(this); 255 ParameterInfo[] parameterInfo = cs.getParameterInfo(); 256 if( parameterInfo != null && parameterInfo.length > 0 ){ 257 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 258 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.CALLSTATEMENT, parameterMetaData ); 259 result[i] = qsd; 260 } 261 else 262 { 263 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.CALLSTATEMENT, null ); 264 result[i] = qsd; 265 } 266 } 267 else{ 268 if( parsedQuery[i] instanceof SQLsessionstatement ){ 269 _StatementExecutionContext sec = getStatementExecutionContext(); 270 ((SQLsessionstatement)parsedQuery[i]).run( sec ); 271 }else if (parsedQuery[i] instanceof SQLschemastatement ){ 272 commit(); 273 _ServerSession ss = getSystemServerSession(); 274 _DataDictionary dd = getDataDictionary(); 275 dd.lockDDL(); 276 try { 277 try { 278 ( (StatementExecuter) parsedQuery[i]).run(this); 279 } 280 catch (DException ex) { 281 dd.restoreGeneratedKeys(); 282 createIndexesList.clear(); 283 284 ss.rollback(); 285 throw ex; 286 } 287 288 if(!(parsedQuery[i] instanceof dropdatabasestatement)){ 289 ((ServerSession)ss).createIndexesList = createIndexesList; 290 ss.commit(); 291 createIndexesList.clear(); 292 } 293 } 294 finally { 295 dd.releaseDDL(); 296 } 297 } 298 else if(parsedQuery[i] instanceof SQLdatastatement) { 299 throw new DException("DSE8090",null); 300 } 301 else if(parsedQuery[i] instanceof declarecursor) { 302 throw new DException("DSE2053",null); 303 } 304 else 305 ( (StatementExecuter) parsedQuery[i]).run(this); 306 result[i] = new QueryInfo(parsedQuery[i].toString(), QueryInfo.OTHERS, null); 307 } 308 } 309 return result; 310 } 311 312 public _ServerSession getServerSession() { 313 return this; 314 } 315 public boolean isClosed() throws DException{ 316 return connectionStatus; 317 } 318 332 } 333 | Popular Tags |