Skip to content

chore(pgwire): remove legacy server code#6039

Merged
bluestreak01 merged 8 commits intomasterfrom
vi_minus_legacy
Aug 12, 2025
Merged

chore(pgwire): remove legacy server code#6039
bluestreak01 merged 8 commits intomasterfrom
vi_minus_legacy

Conversation

@bluestreak01
Copy link
Copy Markdown
Member

@bluestreak01 bluestreak01 commented Aug 8, 2025

Over the course of several releases, the modern PGWire implementation has demonstrated strong reliability and performance. This PR streamlines the codebase by retiring the legacy PGWire server implementation, including its associated tests, configurations, and backward-compatibility shims.

I would also like to move code from "modern" package up a level and remove "modern" as the term. But it would be good to do that after code review. (done)

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 8, 2025

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Walkthrough

This change set removes legacy PostgreSQL wire protocol support from both production and test code. It deletes all legacy server, authenticator, and type container classes, and eliminates conditional logic, configuration, and test parameterization related to "legacy mode." Exception handling for protocol errors is unified under a single exception type, MessageProcessingException, across all modern server and protocol handler classes.

Changes

Cohort / File(s) Change Summary
Legacy Server and Authenticator Removal
core/src/main/java/io/questdb/cutlass/pgwire/PGWireServer.java, core/src/main/java/io/questdb/cutlass/pgwire/CleartextPasswordPgWireAuthenticator.java, core/src/main/java/io/questdb/cutlass/pgwire/DefaultPgWireAuthenticatorFactory.java
Deleted all legacy server and authenticator classes, including the default authenticator factory and related infrastructure.
Type Container Deletions
core/src/main/java/io/questdb/cutlass/pgwire/AbstractTypeContainer.java, core/src/main/java/io/questdb/cutlass/pgwire/TypesAndInsert.java, core/src/main/java/io/questdb/cutlass/pgwire/TypesAndSelect.java, core/src/main/java/io/questdb/cutlass/pgwire/TypesAndUpdate.java
Removed all type container classes used for managing bind variable types and query state in the legacy protocol implementation.
Exception Unification
core/src/main/java/io/questdb/cutlass/pgwire/MessageProcessingException.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/CleartextPasswordPgWireAuthenticatorModern.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/PGConnectionContextModern.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/PGPipelineEntry.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/PGUtils.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/PgNonNullBinaryArrayView.java, core/src/main/java/io/questdb/cutlass/pgwire/modern/PGWireServerModern.java
Replaced all usage of BadProtocolException with MessageProcessingException for protocol and message processing errors in all modern server and protocol handler classes.
Server Instantiation Simplification
core/src/main/java/io/questdb/cutlass/pgwire/IPGWireServer.java
Simplified factory method to always return the modern server implementation, removing legacy mode selection logic.
Test Infrastructure and Parameterization Removal
core/src/test/java/io/questdb/test/cutlass/pgwire/BasePGTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/Port0PGWireConfiguration.java
Removed all legacy mode fields, constructors, methods, enums, and configuration overrides from base test classes and configuration.
Test Class Parameterization and Legacy Mode Cleanup
core/src/test/java/io/questdb/test/cutlass/pgwire/IntervalPGTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGArraysTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGCommitFailureTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGDeclareSyntaxTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGErrorHandlingTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGFunctionsTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGInsertErrorTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGMemoryLimitTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGMultiStatementMessageTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGQuerySuspendTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGSecurityTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGTlsCompatTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PGUpdateConcurrentTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PreparedStatementInvalidationTest.java, core/src/test/java/io/questdb/test/cutlass/pgwire/PgBootstrapTest.java
Removed all legacy mode parameterization, constructors, annotations, and conditional test logic from test classes, converting them to single-mode, modern-only tests.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant PGWireServerModern
    participant AuthenticatorModern
    participant SQLExecutor

    Client->>PGWireServerModern: Connect & send startup message
    PGWireServerModern->>AuthenticatorModern: Authenticate (cleartext)
    AuthenticatorModern-->>PGWireServerModern: Authentication result
    PGWireServerModern->>SQLExecutor: Parse/execute query
    SQLExecutor-->>PGWireServerModern: Query result
    PGWireServerModern-->>Client: Send response
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90 minutes

  • The removal of legacy server and authenticator code, type containers, and extensive changes to test infrastructure and parameterization represent a major refactor with broad impact.
  • Exception unification and server instantiation logic changes affect core protocol handling and error reporting.
  • The volume of files and the interconnectedness of the changes require careful review for regressions and consistency.
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch vi_minus_legacy

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@bluestreak01
Copy link
Copy Markdown
Member Author

@coderabbitai please review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Aug 8, 2025

🧩 Analysis chain

@bluestreak01 On it — kicking off the review now. I’ll analyze the diff and scan for any lingering references to the removed legacy PGWire server code, and follow up with findings shortly.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

PR_URL="https://github.com/questdb/questdb/pull/6039"
PR_NUMBER="6039"
REPO="questdb/questdb"

echo "=== PR Summary ==="
gh pr view -R "$REPO" "$PR_NUMBER" --json number,title,headRefName,baseRefName,additions,deletions,changedFiles,url --jq '
"PR #\(.number): \(.title)\nHead: \(.headRefName)  Base: \(.baseRefName)\nChanges: +\(.additions) -\(.deletions) files:\(.changedFiles)\n\(.url)"'

echo
echo "=== Changed Files (status  path) ==="
gh pr view -R "$REPO" "$PR_NUMBER" --json files --jq '.files[] | [.status, .path] | @tsv'

# Save files json for reuse
gh pr view -R "$REPO" "$PR_NUMBER" --json files > /tmp/pr_files.json

echo
echo "=== Removed files list ==="
jq -r '.files[] | select(.status=="removed") | .path' /tmp/pr_files.json | tee /tmp/removed_paths.txt

echo
echo "=== Searching for lingering references to removed classes ==="
# Collect removed Java class names
removed_classes=$(jq -r '.files[] | select(.status=="removed") | .path' /tmp/pr_files.json | awk -F/ '{print $NF}' | sed -E 's/\.[^.]+$//' | sort -u)
if [ -z "${removed_classes}" ]; then
  echo "No removed classes detected (or no .java/.kt/etc. files removed)."
else
  for cls in $removed_classes; do
    echo
    echo "----- References to class name: $cls -----"
    # Search for imports and usages of the class name
    rg -n -S --hidden --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**' --max-columns 200 --color=never "\b$cls\b" | sed -n '1,200p' || true

    echo
    echo "----- Import statements referencing $cls -----"
    rg -n -S --hidden --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**' --max-columns 200 --color=never "import .*${cls}\s*;" | sed -n '1,200p' || true
  done
fi

echo
echo "=== Heuristic scan for legacy pgwire server mentions in code/docs ==="
rg -n -S --hidden --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**' --max-columns 200 --color=never \
  -e 'pgwire.*legacy' -e 'legacy.*pgwire' -e '\bPGServer\b' -e '\bPgServer\b' -e '\bPGWireServer\b' -e 'io\.questdb\.cutlass\.pgwire.*legacy' \
  | sed -n '1,300p' || true

echo
echo "=== Top-level directories referencing pgwire (for context) ==="
fd -HI --type d --full-path 'pgwire' | sed -n '1,50p' || true

Length of output: 3655


@bluestreak01 Re-running the scan with a fixed script (no tee, with rg/grep fallback). I’ll post concrete findings on any lingering references and risky deltas right after this executes, and proceed with a full review.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

PR_NUMBER="6039"
REPO="questdb/questdb"

echo "=== PR Summary ==="
gh pr view -R "$REPO" "$PR_NUMBER" --json number,title,headRefName,baseRefName,additions,deletions,changedFiles,url --jq '
"PR #\(.number): \(.title)\nHead: \(.headRefName)  Base: \(.baseRefName)\nChanges: +\(.additions) -\(.deletions) files:\(.changedFiles)\n\(.url)"'

echo
echo "=== Changed Files (status  path) ==="
gh pr view -R "$REPO" "$PR_NUMBER" --json files --jq '.files[] | "\(.status)\t\(.path)"'

# Save files json for reuse
TMP_JSON="/tmp/pr_files.json"
gh pr view -R "$REPO" "$PR_NUMBER" --json files > "$TMP_JSON"

echo
echo "=== Removed files list ==="
mkdir -p /tmp
jq -r '.files[] | select(.status=="removed") | .path' "$TMP_JSON" > /tmp/removed_paths.txt
if [ -s /tmp/removed_paths.txt ]; then
  nl -ba /tmp/removed_paths.txt | sed -n '1,200p'
else
  echo "No files marked as removed in this PR."
fi

# Choose search tool (prefer rg)
if command -v rg >/dev/null 2>&1; then
  SEARCH_TOOL="rg -n -S --hidden --max-columns 200 --color=never --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**'"
else
  SEARCH_TOOL="grep -R -n -I"
fi

echo
echo "=== Searching for lingering references to removed classes (imports/usages) ==="
removed_classes=$(
  awk 'NF' /tmp/removed_paths.txt 2>/dev/null | \
  grep -E '\.(java|kt)$' || true
)

if [ -z "${removed_classes}" ]; then
  echo "No removed Java/Kotlin sources detected (or removed list empty)."
else
  # Derive unique class basenames
  class_names=$(printf "%s\n" "$removed_classes" | awk -F/ '{print $NF}' | sed -E 's/\.[^.]+$//' | sort -u)
  for cls in $class_names; do
    echo
    echo "----- References to class name: $cls -----"
    bash -lc "$SEARCH_TOOL \"\\b$cls\\b\" 2>/dev/null | sed -n '1,200p' || true"

    echo
    echo "----- Import statements referencing $cls -----"
    bash -lc "$SEARCH_TOOL \"import[[:space:]].*${cls}[[:space:]]*;\" 2>/dev/null | sed -n '1,200p' || true"
  done
fi

echo
echo "=== Heuristic scan for legacy pgwire server mentions in code/docs ==="
bash -lc "$SEARCH_TOOL $'pgwire.*legacy|legacy.*pgwire|\\bPGWireServer\\b|\\bPGServer\\b|\\bIPGWireServer\\b|\\bPGConnectionContext\\b|io\\.questdb\\.cutlass\\.pgwire.*legacy' 2>/dev/null | sed -n '1,300p' || true"

echo
echo "=== Directories containing \"pgwire\" for context ==="
if command -v fd >/dev/null 2>&1; then
  fd -HI --type d --full-path 'pgwire' | sed -n '1,50p' || true
else
  find . -type d -iname '*pgwire*' | sed -n '1,50p' || true
fi

Length of output: 5351


@bluestreak01 Here’s a focused pass kicking off:

  • I fetched accurate file statuses (added/removed/modified/renamed) via the GitHub API and scanned for lingering references to any removed Java/Kotlin classes.
  • I also heuristically searched the tree for legacy pgwire identifiers (PGWireServer, IPGWireServer, PGConnectionContext, etc.).

Once the results come back, I’ll summarize any remaining references or risks and proceed with the full automated review as requested.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

REPO="questdb/questdb"
PR_NUMBER="6039"

echo "=== PR files via GitHub API (with statuses) ==="
FILES_JSON="/tmp/pr_files_api.json"
gh api -H "Accept: application/vnd.github+json" \
  "/repos/${REPO}/pulls/${PR_NUMBER}/files?per_page=100" > "$FILES_JSON"

echo "Status counts:"
jq -r 'group_by(.status)[] | "\([.[0].status]) \(.|length)"' "$FILES_JSON" | sed 's/\[//; s/\]//'

echo
echo "Removed files:"
jq -r '.[] | select(.status=="removed") | .filename' "$FILES_JSON" | nl -ba | sed -n '1,200p' | awk '{$1=$1;print}' || true

echo
echo "Renamed files (old -> new):"
jq -r '.[] | select(.status=="renamed") | "\(.previous_filename) -> \(.filename)"' "$FILES_JSON" | nl -ba | sed -n '1,200p' | awk '{$1=$1;print}' || true

# Build list of removed Java/Kotlin basenames
REMOVED_CLASSES=$(jq -r '.[] | select(.status=="removed") | .filename' "$FILES_JSON" | grep -E '\.(java|kt)$' | awk -F/ '{print $NF}' | sed -E 's/\.[^.]+$//' | sort -u || true)

if [ -z "$REMOVED_CLASSES" ]; then
  echo
  echo "No removed Java/Kotlin sources detected."
else
  echo
  echo "Removed class basenames:"
  printf "%s\n" "$REMOVED_CLASSES" | nl -ba

  # Choose search tool
  if command -v rg >/dev/null 2>&1; then
    SEARCH="rg -n -S --hidden --max-columns 200 --color=never --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**'"
  else
    SEARCH="grep -R -n -I"
  fi

  echo
  echo "=== Lingering references to removed classes (imports/usages) ==="
  for cls in $REMOVED_CLASSES; do
    echo "--- $cls: usages ---"
    bash -lc "$SEARCH \"\\b$cls\\b\" 2>/dev/null | sed -n '1,150p' || true"
    echo "--- $cls: import stmts ---"
    bash -lc "$SEARCH \"import[[:space:]].*${cls}[[:space:]]*;\" 2>/dev/null | sed -n '1,50p' || true"
  done
fi

echo
echo "=== Heuristic scan for pgwire legacy identifiers ==="
if command -v rg >/dev/null 2>&1; then
  rg -n -S --hidden --max-columns 200 --color=never --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**' \
    -e '\bPGWireServer\b' \
    -e '\bIPGWireServer\b' \
    -e '\bPGConnectionContext\b' \
    -e 'legacy.*pgwire|pgwire.*legacy' \
    | sed -n '1,300p' || true
else
  grep -R -n -I -E '\bPGWireServer\b|\bIPGWireServer\b|\bPGConnectionContext\b|legacy.*pgwire|pgwire.*legacy' . | sed -n '1,300p' || true
fi

Length of output: 1995


@bluestreak01 Running a corrected scan (no nl/tee; robust fallbacks) to list removed files accurately and check for lingering references to the removed legacy PGWire classes. I’ll summarize concrete findings right after.


🏁 Script executed:

#!/bin/bash
set -euo pipefail

REPO="questdb/questdb"
PR_NUMBER="6039"
FILES_JSON="/tmp/pr_files_api.json"

# Fetch PR files with statuses
gh api -H "Accept: application/vnd.github+json" \
  "/repos/${REPO}/pulls/${PR_NUMBER}/files?per_page=100" > "$FILES_JSON"

echo "=== Status counts ==="
# Status counts without using 'nl'
jq -r '
  group_by(.status)[] |
  {status:.[0].status, count:(.|length)} |
  "\(.status): \(.count)"
' "$FILES_JSON"

echo
echo "=== Removed files ==="
jq -r '.[] | select(.status=="removed") | .filename' "$FILES_JSON" | awk '{printf("%3d. %s\n", NR, $0)}'

echo
echo "=== Renamed files (old -> new) ==="
jq -r '.[] | select(.status=="renamed") | "\(.previous_filename) -> \(.filename)"' "$FILES_JSON" | awk '{printf("%3d. %s\n", NR, $0)}'

# Derive removed Java/Kotlin class basenames
REMOVED_CLASSES=$(jq -r '.[] | select(.status=="removed") | .filename' "$FILES_JSON" \
  | grep -E '\.(java|kt)$' \
  | awk -F/ '{print $NF}' \
  | sed -E 's/\.[^.]+$//' \
  | sort -u || true)

if [ -z "$REMOVED_CLASSES" ]; then
  echo
  echo "No removed Java/Kotlin sources detected."
  exit 0
fi

echo
echo "=== Removed class basenames ==="
printf "%s\n" "$REMOVED_CLASSES" | awk '{printf("%3d. %s\n", NR, $0)}'

# Choose search tool
if command -v rg >/dev/null 2>&1; then
  SEARCH="rg -n -S --hidden --max-columns 200 --color=never --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**'"
else
  SEARCH="grep -R -n -I"
fi

echo
echo "=== Lingering references to removed classes (imports/usages) ==="
for cls in $REMOVED_CLASSES; do
  echo "--- $cls: usages (first 150 hits) ---"
  bash -lc "$SEARCH \"\\b$cls\\b\" 2>/dev/null | sed -n '1,150p' || true"
  echo "--- $cls: import stmts (first 50 hits) ---"
  bash -lc "$SEARCH \"import[[:space:]].*${cls}[[:space:]]*;\" 2>/dev/null | sed -n '1,50p' || true"
done

echo
echo "=== Heuristic scan for pgwire legacy identifiers ==="
if command -v rg >/dev/null 2>&1; then
  rg -n -S --hidden --max-columns 200 --color=never --glob '!.git' --glob '!**/node_modules/**' --glob '!**/build/**' --glob '!**/dist/**' \
    -e '\bPGWireServer\b' \
    -e '\bIPGWireServer\b' \
    -e '\bPGConnectionContext\b' \
    -e 'legacy.*pgwire|pgwire.*legacy' \
    | sed -n '1,300p' || true
else
  grep -R -n -I -E '\bPGWireServer\b|\bIPGWireServer\b|\bPGConnectionContext\b|legacy.*pgwire|pgwire.*legacy' . | sed -n '1,300p' || true
fi

Length of output: 23927


@bluestreak01 Here are my initial findings and checks for PR #6039:

  • Scope: modified 25, removed 8, renamed 1. Removed legacy classes: AbstractTypeContainer, CleartextPasswordPgWireAuthenticator, DefaultPgWireAuthenticatorFactory, PGConnectionContext, PGWireServer, TypesAndInsert/Select/Update. Renamed BadProtocolException -> MessageProcessingException.
  • Code references:
    • No import/usages of PGWireServer found; IPGWireServer is used across ServerMain, Services, FlushQueryCacheJob, and PGWireServerModern implements it. This aligns with the legacy server removal.
    • PGConnectionContext appears only in comments (e.g., ColumnType.java, CompiledQuery.java, test log comments). No imports/usages detected.
    • TypesAndSelect referenced once in a comment within PGPipelineEntry; no imports/usages of TypesAndInsert/Select/Update found.
    • BadProtocolException: renamed to MessageProcessingException; no lingering references to the old name surfaced in my scans.
  • Overall: the removal looks clean from a reference standpoint. The interface-based integration (IPGWireServer) remains intact, and PGWireServerModern is the concrete implementation.

Suggested follow-ups (non-blocking):

  • Consider updating or pruning comments that refer to PGConnectionContext and TypesAndSelect to avoid confusion post-legacy removal.
  • If there’s external/user docs referencing PGWireServer or PGConnectionContext, update them to point to the modern implementation and terminology.

Proceeding with the full automated review for deeper coverage (style, docs, tests, edge cases). If you’d like, I can also open a follow-up issue to track the comment/doc cleanup.

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (3)
core/src/main/java/io/questdb/cutlass/pgwire/modern/PGUtils.java (1)

156-170: Guard against int overflow when casting blob size.

sequence.length() is long; returning Integer.BYTES + (int) blobSize may overflow if blobSize > Integer.MAX_VALUE, even if it’s below maxBlobSize. Add an explicit upper bound check before the cast.

             case ColumnType.BINARY:
                 BinarySequence sequence = record.getBin(columnIndex);
                 if (sequence == null) {
                     return Integer.BYTES;
                 } else {
                     long blobSize = sequence.length();
-                    if (blobSize < maxBlobSize) {
-                        return Integer.BYTES + (int) blobSize;
-                    } else {
-                        throw MessageProcessingException.instance(pipelineEntry)
+                    if (blobSize < 0 || blobSize > Integer.MAX_VALUE) {
+                        throw MessageProcessingException.instance(pipelineEntry)
+                                .put("blob size not supported [blobSize=").put(blobSize)
+                                .put(", maxSupported=").put(Integer.MAX_VALUE)
+                                .put(", columnIndex=").put(columnIndex)
+                                .put(']');
+                    }
+                    if (blobSize < maxBlobSize) {
+                        return Integer.BYTES + (int) blobSize;
+                    }
+                    throw MessageProcessingException.instance(pipelineEntry)
                                 .put("blob is too large [blobSize=").put(blobSize)
                                 .put(", maxBlobSize=").put(maxBlobSize)
                                 .put(", columnIndex=").put(columnIndex)
                                 .put(']');
-                    }
                 }
core/src/main/java/io/questdb/cutlass/pgwire/modern/CleartextPasswordPgWireAuthenticatorModern.java (2)

414-442: Don’t rely on assert for protocol validation; handle invalid msgType at runtime

Asserts are compiled out in production. A malformed client sending a wrong message type will bypass validation. Guard at runtime and fail the handshake deterministically.

-        byte msgType = Unsafe.getUnsafe().getByte(recvBufReadPos);
-        assert msgType == MESSAGE_TYPE_PASSWORD_MESSAGE;
+        byte msgType = Unsafe.getUnsafe().getByte(recvBufReadPos);
+        if (msgType != MESSAGE_TYPE_PASSWORD_MESSAGE) {
+            LOG.error().$("unexpected message type [expected=").$(MESSAGE_TYPE_PASSWORD_MESSAGE)
+                    .$(", actual=").$(msgType).$(']').$();
+            throw MessageProcessingException.INSTANCE;
+        }

432-441: Use proper SQLSTATE/severity on auth failure

prepareErrorResponse encodes SQLSTATE "00000" (successful completion) and severity "ERROR". For auth failure, PostgreSQL uses severity FATAL and SQLSTATE 28P01. This helps clients (including JDBC) classify the error correctly.

-            prepareErrorResponse("invalid username/password");
+            prepareAuthFailureResponse();

Outside this hunk, add:

// Consider placing next to prepareErrorResponse
private void prepareAuthFailureResponse() {
    sink.put(MESSAGE_TYPE_ERROR_RESPONSE);
    long addr = sink.skip();
    sink.put('S'); sink.encodeUtf8Z("FATAL");
    sink.put('V'); sink.encodeUtf8Z("FATAL");
    sink.put('C'); sink.encodeUtf8Z("28P01"); // invalid_password
    sink.put('M'); sink.encodeUtf8Z("invalid username/password");
    sink.put((char) 0);
    sink.putLen(addr);
}
🧹 Nitpick comments (8)
core/src/main/java/io/questdb/cutlass/pgwire/modern/PGWireServerModern.java (1)

176-180: Remove unnecessary null check in resetQueryCache().

typesAndSelectCache is always non-null (either a real cache or NO_OP_CACHE). The null guard is dead code.

     @Override
     public void resetQueryCache() {
-        if (typesAndSelectCache != null) {
-            typesAndSelectCache.clear();
-        }
+        typesAndSelectCache.clear();
     }
core/src/main/java/io/questdb/cutlass/pgwire/modern/PGUtils.java (1)

84-98: Javadoc tweak to reflect inclusive limit.

The code rejects blobs when blobSize >= maxBlobSize. Clarify the Javadoc to “exceeds or equals maxBlobSize” to avoid ambiguity.

- * @throws MessageProcessingException if the binary value exceeds maxBlobSize
+ * @throws MessageProcessingException if the binary value exceeds or equals maxBlobSize
core/src/test/java/io/questdb/test/cutlass/pgwire/PGErrorHandlingTest.java (1)

171-174: Make assertion resilient to driver message wording.

Matching string “The connection attempt failed.” can be brittle across pgjdbc versions. Prefer asserting SQLState if available.

-                } catch (PSQLException e) {
-                    TestUtils.assertContains(e.getMessage(), "The connection attempt failed.");
+                } catch (PSQLException e) {
+                    // 08001/08006 commonly used for connection failures
+                    Assert.assertTrue(
+                            "Unexpected SQLState for connection failure: " + e.getSQLState(),
+                            "08001".equals(e.getSQLState()) || "08006".equals(e.getSQLState())
+                    );
                 }
core/src/main/java/io/questdb/cutlass/pgwire/modern/PgNonNullBinaryArrayView.java (1)

121-125: Correct exception type migration (LGTM) + production-safety improvement.

  • Using MessageProcessingException for protocol/format violations is consistent and ensures upstream handling.
  • Consider replacing the assert shape.size() > 0 with a runtime check to avoid being stripped in production.
-        assert shape.size() > 0;
+        if (shape.size() == 0) {
+            throw MessageProcessingException.instance(pipelineEntry)
+                    .put("invalid array shape (no dimensions)");
+        }

Also applies to: 159-169

core/src/main/java/io/questdb/cutlass/pgwire/modern/CleartextPasswordPgWireAuthenticatorModern.java (1)

227-230: Add context logging before swallowing MessageProcessingException

handleIO() maps MessageProcessingException to AuthenticatorException without logging. Add minimal context to aid diagnosis (state, socket fd).

-        } catch (MessageProcessingException e) {
-            throw AuthenticatorException.INSTANCE;
-        }
+        } catch (MessageProcessingException e) {
+            LOG.error().$("auth handshake failed [state=").$(state)
+                    .$(", fd=").$(socket != null ? socket.getFd() : -1).$(']').$();
+            throw AuthenticatorException.INSTANCE;
+        }
core/src/test/java/io/questdb/test/cutlass/pgwire/PGMultiStatementMessageTest.java (3)

402-410: Update comment to reflect legacy removal

The comment still references “legacy code fails… include quirks when legacy is removed.” Legacy is gone; consider pruning or updating the comment.


444-448: Avoid magic numeric mask; use the named constant

7L is brittle and obscures intent. Prefer CONN_AWARE_ALL for consistency.

-        assertWithPgServer(7L, (connection, binary, mode, port) -> {
+        assertWithPgServer(CONN_AWARE_ALL, (connection, binary, mode, port) -> {

951-988: Rename test to drop “Legacy” suffix

Method name still contains "Legacy" but now runs under CONN_AWARE_ALL. Rename for clarity.

-    public void testQueryEventuallySucceedsOnDataUnavailableEventTriggeredImmediatelyLegacy() throws Exception {
+    public void testQueryEventuallySucceedsOnDataUnavailableEventTriggeredImmediately() throws Exception {
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e4e699c and 831b042.

📒 Files selected for processing (32)
  • core/src/main/java/io/questdb/cutlass/pgwire/AbstractTypeContainer.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/CleartextPasswordPgWireAuthenticator.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/DefaultPgWireAuthenticatorFactory.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/IPGWireServer.java (1 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/MessageProcessingException.java (3 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/PGWireServer.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndInsert.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndSelect.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndUpdate.java (0 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/CleartextPasswordPgWireAuthenticatorModern.java (5 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PGConnectionContextModern.java (26 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PGPipelineEntry.java (38 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PGUtils.java (4 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PGWireServerModern.java (2 hunks)
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PgNonNullBinaryArrayView.java (4 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/BasePGTest.java (1 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/IntervalPGTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGArraysTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGCommitFailureTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGDeclareSyntaxTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGErrorHandlingTest.java (1 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGFunctionsTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGInsertErrorTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGMemoryLimitTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGMultiStatementMessageTest.java (10 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGQuerySuspendTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGSecurityTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGTlsCompatTest.java (0 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGUpdateConcurrentTest.java (2 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PgBootstrapTest.java (1 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/Port0PGWireConfiguration.java (1 hunks)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PreparedStatementInvalidationTest.java (0 hunks)
💤 Files with no reviewable changes (18)
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGArraysTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGInsertErrorTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/IntervalPGTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PreparedStatementInvalidationTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGFunctionsTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGSecurityTest.java
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndSelect.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGMemoryLimitTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGCommitFailureTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGDeclareSyntaxTest.java
  • core/src/main/java/io/questdb/cutlass/pgwire/DefaultPgWireAuthenticatorFactory.java
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndUpdate.java
  • core/src/main/java/io/questdb/cutlass/pgwire/TypesAndInsert.java
  • core/src/main/java/io/questdb/cutlass/pgwire/AbstractTypeContainer.java
  • core/src/main/java/io/questdb/cutlass/pgwire/PGWireServer.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGQuerySuspendTest.java
  • core/src/test/java/io/questdb/test/cutlass/pgwire/PGTlsCompatTest.java
  • core/src/main/java/io/questdb/cutlass/pgwire/CleartextPasswordPgWireAuthenticator.java
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-08-04T09:16:27.366Z
Learnt from: jerrinot
PR: questdb/questdb#5996
File: core/src/test/java/io/questdb/test/cutlass/http/line/LineHttpSenderTest.java:350-356
Timestamp: 2025-08-04T09:16:27.366Z
Learning: In QuestDB ILP tests, maximum dimension values like `(1 << 28) - 1` are intentionally hard-coded instead of using constants like `ArrayView.DIM_MAX_LEN` to serve as "canaries" that will cause test failures if the API limits change, ensuring developers are aware of breaking changes to the ILP API.

Applied to files:

  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PGUtils.java
  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PgNonNullBinaryArrayView.java
📚 Learning: 2025-07-31T08:21:17.390Z
Learnt from: mtopolnik
PR: questdb/questdb#5997
File: core/src/main/java/io/questdb/griffin/engine/functions/array/DoubleArrayAccessFunctionFactory.java:127-131
Timestamp: 2025-07-31T08:21:17.390Z
Learning: In DoubleArrayAccessFunctionFactory.java, overflow validation for array index casting from long to int is performed in the validateIndexArgs() method rather than at each individual cast site. The validateIndexArgs() method is called early in newInstance() to validate all index arguments, making subsequent casts safe.

Applied to files:

  • core/src/main/java/io/questdb/cutlass/pgwire/modern/PgNonNullBinaryArrayView.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (26)
  • GitHub Check: New pull request (SelfHosted Other tests on linux-x64-zfs)
  • GitHub Check: New pull request (SelfHosted Griffin And Fuzz tests on linux-x64-zfs)
  • GitHub Check: New pull request (SelfHosted Griffin And Fuzz tests on linux-arm64)
  • GitHub Check: New pull request (SelfHosted Other tests on linux-arm64)
  • GitHub Check: New pull request (SelfHosted Other tests Start X64Zfs Agent)
  • GitHub Check: New pull request (SelfHosted Other tests Start ARM Agent)
  • GitHub Check: New pull request (Hosted Running tests on windows-other)
  • GitHub Check: New pull request (Hosted Running tests on windows-pgwire)
  • GitHub Check: New pull request (Hosted Running tests on windows-cairo)
  • GitHub Check: New pull request (Hosted Running tests on windows-fuzz2)
  • GitHub Check: New pull request (Hosted Running tests on windows-fuzz1)
  • GitHub Check: New pull request (Hosted Running tests on windows-griffin)
  • GitHub Check: New pull request (Hosted Running tests with cover on linux-other)
  • GitHub Check: New pull request (Hosted Running tests on mac-other)
  • GitHub Check: New pull request (Hosted Running tests with cover on linux-pgwire)
  • GitHub Check: New pull request (Hosted Running tests on mac-pgwire)
  • GitHub Check: New pull request (Hosted Running tests on mac-cairo-fuzz)
  • GitHub Check: New pull request (Hosted Running tests with cover on linux-cairo)
  • GitHub Check: New pull request (Hosted Running tests on mac-cairo)
  • GitHub Check: New pull request (Hosted Running tests with cover on linux-fuzz)
  • GitHub Check: New pull request (SelfHosted Griffin And Fuzz tests Start ARM Agent)
  • GitHub Check: New pull request (Hosted Running tests on mac-griffin)
  • GitHub Check: New pull request (SelfHosted Griffin And Fuzz tests Start X64Zfs Agent)
  • GitHub Check: New pull request (Hosted Running tests with cover on linux-griffin)
  • GitHub Check: New pull request (Rust Test and Lint on linux-jdk17)
  • GitHub Check: New pull request (Check Changes Check changes)
🔇 Additional comments (33)
core/src/main/java/io/questdb/cutlass/pgwire/modern/PGWireServerModern.java (1)

122-125: Correct exception mapping to MessageProcessingException (LGTM).

Catching MessageProcessingException here is consistent with the rename and ensures protocol violations disconnect cleanly. Logging keeps using flyweight message safely.

core/src/test/java/io/questdb/test/cutlass/pgwire/PGErrorHandlingTest.java (1)

55-60: De-parameterized setup (LGTM).

Always using createDummyConfiguration() aligns with removing legacy mode. Setup remains clear and deterministic.

core/src/test/java/io/questdb/test/cutlass/pgwire/PgBootstrapTest.java (1)

46-46: LGTM: legacy-mode branching removed from setup

Unifying on createDummyConfiguration() simplifies the test bootstrap and aligns with legacy removal.

core/src/main/java/io/questdb/cutlass/pgwire/modern/CleartextPasswordPgWireAuthenticatorModern.java (2)

33-33: Consistent exception rename

Import updated to MessageProcessingException matches the refactor across the codebase.


376-412: LGTM: throws type updated

processInitMessage now throws MessageProcessingException and default case throws the new type. No functional changes otherwise.

core/src/test/java/io/questdb/test/cutlass/pgwire/Port0PGWireConfiguration.java (2)

36-36: LGTM: default ctor simplified

Delegating to single-arg ctor keeps configuration lean post-legacy removal.


39-41: LGTM: legacy flag removed

Constructor and fields pared back to connectionLimit only. Matches the consolidation to modern PGWire.

core/src/test/java/io/questdb/test/cutlass/pgwire/PGUpdateConcurrentTest.java (2)

218-223: WAL + explicit drain improves determinism

Adding "WAL" to partitioned table DDL and draining the WAL queue before starting threads reduces flakiness in concurrent update checks.


246-247: LGTM: drop row-count assertion for WAL updates

WAL mode returning a transaction id instead of affected rows is acknowledged; executing without asserting the count is correct here.

core/src/test/java/io/questdb/test/cutlass/pgwire/PGMultiStatementMessageTest.java (6)

290-295: LGTM: unify on CONN_AWARE_ALL

Removing legacy conditionals simplifies coverage across modes.


324-345: LGTM: consistent mode mask

Using CONN_AWARE_ALL maintains parity across test branches.


864-868: LGTM: DISCARD followed by SELECT under all modes

Good to validate behavior uniformly.


1054-1061: LGTM: RESET then SELECT under all modes

Unified mask is appropriate post-legacy cleanup.


1142-1146: LGTM: ROLLBACK then SELECT under all modes

Consistent with other transactional command tests.


1391-1397: LGTM: UNLISTEN then SELECT under all modes

Good to exercise both specific channel name and wildcard.

core/src/test/java/io/questdb/test/cutlass/pgwire/BasePGTest.java (1)

577-577: LGTM!

The removal of the legacy mode parameter from Port0PGWireConfiguration constructor aligns with the PR's objective to eliminate legacy PGWire server code.

core/src/main/java/io/questdb/cutlass/pgwire/MessageProcessingException.java (1)

36-110: Good refactoring: More descriptive exception name

The rename from BadProtocolException to MessageProcessingException provides better semantic clarity. The new name accurately reflects that this exception handles various message processing errors beyond just protocol violations.

core/src/main/java/io/questdb/cutlass/pgwire/modern/PGConnectionContextModern.java (4)

201-201: Good improvement: Making tasCache field final

Making tasCache final ensures thread-safety and prevents accidental reassignment. This aligns well with the removal of legacy code where this field might have been reassigned.


279-291: Consistent exception handling update

The method signature and error handling have been correctly updated to use MessageProcessingException. The error reporting logic remains intact while using the new exception type.


964-971: Proper error handling in msgKaput()

The method correctly creates a pipeline entry if needed before creating the exception, ensuring error messages are properly captured and can be reported to the client.


1138-1142: Correct exception handling in msgSync()

The catch block properly handles MessageProcessingException during commit operations. The comment clearly explains that sync cannot be aborted and errors will be reported to the client.

core/src/main/java/io/questdb/cutlass/pgwire/modern/PGPipelineEntry.java (12)

48-48: LGTM - Import statement correctly updated.

The import has been properly updated from BadProtocolException to MessageProcessingException as part of the exception type refactoring.


340-340: LGTM - Method signature correctly updated.

The method signature properly reflects the exception type change from BadProtocolException to MessageProcessingException while maintaining the same semantic behavior.


366-366: LGTM - Method signature correctly updated.

The compileNewSQL method signature has been properly updated to use MessageProcessingException instead of BadProtocolException.


399-400: LGTM - Exception handling correctly updated.

The catch block properly handles the new MessageProcessingException type while maintaining the same exception propagation logic.


428-428: LGTM - Method signature correctly updated.

The getInt helper method signature has been properly updated to throw MessageProcessingException for message validation failures.


451-451: LGTM - Method signature correctly updated.

The getShort helper method signature has been properly updated to use MessageProcessingException.


491-491: LGTM - Method signature correctly updated.

The method signature for msgBindCopyParameterFormatCodes has been properly updated to throw MessageProcessingException for protocol message processing errors.


530-530: LGTM - Method signature and exception handling correctly updated.

The method signature has been properly updated, and the exception throwing now uses MessageProcessingException.INSTANCE, which suggests a singleton pattern for performance optimization.

Also applies to: 552-552


587-587: LGTM - Method signature correctly updated.

The msgExecute method signature has been properly updated to throw MessageProcessingException for SQL execution and protocol processing errors.


677-677: LGTM - Exception handling correctly updated.

The catch block properly handles MessageProcessingException by rethrowing it, maintaining the same exception propagation behavior.


927-927: LGTM - Method signature correctly updated.

The ofSimpleQuery method signature has been properly updated to use MessageProcessingException for query processing errors.


1062-1062: LGTM - Comprehensive exception type refactoring correctly implemented.

All method signatures and exception handling have been consistently updated from BadProtocolException to MessageProcessingException. Key observations:

  • The kaput() utility method now returns MessageProcessingException instead of BadProtocolException
  • Parameter binding methods, validation methods, and protocol handling methods all use the new exception type
  • Exception catching and rethrowing logic maintains the same semantics
  • The changes are comprehensive and consistent across the entire class

This refactoring successfully unifies exception handling under the MessageProcessingException type while preserving all existing error handling behavior.

Also applies to: 1132-1132, 1336-1336, 1349-1349, 1393-1394, 1397-1397, 1417-1417, 1451-1451, 1504-1504, 1557-1557, 1850-1850, 2250-2250, 2426-2426, 2527-2527, 2567-2567, 2579-2579, 2593-2593, 2607-2607, 2617-2617, 2627-2627, 2637-2637, 2647-2647, 2659-2659, 2692-2692, 2704-2704, 2714-2714, 2846-2846

Comment on lines 45 to 46
return new PGWireServerModern(configuration, cairoEngine, networkSharedPool, registry, executionContextFactory);
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Unconditional modern server instantiation (LGTM).

Simplifying newInstance to always return PGWireServerModern matches the removal of legacy server code.

To be extra safe, run this script to confirm no lingering references to legacy classes/flags remain:


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "Scanning for legacy references..."
patterns=(
  'BadProtocolException'
  '\bPGWireServer\b(?!Modern)'
  '\bPGConnectionContext\b(?!Modern)'
  'CleartextPasswordPgWireAuthenticator(?!Modern)'
  'DefaultPgWireAuthenticatorFactory'
  'TypesAnd(Insert|Select|Update)\b'
  '\bisLegacyModeEnabled\s*\('
)
for p in "${patterns[@]}"; do
  echo "----- Pattern: $p"
  rg -n --hidden -g '!.git' -e "$p" || true
done

Length of output: 4469


Remove remaining legacy PGWire configuration flags

While newInstance now always returns PGWireServerModern, there are still lingering references to the legacy mode flag in configuration classes. These can be removed to complete the cleanup:

  • core/src/main/java/io/questdb/cutlass/pgwire/PGWireConfiguration.java
    · boolean isLegacyModeEnabled();
  • core/src/main/java/io/questdb/cutlass/pgwire/PGWireConfigurationWrapper.java
    · public boolean isLegacyModeEnabled() { return getDelegate().isLegacyModeEnabled(); }
  • core/src/main/java/io/questdb/cutlass/pgwire/DefaultPGWireConfiguration.java
    · public boolean isLegacyModeEnabled() { … }
  • core/src/main/java/io/questdb/PropServerConfiguration.java
    · Generated delegate for isLegacyModeEnabled()

Please remove these methods and any associated fields, as they are no longer used now that only the modern server implementation remains.

🤖 Prompt for AI Agents
In core/src/main/java/io/questdb/cutlass/pgwire/PGWireConfiguration.java,
PGWireConfigurationWrapper.java, DefaultPGWireConfiguration.java, and
core/src/main/java/io/questdb/PropServerConfiguration.java, remove the
isLegacyModeEnabled() method and any related fields or delegate methods. These
legacy configuration flags are no longer needed since newInstance always returns
PGWireServerModern, so clean up all references to legacy mode to complete the
removal.

Copy link
Copy Markdown
Member Author

@bluestreak01 bluestreak01 Aug 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed here c379736

@glasstiger
Copy link
Copy Markdown
Contributor

[PR Coverage check]

😍 pass : 95 / 101 (94.06%)

file detail

path covered line new line coverage
🔵 io/questdb/cutlass/pgwire/PGUtils.java 0 1 00.00%
🔵 io/questdb/cutlass/pgwire/PGNonNullBinaryArrayView.java 3 4 75.00%
🔵 io/questdb/cutlass/pgwire/PGCleartextPasswordAuthenticator.java 5 6 83.33%
🔵 io/questdb/cutlass/pgwire/PGPipelineEntry.java 11 13 84.62%
🔵 io/questdb/ServerMain.java 7 8 87.50%
🔵 io/questdb/PropServerConfiguration.java 3 3 100.00%
🔵 io/questdb/DefaultFactoryProvider.java 1 1 100.00%
🔵 io/questdb/cutlass/pgwire/PGServer.java 4 4 100.00%
🔵 io/questdb/Metrics.java 3 3 100.00%
🔵 io/questdb/cairo/FlushQueryCacheJob.java 3 3 100.00%
🔵 io/questdb/cutlass/pgwire/DefaultPGCircuitBreakerRegistry.java 1 1 100.00%
🔵 io/questdb/cutlass/pgwire/DefaultPGAuthenticatorFactory.java 4 4 100.00%
🔵 io/questdb/cutlass/pgwire/PGMessageProcessingException.java 5 5 100.00%
🔵 io/questdb/DynamicPropServerConfiguration.java 1 1 100.00%
🔵 io/questdb/DynamicUsernamePasswordMatcher.java 1 1 100.00%
🔵 io/questdb/FactoryProviderImpl.java 2 2 100.00%
🔵 io/questdb/cutlass/pgwire/PGHexTestsCircuitBreakRegistry.java 1 1 100.00%
🔵 io/questdb/cutlass/pgwire/PGConfigurationWrapper.java 2 2 100.00%
🔵 io/questdb/cutlass/pgwire/PGMetrics.java 1 1 100.00%
🔵 io/questdb/cutlass/pgwire/DefaultPGConfiguration.java 1 1 100.00%
🔵 io/questdb/cutlass/Services.java 3 3 100.00%
🔵 io/questdb/cutlass/pgwire/TypesAndSelect.java 12 12 100.00%
🔵 io/questdb/DefaultServerConfiguration.java 1 1 100.00%
🔵 io/questdb/griffin/RecordToRowCopierUtils.java 2 2 100.00%
🔵 io/questdb/cutlass/pgwire/TypesAndInsert.java 18 18 100.00%

@bluestreak01 bluestreak01 merged commit 312b77d into master Aug 12, 2025
35 checks passed
@bluestreak01 bluestreak01 deleted the vi_minus_legacy branch August 12, 2025 17:25
@coderabbitai coderabbitai bot mentioned this pull request Nov 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants