Exemplo n.º 1
0
        /// <summary>
        /// Fetch
        /// </summary>
        /// <returns></returns>
        internal GatewayResult CursorFetch()
        {
            //vew_fetch_rng
            GatewayCommandBase cursorCommand = GatewayCommandsFactory.CreateCursorFetchCommand(CurrentCursor, LocalDataviewManager.LocalManager);

            return(cursorCommand.Execute());
        }
Exemplo n.º 2
0
        /// <summary>
        /// open cursor
        /// </summary>
        /// <param name="reverse"></param>
        /// <param name="startPosition"></param>
        /// <param name="useLocate">If this is the 1st access to the table, locate values should be considered.
        /// if not - use only ranges</param>
        /// <returns></returns>
        internal GatewayResult OpenCursor(bool reverse, DbPos startPosition, BoudariesFlags boundariesFlag)
        {
            CurrentCursor.CursorDefinition.SetFlagValue(CursorProperties.DirReversed, reverse);
            CurrentCursor.CursorDefinition.StartPosition = startPosition;

            // build the RangeData list
            CurrentCursor.RuntimeCursorData.Ranges = RangeBuilder.Build(boundariesFlag);

            GatewayCommandBase cursorCommand = GatewayCommandsFactory.CreateCursorOpenCommand(CurrentCursor, LocalDataviewManager.LocalManager);

            //String r = CurrentCursor.Serialize();

            return(cursorCommand.Execute());
        }
Exemplo n.º 3
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal GatewayResult CloseCursor()
        {
            GatewayCommandBase cursorCommand = GatewayCommandsFactory.CreateCursorCloseCommand(CurrentCursor, LocalDataviewManager.LocalManager);

            return(cursorCommand.Execute());
        }
Exemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult gatewayResult = new GatewayResult();

            Transaction ownerTransaction = null;

            if (TaskTransactionManager.LocalOpenedTransactionsCount > 0)
            {
                gatewayResult = RollbaclTransactionInGateway();
                if (gatewayResult.Success)
                {
                    if (DataviewManager.Transaction != null)
                    {
                        ownerTransactionTask = DataviewManager.Transaction.OwnerTask;
                        ownerTransaction     = ownerTransactionTask.DataviewManager.LocalDataviewManager.Transaction;

                        //1.  calculate the current task , the task that was execute the rollback transaction (Command.taskgTag)
                        //Debug.WriteLine("Commit Transaction on task--> " + LocalDataviewManager.CurrentOpenTransaction.OwnerTask);
                        ownerTransactionTask.CancelAndRefreshCurrentRecordAfterRollback();
                    }


                    GatewayCommandBase transactionCommand = GatewayCommandsFactory.CreateGatewayCommandOpenTransaction(LocalManager);
                    gatewayResult = transactionCommand.Execute();

                    //2.	Close\refresh all tasks that are under the current transaction
                    switch (Command.Rollback)
                    {
                    case RollbackEventCommand.RollbackType.CANCEL:
                        MGDataCollection.Instance.ForEachTask(new TaskDelegate(CancelAndRefreshCurrentRecordAfterRollback), ownerTransactionTask);
                        MGDataCollection.Instance.ForEachTask(new TaskDelegate(ViewRefreshAfterRollback), ownerTransactionTask);
                        break;

                    case RollbackEventCommand.RollbackType.ROLLBACK:
                    {
                        // fixed bug#294247 rollback the value in StopExecution
                        bool saveStopExec = ClientManager.Instance.EventsManager.GetStopExecutionFlag();
                        StopExecWasUpdated = false;
                        MGDataCollection.Instance.ForEachTask(new TaskDelegate(CancelAndRefreshCurrentRecordAfterRollback), null);
                        MGDataCollection.Instance.ForEachTask(new TaskDelegate(ViewRefreshAfterRollback), null);

                        if (ownerTransactionTask != null)
                        {
                            ownerTransactionTask.AbortDirectTasks();
                        }

                        if (StopExecWasUpdated)
                        {
                            ClientManager.Instance.EventsManager.setStopExecution(saveStopExec);
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
                else
                {
                    gatewayResult.ErrorCode = GatewayErrorCode.TransactionAbort;
                }
            }
            return(gatewayResult);
        }