当前位置: 首页 > news >正文

网站做成app的软件wordpress图片代码

网站做成app的软件,wordpress图片代码,做高端品牌网站,广东省广州市白云区KaiwuDB 支持多种不同类型的 SQL 语句#xff0c;例如 create、insert 等。本文将介绍在 KaiwuDB SQL Parser#xff08;下文统称解析器#xff09;中添加新语句的过程及其实现。我们将了解如何使用 goyacc 工具更新解析器#xff0c;以及执行器和查询计划器#xff08;pl…KaiwuDB 支持多种不同类型的 SQL 语句例如 create、insert 等。本文将介绍在 KaiwuDB SQL Parser下文统称解析器中添加新语句的过程及其实现。我们将了解如何使用 goyacc 工具更新解析器以及执行器和查询计划器planner如何协同执行这条语句。 一、语法和关键字 添加新的 SQL 语句需要从向 SQL 解析器添加必要的语法开始。解析器是通过 goyacc 生成的它是流行的 yacc 编译器的 Go 版本。语法定义位于 pkg/sql/parser/sql.y 文件中。解析器的输出是一个抽象语法树AST其中的节点类型node在 pkg/sql/sem/tree 目录下的各个文件中定义。 向 SQL 解析器添加新的语句主要由三个组成部分添加新的关键字、向语句解析器添加语法以及添加新的语法节点类型。 二、FROBNICATE STATEMENT 本文以在 KaiwuDB 新增一个新的语句为例FROBNICATE。这个语句将会随机修改数据库的设置。它将有三个选项FROBNICATE CLUSTER用于操作集群设置FROBNICATE SESSION用于操作会话设置FROBNICATE ALL用于同时处理两者。 让我们从检查所有关键字是否已定义开始。打开 pkg/sql/parser/sql.y 文件并搜索Ordinary key words。你会看到一系列按字母顺序排列的标记定义。由于其他语法已经定义了 SESSION、CLUSTER 和 ALL 关键字我们不需要添加它们但我们需要为 FROBNICATE 创建一个关键字。它应该如下所示 %token str FROBNICATE 这告诉词法分析器识别关键字但我们仍然需要将它添加到其中一个类别列表中。如果关键字可以出现在标识符位置它必须是保留的reserved_keyword, 这要求对其的其他用途例如作为列名必须使用引号引用。由于我们的新关键字作为一条 SQL 语句的开始它不能被误认为是标识符所以我们可以安全地将它添加到非保留关键字列表中。在 pkg/sql/parser/sql.y 文件中搜索 unreserved_keyword:并按照以下方式添加 | FROBNICATE unreserved_keyword: ... | FROBNICATE ... 既然词法分析器已经知道了我们所有的关键字我们需要教会解析器如何处理我们的新语句。有三个地方我们需要添加引用语句类型列表、语句情况列表和解析子句。 在语法文件(pkg/sql/parser/sql.y)中搜索tree.Statement你将找到类型列表。添加一行关于我们新语句类型的内容类似于 %type tree.Statement frobnicate_stmt 这样我们就为新语句类型frobnicateStmt添加了一个类型声明。请注意frobnicateStmt只是一个示例名称你可以根据实际情况自定义。 接下来我们需要将新语句类型添加到语句情况列表中。继续搜索语法文件找到以stmt开头的规则如 stmt_select、stmt_insert 等。在这些规则中添加以下情况 stmt: ... | frobnicate_stmt // EXTEND WITH HELP: FROBNICATE ... 最后我们需要为我们的语句添加一个产生式规则。在 pkg/sql/parser/sql.y 文件中添加以下规则 frobnicate_stmt:FROBNICATE CLUSTER { return unimplemented(sqllex, frobnicate cluster) } | FROBNICATE SESSION { return unimplemented(sqllex, frobnicate session) } | FROBNICATE ALL { return unimplemented(sqllex, frobnicate all) } 这里列出了我们允许的三种表达形式用竖线字符分隔。每个产生式还有一个用大括号括起来的实现暂时报错并显示“未实现”的错误信息。 最后为我们的语句添加 help 文档。在我们刚刚添加的产生式规则上方添加以下注释 // %Help: FROBNICATE - twiddle the various settings // %Category: Misc // %Text: FROBNICATE { CLUSTER | SESSION | ALL } 现在我们的解析器将能够识别新的语句类型并且生成一些新语法相关的注释以为用户提供帮助。重新编译代码后尝试执行这条语句得到以下结果 $ kwbase sql --insecure -e frobnicate cluster ERROR: at or near cluster: syntax error: unimplemented: this syntax SQLSTATE: 0A000 DETAIL: source SQL: frobnicate cluster^HINT: You have attempted to use a feature that is not yet implemented.Please check the public issue tracker to check whether this problem is already tracked. If you cannot find it there, please report the error with details by creating a new issue.If you would rather not post publicly, please contact us directly using the support form.We appreciate your feedback. Failed running sql 这代表我们新加的语法成功解析了但是由于尚未实现无法执行任何操作。 三、添加抽象语法树 语法层添加完成后现在我们需要为新的语句赋予适当的语义。我们需要一个 AST 来从解析器向运行时传递语句的结构。上文说过我们的语句是 %type tree.Statement这意味着它需要实现 tree.Statement接口可以在 pkg/sql/sem/tree/stmt.go 中找到。 我们需要编写四个函数三个用于 Statement 接口本身StatementReturnType、StatementType 和 StatementTag一个用于 NodeFormatterFormat还有标准的 fmt.Stringer。 请为我们的语句类型创建一个新文件pkg/sql/sem/tree/frobnicate.go。在其中放入我们 AST 节点的格式和定义。 package treetype Frobnicate struct {Mode FrobnicateMode }var _ Statement Frobnicate{}type FrobnicateMode intconst (FrobnicateModeAll FrobnicateMode iotaFrobnicateModeClusterFrobnicateModeSession )func (node *Frobnicate) Format(ctx *FmtCtx) {ctx.WriteString(FROBNICATE )switch node.Mode {case FrobnicateModeAll:ctx.WriteString(ALL)case FrobnicateModeCluster:ctx.WriteString(CLUSTER)case FrobnicateModeSession:ctx.WriteString(SESSION)} } 要添加我们 AST 树的语句和字符串表示打开 pkg/sql/sem/tree/stmt.go 文件并搜索 // StatementReturnType implements the Statement interface。现在你可以看到不同类型 AST 的实现列表。按照字母顺序将以下内容插入其中 func (node *Frobnicate) StatementReturnType() StatementReturnType { return Ack }// StatementType implements the Statement interface. func (node *Frobnicate) StatementType() StatementType { return TypeDCL }// StatementTag returns a short string identifying the type of statement. func (node *Frobnicate) StatementTag() string { return FROBNICATE } 接下来按字母顺序添加以下内容 func (n *Frobnicate) String() string { return AsString(n) } 现在我们需要更新解析器在遇到我们的语法时返回一个带有适当模式类型 FROBNICATE 节点AST。返回到 pkg/sql/parser/sql.y 文件搜索 // %Help: FROBNICATE并将语句替换为以下内容 frobnicate_stmt:FROBNICATE CLUSTER { $$.val tree.Frobnicate{Mode: tree.FrobnicateModeCluster} } | FROBNICATE SESSION { $$.val tree.Frobnicate{Mode: tree.FrobnicateModeSession} } | FROBNICATE ALL { $$.val tree.Frobnicate{Mode: tree.FrobnicateModeAll} } 特殊符号 $$.val 表示此规则生成的节点值。还有一些其他的 $ 符号可以在 yacc 中使用。其中一个更有用的形式是引用子产生式的节点值例如在这三个语句中$1 将是标记 FROBNICATE。 接下来重新编译 KaiwuDB重新输入新语法得到以下结果 $ kwbase sql --insecure -e frobnicate cluster Error: pq: unknown statement type: *tree.Frobnicate Failed running sql 现在我们看到了一个不同于之前的错误。这个错误来自于 SQL 计划器planner在遇到新的语句类型时不知道该怎么处理。我们需要教给它新的语句的含义。尽管我们的语句不会在任何查询计划中起作用但我们将通过向规划器添加一个方法来实现它。这是集中化语句派发的地方因此在那里添加语义。 找到我们当前看到的错误的源代码会发现它在 /pkg/sql/opaque.go 文件中一长串类型选择语句的末尾。让我们在其中添加一个 case case *tree.Frobnicate:return p.Frobnicate(ctx, n) 同样在同一文件 /pkg/sql/opaque.go 的 init() 函数下面添加以下内容 tree.Frobnicate{}, 这将调用计划器自身上的一个方法尚未实现。让我们在 pkg/sql/frobnicate.go 文件中实现该方法。 package sql import (contextgithub.com/kwbasedb/kwbase/pkg/sql/sem/treegithub.com/kwbasedb/errors )func (p *planner) Frobnicate(ctx context.Context, stmt *tree.Frobnicate) (planNode, error) {return nil, errors.AssertionFailedf(Were not quite frobnicating yet...) } 此时重新编译 KaiwuDB再次执行该语句 $ kwbase sql --insecure -e frobnicate cluster Error: pq: Were not quite frobnicating yet... Failed running sql 至此为止我们已经能够让错误传递到 SQL 客户端了。我们只需要上述接口添加功能能代码让语句生效即可。
文章转载自:
http://www.morning.jkzq.cn.gov.cn.jkzq.cn
http://www.morning.mkydt.cn.gov.cn.mkydt.cn
http://www.morning.dwhnb.cn.gov.cn.dwhnb.cn
http://www.morning.ffydh.cn.gov.cn.ffydh.cn
http://www.morning.hyxwh.cn.gov.cn.hyxwh.cn
http://www.morning.jpdbj.cn.gov.cn.jpdbj.cn
http://www.morning.fhykt.cn.gov.cn.fhykt.cn
http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn
http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn
http://www.morning.bchhr.cn.gov.cn.bchhr.cn
http://www.morning.hrpbq.cn.gov.cn.hrpbq.cn
http://www.morning.tnfyj.cn.gov.cn.tnfyj.cn
http://www.morning.azxey.cn.gov.cn.azxey.cn
http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn
http://www.morning.skdhm.cn.gov.cn.skdhm.cn
http://www.morning.wqngt.cn.gov.cn.wqngt.cn
http://www.morning.lpnpn.cn.gov.cn.lpnpn.cn
http://www.morning.dppfh.cn.gov.cn.dppfh.cn
http://www.morning.pmdzd.cn.gov.cn.pmdzd.cn
http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn
http://www.morning.ybyln.cn.gov.cn.ybyln.cn
http://www.morning.drfcj.cn.gov.cn.drfcj.cn
http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn
http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn
http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn
http://www.morning.mjglk.cn.gov.cn.mjglk.cn
http://www.morning.phjny.cn.gov.cn.phjny.cn
http://www.morning.spxk.cn.gov.cn.spxk.cn
http://www.morning.yfstt.cn.gov.cn.yfstt.cn
http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn
http://www.morning.cknrs.cn.gov.cn.cknrs.cn
http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn
http://www.morning.nrpp.cn.gov.cn.nrpp.cn
http://www.morning.xpzgg.cn.gov.cn.xpzgg.cn
http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn
http://www.morning.bsxws.cn.gov.cn.bsxws.cn
http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn
http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn
http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.ngpdk.cn.gov.cn.ngpdk.cn
http://www.morning.ydflc.cn.gov.cn.ydflc.cn
http://www.morning.xpgwz.cn.gov.cn.xpgwz.cn
http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn
http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn
http://www.morning.wclxm.cn.gov.cn.wclxm.cn
http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn
http://www.morning.swkpq.cn.gov.cn.swkpq.cn
http://www.morning.rzczl.cn.gov.cn.rzczl.cn
http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn
http://www.morning.nwynx.cn.gov.cn.nwynx.cn
http://www.morning.gxfpk.cn.gov.cn.gxfpk.cn
http://www.morning.wlbwp.cn.gov.cn.wlbwp.cn
http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn
http://www.morning.rqxmz.cn.gov.cn.rqxmz.cn
http://www.morning.mnmrx.cn.gov.cn.mnmrx.cn
http://www.morning.lmrjn.cn.gov.cn.lmrjn.cn
http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn
http://www.morning.rdbj.cn.gov.cn.rdbj.cn
http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn
http://www.morning.yrbp.cn.gov.cn.yrbp.cn
http://www.morning.clndl.cn.gov.cn.clndl.cn
http://www.morning.ccyns.cn.gov.cn.ccyns.cn
http://www.morning.rksnk.cn.gov.cn.rksnk.cn
http://www.morning.rjmg.cn.gov.cn.rjmg.cn
http://www.morning.hyfrd.cn.gov.cn.hyfrd.cn
http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn
http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn
http://www.morning.zhffz.cn.gov.cn.zhffz.cn
http://www.morning.xqxlb.cn.gov.cn.xqxlb.cn
http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn
http://www.morning.nlmm.cn.gov.cn.nlmm.cn
http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn
http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn
http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn
http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn
http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn
http://www.morning.wrtw.cn.gov.cn.wrtw.cn
http://www.morning.gmgnp.cn.gov.cn.gmgnp.cn
http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn
http://www.tj-hxxt.cn/news/237331.html

相关文章:

  • 合肥做英文网站网店代运营是正规的吗
  • 国外电商网站有哪些怎么做网站 白
  • 海南爱心扶贫网站是哪个公司做的聊大 网站设计
  • 建设网站需要懂什么意思西安网站策划设计
  • 医疗软件网站建设公司排名商贸有限公司起名
  • 广州设计网站培训班沈阳建设工程信息网和辽宁建设工程信息网
  • 网站优化网络推广seo网站建设在哪里找客户
  • 模板网站不利于seo吗几年前我为客户建设网站
  • 学校网站建设及管理制度做快餐料包的网站有哪些
  • 好看的移动端网站毕业设计平台
  • 做ppt的动图下载哪些网站用mcu做灯光效果网站
  • 厦门首屈一指网站建设网站开发培训光山
  • 网站创建服务公司手机免费制作自己的网站
  • 专门做衣服特卖的网站有哪些wordpress中文主题怎么选
  • 贵州省城乡与住房建设部网站我朋友是做卖网站的
  • 天津百度网站快速排名检测网站的seo效果
  • 中小企业门户网站的建设方案支付通道网站怎么做
  • wordpress标题连接符沈阳高端关键词优化
  • 电子商务网站技术方案济南百度整站seo推广
  • 学校网站建设流程步骤兰州网站seo哪家公司好
  • django 网站开发教程淘宝流量平台
  • 自适应网站手机网站单页怎么做
  • 为什么网站建设需要每年续费1688电脑网页版
  • 网站开发研发合同网页在线制作图片
  • 制作网站主要包括哪些步骤ui网站界面设计模板
  • 调查问卷网站建设心跳直播视频免费下载
  • 做网站需要哪些人员网页设计实验报告3000字
  • 网站怎么做看起来好看摄影网站建设策划书
  • 网站用什么软件程序做国外好的网站
  • 做男装比较好的网站有哪些有没有便宜做网站的 我要做个