- 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/
我已经从 MySQL 表生成了 java 模型文件。但是现在我们正在切换到 PostgreSQL,我需要一切才能在那里工作。所以我为 PostgreSQL 配置创建了一个新的 jooq.propert
在 mysql 数据库中,我有一个字段名称 date 类型 date 该字段的值如下2019-11-05 如何在jooq中查询上面提到的日期 我试着跟随 java.util.Date date = S
我正在调查一个问题,我们看到与 jooq 相关的奇怪异常试图填充生成的 Record 类,它在其中获取数据类型错误,因为它使用 java.sql.ResultSet::getXXX(int)(基于列索
我一直在寻找一种在 jOOQ 中实现以下查询的方法,但找不到任何东西。 SELECT * FROM tableName WHERE 'this is a string' LIKE CONCAT(
我一直在寻找一种在 jOOQ 中实现以下查询的方法,但找不到任何东西。 SELECT * FROM tableName WHERE 'this is a string' LIKE CONCAT(
我有一个使用gradle-jooq-plugin-3.0.1、jooq-3.11.2 和 Spring Boot 1 的项目。当我尝试生成 JOOQ 文件时我收到以下错误消息: > Task :gen
我刚刚尝试将我的项目升级到 Java 15,现在出现以下错误: both interface org.jooq.Record in org.jooq and class java.lang.Rec
我很好奇 jOOQ 是否可以与 Quarkus 一起工作,所以我创建了一个 Gradle 项目。我收到此构建错误: Caused by: io.quarkus.creator.AppCreatorEx
来自 fetchNext(int number) 的文档 -“在获取最后一条记录后,这将方便地关闭游标。” 假设number=100,一共有1000条记录。它会在获取第 100 条记录后关闭游标,还是
在我们的项目中,概念是在配置文件中定义的。举个例子: ... ... 虽然这与 SQL 没有太大关系,但这个配置文件恰好可以映射到 S
我在我的 java gradle 项目中找到一个有效的 JOOQ 插件或其配置为最新的 JOOQ 库时遇到问题。 我找到了以下插件: https://github.com/jOOQ/jOOQ/tree
我得到了一个使用 gradle (v2.1.0) 和 jooq (v3.8.1) 生成类文件的 Ratpack 应用程序。 这是我的 build.gradle 文件: buildscript {
我有一个界面 public interface HistoryDao, H extends UpdatableRecord> extends TableDao{ default void sa
我正在使用 jOOQ 生成针对 Athena(又名 PrestoDB/Trino)运行的查询 为此,我使用了 SQLDialects.DEFAULT,它之所以有效,是因为我使用了非常基本的查询功能。
如何在jooq的查询中绑定(bind)一个数组作为参数? 这是我添加名为“someIds”的命名参数的地方 Query query = selectJoinStep.where(field("
我有一个多模块 maven 项目,我正在实现一个 ant 任务以直接从 jpa 生成 jooq 类 实体。 这些是我引用的教程: Code generation with Ant Code gener
我想在 JOOQ 中实现一个基本的 time_bucket 语句。 如果我在控制台中运行此语句,它运行得非常好: SELECT time_bucket('5 minutes', time) as t,
我关于在 jooq dsl 中编写查询的问题。 我在 Oracle 数据库中存储了一些客户端属性列表。 表结构如下: CLIENT_ATTRIBUTE_DICT (ID、CODE、DEFAULT_VA
我很惊讶地发现 JOOQ(从 3.16 开始)将时间戳绑定(bind)到 LocalDateTime。在我看来,时间戳最自然地映射到一个 Instant,它是一个 Unix 纪元时间戳。 那么我们怎样
你好,我正在方法中执行此操作 public void update(Table table, String tableName){ ArrayList firstRowInDslFormat
我是一名优秀的程序员,十分优秀!