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; } }
/// <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); }