3 declare(strict_types=1);
    42         if ($this->query_utils === null) {
    54         $table = $this->db_instance->quoteIdentifier($table_name);
    55         $query = 
"SHOW COLUMNS FROM $table LIKE " . $this->db_instance->quote($field_name);
    56         $res = $this->pdo->query($query);
    58         while (
$data = 
$res->fetch(PDO::FETCH_ASSOC)) {
    62         $ilDBPdoFieldDefinition = $this->db_instance->getFieldDefinition();
    64         foreach ($columns as $column) {
    65             $column = array_change_key_case($column, CASE_LOWER);
    66             $column[
'name'] = $column[
'field'];
    67             unset($column[
'field']);
    68             $column = array_change_key_case($column, CASE_LOWER);
    69             if ($field_name === $column[
'name'] && $ilDBPdoFieldDefinition !== null) {
    70                 [$types, $length, $unsigned, $fixed] = $ilDBPdoFieldDefinition->mapNativeDatatype($column);
    72                 if (empty($column[
'null']) || $column[
'null'] !== 
'YES') {
    76                 if (array_key_exists(
'default', $column)) {
    77                     $default = $column[
'default'];
    78                     if ($notnull && is_null($default)) {
    82                 $autoincrement = 
false;
    83                 if (!empty($column[
'extra']) && $column[
'extra'] === 
'auto_increment') {
    84                     $autoincrement = 
true;
    87                 $definition[0] = array(
    88                     'notnull' => $notnull,
    89                     'nativetype' => preg_replace(
'/^([a-z]+)[^a-z].*/i', 
'\\1', $column[
'type']),
    91                 if (!is_null($length)) {
    92                     $definition[0][
'length'] = $length;
    94                 if (!is_null($unsigned)) {
    95                     $definition[0][
'unsigned'] = $unsigned;
    97                 if (!is_null($fixed)) {
    98                     $definition[0][
'fixed'] = $fixed;
   100                 if ($default !== 
false) {
   101                     $definition[0][
'default'] = $default;
   103                 if ($autoincrement) {
   104                     $definition[0][
'autoincrement'] = $autoincrement;
   106                 foreach ($types as 
$key => $type) {
   107                     $definition[
$key] = $definition[0];
   108                     if ($type === 
'clob' || $type === 
'blob') {
   109                         unset($definition[
$key][
'default']);
   111                     $definition[
$key][
'type'] = $type;
   112                     $definition[
$key][
'mdb2type'] = $type;
   128         $table = $this->db_instance->quoteIdentifier($table, 
true);
   129         $query = 
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
   130         $index_name_pdo = $this->db_instance->getIndexName($constraint_name);
   131         $result = $this->db_instance->query(sprintf($query, $this->db_instance->quote($index_name_pdo)));
   132         $data = $this->db_instance->fetchAssoc($result);
   135             $constraint_name = $index_name_pdo;
   138         $result = $this->db_instance->query(sprintf($query, $this->db_instance->quote($constraint_name)));
   141         $definition = array();
   142         while (is_object($row = $result->fetchObject())) {
   143             $row = array_change_key_case((array) $row, CASE_LOWER);
   145             $key_name = $row[
'key_name'];
   147             if ($constraint_name === $key_name) {
   148                 if (!$row[
'non_unique']) {
   151                 $column_name = $row[
'column_name'];
   152                 $definition[
'fields'][$column_name] = array(
   153                     'position' => $colpos++,
   155                 if (!empty($row[
'collation'])) {
   156                     $definition[
'fields'][$column_name][
'sorting'] = ($row[
'collation'] === 
'A' ? 
'ascending' : 
'descending');
   161         if (empty($definition[
'fields'])) {
   162             throw new ilDatabaseException(
'it was not specified an existing table index (index does not exist)');
   174         $index_name = strtolower($index_name);
   175         $table = $this->db_instance->quoteIdentifier($table, 
true);
   176         $query = 
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
   178         if (strtolower($index_name) !== 
'primary') {
   179             $constraint_name_pdo = $this->db_instance->getIndexName($index_name);
   180             $result = $this->db_instance->query(sprintf($query, $this->db_instance->quote($constraint_name_pdo)));
   181             $data = $this->db_instance->fetchAssoc($result);
   185                 $index_name = strtolower($constraint_name_pdo);
   189         $result = $this->db_instance->query(sprintf($query, $this->db_instance->quote($index_name)));
   192         $definition = array();
   193         while (is_object($row = $result->fetchObject())) {
   195             $row = array_change_key_case($row, CASE_LOWER);
   196             $key_name = $row[
'key_name'];
   197             if ($this->db_instance->options[
'portability'] ?? null) {
   198                 $key_name = strtolower($key_name);
   200             $key_name = strtolower($key_name); 
   201             if ($index_name === $key_name) {
   202                 if ($row[
'non_unique']) {
   205                 if (strtolower($row[
'key_name']) === 
'primary') {
   206                     $definition[
'primary'] = 
true;
   208                     $definition[
'unique'] = 
true;
   210                 $column_name = $row[
'column_name'];
   211                 if ($this->db_instance->options[
'portability'] ?? null) {
   212                     if ($this->db_instance->options[
'field_case'] == CASE_LOWER) {
   213                         $column_name = strtolower($column_name);
   215                         $column_name = strtoupper($column_name);
   218                 $definition[
'fields'][$column_name] = array(
   219                     'position' => $colpos++,
   221                 if (!empty($row[
'collation'])) {
   222                     $definition[
'fields'][$column_name][
'sorting'] = ($row[
'collation'] === 
'A' ? 
'ascending' : 
'descending');
   227         if (empty($definition[
'fields'])) {
 
ilMySQLQueryUtils $query_utils
 
getTableConstraintDefinition(string $table, string $index_name)
 
getTriggerDefinition(string $trigger)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getTableFieldDefinition(string $table_name, string $field_name)
 
__construct(\PDO $pdo, ilDBPdo $db_instance)
ilDBPdoReverse constructor. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getTableIndexDefinition(string $table, string $constraint_name)