diff --git a/data/xml/queries.xml b/data/xml/queries.xml
index 37a4b0c2a6..a393f17c38 100644
--- a/data/xml/queries.xml
+++ b/data/xml/queries.xml
@@ -1785,4 +1785,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/controller/handler.py b/lib/controller/handler.py
index 2448bedfc3..b0d6778bf5 100644
--- a/lib/controller/handler.py
+++ b/lib/controller/handler.py
@@ -41,6 +41,7 @@
from lib.core.settings import SYBASE_ALIASES
from lib.core.settings import VERTICA_ALIASES
from lib.core.settings import VIRTUOSO_ALIASES
+from lib.core.settings import SNOWFLAKE_ALIASES
from lib.utils.sqlalchemy import SQLAlchemy
from plugins.dbms.access.connector import Connector as AccessConn
@@ -99,6 +100,8 @@
from plugins.dbms.vertica import VerticaMap
from plugins.dbms.virtuoso.connector import Connector as VirtuosoConn
from plugins.dbms.virtuoso import VirtuosoMap
+from plugins.dbms.snowflake.connector import Connector as SnowflakeConn
+from plugins.dbms.snowflake import SnowflakeMap
def setHandler():
"""
@@ -107,6 +110,7 @@ def setHandler():
"""
items = [
+ (DBMS.SNOWFLAKE, SNOWFLAKE_ALIASES, SnowflakeMap, SnowflakeConn),
(DBMS.MYSQL, MYSQL_ALIASES, MySQLMap, MySQLConn),
(DBMS.ORACLE, ORACLE_ALIASES, OracleMap, OracleConn),
(DBMS.PGSQL, PGSQL_ALIASES, PostgreSQLMap, PostgreSQLConn),
@@ -135,6 +139,7 @@ def setHandler():
(DBMS.FRONTBASE, FRONTBASE_ALIASES, FrontBaseMap, FrontBaseConn),
(DBMS.RAIMA, RAIMA_ALIASES, RaimaMap, RaimaConn),
(DBMS.VIRTUOSO, VIRTUOSO_ALIASES, VirtuosoMap, VirtuosoConn),
+ # TODO: put snowflake stuff on this line
]
_ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items)
diff --git a/lib/core/dicts.py b/lib/core/dicts.py
index 8d929e4214..26fa54a226 100644
--- a/lib/core/dicts.py
+++ b/lib/core/dicts.py
@@ -39,6 +39,7 @@
from lib.core.settings import VERTICA_ALIASES
from lib.core.settings import VIRTUOSO_ALIASES
from lib.core.settings import CLICKHOUSE_ALIASES
+from lib.core.settings import SNOWFLAKE_ALIASES
FIREBIRD_TYPES = {
261: "BLOB",
@@ -250,6 +251,7 @@
DBMS.FRONTBASE: (FRONTBASE_ALIASES, None, None, None),
DBMS.RAIMA: (RAIMA_ALIASES, None, None, None),
DBMS.VIRTUOSO: (VIRTUOSO_ALIASES, None, None, None),
+ DBMS.SNOWFLAKE: (SNOWFLAKE_ALIASES, None, None, "snowflake"),
}
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/
diff --git a/lib/core/enums.py b/lib/core/enums.py
index 6baec94364..6251d82d46 100644
--- a/lib/core/enums.py
+++ b/lib/core/enums.py
@@ -60,6 +60,7 @@ class DBMS(object):
FRONTBASE = "FrontBase"
RAIMA = "Raima Database Manager"
VIRTUOSO = "Virtuoso"
+ SNOWFLAKE = "Snowflake"
class DBMS_DIRECTORY_NAME(object):
ACCESS = "access"
@@ -90,6 +91,7 @@ class DBMS_DIRECTORY_NAME(object):
FRONTBASE = "frontbase"
RAIMA = "raima"
VIRTUOSO = "virtuoso"
+ SNOWFLAKE = "snowflake"
class FORK(object):
MARIADB = "MariaDB"
diff --git a/lib/core/settings.py b/lib/core/settings.py
index 2e6f079762..10444e1831 100644
--- a/lib/core/settings.py
+++ b/lib/core/settings.py
@@ -292,6 +292,7 @@
FRONTBASE_SYSTEM_DBS = ("DEFINITION_SCHEMA", "INFORMATION_SCHEMA")
RAIMA_SYSTEM_DBS = ("",)
VIRTUOSO_SYSTEM_DBS = ("",)
+SNOWFLAKE_SYSTEM_DBS = ("INFORMATION_SCHEMA",)
# Note: () + ()
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
@@ -322,10 +323,11 @@
FRONTBASE_ALIASES = ("frontbase",)
RAIMA_ALIASES = ("raima database manager", "raima", "raimadb", "raimadm", "rdm", "rds", "velocis")
VIRTUOSO_ALIASES = ("virtuoso", "openlink virtuoso")
+SNOWFLAKE_ALIASES = ("snowflake",)
DBMS_DIRECTORY_DICT = dict((getattr(DBMS, _), getattr(DBMS_DIRECTORY_NAME, _)) for _ in dir(DBMS) if not _.startswith("_"))
-SUPPORTED_DBMS = set(MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES + MONETDB_ALIASES + DERBY_ALIASES + VERTICA_ALIASES + MCKOI_ALIASES + PRESTO_ALIASES + ALTIBASE_ALIASES + MIMERSQL_ALIASES + CLICKHOUSE_ALIASES + CRATEDB_ALIASES + CUBRID_ALIASES + CACHE_ALIASES + EXTREMEDB_ALIASES + RAIMA_ALIASES + VIRTUOSO_ALIASES)
+SUPPORTED_DBMS = set(MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES + MONETDB_ALIASES + DERBY_ALIASES + VERTICA_ALIASES + MCKOI_ALIASES + PRESTO_ALIASES + ALTIBASE_ALIASES + MIMERSQL_ALIASES + CLICKHOUSE_ALIASES + CRATEDB_ALIASES + CUBRID_ALIASES + CACHE_ALIASES + EXTREMEDB_ALIASES + RAIMA_ALIASES + VIRTUOSO_ALIASES + SNOWFLAKE_ALIASES)
SUPPORTED_OS = ("linux", "windows")
DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES), (DBMS.H2, H2_ALIASES), (DBMS.INFORMIX, INFORMIX_ALIASES), (DBMS.MONETDB, MONETDB_ALIASES), (DBMS.DERBY, DERBY_ALIASES), (DBMS.VERTICA, VERTICA_ALIASES), (DBMS.MCKOI, MCKOI_ALIASES), (DBMS.PRESTO, PRESTO_ALIASES), (DBMS.ALTIBASE, ALTIBASE_ALIASES), (DBMS.MIMERSQL, MIMERSQL_ALIASES), (DBMS.CLICKHOUSE, CLICKHOUSE_ALIASES), (DBMS.CRATEDB, CRATEDB_ALIASES), (DBMS.CUBRID, CUBRID_ALIASES), (DBMS.CACHE, CACHE_ALIASES), (DBMS.EXTREMEDB, EXTREMEDB_ALIASES), (DBMS.FRONTBASE, FRONTBASE_ALIASES), (DBMS.RAIMA, RAIMA_ALIASES), (DBMS.VIRTUOSO, VIRTUOSO_ALIASES))
diff --git a/plugins/dbms/snowflake/__init__.py b/plugins/dbms/snowflake/__init__.py
new file mode 100644
index 0000000000..e15e4b327d
--- /dev/null
+++ b/plugins/dbms/snowflake/__init__.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.enums import DBMS
+from lib.core.settings import SNOWFLAKE_SYSTEM_DBS
+from lib.core.unescaper import unescaper
+from plugins.dbms.snowflake.enumeration import Enumeration
+from plugins.dbms.snowflake.filesystem import Filesystem
+from plugins.dbms.snowflake.fingerprint import Fingerprint
+from plugins.dbms.snowflake.syntax import Syntax
+from plugins.dbms.snowflake.takeover import Takeover
+from plugins.generic.misc import Miscellaneous
+
+class SnowflakeMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover):
+ """
+ This class defines Snowflake methods
+ """
+
+ def __init__(self):
+ self.excludeDbsList = SNOWFLAKE_SYSTEM_DBS
+
+ for cls in self.__class__.__bases__:
+ cls.__init__(self)
+
+ unescaper[DBMS.SNOWFLAKE] = Syntax.escape
diff --git a/plugins/dbms/snowflake/connector.py b/plugins/dbms/snowflake/connector.py
new file mode 100644
index 0000000000..8fefd39cb7
--- /dev/null
+++ b/plugins/dbms/snowflake/connector.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+try:
+ import snowflake.connector
+except:
+ pass
+
+import logging
+
+from lib.core.common import getSafeExString
+from lib.core.convert import getText
+from lib.core.data import conf
+from lib.core.data import logger
+from lib.core.exception import SqlmapConnectionException
+from plugins.generic.connector import Connector as GenericConnector
+
+class Connector(GenericConnector):
+ """
+ Homepage: https://www.snowflake.com/
+ User guide: https://docs.snowflake.com/en/developer-guide/python-connector/python-connector
+ API: https://docs.snowflake.com/en/developer-guide/python-connector/python-connector-api
+ """
+
+ def __init__(self):
+ GenericConnector.__init__(self)
+
+ def connect(self):
+ self.initConnection()
+
+ try:
+ self.connector = snowflake.connector.connect(
+ user=self.user,
+ password=self.password,
+ account=self.account,
+ warehouse=self.warehouse,
+ database=self.db,
+ schema=self.schema
+ )
+ cursor = self.connector.cursor()
+ cursor.execute("SELECT CURRENT_VERSION()")
+ cursor.close()
+
+ except Exception as ex:
+ raise SqlmapConnectionException(getSafeExString(ex))
+
+ self.initCursor()
+ self.printConnected()
+
+ def fetchall(self):
+ try:
+ return self.cursor.fetchall()
+ except Exception as ex:
+ logger.log(logging.WARNING if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))
+ return None
+
+ def execute(self, query):
+ try:
+ self.cursor.execute(getText(query))
+ except Exception as ex:
+ logger.log(logging.WARNING if conf.dbmsHandler else logging.DEBUG, "(remote) '%s'" % getSafeExString(ex))
+ return None
+
+ def select(self, query):
+ self.execute(query)
+ return self.fetchall()
diff --git a/plugins/dbms/snowflake/enumeration.py b/plugins/dbms/snowflake/enumeration.py
new file mode 100644
index 0000000000..a92bd7c9c5
--- /dev/null
+++ b/plugins/dbms/snowflake/enumeration.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.data import logger
+from lib.core.exception import SqlmapUnsupportedFeatureException
+from plugins.generic.enumeration import Enumeration as GenericEnumeration
+
+class Enumeration(GenericEnumeration):
+ def getPasswordHashes(self):
+ warnMsg = "on Snowflake it is not possible to enumerate the user password hashes"
+ logger.warning(warnMsg)
+ return {}
+
+ def getHostname(self):
+ warnMsg = "on Snowflake it is not possible to enumerate the hostname"
+ logger.warning(warnMsg)
+
+ def searchDb(self):
+ warnMsg = "on Snowflake it is not possible to search databases"
+ logger.warning(warnMsg)
+ return []
+
+ def searchColumn(self):
+ errMsg = "on Snowflake it is not possible to search columns"
+ raise SqlmapUnsupportedFeatureException(errMsg)
+
+ def getPrivileges(self, *args, **kwargs):
+ warnMsg = "on SQLite it is not possible to enumerate the user privileges"
+ logger.warning(warnMsg)
+ return {}
+
+ def getStatements(self):
+ warnMsg = "on Snowflake it is not possible to enumerate the SQL statements"
+ logger.warning(warnMsg)
+ return []
diff --git a/plugins/dbms/snowflake/filesystem.py b/plugins/dbms/snowflake/filesystem.py
new file mode 100644
index 0000000000..7a5da903e5
--- /dev/null
+++ b/plugins/dbms/snowflake/filesystem.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.exception import SqlmapUnsupportedFeatureException
+from plugins.generic.filesystem import Filesystem as GenericFilesystem
+
+class Filesystem(GenericFilesystem):
+ def readFile(self, remoteFile):
+ errMsg = "on Snowflake it is not possible to read files"
+ raise SqlmapUnsupportedFeatureException(errMsg)
+
+ def writeFile(self, localFile, remoteFile, fileType=None, forceCheck=False):
+ errMsg = "on Snowflake it is not possible to write files"
+ raise SqlmapUnsupportedFeatureException(errMsg)
diff --git a/plugins/dbms/snowflake/fingerprint.py b/plugins/dbms/snowflake/fingerprint.py
new file mode 100644
index 0000000000..a5a8d794f7
--- /dev/null
+++ b/plugins/dbms/snowflake/fingerprint.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.common import Backend
+from lib.core.common import Format
+from lib.core.data import conf
+from lib.core.data import kb
+from lib.core.data import logger
+from lib.core.enums import DBMS
+from lib.core.session import setDbms
+from lib.core.settings import METADB_SUFFIX
+from lib.core.settings import SNOWFLAKE_ALIASES
+from lib.request import inject
+from plugins.generic.fingerprint import Fingerprint as GenericFingerprint
+
+class Fingerprint(GenericFingerprint):
+ def __init__(self):
+ GenericFingerprint.__init__(self, DBMS.SNOWFLAKE)
+
+ def getFingerprint(self):
+ value = ""
+ wsOsFp = Format.getOs("web server", kb.headersFp)
+
+ if wsOsFp:
+ value += "%s\n" % wsOsFp
+
+ if kb.data.banner:
+ dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)
+
+ if dbmsOsFp:
+ value += "%s\n" % dbmsOsFp
+
+ value += "back-end DBMS: "
+
+ if not conf.extensiveFp:
+ value += DBMS.SNOWFLAKE
+ return value
+
+ actVer = Format.getDbms()
+ blank = " " * 15
+ value += "active fingerprint: %s" % actVer
+
+ if kb.bannerFp:
+ banVer = kb.bannerFp.get("dbmsVersion")
+
+ if banVer:
+ banVer = Format.getDbms([banVer])
+ value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)
+
+ htmlErrorFp = Format.getErrorParsedDBMSes()
+
+ if htmlErrorFp:
+ value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)
+
+ return value
+
+ def checkDbms(self):
+ """
+ References for fingerprint:
+
+ * https://docs.snowflake.com/en/sql-reference/functions/current_warehouse
+ * https://docs.snowflake.com/en/sql-reference/functions/md5_number_upper64
+ """
+
+ if not conf.extensiveFp and Backend.isDbmsWithin(SNOWFLAKE_ALIASES):
+ setDbms("%s %s" % (DBMS.SNOWFLAKE, Backend.getVersion()))
+ self.getBanner()
+ return True
+
+ infoMsg = "testing %s" % DBMS.SNOWFLAKE
+ logger.info(infoMsg)
+
+ result = inject.checkBooleanExpression("CURRENT_WAREHOUSE()=CURRENT_WAREHOUSE()")
+ if result:
+ infoMsg = "confirming %s" % DBMS.SNOWFLAKE
+ logger.info(infoMsg)
+
+ result = inject.checkBooleanExpression("MD5_NUMBER_UPPER64('z')=MD5_NUMBER_UPPER64('z')")
+ if not result:
+ warnMsg = "the back-end DBMS is not %s" % DBMS.SNOWFLAKE
+ logger.warning(warnMsg)
+ return False
+
+ setDbms(DBMS.SNOWFLAKE)
+ self.getBanner()
+ return True
+
+ else:
+ warnMsg = "the back-end DBMS is not %s" % DBMS.SNOWFLAKE
+ logger.warning(warnMsg)
+
+ return False
\ No newline at end of file
diff --git a/plugins/dbms/snowflake/syntax.py b/plugins/dbms/snowflake/syntax.py
new file mode 100644
index 0000000000..2bef381603
--- /dev/null
+++ b/plugins/dbms/snowflake/syntax.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.convert import getOrds
+from plugins.generic.syntax import Syntax as GenericSyntax
+
+class Syntax(GenericSyntax):
+ @staticmethod
+ def escape(expression, quote=True):
+ """
+ >>> Syntax.escape("SELECT 'abcdefgh' FROM foobar") == "SELECT CHR(97)||CHR(98)||CHR(99)||CHR(100)||CHR(101)||CHR(102)||CHR(103)||CHR(104) FROM foobar"
+ True
+ """
+
+ def escaper(value):
+ # Convert each character to its ASCII code and wrap with CHR()
+ return "||".join(f"CHR({ord(c)})" for c in value)
+
+ return Syntax._escape(expression, quote, escaper)
diff --git a/plugins/dbms/snowflake/takeover.py b/plugins/dbms/snowflake/takeover.py
new file mode 100644
index 0000000000..22a5f429c2
--- /dev/null
+++ b/plugins/dbms/snowflake/takeover.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+"""
+Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
+See the file 'LICENSE' for copying permission
+"""
+
+from lib.core.exception import SqlmapUnsupportedFeatureException
+from plugins.generic.takeover import Takeover as GenericTakeover
+
+class Takeover(GenericTakeover):
+ def osCmd(self):
+ errMsg = "on Snowflake it is not possible to execute commands"
+ raise SqlmapUnsupportedFeatureException(errMsg)
+
+ def osShell(self):
+ errMsg = "on Snowflake it is not possible to execute commands"
+ raise SqlmapUnsupportedFeatureException(errMsg)
+
+ def osPwn(self):
+ errMsg = "on Snowflake it is not possible to establish an "
+ errMsg += "out-of-band connection"
+ raise SqlmapUnsupportedFeatureException(errMsg)
+
+ def osSmb(self):
+ errMsg = "on Snowflake it is not possible to establish an "
+ errMsg += "out-of-band connection"
+ raise SqlmapUnsupportedFeatureException(errMsg)
diff --git a/plugins/generic/databases.py b/plugins/generic/databases.py
index 002d1f4756..fee6bc832d 100644
--- a/plugins/generic/databases.py
+++ b/plugins/generic/databases.py
@@ -621,7 +621,7 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMod
condQueryStr = "%%s%s" % colCondParam
condQuery = " AND (%s)" % " OR ".join(condQueryStr % (condition, unsafeSQLIdentificatorNaming(col)) for col in sorted(colList))
- if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.FRONTBASE, DBMS.VIRTUOSO, DBMS.CLICKHOUSE):
+ if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.FRONTBASE, DBMS.VIRTUOSO, DBMS.CLICKHOUSE, DBMS.SNOWFLAKE):
query = rootQuery.inband.query % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(conf.db))
query += condQuery
@@ -757,7 +757,7 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMod
condQueryStr = "%%s%s" % colCondParam
condQuery = " AND (%s)" % " OR ".join(condQueryStr % (condition, unsafeSQLIdentificatorNaming(col)) for col in sorted(colList))
- if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.FRONTBASE, DBMS.VIRTUOSO, DBMS.CLICKHOUSE):
+ if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.FRONTBASE, DBMS.VIRTUOSO, DBMS.CLICKHOUSE, DBMS.SNOWFLAKE):
query = rootQuery.blind.count % (unsafeSQLIdentificatorNaming(tbl), unsafeSQLIdentificatorNaming(conf.db))
query += condQuery
diff --git a/plugins/generic/entries.py b/plugins/generic/entries.py
index 1edab6fd36..a844f2452e 100644
--- a/plugins/generic/entries.py
+++ b/plugins/generic/entries.py
@@ -187,7 +187,7 @@ def dumpTable(self, foundData=None):
if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.DERBY, DBMS.ALTIBASE, DBMS.MIMERSQL):
query = rootQuery.inband.query % (colString, tbl.upper() if not conf.db else ("%s.%s" % (conf.db.upper(), tbl.upper())))
- elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD, DBMS.MAXDB, DBMS.MCKOI, DBMS.EXTREMEDB, DBMS.RAIMA):
+ elif Backend.getIdentifiedDbms() in (DBMS.SQLITE, DBMS.ACCESS, DBMS.FIREBIRD, DBMS.MAXDB, DBMS.MCKOI, DBMS.EXTREMEDB, DBMS.RAIMA, DBMS.SNOWFLAKE):
query = rootQuery.inband.query % (colString, tbl)
elif Backend.getIdentifiedDbms() in (DBMS.SYBASE, DBMS.MSSQL):
# Partial inband and error