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