public List Analyze()

in Services/DataX.Flow/DataX.Flow.SqlParser/SqlParser.cs [54:136]


        public List<TableData> Analyze(string userCode, string codegen, string inputSchema, bool getUserTablesOnly = true)
        {
            List<TableData> tables = new List<TableData>
            {
                GetProcessedInputTableData(inputSchema)
            };

            List<TableData> result = new List<TableData>
            {
                GetProcessedInputTableData(inputSchema)
            };

            try
            {
                if (string.IsNullOrEmpty(codegen))
                {
                    return result;
                }

                Regex regex = new Regex("(\\S+)\\s*=\\s*SELECT([^\"]*?)FROM[^\"]*?(\\S+)", RegexOptions.IgnoreCase);
                MatchCollection mc = regex.Matches(codegen);

                foreach (Match m in mc)
                {
                    TableData td = new TableData
                    {
                        Name = m.Groups[1].Value
                    };
                    string fromTable = m.Groups[3].Value;

                    if (fromTable.Contains("DataXProcessedInput_"))
                    {
                        fromTable = "DataXProcessedInput";
                    }

                    string columns = m.Groups[2].Value;

                    List<string> cols = GetColumns(columns);
                    foreach (string col in cols)
                    {
                        string c = col.Trim();
                        if (c == "*")
                        {
                            TableData t = tables.Where(tdata => tdata.Name == fromTable).FirstOrDefault();
                            if (t != null && t.Columns != null)
                            {
                                foreach (string column in t.Columns)
                                {
                                    td.Columns.Add(column);
                                }
                            }
                        }
                        else
                        {
                            td.Columns.Add(c.Trim());
                        }
                    }
                    tables.Add(td);
                }

                if (getUserTablesOnly)
                {
                    List<string> userTables = GetTables(userCode);
                    foreach (TableData td in tables)
                    {
                        if (userTables.Contains(td.Name) && td.Name != "DataXProcessedInput")
                        {
                            result.Add(td);
                        }
                    }
                    return result;
                }
                else
                {
                    return tables;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                return result;
            }
        }