public async Task CreateRowSuccess() { // Setup: Create a session with a proper query and metadata Query q = QueryExecution.Common.GetBasicExecutedQuery(); ResultSet rs = q.Batches[0].ResultSets[0]; EditTableMetadata etm = Common.GetCustomEditTableMetadata(rs.Columns.Cast <DbColumn>().ToArray()); EditSession s = await Common.GetCustomSession(q, etm); // If: I add a row to the session EditCreateRowResult result = s.CreateRow(); // Then: // ... The new ID should be equal to the row count Assert.Equal(rs.RowCount, result.NewRowId); // ... The next row ID should have been incremented Assert.Equal(rs.RowCount + 1, s.NextRowId); // ... There should be a new row create object in the cache Assert.Contains(result.NewRowId, s.EditCache.Keys); Assert.IsType <RowCreate>(s.EditCache[result.NewRowId]); // ... The default values should be returned (we will test this in depth below) Assert.NotEmpty(result.DefaultValues); }
/// <summary> /// Creates a new row update and adds it to the update cache /// </summary> /// <exception cref="InvalidOperationException">If inserting into cache fails</exception> /// <returns>The internal ID of the newly created row</returns> public EditCreateRowResult CreateRow() { ThrowIfNotInitialized(); // Create a new row ID (atomically, since this could be accesses concurrently) long newRowId = NextRowId++; // Create a new row create update and add to the update cache RowCreate newRow = new RowCreate(newRowId, associatedResultSet, objectMetadata); if (!EditCache.TryAdd(newRowId, newRow)) { // Revert the next row ID NextRowId--; throw new InvalidOperationException(SR.EditDataFailedAddRow); } EditCreateRowResult output = new EditCreateRowResult { NewRowId = newRow.RowId, DefaultValues = newRow.DefaultValues }; return(output); }
/// <summary> /// Creates a new row update and adds it to the update cache /// </summary> /// <exception cref="InvalidOperationException">If inserting into cache fails</exception> /// <returns>The internal ID of the newly created row</returns> public EditCreateRowResult CreateRow() { ThrowIfNotInitialized(); // Create a new row ID (atomically, since this could be accesses concurrently) long newRowId = NextRowId++; // Create a new row create update and add to the update cache RowCreate newRow = new RowCreate(newRowId, associatedResultSet, objectMetadata); if (!EditCache.TryAdd(newRowId, newRow)) { // Revert the next row ID NextRowId--; throw new InvalidOperationException(SR.EditDataFailedAddRow); } // Set the default values of the row if we know them string[] defaultValues = new string[objectMetadata.Columns.Length]; for (int i = 0; i < objectMetadata.Columns.Length; i++) { EditColumnMetadata col = objectMetadata.Columns[i]; // If the column is calculated, return the calculated placeholder as the display value if (col.IsCalculated.HasTrue()) { defaultValues[i] = SR.EditDataComputedColumnPlaceholder; } else { if (col.DefaultValue != null) { newRow.SetCell(i, col.DefaultValue); } defaultValues[i] = col.DefaultValue; } } EditCreateRowResult output = new EditCreateRowResult { NewRowId = newRowId, DefaultValues = defaultValues }; return(output); }