johng 2003/06/19 11:13:27
Modified: java/src/org/apache/xalan/lib/sql QueryParameter.java
Log:
Added code by Art Welsh to handle more of the SQL Types, and other attributes
about the parameter. such as IsOutput and the Name for XSL Variable reference
Revision Changes Path
1.9 +225 -27
xml-xalan/java/src/org/apache/xalan/lib/sql/QueryParameter.java
Index: QueryParameter.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/lib/sql/QueryParameter.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- QueryParameter.java 27 Jan 2003 18:44:08 -0000 1.8
+++ QueryParameter.java 19 Jun 2003 18:13:27 -0000 1.9
@@ -55,41 +55,58 @@
* <http://www.apache.org/>.
*/
+/* This class holds a parameter definition for a JDBC PreparedStatement or
CallableStatement. */
+
package org.apache.xalan.lib.sql;
-/**
- * Title: <p>
- * Description: <p>
- * Copyright: Copyright (c) <p>
- * Company: <p>
- * @author
- * @version 1.0
- */
-public class QueryParameter
+import java.util.Hashtable;
+import java.sql.PreparedStatement;
+import java.sql.CallableStatement;
+import java.sql.Statement;
+
+public class QueryParameter
{
+ private int m_type;
+ private String m_name;
+ private String m_value;
+ private boolean m_output;
+ private String m_typeName;
+ private static Hashtable m_Typetable = null;
- /**
- */
- private String value;
- /**
- */
- private String type;
+ public QueryParameter()
+ {
+ m_type = -1;
+ m_name = null;
+ m_value = null;
+ m_output = false;
+ m_typeName = null;
+ }
/**
- * @param v
- * @param t
+ * @param v The parameter value.
+ * @param t The type of the parameter.
*/
public QueryParameter( String v, String t )
{
- value = v;
- type = t;
+ m_name = null;
+ m_value = v;
+ m_output = false;
+ setTypeName(t);
+ }
+
+ public QueryParameter( String name, String value, String type, boolean
out_flag )
+ {
+ m_name = name;
+ m_value = value;
+ m_output = out_flag;
+ setTypeName(type);
}
/**
* @return
*/
public String getValue( ) {
- return value;
+ return m_value;
}
/**
@@ -97,21 +114,202 @@
* @return
*/
public void setValue( String newValue ) {
- value = newValue;
+ m_value = newValue;
+ }
+
+ /** Used to set the parameter type when the type information is provided
in the query.
+ * @param newType The parameter type.
+ * @return
+ */
+ public void setTypeName( String newType )
+ {
+ m_type = map_type(newType);
+ m_typeName = newType;
}
/**
- * @param newType
* @return
*/
- public void setType( String newType ) {
- type = newType;
+ public String getTypeName( )
+ {
+ return m_typeName;
}
/**
+ *
+ */
+ public int getType( )
+ {
+ return m_type;
+ }
+
+ /**
+ *
+ */
+ public String getName()
+ {
+ return m_name;
+ }
+
+ /**
+ * Set Name, this should really be covered in the constructor but the
+ * QueryParser has a State issue where the name is discoverd after the
+ * Parameter object needs to be created
+ */
+ public void setName(String n)
+ {
+ m_name = n;
+ }
+
+ /**
+ *
+ */
+ public boolean isOutput()
+ {
+ return m_output;
+ }
+
+ /**
+ * Set Name, this should really be covered in the constructor but the
+ * QueryParser has a State issue where the name is discoverd after the
+ * Parameter object needs to be created
+ */
+ public void setIsOutput(boolean flag)
+ {
+ m_output = flag;
+ }
+
+ private static int map_type(String typename)
+ {
+ if ( m_Typetable == null )
+ {
+ // Load up the type mapping table.
+ m_Typetable = new Hashtable();
+ m_Typetable.put("BIGINT", new Integer(java.sql.Types.BIGINT));
+ m_Typetable.put("BINARY", new Integer(java.sql.Types.BINARY));
+ m_Typetable.put("BIT", new Integer(java.sql.Types.BIT));
+ m_Typetable.put("CHAR", new Integer(java.sql.Types.CHAR));
+ m_Typetable.put("DATE", new Integer(java.sql.Types.DATE));
+ m_Typetable.put("DECIMAL", new Integer(java.sql.Types.DECIMAL));
+ m_Typetable.put("DOUBLE", new Integer(java.sql.Types.DOUBLE));
+ m_Typetable.put("FLOAT", new Integer(java.sql.Types.FLOAT));
+ m_Typetable.put("INTEGER", new Integer(java.sql.Types.INTEGER));
+ m_Typetable.put("LONGVARBINARY", new
Integer(java.sql.Types.LONGVARBINARY));
+ m_Typetable.put("LONGVARCHAR", new
Integer(java.sql.Types.LONGVARCHAR));
+ m_Typetable.put("NULL", new Integer(java.sql.Types.NULL));
+ m_Typetable.put("NUMERIC", new Integer(java.sql.Types.NUMERIC));
+ m_Typetable.put("OTHER", new Integer(java.sql.Types.OTHER));
+ m_Typetable.put("REAL", new Integer(java.sql.Types.REAL));
+ m_Typetable.put("SMALLINT", new Integer(java.sql.Types.SMALLINT));
+ m_Typetable.put("TIME", new Integer(java.sql.Types.TIME));
+ m_Typetable.put("TIMESTAMP", new Integer(java.sql.Types.TIMESTAMP));
+ m_Typetable.put("TINYINT", new Integer(java.sql.Types.TINYINT));
+ m_Typetable.put("VARBINARY", new Integer(java.sql.Types.VARBINARY));
+ m_Typetable.put("VARCHAR", new Integer(java.sql.Types.VARCHAR));
+
+ // Aliases from Xalan SQL extension.
+ m_Typetable.put("STRING", new Integer(java.sql.Types.VARCHAR));
+ m_Typetable.put("BIGDECIMAL", new Integer(java.sql.Types.NUMERIC));
+ m_Typetable.put("BOOLEAN", new Integer(java.sql.Types.BIT));
+ m_Typetable.put("BYTES", new Integer(java.sql.Types.LONGVARBINARY));
+ m_Typetable.put("LONG", new Integer(java.sql.Types.BIGINT));
+ m_Typetable.put("SHORT", new Integer(java.sql.Types.SMALLINT));
+ }
+
+ Integer type = (Integer) m_Typetable.get(typename.toUpperCase());
+ int rtype;
+ if ( type == null )
+ rtype = java.sql.Types.OTHER;
+ else
+ rtype = type.intValue();
+
+ return(rtype);
+ }
+
+ /**
+ * This code was in the XConnection, it is included for reference but it
+ * should not be used.
+ *
+ * @TODO Remove this code as soon as it is determined that its Use Case is
+ * resolved elsewhere.
+ */
+ /**
+ * Set the parameter for a Prepared Statement
+ * @param pos
+ * @param stmt
+ * @param p
* @return
+ * @throws SQLException
*/
- public String getType( ) {
- return type;
+ /*
+ private void setParameter( int pos, PreparedStatement stmt, QueryParameter
p )throws SQLException
+ {
+ String type = p.getType();
+ if (type.equalsIgnoreCase("string"))
+ {
+ stmt.setString(pos, p.getValue());
+ }
+
+ if (type.equalsIgnoreCase("bigdecimal"))
+ {
+ stmt.setBigDecimal(pos, new BigDecimal(p.getValue()));
+ }
+
+ if (type.equalsIgnoreCase("boolean"))
+ {
+ Integer i = new Integer( p.getValue() );
+ boolean b = ((i.intValue() != 0) ? false : true);
+ stmt.setBoolean(pos, b);
+ }
+
+ if (type.equalsIgnoreCase("bytes"))
+ {
+ stmt.setBytes(pos, p.getValue().getBytes());
+ }
+
+ if (type.equalsIgnoreCase("date"))
+ {
+ stmt.setDate(pos, Date.valueOf(p.getValue()));
+ }
+
+ if (type.equalsIgnoreCase("double"))
+ {
+ Double d = new Double(p.getValue());
+ stmt.setDouble(pos, d.doubleValue() );
+ }
+
+ if (type.equalsIgnoreCase("float"))
+ {
+ Float f = new Float(p.getValue());
+ stmt.setFloat(pos, f.floatValue());
+ }
+
+ if (type.equalsIgnoreCase("long"))
+ {
+ Long l = new Long(p.getValue());
+ stmt.setLong(pos, l.longValue());
+ }
+
+ if (type.equalsIgnoreCase("short"))
+ {
+ Short s = new Short(p.getValue());
+ stmt.setShort(pos, s.shortValue());
+ }
+
+ if (type.equalsIgnoreCase("time"))
+ {
+ stmt.setTime(pos, Time.valueOf(p.getValue()) );
+ }
+
+ if (type.equalsIgnoreCase("timestamp"))
+ {
+
+ stmt.setTimestamp(pos, Timestamp.valueOf(p.getValue()) );
+ }
+
}
-}
\ No newline at end of file
+ */
+
+}
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]