diff --git a/src/Platforms/DB2Platform.php b/src/Platforms/DB2Platform.php index b92cbd684b4..dc35f7458a0 100644 --- a/src/Platforms/DB2Platform.php +++ b/src/Platforms/DB2Platform.php @@ -25,6 +25,25 @@ class DB2Platform extends AbstractPlatform { + /** @see https://www.ibm.com/docs/en/db2/11.5?topic=views-syscatcolumns */ + private const SYSCAT_COLUMNS_GENERATED_DEFAULT = 'D'; + + /** @see https://www.ibm.com/docs/en/db2/11.5?topic=views-syscatindexes */ + private const SYSCAT_INDEXES_UNIQUERULE_PERMITS_DUPLICATES = 'D'; + private const SYSCAT_INDEXES_UNIQUERULE_IMPLEMENTS_PRIMARY_KEY = 'P'; + + /** @see https://www.ibm.com/docs/en/db2/11.5?topic=views-syscattabconst */ + private const SYSCAT_TABCONST_TYPE_PRIMARY_KEY = 'P'; + + /** @see https://www.ibm.com/docs/en/db2/11.5?topic=views-syscatreferences */ + private const SYSCAT_REFERENCES_UPDATERULE_RESTRICT = 'R'; + private const SYSCAT_REFERENCES_DELETERULE_CASCADE = 'C'; + private const SYSCAT_REFERENCES_DELETERULE_SET_NULL = 'N'; + private const SYSCAT_REFERENCES_DELETERULE_RESTRICT = 'R'; + + /** @see https://www.ibm.com/docs/en/db2-for-zos/11?topic=tables-systables */ + private const SYSIBM_SYSTABLES_TYPE_TABLE = 'T'; + /** * {@inheritdoc} * @@ -362,14 +381,14 @@ public function getListTableColumnsSQL($table, $database = null) c.remarks AS comment, k.colseq, CASE - WHEN c.generated = 'D' THEN 1 + WHEN c.generated = '" . self::SYSCAT_COLUMNS_GENERATED_DEFAULT . "' THEN 1 ELSE 0 END AS autoincrement FROM syscat.columns c LEFT JOIN (syscat.keycoluse k JOIN syscat.tabconst tc ON (k.tabschema = tc.tabschema AND k.tabname = tc.tabname - AND tc.type = 'P')) + AND tc.type = '" . self::SYSCAT_TABCONST_TYPE_PRIMARY_KEY . "')) ON (c.tabschema = k.tabschema AND c.tabname = k.tabname AND c.colname = k.colname) @@ -391,7 +410,8 @@ public function getListTableColumnsSQL($table, $database = null) */ public function getListTablesSQL() { - return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T' AND CREATOR = CURRENT_USER"; + return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = '" . self::SYSIBM_SYSTABLES_TYPE_TABLE . "'" + . ' AND CREATOR = CURRENT_USER'; } /** @@ -416,11 +436,13 @@ public function getListTableIndexesSQL($table, $database = null) return "SELECT idx.INDNAME AS key_name, idxcol.COLNAME AS column_name, CASE - WHEN idx.UNIQUERULE = 'P' THEN 1 + WHEN idx.UNIQUERULE = '" . self::SYSCAT_INDEXES_UNIQUERULE_IMPLEMENTS_PRIMARY_KEY . "' + THEN 1 ELSE 0 END AS primary, CASE - WHEN idx.UNIQUERULE = 'D' THEN 1 + WHEN idx.UNIQUERULE = '" . self::SYSCAT_INDEXES_UNIQUERULE_PERMITS_DUPLICATES . "' + THEN 1 ELSE 0 END AS non_unique FROM SYSCAT.INDEXES AS idx @@ -444,13 +466,13 @@ public function getListTableForeignKeysSQL($table) pkcol.COLNAME AS foreign_column, fk.CONSTNAME AS index_name, CASE - WHEN fk.UPDATERULE = 'R' THEN 'RESTRICT' + WHEN fk.UPDATERULE = '" . self::SYSCAT_REFERENCES_UPDATERULE_RESTRICT . "' THEN 'RESTRICT' ELSE NULL END AS on_update, CASE - WHEN fk.DELETERULE = 'C' THEN 'CASCADE' - WHEN fk.DELETERULE = 'N' THEN 'SET NULL' - WHEN fk.DELETERULE = 'R' THEN 'RESTRICT' + WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_CASCADE . "' THEN 'CASCADE' + WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_SET_NULL . "' THEN 'SET NULL' + WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_RESTRICT . "' THEN 'RESTRICT' ELSE NULL END AS on_delete FROM SYSCAT.REFERENCES AS fk