using System;
using System.Text ;
public class Test
{
public static void Main( )
{
Console.WriteLine ( ReplaceTopLevelCommas( "select name,lastname,email from contacts" ) ) ;
Console.WriteLine ( ReplaceTopLevelCommas( "select name,lastname,isnull(email,0) from contacts" ) ) ;
Console.WriteLine ( ReplaceTopLevelCommas( "select name,lastname,isnull(email,something(a,b)) from contacts" ) ) ;
}
public static string ReplaceTopLevelCommas( string query)
{
var newQuery = new StringBuilder( ) ;
var level = 0 ;
foreach ( var c in query)
{
if ( c == ',' )
{
if ( level == 0 )
{
newQuery.Append ( "+\" |\" +" ) ;
}
else
{
newQuery.Append ( c) ;
}
}
else
{
if ( c == '(' )
{
level++;
}
else if ( c == ')' )
{
level--;
}
newQuery.Append ( c) ;
}
}
return newQuery.ToString ( ) ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dDsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlDb25zb2xlLldyaXRlTGluZShSZXBsYWNlVG9wTGV2ZWxDb21tYXMoInNlbGVjdCBuYW1lLGxhc3RuYW1lLGVtYWlsIGZyb20gY29udGFjdHMiKSk7CgkJQ29uc29sZS5Xcml0ZUxpbmUoUmVwbGFjZVRvcExldmVsQ29tbWFzKCJzZWxlY3QgbmFtZSxsYXN0bmFtZSxpc251bGwoZW1haWwsMCkgZnJvbSBjb250YWN0cyIpKTsKCQlDb25zb2xlLldyaXRlTGluZShSZXBsYWNlVG9wTGV2ZWxDb21tYXMoInNlbGVjdCBuYW1lLGxhc3RuYW1lLGlzbnVsbChlbWFpbCxzb21ldGhpbmcoYSxiKSkgZnJvbSBjb250YWN0cyIpKTsKCX0KCQoJcHVibGljIHN0YXRpYyBzdHJpbmcgUmVwbGFjZVRvcExldmVsQ29tbWFzKHN0cmluZyBxdWVyeSkKCXsKCQl2YXIgbmV3UXVlcnkgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoJCXZhciBsZXZlbCA9IDA7CgkJCgkJZm9yZWFjaCAodmFyIGMgaW4gcXVlcnkpCgkJewoJCQlpZiAoYyA9PSAnLCcpCgkJCXsKCQkJCWlmIChsZXZlbCA9PSAwKQoJCQkJewoJCQkJCW5ld1F1ZXJ5LkFwcGVuZCgiK1wifFwiKyIpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCW5ld1F1ZXJ5LkFwcGVuZChjKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmIChjID09ICcoJykKCQkJCXsKCQkJCQlsZXZlbCsrOwoJCQkJfQoJCQkJZWxzZSBpZiAoYyA9PSAnKScpCgkJCQl7CgkJCQkJbGV2ZWwtLTsKCQkJCX0KCQkJCQoJCQkJbmV3UXVlcnkuQXBwZW5kKGMpOwoJCQl9CgkJfQoJCQoJCXJldHVybiBuZXdRdWVyeS5Ub1N0cmluZygpOwoJfQp9