Skip to content

Commit

Permalink
Refactor: we had three similar functions, refactored into just one.
Browse files Browse the repository at this point in the history
Also, these functions returned false, or a string containing the type,
but the string was only used to indirectly mean a true value; now
we explicitely return true in this case.

Signed-off-by: Marc Delisle <marc@infomarc.info>
  • Loading branch information
lem9 committed Oct 4, 2014
1 parent 4e68ada commit 03debd0
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 103 deletions.
87 changes: 24 additions & 63 deletions libraries/insert_edit.lib.php
Expand Up @@ -267,9 +267,19 @@ function PMA_analyzeTableColumnsArray($column, $comments_map, $timestamp_seen)
$column['True_Type'] = preg_replace('@\(.*@s', '', $column['Type']);
$column['len'] = preg_match('@float|double@', $column['Type']) ? 100 : -1;
$column['Field_title'] = PMA_getColumnTitle($column, $comments_map);
$column['is_binary'] = PMA_isColumnBinary($column);
$column['is_blob'] = PMA_isColumnBlob($column);
$column['is_char'] = PMA_isColumnChar($column);
$column['is_binary'] = PMA_isColumn(
$column,
array('binary', 'varbinary')
);
$column['is_blob'] = PMA_isColumn(
$column,
array('blob', 'tinyblob', 'mediumblob', 'longblob')
);
$column['is_char'] = PMA_isColumn(
$column,
array('char', 'varchar')
);

list($column['pma_type'], $column['wrap'], $column['first_timestamp'])
= PMA_getEnumSetAndTimestampColumns($column, $timestamp_seen);

Expand All @@ -296,77 +306,28 @@ function PMA_getColumnTitle($column, $comments_map)
}

/**
* check whether the column is a binary
*
* @param array $column description of column in given table
*
* @return boolean If check to ensure types such as "enum('one','two','binary',..)"
* or "enum('one','two','varbinary',..)" are not categorized as
* binary.
*/
function PMA_isColumnBinary($column)
{
/** @var PMA_String $pmaString */
$pmaString = $GLOBALS['PMA_String'];

// The type column.
// Fix for bug #3152931 'ENUM and SET cannot have "Binary" option'
if ($pmaString->stripos($column['Type'], 'binary') === 0
|| $pmaString->stripos($column['Type'], 'varbinary') === 0
) {
return stristr($column['Type'], 'binary');
} else {
return false;
}

}

/**
* check whether the column is a blob
* check whether the column is of a certain type
* the goal is to ensure that types such as "enum('one','two','binary',..)"
* or "enum('one','two','varbinary',..)" are not categorized as binary
*
* @param array $column description of column in given table
* @param array $types the types to verify
*
* @return boolean If check to ensure types such as "enum('one','two','blob',..)"
* or "enum('one','two','tinyblob',..)" etc. are not categorized
* as blob.
* @return boolean whether the column's type if one of the $types
*/
function PMA_isColumnBlob($column)
function PMA_isColumn($column, $types)
{
/** @var PMA_String $pmaString */
$pmaString = $GLOBALS['PMA_String'];

if ($pmaString->stripos($column['Type'], 'blob') === 0
|| $pmaString->stripos($column['Type'], 'tinyblob') === 0
|| $pmaString->stripos($column['Type'], 'mediumblob') === 0
|| $pmaString->stripos($column['Type'], 'longblob') === 0
) {
return stristr($column['Type'], 'blob');
} else {
return false;
foreach ($types as $one_type) {
if ($pmaString->stripos($column['Type'], $one_type) === 0) {
return true;
}
}
return false;
}

/**
* check is table column char
*
* @param array $column description of column in given table
*
* @return boolean If check to ensure types such as "enum('one','two','char',..)" or
* "enum('one','two','varchar',..)" are not categorized as char.
*/
function PMA_isColumnChar($column)
{
/** @var PMA_String $pmaString */
$pmaString = $GLOBALS['PMA_String'];

if ($pmaString->stripos($column['Type'], 'char') === 0
|| $pmaString->stripos($column['Type'], 'varchar') === 0
) {
return stristr($column['Type'], 'char');
} else {
return false;
}
}
/**
* Retrieve set, enum, timestamp table columns
*
Expand Down
5 changes: 4 additions & 1 deletion tbl_change.php
Expand Up @@ -135,7 +135,10 @@

$has_blob_field = false;
foreach ($table_columns as $column) {
if (PMA_isColumnBlob($column)) {
if (PMA_isColumn(
$column,
array('blob', 'tinyblob', 'mediumblob', 'longblob')
)) {
$has_blob_field = true;
break;
}
Expand Down
66 changes: 27 additions & 39 deletions test/libraries/PMA_insert_edit_test.php
Expand Up @@ -451,69 +451,57 @@ public function testGetColumnTitle()
}

/**
* Test for PMA_isColumnBinary
* Test for PMA_isColumn
*
* @return void
*/
public function testIsColumnBinary()
public function testIsColumn()
{
$column = array();
$types = array('binary', 'varbinary');

$column['Type'] = 'binaryfoo';
$this->assertEquals('binaryfoo', PMA_isColumnBinary($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'Binaryfoo';
$this->assertEquals('Binaryfoo', PMA_isColumnBinary($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'varbinaryfoo';
$this->assertEquals('binaryfoo', PMA_isColumnBinary($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'barbinaryfoo';
$this->assertFalse(PMA_isColumnBinary($column));
}
$this->assertFalse(PMA_isColumn($column, $types));

$types = array('char', 'varchar');

$column['Type'] = 'char(10)';
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'VarChar(20)';
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'foochar';
$this->assertFalse(PMA_isColumn($column, $types));

$types = array('blob', 'tinyblob', 'mediumblob', 'longblob');

/**
* Test for PMA_isColumnBlob
*
* @return void
*/
public function testIsColumnBlob()
{
$column = array();
$column['Type'] = 'blob';
$this->assertEquals('blob', PMA_isColumnBlob($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'bloB';
$this->assertEquals('bloB', PMA_isColumnBlob($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'mediumBloB';
$this->assertEquals('BloB', PMA_isColumnBlob($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'tinyblobabc';
$this->assertEquals('blobabc', PMA_isColumnBlob($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'longblob';
$this->assertEquals('blob', PMA_isColumnBlob($column));
$this->assertTrue(PMA_isColumn($column, $types));

$column['Type'] = 'foolongblobbar';
$this->assertFalse(PMA_isColumnBlob($column));
}

/**
* Test for PMA_iscolumnchar
*
* @return void
*/
public function testIsColumnChar()
{
$column = array();
$column['Type'] = 'char(10)';
$this->assertEquals('char(10)', PMA_iscolumnchar($column));

$column['Type'] = 'VarChar(20)';
$this->assertEquals('Char(20)', PMA_iscolumnchar($column));

$column['Type'] = 'foochar';
$this->assertFalse(PMA_iscolumnchar($column));
$this->assertFalse(PMA_isColumn($column, $types));
}

/**
Expand Down

0 comments on commit 03debd0

Please sign in to comment.