package com.nexirius.framework.jdbc;
import com.nexirius.framework.datamodel.StructModel;
import com.nexirius.framework.datamodel.DataModelVector;
import com.nexirius.framework.datamodel.DataModelEnumeration;
import com.nexirius.framework.datamodel.DataModel;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ParameterMetaData;
import java.util.Iterator;
public class JnexCallableStatement extends JnexPreparedStatement {
private String storedProcedureName;
public JnexCallableStatement(DatabaseTableMapping mapping, String storedProcedureName, int numberOfParameters) throws SQLException {
super(mapping, createStoredProcedureSql(storedProcedureName, numberOfParameters), false);
this.storedProcedureName = storedProcedureName;
}
public void setParameters(DataModelVector children) throws SQLException {
DataModelEnumeration en = children.getEnumeration();
int index = 0;
while(en.hasMore()) {
DataModel param = en.next();
mapping.setValue(this, ++index, param);
}
}
//todo check if OK
public String toString() {
StringBuffer ret = new StringBuffer();
ret.append("call " + this.storedProcedureName + "(");
if (parameters != null) {
for (Iterator it = parameters.iterator(); it.hasNext();) {
ret.append("'");
Parameter parameter = (Parameter) it.next();
ret.append(parameter.toString() + "'");
if (it.hasNext()) {
ret.append(", ");
}
}
}
ret.append(");");
return ret.toString();
}
private static String createStoredProcedureSql(String storedProcedureName, int numberOfParameters) {
//"{call PROCEDURENAME(?,?,?,?)}"
//{call <procedure-name>[(<arg1>,<arg2>, ...)]}
StringBuffer ret = new StringBuffer(256);
ret.append("{call ");
ret.append(storedProcedureName);
ret.append("(");
for (int i = 0; i < numberOfParameters; ++i) {
if (i > 0) {
ret.append(",?");
} else {
ret.append("?");
}
}
ret.append(")}");
return ret.toString();
}
}