echo "PostgreSQL - Creating database"
psql -h "${SQL_POSTGRESQL_TEST_SERVER}" -c 'create database radius;' -U postgres || true
+#
+# Pin standard_conforming_strings = on for new connections to this DB.
+# Modern PostgreSQL defaults to on (since 9.1), but pinning it here makes
+# the escape tests' expected output deterministic across server configs.
+#
+echo "PostgreSQL - Pinning standard_conforming_strings"
+psql -h "${SQL_POSTGRESQL_TEST_SERVER}" -c 'ALTER DATABASE radius SET standard_conforming_strings = on;' -U postgres
+
echo "PostgreSQL - Execute schema.sql"
psql -h "${SQL_POSTGRESQL_TEST_SERVER}" -U postgres radius < raddb/mods-config/sql/main/postgresql/schema.sql
#
# PostgreSQL escape function (via PQescapeStringConn).
#
-# With standard_conforming_strings = on (the default since 9.1)
-# PQescapeStringConn only doubles single quotes. Backslashes and
-# other byte values pass through unchanged - the SQL string literal
-# grammar treats them as literal characters.
+# Assumes standard_conforming_strings = on on the test server. Under that
+# mode PQescapeStringConn only doubles single quotes - backslashes and
+# other byte values pass through unchanged. The CI postgres setup script
+# pins this on the test database.
#
# String literals in unlang are marked "safe for any escape" so we wrap
# each input in %taint(...) to force the escape to actually run.
}
#
-# Backslash passes through (assumes standard_conforming_strings = on
-# on the test server, which is the default in modern PostgreSQL).
+# Backslash passes through unchanged.
#
if (%sql.escape(%taint("back\\slash")) != "back\\slash") {
test_fail