예제 #1
0
        public IEnumerable <IDictionary <string, object> > GetObfuscatedValues(IEnumerable <IDictionary <string, object> > records)
        {
            int    columnIndex;
            string columnName;
            Type   columnType;
            object columnValue, obfusscatedValue;
            bool?  columnIsNullable = null;

            IDictionary <string, object> obfuscatedRecord;
            IMetaColumn metaColumn;

            if ((object)records == null)
            {
                throw new ArgumentNullException("records");
            }

            foreach (IDictionary <string, object> record in records)
            {
                obfuscatedRecord = new Dictionary <string, object>();

                columnIndex = 0;
                foreach (KeyValuePair <string, object> field in record)
                {
                    columnName  = field.Key;
                    columnValue = record[field.Key];
                    columnType  = (columnValue ?? new object()).GetType();

                    metaColumn = new MetaColumn()
                    {
                        ColumnIndex      = columnIndex,
                        ColumnName       = columnName,
                        ColumnType       = columnType,
                        ColumnIsNullable = columnIsNullable,
                        TableIndex       = 0,
                        TagContext       = null
                    };

                    obfusscatedValue = this.GetObfuscatedValue(metaColumn, columnValue);
                    obfuscatedRecord.Add(columnName, obfusscatedValue);
                    columnIndex++;
                }

                yield return(obfuscatedRecord);
            }
        }
        /// <summary>
        /// IDTSRuntimeComponent100 (OK)
        /// </summary>
        /// <param name="inputID"> </param>
        /// <param name="buffer"> </param>
        public override void ProcessInput(int inputID, PipelineBuffer buffer)
        {
            ColumnInfo columnInfo;
            string columnName;
            Type columnType;
            object columnValue, obfuColumnValue;
            int rowIndex = 0;

            IMetaColumn metaColumn;

            if (!buffer.EndOfRowset)
            {
                while (buffer.NextRow())
                {
                    for (int columnIndex = 0; columnIndex < buffer.ColumnCount; columnIndex++)
                    {
                        if (columnIndex >= this.InputColumnInfos.Count)
                            continue;

                        columnInfo = this.InputColumnInfos[columnIndex];

                        columnName = columnInfo.name;
                        columnType = InferClrTypeForSsisDataType(columnInfo.type);
                        columnValue = buffer[columnInfo.bufferColumnIndex];

                        metaColumn = new MetaColumn()
                                    {
                                        ColumnIndex = columnIndex,
                                        ColumnName = columnName,
                                        ColumnType = columnType,
                                        ColumnIsNullable = null,
                                        TableIndex = 0,
                                        TagContext = null
                                    };

                        obfuColumnValue = this.OxymoronEngine.GetObfuscatedValue(metaColumn, columnValue);

                        SetBufferValue(buffer, columnInfo.bufferColumnIndex, obfuColumnValue, columnInfo.type);

                        //if (!buffer.IsNull(columnInfo.bufferColumnIndex))
                        //buffer[columnInfo.bufferColumnIndex] = columnValue;
                    }

                    //buffer.DirectRow(ComponentMetaData.OutputCollection[Constants.OUTPUT_NAME].ID);

                    rowIndex++;
                }
            }

            //buffer.SetEndOfRowset();
        }