Improve Apache Doris and StarRocks detection logic

- Use VERSION() = '5.7.99' as primary Doris fingerprint (more reliable than BITMAP functions)
- Add @@VERSION_COMMENT checks for both Doris and StarRocks
- Add StarRocks fork detection to avoid misidentification
- Remove unreliable BITMAP_UNION_COUNT() as sole detection method

This addresses the issue where BITMAP_UNION_COUNT() alone could misidentify
StarRocks or other bitmap-compatible systems as Doris. The new multi-step
detection logic provides more accurate database identification.
This commit is contained in:
User 2025-08-22 10:47:00 +08:00
parent 68ebb7d0aa
commit e342e7f37d
3 changed files with 7 additions and 2 deletions

View File

@ -109,6 +109,7 @@ class FORK(object):
OPENGAUSS = "OpenGauss"
DM8 = "DM8"
DORIS = "Doris"
STARROCKS = "StarRocks"
class CUSTOM_LOGGING(object):
PAYLOAD = 9

View File

@ -295,7 +295,7 @@ VIRTUOSO_SYSTEM_DBS = ("",)
# Note: (<regular>) + (<forks>)
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
MYSQL_ALIASES = ("mysql", "my") + ("mariadb", "maria", "memsql", "tidb", "percona", "drizzle", "doris")
MYSQL_ALIASES = ("mysql", "my") + ("mariadb", "maria", "memsql", "tidb", "percona", "drizzle", "doris", "starrocks")
PGSQL_ALIASES = ("postgresql", "postgres", "pgsql", "psql", "pg") + ("cockroach", "cockroachdb", "amazon redshift", "redshift", "greenplum", "yellowbrick", "enterprisedb", "yugabyte", "yugabytedb", "opengauss")
ORACLE_ALIASES = ("oracle", "orcl", "ora", "or")
SQLITE_ALIASES = ("sqlite", "sqlite3")

View File

@ -105,8 +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("BITMAP_UNION_COUNT(NULL) IS NULL"): # Reference: Apache Doris specific BITMAP functions
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'
fork = FORK.STARROCKS
else:
fork = ""