コード例 #1
0
 internal static void CreateBaseAuditingProcedures(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
 {
     GenerateRequestTransactionSequenceProcedure(sqlBuilder, updateParameters);
     GenerateCurrentTransactionSequenceProcedure(sqlBuilder, updateParameters);
     GenerateReleaseTransactionSequenceProcedure(sqlBuilder, updateParameters);
     reportProgress("Generated TransactionSequence procedures", null);
 }
コード例 #2
0
        private static void LoadSchemaDataSet(AuditUpdateParameters updateParameters)
        {
            SqlConnection connection               = updateParameters.AuditingDatabaseConnection;
            SchemaDataSet schemaDataSet            = updateParameters.SchemaDataSet;
            DataTable     metaDataCollectionsTable = connection.GetSchema();

            schemaDataSet.MetaDataCollections.BeginLoadData();
            schemaDataSet.MetaDataCollections.Load(metaDataCollectionsTable.CreateDataReader());
            schemaDataSet.MetaDataCollections.EndLoadData();

            foreach (SchemaDataSet.MetaDataCollectionsRow metaDataCollectionsRow in schemaDataSet.MetaDataCollections)
            {
                try
                {
                    DataTable metaDataTable  = connection.GetSchema(metaDataCollectionsRow.CollectionName);
                    string    collectionName = metaDataCollectionsRow.CollectionName;
                    if (collectionName.Equals("MetaDataCollections", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    DataTable schemaTable = collectionName.Equals("Tables", StringComparison.OrdinalIgnoreCase)
                                                ? schemaDataSet.SchemaTables
                                                : schemaDataSet.Tables[collectionName];
                    schemaTable.BeginLoadData();
                    schemaTable.Load(metaDataTable.CreateDataReader());
                    schemaTable.EndLoadData();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("Skipping {0}", metaDataCollectionsRow.CollectionName);
                }
            }
        }
コード例 #3
0
 internal static void GenerateAuditForAllSchemas(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
 {
     foreach (string schema in updateParameters.SchemasToAudit)
     {
         GenerateAuditForSchema(schema, sqlBuilder, updateParameters, reportProgress);
     }
 }
コード例 #4
0
        internal static void CreateProcedureGrant(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
        {
            GrantExecuteToTransactionSequenceProcedures grantExecuteToTransactionSequenceProcedures = new GrantExecuteToTransactionSequenceProcedures(updateParameters);
            string sql = grantExecuteToTransactionSequenceProcedures.TransformText();

            sqlBuilder.AppendLine(sql);
        }
コード例 #5
0
 internal CreateUpdateDeltaTableProcedure(string schema, string tableName, TrackingTable trackingTable, List <SchemaDataSet.ColumnsRow> targetTableColumns, AuditUpdateParameters updateParameters)
 {
     _schema             = schema;
     _tableName          = tableName;
     _trackingTable      = trackingTable;
     _targetTableColumns = targetTableColumns;
     _params             = updateParameters;
 }
コード例 #6
0
 public CreateTrackingTable(string schema, string tableName, string trackingTableName, List <SchemaDataSet.ColumnsRow> targetTableColumns, AuditUpdateParameters updateParameters)
 {
     _schema             = schema;
     _tableName          = tableName;
     _trackingTableName  = trackingTableName;
     _targetTableColumns = targetTableColumns;
     _params             = updateParameters;
 }
コード例 #7
0
 internal SetBaseline(string schema, string tableName, TrackingTable trackingTable, List <SchemaDataSet.ColumnsRow> targetTableColumns, AuditUpdateParameters updateParameters)
 {
     _schema             = schema;
     _tableName          = tableName;
     _trackingTable      = trackingTable;
     _targetTableColumns = targetTableColumns;
     _params             = updateParameters;
 }
コード例 #8
0
 public CreateTrackingInsertProcedure(string schema, string auditedTable, string trackingTableName, string deltaTableName, List <SchemaDataSet.ColumnsRow> targetTableColumns, AuditUpdateParameters updateParameters)
 {
     _schema             = schema;
     _auditedTable       = auditedTable;
     _trackingTableName  = trackingTableName;
     _deltaTableName     = deltaTableName;
     _targetTableColumns = targetTableColumns;
     _params             = updateParameters;
 }
コード例 #9
0
        private static void GenerateAuditMasterTable(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters)
        {
            SchemaDataSet schemaDataSet = updateParameters.SchemaDataSet;

            if (!schemaDataSet.SchemaTables.TableExists(updateParameters.AuditingSchema, "AuditMaster"))
            {
                CreateAuditMasterTable createAuditMasterTableTemplate = new CreateAuditMasterTable(updateParameters);
                string sql = createAuditMasterTableTemplate.TransformText();
                sqlBuilder.AppendLine(sql);
            }
        }
コード例 #10
0
 internal static void CreateBaseAuditingTables(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
 {
     GenerateCatalogTable(sqlBuilder, updateParameters);
     reportProgress("Generated Catalog table", null);
     GenerateActionCodesTable(sqlBuilder, updateParameters);
     reportProgress("Generated ActionCodes table", null);
     GenerateTransactionSequenceTable(sqlBuilder, updateParameters);
     reportProgress("Generated TransactionSequence table", null);
     GenerateSessionTransactionTable(sqlBuilder, updateParameters);
     reportProgress("Generated SessionTransaction table", null);
     GenerateAuditMasterTable(sqlBuilder, updateParameters);
     reportProgress("Generated AuditMaster table", null);
 }
コード例 #11
0
        public string GenerateAuditingFrameworkUpdateSql(AuditUpdateParameters updateParameters)
        {
            StringBuilder           sqlBuilder     = new StringBuilder();
            Action <string, float?> reportProgress = (message, percentComplete) =>
            {
                sqlBuilder.AppendLine();
                sqlBuilder.AppendFormat("PRINT(N'{0}');", message);
                sqlBuilder.AppendLine();
                sqlBuilder.AppendLine("GO");

                OnReportProgress(message, percentComplete);
            };

            SqlConnection connection = updateParameters.AuditingDatabaseConnection;

            try
            {
                OnReportProgress("Started generating script", null);
                connection.Open();

                if (updateParameters.RemoveAll)
                {
                    GenerateRemoveAll(sqlBuilder, updateParameters);
                }
                else
                {
                    LoadSchemaDataSet(updateParameters);

                    GenerateDatabaseFiles.GenerateDatabaseSetup(sqlBuilder, updateParameters, reportProgress);
                    GenerateAuditingBase.CreateBaseAuditingTables(sqlBuilder, updateParameters, reportProgress);
                    GenerateAuditingBase.CreateBaseAuditingProcedures(sqlBuilder, updateParameters, reportProgress);
                    GenerateAuditingBase.CreateProcedureGrant(sqlBuilder, updateParameters, reportProgress);

                    GenerateSchemaAudit.GenerateAuditForAllSchemas(sqlBuilder, updateParameters, reportProgress);
                    GenerateDelta.GenerateBuildAllDeltaProcedures(sqlBuilder, updateParameters, reportProgress);
                }
            }
            finally
            {
                if (connection.State != ConnectionState.Closed)
                {
                    connection.Close();
                }
            }
            return(sqlBuilder.ToString());
        }
コード例 #12
0
        internal static void GenerateDatabaseSetup(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
        {
            Server   server   = new Server(updateParameters.AuditingDatabaseConnection.DataSource);
            Database database = server.Databases[updateParameters.AuditingDatabaseConnection.Database];

            if (!database.FileGroups.Contains(updateParameters.AuditingFileGroup))
            {
                DataFile dataFile = database.FileGroups[0].Files[0];
                string   fileName = dataFile.FileName;
                string   path     = Path.GetDirectoryName(fileName);
                if (path == null)
                {
                    throw new InvalidOperationException("Can't determine path of database file");
                }
                updateParameters.SqlFilePath = new DirectoryInfo(path);
                SetupDatabase setupDatabaseTemplate = new SetupDatabase(updateParameters);
                string        text = setupDatabaseTemplate.TransformText();
                sqlBuilder.AppendLine(text);
            }
            reportProgress("Generated database setup", null);
        }
コード例 #13
0
        private void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            SaveFieldsToSettings();

            DbConnectionStringBuilder connectionStringBuilder = new DbConnectionStringBuilder();

            connectionStringBuilder.ConnectionString = ConnectionStringTextBox.Text;
            SqlConnection sqlConnection = new SqlConnection(connectionStringBuilder.ConnectionString);

            AuditUpdateParameters parameters = new AuditUpdateParameters
            {
                AlwaysRecreateFramework    = AlwaysRecreateCheckBox.IsChecked ?? false,
                AuditingDatabaseConnection = sqlConnection,
                AuditingFileGroup          = AuditingFileGroupTextBox.Text,
                AuditingSchema             = AuditingSchemaTextBox.Text,
                AuditTableFormat           = AuditTableFormatTextBox.Text,
                AutoDeployToDatabase       = AutomaticallyDeployCheckBox.IsChecked ?? false,
                DatabaseName       = sqlConnection.Database,
                OutputPath         = new DirectoryInfo(OutputPathTextBox.Text),
                RemoveAll          = RemoveAllCheckBox.IsChecked ?? false,
                TrackByPrimaryKeys = MatchByPrimaryKeysCheckBox.IsChecked ?? false,
                GenerateBaseline   = GenerateBaselineCheckBox.IsChecked ?? false
            };

            parameters.ColumnsNotAudited.AddRange(new[] { "", "" });
            parameters.ExecuteGrantees.AddRange(ExecuteGranteesTextBox.Text.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
            parameters.SchemasToAudit.AddRange(SchemasToAuditTextBox.Text.Trim().Split('\n', ' '));
            parameters.TablesNotAudited.AddRange(TablesNotAuditedTextBox.Text.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
            parameters.ColumnsNotAudited.AddRange(ColumnsNotAuditedTextBox.Text.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));

            Generator generator = new Generator();
            string    sql       = generator.GenerateAuditingFrameworkUpdateSql(parameters);

            SqlWindow sqlWindow = new SqlWindow();

            sqlWindow.SqlText = sql;
            sqlWindow.ShowDialog();
        }
コード例 #14
0
 public CreateDeltaTable(string deltaTableName, List <SchemaDataSet.ColumnsRow> targetTableColumns, AuditUpdateParameters updateParameters)
 {
     _deltaTableName     = deltaTableName;
     _targetTableColumns = targetTableColumns;
     _params             = updateParameters;
 }
コード例 #15
0
 private static void GenerateRemoveAll(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters)
 {
     throw new NotImplementedException();
 }
コード例 #16
0
 internal static EntityConnectionStringBuilder GetEntityConnectionStringBuilder(AuditUpdateParameters updateParameters)
 {
     return(new EntityConnectionStringBuilder
     {
         ProviderConnectionString = updateParameters.AuditingDatabaseConnection.ConnectionString,
         Provider = "System.Data.SqlClient",
         Metadata = @"res://*/AuditFrameworkEntityDataModel.csdl|
                     res://*/AuditFrameworkEntityDataModel.ssdl|
                     res://*/AuditFrameworkEntityDataModel.msl"
     });
 }
コード例 #17
0
 public SetupDatabase(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #18
0
        private static void GenerateAuditForSchema(string schema, StringBuilder sqlBuilder, AuditUpdateParameters updateParameters, Action <string, float?> reportProgress)
        {
            reportProgress(string.Format("Generating audit for schema {0}", schema), null);

            SchemaDataSet schemaDataSet = updateParameters.SchemaDataSet;

            SchemaDataSet.SchemaPrimaryKeysDataTable primaryKeysDataTable = schemaDataSet.SchemaPrimaryKeys;
            primaryKeysDataTable.FillPrimaryKeysBySchema(schema, updateParameters.AuditingDatabaseConnection);

            SchemaDataSet.SchemaTablesDataTable schemaTables = schemaDataSet.SchemaTables;
            var schemaTablesRows  = schemaTables.AsEnumerable();
            var schemaTablesQuery = from schemaTableRow in schemaTablesRows
                                    where schemaTableRow.TABLE_SCHEMA.Equals(schema)
                                    where schemaTableRow.TABLE_TYPE.Equals("BASE TABLE")
                                    orderby schemaTableRow.TABLE_NAME
                                    select schemaTableRow;

            foreach (SchemaDataSet.SchemaTablesRow schemaTablesRow in schemaTablesQuery)
            {
                string tableName = schemaTablesRow.TABLE_NAME;
                if (!updateParameters.TablesNotAudited.Cast <string>().Any(name => name.Equals(tableName, StringComparison.OrdinalIgnoreCase)))
                {
                    GenerateTableAudit.GenerateAuditForTable(schema, tableName, primaryKeysDataTable, sqlBuilder, updateParameters, reportProgress);
                }
            }

            reportProgress(string.Format("Generated audit for schema {0}", schema), null);
        }
コード例 #19
0
 public CreateTransactionSequenceTable(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #20
0
 public CreateCatalogTable(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #21
0
        private static void GenerateTransactionSequenceTable(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters)
        {
            SchemaDataSet schemaDataSet = updateParameters.SchemaDataSet;

            if (!schemaDataSet.SchemaTables.TableExists(updateParameters.AuditingSchema, "TransactionSequence"))
            {
                CreateTransactionSequenceTable createTransactionSequenceTable = new CreateTransactionSequenceTable(updateParameters);
                string sql = createTransactionSequenceTable.TransformText();
                sqlBuilder.AppendLine(sql);
            }
        }
コード例 #22
0
 public GrantExecuteToTransactionSequenceProcedures(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #23
0
 public CreateInstantTrackIdProcedure(string schema, string targetTableName, AuditUpdateParameters updateParameters)
 {
     _schema          = schema;
     _targetTableName = targetTableName;
     _params          = updateParameters;
 }
コード例 #24
0
 public CreateBuildDeltaProcedure(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #25
0
 public CreateCurrentTransactionSequenceProcedure(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #26
0
 public CreateActionCodesTable(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #27
0
 public CreateAuditMasterTable(AuditUpdateParameters updateParameters)
 {
     _params = updateParameters;
 }
コード例 #28
0
        private static void GenerateRequestTransactionSequenceProcedure(StringBuilder sqlBuilder, AuditUpdateParameters updateParameters)
        {
            CreateRequestTransactionSequenceProcedure createRequestTransactionSequenceProcedure = new CreateRequestTransactionSequenceProcedure(updateParameters);
            string sql = createRequestTransactionSequenceProcedure.TransformText();

            sqlBuilder.AppendLine(sql);
        }
コード例 #29
0
 public CreateTrigger(string schema, string tableName, AuditUpdateParameters updateParameters)
 {
     _schema    = schema;
     _tableName = tableName;
     _params    = updateParameters;
 }
コード例 #30
0
        private static List <SchemaDataSet.ColumnsRow> GetTrackingColumnsForTable(TrackingTable trackingTable, AuditUpdateParameters updateParameters)
        {
            IEnumerable <SchemaDataSet.ColumnsRow> columnsRows = GetColumnsForTable(updateParameters.AuditingSchema, trackingTable.ToString(), updateParameters);
            IEnumerable <SchemaDataSet.ColumnsRow> query       = from columnRow in columnsRows
                                                                 where !columnRow.COLUMN_NAME.Equals("TrackºId", StringComparison.Ordinal)
                                                                 select columnRow;

            return(query.ToList());
        }