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;
}
}