From 6583472ccfdaf3de4c9c263f4bbe2ec699b5e9f7 Mon Sep 17 00:00:00 2001 From: User Date: Fri, 22 Aug 2025 11:15:52 +0800 Subject: [PATCH] Optimize Apache Doris detection with more reliable logic - Use VERSION()='5.7.99' as primary fingerprint (Apache Doris hardcoded value) - Add dual verification: VERSION()='5.7.99' AND @@VERSION_COMMENT LIKE '%Doris%' - Prioritize StarRocks detection to avoid confusion - Provide fallback detection for restricted environments - Based on official Doris documentation: version() always returns '5.7.99' This implementation follows best practices: 1. StarRocks checked first (returns real versions like 5.1.0) 2. Combined verification for Apache Doris (5.7.99 + banner) 3. Fallback to version-only detection when VERSION_COMMENT inaccessible 4. Leverages the fact that MySQL never released version 5.7.99 --- plugins/dbms/mysql/fingerprint.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/dbms/mysql/fingerprint.py b/plugins/dbms/mysql/fingerprint.py index 8647bd266..bd4fcec3f 100644 --- a/plugins/dbms/mysql/fingerprint.py +++ b/plugins/dbms/mysql/fingerprint.py @@ -105,12 +105,12 @@ class Fingerprint(GenericFingerprint): fork = FORK.PERCONA elif inject.checkBooleanExpression("AURORA_VERSION() LIKE '%'"): # Reference: https://aws.amazon.com/premiumsupport/knowledge-center/aurora-version-number/ fork = FORK.AURORA - elif inject.checkBooleanExpression("VERSION() LIKE '5.7.99'"): # Reference: Apache Doris returns fixed version 5.7.99 for MySQL compatibility - fork = FORK.DORIS - elif inject.checkBooleanExpression("@@VERSION_COMMENT LIKE '%Doris%'"): # Reference: Apache Doris version comment contains 'Doris' - fork = FORK.DORIS - elif inject.checkBooleanExpression("@@VERSION_COMMENT LIKE '%StarRocks%'"): # Reference: StarRocks version comment contains 'StarRocks' + elif inject.checkBooleanExpression("@@VERSION_COMMENT LIKE '%StarRocks%'"): # Reference: StarRocks version comment contains 'StarRocks' - check first to avoid confusion fork = FORK.STARROCKS + elif inject.checkBooleanExpression("VERSION()='5.7.99' AND @@VERSION_COMMENT LIKE '%Doris%'"): # Reference: Apache Doris hardcoded version 5.7.99 + banner confirmation + fork = FORK.DORIS + elif inject.checkBooleanExpression("VERSION()='5.7.99'"): # Reference: Apache Doris hardcoded version 5.7.99 (fallback if VERSION_COMMENT inaccessible) + fork = FORK.DORIS else: fork = ""