Example #1
0
        public void ModelMapper_CreatePrimaryKeyEntries_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            Assert.IsTrue(mapper.CanAddPrimaryKey);

            var entries = mapper.CreatePrimaryKeyEntries();
            var _       = entries._;

            Assert.AreEqual(1, entries.Count);
            Assert.AreEqual("id", _.ConstructorParamName[0]);
            Assert.AreEqual("_ID", _.Mounter[0].Name);
        }
Example #2
0
        public void RemoveMemberAttribute_VB()
        {
            var src =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document  = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper    = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var property  = mapper.ModelType.GetMembers().OfType <IPropertySymbol>().SingleOrDefault();
            var attribute = property.GetAttributes().Single();
            var result    = mapper.RemoveMemberAttributeAsync(attribute).Result;

            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, result.GetTextAsync().Result.ToString());
        }
        public void ModelMapper_AddIndex_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var entries  = mapper.CreateIndexEntries();
            var dataRow  = entries.AddRow();
            var _        = entries._;

            _.Column[dataRow]        = mapper.GetColumns().Single();
            _.SortDirection[dataRow] = Data.SortDirection.Descending;
            document = mapper.AddIndex("IX_MyModel_ID", "Description", "DBIX_MyModel_ID", true, false, true, entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    [DbIndex(nameof(IX_MyModel_ID), Description = ""Description"", DbName = ""DBIX_MyModel_ID"", IsUnique = true, IsValidOnTable = false, IsValidOnTempTable = true)]
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }

        [_DbIndex]
        private ColumnSort[] IX_MyModel_ID
        {
            get
            {
                return new ColumnSort[] { ID.Desc() };
            }
        }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
        public void ModelMapper_AddCustomValidator_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            document = mapper.AddCustomValidator("VAL_Xxx", "Description");
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    [CustomValidator(nameof(VAL_Xxx), Description = ""Description"")]
    public class MyModel : Model
    {
        [_CustomValidator]
        private CustomValidatorEntry VAL_Xxx
        {
            get
            {
                string Validate(DataRow dataRow)
                {
                    throw new global::System.NotImplementedException();
                }

                IColumns GetSourceColumns()
                {
                    throw new global::System.NotImplementedException();
                }

                return new CustomValidatorEntry(Validate, GetSourceColumns);
            }
        }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
Example #5
0
        public void AddMemberAttribute_second_CS()
        {
            var src =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        [DbColumn()]
        public _Int32 ID { get; private set; }
    }
}
";

            var document  = src.CreateDocument();
            var mapper    = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var property  = mapper.ModelType.GetMembers().OfType <IPropertySymbol>().SingleOrDefault();
            var attribute = mapper.Compilation.GetKnownType("DevZest.Data.Annotations.RequiredAttribute");
            var result    = mapper.AddMemberAttribute(property, attribute, KnownTypes.ModelDesignerSpecAttribute).Result;

            var resultDocument = result.Document;
            var expected       =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        [DbColumn()]
        [Required]
        public _Int32 ID { get; private set; }
    }
}
";
            var resultText = resultDocument.GetTextAsync().Result;

            Assert.AreEqual(expected, resultText.ToString());

            Assert.AreEqual(null, result.TextSpan);
        }
Example #6
0
        public void ModelMapper_GetPrimaryKeyEntries_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model(Of PK)

        Public NotInheritable Class PK
            Inherits CandidateKey

            Public Sub New(id As _Int32)
                MyBase.New(id)
            End Sub
        End Class

        Protected NotOverridable Overrides Function CreatePrimaryKey() As PK
            Return New PK(ID)
        End Function

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            var entries = mapper.GetPrimaryKeyEntries();

            Assert.AreEqual(1, entries.Count);
            var _ = entries._;

            Assert.AreEqual(mapper.ModelType.GetMembers("ID").Single(), _.Column[0]);
            Assert.AreEqual("id", _.ConstructorParamName[0]);
        }
        public void ModelMapper_AddCustomValidator_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model

    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            document = mapper.AddCustomValidator("VAL_Xxx", "Description");
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    <CustomValidator(""VAL_Xxx"", Description:=""Description"")>
    Public Class MyModel
        Inherits Model

        <_CustomValidator>
        Private ReadOnly Property VAL_Xxx As CustomValidatorEntry
            Get
                Dim validate = Function(dataRow As DataRow) As String
                                   Throw New Global.System.NotImplementedException()
                               End Function

                Dim getSourceColumns = Function() As IColumns
                                           Throw New Global.System.NotImplementedException()
                                       End Function

                Return New CustomValidatorEntry(validate, getSourceColumns)
            End Get
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #8
0
        public void GetMessageResourceType_without_MessageResourceAttribute()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
    }
}
";

            var document     = src.CreateDocument();
            var mapper       = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var resourceType = mapper.GetMessageResourceType();

            Assert.IsNull(resourceType);
        }
Example #9
0
        public void RemoveMemberAttribute_CS()
        {
            var src =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        [DbColumn()]
        public _Int32 ID { get; private set; }
    }
}
";

            var document  = src.CreateDocument();
            var mapper    = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var property  = mapper.ModelType.GetMembers().OfType <IPropertySymbol>().SingleOrDefault();
            var attribute = property.GetAttributes().Single();
            var result    = mapper.RemoveMemberAttributeAsync(attribute).Result;

            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            Assert.AreEqual(expected, result.GetTextAsync().Result.ToString());
        }
Example #10
0
        public void GetMessageResourceType()
        {
            var src =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

[assembly: MessageResource(typeof(Test.MyModel))]

namespace Test
{
    public class MyModel : Model
    {
    }
}
";

            var document     = src.CreateDocument();
            var mapper       = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var resourceType = mapper.GetMessageResourceType();

            Assert.AreEqual("MyModel", resourceType.Name);
        }
Example #11
0
        public void ModelMapper_GetPrimaryKeyEntries_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model<MyModel.PK>
    {
        public sealed class PK : CandidateKey
        {
            public PK(_Int32 id) : base(id)
            {
            }
        }

        protected sealed override PK CreatePrimaryKey()
        {
            return new PK(ID);
        }

        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            var entries = mapper.GetPrimaryKeyEntries();

            Assert.AreEqual(1, entries.Count);
            var _ = entries._;

            Assert.AreEqual(mapper.ModelType.GetMembers("ID").Single(), _.Column[0]);
            Assert.AreEqual("id", _.ConstructorParamName[0]);
        }
        public void ModelMapper_AddComputation_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            document = mapper.AddComputation("Compute", "Description", ComputationMode.Aggregate);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

namespace Test
{
    [Computation(nameof(Compute), ComputationMode.Aggregate, Description = ""Description"")]
    public class MyModel : Model
    {
        [_Computation]
        private void Compute()
        {
            throw new global::System.NotImplementedException();
        }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
Example #13
0
        public void ModelMapper_Refresh_VB()
        {
            var src      = string.Empty;
            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            Assert.IsNull(mapper);

            src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model
    End Class
End Namespace
";

            document = src.CreateDocument(LanguageNames.VisualBasic);
            mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            Assert.IsNotNull(mapper);
            Assert.AreEqual(document, mapper.Document);
        }
        public void ModelMapper_AddComputation_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model

    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            document = mapper.AddComputation("Compute", "Description", ComputationMode.Aggregate);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    <Computation(""Compute"", ComputationMode.Aggregate, Description:=""Description"")>
    Public Class MyModel
        Inherits Model

        <_Computation>
        Private Sub Compute()
            Throw New Global.System.NotImplementedException()
        End Sub
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #15
0
        public void ModelMapper_CreatePrimaryKeyEntries_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            Assert.IsTrue(mapper.CanAddPrimaryKey);

            var entries = mapper.CreatePrimaryKeyEntries();
            var _       = entries._;

            Assert.AreEqual(1, entries.Count);
            Assert.AreEqual("id", _.ConstructorParamName[0]);
            Assert.AreEqual("_ID", _.Mounter[0].Name);
        }
Example #16
0
        public void ModelMapper_Refresh_CS()
        {
            var src      = string.Empty;
            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            Assert.IsNull(mapper);

            src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model
    {
    }
}
";

            document = src.CreateDocument();
            mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            Assert.IsNotNull(mapper);
            Assert.AreEqual(document, mapper.Document);
        }
Example #17
0
        public void ModelMapper_AddCheckConstraint_VB()
        {
            var src =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

<assembly: MessageResource(GetType(Test.Resources.Messages))>

Namespace Test
    Public Class MyModel
        Inherits Model

    End Class
End Namespace

Namespace Test.Resources
    Public Shared Class Messages
        Public Shared ReadOnly Property CK_MyModel As String
            Get
                Return ""Check message for MyModel.""
            End Get
        End Property
    End Class
End Namespace
";

            var document                = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper                  = ModelMapper.Refresh(null, document, new TextSpan(160, 0));
            var messageResourceType     = mapper.GetMessageResourceType();
            var messageResourceProperty = messageResourceType.GetMembers("CK_MyModel").OfType <IPropertySymbol>().Single();

            document = mapper.AddCheckConstraint("CK_MyModel", "Description", messageResourceType, messageResourceProperty, null);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations
Imports Test.Resources

<assembly: MessageResource(GetType(Test.Resources.Messages))>

Namespace Test
    <CheckConstraint(""CK_MyModel"", GetType(Messages), NameOf(Messages.CK_MyModel), Description:=""Description"")>
    Public Class MyModel
        Inherits Model

        <_CheckConstraint>
        Private ReadOnly Property CK_MyModel As _Boolean
            Get
                Throw New Global.System.NotImplementedException()
            End Get
        End Property
    End Class
End Namespace

Namespace Test.Resources
    Public Shared Class Messages
        Public Shared ReadOnly Property CK_MyModel As String
            Get
                Return ""Check message for MyModel.""
            End Get
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #18
0
        public void ModelMapper_AddProjection_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model<MyModel.PK>
    {
        public sealed class PK : CandidateKey
        {
            public PK(_Int32 id) : base(id)
            {
            }
        }

        protected sealed override PK CreatePrimaryKey()
        {
            return new PK(ID);
        }

        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);
        public static readonly Mounter<_String> _Name = RegisterColumn((MyModel _) => _.Name);

        public _Int32 ID { get; private set; }

        public _String Name { get; private set; }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var entries  = mapper.CreateProjectionEntries();

            entries.RemoveAt(0);
            document = mapper.AddProjection("Lookup", entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model<MyModel.PK>
    {
        public sealed class PK : CandidateKey
        {
            public PK(_Int32 id) : base(id)
            {
            }
        }

        protected sealed override PK CreatePrimaryKey()
        {
            return new PK(ID);
        }

        public class Lookup : Projection
        {
            static Lookup()
            {
                Register((Lookup _) => _.Name, _Name);
            }

            public _String Name { get; private set; }
        }

        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);
        public static readonly Mounter<_String> _Name = RegisterColumn((MyModel _) => _.Name);

        public _Int32 ID { get; private set; }

        public _String Name { get; private set; }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
Example #19
0
        public void ModelMapper_AddRef_CS()
        {
            var src =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model<MyModel.PK>
    {
        public sealed class PK : CandidateKey
        {
            public PK(_Int32 id) : base(id)
            {
            }
        }

        protected sealed override PK CreatePrimaryKey()
        {
            return new PK(ID);
        }

        public class Key : Key<PK>
        {
            static Key()
            {
                Register((Key _) => _.ID, _ID);
            }

            protected sealed override PK CreatePrimaryKey()
            {
                return new PK(ID);
            }

            public _Int32 ID { get; private set; }
        }

        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            document = mapper.AddRef("Ref", mapper.GetPrimaryKeyEntries());
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;

namespace Test
{
    public class MyModel : Model<MyModel.PK>
    {
        public sealed class PK : CandidateKey
        {
            public PK(_Int32 id) : base(id)
            {
            }
        }

        protected sealed override PK CreatePrimaryKey()
        {
            return new PK(ID);
        }

        public class Key : Key<PK>
        {
            static Key()
            {
                Register((Key _) => _.ID, _ID);
            }

            protected sealed override PK CreatePrimaryKey()
            {
                return new PK(ID);
            }

            public _Int32 ID { get; private set; }
        }

        public class Ref : Ref<PK>
        {
            static Ref()
            {
                Register((Ref _) => _.ID, _ID);
            }

            protected sealed override PK CreateForeignKey()
            {
                return new PK(ID);
            }

            public _Int32 ID { get; private set; }
        }

        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
Example #20
0
        public void ModelMapper_AddCheckConstraint_CS()
        {
            var src =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

[assembly: MessageResource(typeof(Test.Resources.Messages))]

namespace Test
{
    public class MyModel : Model
    {
    }
}

namespace Test.Resources
{
    public static class Messages
    {
        public static string CK_MyModel
        {
            get { return ""Check message for MyModel.""; }
        }
    }
}
";

            var document                = src.CreateDocument();
            var mapper                  = ModelMapper.Refresh(null, document, new TextSpan(160, 0));
            var messageResourceType     = mapper.GetMessageResourceType();
            var messageResourceProperty = messageResourceType.GetMembers("CK_MyModel").OfType <IPropertySymbol>().Single();

            document = mapper.AddCheckConstraint("CK_MyModel", "Description", messageResourceType, messageResourceProperty, null);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;
using Test.Resources;

[assembly: MessageResource(typeof(Test.Resources.Messages))]

namespace Test
{
    [CheckConstraint(nameof(CK_MyModel), typeof(Messages), nameof(Messages.CK_MyModel), Description = ""Description"")]
    public class MyModel : Model
    {
        [_CheckConstraint]
        private _Boolean CK_MyModel
        {
            get
            {
                throw new global::System.NotImplementedException();
            }
        }
    }
}

namespace Test.Resources
{
    public static class Messages
    {
        public static string CK_MyModel
        {
            get { return ""Check message for MyModel.""; }
        }
    }
}
";

            Assert.AreEqual(expected, actual);
        }
Example #21
0
        public void ModelMapper_AddProjection_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model(Of PK)

        Public NotInheritable Class PK
            Inherits CandidateKey

            Public Sub New(id As _Int32)
                MyBase.New(id)
            End Sub
        End Class

        Protected NotOverridable Overrides Function CreatePrimaryKey() As PK
            Return New PK(ID)
        End Function

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)
        Public Shared ReadOnly _Name As Mounter(Of _String) = RegisterColumn(Function(x As MyModel) x.Name)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property

        Private m_Name As _String
        Public Property Name As _String
            Get
                Return m_Name
            End Get
            Private Set
                m_Name = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var entries  = mapper.CreateProjectionEntries();

            entries.RemoveAt(0);
            document = mapper.AddProjection("Lookup", entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model(Of PK)

        Public NotInheritable Class PK
            Inherits CandidateKey

            Public Sub New(id As _Int32)
                MyBase.New(id)
            End Sub
        End Class

        Protected NotOverridable Overrides Function CreatePrimaryKey() As PK
            Return New PK(ID)
        End Function

        Public Class Lookup
            Inherits Projection

            Shared Sub New()
                Register(Function(x As Lookup) x.Name, _Name)
            End Sub

            Private m_Name As _String

            Public Property Name As _String
                Get
                    Return m_Name
                End Get
                Private Set
                    m_Name = Value
                End Set
            End Property
        End Class

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)
        Public Shared ReadOnly _Name As Mounter(Of _String) = RegisterColumn(Function(x As MyModel) x.Name)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property

        Private m_Name As _String
        Public Property Name As _String
            Get
                Return m_Name
            End Get
            Private Set
                m_Name = Value
            End Set
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #22
0
        public void ModelMapper_AddPrimaryKey_VB()
        {
            var src =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));

            Assert.IsTrue(mapper.CanAddPrimaryKey);

            var entries = mapper.CreatePrimaryKeyEntries();
            var _       = entries._;

            document = mapper.AddPrimaryKey("PK", entries, "Key", "Ref");
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data

Namespace Test
    Public Class MyModel
        Inherits Model(Of MyModel.PK)

        Public NotInheritable Class PK
            Inherits CandidateKey

            Public Sub New(id As _Int32)
                MyBase.New(id)
            End Sub
        End Class

        Protected NotOverridable Overrides Function CreatePrimaryKey() As PK
            Return New PK(ID)
        End Function

        Public Class Key
            Inherits Key(Of PK)

            Shared Sub New()
                Register(Function(x As Key) x.ID, _ID)
            End Sub

            Protected NotOverridable Overrides Function CreatePrimaryKey() As PK
                Return New PK(ID)
            End Function

            Private m_ID As _Int32

            Public Property ID As _Int32
                Get
                    Return m_ID
                End Get
                Private Set
                    m_ID = Value
                End Set
            End Property
        End Class

        Public Class Ref
            Inherits Ref(Of PK)

            Shared Sub New()
                Register(Function(x As Ref) x.ID, _ID)
            End Sub

            Protected NotOverridable Overrides Function CreateForeignKey() As PK
                Return New PK(ID)
            End Function

            Private m_ID As _Int32

            Public Property ID As _Int32
                Get
                    Return m_ID
                End Get
                Private Set
                    m_ID = Value
                End Set
            End Property
        End Class

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #23
0
        public void AddMemberAttribute_second_VB()
        {
            var src =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document  = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper    = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var property  = mapper.ModelType.GetMembers().OfType <IPropertySymbol>().SingleOrDefault();
            var attribute = mapper.Compilation.GetKnownType("DevZest.Data.Annotations.RequiredAttribute");
            var result    = mapper.AddMemberAttribute(property, attribute, KnownTypes.ModelDesignerSpecAttribute).Result;

            var resultDocument = result.Document;
            var expected       =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        <Required>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";
            var resultText = resultDocument.GetTextAsync().Result;

            Assert.AreEqual(expected, resultText.ToString());
            Assert.AreEqual(null, result.TextSpan);
        }
        public void ModelMapper_AddIndex_VB()
        {
            var src =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(0, 0));
            var entries  = mapper.CreateIndexEntries();
            var dataRow  = entries.AddRow();
            var _        = entries._;

            _.Column[dataRow]        = mapper.GetColumns().Single();
            _.SortDirection[dataRow] = Data.SortDirection.Descending;
            document = mapper.AddIndex("IX_MyModel_ID", "Description", "DBIX_MyModel_ID", true, false, true, entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

Namespace Test
    <DbIndex(""IX_MyModel_ID"", Description:=""Description"", DbName:=""DBIX_MyModel_ID"", IsUnique:=True, IsValidOnTable:=False, IsValidOnTempTable:=True)>
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property

        <_DbIndex>
        Private ReadOnly Property IX_MyModel_ID As ColumnSort()
            Get
                Return New ColumnSort() {ID.Desc()}
            End Get
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #25
0
        public void ModelMapper_AddUniqueConstraint_VB()
        {
            var src =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations

<assembly: MessageResource(GetType(Test.Resources.Messages))>

Namespace Test
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property
    End Class
End Namespace

Namespace Test.Resources
    Public Shared Class Messages
        Public Shared ReadOnly Property AK_MyModel_ID As String
            Get
                Return ""Alternative key for MyModel.""
            End Get
        End Property
    End Class
End Namespace
";

            var document = src.CreateDocument(LanguageNames.VisualBasic);
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(160, 0));
            var entries  = mapper.CreateIndexEntries();
            var dataRow  = entries.AddRow();
            var _        = entries._;

            _.Column[dataRow]        = mapper.GetColumns().Single();
            _.SortDirection[dataRow] = Data.SortDirection.Descending;
            var messageResourceType     = mapper.GetMessageResourceType();
            var messageResourceProperty = messageResourceType.GetMembers("AK_MyModel_ID").OfType <IPropertySymbol>().Single();

            document = mapper.AddUniqueConstraint("AK_MyModel_ID", "Description", "DBAK_MyModel_ID", messageResourceType, messageResourceProperty, null, entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"Imports DevZest.Data
Imports DevZest.Data.Annotations
Imports Test.Resources

<assembly: MessageResource(GetType(Test.Resources.Messages))>

Namespace Test
    <UniqueConstraint(""AK_MyModel_ID"", GetType(Messages), NameOf(Messages.AK_MyModel_ID), Description:=""Description"", DbName:=""DBAK_MyModel_ID"")>
    Public Class MyModel
        Inherits Model

        Public Shared ReadOnly _ID As Mounter(Of _Int32) = RegisterColumn(Function(x As MyModel) x.ID)

        Private m_ID As _Int32
        <DbColumn()>
        Public Property ID As _Int32
            Get
                Return m_ID
            End Get
            Private Set
                m_ID = Value
            End Set
        End Property

        <_UniqueConstraint>
        Private ReadOnly Property AK_MyModel_ID As ColumnSort()
            Get
                Return New ColumnSort() {ID.Desc()}
            End Get
        End Property
    End Class
End Namespace

Namespace Test.Resources
    Public Shared Class Messages
        Public Shared ReadOnly Property AK_MyModel_ID As String
            Get
                Return ""Alternative key for MyModel.""
            End Get
        End Property
    End Class
End Namespace
";

            Assert.AreEqual(expected, actual);
        }
Example #26
0
        public void ModelMapper_AddUniqueConstraint_CS()
        {
            var src =
                @"using DevZest.Data;
using DevZest.Data.Annotations;

[assembly: MessageResource(typeof(Test.Resources.Messages))]

namespace Test
{
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }
    }
}

namespace Test.Resources
{
    public static class Messages
    {
        public static string AK_MyModel_ID
        {
            get { return ""Alternative key for MyModel.""; }
        }
    }
}
";

            var document = src.CreateDocument();
            var mapper   = ModelMapper.Refresh(null, document, new TextSpan(160, 0));
            var entries  = mapper.CreateIndexEntries();
            var dataRow  = entries.AddRow();
            var _        = entries._;

            _.Column[dataRow]        = mapper.GetColumns().Single();
            _.SortDirection[dataRow] = Data.SortDirection.Descending;
            var messageResourceType     = mapper.GetMessageResourceType();
            var messageResourceProperty = messageResourceType.GetMembers("AK_MyModel_ID").OfType <IPropertySymbol>().Single();

            document = mapper.AddUniqueConstraint("AK_MyModel_ID", "Description", "DBAK_MyModel_ID", messageResourceType, messageResourceProperty, null, entries);
            var actual   = document.GetTextAsync().Result.ToString();
            var expected =
                @"using DevZest.Data;
using DevZest.Data.Annotations;
using Test.Resources;

[assembly: MessageResource(typeof(Test.Resources.Messages))]

namespace Test
{
    [UniqueConstraint(nameof(AK_MyModel_ID), typeof(Messages), nameof(Messages.AK_MyModel_ID), Description = ""Description"", DbName = ""DBAK_MyModel_ID"")]
    public class MyModel : Model
    {
        public static readonly Mounter<_Int32> _ID = RegisterColumn((MyModel _) => _.ID);

        public _Int32 ID { get; private set; }

        [_UniqueConstraint]
        private ColumnSort[] AK_MyModel_ID
        {
            get
            {
                return new ColumnSort[] { ID.Desc() };
            }
        }
    }
}

namespace Test.Resources
{
    public static class Messages
    {
        public static string AK_MyModel_ID
        {
            get { return ""Alternative key for MyModel.""; }
        }
    }
}
";

            Assert.AreEqual(expected, actual);
        }