通常のSQL文をC#オブジェクトに変換するメソッドを作成しようとしています。そのため、Ironyを使用してSQL文を解析し、その文を[私はその後、何をするか分からないと不満を持っているのでここでタイプに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;
}
ので、ここで質問です:どのように文字列のSQL文をac#オブジェクトに変換するためにIronyを使用できますか?ここで
は私が達成したいものの一例である:
INSERT INTO者VALUES(4 'ニルセン'、 'ヨハン'、 'バッケン2'、 'スタヴァンゲル')
そしてそれは、動的にメソッドが声明から読んだものに応じて
return new Action<string type, string table, int val1, string val2, string val3, string val4, string val5>;
に変換します。
私は私のアイデアをよく説明してくれて、みんな助けてくれることを願っています。そして、不明な点がある場合は教えてください。私はそれを説明しようとします。
私は適切なSQL文法を取得し、それをアイロニーが理解できる文法形式に変換する必要があると思います。簡単なものではありません。あなたは簡単に挫折した人々のためではない多くの仕事をしています。しかし、それはできます。 –
私はすでにSQLGrammarを持っていますが、問題はすべてのStatementの解析、挿入、更新、作成...そのコンテンツの返却です[他の目的ではC#で使用されます] –
IronyがSQL文を解析する方法、またはそれ以上を解析結果に基づいて変換するか?あなたがアイロニーから戻ってきたASTに満足していますか?使用している関連するSQL文法の一部を表示できますか? –