通常のSQLステートメントをc#オブジェクトに変換するメソッドを作成しようとしているので、Ironyを使用してSQLステートメントを解析し、ステートメントのタイプとそれに応じた値を含むアクションとしてステートメントを返すことにしました。タイプ
これが私の未完成のコードです[それから何をすべきかわからないのでイライラしたので]
private List<Action> ParseStatement(string statement)
{
var parser = new Parser(new SqlGrammar());
var parsed = parser.Parse(statement);
var status = parsed.Status;
while (parsed.Status == ParseTreeStatus.Parsing)
{
Task.Yield();
}
if (status == ParseTreeStatus.Error)
throw new ArgumentException("The statement cannot be parsed.");
ParseTreeNode parsedStmt = parsed.Root.ChildNodes[0];
switch (parsedStmt.Term.Name)
{
case "insertStmt":
var table = parsedStmt.ChildNodes.Find(x => x.Term.Name == "Id").ChildNodes[0].Token.ValueString;
var valuesCount =
parsedStmt.ChildNodes.Find(x => x.Term.Name == "insertData").ChildNodes.Find(
x => x.Term.Name == "exprList").ChildNodes.Count;
var values = parsedStmt.ChildNodes.Find(x => x.Term.Name == "insertData").ChildNodes.Find(
x => x.Term.Name == "exprList").ChildNodes;
foreach (var value in values)
{
string type = value.Token.Terminal.Name;
}
break;
}
return null;
}
private Type ParseType(string type)
{
switch (type)
{
case "number":
return typeof (int);
case "string":
return typeof (string);
}
return null;
}
したがって、ここでの質問は次のとおりです。Ironyを使用して文字列SQLステートメントをac#オブジェクトに変換するにはどうすればよいですか?
これが私が達成したいことの例です:
Persons VALUES(4、'Nilsen'、'Johan'、'Bakken 2'、'Stavanger')に挿入
そしてそれをに変換してもらいます
return new Action<string type, string table, int val1, string val2, string val3, string val4, string val5>;
メソッドがステートメントから読み取った内容に動的に依存します。
あなたが私を助けることができるように私が私の考えをよく説明したことを願っています、そして何か不明なことがあれば教えてください、そして私はそれを説明しようとします。