From d8aaa2afeaa8e0e3621e87ab05547b9ff7260878 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Sun, 19 Jul 2026 16:50:41 +0200 Subject: [PATCH] CAMEL-24200: camel-aws2-timestream - createScheduledQuery sets the time column correctly createScheduledQuery wrote the CamelAwsTimestreamTimeColumn header into the target TimestreamConfiguration's tableName instead of its timeColumn, so the required time column was never set and, when a table-name header was also supplied, the time-column value silently overwrote the table name. Also removes a duplicated block that set scheduledQueryExecutionRoleArn twice from the same header. Extends Timestream2QueryProducerTest to capture the CreateScheduledQuery request and assert the database name, table name and time column are all set from their own headers. Co-Authored-By: Claude Fable 5 Signed-off-by: Andrea Cosentino --- .../timestream/query/Timestream2QueryProducer.java | 7 +------ .../query/AmazonTimestreamQueryClientMock.java | 10 ++++++++++ .../timestream/query/Timestream2QueryProducerTest.java | 7 +++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducer.java b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducer.java index b5de72a625e15..6e02f395fc035 100644 --- a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducer.java +++ b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducer.java @@ -199,11 +199,6 @@ private void createScheduledQuery(TimestreamQueryClient timestreamQueryClient, E = ErrorReportConfiguration.builder().s3Configuration(s3Configuration.build()).build(); builder.errorReportConfiguration(errorReportConfiguration); } - if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Timestream2Constants.SCHEDULED_QUERY_EXECUTION_ROLE_ARN))) { - String roleArn - = exchange.getIn().getHeader(Timestream2Constants.SCHEDULED_QUERY_EXECUTION_ROLE_ARN, String.class); - builder.scheduledQueryExecutionRoleArn(roleArn); - } TargetConfiguration.Builder targetConfiguration = TargetConfiguration.builder(); TimestreamConfiguration.Builder timestreamConfigBuilder = TimestreamConfiguration.builder(); @@ -217,7 +212,7 @@ private void createScheduledQuery(TimestreamQueryClient timestreamQueryClient, E } if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Timestream2Constants.TIME_COLUMN))) { String timeColumn = exchange.getIn().getHeader(Timestream2Constants.TIME_COLUMN, String.class); - timestreamConfigBuilder.tableName(timeColumn); + timestreamConfigBuilder.timeColumn(timeColumn); } if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Timestream2Constants.MEASURE_NAME_COLUMN))) { String measureNameColumn = exchange.getIn().getHeader(Timestream2Constants.MEASURE_NAME_COLUMN, String.class); diff --git a/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/AmazonTimestreamQueryClientMock.java b/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/AmazonTimestreamQueryClientMock.java index 3cf54c21fae54..f3f39e9ebaa35 100644 --- a/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/AmazonTimestreamQueryClientMock.java +++ b/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/AmazonTimestreamQueryClientMock.java @@ -24,9 +24,18 @@ public class AmazonTimestreamQueryClientMock implements TimestreamQueryClient { + private CreateScheduledQueryRequest lastCreateScheduledQueryRequest; + public AmazonTimestreamQueryClientMock() { } + /** + * The last request passed to {@link #createScheduledQuery}, so tests can assert how it was built. + */ + public CreateScheduledQueryRequest getLastCreateScheduledQueryRequest() { + return lastCreateScheduledQueryRequest; + } + @Override public DescribeEndpointsResponse describeEndpoints(DescribeEndpointsRequest describeEndpointsRequest) { DescribeEndpointsResponse.Builder result = DescribeEndpointsResponse.builder(); @@ -47,6 +56,7 @@ public CancelQueryResponse cancelQuery(CancelQueryRequest cancelQueryRequest) { @Override public CreateScheduledQueryResponse createScheduledQuery(CreateScheduledQueryRequest createScheduledQueryRequest) { + this.lastCreateScheduledQueryRequest = createScheduledQueryRequest; CreateScheduledQueryResponse.Builder result = CreateScheduledQueryResponse.builder(); result.arn("aws-timestream:test:scheduled-query:arn"); return result.build(); diff --git a/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerTest.java b/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerTest.java index e63867c79e1c8..0bde4bd7b43a5 100644 --- a/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerTest.java +++ b/components/camel-aws/camel-aws2-timestream/src/test/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerTest.java @@ -107,6 +107,13 @@ public void process(Exchange exchange) { CreateScheduledQueryResponse resultGet = (CreateScheduledQueryResponse) exchange.getIn().getBody(); assertEquals("aws-timestream:test:scheduled-query:arn", resultGet.arn()); + + // The time-column header must land in timeColumn and must not overwrite the table name. + TimestreamConfiguration timestreamConfiguration + = clientMock.getLastCreateScheduledQueryRequest().targetConfiguration().timestreamConfiguration(); + assertEquals("TESTDB", timestreamConfiguration.databaseName()); + assertEquals("TESTTABLE", timestreamConfiguration.tableName()); + assertEquals("time", timestreamConfiguration.timeColumn()); } @Test