/Core/Results/Result.cs
C# | 1695 lines | 708 code | 369 blank | 618 comment | 39 complexity | 67e218cea1f67dc2350a9e3309bc9621 MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- //
- // (C) Copyright 2009,2010 EffiProz Systems
- // All rights reserved.
- // NOTICE: This code has not been licensed under any public license.
- // Author: Irantha Suwandarathna (irantha@gmail.com)
- //
-
- //synched 2.01rc3
-
- using System;
- using System.IO;
- using EffiProz.Core.DataTypes;
- using EffiProz.Core.Engine;
- using EffiProz.Core.Errors;
- using EffiProz.Core.Lib;
- using EffiProz.Core.Navigators;
- using EffiProz.Core.Statements;
- using EffiProz.Core.Tables;
-
- namespace EffiProz.Core.Results
- {
- internal class Result
- {
- internal static ResultMetaData SessionAttributesMetaData = GetSessionAttributesMetaData();
-
- private static readonly ResultMetaData EmptyMeta =
- ResultMetaData.NewResultMetaData(0);
-
- internal static Result EmptyGeneratedResult =
- NewDataResult(EmptyMeta);
-
- internal static Result UpdateZeroResult = NewUpdateCountResult(0);
- internal static Result UpdateOneResult = NewUpdateCountResult(1);
-
- // type of result
-
- // database name for new connection
- private readonly String _databaseName = string.Empty;
-
- // user / password for new connection
- // error strings in error results
- private readonly String _zoneString = String.Empty;
- private Result _chainedResult;
- public int DatabaseId;
-
- // vendor error code
- private int _errorCode;
-
- // the exception if this is an error
- private CoreException _exception;
-
- // prepared statement id
-
- // fetch size (in)
- private int _fetchSize;
- private int _generateKeys = ResultConstants.ReturnNoGeneratedKeys;
- public ResultMetaData GeneratedMetaData;
- private long _id;
-
- // secondary result
-
- //
- private int _lobCount;
- private ResultLob _lobResults;
- private String _mainString;
-
- /** A Result object's metadata */
- public ResultMetaData MetaData;
- public byte Mode;
- public RowSetNavigator navigator;
-
- /** Additional meta data for parameters used in PREPARE_ACK results */
- public ResultMetaData ParameterMetaData;
-
- /** Additional meta data for required generated columns */
-
- //
- public int QueryTimeout;
- public int RsProperties;
- public long SessionId;
-
- //
-
- //
- internal Statement statement;
- private long _statementId;
-
- // statement type based on whether it returns an update count or a result set
- // type of session info requested
- private int _statementReturnType;
- private String _subString;
- public int UpdateCount;
- public Object ValueData;
-
- private static ResultMetaData GetSessionAttributesMetaData()
- {
- ResultMetaData SessionAttributesMetaData =
- ResultMetaData.NewResultMetaData(SessionInfoTypeConsts.InfoLimit);
-
- for (int i = 0; i < SessionInfoTypeConsts.InfoLimit; i++)
- {
- SessionAttributesMetaData.columns[i] = new ColumnBase(null, null,
- null, null);
- }
-
- SessionAttributesMetaData.columns[SessionInfoTypeConsts.InfoId].SetType(
- SqlType.SqlInteger);
- SessionAttributesMetaData.columns[SessionInfoTypeConsts.InfoInteger].SetType(
- SqlType.SqlInteger);
- SessionAttributesMetaData.columns[SessionInfoTypeConsts.InfoBoolean].SetType(
- SqlType.SqlBoolean);
- SessionAttributesMetaData.columns[SessionInfoTypeConsts.InfoVarchar].SetType(
- SqlType.SqlVarchar);
- SessionAttributesMetaData.PrepareData();
-
- return SessionAttributesMetaData;
- }
-
- public Result(int mode)
- {
- Mode = (byte) mode;
- }
-
- public Result(int mode, int count)
- {
- Mode = (byte) mode;
- UpdateCount = count;
- }
-
- public static Result NewResult(RowSetNavigator nav)
- {
- var result = new Result(ResultConstants.Data) {navigator = nav};
- return result;
- }
-
- public static Result NewResult(int type)
- {
- RowSetNavigator navigator = null;
-
- switch (type)
- {
- case ResultConstants.CallResponse:
- case ResultConstants.Execute:
- case ResultConstants.UpdateResult:
- break;
-
- //case ResultConstants.BATCHEXECUTE:
- case ResultConstants.BatchExecDirect:
- navigator = new RowSetNavigatorClient(4);
- break;
-
- case ResultConstants.SetSessionAttr:
- case ResultConstants.ParamMetadata:
- navigator = new RowSetNavigatorClient(1);
- break;
-
- case ResultConstants.BatchExecResponse:
- navigator = new RowSetNavigatorClient(4);
- break;
-
- case ResultConstants.Data:
- case ResultConstants.DataHead:
- case ResultConstants.DataRows:
- case ResultConstants.Generated:
- break;
-
- case ResultConstants.LargeObjectOp:
- throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- }
-
- Result result = new Result(type) {navigator = navigator};
-
- return result;
- }
-
- //UNUSED CODE
- //public static Result NewResult(DataInputStream dataInput,
- // RowInputBinary input)
- //{
- // return NewResult(null, dataInput.ReadByte(), dataInput, input);
- //}
-
- //public static Result NewResult(Session session, int mode,
- // DataInputStream dataInput,
- // RowInputBinary input)
- //{
-
- // try
- // {
- // if (mode == ResultConstants.LARGE_OBJECT_OP)
- // {
- // return ResultLob.NewLob(dataInput, false);
- // }
-
- // Result result = NewResult(session, dataInput, input, mode);
-
- // return result;
- // }
- // catch (IOException)
- // {
- // throw Error.GetError(ErrorCode.X_08000);
- // }
- //}
-
- //UNUSED CODE
- //public void ReadAdditionalResults(SessionInterface session,
- // DataInputStream inputStream,
- // RowInputBinary input)
- //{
-
- // SetSession(session);
-
- // Result currentResult = this;
- // bool hasLob = false;
-
- // while (true)
- // {
- // int addedResultMode = inputStream.ReadByte();
-
- // if (addedResultMode == ResultConstants.LARGE_OBJECT_OP)
- // {
- // ResultLob resultLob = ResultLob.NewLob(inputStream, false);
-
- // if (session is Session)
- // {
- // ((Session)session).AllocateResultLob(resultLob,
- // inputStream);
- // }
-
- // currentResult.AddLobResult(resultLob);
-
- // hasLob = true;
-
- // continue;
- // }
-
- // if (hasLob)
- // {
- // hasLob = false;
-
- // if (session is Session)
- // {
- // ((Session)session).RegisterResultLobs(currentResult);
- // }
- // }
-
- // if (addedResultMode == ResultConstants.NONE)
- // {
- // return;
- // }
-
- // currentResult = NewResult(null, inputStream, input, addedResultMode);
-
- // AddChainedResult(currentResult);
- // }
- //}
-
- //UNUSED CODE
- //private static Result NewResult(Session session, DataInputStream dataInput,
- // RowInputBinary input,
- // int mode)
- //{
-
- // Result result = NewResult(mode);
-
-
- // int length = dataInput.ReadInt();
-
- // input.ResetRow(0, length);
-
- // byte[] byteArray = input.GetBuffer();
- // int offset = 4;
-
- // dataInput.ReadFully(byteArray, offset, length - offset);
-
- // switch (mode)
- // {
-
- // case ResultConstants.GETSESSIONATTR:
- // result.statementReturnType = input.ReadByte();
- // break;
-
- // case ResultConstants.DISCONNECT:
- // case ResultConstants.RESETSESSION:
- // case ResultConstants.STARTTRAN:
- // break;
-
- // case ResultConstants.PREPARE:
- // result.SetStatementType(input.ReadByte());
-
- // result.mainString = input.ReadString();
- // result.rsProperties = input.ReadByte();
- // result.generateKeys = input.ReadByte();
-
- // if (result.generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_NAMES || result
- // .generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_INDEXES)
- // {
- // result.generatedMetaData = new ResultMetaData(input);
- // }
- // break;
-
- // case ResultConstants.CLOSE_RESULT:
- // result.id = input.ReadLong();
- // break;
-
- // case ResultConstants.FREESTMT:
- // result.statementID = input.ReadLong();
- // break;
-
- // case ResultConstants.EXECDIRECT:
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
- // result.statementReturnType = input.ReadByte();
- // result.mainString = input.ReadString();
- // result.rsProperties = input.ReadByte();
- // result.queryTimeout = input.ReadShort();
- // result.generateKeys = input.ReadByte();
-
- // if (result.generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_NAMES || result
- // .generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_INDEXES)
- // {
- // result.generatedMetaData = new ResultMetaData(input);
- // }
- // break;
-
- // case ResultConstants.CONNECT:
- // result.databaseName = input.ReadString();
- // result.mainString = input.ReadString();
- // result.subString = input.ReadString();
- // result.zoneString = input.ReadString();
- // result.updateCount = input.ReadInt();
- // break;
-
- // case ResultConstants.ERROR:
- // case ResultConstants.WARNING:
- // result.mainString = input.ReadString();
- // result.subString = input.ReadString();
- // result.errorCode = input.ReadInt();
- // break;
-
- // case ResultConstants.CONNECTACKNOWLEDGE:
- // result.databaseID = input.ReadInt();
- // result.sessionID = input.ReadLong();
- // result.mainString = input.ReadString();
- // break;
-
- // case ResultConstants.UPDATECOUNT:
- // result.updateCount = input.ReadInt();
- // break;
-
- // case ResultConstants.ENDTRAN:
- // {
- // int type = input.ReadInt();
-
- // result.SetActionType(type); // endtran type
-
- // switch (type)
- // {
-
- // case ResultConstants.TX_SAVEPOINT_NAME_RELEASE:
- // case ResultConstants.TX_SAVEPOINT_NAME_ROLLBACK:
- // result.mainString = input.ReadString(); // savepoint name
- // break;
-
- // case ResultConstants.TX_COMMIT:
- // case ResultConstants.TX_ROLLBACK:
- // case ResultConstants.TX_COMMIT_AND_CHAIN:
- // case ResultConstants.TX_ROLLBACK_AND_CHAIN:
- // break;
-
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // break;
- // }
- // case ResultConstants.SETCONNECTATTR:
- // {
- // int type = input.ReadInt(); // attr type
-
- // result.SetConnectionAttrType(type);
-
- // switch (type)
- // {
-
- // case ResultConstants.SQL_ATTR_SAVEPOINT_NAME:
- // result.mainString = input.ReadString(); // savepoint name
- // break;
-
- // // case ResultConstants.SQL_ATTR_AUTO_IPD :
- // // - always true
- // // default: throw - case never happens
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // break;
- // }
- // case ResultConstants.PREPARE_ACK:
- // result.statementReturnType = input.ReadByte();
- // result.statementID = input.ReadLong();
- // result.rsProperties = input.ReadByte();
- // result.metaData = new ResultMetaData(input);
- // result.parameterMetaData = new ResultMetaData(input);
- // break;
-
- // case ResultConstants.CALL_RESPONSE:
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
- // result.statementID = input.ReadLong();
- // result.rsProperties = input.ReadByte();
- // result.metaData = new ResultMetaData(input);
- // result.valueData = ReadSimple(input, result.metaData);
- // break;
-
- // case ResultConstants.EXECUTE:
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
- // result.statementID = input.ReadLong();
- // result.rsProperties = input.ReadByte();
- // result.queryTimeout = input.ReadShort();
-
-
- // Statement statement =
- // session.statementManager.GetStatement(
- // session, result.statementID);
-
- // result.statement = statement;
- // if (statement != null)
- // {
- // result.metaData = result.statement.GetParametersMetaData();
- // }
-
- // result.valueData = ReadSimple(input, result.metaData);
- // break;
-
- // case ResultConstants.UPDATE_RESULT:
- // {
- // result.id = input.ReadLong();
- // int type = input.ReadInt();
- // result.SetActionType(type);
- // result.metaData = new ResultMetaData(input);
- // result.valueData = ReadSimple(input, result.metaData);
-
- // break;
- // }
- // case ResultConstants.BATCHEXECRESPONSE:
- // case ResultConstants.BATCHEXECUTE:
- // case ResultConstants.BATCHEXECDIRECT:
- // case ResultConstants.SETSESSIONATTR:
- // {
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
- // result.statementID = input.ReadLong();
- // result.queryTimeout = input.ReadShort();
- // result.metaData = new ResultMetaData(input);
-
- // result._navigator.ReadSimple(input, result.metaData);
-
- // break;
- // }
- // case ResultConstants.PARAM_METADATA:
- // {
- // result.metaData = new ResultMetaData(input);
-
- // result._navigator.Read(input, result.metaData);
-
- // break;
- // }
- // case ResultConstants.REQUESTDATA:
- // {
- // result.id = input.ReadLong();
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
-
- // break;
- // }
- // case ResultConstants.DATAHEAD:
- // case ResultConstants.DATA:
- // {
- // result.id = input.ReadLong();
- // result.updateCount = input.ReadInt();
- // result.fetchSize = input.ReadInt();
- // result.rsProperties = input.ReadByte();
- // result.metaData = new ResultMetaData(input);
- // result._navigator = new RowSetNavigatorClient();
-
- // result._navigator.Read(input, result.metaData);
-
- // break;
- // }
- // case ResultConstants.DATAROWS:
- // {
- // result.metaData = new ResultMetaData(input);
- // result._navigator = new RowSetNavigatorClient();
-
- // result._navigator.Read(input, result.metaData);
-
- // break;
- // }
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // return result;
- //}
-
- /**
- * For interval PSM return values
- */
-
- public static Result NewPsmResult(int type, String label, Object value)
- {
- Result result = NewResult(ResultConstants.Value);
-
- result._errorCode = type;
- result._mainString = label;
- result.ValueData = value;
-
- return result;
- }
-
- /**
- * For interval PSM return values
- */
-
- public static Result NewPsmResult(Object value)
- {
- Result result = NewResult(ResultConstants.Value);
-
- result.ValueData = value;
-
- return result;
- }
-
- /**
- * For SQLPREPARE
- * For parparation of SQL parepared statements.
- */
-
- public static Result NewPrepareStatementRequest()
- {
- return NewResult(ResultConstants.Prepare);
- }
-
- /**
- * For SQLEXECUTE
- * For execution of SQL prepared statements.
- * The parameters are set afterwards as the Result is reused
- */
-
- public static Result NewPreparedExecuteRequest(SqlType[] types,
- long statementId)
- {
- Result result = NewResult(ResultConstants.Execute);
-
- result.MetaData = ResultMetaData.NewSimpleResultMetaData(types);
- result._statementId = statementId;
-
- result.ValueData = new object[0];
-
- return result;
- }
-
- /**
- * For CALL_RESPONSE
- * For execution of SQL callable statements.
- */
-
- public static Result NewCallResponse(SqlType[] types, long statementId,
- Object[] values)
- {
- Result result = NewResult(ResultConstants.CallResponse);
-
- result.MetaData = ResultMetaData.NewSimpleResultMetaData(types);
- result._statementId = statementId;
- result.ValueData = values;
-
- return result;
- }
-
- /**
- * For UPDATE_RESULT
- * The parameters are set afterwards as the Result is reused
- */
-
- public static Result NewUpdateResultRequest(SqlType[] types, long id)
- {
- Result result = NewResult(ResultConstants.UpdateResult);
-
- result.MetaData = ResultMetaData.NewUpdateResultMetaData(types);
- result._id = id;
-
- result.ValueData = new Object[] {};
-
- return result;
- }
-
- /**
- * For UPDATE_RESULT results
- * The parameters are set by this method as the Result is reused
- */
-
- public void SetPreparedResultUpdateProperties(Object[] parameterValues)
- {
- ValueData = parameterValues;
- }
-
- /**
- * For SQLEXECUTE results
- * The parameters are set by this method as the Result is reused
- */
-
- public void SetPreparedExecuteProperties(Object[] parameterValues,
- int maxRows, int fetchSize, int resultProps)
- {
- Mode = ResultConstants.Execute;
- ValueData = parameterValues;
- UpdateCount = maxRows;
- _fetchSize = fetchSize;
- RsProperties = resultProps;
- }
-
- /**
- * For BATCHEXECUTE
- */
- //UNUSED CODE
- //public void SetBatchedPreparedExecuteRequest()
- //{
-
- // mode = ResultConstants.BATCHEXECUTE;
-
- // if (_navigator == null)
- // {
- // _navigator = new RowSetNavigatorClient(4);
- // }
- // else
- // {
- // ((RowSetNavigatorClient)_navigator).Clear();
- // }
-
- // updateCount = 0;
- // this.fetchSize = 0;
- //}
-
- //UNUSED CODE
- //public void AddBatchedPreparedExecuteRequest(Object[] parameterValues)
- //{
- // ((RowSetNavigatorClient)_navigator).Add(parameterValues);
- //}
-
- /**
- * For BATCHEXECDIRECT
- */
-
- public static Result NewBatchedExecuteRequest()
- {
- var types = new SqlType[] {SqlType.SqlVarchar};
- Result result = NewResult(ResultConstants.BatchExecDirect);
-
- result.MetaData = ResultMetaData.NewSimpleResultMetaData(types);
-
- return result;
- }
-
- /**
- * For BATCHEXERESPONSE for a BATCHEXECUTE or BATCHEXECDIRECT
- */
-
- public static Result NewBatchedExecuteResponse(int[] updateCounts,
- Result generatedResult, Result e)
- {
- Result result = NewResult(ResultConstants.BatchExecResponse);
-
- result.AddChainedResult(generatedResult);
- result.AddChainedResult(e);
-
- var types = new SqlType[] {SqlType.SqlInteger};
-
- result.MetaData = ResultMetaData.NewSimpleResultMetaData(types);
-
- var table = new Object[updateCounts.Length][];
-
- for (int i = 0; i < updateCounts.Length; i++)
- {
- table[i] = new Object[] {updateCounts[i]};
- }
-
- ((RowSetNavigatorClient) result.navigator).SetData(table);
-
- return result;
- }
-
- //UNUSED CODE
- //public static Result NewResetSessionRequest()
- //{
-
- // Result result = NewResult(ResultConstants.RESETSESSION);
-
- // return result;
- //}
-
- //UNUSED CODE
- //public static Result NewConnectionAttemptRequest(String user,
- // String password, String database, String zoneString,
- // int timeZoneSeconds)
- //{
-
- // Result result = NewResult(ResultConstants.CONNECT);
-
- // result.mainString = user;
- // result.subString = password;
- // result.zoneString = zoneString;
- // result.databaseName = database;
- // result.updateCount = timeZoneSeconds;
-
- // return result;
- //}
-
- //UNUSED CODE
- //public static Result NewConnectionAcknowledgeResponse(Database database, long sessionID,
- // int databaseID)
- //{
-
- // Result result = NewResult(ResultConstants.CONNECTACKNOWLEDGE);
-
- // result.sessionID = sessionID;
- // result.databaseID = databaseID;
- // result.mainString =
- // database.GetProperties().GetClientPropertiesAsString();
-
- // return result;
- //}
-
- public static Result NewUpdateZeroResult()
- {
- return new Result(ResultConstants.Updatecount, 0);
- }
-
- public static Result NewUpdateCountResult(int count)
- {
- return new Result(ResultConstants.Updatecount, count);
- }
-
- public static Result NewUpdateCountResult(ResultMetaData meta, int count)
- {
- Result result = NewResult(ResultConstants.Updatecount);
- Result dataResult = NewGeneratedDataResult(meta);
-
- result.UpdateCount = count;
-
- result.AddChainedResult(dataResult);
-
- return result;
- }
-
- public static Result NewSingleColumnResult(ResultMetaData meta)
- {
- Result result = NewResult(ResultConstants.Data);
-
- result.MetaData = meta;
- result.navigator = new RowSetNavigatorClient();
-
- return result;
- }
-
- public static Result NewSingleColumnResult(String colName, SqlType type)
- {
- Result result = NewResult(ResultConstants.Data);
-
- result.MetaData = ResultMetaData.NewResultMetaData(1);
- result.MetaData.columns[0] = new ColumnBase(null, null, null, colName);
-
- result.MetaData.columns[0].SetType(type);
- result.MetaData.PrepareData();
-
- //
- result.navigator = new RowSetNavigatorClient(8);
-
- return result;
- }
-
- public static Result NewSingleColumnStringResult(String colName,
- String contents)
- {
- Result result = NewSingleColumnResult("OPERATION",
- SqlType.SqlVarchar);
-
- using (var lnr = new StringReader(contents))
- {
- while (true)
- {
- String line = null;
-
- try
- {
- line = lnr.ReadLine();
- }
- catch (Exception)
- {
- }
-
- if (line == null)
- {
- break;
- }
-
- result.GetNavigator().Add(new Object[] {line});
- }
- }
-
- return result;
- }
-
- internal static Result NewPrepareResponse(Statement statement)
- {
- Result r = NewResult(ResultConstants.PrepareAck);
-
- r.statement = statement;
- r._statementId = statement.GetId();
-
- int csType = statement.GetStatementType();
-
- r._statementReturnType =
- (csType == StatementTypes.SELECT_CURSOR || csType == StatementTypes
- .CALL)
- ? StatementTypes.RETURN_RESULT
- : StatementTypes.RETURN_COUNT;
- r.MetaData = statement.GetResultMetaData();
- r.ParameterMetaData = statement.GetParametersMetaData();
-
- return r;
- }
-
- public static Result NewFreeStmtRequest(long statementId)
- {
- Result r = NewResult(ResultConstants.FreeStmt);
-
- r._statementId = statementId;
-
- return r;
- }
-
- /**
- * For direct execution of SQL statements. The statement and other
- * parameters are set afterwards as the Result is reused
- */
-
- public static Result NewExecuteDirectRequest()
- {
- return NewResult(ResultConstants.ExecDirect);
- }
-
- /**
- * For both EXECDIRECT and PREPARE
- */
-
- public void SetPrepareOrExecuteProperties(String sql, int maxRows,
- int fetchSize, int statementReturnType, int timeout,
- int resultSetProperties, int keyMode, int[] generatedIndexes,
- String[] generatedNames)
- {
- _mainString = sql;
- UpdateCount = maxRows;
- _fetchSize = fetchSize;
- _statementReturnType = statementReturnType;
- QueryTimeout = timeout;
- RsProperties = resultSetProperties;
- _generateKeys = keyMode;
- GeneratedMetaData =
- ResultMetaData.NewGeneratedColumnsMetaData(generatedIndexes,
- generatedNames);
- }
-
- public void SetGeneratedKeys(int[] generatedIndexes, String[] generatedNames)
- {
- _generateKeys = ResultConstants.ReturnGeneratedKeys;
- GeneratedMetaData =
- ResultMetaData.NewGeneratedColumnsMetaData(generatedIndexes,
- generatedNames);
- }
-
- public static Result NewSetSavepointRequest(String name)
- {
- Result result = NewResult(ResultConstants.SetconnectAttr);
-
- result.SetConnectionAttrType(ResultConstants.SqlAttrSavepointName);
- result.SetMainString(name);
-
- return result;
- }
-
- public static Result NewRequestDataResult(long id, int offset, int count)
- {
- Result result = NewResult(ResultConstants.RequestData);
-
- result._id = id;
- result.UpdateCount = offset;
- result._fetchSize = count;
-
- return result;
- }
-
- public static Result NewDataResult(ResultMetaData md)
- {
- Result result = NewResult(ResultConstants.Data);
-
- result.navigator = new RowSetNavigatorClient();
- result.MetaData = md;
-
- return result;
- }
-
- public static Result NewGeneratedDataResult(ResultMetaData md)
- {
-
- Result result = NewResult(ResultConstants.Generated);
-
- result.navigator = new RowSetNavigatorClient();
- result.MetaData = md;
-
- return result;
- }
-
- /**
- * initially, only used for updatability
- */
-
- public int GetExecuteProperties()
- {
- return RsProperties;
- }
-
-
- /**
- * For DATA
- */
-
- public void SetDataResultProperties(int maxRows, int fetchSize,
- int resultSetScrollability,
- int resultSetConcurrency,
- int resultSetHoldability)
- {
- UpdateCount = maxRows;
- _fetchSize = fetchSize;
- RsProperties = ResultProperties.GetValueForAdo(
- resultSetScrollability,
- resultSetConcurrency,
- resultSetHoldability);
- }
-
- public static Result NewDataHeadResult(ISessionInterface session,
- Result source, int offset,
- int count)
- {
- if (offset + count > source.navigator.GetSize())
- {
- count = source.navigator.GetSize() - offset;
- }
-
- Result result = NewResult(ResultConstants.DataHead);
-
- result.MetaData = source.MetaData;
- result.navigator = new RowSetNavigatorClient(source.navigator, offset,
- count);
-
- result.navigator.SetId(source.navigator.GetId());
- result.SetSession(session);
-
- result.RsProperties = source.RsProperties;
- result._fetchSize = source._fetchSize;
-
- return result;
- }
-
-
- public static Result NewDataRowsResult(Result source, int offset,
- int count)
- {
- if (offset + count > source.navigator.GetSize())
- {
- count = source.navigator.GetSize() - offset;
- }
-
- Result result = NewResult(ResultConstants.DataRows);
-
- result._id = source._id;
- result.MetaData = source.MetaData;
- result.navigator = new RowSetNavigatorClient(source.navigator, offset,
- count);
-
- return result;
- }
-
- public static Result NewDataRowsResult(RowSetNavigator navigator)
- {
- Result result = NewResult(ResultConstants.DataRows);
-
- result.navigator = navigator;
-
- return result;
- }
-
- /**
- * Result structure used for set/get session attributes
- */
-
- public static Result NewSessionAttributesResult()
- {
- Result result = NewResult(ResultConstants.Data);
-
- result.navigator = new RowSetNavigatorClient(1);
- result.MetaData = SessionAttributesMetaData;
-
- result.navigator.Add(new Object[SessionInfoTypeConsts.InfoLimit]);
-
- return result;
- }
-
- public static Result NewWarningResult(CoreException w)
- {
- Result result = NewResult(ResultConstants.Warning);
-
- result._mainString = w.GetMessage();
- result._subString = w.GetSqlState();
- result._errorCode = w.GetErrorCode();
-
- return result;
- }
-
- public static Result NewErrorResult(Exception t)
- {
- return NewErrorResult(t, null);
- }
-
- /** @todo 1.9.0 fredt - move the messages to Error.java */
-
- public static Result NewErrorResult(Exception t, String statement)
- {
- Result result = NewResult(ResultConstants.Error);
- CoreException tExp = t as CoreException;
- if (tExp != null)
- {
- result._exception = tExp;
- result._mainString = result._exception.GetMessage();
- result._subString = result._exception.GetSqlState();
-
- if (statement != null)
- {
- result._mainString += " in statement [" + statement + "]";
- }
-
- result._errorCode = result._exception.GetErrorCode();
- }
- else if (t is OutOfMemoryException)
- {
- // gc() at this point may clear the memory allocated so far
-
- /** @todo 1.9.0 - review if it's better to gc higher up the stack */
- //System.GC.Collect();
-
- result._exception = Error.GetError(ErrorCode.OUT_OF_MEMORY, t);
- result._mainString = result._exception.GetMessage();
- result._subString = result._exception.GetSqlState();
- result._errorCode = result._exception.GetErrorCode();
- }
- else
- {
- result._exception = Error.GetError(ErrorCode.GENERAL_ERROR, t);
- result._mainString = result._exception.GetMessage() + " "
- + t.Message;
- result._subString = result._exception.GetSqlState();
- result._errorCode = result._exception.GetErrorCode();
-
- if (statement != null)
- {
- result._mainString += " in statement [" + statement + "]";
- }
- }
-
- return result;
- }
-
- //UNUSED CODE
- //public virtual void Write(Stream dataOut,
- // RowOutputInterface rowOut)
- //{
-
- // rowOut.Reset();
- // rowOut.WriteByte(mode);
-
- // int startPos = rowOut.Size();
-
- // rowOut.WriteSize(0);
-
- // switch (mode)
- // {
-
- // case ResultConstants.GETSESSIONATTR:
- // rowOut.WriteByte((byte)statementReturnType);
- // break;
-
- // case ResultConstants.DISCONNECT:
- // case ResultConstants.RESETSESSION:
- // case ResultConstants.STARTTRAN:
- // break;
-
- // case ResultConstants.PREPARE:
- // rowOut.WriteByte((byte)statementReturnType);
- // rowOut.WriteString(mainString);
- // rowOut.WriteByte(rsProperties);
- // rowOut.WriteByte((byte)generateKeys);
-
- // if (generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_NAMES || generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_INDEXES)
- // {
- // generatedMetaData.write(rowOut);
- // }
- // break;
-
- // case ResultConstants.FREESTMT:
- // rowOut.WriteLong(statementID);
- // break;
-
- // case ResultConstants.CLOSE_RESULT:
- // rowOut.WriteLong(id);
- // break;
-
- // case ResultConstants.EXECDIRECT:
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
- // rowOut.WriteByte((byte)statementReturnType);
- // rowOut.WriteString(mainString);
- // rowOut.WriteByte(rsProperties);
- // rowOut.WriteShort((short)queryTimeout);
- // rowOut.WriteByte((byte)generateKeys);
-
- // if (generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_NAMES || generateKeys == ResultConstants
- // .RETURN_GENERATED_KEYS_COL_INDEXES)
- // {
- // generatedMetaData.write(rowOut);
- // }
- // break;
-
- // case ResultConstants.CONNECT:
- // rowOut.WriteString(databaseName);
- // rowOut.WriteString(mainString);
- // rowOut.WriteString(subString);
- // rowOut.WriteString(zoneString);
- // rowOut.WriteInt(updateCount);
- // break;
-
- // case ResultConstants.ERROR:
- // case ResultConstants.WARNING:
- // rowOut.WriteString(mainString);
- // rowOut.WriteString(subString);
- // rowOut.WriteInt(errorCode);
- // break;
-
- // case ResultConstants.CONNECTACKNOWLEDGE:
- // rowOut.WriteInt(databaseID);
- // rowOut.WriteLong(sessionID);
- // rowOut.WriteString(mainString);
- // break;
-
- // case ResultConstants.UPDATECOUNT:
- // rowOut.WriteInt(updateCount);
- // break;
-
- // case ResultConstants.ENDTRAN:
- // {
- // int type = GetActionType();
-
- // rowOut.WriteInt(type); // endtran type
-
- // switch (type)
- // {
-
- // case ResultConstants.TX_SAVEPOINT_NAME_RELEASE:
- // case ResultConstants.TX_SAVEPOINT_NAME_ROLLBACK:
- // rowOut.WriteString(mainString); // savepoint name
- // break;
-
- // case ResultConstants.TX_COMMIT:
- // case ResultConstants.TX_ROLLBACK:
- // case ResultConstants.TX_COMMIT_AND_CHAIN:
- // case ResultConstants.TX_ROLLBACK_AND_CHAIN:
- // break;
-
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // break;
- // }
- // case ResultConstants.PREPARE_ACK:
- // rowOut.WriteByte((byte)statementReturnType);
- // rowOut.WriteLong(statementID);
- // rowOut.WriteByte(rsProperties);
- // metaData.write(rowOut);
- // parameterMetaData.write(rowOut);
- // break;
-
- // case ResultConstants.CALL_RESPONSE:
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
- // rowOut.WriteLong(statementID);
- // rowOut.WriteByte(rsProperties);
- // metaData.write(rowOut);
- // WriteSimple(rowOut,metaData, (Object[])valueData);
- // break;
-
- // case ResultConstants.EXECUTE:
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
- // rowOut.WriteLong(statementID);
- // rowOut.WriteByte(rsProperties);
- // rowOut.WriteShort((short)queryTimeout);
- // WriteSimple(rowOut, metaData, (Object[])valueData);
- // break;
-
- // case ResultConstants.UPDATE_RESULT:
- // rowOut.WriteLong(id);
- // rowOut.WriteInt(GetActionType());
- // metaData.write(rowOut);
- // WriteSimple(rowOut, metaData, (Object[])valueData);
- // break;
-
- // case ResultConstants.BATCHEXECRESPONSE:
- // case ResultConstants.BATCHEXECUTE:
- // case ResultConstants.BATCHEXECDIRECT:
- // case ResultConstants.SETSESSIONATTR:
- // {
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
- // rowOut.WriteLong(statementID);
- // rowOut.WriteShort((short)queryTimeout);
- // metaData.write(rowOut);
- // _navigator.WriteSimple(rowOut, metaData);
-
- // break;
- // }
- // case ResultConstants.PARAM_METADATA:
- // {
- // metaData.write(rowOut);
- // _navigator.Write(rowOut, metaData);
-
- // break;
- // }
- // case ResultConstants.SETCONNECTATTR:
- // {
- // int type = GetConnectionAttrType();
-
- // rowOut.WriteInt(type); // attr type / updateCount
-
- // switch (type)
- // {
-
- // case ResultConstants.SQL_ATTR_SAVEPOINT_NAME:
- // rowOut.WriteString(mainString); // savepoint name
- // break;
-
- // // case ResultConstants.SQL_ATTR_AUTO_IPD // always true
- // // default: // throw, but case never happens
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // break;
- // }
- // case ResultConstants.REQUESTDATA:
- // {
- // rowOut.WriteLong(id);
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
-
- // break;
- // }
- // case ResultConstants.DATAROWS:
- // metaData.write(rowOut);
- // _navigator.Write(rowOut, metaData);
- // break;
-
- // case ResultConstants.DATAHEAD:
- // case ResultConstants.DATA:
- // rowOut.WriteLong(id);
- // rowOut.WriteInt(updateCount);
- // rowOut.WriteInt(fetchSize);
- // rowOut.WriteByte(rsProperties);
- // metaData.write(rowOut);
- // _navigator.Write(rowOut, metaData);
- // break;
-
- // default:
- // throw Error.RuntimeError(ErrorCode.U_S0500, "Result");
- // }
-
- // rowOut.WriteIntData(rowOut.Size() - startPos, startPos);
- // dataOut.Write(rowOut.GetOutputStream().GetBuffer(), 0, rowOut.Size());
-
- // int count = GetLobCount();
- // Result current = this;
-
- // for (int i = 0; i < count; i++)
- // {
- // ResultLob lob = current.lobResults;
-
- // lob.WriteBody(new DataOutputStream(dataOut));
-
- // current = current.lobResults;
- // }
-
- // if (chainedResult == null)
- // {
- // dataOut.WriteByte(ResultConstants.NONE);
- // }
- // else
- // {
- // chainedResult.Write(dataOut, rowOut);
- // }
-
- // dataOut.Flush();
- //}
-
- public int GetResultType()
- {
- return Mode;
- }
-
- public bool IsData()
- {
- return Mode == ResultConstants.Data
- || Mode == ResultConstants.DataHead;
- }
-
- public bool IsError()
- {
- return Mode == ResultConstants.Error;
- }
-
- public bool IsWarning()
- {
- return Mode == ResultConstants.Warning;
- }
-
- public bool IsUpdateCount()
- {
- return Mode == ResultConstants.Updatecount;
- }
-
- public bool IsSimpleValue()
- {
- return Mode == ResultConstants.Value;
- }
-
- public bool HasGeneratedKeys()
- {
- return Mode == ResultConstants.Updatecount && _chainedResult != null;
- }
-
- public CoreException GetException()
- {
- return _exception;
- }
-
- public long GetStatementId()
- {
- return _statementId;
- }
-
- public void SetStatementId(long statementId)
- {
- _statementId = statementId;
- }
-
- public String GetMainString()
- {
- return _mainString;
- }
-
- public void SetMainString(String sql)
- {
- _mainString = sql;
- }
-
- public String GetSubString()
- {
- return _subString;
- }
-
- public String GetZoneString()
- {
- return _zoneString;
- }
-
- public int GetErrorCode()
- {
- return _errorCode;
- }
-
- public Object GetValueObject()
- {
- return ValueData;
- }
-
- public void SetValueObject(Object value)
- {
- ValueData = value;
- }
-
- internal Statement GetStatement()
- {
- return statement;
- }
-
- internal void SetStatement(Statement statement)
- {
- this.statement = statement;
- }
-
- public String GetDatabaseName()
- {
- return _databaseName;
- }
-
- public void SetMaxRows(int count)
- {
- UpdateCount = count;
- }
-
- public int GetFetchSize()
- {
- return _fetchSize;
- }
-
- public void SetFetchSize(int count)
- {
- _fetchSize = count;
- }
-
- public int GetUpdateCount()
- {
- return UpdateCount;
- …
Large files files are truncated, but you can click here to view the full file