コード例 #1
0
        public FilterViewDefinition(
            StorageProviderDefinition storageProviderDefinition,
            EntityNameDefinition viewName,
            IRdbmsStorageEntityDefinition baseEntity,
            IEnumerable <string> classIDs,
            ObjectIDStoragePropertyDefinition objectIDProperty,
            IRdbmsStoragePropertyDefinition timestampProperty,
            IEnumerable <IRdbmsStoragePropertyDefinition> dataProperties,
            IEnumerable <IIndexDefinition> indexes,
            IEnumerable <EntityNameDefinition> synonyms)
            : base(
                storageProviderDefinition,
                viewName,
                objectIDProperty,
                timestampProperty,
                dataProperties,
                indexes,
                synonyms)
        {
            ArgumentUtility.CheckNotNull("baseEntity", baseEntity);
            ArgumentUtility.CheckNotNull("classIDs", classIDs);

            var classIDsList = classIDs.ToList().AsReadOnly();

            ArgumentUtility.CheckNotNullOrEmpty("classIDs", classIDsList);

            if (!(baseEntity is TableDefinition || baseEntity is FilterViewDefinition))
            {
                throw new ArgumentException("The base entity must either be a TableDefinition or a FilterViewDefinition.", "baseEntity");
            }

            _baseEntity = baseEntity;
            _classIDs   = classIDsList;
        }
コード例 #2
0
        private IEnumerable <EntityNameDefinition> CreateSynonymsForFilterViewDefinition(
            ClassDefinition classDefinition,
            IRdbmsStorageEntityDefinition baseEntity)
        {
            ArgumentUtility.CheckNotNull("classDefinition", classDefinition);
            ArgumentUtility.CheckNotNull("baseEntity", baseEntity);

            return(Enumerable.Empty <EntityNameDefinition>());
        }
コード例 #3
0
        public void AddEntityDefinition(IRdbmsStorageEntityDefinition entityDefinition)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);

            foreach (var scriptBuilder in _scriptBuilders)
            {
                scriptBuilder.AddEntityDefinition(entityDefinition);
            }
        }
コード例 #4
0
        public void AddEntityDefinition(IRdbmsStorageEntityDefinition entityDefinition)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);

            InlineRdbmsStorageEntityDefinitionVisitor.Visit(
                entityDefinition,
                (table, continuation) => AddTableDefinition(table),
                (filterView, continuation) => AddFilterViewDefinition(filterView),
                (unionView, contination) => AddUnionViewDefinition(unionView),
                (emptyView, continuation) => AddEmptyViewDefinition(emptyView));
        }
コード例 #5
0
        public void AddEntityDefinition(IRdbmsStorageEntityDefinition entityDefinition)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);

            InlineRdbmsStorageEntityDefinitionVisitor.Visit(
                entityDefinition,
                (table, continuation) => AddIndexes(table.Indexes, table.TableName),
                (filterView, continuation) => AddIndexes(filterView.Indexes, filterView.ViewName),
                (unionView, contination) => AddIndexes(unionView.Indexes, unionView.ViewName),
                (emptyView, continuation) => { });
        }
コード例 #6
0
        protected virtual IEnumerable <IIndexDefinition> CreateIndexesForFilterViewDefinition(
            ClassDefinition classDefinition,
            IRdbmsStorageEntityDefinition baseEntity,
            IReadOnlyList <IRdbmsStoragePropertyDefinition> allProperties)
        {
            ArgumentUtility.CheckNotNull("classDefinition", classDefinition);
            ArgumentUtility.CheckNotNull("baseEntity", baseEntity);
            ArgumentUtility.CheckNotNull("allProperties", allProperties);

            return(Enumerable.Empty <IIndexDefinition>());
        }
コード例 #7
0
 private void CheckEntityDefinition(
     IRdbmsStorageEntityDefinition expectedEntityDefinition,
     string expectedStorageProviderID,
     string expectedViewName,
     IRdbmsStoragePropertyDefinition[] expectedStoragePropertyDefinitions,
     IIndexDefinition[] expectedIndexDefinitions,
     EntityNameDefinition[] expectedSynonyms)
 {
     Assert.That(expectedEntityDefinition.StorageProviderID, Is.EqualTo(expectedStorageProviderID));
     Assert.That(expectedEntityDefinition.ViewName, Is.EqualTo(new EntityNameDefinition(null, expectedViewName)));
     Assert.That(expectedEntityDefinition.GetAllProperties(), Is.EqualTo(expectedStoragePropertyDefinitions));
     Assert.That(expectedEntityDefinition.Indexes, Is.EqualTo(expectedIndexDefinitions));
     Assert.That(expectedEntityDefinition.Synonyms, Is.EqualTo(expectedSynonyms));
 }
コード例 #8
0
        private void CheckEmptyViewDefinition(
            IRdbmsStorageEntityDefinition actualEntityDefinition,
            string expectedStorageProviderID,
            string expectedViewName,
            IRdbmsStoragePropertyDefinition[] expectedStoragePropertyDefinitions,
            IIndexDefinition[] expectedIndexDefinitions,
            EntityNameDefinition[] expectedSynonyms)
        {
            Assert.That(actualEntityDefinition, Is.TypeOf(typeof(EmptyViewDefinition)));

            CheckEntityDefinition(
                actualEntityDefinition,
                expectedStorageProviderID,
                expectedViewName,
                expectedStoragePropertyDefinitions,
                expectedIndexDefinitions,
                expectedSynonyms);
        }
コード例 #9
0
 public static FilterViewDefinition Create(
     StorageProviderDefinition storageProviderDefinition,
     EntityNameDefinition viewName,
     IRdbmsStorageEntityDefinition baseEntity,
     IEnumerable <string> classIDs,
     ObjectIDStoragePropertyDefinition objectIDProperty,
     SimpleStoragePropertyDefinition timestampProperty,
     IEnumerable <IRdbmsStoragePropertyDefinition> dataProperties)
 {
     return(new FilterViewDefinition(
                storageProviderDefinition,
                viewName,
                baseEntity,
                classIDs,
                objectIDProperty,
                timestampProperty,
                dataProperties,
                new IIndexDefinition[0],
                new EntityNameDefinition[0]));
 }
コード例 #10
0
        private void CheckUnionViewDefinition(
            IRdbmsStorageEntityDefinition actualEntityDefinition,
            string expectedStorageProviderID,
            string expectedViewName,
            IStorageEntityDefinition[] expectedStorageEntityDefinitions,
            IRdbmsStoragePropertyDefinition[] expectedStoragePropertyDefinitions,
            IIndexDefinition[] expectedIndexDefinitions,
            EntityNameDefinition[] expectedSynonyms)
        {
            Assert.That(actualEntityDefinition, Is.TypeOf(typeof(UnionViewDefinition)));
            Assert.That(((UnionViewDefinition)actualEntityDefinition).UnionedEntities, Is.EqualTo(expectedStorageEntityDefinitions));

            CheckEntityDefinition(
                actualEntityDefinition,
                expectedStorageProviderID,
                expectedViewName,
                expectedStoragePropertyDefinitions,
                expectedIndexDefinitions,
                expectedSynonyms);
        }
コード例 #11
0
        public static void Visit(
            IRdbmsStorageEntityDefinition entityDefinition,
            Action <TableDefinition, Action <IRdbmsStorageEntityDefinition> > tableDefinitionHandler,
            Action <FilterViewDefinition, Action <IRdbmsStorageEntityDefinition> > filterViewDefinitionHandler,
            Action <UnionViewDefinition, Action <IRdbmsStorageEntityDefinition> > unionViewDefinitionHandler,
            Action <EmptyViewDefinition, Action <IRdbmsStorageEntityDefinition> > emptyViewDefinitionHandler)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);
            ArgumentUtility.CheckNotNull("tableDefinitionHandler", tableDefinitionHandler);
            ArgumentUtility.CheckNotNull("filterViewDefinitionHandler", filterViewDefinitionHandler);
            ArgumentUtility.CheckNotNull("unionViewDefinitionHandler", unionViewDefinitionHandler);
            ArgumentUtility.CheckNotNull("emptyViewDefinitionHandler", emptyViewDefinitionHandler);

            var visitor = new RdbmsStorageEntityDefinitionVisitor(
                tableDefinitionHandler,
                filterViewDefinitionHandler,
                unionViewDefinitionHandler,
                emptyViewDefinitionHandler);

            entityDefinition.Accept(visitor);
        }
コード例 #12
0
        public static T Visit <T> (
            IRdbmsStorageEntityDefinition entityDefinition,
            Func <TableDefinition, Func <IRdbmsStorageEntityDefinition, T>, T> tableDefinitionHandler,
            Func <FilterViewDefinition, Func <IRdbmsStorageEntityDefinition, T>, T> filterViewDefinitionHandler,
            Func <UnionViewDefinition, Func <IRdbmsStorageEntityDefinition, T>, T> unionViewDefinitionHandler,
            Func <EmptyViewDefinition, Func <IRdbmsStorageEntityDefinition, T>, T> emptyViewDefinitionHandler)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);
            ArgumentUtility.CheckNotNull("tableDefinitionHandler", tableDefinitionHandler);
            ArgumentUtility.CheckNotNull("filterViewDefinitionHandler", filterViewDefinitionHandler);
            ArgumentUtility.CheckNotNull("unionViewDefinitionHandler", unionViewDefinitionHandler);
            ArgumentUtility.CheckNotNull("emptyViewDefinitionHandler", emptyViewDefinitionHandler);

            var visitor = new RdbmsStorageEntityDefinitionVisitor <T> (
                tableDefinitionHandler,
                filterViewDefinitionHandler,
                unionViewDefinitionHandler,
                emptyViewDefinitionHandler);

            entityDefinition.Accept(visitor);
            return(visitor.ReturnValue);
        }
コード例 #13
0
        private void CheckFilterViewDefinition(
            IRdbmsStorageEntityDefinition actualEntityDefinition,
            string expectedStorageProviderID,
            string expectedViewName,
            IStorageEntityDefinition expectedBaseEntity,
            string[] expectedClassIDs,
            IRdbmsStoragePropertyDefinition[] expectedStoragePropertyDefinitions,
            IIndexDefinition[] expectedIndexDefinitions,
            EntityNameDefinition[] expectedSynonyms)
        {
            Assert.That(actualEntityDefinition, Is.TypeOf(typeof(FilterViewDefinition)));
            Assert.That(((FilterViewDefinition)actualEntityDefinition).BaseEntity, Is.SameAs(expectedBaseEntity));
            Assert.That(((FilterViewDefinition)actualEntityDefinition).ClassIDs, Is.EqualTo(expectedClassIDs));

            CheckEntityDefinition(
                actualEntityDefinition,
                expectedStorageProviderID,
                expectedViewName,
                expectedStoragePropertyDefinitions,
                expectedIndexDefinitions,
                expectedSynonyms);
        }
コード例 #14
0
        public virtual IRdbmsStorageEntityDefinition CreateFilterViewDefinition(
            ClassDefinition classDefinition,
            IRdbmsStorageEntityDefinition baseEntity)
        {
            ArgumentUtility.CheckNotNull("classDefinition", classDefinition);
            ArgumentUtility.CheckNotNull("baseEntity", baseEntity);

            var objectIDProperty = _infrastructureStoragePropertyDefinitionProvider.GetObjectIDStoragePropertyDefinition();
            var timestampProperty = _infrastructureStoragePropertyDefinitionProvider.GetTimestampStoragePropertyDefinition();
            var dataProperties = _storagePropertyDefinitionResolver.GetStoragePropertiesForHierarchy(classDefinition).ToList();
            var allProperties = new[] { objectIDProperty, timestampProperty }.Concat(dataProperties).ToList().AsReadOnly();

            return(new FilterViewDefinition(
                       _storageProviderDefinition,
                       _storageNameProvider.GetViewName(classDefinition),
                       baseEntity,
                       GetClassIDsForBranch(classDefinition),
                       objectIDProperty,
                       timestampProperty,
                       dataProperties,
                       CreateIndexesForFilterViewDefinition(classDefinition, baseEntity, allProperties),
                       CreateSynonymsForFilterViewDefinition(classDefinition, baseEntity)));
        }
コード例 #15
0
        private void CheckTableDefinition(
            IRdbmsStorageEntityDefinition actualEntityDefinition,
            string expectedStorageProviderID,
            string expectedTableName,
            string expectedViewName,
            IRdbmsStoragePropertyDefinition[] expectedStoragePropertyDefinitions,
            ITableConstraintDefinition[] expectedTableConstraintDefinitions,
            IIndexDefinition[] expectedIndexDefinitions,
            EntityNameDefinition[] expectedSynonyms)
        {
            Assert.That(actualEntityDefinition, Is.TypeOf(typeof(TableDefinition)));
            Assert.That(((TableDefinition)actualEntityDefinition).TableName, Is.EqualTo(new EntityNameDefinition(null, expectedTableName)));
            CheckEntityDefinition(
                actualEntityDefinition,
                expectedStorageProviderID,
                expectedViewName,
                expectedStoragePropertyDefinitions,
                expectedIndexDefinitions,
                expectedSynonyms);

            var tableConstraints = ((TableDefinition)actualEntityDefinition).Constraints;

            Assert.That(tableConstraints.Count, Is.EqualTo(expectedTableConstraintDefinitions.Length));

            for (var i = 0; i < expectedTableConstraintDefinitions.Length; i++)
            {
                var expectedPrimaryKeyConstraint = expectedTableConstraintDefinitions[i] as PrimaryKeyConstraintDefinition;
                if (expectedPrimaryKeyConstraint != null)
                {
                    CheckPrimaryKeyConstraint(tableConstraints[i], expectedPrimaryKeyConstraint);
                }
                else
                {
                    Assert.That(tableConstraints[i], Is.EqualTo(expectedTableConstraintDefinitions[i]));
                }
            }
        }
コード例 #16
0
        public void SetUp()
        {
            _storageProviderID         = "DefaultStorageProvider";
            _storageProviderDefinition = new UnitTestStorageProviderStubDefinition(_storageProviderID);
            _testModel = new RdbmsPersistenceModelLoaderTestHelper();

            _entityDefinitionFactoryMock = MockRepository.GenerateStrictMock <IRdbmsStorageEntityDefinitionFactory>();
            _dataStoragePropertyDefinitionFactoryMock = MockRepository.GenerateStrictMock <IDataStoragePropertyDefinitionFactory>();
            _storageNameProviderStub = MockRepository.GenerateStub <IStorageNameProvider>();
            _storageNameProviderStub.Stub(stub => stub.GetTableName(_testModel.TableClassDefinition1)).Return(
                new EntityNameDefinition(null, _testModel.TableClassDefinition1.ID));
            _storageNameProviderStub.Stub(stub => stub.GetTableName(_testModel.TableClassDefinition2)).Return(
                new EntityNameDefinition(null, _testModel.TableClassDefinition2.ID));

            _rdbmsPersistenceModelLoader = new RdbmsPersistenceModelLoader(
                _entityDefinitionFactoryMock,
                _dataStoragePropertyDefinitionFactoryMock,
                _storageNameProviderStub,
                new RdbmsPersistenceModelProvider());

            _fakeEntityDefinitionBaseBase              = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionBase                  = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionTable1                = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionTable2                = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionDerived1              = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionDerived2              = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionDerivedDerived        = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinitionDerivedDerivedDerived = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();

            _fakeColumnDefinition1 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test1");
            _fakeColumnDefinition2 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test2");
            _fakeColumnDefinition3 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test3");
            _fakeColumnDefinition4 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test4");
            _fakeColumnDefinition5 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test5");
            _fakeColumnDefinition6 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test6");
            _fakeColumnDefinition7 = SimpleStoragePropertyDefinitionObjectMother.CreateStorageProperty("Test7");
        }
コード例 #17
0
        public override void SetUp()
        {
            base.SetUp();

            _rdbmsPersistenceModelProviderStub = MockRepository.GenerateStub <IRdbmsPersistenceModelProvider>();
            _entityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _storageTypeInformationProviderStub = MockRepository.GenerateStub <IStorageTypeInformationProvider>();
            _dataContainerValidatorStub         = MockRepository.GenerateStub <IDataContainerValidator>();

            _objectIDProperty  = ObjectIDStoragePropertyDefinitionObjectMother.ObjectIDProperty;
            _timestampProperty = SimpleStoragePropertyDefinitionObjectMother.TimestampProperty;
            _entityDefinitionStub.Stub(stub => stub.ObjectIDProperty).Return(_objectIDProperty);
            _entityDefinitionStub.Stub(stub => stub.TimestampProperty).Return(_timestampProperty);

            _column1 = ColumnDefinitionObjectMother.CreateColumn("Column1");
            _column2 = ColumnDefinitionObjectMother.CreateColumn("Column2");

            _infrastructureStoragePropertyDefinitionProviderStub = MockRepository.GenerateStrictMock <IInfrastructureStoragePropertyDefinitionProvider> ();
            _factory = new ObjectReaderFactory(
                _rdbmsPersistenceModelProviderStub,
                _infrastructureStoragePropertyDefinitionProviderStub,
                _storageTypeInformationProviderStub,
                _dataContainerValidatorStub);
        }
コード例 #18
0
 public static FilterViewDefinition Create(
     StorageProviderDefinition storageProviderDefinition, EntityNameDefinition viewName, IRdbmsStorageEntityDefinition baseEntity)
 {
     return(Create(
                storageProviderDefinition,
                viewName,
                baseEntity,
                new[] { "ClassID1" },
                ObjectIDStoragePropertyDefinitionObjectMother.ObjectIDProperty,
                SimpleStoragePropertyDefinitionObjectMother.TimestampProperty,
                new IRdbmsStoragePropertyDefinition[0]));
 }
        public void AddEntityDefinition(IRdbmsStorageEntityDefinition entityDefinition)
        {
            ArgumentUtility.CheckNotNull("entityDefinition", entityDefinition);

            _innerScriptBuilder.AddEntityDefinition(entityDefinition);
        }
コード例 #20
0
 private T ContinueWithNextEntity(IRdbmsStorageEntityDefinition entityDefinition)
 {
     entityDefinition.Accept(this);
     return(_returnValue);
 }
コード例 #21
0
        public override void SetUp()
        {
            base.SetUp();

            _classDefinitionForFirstStorageProvider1 = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Order));
            _classDefinitionForFirstStorageProvider2 = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(OrderItem));
            _classDefinitionForSecondStorageProvider = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Order));
            _classDefinitionForThirdStorageProvider  = ClassDefinitionObjectMother.CreateClassDefinitionWithMixins(typeof(Customer));

            _firstProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _firstProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(SchemaGenerationFirstStorageProviderDefinition);

            _secondProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _secondProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(
                SchemaGenerationSecondStorageProviderDefinition);

            _thirdProviderStorageEntityDefinitionStub = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _thirdProviderStorageEntityDefinitionStub.Stub(stub => stub.StorageProviderDefinition).Return(
                new NoRdbmsUnitTestStorageProviderStubDefinition("Test"));

            _classDefinitionForFirstStorageProvider1.SetStorageEntity(_firstProviderStorageEntityDefinitionStub);
            _classDefinitionForFirstStorageProvider2.SetStorageEntity(_firstProviderStorageEntityDefinitionStub);
            _classDefinitionForSecondStorageProvider.SetStorageEntity(_secondProviderStorageEntityDefinitionStub);
            _classDefinitionForThirdStorageProvider.SetStorageEntity(_thirdProviderStorageEntityDefinitionStub);

            _fakeScriptResult1 = new ScriptPair("CreateScript1", "DropScript1");
            _fakeScriptResult2 = new ScriptPair("CreateScript2", "DropScript2");
            _fakeScriptResult3 = new ScriptPair("CreateScript3", "DropScript3");
            _entityDefininitionProviderMock            = MockRepository.GenerateStrictMock <IRdbmsStorageEntityDefinitionProvider>();
            _scriptBuilderForFirstStorageProviderMock  = MockRepository.GenerateStrictMock <IScriptBuilder>();
            _scriptBuilderForSecondStorageProviderMock = MockRepository.GenerateStrictMock <IScriptBuilder>();
            _scriptBuilderForThirdStorageProviderMock  = MockRepository.GenerateStrictMock <IScriptBuilder>();

            _scriptToStringConverterStub = MockRepository.GenerateStub <IScriptToStringConverter>();
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForFirstStorageProviderMock)).Return(_fakeScriptResult1);
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForSecondStorageProviderMock)).Return(_fakeScriptResult2);
            _scriptToStringConverterStub.Stub(stub => stub.Convert(_scriptBuilderForThirdStorageProviderMock)).Return(_fakeScriptResult3);


            _scriptGenerator = new ScriptGenerator(
                pd =>
            {
                switch (pd.Name)
                {
                case "SchemaGenerationFirstStorageProvider":
                    return(_scriptBuilderForFirstStorageProviderMock);

                case "SchemaGenerationSecondStorageProvider":
                    return(_scriptBuilderForSecondStorageProviderMock);

                case "SchemaGenerationThirdStorageProvider":
                    return(_scriptBuilderForThirdStorageProviderMock);
                }
                throw new InvalidOperationException("Invalid storage provider!");
            },
                _entityDefininitionProviderMock,
                _scriptToStringConverterStub);

            _fakeEntityDefinition1 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinition2 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
            _fakeEntityDefinition3 = MockRepository.GenerateStub <IRdbmsStorageEntityDefinition>();
        }