Viewing File: /usr/share/phpmyadmin/templates/table/structure/display_structure.twig
{% extends 'table/page_with_secondary_tabs.twig' %}
{% block content %}
<form method="post" action="tbl_structure.php" name="fieldsForm" id="fieldsForm"
class="ajax{{ hide_structure_actions ? ' HideStructureActions' }}">
{{ get_hidden_inputs(db, table) }}
<input type="hidden" name="table_type" value=
{%- if db_is_system_schema -%}
"information_schema"
{%- elseif tbl_is_view -%}
"view"
{%- else -%}
"table"
{%- endif %}>
<div class="responsivetable">
<table id="tablestructure" class="data topmargin">
{# Table header #}
<thead>
<tr>
<th class="print_ignore"></th>
<th>#</th>
<th>{% trans 'Name' %}</th>
<th>{% trans 'Type' %}</th>
<th>{% trans 'Collation' %}</th>
<th>{% trans 'Attributes' %}</th>
<th>{% trans 'Null' %}</th>
<th>{% trans 'Default' %}</th>
{% if show_column_comments -%}
<th>{% trans 'Comments' %}</th>
{%- endif %}
<th>{% trans 'Extra' %}</th>
{# @see table/structure.js, function moreOptsMenuResize() #}
{% if not db_is_system_schema and not tbl_is_view %}
<th colspan="{{ show_icons('ActionLinksMode') ? '8' : '9' -}}
" class="action print_ignore">{% trans 'Action' %}</th>
{% endif %}
</tr>
</thead>
<tbody>
{# Table body #}
{% set rownum = 0 %}
{% for row in fields %}
{% set rownum = rownum + 1 %}
{% set extracted_columnspec = extracted_columnspecs[rownum] %}
{% set field_name = row['Field']|e %}
{# For column comments #}
{% set comments = row_comments[rownum] %}
{# Underline commented fields and display a hover-title (CSS only) #}
<tr>
<td class="center print_ignore">
<input type="checkbox" class="checkall" name="selected_fld[]" value="{{ row['Field'] }}" id="checkbox_row_{{ rownum }}">
</td>
<td class="right">{{ rownum }}</td>
<th class="nowrap">
<label for="checkbox_row_{{ rownum }}">
{% if displayed_fields[rownum].comment is defined %}
<span class="commented_column" title="{{ displayed_fields[rownum].comment }}">{{ displayed_fields[rownum].text }}</span>
{% else %}
{{ displayed_fields[rownum].text }}
{% endif %}
{{ displayed_fields[rownum].icon|raw }}
</label>
</th>
<td{{ 'set' != extracted_columnspec['type'] and 'enum' != extracted_columnspec['type'] ? ' class="nowrap"' }}>
<bdo dir="ltr" lang="en">
{{ extracted_columnspec['displayed_type']|raw }}
{% if relation_commwork and relation_mimework and browse_mime
and mime_map[row['Field']]['mimetype'] is defined %}
<br>{% trans 'Media (MIME) type:' %} {{ mime_map[row['Field']]['mimetype']|replace({'_': '/'})|lower }}
{% endif %}
</bdo>
</td>
<td>
{% if row['Collation'] is not empty %}
<dfn title="{{ collations[row['Collation']].description }}">{{ collations[row['Collation']].name }}</dfn>
{% endif %}
</td>
<td class="column_attribute nowrap">{{ attributes[rownum] }}</td>
<td>{{ row['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }}</td>
<td class="nowrap">
{% if row['Default'] is not null %}
{% if extracted_columnspec['type'] == 'bit' %}
{{ row['Default']|convert_bit_default_value }}
{% else %}
{{ row['Default'] }}
{% endif %}
{% elseif row['Null'] == 'YES' %}
<em>NULL</em>
{% else %}
<em>{% trans %}None{% context %}None for default{% endtrans %}</em>
{% endif %}
</td>
{% if show_column_comments %}
<td>
{{ comments }}
</td>
{% endif %}
<td class="nowrap">{{ row['Extra']|upper }}</td>
{% if not tbl_is_view and not db_is_system_schema %}
<td class="edit center print_ignore">
<a class="change_column_anchor ajax" href="tbl_structure.php
{{- url_query }}&field={{ row['Field']|url_encode }}&change_column=1">
{{ titles['Change']|raw }}
</a>
</td>
<td class="drop center print_ignore">
<a class="drop_column_anchor ajax" href="sql.php" data-post="{{ url_query }}&sql_query=
{{- ('ALTER TABLE ' ~ backquote(table)
~ ' DROP ' ~ backquote(row['Field']) ~ ';')|url_encode -}}
&dropped_column={{ row['Field']|url_encode }}&purge=1&message_to_show=
{{- ('Column %s has been dropped.'|trans|format(row['Field']|e))|url_encode }}">
{{ titles['Drop']|raw }}
</a>
</td>
{% endif %}
{% if not tbl_is_view and not db_is_system_schema %}
{% set type = extracted_columnspec['print_type'] is not empty ? extracted_columnspec['print_type'] %}
<td class="print_ignore">
<ul class="table-structure-actions resizable-menu">
{% if hide_structure_actions %}
<li class="submenu shown">
<a href="#" class="tab nowrap">{{ get_icon('b_more', 'More'|trans) }}</a>
<ul>
{% endif %}
{# Add primary #}
{% include 'table/structure/action_row_in_structure_table.twig' with {
'type': type,
'tbl_storage_engine': tbl_storage_engine,
'class': 'primary nowrap',
'has_field': primary and primary.hasColumn(field_name),
'has_link_class': true,
'url_query': url_query,
'primary': primary,
'syntax': 'ADD PRIMARY KEY',
'message': 'A primary key has been added on %s.'|trans,
'action': 'Primary',
'titles': titles,
'row': row,
'is_primary': true,
'table': table
} only %}
{# Add unique #}
{% include 'table/structure/action_row_in_structure_table.twig' with {
'type': type,
'tbl_storage_engine': tbl_storage_engine,
'class': 'add_unique unique nowrap',
'has_field': field_name in columns_with_unique_index,
'has_link_class': false,
'url_query': url_query,
'primary': primary,
'syntax': 'ADD UNIQUE',
'message': 'An index has been added on %s.'|trans,
'action': 'Unique',
'titles': titles,
'row': row,
'is_primary': false,
'table': table
} only %}
{# Add index #}
{% include 'table/structure/action_row_in_structure_table.twig' with {
'type': type,
'tbl_storage_engine': tbl_storage_engine,
'class': 'add_index nowrap',
'has_field': false,
'has_link_class': false,
'url_query': url_query,
'primary': primary,
'syntax': 'ADD INDEX',
'message': 'An index has been added on %s.'|trans,
'action': 'Index',
'titles': titles,
'row': row,
'is_primary': false,
'table': table
} only %}
{# Add spatial #}
{% set spatial_types = [
'geometry',
'point',
'linestring',
'polygon',
'multipoint',
'multilinestring',
'multipolygon',
'geomtrycollection'
] %}
{% include 'table/structure/action_row_in_structure_table.twig' with {
'type': type,
'tbl_storage_engine': tbl_storage_engine,
'class': 'spatial nowrap',
'has_field': type not in spatial_types and
(tbl_storage_engine == 'MYISAM' or mysql_int_version >= 50705),
'has_link_class': false,
'url_query': url_query,
'primary': primary,
'syntax': 'ADD SPATIAL',
'message': 'An index has been added on %s.'|trans,
'action': 'Spatial',
'titles': titles,
'row': row,
'is_primary': false,
'table': table
} only %}
{# FULLTEXT is possible on TEXT, CHAR and VARCHAR #}
<li class="fulltext nowrap">
{% if tbl_storage_engine is not empty and (
tbl_storage_engine == 'MYISAM'
or tbl_storage_engine == 'ARIA'
or tbl_storage_engine == 'MARIA'
or (tbl_storage_engine == 'INNODB' and mysql_int_version >= 50604)
) and ('text' in type or 'char' in type) %}
<a rel="samepage" class="ajax add_key add_fulltext_anchor" href="tbl_structure.php"
data-post="{{- url_query|raw }}&add_key=1&sql_query=
{{- ('ALTER TABLE ' ~ backquote(table)
~ ' ADD FULLTEXT(' ~ backquote(row['Field'])
~ ');')|url_encode }}&message_to_show=
{{- ('An index has been added on %s.'|trans|format(row['Field']|e))|url_encode }}">
{{ titles['IdxFulltext']|raw }}
</a>
{% else %}
{{ titles['NoIdxFulltext']|raw }}
{% endif %}
</li>
{# Distinct value action #}
<li class="browse nowrap">
<a href="sql.php" data-post="{{ url_query|raw }}&sql_query=
{{- ('SELECT COUNT(*) AS ' ~ backquote('Rows'|trans)
~ ', ' ~ backquote(row['Field'])
~ ' FROM ' ~ backquote(table)
~ ' GROUP BY ' ~ backquote(row['Field'])
~ ' ORDER BY ' ~ backquote(row['Field']))|url_encode -}}
&is_browse_distinct=1">
{{ titles['DistinctValues']|raw }}
</a>
</li>
{% if central_columns_work %}
<li class="browse nowrap">
{% if row['Field'] in central_list %}
<a href="#" class="central_columns remove_button">
{{ get_icon('centralColumns_delete', 'Remove from central columns'|trans) }}
</a>
{% else %}
<a href="#" class="central_columns add_button">
{{ get_icon('centralColumns_add', 'Add to central columns'|trans) }}
</a>
{% endif %}
</li>
{% endif %}
{% if hide_structure_actions %}
</ul>
</li>
{% endif %}
</ul>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="print_ignore">
{% include 'select_all.twig' with {
'pma_theme_image': pma_theme_image,
'text_dir': text_dir,
'form_name': 'fieldsForm'
} only %}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Browse'|trans,
'b_browse',
'browse'
) }}
{% if not tbl_is_view and not db_is_system_schema %}
{{ get_button_or_image(
'submit_mult',
'mult_submit change_columns_anchor ajax',
'Change'|trans,
'b_edit',
'change'
) }}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Drop'|trans,
'b_drop',
'drop'
) }}
{% if tbl_storage_engine != 'ARCHIVE' %}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Primary'|trans,
'b_primary',
'primary'
) }}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Unique'|trans,
'b_unique',
'unique'
) }}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Index'|trans,
'b_index',
'index'
) }}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Fulltext'|trans,
'b_ftext',
'ftext'
) }}
{% if tbl_storage_engine is not empty and (
tbl_storage_engine == 'MYISAM'
or tbl_storage_engine == 'ARIA'
or tbl_storage_engine == 'MARIA') %}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Fulltext'|trans,
'b_ftext',
'ftext'
) }}
{% endif %}
{% if central_columns_work %}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Add to central columns'|trans,
'centralColumns_add',
'add_to_central_columns'
) }}
{{ get_button_or_image(
'submit_mult',
'mult_submit',
'Remove from central columns'|trans,
'centralColumns_delete',
'remove_from_central_columns'
) }}
{% endif %}
{% endif %}
{% endif %}
</div>
</form>
<hr class="print_ignore">
<div id="move_columns_dialog" class="hide" title="{% trans 'Move columns' %}">
<p>{% trans 'Move the columns by dragging them up and down.' %}</p>
<form action="tbl_structure.php" name="move_column_form" id="move_column_form">
<div>
{{ get_hidden_inputs(db, table) }}
<ul></ul>
</div>
</form>
</div>
{# Work on the table #}
<div id="structure-action-links">
{% if tbl_is_view and not db_is_system_schema %}
{% set edit_view_url = 'view_create.php' ~ edit_view_url %}
{{ link_or_button(
edit_view_url,
get_icon('b_edit', 'Edit view'|trans, true)
) }}
{% endif %}
<a href="#" id="printView">{{ get_icon('b_print', 'Print'|trans, true) }}</a>
{% if not tbl_is_view and not db_is_system_schema %}
{# Only display propose table structure for MySQL < 8.0 #}
{% if mysql_int_version < 80000 or is_mariadb %}
<a href="sql.php" data-post="{{ url_query|raw }}&session_max_rows=all&sql_query=
{{- ('SELECT * FROM ' ~ backquote(table) ~ ' PROCEDURE ANALYSE()')|url_encode -}}
" style="margin-right: 0;">
{{ get_icon(
'b_tblanalyse',
'Propose table structure'|trans,
true
) }}
</a>
{{ show_mysql_docu('procedure_analyse') }}
{% endif %}
{% if is_active %}
<a href="tbl_tracking.php{{ url_query|raw }}">
{{ get_icon('eye', 'Track table'|trans, true) }}
</a>
{% endif %}
<a href="#" id="move_columns_anchor">
{{ get_icon('b_move', 'Move columns'|trans, true) }}
</a>
<a href="normalization.php{{ url_query|raw }}">
{{ get_icon('normalize', 'Normalize'|trans, true) }}
</a>
{% endif %}
{% if tbl_is_view and not db_is_system_schema %}
{% if is_active %}
<a href="tbl_tracking.php{{ url_query|raw }}">
{{ get_icon('eye', 'Track view'|trans, true) }}
</a>
{% endif %}
{% endif %}
</div>
{% if not tbl_is_view and not db_is_system_schema %}
<form method="post" action="tbl_addfield.php" id="addColumns" name="addColumns">
{{ get_hidden_inputs(db, table) }}
{% if show_icons('ActionLinksMode') %}
{{ get_image('b_insrow', 'Add column'|trans) }}
{% endif %}
{% set num_fields -%}
<input type="number" name="num_fields" value="1" onfocus="this.select()" min="1" required>
{%- endset %}
{{ 'Add %s column(s)'|trans|format(num_fields)|raw }}
<input type="hidden" name="field_where" value="after">
{# I tried displaying the drop-down inside the label but with Firefox the drop-down was blinking #}
<select name="after_field">
<option value="first" data-pos="first">
{% trans 'at beginning of table' %}
</option>
{% for one_column_name in columns_list %}
<option value="{{ one_column_name }}"
{{- loop.revindex0 == 0 ? ' selected="selected"' }}>
{{ 'after %s'|trans|format(one_column_name) }}
</option>
{% endfor %}
</select>
<input class="btn btn-primary" type="submit" value="{% trans 'Go' %}">
</form>
{% endif %}
{# Displays indexes #}
{% if not tbl_is_view and not db_is_system_schema
and 'ARCHIVE' != tbl_storage_engine %}
{{ displayIndexesHtml|raw }}
{% endif %}
{# Display partition details #}
{% if have_partitioning %}
{# Detect partitioning #}
{% if partition_names is not empty and partition_names[0] is not null %}
{% set first_partition = partitions[0] %}
{% set range_or_list = first_partition.getMethod() == 'RANGE'
or first_partition.getMethod() == 'RANGE COLUMNS'
or first_partition.getMethod() == 'LIST'
or first_partition.getMethod() == 'LIST COLUMNS' %}
{% set sub_partitions = first_partition.getSubPartitions() %}
{% set has_sub_partitions = first_partition.hasSubPartitions() %}
{% if has_sub_partitions %}
{% set first_sub_partition = sub_partitions[0] %}
{% endif %}
{% set action_icons = {
'ANALYZE': get_icon('b_search', 'Analyze'|trans),
'CHECK': get_icon('eye', 'Check'|trans),
'OPTIMIZE': get_icon('normalize', 'Optimize'|trans),
'REBUILD': get_icon('s_tbl', 'Rebuild'|trans),
'REPAIR': get_icon('b_tblops', 'Repair'|trans),
'TRUNCATE': get_icon('b_empty', 'Truncate'|trans),
} %}
{% if range_or_list %}
{% set action_icons = action_icons|merge({'DROP': get_icon('b_drop', 'Drop'|trans)}) %}
{% endif %}
{# open Slider Effect div #}
{% include 'div_for_slider_effect.twig' with {
'id': 'partitions-2',
'message': 'Partitions'|trans,
'initial_sliders_state': default_sliders_state
} only %}
{% set remove_sql = 'ALTER TABLE ' ~ backquote(table) ~ ' REMOVE PARTITIONING' %}
{% set remove_url = 'sql.php' ~ url_query ~ '&sql_query=' ~ remove_sql|url_encode %}
{% include 'table/structure/display_partitions.twig' with {
'db': db,
'table': table,
'url_query': url_query,
'partitions': partitions,
'partition_method': first_partition.getMethod(),
'partition_expression': first_partition.getExpression(),
'has_description': first_partition.getDescription() is not empty,
'has_sub_partitions': has_sub_partitions,
'sub_partition_method': has_sub_partitions ? first_sub_partition.getMethod(),
'sub_partition_expression': has_sub_partitions ? first_sub_partition.getExpression(),
'action_icons': action_icons,
'range_or_list': range_or_list,
'remove_url': remove_url
} only %}
{% else %}
{% include 'table/structure/display_partitions.twig' with {
'db': db,
'table': table
} only %}
{% endif %}
{# For closing Slider effect div #}
</div>
{% endif %}
{# Displays Space usage and row statistics #}
{% if show_stats %}
{{ table_stats|raw }}
{% endif %}
<div class="clearfloat"></div>
{% endblock %}
Back to Directory
File Manager