/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Rodrigo Westrupp */ package com.caucho.quercus.lib.db; import com.caucho.quercus.env.Value; import com.caucho.util.L10N; import java.sql.CallableStatement; import java.util.HashMap; import java.util.logging.Logger; /** * Oracle statement class. Since Oracle has no object oriented API, * this is essentially a JdbcStatementResource. */ public class OracleStatement extends JdbcStatementResource { private static final Logger log = Logger.getLogger( OracleStatement.class.getName()); private static final L10N L = new L10N(OracleStatement.class); // Oracle statement has a notion of number of fetched rows // (See also: OracleModule.oci_num_rows) private int _fetchedRows; // Binding variables for Oracle statements private HashMap<String,Integer> _bindingVariables = new HashMap<String,Integer>(); private OracleOciLob _outParameter; // Oracle internal result buffer private Value _resultBuffer; // Binding variables for Oracle statements with define_by_name // (TOTALLY DIFFERENT FROM ?) // // Example: // // $stmt = oci_parse($conn, "SELECT empno, ename FROM emp"); // // /* the define MUST be done BEFORE oci_execute! */ // // oci_define_by_name($stmt, "EMPNO", $empno); // oci_define_by_name($stmt, "ENAME", $ename); // // oci_execute($stmt); // // while (oci_fetch($stmt)) { // echo "empno:" . $empno . "\n"; // echo "ename:" . $ename . "\n"; // } // private HashMap<String,Value> _byNameVariables = new HashMap<String,Value>(); /** * Constructs an OracleStatement * * @param conn Oracle connection */ OracleStatement(Oracle conn) { super(conn); _fetchedRows = 0; _outParameter = null; } /** * Assigns a variable name to the corresponding index * * @param name the variable name * @param value the corresponding index */ public void putBindingVariable(String name, Integer value) { _bindingVariables.put(name, value); } /** * Returns a binding variable index * * @param name the variable name * @return the binding variable index */ public Integer getBindingVariable(String name) { return _bindingVariables.get(name); } /** * Removes a binding variable * * @param name the binding variable name * @return the binding variable index */ public Integer removeBindingVariable(String name) { return _bindingVariables.remove(name); } /** * Returns all binding variables * * @return a HashMap of variable name to index values */ public HashMap<String,Integer> getBindingVariables() { return _bindingVariables; } /** * Removes all binding variables */ public void resetBindingVariables() { _bindingVariables = new HashMap<String,Integer>(); } /** * Sets the internal result buffer */ public void setResultBuffer(Value resultBuffer) { _resultBuffer = resultBuffer; } /** * Returns the internal result buffer * * @return the result buffer */ public Value getResultBuffer() { return _resultBuffer; } /** * Assigns a value to a variable * * @param name a variable name * @param value the variable value */ public void putByNameVariable(String name, Value value) { _byNameVariables.put(name, value); } /** * Returns the variable value by name * * @param name the variable name * @return the variable value */ public Value getByNameVariable(String name) { return _byNameVariables.get(name); } /** * Removes a variable given the corresponding name * * @param name the variable name * @return the variable value */ public Value removeByNameVariable(String name) { return _byNameVariables.remove(name); } /** * Returns all variable names and corresponding values * * @return a HashMap of variable names to corresponding values */ public HashMap<String,Value> getByNameVariables() { return _byNameVariables; } /** * Removes all variables */ public void resetByNameVariables() { _byNameVariables = new HashMap<String,Value>(); } /** * Increases the number of fetched rows. * * @return the new number of fetched rows */ protected int increaseFetchedRows() { return ++_fetchedRows; } /** * Gets the underlying callable statement. */ protected CallableStatement getCallableStatement() { return (CallableStatement) getPreparedStatement(); } /** * Gets the number of fetched rows. * * @return the number of fetched rows */ protected int getFetchedRows() { return _fetchedRows; } /** * Gets the out parameter. * * @return the out parameter */ protected OracleOciLob getOutParameter() { return _outParameter; } /** * Sets the out parameter. * * @param outParameter the new out parameter */ protected void setOutParameter(OracleOciLob outParameter) { _outParameter = outParameter; } }