public virtual string FinalizeOperation(MySqlCommand command, IInsertResultInternal result)
        {
            IColumnValuePair LastCreatedKeyId = null;
            string           Diagnostic;

            try
            {
                int InsertedLines = command.EndExecuteNonQuery(result.AsyncResult);

                if (InsertedLines > 0)
                {
                    LastCreatedKeyId = GetLastCreatedKeyId(command, result);
                    result.SetCompletedWithId(LastCreatedKeyId);
                    Diagnostic = $"succeeded, {InsertedLines} rows inserted";
                }
                else
                {
                    result.SetCompleted(false, ResultError.ErrorLineNotInserted);
                    Diagnostic = "failed";
                }

                return(Diagnostic);
            }
            catch
            {
                result.SetCompleted(false, ResultError.ErrorExceptionCompletingInsert);
                throw;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Executes a request to insert several values in a table.
        ///     This is the synchronous implementation.
        /// </summary>
        /// <parameters>
        /// <param name="context">Description of the request.</param>
        /// </parameters>
        /// <returns>
        ///     The request result.
        /// </returns>
        protected virtual IInsertResult Execute(IInsertContext context)
        {
            if (!IsOperationThreadStarted)
            {
                return(new InsertResult(false, ResultError.ErrorFatalNoOperationThread));
            }

            if (context.RowCount == 0 || context.EntryList.Count == 0)
            {
                return(new InsertResult(true, ResultError.ErrorNone));
            }

            IActiveOperation <IInsertResultInternal> ActiveOperation = Connector.Insert(context);
            IInsertResultInternal Result = ActiveOperation.Result;

            FinalizeOrQueue(ActiveOperation);

            return(Result);
        }
        protected virtual IColumnValuePair GetLastCreatedKeyId(MySqlCommand command, IInsertResultInternal result)
        {
            ITableDescriptor Table = Context.Table;
            IReadOnlyCollection <IColumnValueCollectionPair> ColumnInitialValues = Context.EntryList;
            IColumnDescriptor PrimaryKeyColumn = Table.PrimaryKey;

            if (PrimaryKeyColumn is IColumnDescriptorInt AsIntColumn)
            {
                return(new ColumnValuePair <int>(AsIntColumn, (int)command.LastInsertedId));
            }

            foreach (IColumnValueCollectionPair Entry in ColumnInitialValues)
            {
                if (Entry.Column == PrimaryKeyColumn)
                {
                    return(Entry.LastEntry);
                }
            }

            Debug.Assert(false);
            return(null);
        }