1 29 30 package com.caucho.quercus.lib.db; 31 32 import com.caucho.quercus.env.Env; 33 import com.caucho.quercus.env.LongValue; 34 import com.caucho.quercus.env.UnsetValue; 35 import com.caucho.quercus.env.Value; 36 import com.caucho.util.L10N; 37 38 import java.util.ArrayList ; 39 import java.util.logging.Level ; 40 import java.util.logging.Logger ; 41 import java.util.regex.Matcher ; 42 import java.util.regex.Pattern ; 43 44 45 49 public class PostgresStatement extends JdbcStatementResource { 50 private static final Logger log = Logger.getLogger(PostgresStatement.class.getName()); 51 private static final L10N L = new L10N(PostgresStatement.class); 52 53 private ArrayList <LongValue> _preparedMapping = new ArrayList <LongValue>(); 57 58 63 PostgresStatement(Postgres conn) 64 { 65 super(conn); 66 } 67 68 74 public boolean execute(Env env) 75 { 76 try { 77 78 int size = _preparedMapping.size(); 79 80 int matches = 0; 81 82 for (int i = 0; i < size; i++) { 83 LongValue param = _preparedMapping.get(i); 84 85 Value paramV = getParam(param.toInt()-1); 86 87 if (paramV.equals(UnsetValue.UNSET)) { 88 env.warning(L.l("Not all parameters are bound")); 89 return false; 90 } 91 92 Object object = paramV.toJavaObject(); 93 94 setObject(i+1, object); 95 } 96 97 return executeStatement(); 98 99 } catch (Exception e) { 100 env.warning(L.l(e.toString())); 101 log.log(Level.FINE, e.toString(), e); 102 return false; 103 } 104 } 105 106 112 public boolean prepare(String query) 113 { 114 try { 115 116 _preparedMapping.clear(); 117 118 Pattern pattern = Pattern.compile("\\$([0-9]+)"); 122 Matcher matcher = pattern.matcher(query); 123 while (matcher.find()) { 124 int phpParam; 125 try { 126 phpParam = Integer.parseInt(matcher.group(1)); 127 } catch(Exception ex) { 128 _preparedMapping.clear(); 129 return false; 130 } 131 _preparedMapping.add(LongValue.create(phpParam)); 132 } 133 134 query = query.replaceAll("\\$[0-9]+", "?"); 139 140 return super.prepare(query); 142 143 } catch (Exception e) { 144 log.log(Level.FINE, e.toString(), e); 145 return false; 146 } 147 } 148 149 protected int getPreparedMappingSize() 150 { 151 return _preparedMapping.size(); 152 } 153 } 154 | Popular Tags |