private void execute(int cursor, Object[] parms, bool batch)
        {
            ICursor oCur = getCursor(cursor);

            if (GxContext.isReorganization && oCur is ForEachCursor && GXReorganization.ExecutedBefore(oCur.Id))
            {
                return;
            }
            if (!batch)
            {
                oCur.createCursor(_ds, _errorHandler);
            }
            short[] parmHasValue = oCur.preExecute(cursor, this, _ds);
            if (Preferences.Instrumented && wmiDataStoreProvider != null)
            {
                wmiDataStoreProvider.IncSentencesCount(oCur);
                wmiDataStoreProvider.BeginExecute(oCur, _ds.Connection);
            }
            try
            {
                if (!batch)
                {
                    try
                    {
                        if (parmHasValue != null)
                        {
                            Object[] parmsNew = new Object[parms.Length + parmHasValue.Length];
                            parmHasValue.CopyTo(parmsNew, 0);
                            parms.CopyTo(parmsNew, parmHasValue.Length);
                            _dataStoreHelper.setParameters(cursor, oCur.getFieldSetter(), parmsNew);
                        }
                        else
                        {
                            _dataStoreHelper.setParameters(cursor, oCur.getFieldSetter(), parms);
                        }
                    }
                    catch (Exception ex)
                    {
                        _ds.CloseConnections();
                        throw ex;
                    }
                }

                GXLogging.Debug(log, "gxObject:" + _dataStoreHelper.GetType() + ", handle '" + _ds.Handle + "' cursorName:" + oCur.Id);
                oCur.execute();
            }finally
            {
                oCur.getFieldSetter().RestoreParametersRT();
            }
            _dataStoreHelper.getResults(cursor, oCur.getFieldGetter(), results[cursor]);

            _dynConstraints = null;

            if (Preferences.Instrumented)
            {
                wmiDataStoreProvider.EndExecute(oCur, _ds.Connection);
            }
            dataStoreRequestCount++;
        }
示例#2
0
        public int getStatus(int cursorIdx)
        {
            ICursor cursor = getCursor(cursorIdx);

            if (GxContext.isReorganization && cursor is ForEachCursor && GXReorganization.ExecutedBefore(cursor.Id))
            {
                return(Cursor.EOF);
            }
            else
            {
                return(cursor.getStatus());
            }
        }
示例#3
0
        public int close(int cursor)
        {
            int           result = 0;
            ICursor       oCur   = getCursor(cursor);
            ForEachCursor fc     = oCur as ForEachCursor;

            if (GxContext.isReorganization && fc != null && GXReorganization.ExecutedBefore(oCur.Id))
            {
                return(result);
            }
            else
            {
                dataStoreRequestCount++;
                result = oCur.close();
                if (GxContext.isReorganization && fc != null)
                {
                    GXReorganization.AddExecutedStatement(oCur.Id);
                }
                return(result);
            }
        }