【发布时间】:2009-02-24 12:15:06
【问题描述】:
我想对 SQL 代码进行分析。 在此我想将 SQL 代码中的块分开。 例如,在下面的代码中
for condition1 loop
stmt1;
for condition2 loop
stmt2;
end loop;
end loop;
我想将这两个块分开并创建一个数据结构,该结构将包含外部循环块并且还将具有内部循环块。
最好的方法是什么?是否有任何可用的解析器可以以最佳方式处理嵌套循环?
【问题讨论】:
我想对 SQL 代码进行分析。 在此我想将 SQL 代码中的块分开。 例如,在下面的代码中
for condition1 loop
stmt1;
for condition2 loop
stmt2;
end loop;
end loop;
我想将这两个块分开并创建一个数据结构,该结构将包含外部循环块并且还将具有内部循环块。
最好的方法是什么?是否有任何可用的解析器可以以最佳方式处理嵌套循环?
【问题讨论】:
我会建议这种块的合成模式(也适用于 SELECT、CASE、WITH 和类似的)。
public interface ICodeEntity { }
public interface IObjectEntity { }
public class Column: IObjectEntity
{
public string name;
public System.Data.DbType type;
}
public class Table: IObjectEntity
{
public List<Column> columns = new List<Column>();
public string alias;
}
public class Where : ICodeEntity { }
public class GroupBy : ICodeEntity { }
public class OrderBy : ICodeEntity { }
public class Select : Table, ICodeEntity
{
public List<Table> joinList = new List<Table>();
public Where where;
public GroupBy groupBy;
public OrderBy orderBy;
}
public class Condition : ICodeEntity { }
public class If : ICodeEntity
{
public Condition condition;
public List<ICodeEntity> codeList = new List<ICodeEntity>();
}
在程序中的某个地方:
If if1 = new If();
if1.codeList.Add(new If());
查看相关链接:
CodeProject: Illustrated GOF Design Patterns in C#
data&object factory: Composite pattern
【讨论】:
应该已经有可用的 SQL Parser 可以自动为您执行此操作,您无需重新发明轮子。只需谷歌“sql解析器”。
【讨论】: