Example #1
0
        public void make_datetime_fields_be_containment()
        {
            JsonLocatorField.For <Target>(EnumStorage.AsInteger, x => x.Date)
            .ShouldUseContainmentOperator().ShouldBeTrue();

            JsonLocatorField.For <Target>(EnumStorage.AsInteger, x => x.DateOffset)
            .ShouldUseContainmentOperator().ShouldBeTrue();
        }
        public void two_deep_members_json_locator()
        {
            var inner = ReflectionHelper.GetProperty<Target>(x => x.Inner);
            var number = ReflectionHelper.GetProperty<Target>(x => x.Number);

            var twodeep = new JsonLocatorField(EnumStorage.AsInteger, new MemberInfo[] {inner, number});

            twodeep.SqlLocator.ShouldBe("CAST(d.data -> 'Inner' ->> 'Number' as integer)");
        }
Example #3
0
        public void three_deep_members_json_locator_for_string_property()
        {
            var inner      = ReflectionHelper.GetProperty <Target>(x => x.Inner);
            var stringProp = ReflectionHelper.GetProperty <Target>(x => x.String);

            var deep = new JsonLocatorField(new MemberInfo[] { inner, inner, stringProp });

            deep.SqlLocator.ShouldBe("d.data -> 'Inner' -> 'Inner' ->> 'String'");
        }
Example #4
0
        public void three_deep_members_json_locator()
        {
            var inner  = ReflectionHelper.GetProperty <Target>(x => x.Inner);
            var number = ReflectionHelper.GetProperty <Target>(x => x.Number);

            var deep = new JsonLocatorField(new MemberInfo[] { inner, inner, number });

            deep.SqlLocator.ShouldBe("CAST(d.data -> 'Inner' -> 'Inner' ->> 'Number' as integer)");
        }
Example #5
0
        public void three_deep_members_json_locator_for_string_property(Casing casing, string innerName, string stringName)
        {
            var inner      = ReflectionHelper.GetProperty <Target>(x => x.Inner);
            var stringProp = ReflectionHelper.GetProperty <Target>(x => x.String);

            var deep = new JsonLocatorField("d.data", new StoreOptions(), EnumStorage.AsInteger, casing, new MemberInfo[] { inner, inner, stringProp });

            deep.SqlLocator.ShouldBe($"d.data -> '{innerName}' -> '{innerName}' ->> '{stringName}'");
        }
Example #6
0
        public void three_deep_members_json_locator(Casing casing, string innerName, string numberName)
        {
            var inner  = ReflectionHelper.GetProperty <Target>(x => x.Inner);
            var number = ReflectionHelper.GetProperty <Target>(x => x.Number);

            var deep = new JsonLocatorField("d.data", new StoreOptions(), EnumStorage.AsInteger, casing, new MemberInfo[] { inner, inner, number });

            deep.SqlLocator.ShouldBe($"CAST(d.data -> '{innerName}' -> '{innerName}' ->> '{numberName}' as integer)");
        }
Example #7
0
        public void three_deep_members_json_locator_for_string_property()
        {
            var inner = ReflectionHelper.GetProperty<Target>(x => x.Inner);
            var stringProp = ReflectionHelper.GetProperty<Target>(x => x.String);

            var deep = new JsonLocatorField(new MemberInfo[] { inner, inner, stringProp });

            deep.SqlLocator.ShouldBe("d.data -> 'Inner' -> 'Inner' ->> 'String'");
        }
        public void two_deep_members_json_locator(Casing casing)
        {
            var inner      = ReflectionHelper.GetProperty <Target>(x => x.Inner);
            var number     = ReflectionHelper.GetProperty <Target>(x => x.Number);
            var innerName  = casing == Casing.Default ? "Inner" : "inner";
            var numberName = casing == Casing.Default ? "Number" : "number";

            var twodeep = new JsonLocatorField("d.data", EnumStorage.AsInteger, casing, new MemberInfo[] { inner, number });

            twodeep.SqlLocator.ShouldBe($"CAST(d.data -> '{innerName}' ->> '{numberName}' as integer)");
        }
Example #9
0
        public void do_not_use_timestamp_functions_on_selection_locator_for_dates()
        {
            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, x => x.DateTime)
            .SelectionLocator.ShouldBe("CAST(d.data ->> 'DateTime' as timestamp without time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, x => x.NullableDateTime)
            .SelectionLocator.ShouldBe("CAST(d.data ->> 'NullableDateTime' as timestamp without time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, x => x.DateTimeOffset)
            .SelectionLocator.ShouldBe("CAST(d.data ->> 'DateTimeOffset' as timestamp with time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, x => x.NullableDateTimeOffset)
            .SelectionLocator.ShouldBe("CAST(d.data ->> 'NullableDateTimeOffset' as timestamp with time zone)");
        }
Example #10
0
        public void do_not_use_timestamp_functions_on_selection_locator_for_dates(Casing casing, string dateTimeName, string nullableDateTimeName, string dateTimeOffsetName, string nullableDateTimeOffsetName)
        {
            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.DateTime)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{dateTimeName}' as timestamp without time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.NullableDateTime)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{nullableDateTimeName}' as timestamp without time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.DateTimeOffset)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{dateTimeOffsetName}' as timestamp with time zone)");

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.NullableDateTimeOffset)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{nullableDateTimeOffsetName}' as timestamp with time zone)");
        }
        public void do_not_use_timestamp_functions_on_selection_locator_for_dates(Casing casing)
        {
            var name = casing == Casing.Default ? "DateTime" : "dateTime";

            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.DateTime)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{name}' as timestamp without time zone)");

            name = casing == Casing.Default ? "NullableDateTime" : "nullableDateTime";
            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.NullableDateTime)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{name}' as timestamp without time zone)");

            name = casing == Casing.Default ? "DateTimeOffset" : "dateTimeOffset";
            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.DateTimeOffset)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{name}' as timestamp with time zone)");

            name = casing == Casing.Default ? "NullableDateTimeOffset" : "nullableDateTimeOffset";
            JsonLocatorField.For <DocWithDates>(EnumStorage.AsString, casing, x => x.NullableDateTimeOffset)
            .SelectionLocator.ShouldBe($"CAST(d.data ->> '{name}' as timestamp with time zone)");
        }
Example #12
0
        public void UnknownPGTypesMapToJsonb()
        {
            var locator = JsonLocatorField.For <UserNested>(EnumStorage.AsInteger, Casing.Default, x => x.Nested);

            Assert.Equal("CAST(d.data ->> 'Nested' as jsonb)", locator.SqlLocator);
        }
Example #13
0
        public void locator_for_enum_in_string_mode()
        {
            var field = JsonLocatorField.For <Target>(EnumStorage.AsString, x => x.Color);

            field.SqlLocator.ShouldBe("d.data ->> 'Color'");
        }
Example #14
0
 public void locator_for_enum_in_string_mode(Casing casing, string memberName)
 {
     JsonLocatorField.For <Target>(EnumStorage.AsString, casing, x => x.Color)
     .SqlLocator.ShouldBe($"d.data ->> '{memberName}'");
 }
Example #15
0
 public void locator_for_enum_in_integer_mode(Casing casing, string memberName)
 {
     JsonLocatorField.For <Target>(EnumStorage.AsInteger, casing, x => x.Color)
     .SqlLocator.ShouldBe($"CAST(d.data ->> '{memberName}' as integer)");
 }
Example #16
0
 public void locator_for_number(Casing casing, string memberName)
 {
     JsonLocatorField.For <User>(EnumStorage.AsInteger, casing, x => x.Age)
     .SqlLocator.ShouldBe($"CAST(d.data ->> '{memberName}' as integer)");
 }