60 if (!$this->query_utils) {
76 $table = $this->db_instance->quoteIdentifier($table_name);
77 $query =
"SHOW COLUMNS FROM $table LIKE " . $this->db_instance->quote($field_name);
80 while (
$data =
$res->fetch(PDO::FETCH_ASSOC)) {
84 $ilDBPdoFieldDefinition = $this->db_instance->getFieldDefinition();
87 $column = array_change_key_case($column, CASE_LOWER);
88 $column[
'name'] = $column[
'field'];
89 unset($column[
'field']);
97 $column = array_change_key_case($column, CASE_LOWER);
99 if ($field_name == $column[
'name']) {
100 $mapped_datatype = $ilDBPdoFieldDefinition->mapNativeDatatype($column);
102 list($types, $length, $unsigned, $fixed) = $mapped_datatype;
104 if (empty($column[
'null']) || $column[
'null'] !==
'YES') {
108 if (array_key_exists(
'default', $column)) {
109 $default = $column[
'default'];
110 if (is_null($default) && $notnull) {
114 $autoincrement =
false;
115 if (!empty($column[
'extra']) && $column[
'extra'] ==
'auto_increment') {
116 $autoincrement =
true;
119 $definition[0] = array(
120 'notnull' => $notnull,
121 'nativetype' => preg_replace(
'/^([a-z]+)[^a-z].*/i',
'\\1', $column[
'type']),
123 if (!is_null($length)) {
124 $definition[0][
'length'] = $length;
126 if (!is_null($unsigned)) {
127 $definition[0][
'unsigned'] = $unsigned;
129 if (!is_null($fixed)) {
130 $definition[0][
'fixed'] = $fixed;
132 if ($default !==
false) {
133 $definition[0][
'default'] = $default;
135 if ($autoincrement !==
false) {
136 $definition[0][
'autoincrement'] = $autoincrement;
138 foreach ($types as $key =>
$type) {
139 $definition[$key] = $definition[0];
141 unset($definition[$key][
'default']);
143 $definition[$key][
'type'] =
$type;
144 $definition[$key][
'mdb2type'] =
$type;
163 $table = $this->db_instance->quoteIdentifier($table,
true);
164 $query =
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
165 $index_name_pdo = $this->db_instance->getIndexName($index_name);
166 $result = $this->db_instance->query(sprintf(
$query, $this->db_instance->quote($index_name_pdo)));
170 $index_name = $index_name_pdo;
173 $result = $this->db_instance->query(sprintf(
$query, $this->db_instance->quote($index_name)));
176 $definition = array();
177 while (is_object($row =
$result->fetchObject())) {
178 $row = array_change_key_case((array) $row, CASE_LOWER);
180 $key_name = $row[
'key_name'];
183 if ($index_name == $key_name) {
184 if (!$row[
'non_unique']) {
187 $column_name = $row[
'column_name'];
188 $definition[
'fields'][$column_name] = array(
189 'position' => $colpos++,
191 if (!empty($row[
'collation'])) {
192 $definition[
'fields'][$column_name][
'sorting'] = ($row[
'collation'] ==
'A' ?
'ascending' :
'descending');
197 if (empty($definition[
'fields'])) {
198 throw new ilDatabaseException(
'it was not specified an existing table index (index does not exist)');
213 $constraint_name = strtolower($constraint_name);
214 $table = $this->db_instance->quoteIdentifier($table,
true);
215 $query =
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
217 if (strtolower($constraint_name) !=
'primary') {
218 $constraint_name_pdo = $this->db_instance->getIndexName($constraint_name);
219 $result = $this->db_instance->query(sprintf(
$query, $this->db_instance->quote($constraint_name_pdo)));
224 $constraint_name = strtolower($constraint_name_pdo);
228 $result = $this->db_instance->query(sprintf(
$query, $this->db_instance->quote($constraint_name)));
231 $definition = array();
232 while (is_object($row =
$result->fetchObject())) {
234 $row = array_change_key_case($row, CASE_LOWER);
235 $key_name = $row[
'key_name'];
236 if ($this->db_instance->options[
'portability'] ??
false) {
237 if (($this->db_instance->options[
'field_case'] ?? null) == CASE_LOWER) {
238 $key_name = strtolower($key_name);
240 $key_name = strtolower($key_name);
243 $key_name = strtolower($key_name);
244 if ($constraint_name == $key_name) {
245 if ($row[
'non_unique']) {
248 if (($row[
'key_name'] ??
'') ===
'PRIMARY') {
249 $definition[
'primary'] =
true;
251 $definition[
'unique'] =
true;
253 $column_name = $row[
'column_name'];
254 if ($this->db_instance->options[
'portability'] ??
false) {
255 if (($this->db_instance->options[
'field_case'] ?? null) == CASE_LOWER) {
256 $column_name = strtolower($column_name);
258 $column_name = strtoupper($column_name);
261 $definition[
'fields'][$column_name] = array(
262 'position' => $colpos++,
264 if (!empty($row[
'collation'])) {
265 $definition[
'fields'][$column_name][
'sorting'] = ($row[
'collation'] ==
'A' ?
'ascending' :
'descending');
270 if (empty($definition[
'fields'])) {
getTableFieldDefinition($table_name, $field_name)
getTableIndexDefinition($table, $index_name)
Class ilDatabaseException.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
foreach($_POST as $key=> $value) $res
__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...
getTriggerDefinition($trigger)
getTableConstraintDefinition($table, $constraint_name)