示例#1
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);
        }
示例#2
0
 protected void RecordData()
 {
     if (DataRecorder != null)
     {
         DataRecorder.Record(GatewayAdapter.GetCursor(RuntimeCursor));
     }
 }
示例#3
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult        result = new GatewayResult();
            GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);

            Debug.Assert(gatewayAdapterCursor != null);

            gatewayAdapterCursor.Definition.ClearFlag(CursorProperties.DummyFetch);

            // TODO 1 ???:
            //if (mg_crsr->blobs)
            //   crsr_fill_blob_info(db_crsr, mg_crsr, dbd->dbh);

            // TODO 2: for join
            //link_save_area = fm_link_crsr_buf_save(join_info->db_join_crsr);
            //retval = SQL_wrap_crsr_fetch_join(join_info->db_join_crsr,
            //            !mg_crsr->fetchSource.is_set(FETCH_BYPASS_TRANS_CACHE));
            //fm_link_crsr_buf_restore(join_info->db_join_crsr, link_save_area);

            // TODO 3: for not join
            //if (not join)
            result.ErrorCode = GatewayAdapter.Gateway.CrsrFetch(gatewayAdapterCursor);

            if (result.Success)
            {
                // TODO 4: for dummy fetch
                //   if (db_crsr->properties.is_set (DUMMY_FETCH)  && mg_crsr->dummy_fetch_buf != NULL)

                // TODO 5: check if a record that was fetched is within the ranges
                // fm_check_rngs

                // TODO 6: fetch Blobs
                // CrsrFetchBLOBs & CrsrFetchBLOBsJoin

                // TODO 7: If not DUMMY_FETCH
                // fm_flds_mg_4_db
                ConvertToRuntime(gatewayAdapterCursor);
                RecordData();
            }
            else
            // TODO: Error handling.
            // Temporary !!!
            if (result.ErrorCode != GatewayErrorCode.NoRecord)
            {
                SetErrorDetails(result);
            }

            return(result);
        }
示例#4
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult        result = new GatewayResult();
            GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);

            if (gatewayAdapterCursor != null)
            {
                // TODO: for join cursor CrsrReleaseJoin
                result.ErrorCode = GatewayAdapter.Gateway.CrsrRelease(gatewayAdapterCursor);
                GatewayAdapter.RemoveCursor(RuntimeCursor);
            }
            SetErrorDetails(result);
            return(result);
        }
        internal override GatewayResult Execute()
        {
            GatewayResult result = new GatewayResult();

            Record();
            result = CheckIsFlagSet(CursorProperties.Delete);

            if (result.Success)
            {
                GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);
                Debug.Assert(gatewayAdapterCursor != null);

                result.ErrorCode = GatewayAdapter.Gateway.CrsrDelete(gatewayAdapterCursor);
                SetErrorDetails(result);
            }
            return(result);
        }
示例#6
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult result = new GatewayResult();

            GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);

            Debug.Assert(gatewayAdapterCursor != null);

            result.ErrorCode = GatewayAdapter.Gateway.CrsrGetCurr(gatewayAdapterCursor);

            ConvertToRuntime(gatewayAdapterCursor);
            RecordData();

            SetErrorDetails(result);

            return(result);
        }
示例#7
0
        internal override GatewayResult Execute()
        {
            GatewayResult result = new GatewayResult();

            Record();
            result = CheckIsFlagSet(CursorProperties.Update);

            if (result.Success)
            {
                GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);
                Debug.Assert(gatewayAdapterCursor != null);

                // 2. fm_flds_mg_2_db
                ConvertToGateway(gatewayAdapterCursor);

                // 3. ///*Update/Delete Stmt chngs copying update fld list from mg_crsr into db_crsr*/???

                // 4. update the record into data view

                //If partofdatetime is set and only time field is updated then before going to gateway set IsFieldUpdated of date field to true.
                for (int idx = 0; idx < (int)gatewayAdapterCursor.Definition.FieldsDefinition.Count; idx++)
                {
                    DBField fld = gatewayAdapterCursor.Definition.FieldsDefinition[idx];
                    if (fld.Storage == FldStorage.TimeString && fld.PartOfDateTime != 0 && gatewayAdapterCursor.Definition.IsFieldUpdated[idx])
                    {
                        int dateIdx = 0;
                        for (dateIdx = 0; dateIdx < gatewayAdapterCursor.Definition.FieldsDefinition.Count; dateIdx++)
                        {
                            if (DataSourceDefinition.Fields[gatewayAdapterCursor.Definition.FieldsDefinition[dateIdx].IndexInRecord].Isn == fld.PartOfDateTime)
                            {
                                break;
                            }
                        }

                        gatewayAdapterCursor.Definition.IsFieldUpdated[dateIdx] = true;
                    }
                }

                result.ErrorCode = GatewayAdapter.Gateway.CrsrUpdate(gatewayAdapterCursor);
                SetErrorDetails(result);
            }
            return(result);
        }
示例#8
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult result = new GatewayResult();

            GatewayAdapterCursor gatewayAdapterCursor = GatewayAdapter.GetCursor(RuntimeCursor);

            Debug.Assert(gatewayAdapterCursor != null);

            result.ErrorCode = GatewayAdapter.Gateway.CrsrClose(gatewayAdapterCursor);

            if (result.Success)
            {
                // TODO:
                // Free Blobs
            }
            SetErrorDetails(result);

            return(result);
        }
示例#9
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayResult result       = new GatewayResult();
            RTDataSource  rtDataSource = GatewayAdapter.GetDataSource(DataSourceDefinition);

            //SerializeDatasource(DataSourceDefinition);
            //Serialize();
            if (rtDataSource == null)
            {
                rtDataSource = new RTDataSource(DataSourceDefinition);
                rtDataSource.GatewayAdapter = GatewayAdapter;
            }

            // TODO: Access (HDLINFO hdl_info_tbl_.datatbl)
            // TODO: Foreign keys
            // share & mode are ignored

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

                    result.ErrorCode = GatewayAdapter.Gateway.FileOpen(DataSourceDefinition, dbDefinition, FileName, Access,
                                                                       DbShare.Write, DbOpen.Normal, null);
                }
                catch (FileNotFoundException ex)
                {
                    throw new ApplicationException("The SQLite database couldn't be opened.", ex);
                }
            }

            if (result.Success)
            {
                rtDataSource.Open();
            }
            SetErrorDetails(result);
            return(result);
        }
示例#10
0
        internal override GatewayResult Execute()
        {
            Record();
            RTDataSource  rtDataSource = GatewayAdapter.GetDataSource(DataSourceDefinition);
            GatewayResult result       = new GatewayResult();

            // TODO: Access (HDLINFO hdl_info_tbl_.datatbl)

            if (rtDataSource != null)
            {
                if (rtDataSource.IsLast)
                {
                    result.ErrorCode = GatewayAdapter.Gateway.FileClose(DataSourceDefinition);
                }

                if (result.Success)
                {
                    rtDataSource.Close();
                }
                SetErrorDetails(result);
            }
            return(result);
        }
示例#11
0
        internal override GatewayResult Execute()
        {
            Record();
            GatewayAdapterCursor gatewayAdapterCursor = new GatewayAdapterCursor(RuntimeCursor.CursorDefinition);

            gatewayAdapterCursor.CursorType = CursorType.Regular;

            GatewayResult result = new GatewayResult();

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

            UpdateDataBaseLocation(dbDefinition);

            result.ErrorCode = GatewayAdapter.Gateway.CrsrPrepare(gatewayAdapterCursor, dbDefinition);

            if (result.Success)
            {
                GatewayAdapter.AddCursor(RuntimeCursor, gatewayAdapterCursor);
            }
            // db_rng_val_alloc ??
            SetErrorDetails(result);
            return(result);
        }
示例#12
0
        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;
            bool hasDataSourceDefinition = GatewayAdapter.HasDataSourceDefinition();

            // only if there is data source opened then open transaction
            if (hasDataSourceDefinition)
            {
                this.DataSourceDefinition = GatewayAdapter.GetFirstDataSourceDefinition();
                Record();

                // save the Data base definition on static so while close the transaction we will use it
                GatewayAdapter.TransactionWasOpned = hasDataSourceDefinition;

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

            return(gatewayResult);
        }