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 ReadOnlyConnection extends Connection implements _Connection { 20 21 public ReadOnlyConnection() throws DException { 22 } 23 public ReadOnlyConnection( 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 throw new DException("DSE5558", (Object [])null); 76 } 77 else 78 return getPreparedStatement(parsedQuery, query, type); 79 80 } 81 82 public _PreparedStatement getPreparedStatement(Object parsedQuery,String query,int type) throws DException{ 83 if( parsedQuery instanceof queryexpression ){ 84 queryexpression qurexp = (queryexpression)parsedQuery; 85 ServerSessionWrapper sersewr = new ServerSessionWrapper(this); 86 if(type == IteratorConstants.UPDATABLE) 87 if(!qurexp.isSimpleQuery(sersewr)) 88 type = IteratorConstants.NONSCROLLABLE; 89 sersewr.setType(type); 90 _Executer executer = (_Executer) qurexp.run( sersewr ); 91 ParameterMetaData parameterMetaData = new ParameterMetaData(query, qurexp.getParameterInfo()); 92 Object [] parameters = qurexp.getParameters(this); 93 PreparedStatement preparedStatment = new PreparedStatement(executer, 94 parameters == null 95 ? 0 : parameters.length,parameterMetaData,query, verboseUser, this); 96 preparedStatment.setQueryType(PreparedStatement.queryexpression); 97 return preparedStatment; 98 } 99 if( parsedQuery instanceof SQLdatastatement ){ 100 throw new DException("DSE5558", (Object [])null); 101 102 } 103 if(parsedQuery instanceof SQLschemastatement ){ 104 throw new DException("DSE5558", (Object [])null); 105 } 106 if( parsedQuery instanceof SQLtransactionstatement ){ 107 throw new DException("DSE5558", (Object [])null); 108 109 } 110 if( parsedQuery instanceof SQLsessionstatement ){ 111 NonPreparedStatement nps = new NonPreparedStatement( this, (StatementExecuter)parsedQuery, verboseUser); 112 nps.setQueryType(PreparedStatement.SQLsessionstatement); 113 return nps; 114 } 115 if( parsedQuery instanceof SQLcontrolstatement ){ 116 if( ((String )getUserSession().getTransactionAccessMode()).equalsIgnoreCase("Read Only")) 117 throw new DException("DSE5558", (Object [])null); 118 119 _StatementExecutionContext sec = getStatementExecutionContext(); 120 SQLcontrolstatement sqlcontrolstatement = (SQLcontrolstatement)parsedQuery; 121 Object [] parameters = sqlcontrolstatement.getParameters(this); 122 _Executer executer = (_Executer) sqlcontrolstatement.run( sec ); 123 ParameterMetaData pmd = new ParameterMetaData(query,sqlcontrolstatement.getParameterInfo()); 124 PreparedStatement preparedStatment = new PreparedStatement(executer, 125 parameters == null ? 0: parameters.length ,pmd,query, verboseUser, this); 126 preparedStatment.setQueryType(PreparedStatement.callstatement); 127 return preparedStatment; 128 129 } 130 throw new DException("DSE565",new Object []{"Query"}); 131 } 132 133 134 135 138 public Object [] executeBatch(String query) throws DException{ 139 140 Object [] parsedQuery = null; 141 try { 142 parsedQuery = (Object [])Parser.parseBatch(query); 143 } 144 catch (DException ex) { 145 PrintHandler.print(query, verboseUser, ex); 146 throw ex; 147 } 148 Object [] result = new Object [parsedQuery.length]; 149 for (int i = 0; i < result.length; i++) { 150 PrintHandler.print(" " + parsedQuery[i].toString()); 151 if( parsedQuery[i] instanceof insertstatement){ 152 throw new DException("DSE5558", (Object [])null); 153 } 154 else if( parsedQuery[i] instanceof updatestatementsearched){ 155 throw new DException("DSE5558", (Object [])null); 156 157 } 158 else if(parsedQuery[i] instanceof deletestatementsearched){ 159 throw new DException("DSE5558", (Object [])null); 160 } 161 else if(parsedQuery[i] instanceof queryexpression){ 162 queryexpression qs = (queryexpression) parsedQuery[i]; 163 qs.checkSemantic( this,true ); 164 ParameterInfo[] parameterInfo = qs.getParameterInfo(); 165 if( parameterInfo != null && parameterInfo.length > 0 ){ 166 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 167 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.SELECT, parameterMetaData ); 168 result[i] = qsd; 169 } 170 else 171 { 172 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.SELECT, null ); 173 result[i] = qsd; 174 } 175 } 176 else if(parsedQuery[i] instanceof SQLcontrolstatement){ 177 SQLcontrolstatement cs = (SQLcontrolstatement) parsedQuery[i]; 178 if(!(cs instanceof callstatement)){ 179 throw new DException("DSE531", null); 180 } 181 _StatementExecutionContext sec = getStatementExecutionContext(); 182 cs.run(sec); 183 ParameterInfo[] parameterInfo = cs.getParameterInfo(); 184 if( parameterInfo != null && parameterInfo.length > 0 ){ 185 ParameterMetaData parameterMetaData = new ParameterMetaData(query, parameterInfo); 186 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.CALLSTATEMENT, parameterMetaData ); 187 result[i] = qsd; 188 } 189 else 190 { 191 QueryInfo qsd = new QueryInfo(parsedQuery[i].toString(), QueryInfo.CALLSTATEMENT, null ); 192 result[i] = qsd; 193 } 194 } 195 else{ 196 if( parsedQuery[i] instanceof SQLsessionstatement ){ 197 _StatementExecutionContext sec = getStatementExecutionContext(); 198 ((SQLsessionstatement)parsedQuery[i]).run( sec ); 199 }else if (parsedQuery[i] instanceof SQLschemastatement ){ 200 throw new DException("DSE5558", (Object [])null); 201 } 202 else if(parsedQuery[i] instanceof SQLdatastatement) { 203 throw new DException("DSE8090",null); 204 } 205 else if(parsedQuery[i] instanceof declarecursor) { 206 declarecursor ds = (declarecursor) parsedQuery[i]; 207 _StatementExecutionContext sec = getStatementExecutionContext(); 208 ds.run( sec ); 209 } 210 else 211 ( (StatementExecuter) parsedQuery[i]).run(this); 212 result[i] = new QueryInfo(parsedQuery[i].toString(), QueryInfo.OTHERS, null); 213 } 214 } 215 return result; 216 } 217 218 public _ServerSession getServerSession() { 219 return this; 220 } 221 235 } 236 | Popular Tags |