summaryrefslogtreecommitdiff
path: root/modules/simpletest/tests/database_test.test
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-09-03 19:06:55 +0000
committerDries Buytaert <dries@buytaert.net>2010-09-03 19:06:55 +0000
commit6f0d1797b552a3a09a1b559f46955ee9b8aae7ae (patch)
treeb2a7e507e6c2b4db422d7f0706000af615b1b9e0 /modules/simpletest/tests/database_test.test
parent13ff244505e8d13411c8acb5cd70bf02ed33eb56 (diff)
downloadbrdo-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.test66
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 {