Example #1
0
        private SqlFieldDataType GetColumnDataType(SqlCreateTableDefinition tableDefinition, string columnName)
        {
            if (tableDefinition == null)
            {
                throw new ArgumentNullException(nameof(tableDefinition));
            }

            if (string.IsNullOrWhiteSpace(columnName))
            {
                throw new ArgumentNullException(nameof(columnName));
            }

            var columnDataType = tableDefinition.Columns.FirstOrDefault(c => c.Name.Equals(columnName))?.DataType;

            if (columnDataType == null)
            {
                return(SqlFieldDataType.Unknown);
            }

            if (columnDataType.Contains("[") && columnDataType.Contains("]") || columnDataType.Contains("ARRAY"))
            {
                return(SqlFieldDataType.Array);
            }

            return(SqlFieldDataType.Unknown);
        }
Example #2
0
        private List <ScrubfuTag> GetScrubfuTagsForTable(string tableName, int lineNum)
        {
            List <ScrubfuTag> tableTags = new List <ScrubfuTag>();

            SqlCreateTableDefinition lookupTable = tableDefinitions.FirstOrDefault(x => x.Name.TableFullName == tableName);

            if (lookupTable != null)
            {
                lookupTable.Columns.Where(x => !string.IsNullOrWhiteSpace(x.Comment.Trim())).ToList()
                .ForEach(y =>
                {
                    List <ParsedScrubfuTag> tags = GetScrubfuTagsFromColumnComment(y.Comment, lineNum);

                    foreach (var tag in tags)
                    {
                        tableTags.Add(new ScrubfuTag()
                        {
                            SchemaEntityName = string.Concat(lookupTable.Name.TableFullName, ".", y.Name),
                            Tag = tag
                        });
                    }
                });
            }

            return(tableTags);
        }
Example #3
0
        private void ApplyActions(string entityName, string[] entityColumnList, List <ScrubfuTag> entityActionList, string[] columnValues, SqlCreateTableDefinition tableDefinition, string sqlCommand)
        {
            foreach (var action in entityActionList)
            {
                var schemaEntityNameParts = action.SchemaEntityName.ToColumnSchemaParts();

                if (schemaEntityNameParts.TableFullName != entityName)
                {
                    continue;
                }

                var columnPosition = Array.IndexOf(entityColumnList, schemaEntityNameParts.Column);
                var columnDataType = GetColumnDataType(tableDefinition, schemaEntityNameParts.Column);

                // If we're scrubbing an item in a one dimensional array, in a field of an array data type.
                if (columnDataType == SqlFieldDataType.Array)
                {
                    columnValues[columnPosition] = ApplyActionsToArray(action, columnValues[columnPosition], sqlCommand);
                }
                else // If we're scrubbing the whole field
                {
                    columnValues[columnPosition] = ApplyActionsToWholeField(action, columnValues[columnPosition]);
                }
            }
        }
Example #4
0
        private void ApplyTagsForCopy(string lineText, string entityName, List <ScrubfuTag> entityActionList, SqlCreateTableDefinition tableDefinition, ref int lineNum)
        {
            string unmodifiedLine = lineText;

            try
            {
                // Output the copy header with column names
                outWriter.WriteLine(lineText);

                var entityColumnList = ParseDefinedColumns(Constants.SqlCommand_COPY, lineText);

                // Process each line of the copy block
                while (true)
                {
                    try
                    {
                        unmodifiedLine = lineText = inReader.ReadLine();
                        lineNum++;

                        if (string.IsNullOrEmpty(lineText))
                        {
                            continue;
                        }

                        if (lineText.StartsWith(Constants.SqlCommand_COPY_TERMINATOR, StringComparison.Ordinal))        // End of copy block was reached
                        {
                            outWriter.WriteLine(lineText);
                            break;
                        }

                        var columnValues = lineText.SplitWithValues(Constants.Char_Tab);
                        ApplyActions(entityName, entityColumnList, entityActionList, columnValues, tableDefinition, Constants.SqlCommand_COPY);
                        outWriter.WriteLine(string.Join(Constants.Char_Tab, columnValues));
                    }
                    catch (Exception ex)
                    {
                        // Log error, then write file to output as is
                        LogError(string.Format("Error processing COPY line entry on line {0}. {1}", lineNum, ex.ExtractEntireErrorMessage()));
                        outWriter.WriteLine(unmodifiedLine);
                    }
                }
            }
            catch (Exception ex)
            {
                // Log error, then write file to output as is
                LogError(string.Format("Error processing COPY statement on line {0}. {1}", lineNum, ex.ExtractEntireErrorMessage()));
                outWriter.WriteLine(unmodifiedLine);
            }
        }
Example #5
0
        private void ApplyTagsForInsert(string lineText, string entityName, List <ScrubfuTag> entityActionList, SqlCreateTableDefinition tableDefinition, ref int lineNum)
        {
            string unmodifiedLine = lineText;

            try
            {
                if (string.IsNullOrEmpty(lineText))
                {
                    return;
                }

                string[] entityColumnList = ParseDefinedColumns(Constants.SqlCommand_INSERT_INTO, lineText);
                string[] columnValues     = ParseInsertStatementValues(lineText);

                ApplyActions(entityName, entityColumnList, entityActionList, columnValues, tableDefinition, Constants.SqlCommand_INSERT_INTO);
                lineText = ReplaceInsertStatementValues(lineText, columnValues);

                outWriter.WriteLine(lineText);
            }
            catch (Exception ex)
            {
                // Log error, then write file to output as is
                LogError(string.Format("Error processing INSERT INTO statement on line {0}. {1}", lineNum, ex.ExtractEntireErrorMessage()));
                outWriter.WriteLine(unmodifiedLine);
            }
        }