Esempio n. 1
0
        public static bool TryParse(string sql, ISqlDialect dialect, string tablePrefix, out string query, out Dictionary <string, object> parameters, out IEnumerable <string> messages)
        {
            try
            {
                var tree = new Irony.Parsing.Parser(language).Parse(sql);

                if (tree.HasErrors())
                {
                    query      = null;
                    parameters = null;

                    messages = tree
                               .ParserMessages
                               .Select(x => $"{x.Message} at line:{x.Location.Line}, col:{x.Location.Column}")
                               .ToArray();

                    return(false);
                }

                var sqlParser = new SqlParser(tree, dialect, tablePrefix);
                sqlParser.Evaluate();

                query      = sqlParser._builder.ToString();
                parameters = sqlParser._parameters;
                messages   = Array.Empty <string>();

                return(true);
            }
            catch (Exception e)
            {
                query      = null;
                parameters = null;
                messages   = new string[] { "Unexpected error: " + e.Message };
            }

            return(false);
        }