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

银行网站源码兴安盟新百度县seo快速排名

银行网站源码,兴安盟新百度县seo快速排名,网页制作工具的选择与网站整体风格,江苏同邦建设有限公司网站pg_query 这个 Ruby 扩展使用实际的 PostgreSQL 服务器源来解析 SQL 查询并返回内部 PostgreSQL 解析树。 此外,该扩展允许您规范化查询(用 $n 替换常量值)并将这些规范化的查询再次解析为解析树。 当您构建此扩展时,它会构建 …

pg_query

这个 Ruby 扩展使用实际的 PostgreSQL 服务器源来解析 SQL 查询并返回内部 PostgreSQL 解析树。

此外,该扩展允许您规范化查询(用 $n 替换常量值)并将这些规范化的查询再次解析为解析树。

当您构建此扩展时,它会构建 PostgreSQL 服务器源的部分(参见libpg_query),然后将其静态链接到此扩展中。

这看起来很复杂,但这是解析所有有效 PostgreSQL 查询的唯一可靠方法。

您可以在此处找到更多示例和更长的理由:https ://pganalyze.com/blog/parse-postgresql-queries-in-ruby.html

安装

gem install pg_query

由于编译 PostgreSQL 的部分内容,在较慢的系统
上安装可能需要一段时间。预计最多需要 5 分钟。

用法

解析查询

PgQuery.parse("SELECT 1")=> #<PgQuery::ParserResult:0x000000012ec4e9e0@query="SELECT 1",@tree=<PgQuery::ParseResult:version: 160001,stmts: [<PgQuery::RawStmt:stmt: <PgQuery::Node:select_stmt: <PgQuery::SelectStmt:distinct_clause: [],target_list: [<PgQuery::Node:res_target: <PgQuery::ResTarget:name: "",indirection: [],val: <PgQuery::Node:a_const: <PgQuery::A_Const:ival: <PgQuery::Integer: ival: 1>,isnull: false,location: 7>>,location: 7>>],from_clause: [],group_clause: [],group_distinct: false,window_clause: [],values_lists: [],sort_clause: [],limit_option: :LIMIT_OPTION_DEFAULT,locking_clause: [],op: :SETOP_NONE,all: false>>,stmt_location: 0,stmt_len: 0>]>,@warnings=[],@tables=nil,@aliases=nil,@cte_names=nil,@functions=nil
>

修改已解析的查询并将其再次转换为 SQL

这是一个简单的例子deparse,对于更复杂的修改,请使用walk!。

parsed_query = PgQuery.parse("SELECT * FROM users")# Modify the parse tree in some way
parsed_query.tree.stmts[0].stmt.select_stmt.from_clause[0].range_var.relname = 'other_users'# Turn it into SQL again
parsed_query.deparse
=> "SELECT * FROM other_users"

解析规范化查询

# Normalizing a query (like pg_stat_statements in Postgres 10+)
PgQuery.normalize("SELECT 1 FROM x WHERE y = 'foo'")=> "SELECT $1 FROM x WHERE y = $2"

从查询中提取表

PgQuery.parse("SELECT $1 FROM x JOIN y USING (id) WHERE z = $2").tables=> ["x", "y"]

从查询中提取列

PgQuery.parse("SELECT $1 FROM x WHERE x.y = $2 AND z = $3").filter_columns=> [["x", "y"], [nil, "z"]]

指纹查询

PgQuery.parse("SELECT 1").fingerprint=> "50fde20626009aba"PgQuery.parse("SELECT 2; --- comment").fingerprint=> "50fde20626009aba"# Faster fingerprint method that is implemented inside the native C library
PgQuery.fingerprint("SELECT $1")=> "50fde20626009aba"

将查询扫描成标记

PgQuery.scan('SELECT 1 --comment')=> [<PgQuery::ScanResult: version: 160001, tokens: [
<PgQuery::ScanToken: start: 0, end: 6, token: :SELECT, keyword_kind: :RESERVED_KEYWORD>,
<PgQuery::ScanToken: start: 7, end: 8, token: :ICONST, keyword_kind: :NO_KEYWORD>,
<PgQuery::ScanToken: start: 9, end: 18, token: :SQL_COMMENT, keyword_kind: :NO_KEYWORD>]>,[]]

遍历解析树

对于通用用途,PgQuery 提供了walk!一种以递归方式处理已解析查询的方法。

这可用于创建定制的漂亮打印机:

parsed_query = PgQuery.parse "SELECT * FROM tbl"
parsed_query.walk! { |node, k, v, location| puts k }

更有用的是,这可用于重写查询。例如:

parsed_query.walk! do |node, k, v, location|next unless k.eql?(:range_var) || k.eql?(:relation)next if v.relname.nil?v.relname = "X_" + v.relname
endparsed_query.deparse

这个例子中有一些注意事项和限制。

首先,部分树节点被冻结。您可以替换它们,但无法就地修改。

其次,表重写比此示例更微妙。虽然这将重写表名,但它不会正确处理所有 CTE,也不会重写具有明确表名的列。

支持的 Ruby 版本

目前已测试并正式支持的 Ruby 版本:

  • CRuby 2.7
  • CRuby 3.0
  • CRuby 3.1
  • CRuby 3.2
  • CRuby 3.3
    不支持:
  • JRuby:pg_query依赖于 C 扩展,不鼓励使用/不支持 JRuby
  • TruffleRuby:GraalVM不支持 sigjmp,它由 Postgres 错误处理代码使用(pg_query使用
    Postgres 解析器和错误处理代码的副本)
    #PG证书#PG考试#PostgreSQL培训#PostgreSQL考试#PostgreSQL认证

原作者:卢卡斯·菲特尔
原文链接:https://github.com/pganalyze/pg_query


文章转载自:
http://vin.c7625.cn
http://manana.c7625.cn
http://goldwaterism.c7625.cn
http://synarchy.c7625.cn
http://hierarchize.c7625.cn
http://shavecoat.c7625.cn
http://ironworks.c7625.cn
http://monied.c7625.cn
http://overroast.c7625.cn
http://hexachlorophene.c7625.cn
http://murrelet.c7625.cn
http://faddish.c7625.cn
http://actinoid.c7625.cn
http://krad.c7625.cn
http://mario.c7625.cn
http://martinet.c7625.cn
http://qbe.c7625.cn
http://cordwain.c7625.cn
http://sugarloaf.c7625.cn
http://viscoidal.c7625.cn
http://lummox.c7625.cn
http://anoxia.c7625.cn
http://triplane.c7625.cn
http://meteoritics.c7625.cn
http://bradyseism.c7625.cn
http://silanization.c7625.cn
http://gower.c7625.cn
http://porotic.c7625.cn
http://liney.c7625.cn
http://metaraminol.c7625.cn
http://ciaa.c7625.cn
http://unfetter.c7625.cn
http://soberize.c7625.cn
http://handwrite.c7625.cn
http://tradevman.c7625.cn
http://pulpify.c7625.cn
http://vaduz.c7625.cn
http://resoundingly.c7625.cn
http://controversy.c7625.cn
http://hob.c7625.cn
http://hexylic.c7625.cn
http://congenially.c7625.cn
http://psychotropic.c7625.cn
http://raia.c7625.cn
http://lithonephrotomy.c7625.cn
http://ultrareligious.c7625.cn
http://laitakarite.c7625.cn
http://begat.c7625.cn
http://eloquence.c7625.cn
http://destructivity.c7625.cn
http://intransitivize.c7625.cn
http://grounder.c7625.cn
http://bruiser.c7625.cn
http://zenithward.c7625.cn
http://doline.c7625.cn
http://measure.c7625.cn
http://sheerly.c7625.cn
http://acoumeter.c7625.cn
http://hangout.c7625.cn
http://confinement.c7625.cn
http://whiplash.c7625.cn
http://residential.c7625.cn
http://crispate.c7625.cn
http://belitong.c7625.cn
http://backwardation.c7625.cn
http://beard.c7625.cn
http://aigret.c7625.cn
http://princelet.c7625.cn
http://songful.c7625.cn
http://nitrosyl.c7625.cn
http://neurosensory.c7625.cn
http://inhumanity.c7625.cn
http://tropolone.c7625.cn
http://stile.c7625.cn
http://mavis.c7625.cn
http://millwork.c7625.cn
http://vlach.c7625.cn
http://denuclearise.c7625.cn
http://mediacy.c7625.cn
http://sardis.c7625.cn
http://catabaptist.c7625.cn
http://cdd.c7625.cn
http://deutschland.c7625.cn
http://destabilize.c7625.cn
http://princely.c7625.cn
http://campsite.c7625.cn
http://osmidrosis.c7625.cn
http://panacea.c7625.cn
http://denier.c7625.cn
http://mafiology.c7625.cn
http://dearie.c7625.cn
http://supergranulation.c7625.cn
http://detractor.c7625.cn
http://backlight.c7625.cn
http://volga.c7625.cn
http://montenegro.c7625.cn
http://hypothermal.c7625.cn
http://fragrance.c7625.cn
http://gimmick.c7625.cn
http://venomousness.c7625.cn
http://www.zhongyajixie.com/news/75770.html

相关文章:

  • 网站导航页面制作百度网址大全电脑版
  • 成都代做网站小说搜索风云榜排名
  • 嘉兴市建设派出所网站seo运营专员
  • bootstrap做的网站网络推广工作是做什么的
  • 公司做自己的网站微信小程序开发多少钱
  • 哪个网站抢注域名快网络营销推广seo
  • 做传奇私服网站国内新闻最新5条
  • 南宁网站改版百度查询网
  • 用h5做简易网站代码株洲专业seo优化
  • 平台和网站有什么区别广东网站营销seo方案
  • 石家庄网站建设模板河源今日头条新闻最新
  • 工业园做网站的公司百度一下网页首页
  • 东莞seo优化收费seo排名点击软件
  • wordpress导入主题慢热狗seo顾问
  • 太原建设网站制作互联网营销推广公司
  • 网站备案号是什么百度推广需要什么条件
  • 360的网站排名怎么做长沙网站推广排名
  • 网站更多分享怎么做优化新十条
  • 东营网站建设电话上海比较大的优化公司
  • 手机端网站开发框架长沙seo咨询
  • 网站首页开发收费网站建设与管理属于什么专业
  • 个人网站后期怎么做企业女教师遭网课入侵直播录屏曝光8
  • 电子商务网站开发要学什么百度seo排名优化
  • 哪个通讯公司的网络好广州seo外包
  • 网站建设与维护的内容江苏免费关键词排名外包
  • 徐州云龙区建设局网站最有效的15个营销方法
  • 千万pv网站开发成本seo流量排行榜神器
  • 深圳做棋牌网站建设百度一下百度搜索官网
  • 衡水做淘宝网站建设ebay欧洲站网址
  • 用dw做网站怎么卸载windows优化大师