Skip to content

Commit 77c3df2

Browse files
author
jeffshumphreys@gmail.com
committed
Added more functions, cleaned up Compare functions to use array max scan rather than series of if commands. Tested for nulls. Added to testing. Added PiecesWithContext function.
1 parent 2947ffd commit 77c3df2

File tree

6 files changed

+298
-13
lines changed

6 files changed

+298
-13
lines changed

Adaptors.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Linq;
1111
using System.IO;
1212
using System.Xml.Schema;
13+
using System.Globalization;
1314

1415
namespace MySQLCLRFunctions
1516
{
@@ -27,5 +28,22 @@ public static string VarBin2Hex(SqlBytes InputAsHex)
2728
{
2829
return BitConverter.ToString(InputAsHex.Buffer);
2930
}
31+
32+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
33+
public static DateTime? ADDateTimeString2DateTime(string InputAsStringDateTime)
34+
{
35+
if (InputAsStringDateTime == null) return null;
36+
if (string.IsNullOrWhiteSpace(InputAsStringDateTime)) return null;
37+
// 20021111182004.0Z
38+
// 20021031003422
39+
try
40+
{
41+
return DateTime.ParseExact(InputAsStringDateTime.Substring(0, 14), "yyyyMMddHHmmss", CultureInfo.InvariantCulture);
42+
}
43+
catch (FormatException fe)
44+
{
45+
return null;
46+
}
47+
}
3048
}
3149
}

Compares.cs

Lines changed: 126 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,133 @@ namespace MySQLCLRFunctions
1616
public static class Compares
1717
{
1818
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
19-
public static DateTime GreatestOf2DateTimes(DateTime d1, DateTime d2)
19+
public static DateTime? Max2DateTimes(DateTime? d1, DateTime? d2)
2020
{
21-
if (d1 == null) return d2;
22-
if (d2 == null) return d1;
23-
if (d1.CompareTo(d2) >= 0) return d1;
24-
return d2;
21+
DateTime?[] itemlist = new[] { d1, d2 };
22+
return itemlist.Max();
23+
}
24+
25+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
26+
public static DateTime? Max3DateTimes(DateTime? d1, DateTime? d2, DateTime? d3)
27+
{
28+
DateTime?[] itemlist = new [] { d1, d2, d3 };
29+
return itemlist.Max();
30+
}
31+
32+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
33+
public static DateTime? Max4DateTimes(DateTime? d1, DateTime? d2, DateTime? d3, DateTime? d4)
34+
{
35+
DateTime?[] itemlist = new[] { d1, d2, d3, d4 };
36+
return itemlist.Max();
37+
}
38+
39+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
40+
public static int? Max2Integers(int? d1, int? d2)
41+
{
42+
int?[] itemlist = new[] { d1, d2 };
43+
return itemlist.Max();
44+
}
45+
46+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
47+
public static int? Max3Integers(int? d1, int? d2, int? d3)
48+
{
49+
int?[] itemlist = new[] { d1, d2, d3 };
50+
return itemlist.Max();
51+
}
52+
53+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
54+
public static int? Max4Integers(int? d1, int? d2, int? d3, int? d4)
55+
{
56+
int?[] itemlist = new[] { d1, d2, d3, d4 };
57+
return itemlist.Max();
58+
}
59+
60+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
61+
public static Int64? Max2BigInts(Int64? d1, Int64? d2)
62+
{
63+
Int64?[] itemlist = new[] { d1, d2 };
64+
return itemlist.Max();
65+
}
66+
67+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
68+
public static Int64? Max3BigInts(Int64? d1, Int64? d2, Int64? d3)
69+
{
70+
Int64?[] itemlist = new[] { d1, d2, d3 };
71+
return itemlist.Max();
72+
}
73+
74+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
75+
public static Int64? Max4BigInts(Int64? d1, Int64? d2, Int64? d3, Int64? d4)
76+
{
77+
Int64?[] itemlist = new[] { d1, d2, d3, d4 };
78+
return itemlist.Max();
79+
}
80+
81+
//**********************************************************************************************************************
82+
// Mins
83+
//**********************************************************************************************************************
84+
85+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
86+
public static DateTime? Min2DateTimes(DateTime? d1, DateTime? d2)
87+
{
88+
DateTime?[] itemlist = new[] { d1, d2 };
89+
return itemlist.Min();
90+
}
91+
92+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
93+
public static DateTime? Min3DateTimes(DateTime? d1, DateTime? d2, DateTime? d3)
94+
{
95+
DateTime?[] itemlist = new[] { d1, d2, d3 };
96+
return itemlist.Min();
97+
}
98+
99+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = false, IsPrecise = true)]
100+
public static DateTime? Min4DateTimes(DateTime? d1, DateTime? d2, DateTime? d3, DateTime? d4)
101+
{
102+
DateTime?[] itemlist = new[] { d1, d2, d3, d4 };
103+
return itemlist.Min();
104+
}
105+
106+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
107+
public static int? Min2Integers(int? d1, int? d2)
108+
{
109+
int?[] itemlist = new[] { d1, d2 };
110+
return itemlist.Min();
111+
}
112+
113+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
114+
public static int? Min3Integers(int? d1, int? d2, int? d3)
115+
{
116+
int?[] itemlist = new[] { d1, d2, d3 };
117+
return itemlist.Min();
118+
}
119+
120+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
121+
public static int? Min4Integers(int? d1, int? d2, int? d3, int? d4)
122+
{
123+
int?[] itemlist = new[] { d1, d2, d3, d4 };
124+
return itemlist.Min();
125+
}
126+
127+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
128+
public static Int64? Min2BigInts(Int64? d1, Int64? d2)
129+
{
130+
Int64?[] itemlist = new[] { d1, d2 };
131+
return itemlist.Min();
132+
}
133+
134+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
135+
public static Int64? Min3BigInts(Int64? d1, Int64? d2, Int64? d3)
136+
{
137+
Int64?[] itemlist = new[] { d1, d2, d3 };
138+
return itemlist.Min();
139+
}
140+
141+
[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)]
142+
public static Int64? Min4BigInts(Int64? d1, Int64? d2, Int64? d3, Int64? d4)
143+
{
144+
Int64?[] itemlist = new[] { d1, d2, d3, d4 };
145+
return itemlist.Min();
25146
}
26147
}
27148
}

MySQLCLRFunctions.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
<Compile Include="StringTransform.cs" />
6161
<Compile Include="StringTransformStripDownCustomizations.cs" />
6262
<Compile Include="StringTransformTSQLSpecific.cs" />
63-
<Compile Include="SuperClass.cs" />
6463
<Compile Include="Properties\AssemblyInfo.cs" />
6564
</ItemGroup>
6665
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

0 commit comments

Comments
 (0)