Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions sdmap/Common.Version.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project>

<PropertyGroup>
<Version>0.17.0</Version>
</PropertyGroup>

<PropertyGroup>
<PackageVersion>$(Version)</PackageVersion>
<AssemblyVersion>$(Version)</AssemblyVersion>
<AssemblyInformationalVersion>$(Version)</AssemblyInformationalVersion>
<FileVersion>$(Version)</FileVersion>
</PropertyGroup>

</Project>
1 change: 1 addition & 0 deletions sdmap/sdmap.sln
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
..\README.md = ..\README.md
..\ReleaseNotes.md = ..\ReleaseNotes.md
vstool.png = vstool.png
Common.Version.props = Common.Version.props
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{37A082F1-8179-4EEA-93D8-1C282B5AC65A}"
Expand Down
5 changes: 2 additions & 3 deletions sdmap/src/sdmap.ext.Dapper/sdmap.ext.Dapper.csproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<Import Project="$(MSBuildThisFileDirectory)\..\..\Common.Version.props"/>

<PropertyGroup>
<TargetFrameworks>net6.0;netstandard20</TargetFrameworks>
<AssemblyName>sdmap.ext.Dapper</AssemblyName>
Expand All @@ -14,13 +16,10 @@ https://github.com/sdcb/sdmap/blob/master/ReleaseNotes.md</PackageReleaseNotes>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<Version>0.16.5</Version>
<Description>Dapper extensions for sdmap.</Description>
<PackageProjectUrl>https://github.com/sdcb/sdmap</PackageProjectUrl>
<Authors>sdcb</Authors>
<Copyright>MIT</Copyright>
<AssemblyVersion>0.16.5</AssemblyVersion>
<FileVersion>0.16.5</FileVersion>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
Expand Down
5 changes: 2 additions & 3 deletions sdmap/src/sdmap.ext/sdmap.ext.csproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<Import Project="$(MSBuildThisFileDirectory)\..\..\Common.Version.props"/>

<PropertyGroup>
<TargetFrameworks>net6.0;netstandard20</TargetFrameworks>
<AssemblyName>sdmap.ext</AssemblyName>
Expand All @@ -14,13 +16,10 @@ https://github.com/sdcb/sdmap/blob/master/ReleaseNotes.md</PackageReleaseNotes>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<Version>0.16.5</Version>
<Description>Useful extensions for sdmap/Dapper.</Description>
<PackageProjectUrl>https://github.com/sdcb/sdmap</PackageProjectUrl>
<Authors>sdcb</Authors>
<Copyright>MIT</Copyright>
<AssemblyVersion>0.16.5</AssemblyVersion>
<FileVersion>0.16.5</FileVersion>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
Expand Down
8 changes: 8 additions & 0 deletions sdmap/src/sdmap/IsExternalInit.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// ReSharper disable CheckNamespace
// ReSharper disable UnusedType.Global

namespace System.Runtime.CompilerServices;

internal sealed class IsExternalInit
{
}
65 changes: 65 additions & 0 deletions sdmap/src/sdmap/Macros/Implements/PropertyMetadataRetriever.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using System;
using System.Collections;
using System.Linq;

namespace sdmap.Macros.Implements;

using static PropertyMetadata;

internal readonly record struct PropertyMetadata(string Name, object Value, bool Exists = true)
{
public Type Type => Value?.GetType() ?? typeof(object);

public static PropertyMetadata DoesNotExist => new(string.Empty, default, false);

public static PropertyMetadata Root(object value) => new(string.Empty, value);
}

internal static class PropertyMetadataRetriever
{
public static PropertyMetadata Get(object target, string propertyAccess)
{
if (string.IsNullOrWhiteSpace(propertyAccess))
{
return DoesNotExist;
}

return propertyAccess
.Split('.')
.Aggregate(Root(target), (metadata, next) => GetByKey(metadata.Value, next));
}

private static PropertyMetadata GetByKey(object target, string key)
=> target switch
{
_ when string.IsNullOrWhiteSpace(key)
=> DoesNotExist,

IDictionary dictionary
=> dictionary.Contains(key)
? new(key, dictionary[key])
: DoesNotExist,

not null
=> GetByMemberName(target, key),

_ => DoesNotExist
};

private static PropertyMetadata GetByMemberName(object target, string memberName)
{
var type = target.GetType();

if (type.GetProperty(memberName) is { } property)
{
return new(memberName, property.GetValue(target));
}

if (type.GetField(memberName) is { } field)
{
return new(memberName, field.GetValue(target));
}

return DoesNotExist;
}
}
43 changes: 5 additions & 38 deletions sdmap/src/sdmap/Macros/Implements/RuntimeMacros.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System;
using System.Collections;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
using System.Text;
Expand Down Expand Up @@ -440,48 +439,16 @@ private static Result<string> RequireType(Type type, string expected,

public static QueryPropertyInfo GetProp(object self, object syntax)
{
var props = (syntax as string).Split('.');
var fronts = props.Take(props.Length - 1);

if (self is IDictionary dicSelf)
if (syntax is not string propertyAccess)
{
if (!dicSelf.Contains(syntax))
return null;

var val = dicSelf[syntax];
if (val == null)
return new QueryPropertyInfo(props[0], typeof(object));

return new QueryPropertyInfo(props[0], val.GetType());
throw new ArgumentException("Variable is expected to be of type string.", nameof(syntax));
}
else
{
var frontValue = fronts.Aggregate(self, (s, p) =>
s?.GetType().GetTypeInfo().GetProperty(p)?.GetValue(s));

var pi = frontValue
?.GetType()
.GetTypeInfo()
.GetProperty(props.Last());
if (pi == null) return null;

return new QueryPropertyInfo(pi.Name, pi.PropertyType);
}
var metadata = PropertyMetadataRetriever.Get(self, propertyAccess);
return metadata.Exists ? new(metadata.Name, metadata.Type) : null;
}

public static object GetPropValue(object self, string prop)
{
if (self is IDictionary dicSelf)
{
return dicSelf[prop];
}
else
{
var props = prop.Split('.');
return props.Aggregate(self, (s, p) =>
s?.GetType().GetTypeInfo().GetProperty(p)?.GetValue(s));
}
}
public static object GetPropValue(object self, string prop) => PropertyMetadataRetriever.Get(self, prop).Value;

public static bool IsEmpty(object v)
{
Expand Down
5 changes: 2 additions & 3 deletions sdmap/src/sdmap/sdmap.csproj
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<Import Project="$(MSBuildThisFileDirectory)\..\..\Common.Version.props"/>

<PropertyGroup>
<Description>A template engine for writing dynamic sql.</Description>
<TargetFrameworks>net6;netstandard20</TargetFrameworks>
Expand All @@ -15,9 +17,6 @@
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<Version>0.16.5</Version>
<AssemblyVersion>0.16.5</AssemblyVersion>
<FileVersion>0.16.5</FileVersion>
<Authors>sdcb</Authors>
<Copyright>MIT</Copyright>
<PackageProjectUrl>https://github.com/sdcb/sdmap</PackageProjectUrl>
Expand Down
Loading