You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

789 lines
30 KiB

2 years ago
package com.fr.plugin.db.procedure.controller;
import com.fr.base.CursorValue;
import com.fr.base.Parameter;
import com.fr.base.ParameterHelper;
import com.fr.base.StoreProcedureParameter;
import com.fr.base.TableDataConnection;
import com.fr.config.holder.Conf;
import com.fr.config.holder.factory.Holders;
import com.fr.config.holder.factory.XmlHolders;
import com.fr.config.holder.impl.ColConf;
import com.fr.config.holder.impl.xml.XmlColConf;
import com.fr.data.AbstractParameterTableData;
import com.fr.data.api.StoreProcedureAssist;
import com.fr.data.core.TableDataXmlUtils;
import com.fr.data.core.db.DBUtils;
import com.fr.data.core.db.dialect.Dialect;
import com.fr.data.core.db.dialect.DialectFactory;
import com.fr.data.core.db.dml.Table;
import com.fr.data.core.db.handler.SQLTypeHandler;
import com.fr.data.impl.NameDatabaseConnection;
import com.fr.data.impl.restriction.DSRestrictionScene;
import com.fr.data.impl.restriction.SqlTimeoutChecker;
import com.fr.data.impl.restriction.TimeoutExecutor;
import com.fr.data.impl.storeproc.DiskCacheProcereDataModel;
import com.fr.data.impl.storeproc.MemCachedProcedureDataModel;
import com.fr.data.impl.storeproc.ProcedureDataModel;
import com.fr.data.impl.storeproc.StoreProcedureExecution;
import com.fr.general.ComparatorUtils;
import com.fr.general.ManagerFactory;
import com.fr.general.data.DataModel;
import com.fr.general.data.TableDataException;
import com.fr.interruption.Condition;
import com.fr.interruption.Conditions;
import com.fr.interruption.DSConditionScene;
import com.fr.locale.InterProviderFactory;
import com.fr.log.FineLoggerFactory;
import com.fr.restriction.RestrictionDealer;
import com.fr.restriction.Restrictions;
import com.fr.restriction.dimension.Dimension;
import com.fr.script.Calculator;
import com.fr.stable.ArrayUtils;
import com.fr.stable.FormulaProvider;
import com.fr.stable.ParameterProvider;
import com.fr.stable.Primitive;
import com.fr.stable.StringUtils;
import com.fr.stable.UtilEvalError;
import com.fr.stable.monitor.MemoryHelper;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.xml.XMLPrintWriter;
import com.fr.stable.xml.XMLReadable;
import com.fr.stable.xml.XMLable;
import com.fr.stable.xml.XMLableReader;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.Collator;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Locale;;
public class MyStoreProcedure extends AbstractParameterTableData implements XMLable, TableDataConnection {
private static final int PARAMETER_PROPERTY_COUNT = 4;
public static final String XML_TAG = "MyStoreProcedure";
private List dataModelList = new ArrayList();
private Conf<Boolean> share = Holders.simple(false);
private Conf<Integer> maxMemRowCount = Holders.simple(-1);
private Conf<String> query = Holders.simple("");
private XmlColConf<Collection<StoreProcedureParameter>> procedureParameters = XmlHolders.collection(new ArrayList(), StoreProcedureParameter.class);
private ColConf<Collection<String>> resultNames = Holders.collection(new ArrayList(), String.class);
private transient Connection connection;
private transient CallableStatement statement;
private Conf<com.fr.data.impl.Connection> database = Holders.obj(null, com.fr.data.impl.Connection.class);
private boolean isCalculating;
private boolean isFirstExpand = true;
private transient String sql;
private transient long queryStart;
private static final int MAX_IGNORE_COUNT = 100;
private static final long serialVersionUID = 1L;
public MyStoreProcedure() {
}
public static StoreProcedureParameter[] getSortPara(StoreProcedureParameter[] var0) {
int var1 = var0.length;
StoreProcedureParameter[] var2 = new StoreProcedureParameter[var1];
String[] var3 = new String[var1];
int var4;
for(var4 = 0; var4 < var1; ++var4) {
var3[var4] = var0[var4].getName();
}
Arrays.sort(var3, Collator.getInstance(Locale.CHINA));
for(var4 = 0; var4 < var1; ++var4) {
String var5 = var3[var4];
for(int var6 = 0; var6 < var1; ++var6) {
if (ComparatorUtils.equals(var5, var0[var6].getName())) {
var2[var4] = var0[var6];
break;
}
}
}
return var2;
}
public void setCalculating(boolean var1) {
this.isCalculating = var1;
}
public boolean isCalculating() {
return this.isCalculating;
}
public List getResultNames() {
return (List)this.resultNames.get();
}
public ProcedureDataModel getProcedureDataModel(Calculator var1, String var2) {
ProcedureDataModel[] var3 = this.creatDataModel(var1);
return StoreProcedureAssist.findMatch(var3, var2);
}
public int getDataModelSize() {
return this.dataModelList.size();
}
public void resetDataModelList() {
this.dataModelList.clear();
}
public void refreshDataModelListAndResultNames(ProcedureDataModel[] var1) {
if (var1 != null) {
this.resetDataModelList();
ArrayList var2 = new ArrayList();
ProcedureDataModel[] var3 = var1;
int var4 = var1.length;
for(int var5 = 0; var5 < var4; ++var5) {
ProcedureDataModel var6 = var3[var5];
this.dataModelList.add(var6);
var2.add(var6.getName());
}
this.resultNames.set(var2);
}
}
public ProcedureDataModel[] creatLazyDataModel() {
return (ProcedureDataModel[])((ProcedureDataModel[])this.dataModelList.toArray(new ProcedureDataModel[this.dataModelList.size()]));
}
public ProcedureDataModel[] creatDataModel(Calculator var1) {
return this.isShareTableData() ? (ProcedureDataModel[])((ProcedureDataModel[]) ManagerFactory.getCacheProvider().getProcedureDataModel((com.fr.data.impl.Connection)this.database.get(), (String)this.query.get(), this, var1)) : this.creatCacheableDataModel(var1);
}
public ProcedureDataModel[] creatCacheableDataModel(CalculatorProvider var1) {
try {
this.prepareCall(var1);
ProcedureDataModel[] var2 = this.creatDataModels(false);
return var2;
} catch (SQLException var7) {
this.dealWithSQLException(var7);
} catch (TableDataException var8) {
throw new RuntimeException(var8.getMessage(), var8);
} finally {
this.release();
}
return new ProcedureDataModel[0];
}
public ProcedureDataModel[] creatCacheableDataModel(CalculatorProvider var1, boolean var2) {
try {
this.prepareCall(var1);
ProcedureDataModel[] var3 = this.creatDataModels(var2);
return var3;
} catch (SQLException var8) {
this.dealWithSQLException(var8);
} catch (TableDataException var9) {
throw new RuntimeException(var9.getMessage(), var9);
} finally {
this.release();
}
return new ProcedureDataModel[0];
}
private void prepareCall(CalculatorProvider var1) throws SQLException, TableDataException {
synchronized(this) {
try {
this.connection = ((com.fr.data.impl.Connection)this.database.get()).createConnection();
} catch (Exception var15) {
this.dealWithDriverNotFound(var15);
}
if (this.query != null) {
boolean var3 = this.connection == null;
if (!var3) {
this.queryStart = System.currentTimeMillis();
this.connection.setAutoCommit(false);
Dialect var4 = DialectFactory.generateDialect(this.connection);
Parameter[] var5 = Parameter.providers2Parameter(this.processParameters(var1, this.getParameters()));
this.sql = this.getNewQuery(var4, var5);
this.statement = this.connection.prepareCall(this.sql);
StoreProcedureParameter[] var6 = this.getParameters();
for(int var7 = 0; var7 < var6.length; ++var7) {
StoreProcedureParameter var8 = var6[var7];
if (var8.getSchema() != 2147483645) {
try {
StoreProcedureParameter var9 = new StoreProcedureParameter(var8.getName(), var8.getValue(), var8.getSchema(), var8.getType());
Parameter var10 = new Parameter(var5[var7].getName(), var5[var7].getValue());
Object var11 = this.calculateHandlerValue(var10, var1, var9);
SQLTypeHandler var12 = var4.buildSQLTypeHandlerFactory().getTypeHandler(var9.getType());
var12.setValue(this.statement, var7 + 1, var11, var9.getType());
} catch (UtilEvalError var14) {
FineLoggerFactory.getLogger().error(var14.getMessage(), var14);
}
}
if (var8.getSchema() != 2147483646) {
this.statement.registerOutParameter(var7 + 1, var8.getType());
}
}
StoreProcedureExecution var19 = new StoreProcedureExecution(Calculator.getSavedSessionNameSpace(), this.statement);
SqlTimeoutChecker.checkExecution(var19);
try {
TimeoutExecutor.execute(var19);
} catch (SQLException var16) {
throw var16;
} catch (Exception var17) {
if (var17.getCause() instanceof SQLException) {
throw (SQLException)var17.getCause();
}
throw new SQLException(var17);
}
FineLoggerFactory.getLogger().info("SQL:\n" + this.sql);
this.dataModelList.clear();
}
}
}
}
private void dealWithSQLException(SQLException var1) {
String var2 = var1.getMessage();
if (var1.getErrorCode() != 0) {
var2 = var1.getErrorCode() + ":" + var1.getMessage();
}
throw new RuntimeException(StringUtils.perfectStart(var2, InterProviderFactory.getProvider().getLocText("Fine-Engine_Report_Stored_Procedure_Exe_Exception", new String[]{this.getName()}) + " "), var1);
}
private void dealWithDriverNotFound(Exception var1) throws TableDataException {
Object var2;
for(var2 = var1; ((Throwable)var2).getCause() != null; var2 = ((Throwable)var2).getCause()) {
}
if (var2 instanceof ClassNotFoundException && ((Throwable)var2).getMessage() != null && ((Throwable)var2).getMessage().contains(((com.fr.data.impl.Connection)this.database.get()).getDriver())) {
throw new TableDataException(InterProviderFactory.getProvider().getLocText("Fine-Engine_Data_Connection_Driver_Not_Found", new String[]{((com.fr.data.impl.Connection)this.database.get()).toString()}), (Throwable)var2, "");
} else {
throw new TableDataException(((com.fr.data.impl.Connection)this.database.get()).toString(), var1, InterProviderFactory.getProvider().getLocText("Fine-Engine_Utils_Can_Not_Create_Connection_With_Error_Code"));
}
}
private ParameterProvider[] processParameters(CalculatorProvider var1, ParameterProvider[] var2) {
if (var2 == null) {
return new ParameterProvider[0];
} else {
ParameterProvider[] var4 = new ParameterProvider[var2.length];
for(int var5 = 0; var5 < var2.length; ++var5) {
var4[var5] = var2[var5];
if (var4[var5] != null && var1 != null) {
Object var3 = var1.resolveVariable(var4[var5].getName());
if (var3 == null || var3 == Primitive.NULL) {
var3 = var1.resolveVariable(var4[var5].getValue());
}
try {
var4[var5] = (ParameterProvider)var4[var5].clone();
} catch (CloneNotSupportedException var7) {
FineLoggerFactory.getLogger().error(var7.getMessage(), var7);
}
if (var3 != null && ((StoreProcedureParameter)var4[var5]).getType() != 31) {
var4[var5].setValue(var3);
}
}
}
return var4;
}
}
private Object calculateHandlerValue(Parameter var1, CalculatorProvider var2, StoreProcedureParameter var3) throws UtilEvalError {
if (var1.getValue() instanceof FormulaProvider) {
Object var4 = this.calFormula(var2, (FormulaProvider)var1.getValue());
var1.setValue(var4);
var3.setType(this.judgeType(var4));
var3.setValue(var4);
return this.calculateHandlerValue(var1, var2, var3);
} else {
return var1.getValue() instanceof Date ? (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(var1.getValue()) : var1.getValue();
}
}
private int judgeType(Object var1) {
if (var1 instanceof CursorValue) {
return -10;
} else if (var1 instanceof String) {
return ((String)var1).length() > 0 && ((String)var1).charAt(0) == '=' ? 31 : 12;
} else if (var1 instanceof Integer) {
return 4;
} else if (var1 instanceof Double) {
return 3;
} else if (var1 instanceof Date) {
return 91;
} else {
return var1 instanceof Boolean ? 16 : 31;
}
}
private Object calFormula(CalculatorProvider var1, FormulaProvider var2) throws UtilEvalError {
Object var3 = var1.eval(var2);
return var3 != null && var3 != Primitive.NULL ? var3 : var2.getResult();
}
private String getNewQuery(Dialect var1, Parameter[] var2) {
return ParameterHelper.analyzeCurrentContextTableData4Templatee(this.getCallQuery(var1, var2.length), var2);
}
private ProcedureDataModel[] creatDataModels(boolean var1) throws TableDataException, SQLException {
synchronized(this) {
if (this.statement == null) {
return null;
} else {
String var3 = ((com.fr.data.impl.Connection)this.database.get()).getOriginalCharsetName();
String var4 = ((com.fr.data.impl.Connection)this.database.get()).getNewCharsetName();
Dialect var5 = DialectFactory.generateDialect(this.connection);
ResultSet var6 = this.statement.getResultSet();
if (var6 != null) {
this.dataModelList.add(this.createDataModeByResultSet(var6, var5, "Table", var4, var3, var1, System.currentTimeMillis() - this.queryStart, this.queryStart));
int var7 = 0;
while(this.statement.getMoreResults()) {
++var7;
var6 = this.statement.getResultSet();
this.dataModelList.add(this.createDataModeByResultSet(var6, var5, "Table" + var7, var4, var3, var1, System.currentTimeMillis() - this.queryStart, this.queryStart));
}
}
StoreProcedureParameter[] var15 = this.getParameters();
for(int var8 = 0; var8 < var15.length; ++var8) {
StoreProcedureParameter var9 = var15[var8];
if (var9.getSchema() != 2147483646) {
Object var10;
try {
var10 = this.statement.getObject(var8 + 1);
} catch (SQLException var13) {
continue;
}
if (var10 instanceof ResultSet) {
var6 = (ResultSet)var10;
this.dataModelList.add(this.createDataModeByResultSet(var6, var5, var9.getName(), var4, var3, var1, System.currentTimeMillis() - this.queryStart, this.queryStart));
} else {
ArrayList var11 = new ArrayList(1);
var11.add(new Object[]{var10});
this.dataModelList.add(new MemCachedProcedureDataModel(var11, new String[]{var9.getName()}, var9.getName(), false, 0L, System.currentTimeMillis() - this.queryStart, this.queryStart, this.sql));
}
}
}
DBUtils.closeResultSet(var6);
this.release();
return (ProcedureDataModel[])((ProcedureDataModel[])this.dataModelList.toArray(new ProcedureDataModel[this.dataModelList.size()]));
}
}
}
private ProcedureDataModel createDataModeByResultSet(ResultSet var1, Dialect var2, String var3, String var4, String var5, boolean var6, long var7, long var9) throws SQLException, TableDataException {
synchronized(this) {
if (!((Collection)this.resultNames.get()).contains(var3)) {
this.resultNames.add(var3);
}
long var12 = System.currentTimeMillis();
ResultSetMetaData var14 = var1.getMetaData();
List var15 = this.createRowList(var1, var14, var2, var4, var5);
long var16 = System.currentTimeMillis() - var12;
return (ProcedureDataModel)((Integer)this.maxMemRowCount.get() > 0 && var15.size() > (Integer)this.maxMemRowCount.get() ? new DiskCacheProcereDataModel(var15, this.creatColumnName(var14), var3, var16, var7, var9, this.sql) : new MemCachedProcedureDataModel(var15, this.creatColumnName(var14), var3, var6, var16, var7, var9, this.sql));
}
}
private List createRowList(ResultSet var1, ResultSetMetaData var2, Dialect var3, String var4, String var5) throws TableDataException, SQLException {
synchronized(this) {
ArrayList var7 = new ArrayList();
int var8 = var2.getColumnCount();
try {
int[] var9 = new int[var8];
if (var2 != null) {
for(int var10 = 0; var10 < var8; ++var10) {
var9[var10] = var2.getColumnType(var10 + 1);
}
}
SQLTypeHandler[] var23 = new SQLTypeHandler[var8];
int var11;
for(var11 = 0; var11 < var8; ++var11) {
var23[var11] = var3.buildSQLTypeHandlerFactory().getTypeHandler(var9[var11]);
}
var11 = 0;
RestrictionDealer var12 = Restrictions.getRestriction(DSRestrictionScene.ROW_COUNT);
Dimension var13 = var12.create(var11);
for(Condition var14 = Conditions.get(DSConditionScene.ROW); var1.next(); ++var11) {
Object[] var15 = new Object[var8];
for(int var16 = 0; var16 < var8; ++var16) {
try {
var15[var16] = var23[var16].getValue(var1, var16 + 1, var9[var16]);
boolean var17 = StringUtils.isNotEmpty(var5);
if (var17 && var15[var16] instanceof String) {
var15[var16] = DBUtils.changeCharset((String)var15[var16], var5, var4);
}
} catch (SQLException var20) {
var15[var16] = null;
}
}
var7.add(var15);
if ((var11 & 255) == 0) {
var14.setMetric(var11);
MemoryHelper.getMemoryAlarmProcessor().interruptIfConditionMet(var14);
var13.setMetric(var11);
var12.check(var13);
}
}
} catch (Exception var21) {
try {
this.release();
} catch (Exception var19) {
FineLoggerFactory.getLogger().error("Error happens while releaseConnection");
}
if (var21.getCause() != null) {
FineLoggerFactory.getLogger().error("Caused By:" + var21.getCause().getMessage(), var21.getCause());
}
throw new TableDataException(var21.getMessage(), var21);
}
return var7;
}
}
public boolean isFirstExpand() {
return this.isFirstExpand;
}
public void setFirstExpand(boolean var1) {
this.isFirstExpand = var1;
}
private String[] creatColumnName(ResultSetMetaData var1) throws SQLException {
int var2 = var1.getColumnCount();
String[] var3 = new String[var2];
for(int var4 = 0; var4 < var2; ++var4) {
String var5 = var1.getColumnName(var4 + 1);
var3[var4] = ComparatorUtils.equals(var5, "") ? "Column" + (var4 == 0 ? "" : String.valueOf(var4)) : var5;
}
return var3;
}
public void release() {
synchronized(this) {
if (this.connection != null) {
DBUtils.closeStatement(this.statement);
try {
if (!this.connection.getAutoCommit()) {
this.connection.commit();
}
} catch (SQLException var4) {
FineLoggerFactory.getLogger().error(var4.getMessage(), var4);
}
DBUtils.closeConnection(this.connection);
this.statement = null;
this.connection = null;
}
}
}
public com.fr.data.impl.Connection getDatabaseConnection() {
return (com.fr.data.impl.Connection)this.database.get();
}
public void setDatabaseConnection(com.fr.data.impl.Connection var1) {
this.database.set(var1);
}
private Table initTable() {
String[] var1 = ((String)this.query.get()).split("\\.");
return ArrayUtils.getLength(var1) <= 1 ? new Table(var1[0]) : new Table(var1[var1.length - 2], var1[var1.length - 1]);
}
private String getCallQuery(Dialect var1, int var2) {
StringBuffer var3 = new StringBuffer();
var3.append("{call ");
Table var4 = this.initTable();
var3.append(var1.table2SQL(var4) + "(");
for(int var5 = 0; var5 < var2; ++var5) {
var3.append('?');
if (var5 != var2 - 1) {
var3.append(',');
}
}
var3.append(')');
var3.append("}");
return var3.toString();
}
public String getQuery() {
return (String)this.query.get();
}
public void setQuery(String var1) {
this.query.set(var1);
}
public StoreProcedureParameter[] getParameters() {
Collection var1 = (Collection)this.procedureParameters.get();
return (StoreProcedureParameter[])var1.toArray(new StoreProcedureParameter[var1.size()]);
}
public ParameterProvider[] getParameters(Calculator var1) {
return this.getParameters();
}
public void setParameters(StoreProcedureParameter[] var1) {
this.procedureParameters.set(ArrayUtils.toList(var1));
}
public StoreProcedureParameter[] get_IN_Parameters() {
StoreProcedureParameter[] var1 = new StoreProcedureParameter[0];
StoreProcedureParameter[] var2 = this.getParameters();
int var3 = 0;
for(int var4 = var2.length; var3 < var4; ++var3) {
if (var2[var3].getSchema() != 2147483645) {
var1 = (StoreProcedureParameter[])ArrayUtils.add(var1, var2[var3]);
}
}
return var1;
}
public boolean isShare() {
return (Boolean)this.share.get();
}
public void setShare(boolean var1) {
this.share.set(var1);
}
public boolean isShareTableData() {
return (Boolean)this.share.get();
}
public int getMaxMemRowCount() {
return (Integer)this.maxMemRowCount.get();
}
public void setMaxMemRowCount(int var1) {
this.maxMemRowCount.set(var1);
}
public void registerNoPrivilege(ArrayList<String> var1, String var2, String var3) {
com.fr.data.impl.Connection var4 = this.getDatabaseConnection();
if (var4 instanceof NameDatabaseConnection) {
String var5 = ((NameDatabaseConnection)var4).getName();
if (ComparatorUtils.equals(var2, var5)) {
var1.add(var3);
}
}
}
public void readXML(XMLableReader var1) {
if (var1.isChildNode()) {
String var2 = var1.getTagName();
if ("Attributes".equals(var2)) {
this.setShare(var1.getAttrAsBoolean("share", false));
this.setMaxMemRowCount(var1.getAttrAsInt("maxMemRowCount", -1));
}
if ("Connection".equals(var2)) {
if (var1.getAttrAsString("class", (String)null) != null) {
com.fr.data.impl.Connection var4 = TableDataXmlUtils.readXMLConnection(var1);
this.setDatabaseConnection(var4);
}
} else if ("Query".equals(var2)) {
String var3;
if ((var3 = var1.getElementValue()) != null) {
this.setQuery(var3);
}
} else if ("ParamterList".equals(var2)) {
this.readParameters(var1);
} else if ("ResultNames".equals(var2)) {
this.readResultNames(var1);
}
}
}
private void readResultNames(XMLableReader var1) {
final ArrayList var2 = new ArrayList();
var1.readXMLObject(new XMLReadable() {
public void readXML(XMLableReader var1) {
if (var1.isAttr()) {
MyStoreProcedure.this.resultNames.set(new ArrayList());
}
if (var1.isChildNode()) {
String var3 = var1.getTagName();
String var2x;
if ("Name".equals(var3) && (var2x = var1.getElementValue()) != null) {
var2.add(var2x);
}
}
}
});
this.resultNames.set(var2);
}
private void readParameters(XMLableReader var1) {
if (var1.getXMLVersion().isBefore711_FOR_STOREPROCEDURE_PARA()) {
String var2 = var1.getElementValue();
if (var2 != null) {
this.setParameterList(var2);
return;
}
}
final ArrayList var3 = new ArrayList();
var1.readXMLObject(new XMLReadable() {
public void readXML(XMLableReader var1) {
if (var1.getTagName().equals("para")) {
StoreProcedureParameter var2 = new StoreProcedureParameter();
var1.readXMLObject(var2);
var3.add(var2);
}
}
});
this.procedureParameters.set(var3);
}
private void setParameterList(String var1) {
String[] var2 = var1.split("]");
StoreProcedureParameter[] var3 = new StoreProcedureParameter[var2.length / 4];
for(int var4 = 0; var4 < var2.length; var4 += 4) {
StoreProcedureParameter var5 = new StoreProcedureParameter();
String var6 = var2[var4];
String var7 = var2[var4 + 1];
String var8 = var2[var4 + 2];
String var9 = var2[var4 + 3];
var5.setName(var6.substring(var6.indexOf(58) + 1));
var5.setSchema(this.getIntSchema(var8));
var5.setType(this.getIntType(var7));
var5.setValue(var9.substring(var9.indexOf(58) + 1));
try {
var3[var4 / 4] = var5;
} catch (Exception var11) {
FineLoggerFactory.getLogger().error("Out of bounds : " + var4);
}
}
this.setParameters(var3);
}
private int getIntSchema(String var1) {
try {
return Integer.parseInt(var1.substring(var1.indexOf(58) + 1));
} catch (Exception var3) {
return 2147483646;
}
}
private int getIntType(String var1) {
try {
return Integer.parseInt(var1.substring(var1.indexOf(58) + 1));
} catch (Exception var3) {
return 12;
}
}
public com.fr.data.impl.Connection getDatabase() {
return this.getDatabaseConnection();
}
public void writeXML(XMLPrintWriter var1) {
var1.startTAG("Attributes");
if (this.isShare()) {
var1.attr("share", this.isShare());
}
var1.attr("maxMemRowCount", this.getMaxMemRowCount()).end();
if (this.database.get() != null) {
TableDataXmlUtils.writeXMLConnection(var1, (com.fr.data.impl.Connection)this.database.get());
}
var1.startTAG("Query").textNode(this.getQuery()).end();
this.writeParameters(var1);
this.writeResultNames(var1);
}
private void writeResultNames(XMLPrintWriter var1) {
var1.startTAG("ResultNames");
int var2 = Math.min(12, ((Collection)this.resultNames.get()).size());
for(int var3 = 0; var3 < var2; ++var3) {
var1.startTAG("Name").textNode((String)((List)this.resultNames.get()).get(var3)).end();
}
var1.end();
}
private void writeParameters(XMLPrintWriter var1) {
int var2 = ArrayUtils.getLength(this.getParameters());
if (var2 != 0) {
var1.startTAG("ParamterList");
StoreProcedureParameter[] var3 = this.getParameters();
for(int var4 = 0; var4 < var2; ++var4) {
var1.startTAG("para");
var3[var4].writeXML(var1);
var1.end();
}
var1.end();
}
}
public String toString() {
return "StoreProcedure";
}
public DataModel createDataModel(Calculator var1) {
return DataModel.EMPTY_DATAMODEL;
}
public DataModel createDataModel(Calculator var1, String var2) {
return this.getProcedureDataModel(var1, var2);
}
}