Example #1
0
        /// <summary>
        /// Prepare and Open runtime cursor
        /// </summary>
        /// <param name="runtimeCursor"></param>
        private void PrepareAndOpenCursor(RuntimeCursor runtimeCursor, bool openTransaction)
        {
            GatewayResult result = null;

            runtimeCursor.CursorDefinition.StartPosition   = new DbPos(true);
            runtimeCursor.CursorDefinition.CurrentPosition = new DbPos(true);

            result = GatewayCommandsFactory.CreateCursorPrepareCommand(runtimeCursor, ClientManager.Instance.LocalManager).Execute();
            if (result.Success)
            {
                if (openTransaction)
                {
                    result = GatewayCommandsFactory.CreateGatewayCommandOpenTransaction(ClientManager.Instance.LocalManager).Execute();
                }
                if (result.Success)
                {
                    result = GatewayCommandsFactory.CreateCursorOpenCommand(runtimeCursor, ClientManager.Instance.LocalManager).Execute();
                }
            }

            if (!result.Success)
            {
                throw new DataSourceConversionFailedException(runtimeCursor.CursorDefinition.DataSourceDefinition.Name, result.ErrorDescription);
            }
        }
        /// <summary>
        /// Execute DbDisconnect command.
        /// </summary>
        /// <returns></returns>
        internal override GatewayResult Execute()
        {
            GatewayResult result = new GatewayResult();

            try
            {
                if (DbDefinition != null)
                {
                    DatabaseDefinition dbDefinition = (DatabaseDefinition)DbDefinition.Clone();
                    UpdateDataBaseLocation(dbDefinition);

                    result.ErrorCode = GatewayAdapter.Gateway.DbDisconnect(dbDefinition.Location, out tableName);
                }
                else
                {
                    result.ErrorCode = GatewayErrorCode.DatasourceNotExist;
                }
            }
            catch
            {
                throw new NotImplementedException();
            }

            SetErrorDetails(result);

            return(result);
        }
Example #3
0
        /// <summary>
        /// NOT IMLEMENTED !!!
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult result = new GatewayResult();

            //TODO: Implement
            return(result);
        }
Example #4
0
        internal override ReturnResultBase Execute()
        {
            List <IDataSourceViewDefinition> dataControlsSourceDefs = DataSourceDefinitionsBuilder.BuildDataControlSourceDefinitions(Task);
            GatewayResult result = LocalDataviewManager.CreateDataControlViews(dataControlsSourceDefs);

            return(result);
        }
        /// <summary>
        /// fetch-and-compute loop
        /// </summary>
        /// <returns></returns>
        private bool FindMatchingRecord()
        {
            bool recordFound = false;

            if (!StartPosition.IsZero)
            {
                GatewayResult result = TaskViews.OpenCursors(Reverse, StartPosition);

                if (result.Success)
                {
                    IRecord record;
                    // Looking for one record only
                    do
                    {
                        record = GetBasicRecord();
                        if (record != null && RecordComputer.Compute(record, true, false, false).Success)
                        {
                            recordFound = true;
                            break;
                        }
                    } while (record != null);
                }

                TaskViews.CloseMainCursor();
            }
            return(recordFound);
        }
Example #6
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult result = new GatewayResult();

            GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);

            Debug.Assert(gatewayAdapterCursor != null);

            // clear old ranges - might contain old locates.
            gatewayAdapterCursor.Ranges.Clear();

            // TODO 1:
            // fm_crsr_cache_open ???

            // Copy ranges from runtime to gateway
            if (RuntimeCursor.RuntimeCursorData.Ranges != null)
            {
                foreach (RangeData runtimeRange in RuntimeCursor.RuntimeCursorData.Ranges)
                {
                    RangeData gatewayRange = new RangeData(runtimeRange);
                    RangeConvert(gatewayRange, runtimeRange, gatewayAdapterCursor);
                    gatewayAdapterCursor.Ranges.Add(gatewayRange);
                }
            }

            // TODO 2:
            // fm_copy_sql_ranges

            result.ErrorCode = GatewayAdapter.Gateway.CrsrOpen(gatewayAdapterCursor);
            SetErrorDetails(result);
            return(result);
        }
Example #7
0
        /// <summary>
        /// Execute SQL command.
        /// </summary>
        /// <returns></returns>
        internal override GatewayResult Execute()
        {
            GatewayResult result = new GatewayResult();

            try
            {
                if (DbDefinition != null)
                {
                    DatabaseDefinition dbDefinition = (DatabaseDefinition)DbDefinition.Clone();
                    UpdateDataBaseLocation(dbDefinition);
                    result.ErrorCode = GatewayAdapter.Gateway.SQLExecute(dbDefinition, sqlStatement, storageAttributes, out statementReturnedValues, ref dbFields);

                    for (int i = 0; i < statementReturnedValues.Length; i++)
                    {
                        if (statementReturnedValues[i] != null)
                        {
                            statementReturnedValues[i] = GatewayAdapter.StorageConvertor.ConvertGatewayToRuntimeField(dbFields[i], statementReturnedValues[i]);
                        }
                    }
                }
                else
                {
                    result.ErrorCode = GatewayErrorCode.DatasourceNotExist;
                }
            }
            catch
            {
                throw new NotImplementedException();
            }

            SetErrorDetails(result);

            return(result);
        }
Example #8
0
 /// <summary>
 /// update end of view
 /// </summary>
 /// <param name="result"></param>
 void UpdateViewEnd(GatewayResult result)
 {
     if (result.ErrorCode == GatewayErrorCode.NoRecord && !TaskViews.ViewMain.IgnorePositionCache)
     {
         PositionCache.UpdateEnd(Reverse);
     }
 }
Example #9
0
        /// <summary>
        /// activate on record's delete
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        protected override GatewayResult OnDelete(IRecord record)
        {
            GatewayResult result = new GatewayResult();

            ClearRecord(record);
            return(result);
        }
Example #10
0
        /// <summary>
        /// open transaction
        /// if there is no transaction opened already then
        ///     open and save it info on ClientManager.Instance.CurrentLocalTransactionOpened
        /// else
        ///     if (transaction that was opend is in my parent task)
        ///         OK
        ///     else
        ///         failed !!!
        ///
        /// </summary>
        internal override ReturnResultBase Execute()
        {
            ReturnResultBase returnResultBase = new GatewayResult();

            Transaction transaction = DataviewManager.Transaction.OwnerTask.DataviewManager.LocalDataviewManager.Transaction;

            if (!transaction.isOpened())
            {
                // need to open in the gateway only if no opend before
                if (TaskTransactionManager.LocalOpenedTransactionsCount == 0)
                {
                    returnResultBase = GatewayCommandsFactory.CreateGatewayCommandOpenTransaction(LocalManager).Execute();
                }
                if (returnResultBase.Success)
                {
                    transaction.Opened = true;
                    TaskTransactionManager.LocalOpenedTransactionsCount++;

                    //transaction.OwnerTask.TaskTransactionManager.SetCurrentOpenTransactionAsLocalTransaction();
                    //Debug.WriteLine("Open Transaction on task--> " + LocalDataviewManager.CurrentOpenTransaction.OwnerTask);
                }

                //else
                //{
                //   // check if the open transaction is in the parent task
                //   if (!transaction.OwnerTask.isDescendentOf(LocalDataviewManager.CurrentOpenTransaction.OwnerTask))
                //      returnResultBase = new ReturnResult(MsgInterface.FMERROR_STR_TRANS_OPEN_FAILED);
                //}
            }
            return(returnResultBase);
        }
Example #11
0
        /// <summary>
        /// open local tables
        /// </summary>
        /// <returns></returns>
        private GatewayResult OpenTables()
        {
            GatewayResult retVal = new GatewayResult();

            foreach (DataSourceReference dataSourceRef in Task.DataSourceReferences)
            {
                if (dataSourceRef.IsLocal)
                {
                    String fileName;
                    if (dataSourceRef.NameExpression > 0)
                    {
                        Task.EvaluateExpressionAsUnicode(dataSourceRef.NameExpression, out fileName);
                    }
                    else
                    {
                        fileName = dataSourceRef.DataSourceDefinition.Name;
                    }

                    //create gw open command
                    GatewayCommandFileOpen fileOpenCommand = GatewayCommandsFactory.CreateFileOpenCommand(fileName, dataSourceRef.DataSourceDefinition,
                                                                                                          dataSourceRef.Access, ClientManager.Instance.LocalManager);
                    retVal = fileOpenCommand.Execute();
                    if (!retVal.Success)
                    {
                        break;
                    }
                }
            }
            return(retVal);
        }
Example #12
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal override GatewayResult Execute()
        {
            GatewayResult gatewayResult = new GatewayResult();

            // must set the DatabaseType, the getter of property GatewayAdapter is used it.
            this.DatabaseType = GatewaysManager.DATA_SOURCE_DATATYPE_LOCAL;

            //check if TransactionWasOpned
            if (GatewayAdapter.TransactionWasOpned)
            {
                Record();

                // call the gateway command
                gatewayResult.ErrorCode = GatewayAdapter.Gateway.Trans((int)TransactionModes);

                SetErrorDetails(gatewayResult);

                // reset the static member
                if (gatewayResult.Success)
                {
                    GatewayAdapter.TransactionWasOpned = false;
                }
            }

            return(gatewayResult);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult gatewayResult = new GatewayResult();

            Transaction transaction = DataviewManager.Transaction.OwnerTask.DataviewManager.LocalDataviewManager.Transaction;

            // closeclose the transaction only if there is transaction that open
            if (TaskTransactionManager.LocalOpenedTransactionsCount > 0)
            {
                gatewayResult = CloseTransactionInGateway();
                if (gatewayResult.Success)
                {
                    //Debug.WriteLine("Commit Transaction on task--> " + LocalDataviewManager.CurrentOpenTransaction.OwnerTask);
                    transaction.Opened = false;
                    TaskTransactionManager.LocalOpenedTransactionsCount--;

                    // there is tasks that in local transaction, we must open the transaction again
                    if (TaskTransactionManager.LocalOpenedTransactionsCount > 0)
                    {
                        gatewayResult = GatewayCommandsFactory.CreateGatewayCommandOpenTransaction(LocalManager).Execute();
                    }
                }
                else
                {
                    gatewayResult.ErrorCode = GatewayErrorCode.TransactionCommit;
                }
            }
            return(gatewayResult);
        }
Example #14
0
        /// <summary>
        /// Convert DataSource from old DataSourceDefinition to new DataSourceDefinition. It create temporaryDataSource definition and perform all operations
        /// on temporary DataSourcedefinition and return it.
        /// </summary>
        /// <param name="fromDataSourceDefinition"></param>
        /// <param name="toDataSourceDefinition"></param>
        /// <returns>Temporary DataSourceDefinition</returns>
        private DataSourceDefinition ConvertDataSource(DataSourceDefinition fromDataSourceDefinition, DataSourceDefinition toDataSourceDefinition)
        {
            Logger.Instance.WriteSupportToLog("convertDataSource():>>>> ", true);
            Logger.Instance.WriteSupportToLog(String.Format("convertDataSource(): converting table {0}", fromDataSourceDefinition.Name), true);

            GatewayResult result = null;

            string temporaryTableName = GetTemporaryTableName(fromDataSourceDefinition.Id);

            DataSourceDefinition temporaryDataSourceDefinition = (DataSourceDefinition)toDataSourceDefinition.Clone();

            temporaryDataSourceDefinition.Name = temporaryTableName;

            // In order to genearte temporary key name for the temporary dbh set magic key mask on the keys.
            for (int keyIndex = 0; keyIndex < temporaryDataSourceDefinition.Keys.Count; keyIndex++)
            {
                DBKey key = temporaryDataSourceDefinition.Keys[keyIndex];
                key.SetMask(KeyMasks.MagicKeyMask);
            }

            // Delete temporary table, if exists
            result = GatewayCommandsFactory.CreateFileDeleteCommand(temporaryTableName, temporaryDataSourceDefinition, ClientManager.Instance.LocalManager).Execute();
            if (!result.Success && result.ErrorCode != GatewayErrorCode.FileNotExist)
            {
                throw new DataSourceConversionFailedException(fromDataSourceDefinition.Name, result.ErrorDescription);
            }

            // Open source and temporary table
            temporaryDataSourceDefinition.SetMask(DbhMask.CheckExistMask);
            result = GatewayCommandsFactory.CreateFileOpenCommand(temporaryTableName, temporaryDataSourceDefinition, Access.Write, ClientManager.Instance.LocalManager).Execute();
            if (result.Success)
            {
                result = GatewayCommandsFactory.CreateFileOpenCommand(fromDataSourceDefinition.Name, fromDataSourceDefinition, Access.Read, ClientManager.Instance.LocalManager).Execute();
            }

            if (!result.Success)
            {
                throw new DataSourceConversionFailedException(fromDataSourceDefinition.Name, result.ErrorDescription);
            }

            //Convert values of source table and insert it into temporary table
            ConvertAndInsertValues(fromDataSourceDefinition, temporaryDataSourceDefinition);

            //Close source and temporary table
            result = GatewayCommandsFactory.CreateFileCloseCommand(temporaryDataSourceDefinition, ClientManager.Instance.LocalManager).Execute();
            if (result.Success)
            {
                GatewayCommandsFactory.CreateFileCloseCommand(fromDataSourceDefinition, ClientManager.Instance.LocalManager).Execute();
            }

            if (!result.Success)
            {
                throw new DataSourceConversionFailedException(fromDataSourceDefinition.Name, result.ErrorDescription);
            }

            Logger.Instance.WriteSupportToLog("convertDataSource():<<<< ", true);

            return(temporaryDataSourceDefinition);
        }
Example #15
0
        /// <summary>
        /// Checks if correspondng table of data source is exist at backend
        /// </summary>
        /// <param name="dataSourceDefinition"></param>
        /// <returns>returns true if table exists</returns>
        private bool IsTableExist(DataSourceDefinition dataSourceDefinition)
        {
            GatewayCommandFileExist fileExistCommand = GatewayCommandsFactory.CreateFileExistCommand(dataSourceDefinition.Name, dataSourceDefinition,
                                                                                                     ClientManager.Instance.LocalManager);
            GatewayResult result = fileExistCommand.Execute();

            return(result.Success);
        }
        internal override ReturnResultBase Execute()
        {
            GatewayResult  result         = new GatewayResult();
            RecordComputer recordComputer = TaskViews.RecordComputer;

            recordComputer.RecomputeUnit(UnitId, Record);
            return(result);
        }
        /// <summary>
        /// Execute DbDisConnect gateway command.
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult result = new GatewayResult();
            GatewayCommandDbDisconnect dbDisconnectCommand = GatewayCommandsFactory.CreateGatewayCommandDbDisconnect(LocalDataviewManager.LocalManager, dataBaseName);

            result = dbDisconnectCommand.Execute();

            return(result);
        }
        protected override void SetErrorDetails(GatewayResult result)
        {
            base.SetErrorDetails(result);

            if (result.ErrorCode == GatewayErrorCode.DatasourceOpen)
            {
                result.ErrorParams[0] = ", data source: " + tableName;
            }
        }
Example #19
0
        protected override void SetErrorDetails(GatewayResult result)
        {
            base.SetErrorDetails(result);

            if (!result.Success)
            {
                result.ErrorParams[0] = FileName;
            }
        }
Example #20
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private GatewayResult RollbaclTransactionInGateway()
        {
            GatewayCommandBase TransactionCommand = new GatewayCommandCloseTransaction(TransactionModes.Abort);

            TransactionCommand.LocalManager = LocalManager;

            GatewayResult gatewayResult = TransactionCommand.Execute();

            return(gatewayResult);
        }
Example #21
0
        /// <summary>
        /// update all links
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        private GatewayResult UpdateLinks(IRecord record)
        {
            GatewayResult result = new GatewayResult();

            for (int i = 0; i < LinkViews.Count && result.Success; i++)
            {
                result = LinkViews[i].ModifyRecord(record);
            }
            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        private GatewayResult CloseTransactionInGateway()
        {
            GatewayCommandBase transactionCommand = new GatewayCommandCloseTransaction(TransactionModes);

            transactionCommand.LocalManager = LocalManager;

            GatewayResult gatewayResult = transactionCommand.Execute();

            return(gatewayResult);
        }
Example #23
0
        /// <summary>
        /// Execute SQL command
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult            result = new GatewayResult();
            GatewayCommandSQLExecute gatewaySqlExecuteCommand = GatewayCommandsFactory.CreateGatewayCommandSQLExecute(LocalDataviewManager.LocalManager,
                                                                                                                      dataBaseName, sqlStatement, storageAttributes, sqlExecuteCommand.DbFields);

            result = gatewaySqlExecuteCommand.Execute();
            sqlExecuteCommand.statementReturnedValues = gatewaySqlExecuteCommand.statementReturnedValues;

            return(result);
        }
Example #24
0
        internal override GatewayResult Fetch(IRecord record)
        {
            GatewayResult result = base.Fetch(record);

            if (result.Success && !IgnorePositionCache)
            {
                PositionCache.Set(GetPositionId(record), CurrentPosition);
            }

            return(result);
        }
Example #25
0
        /// <summary>
        /// check the transaction validation, if there is no transaction opend and use updated
        /// filed from the data source ,a GatewayResult error will be return
        /// </summary>
        /// <returns></returns>
        private GatewayResult CheckTransactionValidation()
        {
            GatewayResult gatewayResult = new GatewayResult();

            if (!TaskTransactionManager.IsLocalTransactionOpned)
            {
                gatewayResult.ErrorCode   = GatewayErrorCode.ModifyWithinTransaction;
                gatewayResult.ErrorParams = new string[] { DataSourceViewDefinition.TaskDataSource.DataSourceDefinition.Name, "" };
            }
            return(gatewayResult);
        }
Example #26
0
        /// <summary>
        /// check if the flag set
        /// </summary>
        /// <param name="cursorProperties"></param>
        /// <returns></returns>
        protected GatewayResult CheckIsFlagSet(CursorProperties cursorProperties)
        {
            GatewayResult gatewayResult = new GatewayResult();

            if (!RuntimeCursor.CursorDefinition.IsFlagSet(cursorProperties))
            {
                gatewayResult.ErrorCode   = GatewayErrorCode.ReadOnly;
                gatewayResult.ErrorParams = new string[] { RuntimeCursor.CursorDefinition.DataSourceDefinition.Name, "" };
            }

            return(gatewayResult);
        }
        /// <summary>
        /// override - always get a new record, and no need to refresh the position cache
        /// </summary>
        /// <returns></returns>
        protected override IRecord GetBasicRecord()
        {
            IRecord       record = DataviewSynchronizer.GetRecord(false);
            GatewayResult result = TaskViews.GetPrimaryView().Fetch(record);

            if (!result.Success)
            {
                DataviewSynchronizer.RemoveRecord(record);
                record = null;
            }
            return(record);
        }
Example #28
0
        internal override ReturnResultBase Execute()
        {
            GatewayResult result = new GatewayResult();

            TaskViews.RecordComputer.Compute(Record, false, false, true);
            if (refreshSubforms)
            {
                Task.RefreshSubforms();
            }

            return(result);
        }
Example #29
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        internal override ReturnResultBase Execute()
        {
            GatewayResult result = new GatewayResult();

            if (!TaskViews.Task.isAborting() && TaskViews.ApplySort(Sorts))
            {
                localDataViewCommandViewRefresh.DataviewManager = DataviewManager;
                localDataViewCommandViewRefresh.LocalManager    = LocalManager;
                localDataViewCommandViewRefresh.Execute();
            }

            return(result);
        }
Example #30
0
        internal override GatewayResult Execute()
        {
            GatewayResult result = new GatewayResult();

            DatabaseDefinition dbDefinition = (DatabaseDefinition)DbDefinition.Clone();

            UpdateDataBaseLocation(dbDefinition);

            result.ErrorCode = GatewayAdapter.Gateway.FileRename(DataSourceDefinition, DestinationDataSourceDefinition, dbDefinition);
            SetErrorDetails(result);

            return(result);
        }