diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-09-03 19:06:55 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-09-03 19:06:55 +0000 |
commit | 6f0d1797b552a3a09a1b559f46955ee9b8aae7ae (patch) | |
tree | b2a7e507e6c2b4db422d7f0706000af615b1b9e0 /modules/simpletest/tests/database_test.test | |
parent | 13ff244505e8d13411c8acb5cd70bf02ed33eb56 (diff) | |
download | brdo-6f0d1797b552a3a09a1b559f46955ee9b8aae7ae.tar.gz brdo-6f0d1797b552a3a09a1b559f46955ee9b8aae7ae.tar.bz2 |
- Patch #886970 by jhodgdon, Crell, Damien Tournoud: DB API putting wrong db placeholders in complex queries.
Diffstat (limited to 'modules/simpletest/tests/database_test.test')
-rw-r--r-- | modules/simpletest/tests/database_test.test | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test index 89b28537a..16199c345 100644 --- a/modules/simpletest/tests/database_test.test +++ b/modules/simpletest/tests/database_test.test @@ -2030,6 +2030,72 @@ class DatabaseSelectComplexTestCase extends DatabaseTestCase { $this->assertEqual($crowded_job->job, $crowded_job->otherjob, t('Correctly joined same table twice.')); $this->assertNotEqual($crowded_job->name, $crowded_job->othername, t('Correctly joined same table twice.')); } + +} + +/** + * Test more complex select statements, part 2. + */ +class DatabaseSelectComplexTestCase2 extends DatabaseTestCase { + + public static function getInfo() { + return array( + 'name' => 'Select tests, complex 2', + 'description' => 'Test the Select query builder with even more complex queries.', + 'group' => 'Database', + ); + } + + function setUp() { + DrupalWebTestCase::setUp('database_test', 'node_access_test'); + + $schema['test'] = drupal_get_schema('test'); + $schema['test_people'] = drupal_get_schema('test_people'); + $schema['test_one_blob'] = drupal_get_schema('test_one_blob'); + $schema['test_two_blobs'] = drupal_get_schema('test_two_blobs'); + $schema['test_task'] = drupal_get_schema('test_task'); + + $this->installTables($schema); + + $this->addSampleData(); + } + + /** + * Test that we can join on a query. + */ + function testJoinSubquery() { + $acct = $this->drupalCreateUser(array('access content')); + $this->drupalLogin($acct); + + $query = db_select('test_task', 'tt', array('target' => 'slave')); + $query->addExpression('tt.pid + 1', 'abc'); + $query->condition('priority', 1, '>'); + $query->condition('priority', 100, '<'); + + $subquery = db_select('test', 'tp'); + $subquery->join('test_one_blob', 'tpb', 'tp.id = tpb.id'); + $subquery->join('node', 'n', 'tp.id = n.nid'); + $subquery->addTag('node_access'); + $subquery->addMetaData('account', $acct); + $subquery->addField('tp', 'id'); + $subquery->condition('age', 5, '>'); + $subquery->condition('age', 500, '<'); + + $query->leftJoin($subquery, 'sq', 'tt.pid = sq.id'); + $query->join('test_one_blob', 'tb3', 'tt.pid = tb3.id'); + + // Construct the query string. + // This is the same sequence that SelectQuery::execute() goes through. + $query->preExecute(); + $query->getArguments(); + $str = (string) $query; + + // Verify that the string only has one copy of condition placeholder 0. + debug($str); + $pos = strpos($str, 'db_condition_placeholder_0', 0); + $pos2 = strpos($str, 'db_condition_placeholder_0', $pos + 1); + $this->assertFalse($pos2, "Condition placeholder is not repeated"); + } } class DatabaseSelectPagerDefaultTestCase extends DatabaseTestCase { |