Project

General

Profile

Feature #21944 » 13209_dbal_v2.diff

Administrator Admin, 2010-02-07 13:56

View differences:

class.ux_t3lib_sqlparser.php (working copy)
* Compiles an INSERT statement from components array
*
* @param array Array of SQL query components
* @return string SQL INSERT query
* @return string SQL INSERT query / array
* @see parseINSERT()
*/
function compileINSERT($components) {
......
$query = parent::compileINSERT($components);
break;
case 'adodb':
$values = array();
if (isset($components['VALUES_ONLY']) && is_array($components['VALUES_ONLY'])) {
$fields = $GLOBALS['TYPO3_DB']->cache_fieldType[$components['TABLE']];
$valuesComponents = $components['EXTENDED'] === '1' ? $components['VALUES_ONLY'] : array($components['VALUES_ONLY']);
$tableFields = array_keys($GLOBALS['TYPO3_DB']->cache_fieldType[$components['TABLE']]);
} else {
$valuesComponents = $components['EXTENDED'] === '1' ? $components['FIELDS'] : array($components['FIELDS']);
$tableFields = array_keys($valuesComponents[0]);
}
foreach ($valuesComponents as $valuesComponent) {
$fields = array();
$fc = 0;
foreach ($fields as $fn => $fd) {
$query[$fn] = $components['VALUES_ONLY'][$fc++][0];
foreach ($valuesComponent as $fV) {
$fields[$tableFields[$fc++]] = $fV[0];
}
} else {
// Initialize:
foreach ($components['FIELDS'] as $fN => $fV) {
$query[$fN]=$fV[0];
}
$values[] = $fields;
}
$query = count($values) === 1 ? $values[0] : $values;
break;
}
tests/sqlparser_general_testcase.php (working copy)
$this->assertEquals($expected, $insert);
}
/**
* @test
*/
public function canParseInsertWithFields() {
$parseString = 'INSERT INTO static_territories (uid, pid, tr_iso_nr, tr_parent_iso_nr, tr_name_en) ';
$parseString .= "VALUES ('1', '0', '2', '0', 'Africa');";
$components = $this->fixture->_callRef('parseINSERT', $parseString);
$this->assertTrue(is_array($components), $components);
$insert = $this->cleanSql($this->fixture->compileINSERT($components));
$expected = 'INSERT INTO static_territories (uid, pid, tr_iso_nr, tr_parent_iso_nr, tr_name_en) ';
$expected .= "VALUES ('1', '0', '2', '0', 'Africa')";
$this->assertEquals($expected, $insert);
}
/**
* @test
* http://bugs.typo3.org/view.php?id=13209
*/
public function canParseExtendedInsert() {
$parseString = "INSERT INTO static_territories VALUES ('1', '0', '2', '0', 'Africa'),('2', '0', '9', '0', 'Oceania')," .
"('3', '0', '19', '0', 'Americas'),('4', '0', '142', '0', 'Asia');";
$components = $this->fixture->_callRef('parseINSERT', $parseString);
$this->assertTrue(is_array($components), $components);
$insert = $this->cleanSql($this->fixture->compileINSERT($components));
$expected = "INSERT INTO static_territories VALUES ('1', '0', '2', '0', 'Africa'), ('2', '0', '9', '0', 'Oceania'), " .
"('3', '0', '19', '0', 'Americas'), ('4', '0', '142', '0', 'Asia')";
$this->assertEquals($expected, $insert);
}
/**
* @test
* http://bugs.typo3.org/view.php?id=13209
*/
public function canParseExtendedInsertWithFields() {
$parseString = 'INSERT INTO static_territories (uid, pid, tr_iso_nr, tr_parent_iso_nr, tr_name_en) ';
$parseString .= "VALUES ('1', '0', '2', '0', 'Africa'),('2', '0', '9', '0', 'Oceania');";
$components = $this->fixture->_callRef('parseINSERT', $parseString);
$this->assertTrue(is_array($components), $components);
$insert = $this->cleanSql($this->fixture->compileINSERT($components));
$expected = 'INSERT INTO static_territories (uid, pid, tr_iso_nr, tr_parent_iso_nr, tr_name_en) ';
$expected .= "VALUES ('1', '0', '2', '0', 'Africa'), ('2', '0', '9', '0', 'Oceania')";
$this->assertEquals($expected, $insert);
}
///////////////////////////////////////
// Tests concerning JOINs
///////////////////////////////////////
tests/db_oracle_testcase.php (working copy)
$this->assertEquals($expected, $query);
}
/**
* @test
*/
public function canCompileInsertWithFields() {
$parseString = 'INSERT INTO static_territories (uid, pid, tr_iso_nr, tr_parent_iso_nr, tr_name_en) ';
$parseString .= "VALUES ('1', '0', '2', '0', 'Africa');";
$components = $GLOBALS['TYPO3_DB']->SQLparser->_callRef('parseINSERT', $parseString);
$this->assertTrue(is_array($components), $components);
$insert = $GLOBALS['TYPO3_DB']->SQLparser->_callRef('compileINSERT', $components);
$expected = array(
'uid' => '1',
'pid' => '0',
'tr_iso_nr' => '2',
'tr_parent_iso_nr' => '0',
'tr_name_en' => 'Africa',
);
$this->assertEquals($expected, $insert);
}
/**
* @test
* http://bugs.typo3.org/view.php?id=13209
*/
public function canCompileExtendedInsert() {
$parseString = "INSERT INTO static_territories VALUES ('1', '0', '2', '0', 'Africa'),('2', '0', '9', '0', 'Oceania')," .
"('3', '0', '19', '0', 'Americas'),('4', '0', '142', '0', 'Asia');";
$components = $GLOBALS['TYPO3_DB']->SQLparser->_callRef('parseINSERT', $parseString);
$this->assertTrue(is_array($components), $components);
$insert = $GLOBALS['TYPO3_DB']->SQLparser->_callRef('compileINSERT', $components);
$this->assertEquals(4, count($insert));
for ($i = 0; $i < count($insert); $i++) {
foreach (t3lib_div::trimExplode(',', 'uid,pid,tr_iso_nr,tr_parent_iso_nr,tr_name_en') as $field) {
$this->assertTrue(isset($insert[$i][$field]), 'Could not find ' . $field . ' column');
}
}
}
///////////////////////////////////////
// Tests concerning quoting
///////////////////////////////////////
(3-3/3)