From: brian z. <bz...@us...> - 2001-12-07 02:56:42
|
Update of /cvsroot/jython/jython/com/ziclix/python/sql In directory usw-pr-cvs1:/tmp/cvs-serv16639/ziclix/python/sql Modified Files: DataHandler.java PyCursor.java PyExtendedCursor.java zxJDBC.java Added Files: DBApiType.java Log Message: added .getMetaDataName() --- NEW FILE: DBApiType.java --- /* * Jython Database Specification API 2.0 * * $Id: DBApiType.java,v 1.1 2001/12/07 02:56:39 bzimmer Exp $ * * Copyright (c) 2001 brian zimmer <bz...@zi...> * */ package com.ziclix.python.sql; import org.python.core.*; /** * This class wraps the types from java.sql.Type in order for * PyCursor to differentiate between a regular PyInteger and * a SQL datatype value. * * @author brian zimmer * @date $today.date$ * @author last modified by $Author: bzimmer $ * @date last modified on $Date: 2001/12/07 02:56:39 $ * @version $Revision: 1.1 $ * @copyright 2001 brian zimmer */ public final class DBApiType extends PyInteger { /** Field __class__ */ public static PyClass __class__; /** * Constructor DBApiType * * @param int type * */ public DBApiType(int type) { super(type); } /** * Constructor DBApiType * * @param Integer type * */ public DBApiType(Integer type) { super(type.intValue()); } /** * Method getPyClass * * @return PyClass * */ protected PyClass getPyClass() { return __class__; } } Index: DataHandler.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/DataHandler.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** DataHandler.java 2001/12/04 03:09:44 1.2 --- DataHandler.java 2001/12/07 02:56:39 1.3 *************** *** 41,44 **** --- 41,58 ---- /** + * Some database vendors are case sensitive on calls to DatabaseMetaData, + * most notably Oracle. This callback allows a DataHandler to affect the + * name. + * + * @param PyString name + * + * @return String + * + */ + public String getMetaDataName(PyObject name) { + return ((name == Py.None) ? null : name.__str__().toString()); + } + + /** * Returns the row id of the last executed statement. * *************** *** 259,263 **** default : Integer[] vals = { new Integer(col), new Integer(type) }; ! String msg = zxJDBC.getString("errorSettingIndex", vals); throw new SQLException(msg); --- 273,277 ---- default : Integer[] vals = { new Integer(col), new Integer(type) }; ! String msg = zxJDBC.getString("errorGettingIndex", vals); throw new SQLException(msg); Index: PyCursor.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/PyCursor.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PyCursor.java 2001/12/04 03:09:44 1.4 --- PyCursor.java 2001/12/07 02:56:39 1.5 *************** *** 410,428 **** // [3, 4] or (3, 4) - Integer binding = null; - PyObject param = Py.None, index = Py.None; - for (int i = 0; i < params.__len__(); i++) { ! binding = null; ! index = Py.newInteger(i); ! param = params.__getitem__(i); if (bindings != Py.None) { ! PyObject tmp = bindings.__finditem__(index); ! if (tmp != null) { try { ! binding = (Integer)tmp.__tojava__(Integer.class); ! } catch (ClassCastException e) { throw zxJDBC.makeException(zxJDBC.ProgrammingError, zxJDBC.getString("bindingValue")); } --- 410,428 ---- // [3, 4] or (3, 4) for (int i = 0; i < params.__len__(); i++) { ! PyObject index = Py.newInteger(i); ! PyObject param = params.__getitem__(i); if (bindings != Py.None) { ! PyObject binding = bindings.__finditem__(index); ! if (binding != null) { try { ! int bindingValue = binding.__int__().getValue(); ! ! this.datahandler.setJDBCObject(this.sqlStatement, i + 1, param, bindingValue); ! ! continue; ! } catch (PyException e) { throw zxJDBC.makeException(zxJDBC.ProgrammingError, zxJDBC.getString("bindingValue")); } *************** *** 430,438 **** } ! if (binding == null) { ! this.datahandler.setJDBCObject(this.sqlStatement, i + 1, param); ! } else { ! this.datahandler.setJDBCObject(this.sqlStatement, i + 1, param, binding.intValue()); ! } } } --- 430,434 ---- } ! this.datahandler.setJDBCObject(this.sqlStatement, i + 1, param); } } Index: PyExtendedCursor.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/PyExtendedCursor.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PyExtendedCursor.java 2001/11/27 10:48:04 1.2 --- PyExtendedCursor.java 2001/12/07 02:56:39 1.3 *************** *** 126,150 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String t = (table == Py.None) ? null : (String)table.__tojava__(String.class); ! String[] y = null; ! if (type != Py.None) { ! if (isSeq(type)) { ! int len = type.__len__(); ! y = new String[len]; ! for (int i = 0; i < len; i++) { ! y[i] = (String)type.__getitem__(i).__tojava__(String.class); ! } ! } else { ! y = new String[1]; ! y[0] = (String)type.__tojava__(String.class); } } create(this.connection.getMetaData().getTables(q, o, t, y)); } catch (SQLException e) { --- 126,150 ---- clear(); ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String t = datahandler.getMetaDataName(table); ! String[] y = null; ! if (type != Py.None) { ! if (isSeq(type)) { ! int len = type.__len__(); ! y = new String[len]; ! for (int i = 0; i < len; i++) { ! y[i] = datahandler.getMetaDataName(type.__getitem__(i)); } + } else { + y = new String[1]; + y[0] = datahandler.getMetaDataName(type); } + } + try { create(this.connection.getMetaData().getTables(q, o, t, y)); } catch (SQLException e) { *************** *** 165,174 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String t = (table == Py.None) ? null : (String)table.__tojava__(String.class); ! String c = (column == Py.None) ? null : (String)column.__tojava__(String.class); create(this.connection.getMetaData().getColumns(q, o, t, c)); } catch (SQLException e) { --- 165,174 ---- clear(); ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String t = datahandler.getMetaDataName(table); ! String c = datahandler.getMetaDataName(column); + try { create(this.connection.getMetaData().getColumns(q, o, t, c)); } catch (SQLException e) { *************** *** 188,196 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String p = (procedure == Py.None) ? null : (String)procedure.__tojava__(String.class); create(this.connection.getMetaData().getProcedures(q, o, p)); } catch (SQLException e) { --- 188,196 ---- clear(); ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String p = datahandler.getMetaDataName(procedure); + try { create(this.connection.getMetaData().getProcedures(q, o, p)); } catch (SQLException e) { *************** *** 211,220 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String p = (procedure == Py.None) ? null : (String)procedure.__tojava__(String.class); ! String c = (column == Py.None) ? null : (String)column.__tojava__(String.class); create(this.connection.getMetaData().getProcedureColumns(q, o, p, c)); } catch (SQLException e) { --- 211,220 ---- clear(); ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String p = datahandler.getMetaDataName(procedure); ! String c = datahandler.getMetaDataName(column); + try { create(this.connection.getMetaData().getProcedureColumns(q, o, p, c)); } catch (SQLException e) { *************** *** 235,243 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String t = (table == Py.None) ? null : (String)table.__tojava__(String.class); create(this.connection.getMetaData().getPrimaryKeys(q, o, t)); } catch (SQLException e) { --- 235,243 ---- clear(); ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String t = datahandler.getMetaDataName(table); + try { create(this.connection.getMetaData().getPrimaryKeys(q, o, t)); } catch (SQLException e) { *************** *** 265,276 **** clear(); ! try { ! String pq = (primaryQualifier == Py.None) ? null : (String)primaryQualifier.__tojava__(String.class); ! String po = (primaryOwner == Py.None) ? null : (String)primaryOwner.__tojava__(String.class); ! String pt = (primaryTable == Py.None) ? null : (String)primaryTable.__tojava__(String.class); ! String fq = (foreignQualifier == Py.None) ? null : (String)foreignQualifier.__tojava__(String.class); ! String fo = (foreignOwner == Py.None) ? null : (String)foreignOwner.__tojava__(String.class); ! String ft = (foreignTable == Py.None) ? null : (String)foreignTable.__tojava__(String.class); create(this.connection.getMetaData().getCrossReference(pq, po, pt, fq, fo, ft)); } catch (SQLException e) { --- 265,276 ---- clear(); ! String pq = datahandler.getMetaDataName(primaryQualifier); ! String po = datahandler.getMetaDataName(primaryOwner); ! String pt = datahandler.getMetaDataName(primaryTable); ! String fq = datahandler.getMetaDataName(foreignQualifier); ! String fo = datahandler.getMetaDataName(foreignOwner); ! String ft = datahandler.getMetaDataName(foreignTable); + try { create(this.connection.getMetaData().getCrossReference(pq, po, pt, fq, fo, ft)); } catch (SQLException e) { *************** *** 293,305 **** clear(); ! try { ! String q = (qualifier == Py.None) ? null : (String)qualifier.__tojava__(String.class); ! String o = (owner == Py.None) ? null : (String)owner.__tojava__(String.class); ! String t = (table == Py.None) ? null : (String)table.__tojava__(String.class); ! boolean u = (unique == Py.None) ? false : ((Boolean)unique.__tojava__(Boolean.class)).booleanValue(); ! boolean a = (accuracy == Py.None) ? false : ((Boolean)accuracy.__tojava__(Boolean.class)).booleanValue(); ! Set skipCols = new HashSet(); ! skipCols.add(new Integer(12)); create(this.connection.getMetaData().getIndexInfo(q, o, t, u, a), skipCols); } catch (SQLException e) { --- 293,307 ---- clear(); ! Set skipCols = new HashSet(); ! skipCols.add(new Integer(12)); ! ! String q = datahandler.getMetaDataName(qualifier); ! String o = datahandler.getMetaDataName(owner); ! String t = datahandler.getMetaDataName(table); ! boolean u = unique.__nonzero__(); ! boolean a = accuracy.__nonzero__(); ! ! try { create(this.connection.getMetaData().getIndexInfo(q, o, t, u, a), skipCols); } catch (SQLException e) { *************** *** 317,343 **** clear(); ! try { ! Set skipCols = new HashSet(); ! skipCols.add(new Integer(16)); ! skipCols.add(new Integer(17)); ! create(this.connection.getMetaData().getTypeInfo(), skipCols); ! // if the type is non-null, then trim the result list down to that type only ! // if(type != null &&!Py.None.equals(type)) { ! // for(int i = 0; i < ((PyObject) this.results.get(0)).__len__(); i++) { ! // PyObject row = ((PyObject) this.results.get(0)).__getitem__(new PyInteger(i)); ! // PyObject sqlType = row.__getitem__(new PyInteger(1)); ! // if(type.equals(sqlType)) { ! // this.results.remove(0); ! // this.results.add(0, new PyList(new PyObject[] { ! // row ! // })); ! // } ! // } ! // } } catch (SQLException e) { throw zxJDBC.newError(e); } } --- 319,346 ---- clear(); ! Set skipCols = new HashSet(); ! skipCols.add(new Integer(16)); ! skipCols.add(new Integer(17)); ! try { ! create(this.connection.getMetaData().getTypeInfo(), skipCols); } catch (SQLException e) { throw zxJDBC.newError(e); } + + // if the type is non-null, then trim the result list down to that type only + // if(type != null &&!Py.None.equals(type)) { + // for(int i = 0; i < ((PyObject) this.results.get(0)).__len__(); i++) { + // PyObject row = ((PyObject) this.results.get(0)).__getitem__(new PyInteger(i)); + // PyObject sqlType = row.__getitem__(new PyInteger(1)); + // if(type.equals(sqlType)) { + // this.results.remove(0); + // this.results.add(0, new PyList(new PyObject[] { + // row + // })); + // } + // } + // } } Index: zxJDBC.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/zxJDBC.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** zxJDBC.java 2001/11/27 10:48:04 1.2 --- zxJDBC.java 2001/12/07 02:56:39 1.3 *************** *** 142,151 **** for (int i = 0; i < fields.length; i++) { Field f = fields[i]; ! dict.__setitem__(Py.newString(f.getName()), new PyInteger(f.getInt(c))); ! sqltype.__setitem__(new PyInteger(f.getInt(c)), Py.newString(f.getName())); } ! } catch (Exception e) { ! throw newError(e); } --- 142,153 ---- for (int i = 0; i < fields.length; i++) { Field f = fields[i]; + PyString name = Py.newString(f.getName()); + PyObject value = new DBApiType(f.getInt(c)); ! dict.__setitem__(name, value); ! sqltype.__setitem__(value, name); } ! } catch (Throwable t) { ! throw newError(t); } *************** *** 299,305 **** public static PyException newError(Throwable e) { ! try { ! return (PyException)e; ! } catch (ClassCastException ex) {} try { --- 301,307 ---- public static PyException newError(Throwable e) { ! if (e instanceof PyException) { ! throw (PyException)e; ! } try { |