提交 434253ee 编写于 作者: S serge-rider

#11801 SQL dialect init refactoring. Extra functions for DB2

上级 e16d277f
......@@ -21,6 +21,7 @@ import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.struct.DBSTypedObject;
......@@ -35,8 +36,8 @@ public class ClickhouseSQLDialect extends GenericSQLDialect {
return false;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
removeSQLKeyword("DEFAULT");
}
......
......@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.sql.parser.rules.SQLDollarQuoteRule;
import org.jkiss.dbeaver.model.text.parser.TPRule;
......@@ -35,8 +36,8 @@ public class DataVirtualitySQLDialect extends GenericSQLDialect implements TPRul
super("DataVirtuality", "datavirtuality");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addSQLKeywords(
Arrays.asList(
"SIMILAR TO"
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.db2.i.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
public class DB2ISQLDialect extends GenericSQLDialect {
......@@ -31,8 +32,8 @@ public class DB2ISQLDialect extends GenericSQLDialect {
return false;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
turnFunctionIntoKeyword("TRUNCATE");
}
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.db2.zos.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
public class DB2ZOSSQLDialect extends GenericSQLDialect {
......@@ -31,8 +32,8 @@ public class DB2ZOSSQLDialect extends GenericSQLDialect {
return false;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
turnFunctionIntoKeyword("TRUNCATE");
}
......
......@@ -574,6 +574,7 @@ meta.org.jkiss.dbeaver.ext.db2.model.DB2Variable.published.name=Published?
meta.org.jkiss.dbeaver.ext.db2.model.DB2Variable.schema.name=Schema
meta.org.jkiss.dbeaver.ext.db2.model.DB2Variable.valid.name=Valid?
meta.org.jkiss.dbeaver.ext.db2.model.DB2View.tableId.name=Table ID
meta.org.jkiss.dbeaver.ext.db2.model.DB2View.readOnly.name=Read Only?
meta.org.jkiss.dbeaver.ext.db2.model.DB2View.viewCheck.name=Check Option
......
......@@ -123,10 +123,274 @@ public class DB2Constants {
"RESULT", "RESULT_SET_LOCATOR", "RETURN", "RETURNS", "ROUTINE", "ROW", "RRN", "RUN", "SAVEPOINT", "SCRATCHPAD", "SECOND",
"SECONDS", "SECQTY", "SECURITY", "SENSITIVE", "SIGNAL", "SIMPLE", "SOURCE", "SPECIFIC", "SQLID", "STANDARD", "START",
"STARTING", "STATIC", "STAY", "STOGROUP", "STORES", "STYLE", "SUBPAGES", "SYNONYM", "SYSPROC", "SYSTEM", "TABLESPACE",
"TRIGGER", "TYPE", "UNDO", "UNTIL", "VALIDPROC", "VARIABLE", "VARIANT", "VCAT", "VOLATILE", "VOLUMES", "WHILE", "WLM",
"YEAR", "YEARS", };
"TRIGGER", "TYPE", "UNDO", "UNTIL", "VALIDPROC", "VARIABLE", "VARIANT", "VCAT", "VOLATILE", "VOLUMES", "WHILE", "WLM" };
public static final DBDPseudoAttribute PSEUDO_ATTR_RID_BIT = new DBDPseudoAttribute(DBDPseudoAttributeType.ROWID,
"RID_BIT()", "RID_BIT($alias)", "RID_BIT", "Unique physical row identifier", false);
static final String[] ROUTINES = {
"ABS",
"ABSVAL",
"ACOS",
"ADD_DAYS",
"ADD_HOURS",
"ADD_MINUTES",
"ADD_MONTHS",
"ADD_SECONDS",
"ADD_YEARS",
"AGE",
"ARRAY_DELETE",
"ARRAY_FIRST",
"ARRAY_LAST",
"ARRAY_NEXT",
"ARRAY_PRIOR",
"ASCII",
"ASCII_STR",
"ASIN",
"ATAN",
"ATAN2",
"ATANH",
"BINARY",
"BITAND",
"BITANDNOT",
"BITOR",
"BITXOR",
"BITNOT",
"BSON_TO_JSON",
"BTRIM",
"CARDINALITY",
"CEILING",
"CEIL",
"CHARACTER_LENGTH",
"CHR",
"COALESCE",
"COLLATION_KEY",
"COLLATION_KEY_BIT",
"COMPARE_DECFLOAT",
"CONCAT",
"COS",
"COSH",
"COT",
"CURSOR_ROWCOUNT",
"DATAPARTITIONNUM",
"DATE_PART",
"DATE_TRUNC",
"DAY",
"DAYNAME",
"DAYOFMONTH",
"DAYOFWEEK",
"DAYOFWEEK_ISO",
"DAYOFYEAR",
"DAYS",
"DAYS_BETWEEN",
"DAYS_TO_END_OF_MONTH",
"DBPARTITIONNUM",
"DECFLOAT_FORMAT",
"DECODE",
"DECRYPT_BIN and DECRYPT_CHAR",
"DEGREES",
"DEREF",
"DIFFERENCE",
"DIGITS",
"EMPTY_BLOB",
"EMPTY_CLOB",
"EMPTY_DBCLOB",
"EMPTY_NCLOB",
"ENCRYPT",
"EVENT_MON_STATE",
"EXP",
"EXTRACT",
"FIRST_DAY",
"FLOAT",
"FLOAT4",
"FLOAT8",
"FLOOR",
"FROM_UTC_TIMESTAMP",
"GENERATE_UNIQUE",
"GETHINT",
"GRAPHIC",
"GREATEST",
"HASH",
"HASH4",
"HASH8",
"HASHEDVALUE",
"HEX",
"HEXTORAW",
"HOUR",
"HOURS_BETWEEN",
"IDENTITY_VAL_LOCAL",
"IFNULL",
"INITCAP",
"INSERT",
"INSTR",
"INSTR2",
"INSTR4",
"INSTRB",
"INTNAND",
"INTNOR",
"INTNXOR",
"INTNNOT",
"ISNULL",
"JSON_ARRAY",
"JSON_OBJECT",
"JSON_QUERY",
"JSON_TO_BSON",
"JSON_VALUE",
"JULIAN_DAY",
"LAST_DAY",
"LCASE",
"LEAST",
"LEFT",
"LENGTH",
"LENGTH2",
"LENGTH4",
"LENGTHB",
"LN",
"LOCATE",
"LOCATE_IN_STRING",
"LOG10",
"LOWER",
"LPAD",
"LTRIM",
"LTRIM",
"MAX",
"MAX_CARDINALITY",
"MICROSECOND",
"MIDNIGHT_SECONDS",
"MIN",
"MINUTE",
"MINUTES_BETWEEN",
"MOD",
"MONTH",
"MONTHNAME",
"MONTHS_BETWEEN",
"MULTIPLY_ALT",
"NEXT_DAY",
"NEXT_MONTH",
"NEXT_QUARTER",
"NEXT_WEEK",
"NEXT_YEAR",
"NORMALIZE_DECFLOAT",
"NOW",
"NULLIF",
"NVL",
"NVL2",
"OCTET_LENGTH",
"OVERLAY",
"PARAMETER",
"POSITION",
"POSSTR",
"POW",
"POWER",
"QUANTIZE",
"QUARTER",
"QUOTE_IDENT",
"QUOTE_LITERAL",
"RADIANS",
"RAISE_ERROR",
"RAND",
"RANDOM",
"RAWTOHEX",
"REC2XML",
"REGEXP_COUNT",
"REGEXP_EXTRACT",
"REGEXP_INSTR",
"REGEXP_LIKE",
"REGEXP_MATCH_COUNT",
"REGEXP_REPLACE",
"REGEXP_SUBSTR",
"REPEAT",
"REPLACE",
"RIGHT",
"ROUND",
"ROUND_TIMESTAMP",
"RPAD",
"RTRIM",
"SECLABEL",
"SECLABEL_BY_NAME",
"SECLABEL_TO_CHAR",
"SECOND",
"SECONDS_BETWEEN",
"SIGN",
"SIN",
"SINH",
"SOUNDEX",
"SPACE",
"SQRT",
"STRIP",
"STRLEFT",
"STRPOS",
"STRRIGHT",
"SUBSTR",
"SUBSTR2",
"SUBSTR4",
"SUBSTRB",
"SUBSTRING",
"TABLE_NAME",
"TABLE_SCHEMA",
"TAN",
"TANH",
"THIS_MONTH",
"THIS_QUARTER",
"THIS_WEEK",
"THIS_YEAR",
"TIMESTAMP_FORMAT",
"TIMESTAMP_ISO",
"TIMESTAMPDIFF",
"TIMEZONE",
"TO_CHAR",
"TO_CLOB",
"TO_DATE",
"TO_HEX",
"TO_MULTI_BYTE",
"TO_NCHAR",
"TO_NCLOB",
"TO_NUMBER",
"TO_SINGLE_BYTE",
"TO_TIMESTAMP",
"TO_UTC_TIMESTAMP",
"TOTALORDER",
"TRANSLATE",
"TRIM",
"TRIM_ARRAY",
"TRUNC_TIMESTAMP",
"TRUNC",
"TYPE_ID",
"TYPE_NAME",
"TYPE_SCHEMA",
"UCASE",
"UNICODE_STR",
"UPPER",
"VALUE",
"VARCHAR_BIT_FORMAT",
"VARCHAR_FORMAT",
"VARCHAR_FORMAT_BIT",
"VERIFY_GROUP_FOR_USER",
"VERIFY_ROLE_FOR_USER",
"VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER",
"WEEK",
"WEEK_ISO",
"WEEKS_BETWEEN",
"WIDTH_BUCKET",
"XMLATTRIBUTES",
"XMLCOMMENT",
"XMLCONCAT",
"XMLDOCUMENT",
"XMLELEMENT",
"XMLFOREST",
"XMLNAMESPACES",
"XMLPARSE",
"XMLPI",
"XMLQUERY",
"XMLROW",
"XMLSERIALIZE",
"XMLTEXT",
"XMLVALIDATE",
"XMLXSROBJECTID",
"XSLTRANSFORM",
"YEAR",
"YEARS_BETWEEN",
"YMD_BETWEEN",
};
}
......@@ -19,11 +19,21 @@ package org.jkiss.dbeaver.ext.db2;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.data.DBDBinaryFormatter;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCStatement;
import org.jkiss.dbeaver.model.impl.data.formatters.BinaryFormatterHexString;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.utils.CommonUtils;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Set;
/**
* DB2 SQL dialect
......@@ -33,20 +43,24 @@ import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
*/
public class DB2SQLDialect extends JDBCSQLDialect {
private static final Log log = Log.getLog(DB2SQLDialect.class);
public static final String[] EXEC_KEYWORDS = new String[]{"call"};
private static final String[][] DB2_BEGIN_END_BLOCK = new String[][]{
};
private static final boolean LOAD_ROUTINES_FROM_SYSCAT = false;
public DB2SQLDialect() {
super("DB2 LUW", "db2_luw");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
for (String kw : DB2Constants.ADVANCED_KEYWORDS) {
this.addSQLKeyword(kw);
}
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addSQLKeywords(Arrays.asList(DB2Constants.ADVANCED_KEYWORDS));
addFunctions(Arrays.asList(DB2Constants.ROUTINES));
turnFunctionIntoKeyword("TRUNCATE");
}
......@@ -69,6 +83,29 @@ public class DB2SQLDialect extends JDBCSQLDialect {
return EXEC_KEYWORDS;
}
@Override
protected void loadFunctions(JDBCSession session, JDBCDatabaseMetaData metaData, Set<String> allFunctions) throws DBException, SQLException {
if (LOAD_ROUTINES_FROM_SYSCAT) {
try (JDBCStatement stmt = session.createStatement()) {
try (JDBCResultSet dbResult = stmt.executeQuery(
"SELECT DISTINCT ROUTINENAME FROM SYSCAT.ROUTINES")) {
while (dbResult.next()) {
String routineName = dbResult.getString(1);
if (CommonUtils.isEmpty(routineName) || !Character.isLetter(routineName.charAt(0))) {
continue;
}
allFunctions.add(routineName);
}
}
} catch (Throwable e) {
log.debug("Error loading DB2 functions", e);
}
}
if (allFunctions.isEmpty()) {
super.loadFunctions(session, metaData, allFunctions);
}
}
@Nullable
@Override
public String getDualTableName() {
......
......@@ -20,6 +20,7 @@ package org.jkiss.dbeaver.ext.db2.model;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.db2.DB2Constants;
import org.jkiss.dbeaver.ext.db2.editors.DB2ColumnDataTypeListProvider;
import org.jkiss.dbeaver.ext.db2.model.dict.DB2ColumnHiddenState;
......@@ -41,6 +42,7 @@ import org.jkiss.dbeaver.model.struct.rdb.DBSTableColumn;
import org.jkiss.utils.CommonUtils;
import java.sql.ResultSet;
import java.sql.Types;
/**
* DB2 Table Column
......@@ -50,6 +52,8 @@ import java.sql.ResultSet;
public class DB2TableColumn extends JDBCTableColumn<DB2TableBase>
implements DBSTableColumn, DBSTypedObjectEx, DBPHiddenObject, DBSTypedObjectExt4<DB2DataType> {
private static final Log log = Log.getLog(DB2TableColumn.class);
private DB2DataType dataType;
private DB2Schema dataTypeSchema;
private String remarks;
......@@ -159,8 +163,14 @@ public class DB2TableColumn extends JDBCTableColumn<DB2TableBase>
} else {
this.dataTypeSchema = dataType.getSchema();
}
setTypeName(dataType.getFullyQualifiedName(DBPEvaluationContext.DML));
setValueType(dataType.getTypeID());
if (this.dataType == null) {
log.debug("Data type '" + typeName + "' wasn't resolved");
setTypeName(typeName);
setValueType(Types.OTHER);
} else {
setTypeName(dataType.getFullyQualifiedName(DBPEvaluationContext.DML));
setValueType(dataType.getTypeID());
}
}
public DB2TableColumn(DB2TableBase tableBase)
......
......@@ -21,14 +21,12 @@ import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.exasol.model.ExasolDataSource;
import org.jkiss.dbeaver.model.DBPKeywordType;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCStatement;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSAttributeBase;
import java.sql.SQLException;
......@@ -52,21 +50,15 @@ public class ExasolSQLDialect extends JDBCSQLDialect {
super.addFunctions(Arrays.asList(functions));
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
Collections.addAll(tableQueryWords, "DESC");
try {
JDBCSession session = DBUtils.openMetaSession(new VoidProgressMonitor(), dataSource, "" );
try (JDBCStatement stmt = session.createStatement())
{
try (JDBCResultSet dbResult = stmt.executeQuery("/*snapshot execution*/ SELECT \"VALUE\" FROM \"$ODBCJDBC\".DB_METADATA WHERE name = 'aggregateFunctions'"))
{
if (dbResult.next())
{
try (JDBCStatement stmt = session.createStatement()) {
try (JDBCResultSet dbResult = stmt.executeQuery("/*snapshot execution*/ SELECT \"VALUE\" FROM \"$ODBCJDBC\".DB_METADATA WHERE name = 'aggregateFunctions'")) {
if (dbResult.next()) {
String keyWord = dbResult.getString(1);
String[] aggregateFunctions = keyWord.split(",");
......@@ -74,10 +66,8 @@ public class ExasolSQLDialect extends JDBCSQLDialect {
}
}
try (JDBCResultSet dbResult = stmt.executeQuery("/*snapshot execution*/ SELECT keyword FROM sys.EXA_SQL_KEYWORDS esk WHERE RESERVED"))
{
while(dbResult.next())
{
try (JDBCResultSet dbResult = stmt.executeQuery("/*snapshot execution*/ SELECT keyword FROM sys.EXA_SQL_KEYWORDS esk WHERE RESERVED")) {
while(dbResult.next()) {
String keyWord = dbResult.getString("KEYWORD");
super.addSQLKeyword(keyWord);
}
......
......@@ -20,6 +20,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.DBPEvaluationContext;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.struct.rdb.DBSProcedure;
......@@ -59,8 +60,8 @@ public class FireBirdSQLDialect extends GenericSQLDialect {
return FB_BEGIN_END_BLOCK;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
turnFunctionIntoKeyword("TRUNCATE");
}
......
......@@ -23,6 +23,7 @@ import org.jkiss.dbeaver.ext.generic.GenericConstants;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.utils.CommonUtils;
......@@ -57,8 +58,8 @@ public class GenericSQLDialect extends JDBCSQLDialect {
super(name, id);
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
DBPDriver driver = dataSource.getContainer().getDriver();
this.scriptDelimiter = CommonUtils.toString(driver.getDriverParameter(GenericConstants.PARAM_SCRIPT_DELIMITER));
String escapeStr = CommonUtils.toString(driver.getDriverParameter(GenericConstants.PARAM_STRING_ESCAPE_CHAR));
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.h2.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
......@@ -30,8 +31,8 @@ public class H2SQLDialect extends GenericSQLDialect {
super("H2", "h2");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
}
@Override
......
......@@ -23,6 +23,7 @@ import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor;
import org.jkiss.dbeaver.model.sql.SQLConstants;
......@@ -50,8 +51,8 @@ public class HANASQLDialect extends GenericSQLDialect {
return HANA_BEGIN_END_BLOCK;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
// TODO: check if obsolete
addSQLKeywords(
Arrays.asList(
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.hive.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import java.util.Arrays;
......@@ -105,8 +106,8 @@ public class HiveSQLDialect extends GenericSQLDialect {
"QUOTE"
};
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
for (String keyword : NON_RESERVED_KEYWORDS) {
removeSQLKeyword(keyword);
}
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.hsqldb.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import java.util.Arrays;
......@@ -28,8 +29,8 @@ public class HSQLDialect extends GenericSQLDialect {
super("HSQLDB", "hsqldb");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addDataTypes(
Arrays.asList(
"NCHAR",
......
......@@ -22,6 +22,7 @@ import org.jkiss.dbeaver.ext.mssql.SQLServerUtils;
import org.jkiss.dbeaver.model.DBPDataKind;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.sql.SQLConstants;
......@@ -95,8 +96,8 @@ public class SQLServerDialect extends JDBCSQLDialect {
super("SQLServer", "sqlserver");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
super.addSQLKeywords(Arrays.asList(SQLSERVER_EXTRA_KEYWORDS));
this.dataSource = dataSource;
this.isSqlServer = SQLServerUtils.isDriverSqlServer(dataSource.getContainer().getDriver());
......
......@@ -20,6 +20,7 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ext.mysql.MySQLConstants;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
......@@ -113,8 +114,8 @@ class MySQLDialect extends JDBCSQLDialect {
super("MySQL", "mysql");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
this.lowerCaseTableNames = ((MySQLDataSource)dataSource).getLowerCaseTableNames();
this.setSupportsUnquotedMixedCase(lowerCaseTableNames != 2);
......
......@@ -25,6 +25,7 @@ import org.jkiss.dbeaver.model.DBPKeywordType;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.data.DBDBinaryFormatter;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
......@@ -113,8 +114,8 @@ public class OracleSQLDialect extends JDBCSQLDialect {
super("Oracle", "oracle");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
crlfBroken = !dataSource.isServerVersionAtLeast(11, 0);
preferenceStore = dataSource.getContainer().getPreferenceStore();
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.phoenix.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.sql.SQLDialect;
......@@ -27,8 +28,8 @@ public class PhoenixSQLDialect extends GenericSQLDialect {
super("Phoenix", "apache_phoenix");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
schemaUsage = SQLDialect.USAGE_ALL;
removeSQLKeyword("SYSTEM");
}
......
......@@ -29,6 +29,7 @@ import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBPKeywordType;
import org.jkiss.dbeaver.model.data.DBDBinaryFormatter;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
......@@ -673,8 +674,8 @@ public class PostgreDialect extends JDBCSQLDialect implements TPRuleProvider {
super.addFunctions(Arrays.asList(functions));
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addExtraKeywords(
"SHOW",
......
......@@ -21,6 +21,7 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.sql.parser.rules.SQLDollarQuoteRule;
import org.jkiss.dbeaver.model.text.parser.TPRule;
......@@ -35,8 +36,8 @@ public class SnowflakeSQLDialect extends GenericSQLDialect implements TPRuleProv
super("Snowflake", "snowflake");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addSQLKeywords(
Arrays.asList(
"QUALIFY",
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.sqlite.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
......@@ -27,8 +28,8 @@ public class SQLiteSQLDialect extends GenericSQLDialect {
super("SQLite", "sqlite");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
}
@Override
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.teradata.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import java.util.Arrays;
......@@ -28,8 +29,8 @@ public class TeradataSQLDialect extends GenericSQLDialect {
super("Teradata", "teradata");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
addSQLKeywords(
Arrays.asList(
"QUALIFY"
......
......@@ -18,6 +18,7 @@ package org.jkiss.dbeaver.ext.vertica.model;
import org.jkiss.dbeaver.ext.generic.model.GenericSQLDialect;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
......@@ -27,8 +28,8 @@ public class VerticaSQLDialect extends GenericSQLDialect {
super("Vertica", "vertica");
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(dataSource, metaData);
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
super.initDriverSettings(session, dataSource, metaData);
}
@Override
......
......@@ -414,7 +414,7 @@ public abstract class JDBCDataSource
if (this.sqlDialect instanceof JDBCSQLDialect) {
try {
((JDBCSQLDialect) this.sqlDialect).initDriverSettings(this, metaData);
((JDBCSQLDialect) this.sqlDialect).initDriverSettings(session, this, metaData);
} catch (Throwable e) {
log.error("Error initializing dialect driver settings", e);
}
......
......@@ -18,11 +18,13 @@ package org.jkiss.dbeaver.model.impl.jdbc;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPIdentifierCase;
import org.jkiss.dbeaver.model.DBPKeywordType;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
import org.jkiss.dbeaver.model.sql.SQLConstants;
import org.jkiss.dbeaver.model.sql.SQLDialect;
......@@ -66,7 +68,7 @@ public class JDBCSQLDialect extends BasicSQLDialect {
this.id = id;
}
public void initDriverSettings(JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
public void initDriverSettings(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
String singleQuoteStr;
try {
singleQuoteStr = metaData.getIdentifierQuoteString();
......@@ -203,7 +205,7 @@ public class JDBCSQLDialect extends BasicSQLDialect {
this.isCatalogAtStart = true;
}
loadDriverKeywords(metaData);
loadDriverKeywords(session, dataSource, metaData);
}
@NotNull
......@@ -347,7 +349,7 @@ public class JDBCSQLDialect extends BasicSQLDialect {
addKeywords(types, DBPKeywordType.TYPE);
}
private void loadDriverKeywords(JDBCDatabaseMetaData metaData) {
private void loadDriverKeywords(JDBCSession session, JDBCDataSource dataSource, JDBCDatabaseMetaData metaData) {
try {
// Keywords
Collection<String> sqlKeywords = makeStringList(metaData.getSQLKeywords());
......@@ -362,18 +364,7 @@ public class JDBCSQLDialect extends BasicSQLDialect {
try {
// Functions
Set<String> allFunctions = new HashSet<>();
for (String func : makeStringList(metaData.getNumericFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getStringFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getSystemFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getTimeDateFunctions())) {
allFunctions.add(func.toUpperCase());
}
loadFunctions(session, metaData, allFunctions);
// Remove functions which clashes with keywords
for (Iterator<String> fIter = allFunctions.iterator(); fIter.hasNext(); ) {
if (getKeywordType(fIter.next()) == DBPKeywordType.KEYWORD) {
......@@ -386,6 +377,21 @@ public class JDBCSQLDialect extends BasicSQLDialect {
}
}
protected void loadFunctions(JDBCSession session, JDBCDatabaseMetaData metaData, Set<String> allFunctions) throws DBException, SQLException {
for (String func : makeStringList(metaData.getNumericFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getStringFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getSystemFunctions())) {
allFunctions.add(func.toUpperCase());
}
for (String func : makeStringList(metaData.getTimeDateFunctions())) {
allFunctions.add(func.toUpperCase());
}
}
private static List<String> makeStringList(String source) {
List<String> result = new ArrayList<>();
if (source != null && source.length() > 0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册