Sto cercando di creare un metodo che converta una normale istruzione sql in oggetti C#, quindi ho deciso di utilizzare Irony per analizzare l'istruzione sql, quindi restituisco l'istruzione come azione che contiene il tipo di dichiarazione ei valori di esso a seconda del tipoAnalisi SQL con ironia
Ecco il mio non completato codice [perché ho ottenuto frustrato come io non so cosa fare allora]
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;
}
quindi la domanda è: come potrei usare Irony per convertire un'istruzione SQL stringa in oggetti aC#?
Ecco un esempio di quello che voglio ottenere:
INSERT INTO Persone VALORI (4, 'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')
E ottenerlo convertito
return new Action<string type, string table, int val1, string val2, string val3, string val4, string val5>;
dinamicamente a seconda di ciò che il metodo aver letto dalla dichiarazione.
Spero di aver spiegato bene la mia idea in modo che tu possa aiutarmi ragazzi, E se c'è qualcosa di poco chiaro per favore dimmelo e proverò a spiegarlo.
Sto indovinando punto di partenza dovrebbe essere sempre un adeguato grammatica SQL e convertirla alla grammatica formato di ironia può capire. Non è roba facile. Sei pronto per un sacco di lavoro che non è per le persone facilmente frustrate. Ma * può * essere fatto. –
Ho già SQLGrammar ma il problema è analizzare ogni istruzione, inserire, aggiornare, creare ... quindi restituire il suo contenuto [da utilizzare in C# in altri scopi] –
La tua domanda si riferisce più a ottenere che Irony analizzi le tue istruzioni SQL o altro per eseguire la conversione in base ai risultati di analisi? Sei soddisfatto dell'AST che stai tornando da Irony? Potresti mostrare parte della grammatica SQL che stai utilizzando? –