private boolean setLobParameter(Env env, int index, Value value) { if (_preparedStmt == null) { return false; } try { if (value == null || value.isNull()) { _preparedStmt.setObject(index, null); } else if (value.isString()) { _preparedStmt.setBinaryStream(index, value.toInputStream(), value.length()); } else { InputStream inputStream = value.toInputStream(); if (inputStream == null) { env.warning( L.l( "type {0} ({1}) for parameter index {2} cannot be used for lob", value.getType(), value.getClass(), index)); return false; } int length = -1; if (value instanceof FileReadValue) { length = (int) ((FileReadValue) value).getLength(); if (length <= 0) length = -1; } if (length < 0) { TempBuffer tempBuffer = TempBuffer.allocate(); try { byte[] bytes = new byte[1024]; int len; while ((len = inputStream.read(bytes, 0, 1024)) != -1) tempBuffer.write(bytes, 0, len); } catch (IOException e) { env.warning(e); return false; } TempReadStream tempReadStream = new TempReadStream(tempBuffer); tempReadStream.setFreeWhenDone(true); _preparedStmt.setBinaryStream( index, new ReadStream(tempReadStream), tempBuffer.getLength()); } else { _preparedStmt.setBinaryStream(index, inputStream, length); } } } catch (SQLException e) { setError(env, e); return false; } return true; }
protected static Value create( Env env, QuercusClass cls, Value data, int options, boolean dataIsUrl, Value namespaceV, boolean isPrefix) { if (data.length() == 0) { env.warning(L.l("xml data must have length greater than 0")); return BooleanValue.FALSE; } try { String namespace = null; if (!namespaceV.isNull()) namespace = namespaceV.toString(); Node node = parse(env, data, options, dataIsUrl, namespace, isPrefix); if (node == null) { return BooleanValue.FALSE; } SimpleXMLElement elt = buildNode(env, cls, null, node, namespace, isPrefix); return wrapJava(env, cls, elt); } catch (IOException e) { env.warning(e); return BooleanValue.FALSE; } catch (ParserConfigurationException e) { env.warning(e); return BooleanValue.FALSE; } catch (SAXException e) { env.warning(e); return BooleanValue.FALSE; } }