Example #1
0
        private static void ExtractUniqueRows(MatrixIndexer data,
                                              out Dictionary <EquatableArray <double>, List <int> > rowIndexMap, out double[][] reducedData)
        {
            var uniqueRows = new List <double[]>();

            rowIndexMap = new Dictionary <EquatableArray <double>, List <int> >();
            for (int row = 0; row < data.RowCount; row++)
            {
                var rowArray   = data.GetRow(row).ToArray();
                var rowEqArray = new EquatableArray <double>(rowArray);
                if (!rowIndexMap.ContainsKey(rowEqArray))
                {
                    rowIndexMap.Add(rowEqArray, new List <int>());
                    uniqueRows.Add(rowArray);
                }
                rowIndexMap[rowEqArray].Add(row);
            }
            reducedData = uniqueRows.ToArray();
        }
Example #2
0
        public static void Evaluate(MergeAction action, Table targetTable, Row row, IOutputSink sink, Scope scope)
        {
            Row GetTargetRow() => row.Sources[EquatableArray.Of(scope.ExpandTableName(new[] { targetTable.Name }))];

            switch (action)
            {
            case InsertMergeAction insert:
                Evaluate(targetTable, insert.Columns, insert.Source, new RowArgument(row), sink, scope);
                return;

            case UpdateMergeAction update:
                Evaluate(update.SetClauses, GetTargetRow(), row, sink, scope);
                return;

            case DeleteMergeAction _:
                var r = GetTargetRow();
                sink.Deleted(r, scope.Env);
                targetTable.Rows.Remove(r);
                return;

            default:
                throw FeatureNotSupportedException.Subtype(action);
            }
        }