testcontainers / testcontainers/testcontainers-java
[Bug]: `ScriptUtils` converts adjacent string literals to invalid syntax
オープン
まだ誰も着手していません。
type/bug
- 主要言語
- Java
- スター
- 8.7k
- フォーク
- 1.9k
- 平均マージ
- 2日 17時間
- マージ済み PR(30日)
- 9
説明
Module
PostgreSQL
Testcontainers version
2.0.1
Using the latest Testcontainers version?
Yes
Host OS
macOS
Host Arch
arm64
Docker version
Client:
Version: 28.5.1
API version: 1.51
Go version: go1.24.8
Git commit: e180ab8
Built: Wed Oct 8 12:16:17 2025
OS/Arch: darwin/arm64
Context: desktop-linux
Server: Docker Desktop 4.49.0 (208700)
Engine:
Version: 28.5.1
API version: 1.51 (minimum version 1.24)
Go version: go1.24.8
Git commit: f8215cc
Built: Wed Oct 8 12:18:25 2025
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
What happened?
ScriptUtils splits an init script into a list of statements. This is valid syntax:
CREATE TABLE test (
x int
);
COMMENT ON COLUMN test.x
IS 'First sentence. '
'Second sentence';
But ScriptUtils converts this into these two statements:
CREATE TABLE test ( x int )
COMMENT ON COLUMN test.x IS 'First sentence. ' 'Second sentence'
The second statement isn't valid because the adjacent string literals need to be separated by at least one newline.
Relevant log output
Caused by: org.testcontainers.ext.ScriptUtils$ScriptStatementFailedException: Script execution failed (initPostgres.sql:2): COMMENT ON COLUMN test.x IS 'First sentence. ' 'Second sentence'
at org.testcontainers.jdbc.JdbcDatabaseDelegate.execute(JdbcDatabaseDelegate.java:63)
at org.testcontainers.delegate.AbstractDatabaseDelegate.execute(AbstractDatabaseDelegate.java:38)
at org.testcontainers.ext.ScriptUtils.executeDatabaseScript(ScriptUtils.java:307)
... 83 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "'Second sentence'"
Position: 48
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2736)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2421)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:525)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:435)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:357)
at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:342)
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:318)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:313)
at org.testcontainers.jdbc.JdbcDatabaseDelegate.execute(JdbcDatabaseDelegate.java:50)
... 85 common frames omitted
Additional Information
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
ScriptUtils.java の executeDatabaseScript 周辺から始め、レポートに示されている PostgreSQL スクリプトを使って文の分割を再現します。結果の文が隣接する文字列リテラル間に必要な区切りを保持していること、およびスクリプトが PostgreSQL に対して正常に実行されることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- java, postgresql
- 領域
- databases, testing-qa
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 45/100