-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我想提示column的信息,需要获取table的名称,要如何获取 #107
Comments
这个功能我们还在开发中, 相关进展可以关注: DTStack/dt-sql-parser#250 和 DTStack/dt-sql-parser#253 |
@dcycurry
import { PostgresSQL, AbstractParseTreeVisitor, type PostgreSQLParserVisitor } from 'dt-sql-parser'
const sql = 'your sql'
class MyVisitor extends AbstractParseTreeVisitor<void> implements PostgreSQLParserVisitor<void> {
public result = { tableName: '' }
visitTable_name(ctx: Table_nameContext) {
if (ctx.text) this.result.tableName = ctx.text.toLowerCase()
}
}
setupLanguageFeatures({
languageId: LanguageIdEnum.PG,
completionService: async(model,
position,
_completionContext,
suggestions) => {
// 先根据参数里的model和position定位你要解析的sql位置,这段我就略过了
const sql = 'your sql'
const parser = new PostgresSQL()
const tree = parser.parse(sql)
const visitor = new MyVisitor()
visitor.visit(tree)
// 这个visitor会返回tableName,你只需要根据当前tableName请求columns就行
const columns = await fetchColumns(visitor.result.tableName)
return { completionItems: columns }
}
}) |
@Kijin-Seija 非常感谢!现在能提示table name 和columns了 |
monaco-sql-languages 0.12.0-beta.11 版本已发布: 新增支持了自动补全过程中收集实体,现在你可以在 completionService 的最后一个参数中接收实体信息(表名、字段名等) 另外,此版本上有一些破坏性变更,如果更新后报错,请查看最新的文档。 |
请在尽快确认该功能是否可用或者是否符合期望,有任何问题,欢迎反馈。 如果没有反馈,本issue将在一周后关闭。 |
@HaydenOrz 升级后,webpack编译时遇到这个问题,你知道如何解决吗 |
@dcycurry 看起来像是 webpack 配置中,处理 js 的 loader 版本太旧了, class static block 在 es2022 版本才支持,具体解决方式需要看 webpack 配置中处理js 的loader是什么。 如果用的是 ts-loader 那么需要升级 typescript 和 ts-loader 版本,swc 和 esbuild 同理。 |
@HaydenOrz 感谢大佬🙏,大部分情况我可以收集到实体了,这里提一种例外的情况 |
暂时不考虑收集,原因同 DTStack/dt-sql-parser#284 (comment) |
|
我想提示column的信息,需要获取table的名称,要如何获取啊
Originally posted by @dcycurry in #105 (comment)
The text was updated successfully, but these errors were encountered: