- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jOOQ 生成针对 Athena(又名 PrestoDB/Trino)运行的查询
为此,我使用了 SQLDialects.DEFAULT
,它之所以有效,是因为我使用了非常基本的查询功能。
但是,jOOQ 会像这样呈现查询:
select *
from "Artist"
limit 10
offset 10
天知道为什么,但是 limit
和 offset
的顺序似乎很重要,查询只有在交换顺序的情况下才有效:
select *
from "Artist"
offset 10
limit 10
有没有我可以子类化的类,以修改语句渲染函数,以便交换它们的顺序?还是我自己实现的任何其他方式?
最佳答案
在 jOOQ 中,没有一种简单的方法可以如此轻松地更改像 SELECT
子句顺序(或任何其他 SELECT
子句语法)这样基本的东西,简单地说,因为除了支持边缘 SQL 方言之外,这从来都不是核心 jOOQ 使用的要求。由于对 SQL 方言的支持在 jOOQ 中需要大量工作(包括所有集成测试、边缘案例等),而且由于 market shares这些方言的比例很低,所以在 jOOQ 中改进这一点从来都不是优先事项。
在这种情况下,您可能会认为这“只是”关于关键字的顺序。 “只有这一件。”它从来没有。它永远不会停止,方言的细微差异永远不会结束。只需查看 jOOQ 代码库,就可以了解不同供应商选择制作方言的方式有多么古怪。在这种特殊情况下,人们会认为使该子句与 MySQL/PostgreSQL/SQLite 兼容似乎非常明显和简单,因此最好的机会是向供应商提出功能请求。与市场领导者更加兼容以促进迁移应该符合他们自己的最佳利益。
ExecuteListener
和一个简单的正则表达式。每当遇到 limit (\d+|\?) offset (\d+|\?)
时,只需交换值(并绑定(bind)值!)。这对于顶级选择可能相当有效。如果您在嵌套选择中使用 LIMIT .. OFFSET
显然会更难,但可能仍然可行。org.jooq.impl.Limit
。它包含此子句的所有呈现逻辑。如果那是你唯一的补丁,那么升级 jOOQ 是可能的。但显然,修补是一个滑坡,因为您可能会开始修补各种条款,从而使升级变得不可能。resultQuery("{0} offset {1} limit {2}", actualSelect, val(10), val(10))
。这不能很好地扩展,但如果它只有大约 1-2 个查询,它可能就足够了SQLDialect.DEFAULT
此时我必须警告您,SQLDialect.DEFAULT
的行为是未指定的。它的主要目的是当您在不是 Attachable
的 QueryPart
上调用 QueryPart.toString()
时生成东西>,其中没有更好的 SQLDialect
。 DEFAULT
方言可能会在次要版本(甚至是补丁版本,如果某些 toString()
方法中存在重要错误)之间发生变化,因此您基于此的任何实现都位于每次升级都有崩溃的风险。
...将在 jOOQ 中支持这些方言:
关于jooq - 自定义 jOOQ 方言以更改 LIMIT 和 OFFSET 在语句中呈现的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73862207/
Hibernate是独立于数据库的。因此,无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言。 例如,假设我们正在使用MySQL数据库,那么我们需要下面的方言: org.hibe
我正在使用 Hibernate 从 sql server 2008 访问数据。同时执行以下代码 Session session = sessionFactory.openSession(); Stri
我的 PostgreSQL 版本是10.5。 hibernate.version 4.3.8.Final 的正确 Hibernate 方言是什么? 请注意,问题是关于正确的 Hibernate Dia
Hibernate 可以选择自动检测 hibernate.dialect .如何检索该自动检测到的值?我无法找到有关此的任何信息。 最佳答案 您可以从 SessionFactory 检索它但您需要将其
我对 Sequelize 还很陌生,虽然我以前在 Node 上工作过,但我没有使用任何 ORM 框架。目前我正在使用新的 SQL DB(sequelize 不支持)并希望通过对现有方言进行原型(pro
我遇到了一个奇怪的问题,目前无法解决。 今天我无法再启动我的 grails 应用程序。应用程序代码没有改变,上周运行顺利。 这是输出: | Loading Grails 2.0.3 | Configu
我是 Hibernate 新手。在阅读 Hibernate 时,我遇到了 Dialect 属性。无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数
对于用 Python 编写 Lisp 方言/解释器,您有什么建议吗?我想从几个基本命令开始,例如 set、print 和 define 或其他命令。 最佳答案 Python 中有一个功能齐全的 Sch
是否有任何 Lisp 或 scheme 方言可以很好地支持数组和线性代数操作。我所说的良好支持并不是指 BLAS/LAPACk 的接口(interface),而是语言本身的高效数组原语。比如说,如果它
我在 PhpStorm 中总是遇到这样的问题,即我的 PDO 准备语句带有下划线,显示为“在主题类中找不到方法‘(ex.execute)’”。 是否有可能将 PDO/准备好的语句添加到 PhpStor
在我的应用程序中,我将 Hibernate 与 SQL Server 数据库一起使用,所以我设置了 在我的 persistence.xml 中。 在某些情况下,我想对包含 NULL 的记录进行排序,
我已经实现了 Hibernate's multitenant database architecture ,其中根据租户选择特定的数据库连接。我正在使用 Spring 4.3 和 Hibernate
我有以下 hibernate.cfg.xml NHibernate.Driver.OracleClientDriver User ID=user;Password=passw
在 Vim 中,需要使用\(\) 来对一些字符序列进行分组。其他特价商品也有相同的行为:\{\}。 是否可以将正则表达式样式更改为像在 perl 中一样?如何切换? 反而 \\( 我会 ( ??? 最
我正在使用 Spring 3.2.1、EclipseLink 2.4 和 JPA 2.0 当我使用非默认隔离级别时出现错误。 Exception in thread "main" org.spring
我想从 SWI-Prolog 切换到 Prova - 但似乎比预期的要难: 谓词如 succ()不可用,操作如 Var1+Var2>Var3不工作(显然它必须是 Var3
我正在尝试查询 Firebird 数据库的 SQL 方言(使用嵌入式驱动程序): procedure TFrmFireDACEmbed.BtnGetDBDialectClick(Sender: TOb
任何在 BASIC 环境下长大,后来转向另一种语言的人,都很难习惯使用“(a == b)”而不是“(a = b)”来测试相等性。 是否有一种 BASIC 方言使用“==”运算符进行比较,而不是重载“=
我的应用程序中使用了多个数据库,redshift 就是其中之一。由于使用 hibernate 框架来配置连接,我尝试使用适当的方言进行红移。但是 PostgreSQL9Dialect 和 MySQL5
您知道是否有将 Amazon SimpleDB 与 NHibernate 一起使用的方法吗? LightSpeed seems to be compatible . 最佳答案 NHibernate 更
我是一名优秀的程序员,十分优秀!