Maison >développement back-end >C++ >Un analyseur gratuit peut-il générer une structure arborescente à partir du code SQL et identifier les types d'instructions ?
Pouvez-vous recommander un analyseur disponible gratuitement capable d'analyser le code SQL et de générer une arborescence ? De plus, cet analyseur peut-il identifier le type d’instruction représenté par chaque nœud de l’arborescence ? Par exemple, si un nœud contient une condition de boucle, il doit être désigné comme nœud « de type boucle ».
Bien sûr ! Pour Transact-SQL (en particulier Microsoft SQL Server), vous pouvez profiter de l'espace de noms Microsoft.SqlServer.Management.SqlParser.Parser
. Ceci est inclus dans l'assembly Microsoft.SqlServer.Management.SqlParser.dll
, qui est inclus avec SQL Server et est distribué gratuitement.
Voici un exemple de méthode que vous pouvez utiliser pour analyser T-SQL sous forme de chaîne dans une séquence de jetons :
<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>La classe
TokenInfo
est une classe simple avec les propriétés mentionnées dans les méthodes. Tokens
est une énumération contenant des constantes comme TOKEN_BEGIN
, TOKEN_COMMIT
et TOKEN_EXISTS
.
Remarque : Cet espace de noms est désormais disponible sous forme de package NuGet distinct à l'adresse : https://www.php.cn/link/e6e8bbe351bf19f963820a96543f25db.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!