src.com.ziclix.python.sql.PyStatement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-installer Show documentation
Show all versions of jython-installer Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
/*
* Jython Database Specification API 2.0
*
*
* Copyright (c) 2001 brian zimmer
*
*/
package com.ziclix.python.sql;
import org.python.core.Visitproc;
import org.python.core.codecs;
import org.python.core.Py;
import org.python.core.PyException;
import org.python.core.PyList;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.core.PyUnicode;
import org.python.core.Traverseproc;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Class PyStatement
*
* @author brian zimmer
*/
public class PyStatement extends PyObject implements Traverseproc {
/** Denotes a simple Statement with no parameters. */
public static final int STATEMENT_STATIC = 2;
/** Denotes a PreparedStatement either explicitly created by the user, or from a
* cursor (due to the presence of bind parameters). */
public static final int STATEMENT_PREPARED = 4;
/** Denotes a stored procedure call. */
public static final int STATEMENT_CALLABLE = 8;
/** One of the above styles. */
private int style;
/** The underlying sql, a String or a Procedure. */
private Object sql;
/** Whether this statement is closed. */
private boolean closed;
/** The underlying java.sql.Statement. */
Statement statement;
/** Field __methods__ */
protected static PyList __methods__;
/** Field __members__ */
protected static PyList __members__;
static {
PyObject[] m = new PyObject[1];
m[0] = new PyString("close");
__methods__ = new PyList(m);
m = new PyObject[3];
m[0] = new PyString("style");
m[1] = new PyString("closed");
m[2] = new PyString("__statement__");
__members__ = new PyList(m);
}
/**
* Constructor PyStatement
*
* @param statement
* @param sql
* @param style
*/
public PyStatement(Statement statement, Object sql, int style) {
this.statement = statement;
this.sql = sql;
this.style = style;
closed = false;
}
/**
* Constructor PyStatement
*
* @param statement
* @param procedure
*/
public PyStatement(Statement statement, Procedure procedure) {
this(statement, procedure, STATEMENT_CALLABLE);
}
@Override
public PyUnicode __unicode__() {
if (sql instanceof String) {
return Py.newUnicode((String) sql);
} else if (sql instanceof Procedure) {
try {
return Py.newUnicode(((Procedure) sql).toSql());
} catch (SQLException e) {
throw zxJDBC.makeException(e);
}
}
return super.__unicode__();
}
@Override
public PyString __str__() {
return Py.newString(__unicode__().encode(codecs.getDefaultEncoding(), "replace"));
}
@Override
public String toString() {
return String.format(" 0) {
column = columns + 1;
if (procedure != null && !procedure.isInput(column)) {
continue;
}
// working from right to left
PyObject param = params.__getitem__(--index);
if (bindings != Py.None) {
PyObject binding = bindings.__finditem__(Py.newInteger(index));
if (binding != null) {
try {
int bindingValue = binding.asInt();
datahandler.setJDBCObject(preparedStatement, column, param, bindingValue);
} catch (PyException e) {
throw zxJDBC.makeException(zxJDBC.ProgrammingError,
zxJDBC.getString("bindingValue"));
}
continue;
}
}
datahandler.setJDBCObject(preparedStatement, column, param);
}
}
/**
* Method close
*/
public void close() {
try {
statement.close();
} catch (SQLException e) {
throw zxJDBC.makeException(e);
} finally {
closed = true;
}
}
/* Traverseproc implementation */
@Override
public int traverse(Visitproc visit, Object arg) {
if (sql != null) {
if (sql instanceof PyObject) {
int retVal = visit.visit((PyObject) sql, arg);
if (retVal != 0) {
return retVal;
}
} else if (sql instanceof Traverseproc) {
int retVal = ((Traverseproc) sql).traverse(visit, arg);
if (retVal != 0) {
return retVal;
}
}
}
return 0;
}
@Override
public boolean refersDirectlyTo(PyObject ob) {
if (sql == null || ob == null) {
return false;
} else if (sql instanceof PyObject) {
return sql == ob;
} else if (sql instanceof Traverseproc) {
return ((Traverseproc) sql).refersDirectlyTo(ob);
} else{
return false;
}
}
}