From 3580a182b7d2a3a2898e72048b8b24c64cbd421c Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:40:21 +0200 Subject: [PATCH 1/6] Update dependencies --- .gitattributes | 1 + .github/workflows/broken_links_checker.yml | 11 +- .github/workflows/ci-build.yml | 145 ++++++++++++--- .github/workflows/dependencies_check.yml | 17 +- .github/workflows/dependencies_update.yml | 21 ++- .github/workflows/release.yml | 26 +-- .github/zizmor.yml | 33 ++++ .settings/org.eclipse.jdt.core.prefs | 21 ++- .settings/org.eclipse.jdt.ui.prefs | 2 +- dependencies.md | 124 +++++++------ doc/changes/changelog.md | 1 + doc/changes/changes_4.6.2.md | 36 ++++ pk_generated_parent.pom | 206 +++++++++++++-------- pom.xml | 12 +- 14 files changed, 455 insertions(+), 201 deletions(-) create mode 100644 .github/zizmor.yml create mode 100644 doc/changes/changes_4.6.2.md diff --git a/.gitattributes b/.gitattributes index b8c39d9a..3b1d97c6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,5 +7,6 @@ doc/changes/changelog.md linguist-genera .github/workflows/dependencies_check.yml linguist-generated=true .github/workflows/dependencies_update.yml linguist-generated=true .github/workflows/release.yml linguist-generated=true +.github/zizmor.yml linguist-generated=true .settings/org.eclipse.jdt.core.prefs linguist-generated=true .settings/org.eclipse.jdt.ui.prefs linguist-generated=true diff --git a/.github/workflows/broken_links_checker.yml b/.github/workflows/broken_links_checker.yml index ee8df765..55d839d3 100644 --- a/.github/workflows/broken_links_checker.yml +++ b/.github/workflows/broken_links_checker.yml @@ -21,10 +21,11 @@ jobs: cancel-in-progress: true } steps: - - { - id: checkout, - uses: actions/checkout@v5 - } + - id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } - id: configure-broken-links-checker name: Configure broken links checker run: | @@ -36,7 +37,7 @@ jobs: '{"pattern": "^https?://projects.eclipse.org"}' \ ']}' > ./target/broken_links_checker.json - id: run-broken-links-checker - uses: tcort/github-action-markdown-link-check@v1 + uses: tcort/github-action-markdown-link-check@e7c7a18363c842693fadde5d41a3bd3573a7a225 with: { use-quiet-mode: yes, use-verbose-mode: yes, diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index aa273bf5..894dd654 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -43,9 +43,10 @@ jobs: sudo rm -rf /usr/share/dotnet - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDKs id: setup-java @@ -54,14 +55,11 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - server-id: ossindex - server-username: OSSINDEX_USERNAME - server-password: OSSINDEX_API_TOKEN - name: Cache SonarCloud packages id: cache-sonar - uses: actions/cache@v4 + uses: actions/cache@v6 with: { path: ~/.sonar/cache, key: '${{ runner.os }}-sonar', @@ -76,17 +74,15 @@ jobs: id: build-pk-verify run: | mvn --batch-mode clean verify \ + -DossindexSkip=true \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ -DtrimStackTrace=false - env: { - OSSINDEX_USERNAME: '${{ secrets.OSSINDEX_USERNAME }}', - OSSINDEX_API_TOKEN: '${{ secrets.OSSINDEX_API_TOKEN }}' - } - name: Sonar analysis id: sonar-analysis if: ${{ env.SONAR_TOKEN != null }} run: | mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ + -DossindexSkip=true \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ -DtrimStackTrace=false \ -Dsonar.token=$SONAR_TOKEN @@ -96,13 +92,41 @@ jobs: } - name: Verify Release Artifacts id: verify-release-artifacts - run: "print_message() {\n local -r message=$1\n echo \"$message\"\n echo \"$message\" >> \"$GITHUB_STEP_SUMMARY\"\n}\n\nprint_message \"### Release Artifacts\"\n\nIFS=$'\\n' artifacts_array=($ARTIFACTS)\nmissing_files=()\nfor file in \"${artifacts_array[@]}\";\ndo \n echo \"Checking if file $file exists...\"\n if ! [[ -f \"$file\" ]]; then\n print_message \"* ⚠️ \\`$file\\` does not exist ⚠️\"\n echo \"Content of directory $(dirname \"$file\"):\"\n ls \"$(dirname \"$file\")\"\n missing_files+=(\"$file\")\n else\n print_message \"* \\`$file\\` ✅\" \n fi\ndone\nprint_message \"\"\nnumber_of_missing_files=${#missing_files[@]}\nif [[ $number_of_missing_files -gt 0 ]]; then\n print_message \"⚠️ $number_of_missing_files release artifact(s) missing ⚠️\"\n exit 1\nfi\n" + run: | + print_message() { + local -r message=$1 + echo "$message" + echo "$message" >> "$GITHUB_STEP_SUMMARY" + } + + print_message "### Release Artifacts" + + IFS=$'\n' artifacts_array=($ARTIFACTS) + missing_files=() + for file in "${artifacts_array[@]}"; + do + echo "Checking if file $file exists..." + if ! [[ -f "$file" ]]; then + print_message "* ⚠️ \`$file\` does not exist ⚠️" + echo "Content of directory $(dirname "$file"):" + ls "$(dirname "$file")" + missing_files+=("$file") + else + print_message "* \`$file\` ✅" + fi + done + print_message "" + number_of_missing_files=${#missing_files[@]} + if [[ $number_of_missing_files -gt 0 ]]; then + print_message "⚠️ $number_of_missing_files release artifact(s) missing ⚠️" + exit 1 + fi env: { ARTIFACTS: '${{ steps.build-pk-verify.outputs.release-artifacts }}' } - name: Upload artifacts id: upload-artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: { name: artifacts, path: '${{ steps.build-pk-verify.outputs.release-artifacts }}', @@ -118,7 +142,7 @@ jobs: '{"pattern": "^https?://(www.)?eclipse.org"}' \ '{"pattern": "^https?://projects.eclipse.org"}' \ ']}' > ./target/broken_links_checker.json - - uses: tcort/github-action-markdown-link-check@v1 + - uses: tcort/github-action-markdown-link-check@e7c7a18363c842693fadde5d41a3bd3573a7a225 id: run-link-check with: { use-quiet-mode: yes, @@ -141,9 +165,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDK 17 id: setup-java @@ -151,22 +176,91 @@ jobs: with: { distribution: temurin, java-version: '17', - cache: maven, - server-id: ossindex, - server-username: OSSINDEX_USERNAME, - server-password: OSSINDEX_API_TOKEN + cache: maven } - name: Run tests and build with Maven 17 id: build-next-java - run: mvn --batch-mode clean package -DtrimStackTrace=false -Djava.version=17 + run: | + mvn --batch-mode clean package -DtrimStackTrace=false -Djava.version=17 \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ + -DossindexSkip=true \ + ossindex: + runs-on: ubuntu-latest + defaults: + run: { + shell: bash + } + permissions: { + contents: read + } + concurrency: { + group: '${{ github.workflow }}-ossindex-${{ github.ref }}', + cancel-in-progress: true + } + steps: + - name: Checkout the repository + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } + - name: Set up JDKs + id: setup-java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: |- + 11 + 21 + cache: maven + server-id: ossindex + server-username: OSSINDEX_USERNAME + server-password: OSSINDEX_API_TOKEN + - name: Run Ossindex + id: ossindex + run: | + mvn --batch-mode test-compile \ + org.sonatype.ossindex.maven:ossindex-maven-plugin:audit \ + org.sonatype.ossindex.maven:ossindex-maven-plugin:audit-aggregate \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn env: { OSSINDEX_USERNAME: '${{ secrets.OSSINDEX_USERNAME }}', OSSINDEX_API_TOKEN: '${{ secrets.OSSINDEX_API_TOKEN }}' } + lint-github-actions: + runs-on: ubuntu-latest + defaults: + run: { + shell: bash + } + permissions: { + security-events: write, + contents: read, + actions: read + } + concurrency: { + group: '${{ github.workflow }}-github-actions-linter-${{ github.ref }}', + cancel-in-progress: true + } + steps: + - name: Checkout the repository + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } + - name: Lint GitHub actions with Zizmore + id: lint-github-actions + uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa + with: { + advanced-security: false + } build: needs: [ build-and-test, - next-java-compatibility + next-java-compatibility, + ossindex, + lint-github-actions ] runs-on: ubuntu-latest defaults: @@ -183,9 +277,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDKs id: setup-java @@ -194,7 +289,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Check if release is needed id: check-release diff --git a/.github/workflows/dependencies_check.yml b/.github/workflows/dependencies_check.yml index b0877fcc..fa5164f1 100644 --- a/.github/workflows/dependencies_check.yml +++ b/.github/workflows/dependencies_check.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: null schedule: - { - cron: 0 2 * * * + cron: 42 22 * * 0 } jobs: report_security_issues: @@ -25,11 +25,12 @@ jobs: cancel-in-progress: true } steps: - - { - name: Checkout, - id: checkout, - uses: actions/checkout@v5 - } + - name: Checkout + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } - name: Set up JDKs id: setup-jdks uses: actions/setup-java@v5 @@ -37,7 +38,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven server-id: ossindex server-username: OSSINDEX_USERNAME @@ -55,7 +56,7 @@ jobs: } - name: Create GitHub Issues id: create-security-issues - uses: exasol/python-toolbox/.github/actions/security-issues@1.9.0 + uses: exasol/python-toolbox/.github/actions/security-issues@10.1.0 with: { format: maven, command: cat ossindex-report.json, diff --git a/.github/workflows/dependencies_update.yml b/.github/workflows/dependencies_update.yml index 2ba27856..1986eae4 100644 --- a/.github/workflows/dependencies_update.yml +++ b/.github/workflows/dependencies_update.yml @@ -34,10 +34,11 @@ jobs: cancel-in-progress: false } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 id: checkout with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: true } - name: Set up JDKs id: setup-jdks @@ -46,7 +47,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Print issues id: debug-print-issues @@ -58,10 +59,14 @@ jobs: - name: Fail if not running on a branch id: check-branch if: ${{ !startsWith(github.ref, 'refs/heads/') }} - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | - core.setFailed('Not running on a branch, github.ref is ${{ github.ref }}. Please start this workflow only on main or a branch') + const ref = process.env.GITHUB_REF + core.setFailed(`Not running on a branch, github.ref is '${ref}'. Please start this workflow only on main or a branch`) + env: { + GITHUB_REF: '${{ github.ref }}' + } - name: Update dependencies id: update-dependencies run: | @@ -119,7 +124,7 @@ jobs: id: create-branch if: ${{ github.ref == 'refs/heads/main' }} run: | - branch_name="dependency-update/$(date "+%Y%m%d%H%M%S")" + branch_name="dependency-update/$(date "+%Y-%m-%d_%H-%M-%S")" echo "Creating branch $branch_name" git checkout -b "$branch_name" - name: Commit changes & push @@ -159,7 +164,7 @@ jobs: - name: Report failure Status to Slack channel id: report-failure-slack if: ${{ always() }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ secrets.GITHUB_TOKEN }}', @@ -173,7 +178,7 @@ jobs: - name: Report new Pull Request to Slack channel id: report-pr-slack if: ${{ steps.create-pr.outputs.pr_url }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ secrets.GITHUB_TOKEN }}', diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dbc1ea24..515d750a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -75,9 +75,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: true } - name: Set up Maven Central Repository id: configure-maven-central-credentials @@ -87,8 +88,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 - cache: maven + 21 server-id: maven-central-portal server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD @@ -102,15 +102,19 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Fail if not running on main or release branch id: check-main-or-release-branch if: ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }} - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | - core.setFailed('Not running on main or release branch, github.ref is ${{ github.ref }}. Please start this workflow only on main or a branch starting with release/') + const ref = process.env.GITHUB_REF + core.setFailed(`Not running on main or release branch, github.ref is '${ref}'. Please start this workflow only on main or a branch starting with release/`) + env: { + GITHUB_REF: '${{ github.ref }}' + } - name: Check CI build of this commit succeeded id: check-ci-build-status if: ${{ ! inputs.started-from-ci }} @@ -142,7 +146,7 @@ jobs: - { name: Build project, id: build, - run: mvn --batch-mode -DskipTests -Dossindex.skip=true clean verify + run: mvn --batch-mode -DskipTests -DossindexSkip=true clean verify } - { name: List secret GPG keys, @@ -155,7 +159,7 @@ jobs: if: ${{ true && (! inputs.skip-maven-central) }} run: | echo "#### Maven Central Release" >> "$GITHUB_STEP_SUMMARY" - mvn --batch-mode -Dgpg.skip=false -DskipTests -Dossindex.skip=true deploy \ + mvn --batch-mode -Dgpg.skip=false -DskipTests -DossindexSkip=true deploy \ -Dcentral-publishing.deploymentName="Auto release of repo ${{ github.repository }} using PK release.yml" \ -Dcentral-publishing.autoPublish=${{ inputs.maven-central-auto-publish }} if [[ "${{ inputs.maven-central-auto-publish }}" == "true" ]]; then @@ -236,7 +240,7 @@ jobs: - name: Report failure Status to Slack channel id: report-failure-status-slack if: ${{ always() }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ github.token }}', @@ -250,7 +254,7 @@ jobs: - name: Report new release to Slack channel id: report-new-release-slack if: ${{ steps.create-github-release.outputs.release-url }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ github.token }}', diff --git a/.github/zizmor.yml b/.github/zizmor.yml new file mode 100644 index 00000000..a8508a1b --- /dev/null +++ b/.github/zizmor.yml @@ -0,0 +1,33 @@ +# Generated by Project Keeper +# https://github.com/exasol/project-keeper/blob/main/project-keeper/src/main/resources/templates/.github/zizmor.yml +# See https://docs.zizmor.sh/configuration/#settings +rules: + unpinned-uses: + config: + policies: + "actions/*": ref-pin + "exasol/python-toolbox/.github/actions/security-issues": ref-pin + "*": hash-pin + cache-poisoning: + ignore: + # Enabling caching is OK for non-release workflows + - ci-build.yml + - ci-build-native-build.yml + - ci-build-db-version-matrix.yml + - project-keeper-verify.yml + - test_on_windows.yml + - test_linux_build_on_windows.yml + obfuscation: + ignore: + # Generated workflows use boolean conditions like ${{ false }} + # Note: We cannot exclude this using inline comments because GitHubWorkflowIO does not preserve comments in the workflow YAML files. + - ci-build.yml + - release.yml + - project-keeper-verify.yml + secrets-inherit: + ignore: + # Required for passing slack webhooks + - ci-build.yml + - ci-build-db-version-matrix.yml + - dependencies_check.yml + - release.yml diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 7644ed3a..f5f6a72f 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -122,8 +122,10 @@ org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false org.eclipse.jdt.core.formatter.align_with_spaces=false @@ -151,6 +153,8 @@ org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 @@ -159,6 +163,7 @@ org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_record_components=16 org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 @@ -169,6 +174,7 @@ org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0 @@ -194,6 +200,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line @@ -213,6 +220,7 @@ org.eclipse.jdt.core.formatter.comment.format_header=false org.eclipse.jdt.core.formatter.comment.format_html=true org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_markdown_comments=true org.eclipse.jdt.core.formatter.comment.format_source_code=true org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false org.eclipse.jdt.core.formatter.comment.indent_root_tags=false @@ -220,7 +228,8 @@ org.eclipse.jdt.core.formatter.comment.indent_tag_description=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false +org.eclipse.jdt.core.formatter.comment.line_length=160 org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false @@ -292,6 +301,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arg org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert @@ -383,6 +393,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_ar org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert @@ -446,7 +457,8 @@ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_line_comments=false +org.eclipse.jdt.core.formatter.join_lines_in_comments=false org.eclipse.jdt.core.formatter.join_wrapped_lines=false org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never @@ -466,9 +478,11 @@ org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.lineSplit=160 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 @@ -506,5 +520,6 @@ org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index 54d02acc..14b7a65d 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -61,7 +61,7 @@ cleanup_settings_version=2 eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true formatter_profile=_Exasol -formatter_settings_version=21 +formatter_settings_version=23 org.eclipse.jdt.ui.ignorelowercasenames=true org.eclipse.jdt.ui.importorder=java;javax;org;com; org.eclipse.jdt.ui.ondemandthreshold=3 diff --git a/dependencies.md b/dependencies.md index f2ed4025..fc276d73 100644 --- a/dependencies.md +++ b/dependencies.md @@ -12,33 +12,34 @@ ## Plugin Dependencies -| Dependency | License | -| ------------------------------------------------------- | ------------------------------------------- | -| [Apache Maven Clean Plugin][8] | [Apache-2.0][7] | -| [Apache Maven Install Plugin][9] | [Apache-2.0][7] | -| [Apache Maven Resources Plugin][10] | [Apache-2.0][7] | -| [Apache Maven Site Plugin][11] | [Apache-2.0][7] | -| [SonarQube Scanner for Maven][12] | [GNU LGPL 3][13] | -| [Apache Maven Toolchains Plugin][14] | [Apache-2.0][7] | -| [Apache Maven Compiler Plugin][15] | [Apache-2.0][7] | -| [Apache Maven Enforcer Plugin][16] | [Apache-2.0][7] | -| [Maven Flatten Plugin][17] | [Apache Software License][7] | -| [org.sonatype.ossindex.maven:ossindex-maven-plugin][18] | [ASL2][19] | -| [Maven Surefire Plugin][20] | [Apache-2.0][7] | -| [Versions Maven Plugin][21] | [Apache License, Version 2.0][7] | -| [duplicate-finder-maven-plugin Maven Mojo][22] | [Apache License 2.0][23] | -| [Apache Maven Artifact Plugin][24] | [Apache-2.0][7] | -| [Apache Maven Deploy Plugin][25] | [Apache-2.0][7] | -| [Apache Maven GPG Plugin][26] | [Apache-2.0][7] | -| [Apache Maven Source Plugin][27] | [Apache License, Version 2.0][7] | -| [Apache Maven Javadoc Plugin][28] | [Apache-2.0][7] | -| [Central Publishing Maven Plugin][29] | [The Apache License, Version 2.0][7] | -| [JaCoCo :: Maven Plugin][30] | [EPL-2.0][31] | -| [Quality Summarizer Maven Plugin][32] | [MIT License][33] | -| [error-code-crawler-maven-plugin][34] | [MIT License][35] | -| [Git Commit Id Maven Plugin][36] | [GNU Lesser General Public License 3.0][37] | -| [OpenFastTrace Maven Plugin][38] | [GNU General Public License v3.0][39] | -| [Project Keeper Maven plugin][40] | [The MIT License][41] | +| Dependency | License | +| ------------------------------------------------------- | ---------------------------------------------- | +| [SonarQube Scanner for Maven][8] | [GNU LGPL 3][9] | +| [Apache Maven Toolchains Plugin][10] | [Apache-2.0][7] | +| [Apache Maven Compiler Plugin][11] | [Apache-2.0][7] | +| [Apache Maven Enforcer Plugin][12] | [Apache-2.0][7] | +| [Maven Flatten Plugin][13] | [Apache Software License][7] | +| [org.sonatype.ossindex.maven:ossindex-maven-plugin][14] | [ASL2][15] | +| [Maven Surefire Plugin][16] | [Apache-2.0][7] | +| [Versions Maven Plugin][17] | [Apache License, Version 2.0][7] | +| [duplicate-finder-maven-plugin Maven Mojo][18] | [Apache License 2.0][19] | +| [Apache Maven Artifact Plugin][20] | [Apache-2.0][7] | +| [Apache Maven Deploy Plugin][21] | [Apache-2.0][7] | +| [Apache Maven Source Plugin][22] | [Apache-2.0][7] | +| [Apache Maven Javadoc Plugin][23] | [Apache-2.0][7] | +| [spdx-maven-plugin Maven Plugin][24] | [The Apache Software License, Version 2.0][15] | +| [Build Helper Maven Plugin][25] | [The MIT License][26] | +| [Apache Maven GPG Plugin][27] | [Apache-2.0][7] | +| [Central Publishing Maven Plugin][28] | [The Apache License, Version 2.0][7] | +| [JaCoCo :: Maven Plugin][29] | [EPL-2.0][30] | +| [error-code-crawler-maven-plugin][31] | [MIT License][32] | +| [Git Commit Id Maven Plugin][33] | [GNU Lesser General Public License 3.0][34] | +| [OpenFastTrace Maven Plugin][35] | [GNU General Public License v3.0][36] | +| [Project Keeper Maven plugin][37] | [The MIT License][38] | +| [Apache Maven Clean Plugin][39] | [Apache-2.0][7] | +| [Apache Maven Resources Plugin][40] | [Apache-2.0][7] | +| [Apache Maven Install Plugin][41] | [Apache-2.0][7] | +| [Apache Maven Site Plugin][42] | [Apache-2.0][7] | [0]: https://junit.org/ [1]: https://www.eclipse.org/legal/epl-v20.html @@ -48,37 +49,38 @@ [5]: https://opensource.org/licenses/MIT [6]: https://www.jqno.nl/equalsverifier [7]: https://www.apache.org/licenses/LICENSE-2.0.txt -[8]: https://maven.apache.org/plugins/maven-clean-plugin/ -[9]: https://maven.apache.org/plugins/maven-install-plugin/ -[10]: https://maven.apache.org/plugins/maven-resources-plugin/ -[11]: https://maven.apache.org/plugins/maven-site-plugin/ -[12]: http://docs.sonarqube.org/display/PLUG/Plugin+Library/sonar-scanner-maven/sonar-maven-plugin -[13]: http://www.gnu.org/licenses/lgpl.txt -[14]: https://maven.apache.org/plugins/maven-toolchains-plugin/ -[15]: https://maven.apache.org/plugins/maven-compiler-plugin/ -[16]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ -[17]: https://www.mojohaus.org/flatten-maven-plugin/ -[18]: https://sonatype.github.io/ossindex-maven/maven-plugin/ -[19]: http://www.apache.org/licenses/LICENSE-2.0.txt -[20]: https://maven.apache.org/surefire/maven-surefire-plugin/ -[21]: https://www.mojohaus.org/versions/versions-maven-plugin/ -[22]: https://basepom.github.io/duplicate-finder-maven-plugin -[23]: http://www.apache.org/licenses/LICENSE-2.0.html -[24]: https://maven.apache.org/plugins/maven-artifact-plugin/ -[25]: https://maven.apache.org/plugins/maven-deploy-plugin/ -[26]: https://maven.apache.org/plugins/maven-gpg-plugin/ -[27]: https://maven.apache.org/plugins/maven-source-plugin/ -[28]: https://maven.apache.org/plugins/maven-javadoc-plugin/ -[29]: https://central.sonatype.org -[30]: https://www.jacoco.org/jacoco/trunk/doc/maven.html -[31]: https://www.eclipse.org/legal/epl-2.0/ -[32]: https://github.com/exasol/quality-summarizer-maven-plugin/ -[33]: https://github.com/exasol/quality-summarizer-maven-plugin/blob/main/LICENSE -[34]: https://github.com/exasol/error-code-crawler-maven-plugin/ -[35]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE -[36]: https://github.com/git-commit-id/git-commit-id-maven-plugin -[37]: http://www.gnu.org/licenses/lgpl-3.0.txt -[38]: https://github.com/itsallcode/openfasttrace-maven-plugin -[39]: https://www.gnu.org/licenses/gpl-3.0.html -[40]: https://github.com/exasol/project-keeper/ -[41]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[8]: https://docs.sonarsource.com/sonarqube-server/latest/extension-guide/developing-a-plugin/plugin-basics/sonar-scanner-maven/sonar-maven-plugin/ +[9]: http://www.gnu.org/licenses/lgpl.txt +[10]: https://maven.apache.org/plugins/maven-toolchains-plugin/ +[11]: https://maven.apache.org/plugins/maven-compiler-plugin/ +[12]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ +[13]: https://www.mojohaus.org/flatten-maven-plugin/ +[14]: https://sonatype.github.io/ossindex-maven/maven-plugin/ +[15]: http://www.apache.org/licenses/LICENSE-2.0.txt +[16]: https://maven.apache.org/surefire/maven-surefire-plugin/ +[17]: https://www.mojohaus.org/versions/versions-maven-plugin/ +[18]: https://basepom.github.io/duplicate-finder-maven-plugin +[19]: http://www.apache.org/licenses/LICENSE-2.0.html +[20]: https://maven.apache.org/plugins/maven-artifact-plugin/ +[21]: https://maven.apache.org/plugins/maven-deploy-plugin/ +[22]: https://maven.apache.org/plugins/maven-source-plugin/ +[23]: https://maven.apache.org/plugins/maven-javadoc-plugin/ +[24]: https://github.com/spdx/spdx-maven-plugin +[25]: https://www.mojohaus.org/build-helper-maven-plugin/ +[26]: https://spdx.org/licenses/MIT.txt +[27]: https://maven.apache.org/plugins/maven-gpg-plugin/ +[28]: https://central.sonatype.org +[29]: https://www.jacoco.org/jacoco/trunk/doc/maven.html +[30]: https://www.eclipse.org/legal/epl-2.0/ +[31]: https://github.com/exasol/error-code-crawler-maven-plugin/ +[32]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE +[33]: https://github.com/git-commit-id/git-commit-id-maven-plugin +[34]: http://www.gnu.org/licenses/lgpl-3.0.txt +[35]: https://github.com/itsallcode/openfasttrace-maven-plugin +[36]: https://www.gnu.org/licenses/gpl-3.0.html +[37]: https://github.com/exasol/project-keeper/ +[38]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[39]: https://maven.apache.org/plugins/maven-clean-plugin/ +[40]: https://maven.apache.org/plugins/maven-resources-plugin/ +[41]: https://maven.apache.org/plugins/maven-install-plugin/ +[42]: https://maven.apache.org/plugins/maven-site-plugin/ diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index a3ab54ae..f84559d6 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [4.6.2](changes_4.6.2.md) * [4.6.1](changes_4.6.1.md) * [4.6.0](changes_4.6.0.md) * [4.5.3](changes_4.5.3.md) diff --git a/doc/changes/changes_4.6.2.md b/doc/changes/changes_4.6.2.md new file mode 100644 index 00000000..35b16d16 --- /dev/null +++ b/doc/changes/changes_4.6.2.md @@ -0,0 +1,36 @@ +# Exasol SQL Statement Builder 4.6.2, released 2026-??-?? + +Code name: + +## Summary + +## Features + +* ISSUE_NUMBER: description + +## Dependency Updates + +### Test Dependency Updates + +* Updated `org.junit.jupiter:junit-jupiter-params:5.13.4` to `5.14.4` +* Updated `org.mockito:mockito-junit-jupiter:5.20.0` to `5.23.0` + +### Plugin Dependency Updates + +* Updated `com.exasol:error-code-crawler-maven-plugin:2.0.5` to `2.1.0` +* Updated `com.exasol:project-keeper-maven-plugin:5.4.3` to `5.7.4` +* Removed `com.exasol:quality-summarizer-maven-plugin:0.2.1` +* Updated `io.github.git-commit-id:git-commit-id-maven-plugin:9.0.2` to `10.0.0` +* Updated `org.apache.maven.plugins:maven-compiler-plugin:3.14.1` to `3.15.0` +* Updated `org.apache.maven.plugins:maven-enforcer-plugin:3.6.2` to `3.6.3` +* Updated `org.apache.maven.plugins:maven-resources-plugin:3.3.1` to `3.5.0` +* Updated `org.apache.maven.plugins:maven-site-plugin:3.21.0` to `3.22.0` +* Updated `org.apache.maven.plugins:maven-source-plugin:3.2.1` to `3.4.0` +* Updated `org.apache.maven.plugins:maven-surefire-plugin:3.5.4` to `3.5.6` +* Added `org.codehaus.mojo:build-helper-maven-plugin:3.6.1` +* Updated `org.codehaus.mojo:versions-maven-plugin:2.19.1` to `2.21.0` +* Updated `org.itsallcode:openfasttrace-maven-plugin:2.3.0` to `2.3.1` +* Updated `org.jacoco:jacoco-maven-plugin:0.8.14` to `0.8.15` +* Updated `org.sonarsource.scanner.maven:sonar-maven-plugin:5.2.0.4988` to `5.7.0.6970` +* Updated `org.sonatype.central:central-publishing-maven-plugin:0.9.0` to `0.11.0` +* Added `org.spdx:spdx-maven-plugin:1.0.4` diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index d0b3a0aa..95ad7f36 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol sql-statement-builder-generated-parent - 4.6.1 + 4.6.2 pom UTF-8 @@ -13,6 +13,7 @@ exasol https://sonarcloud.io + false true false false @@ -41,31 +42,45 @@ + + + + org.apache.maven.plugins + maven-clean-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-install-plugin + 3.1.4 + + + org.apache.maven.plugins + maven-resources-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-site-plugin + 3.22.0 + + + org.codehaus.mojo + exec-maven-plugin + 3.6.3 + + + true + + + + + - - org.apache.maven.plugins - maven-clean-plugin - 3.5.0 - - - org.apache.maven.plugins - maven-install-plugin - 3.1.4 - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.1 - - - org.apache.maven.plugins - maven-site-plugin - 3.21.0 - org.sonarsource.scanner.maven sonar-maven-plugin - 5.2.0.4988 + 5.7.0.6970 org.apache.maven.plugins @@ -89,10 +104,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 - ${java.version} - ${java.version} + ${java.version} true -Xlint:all @@ -103,7 +117,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.6.2 + 3.6.3 enforce-maven @@ -154,6 +168,8 @@ 3.2.0 ossindex + + ${ossindexSkip} @@ -168,18 +184,23 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + 3.5.6 - - -Djava.util.logging.config.file=src/test/resources/logging.properties ${argLine} + ${argLine} + + true + + + + src/test/resources/logging.properties + ${test.excludeTags} org.codehaus.mojo versions-maven-plugin - 2.19.1 + 2.21.0 display-updates @@ -253,33 +274,10 @@ true - - org.apache.maven.plugins - maven-gpg-plugin - 3.2.8 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - org.apache.maven.plugins maven-source-plugin - - 3.2.1 + 3.4.0 attach-sources @@ -303,18 +301,93 @@ UTF-8 + en true true true true - ${java.version} + ${java.version} + true + + + + + org.spdx + spdx-maven-plugin + 1.0.4 + + + build-spdx + package + + createSPDX + + + + + build + + true + true + true + true + false + false + Copyright (c) Exasol + false + JSON-LD + ${project.build.directory}/site/${project.groupId}.${project.artifactId}-${project.version}.spdx3.json + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + attach-spdx-sbom + package + + attach-artifact + + + + + ${project.build.directory}/site/${project.groupId}.${project.artifactId}-${project.version}.spdx3.json + spdx + sbom + + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.8 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + org.sonatype.central central-publishing-maven-plugin - 0.9.0 + 0.11.0 true maven-central-portal @@ -328,7 +401,7 @@ org.jacoco jacoco-maven-plugin - 0.8.14 + 0.8.15 prepare-agent @@ -366,23 +439,10 @@ - - com.exasol - quality-summarizer-maven-plugin - 0.2.1 - - - summarize-metrics - - summarize - - - - com.exasol error-code-crawler-maven-plugin - 2.0.5 + 2.1.0 verify @@ -395,7 +455,7 @@ io.github.git-commit-id git-commit-id-maven-plugin - 9.0.2 + 10.0.0 get-the-git-infos diff --git a/pom.xml b/pom.xml index af660035..3838d14e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.exasol sql-statement-builder - 4.6.1 + 4.6.2 Exasol SQL Statement Builder This module provides a Builder for SQL statements that helps to create the correct structure and validates variable parts of the statements. @@ -14,7 +14,7 @@ org.junit.jupiter junit-jupiter-params - 5.13.4 + 5.14.4 test @@ -26,7 +26,7 @@ org.mockito mockito-junit-jupiter - 5.20.0 + 5.23.0 test @@ -42,7 +42,7 @@ org.itsallcode openfasttrace-maven-plugin - 2.3.0 + 2.3.1 trace-requirements @@ -55,7 +55,7 @@ com.exasol project-keeper-maven-plugin - 5.4.3 + 5.7.4 @@ -69,7 +69,7 @@ sql-statement-builder-generated-parent com.exasol - 4.6.1 + 4.6.2 pk_generated_parent.pom From b86c9adfdb696826474244fab49630f0d4318996 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:40:43 +0200 Subject: [PATCH 2/6] Update javadoc deployment --- .github/workflows/deploy_javadocs.yml | 42 +++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy_javadocs.yml b/.github/workflows/deploy_javadocs.yml index fa9125fa..c42b549d 100644 --- a/.github/workflows/deploy_javadocs.yml +++ b/.github/workflows/deploy_javadocs.yml @@ -4,17 +4,47 @@ on: push: branches: - main + pull_request: + workflow_dispatch: jobs: build: runs-on: ubuntu-latest + permissions: + contents: read steps: - - name: Checkout ️the repository - uses: actions/checkout@v3 + - name: Checkout the repository + uses: actions/checkout@v7 + with: + persist-credentials: false + - name: Set up JDK + id: setup-java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: |- + 11 + 17 + cache: maven - name: Build Javadocs run: mvn javadoc:javadoc - - name: Deploy - uses: JamesIves/github-pages-deploy-action@v4.4.1 + - name: Upload artifact + uses: actions/upload-pages-artifact@v5 with: - branch: gh-pages - folder: target/site/apidocs/ \ No newline at end of file + path: ./target/site/apidocs/ + + deploy: + if: ${{ github.ref == 'refs/heads/main' }} + permissions: + contents: read + id-token: write + pages: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-slim + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 From d89c4e51ea686ec36e7014966af20f018e8eaa8d Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:43:38 +0200 Subject: [PATCH 3/6] #187: Mark no-args constructor of class `com.exasol.datatype.type.Timestamp` as deprecated --- doc/changes/changes_4.6.2.md | 6 ++++-- src/main/java/com/exasol/datatype/type/Timestamp.java | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/changes/changes_4.6.2.md b/doc/changes/changes_4.6.2.md index 35b16d16..4547df35 100644 --- a/doc/changes/changes_4.6.2.md +++ b/doc/changes/changes_4.6.2.md @@ -4,9 +4,11 @@ Code name: ## Summary -## Features +This release mark no-args constructor of class `com.exasol.datatype.type.Timestamp` as deprecated. This avoids accidentally using the default timestamp precision 3. -* ISSUE_NUMBER: description +## Refactoring + +* #187: Mark no-args constructor of class `com.exasol.datatype.type.Timestamp` as deprecated ## Dependency Updates diff --git a/src/main/java/com/exasol/datatype/type/Timestamp.java b/src/main/java/com/exasol/datatype/type/Timestamp.java index afaa3f6b..4d648f9c 100644 --- a/src/main/java/com/exasol/datatype/type/Timestamp.java +++ b/src/main/java/com/exasol/datatype/type/Timestamp.java @@ -21,7 +21,9 @@ public Timestamp(final int precision) { * Create a new instance of a {@link Timestamp} data type with the default fractional * seconds precision (3, i.e. millisecond precision) * + * @deprecated Use {@link #Timestamp(int)} instead and specify the precision explicitly. */ + @Deprecated(since = "4.6.2", forRemoval = true) public Timestamp() { this(DEFAULT_FRACTIONAL_SECOND_PRECISION); } From 164f9cccf5887e87f1a6f57c450273ff975c0e01 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:45:37 +0200 Subject: [PATCH 4/6] Fix javadoc building --- .github/workflows/deploy_javadocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_javadocs.yml b/.github/workflows/deploy_javadocs.yml index c42b549d..66e8cab8 100644 --- a/.github/workflows/deploy_javadocs.yml +++ b/.github/workflows/deploy_javadocs.yml @@ -24,14 +24,14 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Build Javadocs run: mvn javadoc:javadoc - name: Upload artifact uses: actions/upload-pages-artifact@v5 with: - path: ./target/site/apidocs/ + path: ./target/reports/apidocs/ deploy: if: ${{ github.ref == 'refs/heads/main' }} From e4ccee06d94dbfafca35b048d207d36a87d5d3f9 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:54:42 +0200 Subject: [PATCH 5/6] Mark other methods as deprecated --- doc/changes/changes_4.6.2.md | 10 +++++++--- src/main/java/com/exasol/sql/ColumnsDefinition.java | 9 +++++---- .../java/com/exasol/sql/ddl/create/CreateTable.java | 9 +++++---- .../com/exasol/sql/ddl/create/TestCreateTable.java | 11 ++++++----- .../create/rendering/TestCreateTableRendering.java | 2 +- .../rendering/ExasolUdfFunctionRenderingTest.java | 3 ++- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/doc/changes/changes_4.6.2.md b/doc/changes/changes_4.6.2.md index 4547df35..79b09fa6 100644 --- a/doc/changes/changes_4.6.2.md +++ b/doc/changes/changes_4.6.2.md @@ -1,10 +1,14 @@ -# Exasol SQL Statement Builder 4.6.2, released 2026-??-?? +# Exasol SQL Statement Builder 4.6.2, released 2026-08-04 -Code name: +Code name: Enforce specifying timestamp precision ## Summary -This release mark no-args constructor of class `com.exasol.datatype.type.Timestamp` as deprecated. This avoids accidentally using the default timestamp precision 3. +This release marks the following timestamp related constructors/methods as deprecated. This avoids accidentally using the default timestamp precision 3. + +* no-args constructor of `com.exasol.datatype.type.Timestamp`: Use constructor with precision argument instead. +* `ColumnsDefinition.Builder.timestampColumn(String)`: Use `timestampColumn(String, int)` instead. +* `CreateTable.timestampColumn(String)`: Use `timestampColumn(String, int)` instead. ## Refactoring diff --git a/src/main/java/com/exasol/sql/ColumnsDefinition.java b/src/main/java/com/exasol/sql/ColumnsDefinition.java index 7c51e418..871d6d50 100644 --- a/src/main/java/com/exasol/sql/ColumnsDefinition.java +++ b/src/main/java/com/exasol/sql/ColumnsDefinition.java @@ -145,14 +145,15 @@ public Builder doublePrecisionColumn(final String columnName) { } /** - * Add timestamp column. + * Add timestamp column with the default fractional seconds precision (3, i.e. millisecond precision). * * @param columnName name of the column to be added * @return {@code this} for fluent programming + * @deprecated Use {@link #timestampColumn(String, int)} instead and specify the precision explicitly. */ + @Deprecated(since = "4.6.2", forRemoval = true) public Builder timestampColumn(final String columnName) { - this.columns.add(new Column(null, columnName, new Timestamp())); - return this; + return this.timestampColumn(columnName, Timestamp.DEFAULT_FRACTIONAL_SECOND_PRECISION); } /** @@ -226,4 +227,4 @@ public ColumnsDefinition build() { return new ColumnsDefinition(this.columns); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/exasol/sql/ddl/create/CreateTable.java b/src/main/java/com/exasol/sql/ddl/create/CreateTable.java index 13eccd23..676fc666 100644 --- a/src/main/java/com/exasol/sql/ddl/create/CreateTable.java +++ b/src/main/java/com/exasol/sql/ddl/create/CreateTable.java @@ -93,14 +93,15 @@ public synchronized CreateTable doublePrecisionColumn(final String columnName) { } /** - * Add timestamp column + * Add timestamp column with the default fractional seconds precision (3, i.e. millisecond precision). * * @param columnName name of the column to be added * @return {@code this} for fluent programming + * @deprecated Use {@link #timestampColumn(String, int)} instead and specify the precision explicitly. */ + @Deprecated(since = "4.6.2", forRemoval = true) public synchronized CreateTable timestampColumn(final String columnName) { - this.columnsDefinition.add(columnName, new Timestamp()); - return this; + return this.timestampColumn(columnName, Timestamp.DEFAULT_FRACTIONAL_SECOND_PRECISION); } /** @@ -188,4 +189,4 @@ public void accept(final CreateTableVisitor visitor) { this.table.accept(visitor); visitor.leave(this); } -} \ No newline at end of file +} diff --git a/src/test/java/com/exasol/sql/ddl/create/TestCreateTable.java b/src/test/java/com/exasol/sql/ddl/create/TestCreateTable.java index 8dd9e303..d875f9b2 100644 --- a/src/test/java/com/exasol/sql/ddl/create/TestCreateTable.java +++ b/src/test/java/com/exasol/sql/ddl/create/TestCreateTable.java @@ -5,12 +5,12 @@ import static org.hamcrest.Matchers.instanceOf; import static org.junit.jupiter.api.Assertions.assertAll; -import com.exasol.sql.Column; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.exasol.datatype.type.*; import com.exasol.datatype.type.Boolean; +import com.exasol.sql.Column; import com.exasol.sql.StatementFactory; // [utest->dsn~create-statements~1] @@ -68,7 +68,7 @@ void testCreateTableWithDateColumn() { @Test void testCreateTableWithVarcharColumn() { final Column column = this.createTable.varcharColumn(VARCHAR_COLUMN_NAME, LENGTH).getColumnsDefinition().getColumns() - .get(0); + .get(0); assertInstance(column, VARCHAR_COLUMN_NAME, Varchar.class); } @@ -87,6 +87,7 @@ void testCreateTableWithDoublePrecisionColumn() { } @Test + @SuppressWarnings("removal") // Need to test deprecated method void testCreateTableWithTimestampColumn() { final Column column = this.createTable.timestampColumn(TIMESTAMP_COLUMN_NAME) .getColumnsDefinition().getColumns().get(0); @@ -119,14 +120,14 @@ void testCreateTableWithTimestampWithLocalTimeZoneColumnWithPrecision() { @Test void testCreateTableWithIntervalDayToSecondColumn() { final Column column = this.createTable.intervalDayToSecondColumn(INTERVAL_DAY_TO_SECOND_COLUMN_NAME, 2, 2) - .getColumnsDefinition().getColumns().get(0); + .getColumnsDefinition().getColumns().get(0); assertInstance(column, INTERVAL_DAY_TO_SECOND_COLUMN_NAME, IntervalDayToSecond.class); } @Test void testCreateTableWithIntervalYearToMonthColumn() { final Column column = this.createTable.intervalYearToMonthColumn(INTERVAL_YEAR_TO_MONTH_COLUMN_NAME, 2) - .getColumnsDefinition().getColumns().get(0); + .getColumnsDefinition().getColumns().get(0); assertInstance(column, INTERVAL_YEAR_TO_MONTH_COLUMN_NAME, IntervalYearToMonth.class); } -} \ No newline at end of file +} diff --git a/src/test/java/com/exasol/sql/ddl/create/rendering/TestCreateTableRendering.java b/src/test/java/com/exasol/sql/ddl/create/rendering/TestCreateTableRendering.java index e6686989..abd3e6eb 100644 --- a/src/test/java/com/exasol/sql/ddl/create/rendering/TestCreateTableRendering.java +++ b/src/test/java/com/exasol/sql/ddl/create/rendering/TestCreateTableRendering.java @@ -51,6 +51,7 @@ void testCreateTableWithDoublePrecisionColumn() { } @Test + @SuppressWarnings("removal") // Need to test deprecated method void testCreateTableWithTimestampColumn() { assertThat(this.createTable.timestampColumn("a"), rendersTo("CREATE TABLE testName (a TIMESTAMP)")); } @@ -84,7 +85,6 @@ void testCreateTableWithInvalidTimestampWithLocalTimeZoneColumn() { assertThrows(IllegalArgumentException.class, () -> this.createTable.timestampWithLocalTimeZoneColumn("a", 10)); } - @Test void testCreateTableWithCharColumn() { assertThat(this.createTable.charColumn("a", 10), rendersTo("CREATE TABLE testName (a CHAR(10))")); diff --git a/src/test/java/com/exasol/sql/expression/rendering/ExasolUdfFunctionRenderingTest.java b/src/test/java/com/exasol/sql/expression/rendering/ExasolUdfFunctionRenderingTest.java index fe506bd9..bb2e136a 100644 --- a/src/test/java/com/exasol/sql/expression/rendering/ExasolUdfFunctionRenderingTest.java +++ b/src/test/java/com/exasol/sql/expression/rendering/ExasolUdfFunctionRenderingTest.java @@ -20,6 +20,7 @@ void testUdfFunction() { } @Test + @SuppressWarnings("removal") // Need to test deprecated method void testUdfFunctionWithEmits() { final ColumnsDefinition columnsDefinition = ColumnsDefinition.builder() .decimalColumn("id", 18, 0) @@ -40,4 +41,4 @@ void testUdfFunctionWithEmits() { + " TS_NANOS TIMESTAMP(9), TS_TZ_DEFAULT TIMESTAMP WITH LOCAL TIME ZONE," + " TS_TZ_NANOS TIMESTAMP(9) WITH LOCAL TIME ZONE) FROM people")); } -} \ No newline at end of file +} From 9e240d911abbe39ea156d45d0dfd271ba7e46683 Mon Sep 17 00:00:00 2001 From: Christoph Pirkl Date: Tue, 4 Aug 2026 10:59:25 +0200 Subject: [PATCH 6/6] Fix sonar warning --- src/main/java/com/exasol/sql/ColumnsDefinition.java | 2 +- src/main/java/com/exasol/sql/ddl/create/CreateTable.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/exasol/sql/ColumnsDefinition.java b/src/main/java/com/exasol/sql/ColumnsDefinition.java index 871d6d50..9737191e 100644 --- a/src/main/java/com/exasol/sql/ColumnsDefinition.java +++ b/src/main/java/com/exasol/sql/ColumnsDefinition.java @@ -153,7 +153,7 @@ public Builder doublePrecisionColumn(final String columnName) { */ @Deprecated(since = "4.6.2", forRemoval = true) public Builder timestampColumn(final String columnName) { - return this.timestampColumn(columnName, Timestamp.DEFAULT_FRACTIONAL_SECOND_PRECISION); + return this.timestampColumn(columnName, AbstractTimestampDataType.DEFAULT_FRACTIONAL_SECOND_PRECISION); } /** diff --git a/src/main/java/com/exasol/sql/ddl/create/CreateTable.java b/src/main/java/com/exasol/sql/ddl/create/CreateTable.java index 676fc666..9a578be8 100644 --- a/src/main/java/com/exasol/sql/ddl/create/CreateTable.java +++ b/src/main/java/com/exasol/sql/ddl/create/CreateTable.java @@ -101,7 +101,7 @@ public synchronized CreateTable doublePrecisionColumn(final String columnName) { */ @Deprecated(since = "4.6.2", forRemoval = true) public synchronized CreateTable timestampColumn(final String columnName) { - return this.timestampColumn(columnName, Timestamp.DEFAULT_FRACTIONAL_SECOND_PRECISION); + return this.timestampColumn(columnName, AbstractTimestampDataType.DEFAULT_FRACTIONAL_SECOND_PRECISION); } /**