/**
     * @dataProvider dataProvider
     */
    function testConvert_bit_default_value_test($bit, $val)
    {
        $this->assertEquals(
            $val, PMA_Util::convertBitDefaultValue($bit)
        );

    }
if (isset($_REQUEST['submit_num_fields'])) {
    //if adding new fields, set regenerate to keep the original values
    $regenerate = 1;
}
$foreigners = PMA_getForeigners($db, $table, '', 'foreign');
$child_references = PMA_getChildReferences($db, $table);
for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
    if (!empty($regenerate)) {
        list($columnMeta, $submit_length, $submit_attribute, $submit_default_current_timestamp, $comments_map, $mime_map) = PMA_handleRegeneration($columnNumber, isset($available_mime) ? $mime_map : null, $comments_map, $mime_map);
    } elseif (isset($fields_meta[$columnNumber])) {
        $columnMeta = PMA_getColumnMetaForDefault($fields_meta[$columnNumber], isset($analyzed_sql[0]['create_table_fields'][$fields_meta[$columnNumber]['Field']]['default_value']));
    }
    if (isset($columnMeta['Type'])) {
        $extracted_columnspec = PMA_Util::extractColumnSpec($columnMeta['Type']);
        if ($extracted_columnspec['type'] == 'bit') {
            $columnMeta['Default'] = PMA_Util::convertBitDefaultValue($columnMeta['Default']);
        }
        $type = $extracted_columnspec['type'];
        $length = $extracted_columnspec['spec_in_brackets'];
    } else {
        // creating a column
        $columnMeta['Type'] = '';
        $type = '';
        $length = '';
        $extracted_columnspec = array();
    }
    // some types, for example longtext, are reported as
    // "longtext character set latin7" when their charset and / or collation
    // differs from the ones of the corresponding database.
    $tmp = mb_strpos($type, 'character set');
    if ($tmp) {
Ejemplo n.º 3
0
/**
 * Function to get html for field
 *
 * @param int    $index index
 * @param array  $field field
 * @param string $style style
 *
 * @return string
 */
function PMA_getHtmlForField($index, $field, $style)
{
    $html = '<tr class="noclick ' . $style . '">';
    $html .= '<td>' . $index . '</td>';
    $html .= '<td><b>' . htmlspecialchars($field['Field']);
    if ($field['Key'] == 'PRI') {
        $html .= ' ' . PMA_Util::getImage('b_primary.png', __('Primary'));
    } elseif (!empty($field['Key'])) {
        $html .= ' ' . PMA_Util::getImage('bd_primary.png', __('Index'));
    }
    $html .= '</b></td>';
    $html .= "\n";
    $html .= '<td>' . htmlspecialchars($field['Type']) . '</td>';
    $html .= '<td>' . htmlspecialchars($field['Collation']) . '</td>';
    $html .= '<td>' . ($field['Null'] == 'YES' ? __('Yes') : __('No')) . '</td>';
    $html .= '<td>';
    if (isset($field['Default'])) {
        $extracted_columnspec = PMA_Util::extractColumnSpec($field['Type']);
        if ($extracted_columnspec['type'] == 'bit') {
            // here, $field['Default'] contains something like b'010'
            $html .= PMA_Util::convertBitDefaultValue($field['Default']);
        } else {
            $html .= htmlspecialchars($field['Default']);
        }
    } else {
        if ($field['Null'] == 'YES') {
            $html .= '<i>NULL</i>';
        } else {
            $html .= '<i>' . _pgettext('None for default', 'None') . '</i>';
        }
    }
    $html .= '</td>';
    $html .= '<td>' . htmlspecialchars($field['Extra']) . '</td>';
    $html .= '<td>' . htmlspecialchars($field['Comment']) . '</td>';
    $html .= '</tr>';
    return $html;
}
Ejemplo n.º 4
0
/**
 * display default values
 *
 * @param array   $column          description of column in given table
 * @param boolean $real_null_value whether column value null or not null
 *
 * @return array $real_null_value, $data, $special_chars,
 *               $backup_field, $special_chars_encoded
 */
function PMA_getSpecialCharsAndBackupFieldForInsertingMode($column, $real_null_value)
{
    if (!isset($column['Default'])) {
        $column['Default'] = '';
        $real_null_value = true;
        $data = '';
    } else {
        $data = $column['Default'];
    }
    $trueType = $column['True_Type'];
    if ($trueType == 'bit') {
        $special_chars = PMA_Util::convertBitDefaultValue($column['Default']);
    } elseif (substr($trueType, 0, 9) == 'timestamp' || $trueType == 'datetime' || $trueType == 'time') {
        $special_chars = PMA_Util::addMicroseconds($column['Default']);
    } elseif ($trueType == 'binary' || $trueType == 'varbinary') {
        $special_chars = bin2hex($column['Default']);
    } else {
        $special_chars = htmlspecialchars($column['Default']);
    }
    $backup_field = '';
    $special_chars_encoded = PMA_Util::duplicateFirstNewline($special_chars);
    return array($real_null_value, $data, $special_chars, $backup_field, $special_chars_encoded);
}
Ejemplo n.º 5
0
/**
 * Get HTML for structure table's rows and return $odd_row parameter also
 * For "Action" Column, this function contains only HTML code for "Change"
 * and "Drop"
 *
 * @param array   $row                  current row
 * @param string  $rownum               row number
 * @param string  $displayed_field_name displayed field name
 * @param string  $type_nowrap          type nowrap
 * @param array   $extracted_columnspec associative array containing type,
 *                                      spec_in_brackets and possibly
 *                                      enum_set_values (another array)
 * @param string  $type_mime            mime type
 * @param string  $field_charset        field charset
 * @param string  $attribute            attribute (BINARY, UNSIGNED,
 *                                      UNSIGNED ZEROFILL,
 *                                      on update CURRENT_TIMESTAMP)
 * @param boolean $tbl_is_view          whether tables is view or not
 * @param boolean $db_is_system_schema  whether db is information schema or not
 * @param string  $url_query            url query
 * @param string  $field_encoded        field encoded
 * @param array   $titles               titles array
 * @param string  $table                table
 *
 * @return array ($html_output, $odd_row)
 */
function PMA_getHtmlTableStructureRow($row, $rownum, $displayed_field_name, $type_nowrap, $extracted_columnspec, $type_mime, $field_charset, $attribute, $tbl_is_view, $db_is_system_schema, $url_query, $field_encoded, $titles, $table)
{
    $html_output = '<td class="center">' . '<input type="checkbox" class="checkall" name="selected_fld[]" ' . 'value="' . htmlspecialchars($row['Field']) . '" ' . 'id="checkbox_row_' . $rownum . '"/>' . '</td>';
    $html_output .= '<td class="right">' . $rownum . '</td>';
    $html_output .= '<th class="nowrap">' . '<label for="checkbox_row_' . $rownum . '">' . $displayed_field_name . '</label>' . '</th>';
    $html_output .= '<td' . $type_nowrap . '>' . '<bdo dir="ltr" lang="en">' . $extracted_columnspec['displayed_type'] . $type_mime . '</bdo></td>';
    $html_output .= '<td>' . (empty($field_charset) ? '' : '<dfn title="' . PMA_getCollationDescr($field_charset) . '">' . $field_charset . '</dfn>') . '</td>';
    $html_output .= '<td class="column_attribute nowrap">' . $attribute . '</td>';
    $html_output .= '<td>' . ($row['Null'] == 'YES' ? __('Yes') : __('No')) . '  </td>';
    $html_output .= '<td class="nowrap">';
    if (isset($row['Default'])) {
        if ($extracted_columnspec['type'] == 'bit') {
            // here, $row['Default'] contains something like b'010'
            $html_output .= PMA_Util::convertBitDefaultValue($row['Default']);
        } else {
            $html_output .= $row['Default'];
        }
    } else {
        $html_output .= '<i>' . _pgettext('None for default', 'None') . '</i>';
    }
    $html_output .= '</td>';
    $html_output .= '<td class="nowrap">' . strtoupper($row['Extra']) . '</td>';
    $html_output .= PMA_getHtmlForDropColumn($tbl_is_view, $db_is_system_schema, $url_query, $field_encoded, $titles, $table, $row);
    return $html_output;
}
/**
 * Function to get html for the default column
 *
 * @param int    $columnNumber              column number
 * @param int    $ci                        cell index
 * @param int    $ci_offset                 cell index offset
 * @param string $type_upper                type upper
 * @param string $default_current_timestamp default current timestamp
 * @param array  $columnMeta                column meta
 *
 * @return string
 */
function PMA_getHtmlForColumnDefault($columnNumber, $ci, $ci_offset, $type_upper, $default_current_timestamp, $columnMeta)
{
    // here we put 'NONE' as the default value of drop-down; otherwise
    // users would have problems if they forget to enter the default
    // value (example, for an INT)
    $default_options = array('NONE' => _pgettext('for default', 'None'), 'USER_DEFINED' => __('As defined:'), 'NULL' => 'NULL', 'CURRENT_TIMESTAMP' => 'CURRENT_TIMESTAMP');
    // for a TIMESTAMP, do not show the string "CURRENT_TIMESTAMP" as a default
    // value
    if ($type_upper == 'TIMESTAMP' && !empty($default_current_timestamp) && isset($columnMeta['Default'])) {
        $columnMeta['Default'] = '';
    }
    if ($type_upper == 'BIT') {
        $columnMeta['DefaultValue'] = PMA_Util::convertBitDefaultValue($columnMeta['DefaultValue']);
    }
    $html = '<select name="field_default_type[' . $columnNumber . ']" id="field_' . $columnNumber . '_' . ($ci - $ci_offset) . '" class="default_type">';
    foreach ($default_options as $key => $value) {
        $html .= '<option value="' . $key . '"';
        // is only set when we go back to edit a field's structure
        if (isset($columnMeta['DefaultType']) && $columnMeta['DefaultType'] == $key) {
            $html .= ' selected="selected"';
        }
        $html .= ' >' . $value . '</option>';
    }
    $html .= '</select>';
    $html .= '<br />';
    $value = isset($columnMeta['DefaultValue']) ? htmlspecialchars($columnMeta['DefaultValue']) : '';
    if ($GLOBALS['cfg']['CharEditing'] == 'textarea') {
        $html .= '<textarea' . ' name="field_default_value[' . $columnNumber . ']" cols="15"' . ' class="textfield default_value">' . $value . '</textarea>';
    } else {
        $html .= '<input type="text"' . ' name="field_default_value[' . $columnNumber . ']" size="12"' . ' value="' . $value . '"' . ' class="textfield default_value" />';
    }
    return $html;
}
Ejemplo n.º 7
0
/**
 * display default values
 *
 * @param type    $column          description of column in given table
 * @param boolean $real_null_value whether column value null or not null
 *
 * @return array $real_null_value, $data, $special_chars,
 *               $backup_field, $special_chars_encoded
 */
function PMA_getSpecialCharsAndBackupFieldForInsertingMode($column, $real_null_value)
{
    if (!isset($column['Default'])) {
        $column['Default'] = '';
        $real_null_value = true;
        $data = '';
    } else {
        $data = $column['Default'];
    }
    if ($column['True_Type'] == 'bit') {
        $special_chars = PMA_Util::convertBitDefaultValue($column['Default']);
    } elseif (substr($column['True_Type'], 0, 9) == 'timestamp' || $column['True_Type'] == 'datetime' || $column['True_Type'] == 'time') {
        $special_chars = PMA_Util::addMicroseconds($column['Default']);
    } else {
        $special_chars = htmlspecialchars($column['Default']);
    }
    $backup_field = '';
    $special_chars_encoded = PMA_Util::duplicateFirstNewline($special_chars);
    // this will select the UNHEX function while inserting
    if (($column['is_binary'] || $column['is_blob'] && !$GLOBALS['cfg']['ProtectBinary']) && (isset($_SESSION['tmpval']['display_binary_as_hex']) && $_SESSION['tmpval']['display_binary_as_hex']) && $GLOBALS['cfg']['ShowFunctionFields']) {
        $column['display_binary_as_hex'] = true;
    }
    return array($real_null_value, $data, $special_chars, $backup_field, $special_chars_encoded);
}
Ejemplo n.º 8
0
        echo '<tr class="noclick ' . $style . '">';
        if ($field['Key'] == 'PRI') {
            echo '<td><b><u>' . htmlspecialchars($field['Field']) . '</u></b></td>';
        } else {
            echo '<td><b>' . htmlspecialchars($field['Field']) . '</b></td>';
        }
        echo "\n";
        echo '<td>' . htmlspecialchars($field['Type']) . '</td>';
        echo '<td>' . htmlspecialchars($field['Collation']) . '</td>';
        echo '<td>' . (($field['Null'] == 'YES') ? __('Yes') : __('No')) . '</td>';
        echo '<td>';
        if (isset($field['Default'])) {
            $extracted_columnspec = PMA_Util::extractColumnSpec($field['Type']);
            if ($extracted_columnspec['type'] == 'bit') {
                // here, $field['Default'] contains something like b'010'
                echo PMA_Util::convertBitDefaultValue($field['Default']);
            } else {
                echo htmlspecialchars($field['Default']);
            }
        } else {
            if ($field['Null'] == 'YES') {
                echo '<i>NULL</i>';
            } else {
                echo '<i>' . _pgettext('None for default', 'None') . '</i>';
            }
        }
        echo '</td>';
        echo '<td>' . htmlspecialchars($field['Extra']) . '</td>';
        echo '<td>' . htmlspecialchars($field['Comment']) . '</td>';
        echo '</tr>';
 $ci++;
 // column default
 // old column default
 if ($is_backup) {
     $_form_params['field_default_orig[' . $i . ']'] = isset($row['Default']) ? $row['Default'] : '';
 }
 // here we put 'NONE' as the default value of drop-down; otherwise
 // users would have problems if they forget to enter the default
 // value (example, for an INT)
 $default_options = array('NONE' => _pgettext('for default', 'None'), 'USER_DEFINED' => __('As defined:'), 'NULL' => 'NULL', 'CURRENT_TIMESTAMP' => 'CURRENT_TIMESTAMP');
 // for a TIMESTAMP, do not show the string "CURRENT_TIMESTAMP" as a default value
 if ($type_upper == 'TIMESTAMP' && !empty($default_current_timestamp) && isset($row['Default'])) {
     $row['Default'] = '';
 }
 if ($type_upper == 'BIT') {
     $row['DefaultValue'] = PMA_Util::convertBitDefaultValue($row['DefaultValue']);
 }
 $content_cells[$i][$ci] = '<select name="field_default_type[' . $i . ']" id="field_' . $i . '_' . ($ci - $ci_offset) . '" class="default_type">';
 foreach ($default_options as $key => $value) {
     $content_cells[$i][$ci] .= '<option value="' . $key . '"';
     // is only set when we go back to edit a field's structure
     if (isset($row['DefaultType']) && $row['DefaultType'] == $key) {
         $content_cells[$i][$ci] .= ' selected="selected"';
     }
     $content_cells[$i][$ci] .= ' >' . $value . '</option>';
 }
 $content_cells[$i][$ci] .= '</select>';
 $content_cells[$i][$ci] .= '<br />';
 $content_cells[$i][$ci] .= '<input type="text"' . ' name="field_default_value[' . $i . ']" size="12"' . ' value="' . (isset($row['DefaultValue']) ? htmlspecialchars($row['DefaultValue']) : '') . '"' . ' class="textfield default_value" />';
 $ci++;
 // column collation
 /**
  * Test for convertBitDefaultValue
  *
  * @param string $bit Value
  * @param string $val Expected value
  *
  * @return void
  *
  * @dataProvider dataProvider
  */
 public function testConvertBitDefaultValueTest($bit, $val)
 {
     $this->assertEquals($val, PMA_Util::convertBitDefaultValue($bit));
 }