Skip to content

Commit

Permalink
Initial work to call messages as table valued functions and make audi…
Browse files Browse the repository at this point in the history
…t entries accessible with custom functions
  • Loading branch information
MarkMpn committed Aug 15, 2022
1 parent 2456b44 commit 29c17c1
Show file tree
Hide file tree
Showing 9 changed files with 805 additions and 3 deletions.
42 changes: 42 additions & 0 deletions MarkMpn.Sql4Cds.Engine/DataTypeHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,48 @@ public static bool IsSameAs(this DataTypeReference x, DataTypeReference y)
{
return DataTypeComparer.Instance.Equals(x, y);
}

/// <summary>
/// Parses a data type from a string
/// </summary>
/// <param name="value">The string representation of the data type to parse</param>
/// <param name="parsedType">The data type that has been parsed from the <paramref name="value"/></param>
/// <returns><c>true</c> if the <paramref name="value"/> could be successfully parsed, or <c>false</c> otherwise</returns>
public static bool TryParse(string value, out DataTypeReference parsedType)
{
parsedType = null;

var name = value;
var parameters = new List<Literal>();
var parenStart = value.IndexOf('(');
if (parenStart != -1)
{
name = value.Substring(0, parenStart).Trim();

if (!value.EndsWith(")"))
return false;

var parts = value.Substring(parenStart + 1, value.Length - parenStart - 2).Split(',');

foreach (var part in parts)
{
if (!Int32.TryParse(part, out var paramValue))
return false;

parameters.Add(new IntegerLiteral { Value = part });
}
}

if (!Enum.TryParse<SqlDataTypeOption>(name, true, out var sqlType))
return false;

parsedType = new SqlDataTypeReference { SqlDataTypeOption = sqlType };

foreach (var param in parameters)
((SqlDataTypeReference)parsedType).Parameters.Add(param);

return true;
}
}

/// <summary>
Expand Down
Loading

0 comments on commit 29c17c1

Please sign in to comment.