Können Sie einen frei verfügbaren Parser empfehlen, der SQL-Code analysieren und eine Baumstruktur generieren kann? Kann dieser Parser außerdem den Anweisungstyp identifizieren, der durch jeden Knoten im Baum dargestellt wird? Wenn ein Knoten beispielsweise eine Schleifenbedingung enthält, sollte er als Knoten vom Typ „Schleife“ gekennzeichnet werden.
Natürlich! Für Transact-SQL (insbesondere Microsoft SQL Server) können Sie den Namespace Microsoft.SqlServer.Management.SqlParser.Parser
nutzen. Dies ist in der Microsoft.SqlServer.Management.SqlParser.dll
-Assembly enthalten, die in SQL Server enthalten ist und kostenlos verteilt wird.
Hier ist eine Beispielmethode, mit der Sie T-SQL als Zeichenfolge in eine Folge von Tokens analysieren können:
<code class="language-c#">IEnumerable<tokeninfo> ParseSql(string sql) { ParseOptions parseOptions = new ParseOptions(); Scanner scanner = new Scanner(parseOptions); int state = 0, start, end, lastTokenEnd = -1, token; bool isPairMatch, isExecAutoParamHelp; List<tokeninfo> tokens = new List<tokeninfo>(); scanner.SetSource(sql, 0); while ((token = scanner.GetNext(ref state, out start, out end, out isPairMatch, out isExecAutoParamHelp)) != (int)Tokens.EOF) { TokenInfo tokenInfo = new TokenInfo() { Start = start, End = end, IsPairMatch = isPairMatch, IsExecAutoParamHelp = isExecAutoParamHelp, Sql = sql.Substring(start, end - start + 1), Token = (Tokens)token, }; tokens.Add(tokenInfo); lastTokenEnd = end; } return tokens; }</code>
TokenInfo
ist eine einfache Klasse mit den in den Methoden genannten Eigenschaften. Tokens
ist eine Aufzählung, die Konstanten wie TOKEN_BEGIN
, TOKEN_COMMIT
und TOKEN_EXISTS
enthält.
Hinweis: Dieser Namespace ist jetzt als separates NuGet-Paket verfügbar unter: https://www.php.cn/link/e6e8bbe351bf19f963820a96543f25db.
Das obige ist der detaillierte Inhalt vonKann ein kostenloser Parser eine Baumstruktur aus SQL-Code generieren und Anweisungstypen identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!