internal static string ParseOrderBy(string expression, CSSchema schema, string tableAlias, CSJoinList joinList)
        {
            //joinList = new CSJoinList();

            if (expression.Trim().Length < 1)
                return expression;

            string parsedExpression = "";
            string[] terms = expression.Split(',');

            foreach (string term in terms)
            {
                if (term.Length < 1)
                    continue;

                bool ascending = true;
                string fieldName = term;

                if (term.EndsWith("-"))
                    ascending = false;

                if (term.EndsWith("+") || term.EndsWith("-"))
                    fieldName = term.Substring(0, term.Length - 1);

                if (parsedExpression.Length > 1)
                    parsedExpression += ",";

                parsedExpression += ParseFilter(fieldName, schema, tableAlias, joinList);

                if (!ascending)
                    parsedExpression += " DESC";
            }

            return parsedExpression;
        }
		internal static string Parse(CSSchema schema, string input, string tableAlias, CSJoinList joins)
		{
			if (input == "")
				return input;

			List<Token> tokens = PreParse(input);

			QueryExpression rootQuery = new QueryExpression(schema,tableAlias);

			rootQuery.Joins = joins;

            QueryExpression finalQuery = Parse(rootQuery, tokens, 0, tokens.Count);

			return finalQuery.Expression;
		}
 internal static string ParseFilter(string expressionText, CSSchema schema, string tableAlias, CSJoinList joins)
 {
     return Parse(schema, expressionText, tableAlias, joins);
 }