1 29 30 package com.caucho.quercus.lib.db; 31 32 import com.caucho.quercus.annotation.Optional; 33 import com.caucho.quercus.annotation.ReturnNullAsFalse; 34 import com.caucho.quercus.env.ArrayValue; 35 import com.caucho.quercus.env.ArrayValueImpl; 36 import com.caucho.quercus.env.BooleanValue; 37 import com.caucho.quercus.env.Env; 38 import com.caucho.quercus.env.LongValue; 39 import com.caucho.quercus.env.Value; 40 import com.caucho.util.L10N; 41 42 import java.sql.ResultSet ; 43 import java.sql.ResultSetMetaData ; 44 import java.sql.SQLException ; 45 import java.sql.Statement ; 46 import java.util.logging.Level ; 47 import java.util.logging.Logger ; 48 49 50 53 public class MysqliResult extends JdbcResultResource { 54 private static final Logger log 55 = Logger.getLogger(MysqliResult.class.getName()); 56 private static final L10N L 57 = new L10N(MysqliResult.class); 58 59 66 public MysqliResult(Statement stmt, 67 ResultSet rs, 68 Mysqli conn) 69 { 70 super(stmt, rs, conn); 71 } 72 73 79 public MysqliResult(ResultSetMetaData metaData, 80 Mysqli conn) 81 { 82 super(metaData, conn); 83 } 84 85 public String getResourceType() 86 { 87 return "mysql result"; 88 } 89 90 98 public boolean data_seek(Env env, int rowNumber) 99 { 100 if (seek(env, rowNumber)) { 101 return true; 102 } else { 103 return false; 104 } 105 } 106 107 120 @ReturnNullAsFalse 121 public ArrayValue fetch_array(Env env, 122 @Optional("MYSQLI_BOTH") int type) 123 { 124 return fetchArray(env, type); 125 } 126 127 133 public ArrayValue fetch_assoc(Env env) 134 { 135 return fetchArray(env, JdbcResultResource.FETCH_ASSOC); 136 } 137 138 146 public Value fetch_field_direct(Env env, int offset) 147 { 148 return fetchFieldDirect(env, offset); 149 } 150 151 158 public Value fetch_field(Env env) 159 { 160 return fetchNextField(env); 161 } 162 163 171 public Value fetch_fields(Env env) 172 { 173 return getFieldDirectArray(env); 174 } 175 176 186 public Value fetch_lengths() 187 { 188 return getLengths(); 189 } 190 191 199 public Value fetch_object(Env env) 200 { 201 return fetchObject(env); 202 } 203 204 211 public ArrayValue fetch_row(Env env) 212 { 213 return fetchArray(env, JdbcResultResource.FETCH_NUM); 214 } 215 216 222 public int field_count(Env env) 223 { 224 return getFieldCount(); 225 } 226 227 244 protected Value fetchFieldDirect(Env env, 245 int fieldOffset) 246 { 247 Value fieldTable = getFieldTable(env, fieldOffset); 248 Value fieldName = getFieldName(env, fieldOffset); 249 Value fieldAlias = getFieldNameAlias(fieldOffset); 250 Value fieldType = getJdbcType(fieldOffset); 251 Value fieldLength = getFieldLength(env, fieldOffset); 252 Value fieldScale = getFieldScale(fieldOffset); 253 Value fieldCatalog = getFieldCatalog(fieldOffset); 254 255 if ((fieldTable == BooleanValue.FALSE) 256 || (fieldName == BooleanValue.FALSE) 257 || (fieldAlias == BooleanValue.FALSE) 258 || (fieldType == BooleanValue.FALSE) 259 || (fieldLength == BooleanValue.FALSE) 260 || (fieldScale == BooleanValue.FALSE)) { 261 return BooleanValue.FALSE; 262 } 263 264 String sql = "SHOW FULL COLUMNS FROM " + fieldTable + " LIKE \'" + fieldName + "\'"; 265 266 MysqliResult metaResult; 267 268 metaResult = ((Mysqli) getConnection()).metaQuery(sql, fieldCatalog.toString()); 269 270 if (metaResult == null) 271 return BooleanValue.FALSE; 272 273 return metaResult.fetchFieldImproved(env, 274 fieldLength.toInt(), 275 fieldAlias.toString(), 276 fieldName.toString(), 277 fieldTable.toString(), 278 fieldType.toInt(), 279 fieldScale.toInt()); 280 } 281 282 290 protected Value fetchNextField(Env env) 291 { 292 int fieldOffset = getFieldOffset(); 293 294 Value result = fetchFieldDirect(env, fieldOffset); 295 296 setFieldOffset(fieldOffset + 1); 297 298 return result; 299 } 300 301 311 public boolean field_seek(Env env, int offset) 312 { 313 setFieldOffset(offset); 314 315 return true; 316 } 317 318 324 public int field_tell(Env env) 325 { 326 return getFieldOffset(); 327 } 328 329 332 public void free() 333 { 334 close(); 335 } 336 337 340 public void free_result() 341 { 342 close(); 343 } 344 345 350 public Value getFieldDirectArray(Env env) 351 { 352 ArrayValue array = new ArrayValueImpl(); 353 354 try { 355 int numColumns = getMetaData().getColumnCount(); 356 357 for (int i = 0; i < numColumns; i++) { 358 array.put(fetchFieldDirect(env, i)); 359 } 360 361 return array; 362 } catch (SQLException e) { 363 log.log(Level.FINE, e.toString(), e); 364 return BooleanValue.FALSE; 365 } 366 } 367 368 373 public int num_fields() 374 { 375 return getFieldCount(); 376 } 377 378 383 public Value num_rows() 384 { 385 int numRows = getNumRows(); 386 387 if (numRows < 0) { 388 return BooleanValue.FALSE; 389 } 390 391 return LongValue.create(numRows); 392 } 393 394 399 public String toString() 400 { 401 return "MysqliResult[" + super.toString() + "]"; 402 } 403 } 404 | Popular Tags |