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

Skip to content

Commit 0e4232f

Browse files
committed
Adding support for CrateDB
1 parent e448905 commit 0e4232f

21 files changed

Lines changed: 401 additions & 60 deletions

data/xml/queries.xml

Lines changed: 75 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

33
<root>
4-
<!-- MySQL -->
54
<dbms value="MySQL">
65
<!-- http://dba.fyicenter.com/faq/mysql/Difference-between-CHAR-and-NCHAR.html -->
76
<cast query="CAST(%s AS NCHAR)"/>
@@ -78,7 +77,6 @@
7877
</search_column>
7978
</dbms>
8079

81-
<!-- PostgreSQL -->
8280
<dbms value="PostgreSQL">
8381
<cast query="CAST(%s AS CHARACTER(10000))"/>
8482
<length query="LENGTH(%s)"/>
@@ -153,7 +151,6 @@
153151
</search_column>
154152
</dbms>
155153

156-
<!-- Microsoft SQL Server -->
157154
<dbms value="Microsoft SQL Server">
158155
<cast query="CAST(%s AS NVARCHAR(4000))"/>
159156
<length query="LTRIM(STR(LEN(%s)))"/>
@@ -225,7 +222,6 @@
225222
</search_column>
226223
</dbms>
227224

228-
<!-- Oracle -->
229225
<dbms value="Oracle">
230226
<cast query="CAST(%s AS VARCHAR(4000))"/>
231227
<length query="LENGTH(%s)"/>
@@ -322,7 +318,6 @@
322318
</search_column>
323319
</dbms>
324320

325-
<!-- SQLite -->
326321
<dbms value="SQLite">
327322
<cast query="CAST(%s AS TEXT)" dbms_version="&gt;=3.0"/>
328323
<!-- NOTE: On SQLite version 2 everything is stored as a string (Reference: http://www.mono-project.com/SQLite) -->
@@ -376,7 +371,6 @@
376371
<search_column/>
377372
</dbms>
378373

379-
<!-- Microsoft Access -->
380374
<dbms value="Microsoft Access">
381375
<cast query="RTRIM(CVAR(%s))"/>
382376
<length query="LEN(RTRIM(CVAR(%s)))"/>
@@ -421,7 +415,6 @@
421415
<search_column/>
422416
</dbms>
423417

424-
<!-- Firebird -->
425418
<dbms value="Firebird">
426419
<cast query="TRIM(CAST(%s AS VARCHAR(10000)))"/>
427420
<length query="CHAR_LENGTH(TRIM(%s))"/>
@@ -478,12 +471,6 @@
478471
<search_column/>
479472
</dbms>
480473

481-
<!-- SAP MaxDB -->
482-
<!-- http://dev.mysql.com/tech-resources/articles/maxdb-php-ready-for-web.html -->
483-
<!-- http://dev.mysql.com/doc/refman/5.0/es/maxdb-reserved-words.html -->
484-
<!-- http://maxdb.sap.com/doc/7_6/default.htm -->
485-
<!-- http://www.sapdb.org/7.4/htmhelp/35/f8823cb7e5d42be10000000a114027/content.htm -->
486-
<!-- http://www.ximido.de/research/PenTestingMaxDB.pdf -->
487474
<dbms value="SAP MaxDB">
488475
<length query="LENGTH(%s)"/>
489476
<isnull query="VALUE(%s,' ')" query2="IFNULL(%s,' ')"/>
@@ -536,7 +523,6 @@
536523
</dump_table>
537524
</dbms>
538525

539-
<!-- Sybase -->
540526
<dbms value="Sybase">
541527
<cast query="CONVERT(VARCHAR(4000),%s)"/>
542528
<length query="LTRIM(STR(LEN(%s)))"/>
@@ -606,7 +592,6 @@
606592
</search_column>
607593
</dbms>
608594

609-
<!-- IBM DB2 -->
610595
<dbms value="IBM DB2">
611596
<!-- Casting to varchar does not work with version < v9, so we had to use char(254) instead -->
612597
<cast query="RTRIM(CAST(%s AS CHAR(254)))"/>
@@ -679,7 +664,6 @@
679664
</search_column>
680665
</dbms>
681666

682-
<!-- Hyper SQL Database -->
683667
<dbms value="HSQLDB">
684668
<cast query="CAST(%s AS LONGVARCHAR)"/>
685669
<length query="CHAR_LENGTH(%s)"/>
@@ -813,9 +797,6 @@
813797
</search_column>
814798
</dbms>
815799

816-
<!-- Informix -->
817-
<!-- https://www.ibm.com/support/knowledgecenter/SSGU8G_11.70.0/com.ibm.sqlr.doc/ids_sqr_072.htm -->
818-
<!-- https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sec.doc/ids_am_041.htm -->
819800
<dbms value="Informix">
820801
<cast query="RTRIM(TO_CHAR(%s))"/>
821802
<length query="CHAR_LENGTH(RTRIM(%s))"/>
@@ -877,7 +858,6 @@
877858
<search_column/>
878859
</dbms>
879860

880-
<!-- MonetDB -->
881861
<dbms value="MonetDB">
882862
<cast query="CAST(%s AS VARCHAR(4000))"/>
883863
<length query="LENGTH(%s)"/>
@@ -942,7 +922,6 @@
942922
</search_column>
943923
</dbms>
944924

945-
<!-- Apache Derby -->
946925
<dbms value="Apache Derby">
947926
<!-- NOTE: CHAR(%s) causes 'A truncation error was encountered trying to shrink CHAR' -->
948927
<cast query="RTRIM(CAST(%s AS CHAR(254)))"/>
@@ -1011,7 +990,6 @@
1011990
</search_column>
1012991
</dbms>
1013992

1014-
<!-- Vertica -->
1015993
<dbms value="Vertica">
1016994
<cast query="CAST(%s AS CHARACTER(10000))"/>
1017995
<length query="LENGTH(%s)"/>
@@ -1088,9 +1066,8 @@
10881066
</search_column>
10891067
</dbms>
10901068

1091-
<!-- Mckoi -->
1092-
<!-- NOTE: DBMS with minimalistic set of (restricted) features -->
10931069
<dbms value="Mckoi">
1070+
<!-- NOTE: DBMS with minimalistic set of (restricted) features -->
10941071
<cast query="CONCAT('',%s)"/>
10951072
<length query="LENGTH(%s)"/>
10961073
<isnull query="IF(%s IS NULL,' ', %s)"/>
@@ -1130,7 +1107,6 @@
11301107
<search_column/>
11311108
</dbms>
11321109

1133-
<!-- Presto -->
11341110
<dbms value="Presto">
11351111
<cast query="CAST(%s AS VARCHAR(4000))"/>
11361112
<length query="LENGTH(%s)"/>
@@ -1192,7 +1168,6 @@
11921168
</search_column>
11931169
</dbms>
11941170

1195-
<!-- Altibase -->
11961171
<dbms value="Altibase">
11971172
<cast query="CAST(%s AS VARCHAR(4000))"/>
11981173
<length query="LENGTH(%s)"/>
@@ -1265,9 +1240,8 @@
12651240
</search_column>
12661241
</dbms>
12671242

1268-
<!-- MimerSQL -->
1269-
<!-- NOTE: DBMS with stohastic output of rows (ORDER BY required) -->
12701243
<dbms value="MimerSQL">
1244+
<!-- NOTE: DBMS with stohastic output of rows (ORDER BY required) -->
12711245
<!-- NOTE: NVARCHAR(4000) causes problems in boolean (e.g. 'Required temporary table row length is 32006, only 32000 is possible') -->
12721246
<cast query="CAST(%s AS NVARCHAR(1000))"/>
12731247
<length query="CHAR_LENGTH(%s)"/>
@@ -1334,4 +1308,77 @@
13341308
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s ORDER BY table_schema" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s' ORDER BY table_name" 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"/>
13351309
</search_column>
13361310
</dbms>
1311+
1312+
<dbms value="CrateDB">
1313+
<cast query="CAST(%s AS TEXT)"/>
1314+
<length query="CHAR_LENGTH((%s)::text)"/>
1315+
<isnull query="COALESCE(%s,' ')"/>
1316+
<delimiter query="||"/>
1317+
<limit query="LIMIT %d OFFSET %d"/>
1318+
<limitregexp query="\s+LIMIT\s+([\d]+)\s+OFFSET\s+([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
1319+
<limitgroupstart query="2"/>
1320+
<limitgroupstop query="1"/>
1321+
<limitstring query=" LIMIT "/>
1322+
<order query="ORDER BY %s ASC"/>
1323+
<count query="COUNT(%s)"/>
1324+
<!-- NOTE: non-; version(s) doesn't work properly -->
1325+
<comment query=";--" query2=";/*"/>
1326+
<substring query="SUBSTR((%s)::text,%d,%d)"/>
1327+
<concatenate query="%s||%s"/>
1328+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
1329+
<hex/>
1330+
<!-- NOTE: ASCII() only available in >= 4.1 -->
1331+
<inference query="SUBSTR((%s)::text,%d,1)>'%c'" query2="ASCII(SUBSTR((%s)::text,%d,1))>%d"/>
1332+
<banner query="SELECT version['number'] FROM sys.nodes" query2="VERSION()"/>
1333+
<current_user query="CURRENT_USER"/>
1334+
<current_db query="CURRENT_SCHEMA()"/>
1335+
<hostname query="SELECT hostname FROM sys.nodes"/>
1336+
<!--<table_comment query="SELECT pg_catalog.obj_description(c.oid) FROM pg_catalog.pg_class c WHERE c.relname='%s'"/>-->
1337+
<table_comment query="SELECT description FROM pg_description JOIN pg_class ON pg_description.objoid=pg_class.oid JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid WHERE nspname='%s' AND relname='%s'"/>
1338+
<column_comment/>
1339+
<is_dba query="(SELECT superuser=true FROM sys.users WHERE name=CURRENT_USER)"/>
1340+
<check_udf/>
1341+
<users>
1342+
<inband query="SELECT name FROM sys.users"/>
1343+
<blind query="SELECT name FROM sys.users LIMIT 1 OFFSET %d" count="SELECT COUNT(name) FROM sys.users"/>
1344+
</users>
1345+
<passwords/>
1346+
<privileges>
1347+
<inband query="SELECT grantee,type FROM sys.privileges" condition="grantee"/>
1348+
<blind query="SELECT DISTINCT(type) FROM sys.privileges WHERE grantee %s '%s' LIMIT 1 OFFSET %d" count="SELECT COUNT(DISTINCT(type)) FROM sys.privileges WHERE grantee %s '%s'"/>
1349+
</privileges>
1350+
<roles/>
1351+
<statements>
1352+
<inband query="SELECT stmt FROM sys.jobs"/>
1353+
<blind query="SELECT stmt FROM sys.jobs LIMIT 1 OFFSET %d" count="SELECT COUNT(stmt) FROM sys.jobs"/>
1354+
</statements>
1355+
<dbs>
1356+
<inband query="SELECT schema_name FROM information_schema.schemata"/>
1357+
<blind query="SELECT schema_name FROM information_schema.schemata ORDER BY schema_name LIMIT 1 OFFSET %d" count="SELECT COUNT(schema_name) FROM information_schema.schemata"/>
1358+
</dbs>
1359+
<tables>
1360+
<inband query="SELECT table_schema,table_name FROM information_schema.tables" condition="table_schema"/>
1361+
<blind query="SELECT table_name FROM information_schema.tables WHERE table_schema='%s' LIMIT 1 OFFSET %d" count="SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='%s'"/>
1362+
</tables>
1363+
<columns>
1364+
<inband query="SELECT attname,typname FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND a.relname='%s' AND nspname='%s'" condition="attname"/>
1365+
<blind query="SELECT attname FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND a.relname='%s' AND nspname='%s'" query2="SELECT typname FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relname='%s' AND a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND attname='%s' AND nspname='%s'" count="SELECT COUNT(attname) FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND a.relname='%s' AND nspname='%s'" condition="attname"/>
1366+
</columns>
1367+
<dump_table>
1368+
<inband query="SELECT %s FROM %s.%s ORDER BY %s"/>
1369+
<blind query="SELECT %s FROM %s.%s ORDER BY %s LIMIT 1 OFFSET %d" count="SELECT COUNT(*) FROM %s.%s"/>
1370+
</dump_table>
1371+
<search_db>
1372+
<inband query="SELECT schema_name FROM information_schema.schemata WHERE %s" condition="schema_name"/>
1373+
<blind query="SELECT schema_name FROM information_schema.schemata WHERE %s" count="SELECT COUNT(DISTINCT(schema_name)) FROM information_schema.schemata WHERE %s" condition="schema_name"/>
1374+
</search_db>
1375+
<search_table>
1376+
<inband query="SELECT table_schema,table_name FROM information_schema.tables WHERE %s" condition="table_name" condition2="table_schema"/>
1377+
<blind query="SELECT DISTINCT(table_schema) FROM information_schema.tables WHERE %s" query2="SELECT table_name FROM information_schema.tables WHERE table_schema='%s'" count="SELECT COUNT(DISTINCT(table_schema)) FROM information_schema.tables WHERE %s" count2="SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='%s'" condition="table_name" condition2="table_schema"/>
1378+
</search_table>
1379+
<search_column>
1380+
<inband query="SELECT nspname,relname FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND %s" condition="attname" condition2="nspname" condition3="relname"/>
1381+
<blind query="SELECT DISTINCT(nspname) FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND %s" query2="SELECT DISTINCT(relname) FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND nspname='%s'" count="SELECT COUNT(DISTINCT(nspname)) FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND %s" count2="SELECT COUNT(DISTINCT(relname)) FROM pg_namespace,pg_type,pg_attribute b JOIN pg_class a ON a.oid=b.attrelid WHERE a.relnamespace=pg_namespace.oid AND pg_type.oid=b.atttypid AND attnum>0 AND nspname='%s'" condition="attname" condition2="nspname" condition3="relname"/>
1382+
</search_column>
1383+
</dbms>
13371384
</root>

lib/controller/checks.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -885,11 +885,15 @@ def heuristicCheckDbms(injection):
885885

886886
Backend.forceDbms(dbms)
887887

888-
if (randStr1 in unescaper.escape("'%s'" % randStr1)) and list(FROM_DUMMY_TABLE.values()).count(FROM_DUMMY_TABLE.get(dbms, "")) != 1:
889-
continue
888+
if dbms in HEURISTIC_NULL_EVAL:
889+
result = checkBooleanExpression("(SELECT %s%s) IS NULL" % (HEURISTIC_NULL_EVAL[dbms], FROM_DUMMY_TABLE.get(dbms, "")))
890+
elif not ((randStr1 in unescaper.escape("'%s'" % randStr1)) and list(FROM_DUMMY_TABLE.values()).count(FROM_DUMMY_TABLE.get(dbms, "")) != 1):
891+
result = checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr1, SINGLE_QUOTE_MARKER))
892+
else:
893+
result = False
890894

891-
if checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr1, 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)):
895+
if result:
896+
if not checkBooleanExpression("(SELECT '%s'%s)=%s%s%s" % (randStr1, FROM_DUMMY_TABLE.get(dbms, ""), SINGLE_QUOTE_MARKER, randStr2, SINGLE_QUOTE_MARKER)):
893897
retVal = dbms
894898
break
895899

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from lib.core.exception import SqlmapConnectionException
1414
from lib.core.settings import ACCESS_ALIASES
1515
from lib.core.settings import ALTIBASE_ALIASES
16+
from lib.core.settings import CRATEDB_ALIASES
1617
from lib.core.settings import DB2_ALIASES
1718
from lib.core.settings import DERBY_ALIASES
1819
from lib.core.settings import FIREBIRD_ALIASES
@@ -37,6 +38,8 @@
3738
from plugins.dbms.access import AccessMap
3839
from plugins.dbms.altibase.connector import Connector as AltibaseConn
3940
from plugins.dbms.altibase import AltibaseMap
41+
from plugins.dbms.cratedb.connector import Connector as CrateDBConn
42+
from plugins.dbms.cratedb import CrateDBMap
4043
from plugins.dbms.db2.connector import Connector as DB2Conn
4144
from plugins.dbms.db2 import DB2Map
4245
from plugins.dbms.derby.connector import Connector as DerbyConn
@@ -101,6 +104,7 @@ def setHandler():
101104
(DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn),
102105
(DBMS.ALTIBASE, ALTIBASE_ALIASES, AltibaseMap, AltibaseConn),
103106
(DBMS.MIMERSQL, MIMERSQL_ALIASES, MimerSQLMap, MimerSQLConn),
107+
(DBMS.CRATEDB, CRATEDB_ALIASES, CrateDBMap, CrateDBConn),
104108
]
105109

106110
_ = 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
@@ -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, DBMS.ALTIBASE, DBMS.MIMERSQL):
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, DBMS.MIMERSQL, DBMS.CRATEDB):
663663
if fieldsExists:
664664
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
665665
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -956,7 +956,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
956956
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num + 1, 1)
957957
limitedQuery += " %s" % limitStr
958958

959-
elif Backend.getIdentifiedDbms() in (DBMS.DERBY,):
959+
elif Backend.getIdentifiedDbms() in (DBMS.DERBY, DBMS.CRATEDB):
960960
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (1, num)
961961
limitedQuery += " %s" % limitStr
962962

lib/core/common.py

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

40734073
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)
40744074
retVal = "`%s`" % retVal
4075-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
4075+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.CRATEDB):
40764076
retVal = "\"%s\"" % retVal
40774077
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
40784078
retVal = "\"%s\"" % retVal.upper()
@@ -4110,7 +4110,7 @@ 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.HSQLDB, DBMS.H2, DBMS.INFORMIX, 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, DBMS.CRATEDB):
41144114
retVal = name.replace("\"", "")
41154115
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
41164116
retVal = name.replace("\"", "").upper()

lib/core/dicts.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from lib.core.settings import ACCESS_ALIASES
1313
from lib.core.settings import ALTIBASE_ALIASES
1414
from lib.core.settings import BLANK
15+
from lib.core.settings import CRATEDB_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
@@ -212,6 +213,7 @@
212213
DBMS.PRESTO: (PRESTO_ALIASES, "presto-python-client", "https://github.com/prestodb/presto-python-client", None),
213214
DBMS.ALTIBASE: (ALTIBASE_ALIASES, None, None, None),
214215
DBMS.MIMERSQL: (MIMERSQL_ALIASES, "mimerpy", "https://github.com/mimersql/MimerPy", None),
216+
DBMS.CRATEDB: (CRATEDB_ALIASES, "python-psycopg2", "http://initd.org/psycopg/", "postgresql"),
215217
}
216218

217219
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/
@@ -241,7 +243,8 @@
241243
DBMS.MCKOI: "TONUMBER(NULL)",
242244
DBMS.PRESTO: "FROM_HEX(NULL)",
243245
DBMS.ALTIBASE: "TDESENCRYPT(NULL,NULL)",
244-
DBMS.MIMERSQL: "ASCII_CHAR(256) IS NULL",
246+
DBMS.MIMERSQL: "ASCII_CHAR(256)",
247+
DBMS.CRATEDB: "(NULL~NULL)",
245248
}
246249

247250
SQL_STATEMENTS = {

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, DBMS.VERTICA):
169+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA, DBMS.CRATEDB):
170170
self.string("current schema (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
171171
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE, DBMS.MIMERSQL):
172172
self.string("current user (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)

0 commit comments

Comments
 (0)