From 4ebb5fd11261d5e74677a52fcc20fc995adb2204 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 15 Jan 2024 22:30:17 +1300 Subject: [PATCH] #3296 Add copy() method to query beans --- .../java/org/querytest/QCustomerTest.java | 19 +++++++++++++++++++ .../generator/KotlinLangAdapter.java | 7 +++++++ .../generator/SimpleQueryBeanWriter.java | 6 ++++++ 3 files changed, 32 insertions(+) diff --git a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java index d2a8bedff..1b80360bb 100644 --- a/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java +++ b/ebean-querybean/src/test/java/org/querytest/QCustomerTest.java @@ -63,6 +63,25 @@ public class QCustomerTest { } + @Test + public void copy() { + var origin = new QCustomer() + .setDistinct(true) + .status.equalTo(Customer.Status.BAD); + + var copy1 = origin.copy().name.isNotNull(); + var q1 = copy1.query(); + copy1.findList(); + + assertThat(q1.getGeneratedSql()).contains("from be_customer t0 where t0.status = ? and t0.name is not null"); + + var copy2 = origin.copy().version.ge(1L); + var q2 = copy2.query(); + copy2.findList(); + + assertThat(q2.getGeneratedSql()).contains("from be_customer t0 where t0.status = ? and t0.version >= ?"); + } + @Test public void findSingleAttribute() { diff --git a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/KotlinLangAdapter.java b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/KotlinLangAdapter.java index f0c6f1573..d92383e97 100644 --- a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/KotlinLangAdapter.java +++ b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/KotlinLangAdapter.java @@ -94,6 +94,13 @@ class KotlinLangAdapter implements LangAdapter { writer.append(" * Private constructor for FetchGroup building.").eol(); writer.append(" */").eol(); writer.append(" private constructor(fetchGroupQuery: Query<%s>) : super(fetchGroupQuery)", shortName).eol(); + + writer.eol(); + writer.append(" /** Return a copy of the query. */").eol(); + writer.append(" fun copy() : Q%s {", shortName).eol(); + writer.append(" return Q%s(query().copy())", shortName).eol(); + writer.append(" }").eol(); + writer.eol(); } @Override diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java index dbfe47c82..0cb6be142 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java @@ -194,6 +194,12 @@ class SimpleQueryBeanWriter { writer.append(" private Q%s(io.ebean.ExpressionList<%s> filter) {", shortName, shortName).eol(); writer.append(" super(filter);").eol(); writer.append(" }").eol(); + + writer.eol(); + writer.append(" /** Return a copy of the query bean. */").eol(); + writer.append(" public Q%s copy() {", shortName).eol(); + writer.append(" return new Q%s(query().copy());", shortName).eol(); + writer.append(" }").eol(); } /**