Commit f9bd30fb authored by Marc Gravell's avatar Marc Gravell

Simplify the string_split implementation

parent c6d4379b
...@@ -1990,13 +1990,13 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj ...@@ -1990,13 +1990,13 @@ public static void PackListParameters(IDbCommand command, string namePrefix, obj
private static bool TryStringSplit(ref IEnumerable list, int splitAt, string namePrefix, IDbCommand command) private static bool TryStringSplit(ref IEnumerable list, int splitAt, string namePrefix, IDbCommand command)
{ {
if (list == null || splitAt < 0) return false; if (list == null || splitAt < 0) return false;
if (list is IEnumerable<int>) return TryStringSplit<int>(ref list, splitAt, namePrefix, command, "int not null", if (list is IEnumerable<int>) return TryStringSplit<int>(ref list, splitAt, namePrefix, command, "int",
(sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture))); (sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture)));
if (list is IEnumerable<long>) return TryStringSplit<long>(ref list, splitAt, namePrefix, command, "bigint not null", if (list is IEnumerable<long>) return TryStringSplit<long>(ref list, splitAt, namePrefix, command, "bigint",
(sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture))); (sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture)));
if (list is IEnumerable<short>) return TryStringSplit<short>(ref list, splitAt, namePrefix, command, "smallint not null", if (list is IEnumerable<short>) return TryStringSplit<short>(ref list, splitAt, namePrefix, command, "smallint",
(sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture))); (sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture)));
if (list is IEnumerable<byte>) return TryStringSplit<byte>(ref list, splitAt, namePrefix, command, "tinyint not null", if (list is IEnumerable<byte>) return TryStringSplit<byte>(ref list, splitAt, namePrefix, command, "tinyint",
(sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture))); (sb, i) => sb.Append(i.ToString(CultureInfo.InvariantCulture)));
return false; return false;
} }
...@@ -2024,12 +2024,12 @@ private static bool TryStringSplit(ref IEnumerable list, int splitAt, string nam ...@@ -2024,12 +2024,12 @@ private static bool TryStringSplit(ref IEnumerable list, int splitAt, string nam
else else
{ {
varName = variableName; varName = variableName;
return "(select val from " + variableName + "_TSS)"; return "(select cast([value] as " + colType + ") from string_split(" + variableName + ",','))";
} }
}, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant); }, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.CultureInvariant);
if (varName == null) return false; // couldn't resolve the var! if (varName == null) return false; // couldn't resolve the var!
command.CommandText = "declare " + varName + "_TSS table(val " + colType + ");insert " + varName + "_TSS (val) select value from string_split(" + varName + ",',');" + sql; command.CommandText = sql;
var concatenatedParam = command.CreateParameter(); var concatenatedParam = command.CreateParameter();
concatenatedParam.ParameterName = namePrefix; concatenatedParam.ParameterName = namePrefix;
concatenatedParam.DbType = DbType.AnsiString; concatenatedParam.DbType = DbType.AnsiString;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment